@crewx/sdk 0.9.0-rc.100 → 0.9.0-rc.101
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/agent/agent-list-view.d.ts +19 -0
- package/dist/esm/index.js +121 -118
- package/dist/esm/plugins/index.js +46 -46
- package/dist/esm/repository/index.js +51 -51
- package/dist/facade/Crewx.d.ts +10 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +123 -120
- package/dist/lifecycle/task-stop.d.ts +20 -1
- package/dist/plugins/index.d.ts +1 -1
- package/dist/plugins/index.js +44 -44
- package/dist/plugins/sqlite-tracing.d.ts +11 -0
- package/dist/repository/index.js +51 -51
- package/dist/repository/task.repository.d.ts +9 -0
- package/dist/template/helpers/exec.browser.d.ts +1 -1
- package/dist/template/helpers/exec.d.ts +1 -1
- package/dist/template/types.d.ts +7 -0
- package/package.json +1 -1
package/dist/plugins/index.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
'use strict';var fs$1=require('fs'),
|
|
1
|
+
'use strict';var fs$1=require('fs'),Te=require('path'),$o=require('os'),crypto=require('crypto'),sqliteCore=require('drizzle-orm/sqlite-core'),drizzleOrm=require('drizzle-orm'),child_process=require('child_process');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Te__namespace=/*#__PURE__*/_interopNamespace(Te);var $o__default=/*#__PURE__*/_interopDefault($o);var Ta=Object.defineProperty;var ht=(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 A=(t,e)=>()=>(t&&(e=t(t=0)),e);var wa=(t,e)=>{for(var n in e)Ta(t,n,{get:e[n],enumerable:true});};var h=A(()=>{});var f,rt=A(()=>{h();f=class extends Error{code;cause;constructor(e,n,r){super(n),this.name="RepositoryError",this.code=e,this.cause=r,Object.setPrototypeOf(this,new.target.prototype);}};});function Mo(t){if(t===":memory:")return t;let e=Te.resolve(t),n=e,r=[];for(;!fs$1.existsSync(n);){let s=Te.dirname(n);if(s===n)return e;r.unshift(n.slice(s.length+1)),n=s;}let o=fs$1.realpathSync(n);for(let s of r)o=Te.join(o,s);return Te.resolve(o)}function ba(t,e){let n=Mo(t),r=Mo(e);return process.platform==="win32"?n.toLowerCase()===r.toLowerCase():n===r}function ot(t){if((process.env.NODE_ENV==="test"||process.env.VITEST!==void 0)&&ba(t,Te.join($o__default.default.homedir(),".crewx","crewx.db")))throw new Error(`${Oa}: ${t}. Set CREWX_DB or CREWX_TRACES_DB to an isolated temporary path or :memory:.`);return t}var Oa,ge,st=A(()=>{h();Oa="[crewx] Refusing to open the real CrewX database from a test process";ge=class{resolveDbPath(){let e=process.env.CREWX_DB||process.env.CREWX_TRACES_DB||Te.join($o__default.default.homedir(),".crewx","crewx.db");return ot(e)}resolveDbPaths(){return [this.resolveDbPath()]}isMissingTableError(e){return e instanceof Error&&/no such table:/i.test(e.message)}dbExists(e){return fs$1.existsSync(e??this.resolveDbPath())}};});function j(t,e={}){let n=ot(t),r=ht("better-sqlite3"),{drizzle:o}=ht("drizzle-orm/better-sqlite3"),s=e.readOnly?new r(n,{readonly:true,fileMustExist:true}):new r(n);return e.readOnly||(s.exec("PRAGMA journal_mode = WAL"),s.exec(`PRAGMA journal_size_limit = ${Ca}`),s.exec("PRAGMA busy_timeout = 5000"),s.exec("PRAGMA foreign_keys = ON"),s.exec("PRAGMA analysis_limit = 400")),{db:o(s),runRaw:(a,d=[])=>s.prepare(a).run(...d),close:()=>s.close()}}var Ca,mt=A(()=>{h();st();Ca=32*1024*1024;});function fr(t,e){return (t.get(`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='${e}'`)?.cnt??0)>0}function Pa(t,e){if(e>0||!fr(t,"tasks"))return;let n=t.all("PRAGMA table_info(tasks)"),r=new Set(n.map(o=>o.name));for(let[o,s]of Object.entries(Na))r.has(o)||t.run(`ALTER TABLE tasks ADD COLUMN ${o} ${s}`);}function La(t,e,n){if(!fr(t,"__drizzle_migrations")||!fr(t,"tasks"))return;let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(a=>a.hash)),s=JSON.parse(fs$1.readFileSync(Te__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let a of s.entries){let d=Da[a.tag];if(!d)continue;let u=Te__namespace.default.join(e,`${a.tag}.sql`);if(!fs$1.existsSync(u))continue;let c=fs$1.readFileSync(u,"utf-8"),l=crypto.createHash("sha256").update(c).digest("hex");if(o.has(l))continue;let p=t.all("PRAGMA table_info(tasks)"),g=new Set(p.map(m=>m.name));for(let[m,R]of Object.entries(d))g.has(m)||(t.run(`ALTER TABLE tasks ADD COLUMN ${m} ${R}`),g.add(m));}}function Ma(t,e,n){let r=t.all(n`SELECT hash FROM __drizzle_migrations`),o=new Set(r.map(a=>a.hash)),s=JSON.parse(fs$1.readFileSync(Te__namespace.default.join(e,"meta/_journal.json"),"utf-8"));for(let a of s.entries){let d=Te__namespace.default.join(e,`${a.tag}.sql`);if(!fs$1.existsSync(d))continue;let u=fs$1.readFileSync(d,"utf-8"),c=crypto.createHash("sha256").update(u).digest("hex");if(o.has(c))continue;let l=/ALTER\s+TABLE\s+[`"]?(\w+)[`"]?\s+ADD\s+[`"]?(\w+)[`"]?/gi,p=[],g;for(;(g=l.exec(u))!==null;)p.push({table:g[1],column:g[2]});if(p.length===0||!u.split(/-->\s*statement-breakpoint/).map(w=>w.trim()).filter(Boolean).every(w=>/^ALTER\s+TABLE\s+.+\s+ADD\s+/i.test(w)))continue;p.every(({table:w,column:T})=>t.all(`PRAGMA table_info("${w}")`).some(x=>x.name===T))&&t.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${c}, ${a.when})`);}}function Ha(t,e){let{sql:n}=ht("drizzle-orm"),r=JSON.parse(fs$1.readFileSync(Te__namespace.default.join(e,"meta/_journal.json"),"utf-8")),s=["0025_task_heartbeat","0025_thread_app_instance_ledger","0026_mcp_action_source"].map(a=>{let d=r.entries.find(c=>c.tag===a);if(!d)throw new Error(`Missing release/App compatibility migration: ${a}`);let u=fs$1.readFileSync(Te__namespace.default.join(e,`${a}.sql`),"utf-8");return {entry:d,content:u,hash:crypto.createHash("sha256").update(u).digest("hex")}});t.transaction(a=>{let d=new Set(a.all(n`SELECT hash FROM __drizzle_migrations`).map(u=>u.hash));if(d.has(s[0].hash)){for(let u of s.slice(1))if(!d.has(u.hash)){for(let c of u.content.split(/-->\s*statement-breakpoint/).filter(l=>l.trim()))a.run(n.raw(c));a.run(n`INSERT INTO __drizzle_migrations (hash, created_at) VALUES (${u.hash}, ${u.entry.when})`);}}},{behavior:"immediate"});}function $a(t){let{migrate:e}=ht("drizzle-orm/better-sqlite3/migrator"),{sql:n}=ht("drizzle-orm"),r=[Te__namespace.default.join(__dirname,"../migrations"),Te__namespace.default.join(__dirname,"migrations"),Te__namespace.default.join(__dirname,"../../../../drizzle/migrations"),Te__namespace.default.join(process.cwd(),"drizzle/migrations")],o=r.find(c=>fs$1.existsSync(Te__namespace.default.join(c,"meta/_journal.json")));if(!o)throw new Error(`migrations folder not found. Searched:
|
|
2
2
|
${r.join(`
|
|
3
|
-
`)}`);let s=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),a=0;s?.cnt&&(a=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),ba(t,a),s?.cnt&&(Na(t,o),Ca(t,o,n),Oa(t,o,n)),e(t,{migrationsFolder:o});let u=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-a;if(u>0){let c=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${c} (${u} migration${u>1?"s":""} applied).`);}}function xe(t,e){Po.has(e)||(Pa(t),Po.add(e));}var Po,va,xa,kt=I(()=>{h();Po=new Set,va={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"};xa={"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"}};});var Tt,fr=I(()=>{h();Tt=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),starred:sqliteCore.integer("starred").notNull().default(0)});});var i,$t=I(()=>{h();i=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),heartbeat_at:sqliteCore.text("heartbeat_at"),stop_requested_at:sqliteCore.text("stop_requested_at"),stop_requested_epoch:sqliteCore.integer("stop_requested_epoch"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),log_storage:sqliteCore.text("log_storage",{enum:["blob","events"]}).notNull().default("blob"),last_log_seq:sqliteCore.integer("last_log_seq").notNull().default(0),log_revision:sqliteCore.integer("log_revision").notNull().default(0),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},t=>({log_storage_check:sqliteCore.check("tasks_log_storage_ck",drizzleOrm.sql`${t.log_storage} IN ('blob', 'events')`),idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(t.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(t.pid),idx_tasks_status_heartbeat:sqliteCore.index("idx_tasks_status_heartbeat").on(t.status,t.heartbeat_at),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(t.workspace_id,t.started_at)}));});var Ce,Mo=I(()=>{h();$t();Ce=sqliteCore.sqliteTable("task_log_events",{id:sqliteCore.integer("id").primaryKey(),task_id:sqliteCore.text("task_id").notNull().references(()=>i.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),timestamp:sqliteCore.text("timestamp").notNull(),level:sqliteCore.text("level").notNull(),message:sqliteCore.text("message").notNull()},t=>({taskSeqUnique:sqliteCore.uniqueIndex("task_log_events_task_seq_uq").on(t.task_id,t.seq),timestampIdIndex:sqliteCore.index("task_log_events_timestamp_id_idx").on(t.timestamp,t.id)}));});var ja,Ga,_,Rn=I(()=>{h();fr();ja="json_extract(metadata, '$.threadTitle.state')",Ga="json_extract(metadata, '$.threadTitle.priority')",_=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>Tt.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},t=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(t.title),idx_threads_workspace_thread_state:sqliteCore.index("idx_threads_workspace_thread_state").on(t.workspace_id,drizzleOrm.sql.raw(ja)),idx_threads_workspace_thread_priority:sqliteCore.index("idx_threads_workspace_thread_priority").on(t.workspace_id,drizzleOrm.sql.raw(Ga))}));});var Va,Uo=I(()=>{h();$t();Va=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>i.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>Va.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},t=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(t.parent_span_id)}));});var qo=I(()=>{h();$t();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>i.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},t=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(t.timestamp)}));});var Bo=I(()=>{h();Rn();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>_.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(t.thread_id,t.seq)}));});var Go=I(()=>{h();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},t=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(t.partition_key)}));});var Vo=I(()=>{h();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));});var Ko=I(()=>{h();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},t=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));});var Xo=I(()=>{h();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},t=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(t.workspace_id,drizzleOrm.sql`${t.created_at} DESC`)})),sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.notification_id,t.user_id]})}));});var Qo=I(()=>{h();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));});var Zo=I(()=>{h();sqliteCore.sqliteTable("ui_instances",{id:sqliteCore.text("id").primaryKey().notNull(),definition_id:sqliteCore.text("definition_id").notNull(),definition_version:sqliteCore.integer("definition_version").notNull(),definition_hash:sqliteCore.text("definition_hash").notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),thread_id:sqliteCore.text("thread_id").notNull(),app_id:sqliteCore.text("app_id"),anchor_task_id:sqliteCore.text("anchor_task_id"),domain_ref_json:sqliteCore.text("domain_ref_json").notNull(),state_json:sqliteCore.text("state_json").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),status:sqliteCore.text("status").notNull().default("active"),granted_capabilities_json:sqliteCore.text("granted_capabilities_json").notNull().default("[]"),created_at:sqliteCore.integer("created_at").notNull(),updated_at:sqliteCore.integer("updated_at").notNull()},t=>({idCheck:sqliteCore.check("ui_instances_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:sqliteCore.check("ui_instances_definition_id_ck",drizzleOrm.sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:sqliteCore.check("ui_instances_definition_version_ck",drizzleOrm.sql`${t.definition_version} >= 1`),definitionHashCheck:sqliteCore.check("ui_instances_definition_hash_ck",drizzleOrm.sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:sqliteCore.check("ui_instances_workspace_id_ck",drizzleOrm.sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:sqliteCore.check("ui_instances_thread_id_ck",drizzleOrm.sql`length(${t.thread_id}) BETWEEN 1 AND 256`),appIdCheck:sqliteCore.check("ui_instances_app_id_ck",drizzleOrm.sql`${t.app_id} IS NULL OR length(${t.app_id}) BETWEEN 1 AND 128`),domainRefJsonCheck:sqliteCore.check("ui_instances_domain_ref_json_ck",drizzleOrm.sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:sqliteCore.check("ui_instances_state_json_ck",drizzleOrm.sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:sqliteCore.check("ui_instances_revision_ck",drizzleOrm.sql`${t.revision} >= 0`),statusCheck:sqliteCore.check("ui_instances_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:sqliteCore.check("ui_instances_granted_capabilities_json_ck",drizzleOrm.sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),createdAtCheck:sqliteCore.check("ui_instances_created_at_ck",drizzleOrm.sql`${t.created_at} >= 0`),updatedAtCheck:sqliteCore.check("ui_instances_updated_at_ck",drizzleOrm.sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:sqliteCore.index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id),workspaceThreadAppUnique:sqliteCore.uniqueIndex("ui_instances_workspace_thread_app_uq").on(t.workspace_id,t.thread_id,t.app_id)}));});var ts=I(()=>{h();sqliteCore.sqliteTable("ui_action_receipts",{id:sqliteCore.text("id").primaryKey().notNull(),instance_id:sqliteCore.text("instance_id").notNull(),request_id:sqliteCore.text("request_id").notNull(),action_id:sqliteCore.text("action_id").notNull(),actor_json:sqliteCore.text("actor_json").notNull(),source:sqliteCore.text("source").notNull(),expected_revision:sqliteCore.integer("expected_revision").notNull(),before_revision:sqliteCore.integer("before_revision").notNull(),after_revision:sqliteCore.integer("after_revision"),status:sqliteCore.text("status").notNull(),outcome:sqliteCore.text("outcome"),input_json:sqliteCore.text("input_json").notNull(),result_json:sqliteCore.text("result_json"),error_code:sqliteCore.text("error_code"),requested_at:sqliteCore.integer("requested_at").notNull(),settled_at:sqliteCore.integer("settled_at")},t=>({idCheck:sqliteCore.check("ui_action_receipts_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:sqliteCore.check("ui_action_receipts_instance_id_ck",drizzleOrm.sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:sqliteCore.check("ui_action_receipts_request_id_ck",drizzleOrm.sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:sqliteCore.check("ui_action_receipts_action_id_ck",drizzleOrm.sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:sqliteCore.check("ui_action_receipts_actor_json_ck",drizzleOrm.sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:sqliteCore.check("ui_action_receipts_source_ck",drizzleOrm.sql`${t.source} IN ('ui_host', 'cli', 'system', 'mcp')`),expectedRevisionCheck:sqliteCore.check("ui_action_receipts_expected_revision_ck",drizzleOrm.sql`${t.expected_revision} >= 0`),beforeRevisionCheck:sqliteCore.check("ui_action_receipts_before_revision_ck",drizzleOrm.sql`${t.before_revision} >= 0`),afterRevisionCheck:sqliteCore.check("ui_action_receipts_after_revision_ck",drizzleOrm.sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:sqliteCore.check("ui_action_receipts_status_ck",drizzleOrm.sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:sqliteCore.check("ui_action_receipts_outcome_ck",drizzleOrm.sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:sqliteCore.check("ui_action_receipts_input_json_ck",drizzleOrm.sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:sqliteCore.check("ui_action_receipts_result_json_ck",drizzleOrm.sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:sqliteCore.check("ui_action_receipts_requested_at_ck",drizzleOrm.sql`${t.requested_at} >= 0`),settledAtCheck:sqliteCore.check("ui_action_receipts_settled_at_ck",drizzleOrm.sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:sqliteCore.check("ui_action_receipts_status_transition_ck",drizzleOrm.sql`(
|
|
3
|
+
`)}`);let s=t.get(n`SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'`),a=0;s?.cnt&&(a=t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0),Pa(t,a),s?.cnt&&(Ha(t,o),Ma(t,o,n),La(t,o,n)),e(t,{migrationsFolder:o});let u=(t.get(n`SELECT count(*) as cnt FROM __drizzle_migrations`)?.cnt??0)-a;if(u>0){let c=s?.cnt?"Database migrated":"Database initialized";console.error(`[crewx] ${c} (${u} migration${u>1?"s":""} applied).`);}}function xe(t,e){Uo.has(e)||($a(t),Uo.add(e));}var Uo,Na,Da,kt=A(()=>{h();Uo=new Set,Na={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"};Da={"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"}};});var Tt,mr=A(()=>{h();Tt=sqliteCore.sqliteTable("workspaces",{id:sqliteCore.text("id").primaryKey(),slug:sqliteCore.text("slug").notNull().unique(),name:sqliteCore.text("name").notNull(),workspace_path:sqliteCore.text("workspace_path"),description:sqliteCore.text("description"),is_active:sqliteCore.integer("is_active").notNull().default(1),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),starred:sqliteCore.integer("starred").notNull().default(0)});});var i,qt=A(()=>{h();i=sqliteCore.sqliteTable("tasks",{id:sqliteCore.text("id").primaryKey(),agent_id:sqliteCore.text("agent_id").notNull(),user_id:sqliteCore.text("user_id"),prompt:sqliteCore.text("prompt").notNull(),mode:sqliteCore.text("mode").notNull().default("execute"),status:sqliteCore.text("status").notNull().default("running"),result:sqliteCore.text("result"),error:sqliteCore.text("error"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),metadata:sqliteCore.text("metadata"),workspace_id:sqliteCore.text("workspace_id"),trace_id:sqliteCore.text("trace_id"),parent_task_id:sqliteCore.text("parent_task_id"),caller_agent_id:sqliteCore.text("caller_agent_id"),model:sqliteCore.text("model"),platform:sqliteCore.text("platform").default("cli"),crewx_version:sqliteCore.text("crewx_version"),input_tokens:sqliteCore.integer("input_tokens").default(0),output_tokens:sqliteCore.integer("output_tokens").default(0),cost_usd:sqliteCore.real("cost_usd").default(0),pid:sqliteCore.integer("pid"),heartbeat_at:sqliteCore.text("heartbeat_at"),stop_requested_at:sqliteCore.text("stop_requested_at"),stop_requested_epoch:sqliteCore.integer("stop_requested_epoch"),rendered_prompt:sqliteCore.text("rendered_prompt"),command:sqliteCore.text("command"),coding_agent_command:sqliteCore.text("coding_agent_command"),exit_code:sqliteCore.integer("exit_code"),logs:sqliteCore.text("logs"),log_storage:sqliteCore.text("log_storage",{enum:["blob","events"]}).notNull().default("blob"),last_log_seq:sqliteCore.integer("last_log_seq").notNull().default(0),log_revision:sqliteCore.integer("log_revision").notNull().default(0),thread_id:sqliteCore.text("thread_id"),workspace_ref:sqliteCore.text("workspace_ref"),project_id:sqliteCore.text("project_id"),project_ref:sqliteCore.text("project_ref"),cached_input_tokens:sqliteCore.integer("cached_input_tokens").default(0),run_epoch:sqliteCore.integer("run_epoch").default(0)},t=>({log_storage_check:sqliteCore.check("tasks_log_storage_ck",drizzleOrm.sql`${t.log_storage} IN ('blob', 'events')`),idx_tasks_agent_id:sqliteCore.index("idx_tasks_agent_id").on(t.agent_id),idx_tasks_status:sqliteCore.index("idx_tasks_status").on(t.status),idx_tasks_started_at:sqliteCore.index("idx_tasks_started_at").on(t.started_at),idx_tasks_trace_id:sqliteCore.index("idx_tasks_trace_id").on(t.trace_id),idx_tasks_parent_task_id:sqliteCore.index("idx_tasks_parent_task_id").on(t.parent_task_id),idx_tasks_crewx_version:sqliteCore.index("idx_tasks_crewx_version").on(t.crewx_version),idx_tasks_pid:sqliteCore.index("idx_tasks_pid").on(t.pid),idx_tasks_status_heartbeat:sqliteCore.index("idx_tasks_status_heartbeat").on(t.status,t.heartbeat_at),idx_tasks_thread_id:sqliteCore.index("idx_tasks_thread_id").on(t.thread_id),idx_tasks_workspace_id:sqliteCore.index("idx_tasks_workspace_id").on(t.workspace_id),idx_tasks_workspace_ref:sqliteCore.index("idx_tasks_workspace_ref").on(t.workspace_ref),idx_tasks_project_id:sqliteCore.index("idx_tasks_project_id").on(t.project_id),idx_tasks_ws_started:sqliteCore.index("idx_tasks_ws_started").on(t.workspace_id,t.started_at)}));});var Ne,Bo=A(()=>{h();qt();Ne=sqliteCore.sqliteTable("task_log_events",{id:sqliteCore.integer("id").primaryKey(),task_id:sqliteCore.text("task_id").notNull().references(()=>i.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),timestamp:sqliteCore.text("timestamp").notNull(),level:sqliteCore.text("level").notNull(),message:sqliteCore.text("message").notNull()},t=>({taskSeqUnique:sqliteCore.uniqueIndex("task_log_events_task_seq_uq").on(t.task_id,t.seq),timestampIdIndex:sqliteCore.index("task_log_events_timestamp_id_idx").on(t.timestamp,t.id)}));});var Ka,Ja,_,In=A(()=>{h();mr();Ka="json_extract(metadata, '$.threadTitle.state')",Ja="json_extract(metadata, '$.threadTitle.priority')",_=sqliteCore.sqliteTable("threads",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").references(()=>Tt.id,{onDelete:"set null"}),platform:sqliteCore.text("platform").notNull().default("cli"),title:sqliteCore.text("title"),first_message:sqliteCore.text("first_message"),last_message:sqliteCore.text("last_message"),message_count:sqliteCore.integer("message_count").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),metadata:sqliteCore.text("metadata"),title_locked:sqliteCore.integer("title_locked").notNull().default(0),pinned:sqliteCore.integer("pinned").notNull().default(0),starred:sqliteCore.integer("starred").notNull().default(0)},t=>({idx_threads_updated_at:sqliteCore.index("idx_threads_updated_at").on(t.updated_at),idx_threads_workspace_id:sqliteCore.index("idx_threads_workspace_id").on(t.workspace_id),idx_threads_ws_updated:sqliteCore.index("idx_threads_ws_updated").on(t.workspace_id,t.updated_at),idx_threads_title:sqliteCore.index("idx_threads_title").on(t.title),idx_threads_workspace_thread_state:sqliteCore.index("idx_threads_workspace_thread_state").on(t.workspace_id,drizzleOrm.sql.raw(Ka)),idx_threads_workspace_thread_priority:sqliteCore.index("idx_threads_workspace_thread_priority").on(t.workspace_id,drizzleOrm.sql.raw(Ja))}));});var Qa,Go=A(()=>{h();qt();Qa=sqliteCore.sqliteTable("spans",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>i.id,{onDelete:"set null"}),parent_span_id:sqliteCore.text("parent_span_id").references(()=>Qa.id,{onDelete:"set null"}),name:sqliteCore.text("name").notNull(),kind:sqliteCore.text("kind").notNull().default("internal"),status:sqliteCore.text("status").notNull().default("ok"),started_at:sqliteCore.text("started_at").notNull(),completed_at:sqliteCore.text("completed_at"),duration_ms:sqliteCore.integer("duration_ms"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),error:sqliteCore.text("error"),attributes:sqliteCore.text("attributes")},t=>({idx_spans_task_id:sqliteCore.index("idx_spans_task_id").on(t.task_id),idx_spans_parent_span_id:sqliteCore.index("idx_spans_parent_span_id").on(t.parent_span_id)}));});var zo=A(()=>{h();qt();sqliteCore.sqliteTable("tool_calls",{id:sqliteCore.text("id").primaryKey(),task_id:sqliteCore.text("task_id").references(()=>i.id,{onDelete:"cascade"}),session_id:sqliteCore.text("session_id"),tool_name:sqliteCore.text("tool_name").notNull(),files:sqliteCore.text("files"),input:sqliteCore.text("input"),output:sqliteCore.text("output"),duration_ms:sqliteCore.integer("duration_ms"),timestamp:sqliteCore.text("timestamp").notNull()},t=>({idx_tool_calls_task_id:sqliteCore.index("idx_tool_calls_task_id").on(t.task_id),idx_tool_calls_tool_name:sqliteCore.index("idx_tool_calls_tool_name").on(t.tool_name),idx_tool_calls_timestamp:sqliteCore.index("idx_tool_calls_timestamp").on(t.timestamp)}));});var Ko=A(()=>{h();In();sqliteCore.sqliteTable("thread_boxes",{id:sqliteCore.text("id").primaryKey(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>_.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),first_task_id:sqliteCore.text("first_task_id").notNull(),mid_task_id:sqliteCore.text("mid_task_id").notNull(),last_task_id:sqliteCore.text("last_task_id").notNull(),task_count:sqliteCore.integer("task_count").notNull(),summary:sqliteCore.text("summary"),source_tokens:sqliteCore.integer("source_tokens").notNull(),summary_tokens:sqliteCore.integer("summary_tokens"),created_at:sqliteCore.text("created_at").notNull()},t=>({idx_thread_boxes_thread_id:sqliteCore.index("idx_thread_boxes_thread_id").on(t.thread_id),idx_thread_boxes_seq:sqliteCore.index("idx_thread_boxes_seq").on(t.thread_id,t.seq),uniq_thread_boxes_thread_seq:sqliteCore.unique().on(t.thread_id,t.seq)}));});var Xo=A(()=>{h();sqliteCore.sqliteTable("request_logs",{id:sqliteCore.text("id").primaryKey(),path:sqliteCore.text("path").notNull(),method:sqliteCore.text("method").notNull(),status_code:sqliteCore.integer("status_code").notNull(),duration_ms:sqliteCore.integer("duration_ms").notNull(),ip:sqliteCore.text("ip"),request_headers:sqliteCore.text("request_headers"),response_headers:sqliteCore.text("response_headers"),request_body:sqliteCore.text("request_body"),response_body:sqliteCore.text("response_body"),query:sqliteCore.text("query"),user_id:sqliteCore.text("user_id"),project_id:sqliteCore.text("project_id"),partition_key:sqliteCore.text("partition_key").notNull(),timestamp:sqliteCore.text("timestamp").notNull().default(drizzleOrm.sql`(datetime('now'))`),metadata:sqliteCore.text("metadata")},t=>({idx_request_logs_timestamp:sqliteCore.index("idx_request_logs_timestamp").on(t.timestamp),idx_request_logs_path:sqliteCore.index("idx_request_logs_path").on(t.path),idx_request_logs_status_code:sqliteCore.index("idx_request_logs_status_code").on(t.status_code),idx_request_logs_partition_key:sqliteCore.index("idx_request_logs_partition_key").on(t.partition_key)}));});var Zo=A(()=>{h();sqliteCore.sqliteTable("usage_limit_snapshots",{id:sqliteCore.text("id").primaryKey(),provider:sqliteCore.text("provider").notNull(),account_ref:sqliteCore.text("account_ref").notNull().default("default"),limit_window:sqliteCore.text("limit_window").notNull(),bucket_start:sqliteCore.text("bucket_start").notNull(),captured_at:sqliteCore.text("captured_at").notNull(),used_percent:sqliteCore.integer("used_percent").notNull(),remaining_percent:sqliteCore.integer("remaining_percent").notNull(),resets_at:sqliteCore.text("resets_at"),source:sqliteCore.text("source").notNull(),metadata:sqliteCore.text("metadata")},t=>({uniq_usage_limit_snapshots_bucket:sqliteCore.uniqueIndex("uniq_usage_limit_snapshots_bucket").on(t.provider,t.account_ref,t.limit_window,t.bucket_start),idx_usage_limit_snapshots_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_window_bucket").on(t.limit_window,t.bucket_start),idx_usage_limit_snapshots_provider_window_bucket:sqliteCore.index("idx_usage_limit_snapshots_provider_window_bucket").on(t.provider,t.limit_window,t.bucket_start)}));});var es=A(()=>{h();sqliteCore.sqliteTable("usage_reports",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),month:sqliteCore.text("month").notNull(),generated_at:sqliteCore.text("generated_at").notNull(),source_range:sqliteCore.text("source_range").notNull(),tier:sqliteCore.text("tier").notNull(),total_tokens:sqliteCore.integer("total_tokens").notNull(),total_cost_usd:sqliteCore.real("total_cost_usd").notNull(),payload:sqliteCore.text("payload").notNull(),payload_hash:sqliteCore.text("payload_hash"),signature:sqliteCore.text("signature"),signed_at:sqliteCore.text("signed_at"),issuer:sqliteCore.text("issuer")},t=>({uniq_usage_reports_ws_month:sqliteCore.uniqueIndex("uniq_usage_reports_ws_month").on(t.workspace_id,t.month)}));});var ns=A(()=>{h();sqliteCore.sqliteTable("notifications",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id"),task_id:sqliteCore.text("task_id"),thread_id:sqliteCore.text("thread_id"),source:sqliteCore.text("source").notNull().default("agent"),level:sqliteCore.text("level").notNull().default("info"),title:sqliteCore.text("title").notNull(),body:sqliteCore.text("body"),target_user_id:sqliteCore.text("target_user_id"),created_at:sqliteCore.text("created_at").notNull(),metadata:sqliteCore.text("metadata")},t=>({idx_notifications_ws_created:sqliteCore.index("idx_notifications_ws_created").on(t.workspace_id,drizzleOrm.sql`${t.created_at} DESC`)})),sqliteCore.sqliteTable("notification_reads",{notification_id:sqliteCore.text("notification_id").notNull(),user_id:sqliteCore.text("user_id").notNull(),read_at:sqliteCore.text("read_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.notification_id,t.user_id]})}));});var os=A(()=>{h();sqliteCore.sqliteTable("agent_suggestions",{id:sqliteCore.text("id").primaryKey(),workspace_id:sqliteCore.text("workspace_id").notNull(),agent_id:sqliteCore.text("agent_id").notNull(),task_id:sqliteCore.text("task_id"),type:sqliteCore.text("type").notNull(),status:sqliteCore.text("status").notNull().default("pending"),payload:sqliteCore.text("payload").notNull(),applied_commit_sha:sqliteCore.text("applied_commit_sha"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idx_agent_suggestions_ws_agent:sqliteCore.index("idx_agent_suggestions_ws_agent").on(t.workspace_id,t.agent_id),idx_agent_suggestions_ws_created:sqliteCore.index("idx_agent_suggestions_ws_created").on(t.workspace_id,t.created_at)}));});var ss=A(()=>{h();sqliteCore.sqliteTable("ui_instances",{id:sqliteCore.text("id").primaryKey().notNull(),definition_id:sqliteCore.text("definition_id").notNull(),definition_version:sqliteCore.integer("definition_version").notNull(),definition_hash:sqliteCore.text("definition_hash").notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),thread_id:sqliteCore.text("thread_id").notNull(),app_id:sqliteCore.text("app_id"),anchor_task_id:sqliteCore.text("anchor_task_id"),domain_ref_json:sqliteCore.text("domain_ref_json").notNull(),state_json:sqliteCore.text("state_json").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),status:sqliteCore.text("status").notNull().default("active"),granted_capabilities_json:sqliteCore.text("granted_capabilities_json").notNull().default("[]"),created_at:sqliteCore.integer("created_at").notNull(),updated_at:sqliteCore.integer("updated_at").notNull()},t=>({idCheck:sqliteCore.check("ui_instances_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128 AND ${t.id} GLOB 'uic_*'`),definitionIdCheck:sqliteCore.check("ui_instances_definition_id_ck",drizzleOrm.sql`length(${t.definition_id}) BETWEEN 1 AND 128`),definitionVersionCheck:sqliteCore.check("ui_instances_definition_version_ck",drizzleOrm.sql`${t.definition_version} >= 1`),definitionHashCheck:sqliteCore.check("ui_instances_definition_hash_ck",drizzleOrm.sql`length(${t.definition_hash}) = 64 AND ${t.definition_hash} NOT GLOB '*[^0-9a-f]*'`),workspaceIdCheck:sqliteCore.check("ui_instances_workspace_id_ck",drizzleOrm.sql`length(${t.workspace_id}) BETWEEN 1 AND 256`),threadIdCheck:sqliteCore.check("ui_instances_thread_id_ck",drizzleOrm.sql`length(${t.thread_id}) BETWEEN 1 AND 256`),appIdCheck:sqliteCore.check("ui_instances_app_id_ck",drizzleOrm.sql`${t.app_id} IS NULL OR length(${t.app_id}) BETWEEN 1 AND 128`),domainRefJsonCheck:sqliteCore.check("ui_instances_domain_ref_json_ck",drizzleOrm.sql`json_valid(${t.domain_ref_json}) AND json_type(${t.domain_ref_json}) = 'object'`),stateJsonCheck:sqliteCore.check("ui_instances_state_json_ck",drizzleOrm.sql`json_valid(${t.state_json}) AND json_type(${t.state_json}) = 'object'`),revisionCheck:sqliteCore.check("ui_instances_revision_ck",drizzleOrm.sql`${t.revision} >= 0`),statusCheck:sqliteCore.check("ui_instances_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'completed', 'expired', 'revoked', 'unsupported')`),grantedCapabilitiesJsonCheck:sqliteCore.check("ui_instances_granted_capabilities_json_ck",drizzleOrm.sql`json_valid(${t.granted_capabilities_json}) AND json_type(${t.granted_capabilities_json}) = 'array'`),createdAtCheck:sqliteCore.check("ui_instances_created_at_ck",drizzleOrm.sql`${t.created_at} >= 0`),updatedAtCheck:sqliteCore.check("ui_instances_updated_at_ck",drizzleOrm.sql`${t.updated_at} >= ${t.created_at}`),workspaceThreadIdx:sqliteCore.index("ui_instances_workspace_thread_idx").on(t.workspace_id,t.thread_id),workspaceThreadAppUnique:sqliteCore.uniqueIndex("ui_instances_workspace_thread_app_uq").on(t.workspace_id,t.thread_id,t.app_id)}));});var as=A(()=>{h();sqliteCore.sqliteTable("ui_action_receipts",{id:sqliteCore.text("id").primaryKey().notNull(),instance_id:sqliteCore.text("instance_id").notNull(),request_id:sqliteCore.text("request_id").notNull(),action_id:sqliteCore.text("action_id").notNull(),actor_json:sqliteCore.text("actor_json").notNull(),source:sqliteCore.text("source").notNull(),expected_revision:sqliteCore.integer("expected_revision").notNull(),before_revision:sqliteCore.integer("before_revision").notNull(),after_revision:sqliteCore.integer("after_revision"),status:sqliteCore.text("status").notNull(),outcome:sqliteCore.text("outcome"),input_json:sqliteCore.text("input_json").notNull(),result_json:sqliteCore.text("result_json"),error_code:sqliteCore.text("error_code"),requested_at:sqliteCore.integer("requested_at").notNull(),settled_at:sqliteCore.integer("settled_at")},t=>({idCheck:sqliteCore.check("ui_action_receipts_id_ck",drizzleOrm.sql`length(${t.id}) BETWEEN 5 AND 128`),instanceIdCheck:sqliteCore.check("ui_action_receipts_instance_id_ck",drizzleOrm.sql`length(${t.instance_id}) BETWEEN 1 AND 128`),requestIdCheck:sqliteCore.check("ui_action_receipts_request_id_ck",drizzleOrm.sql`length(${t.request_id}) BETWEEN 1 AND 128`),actionIdCheck:sqliteCore.check("ui_action_receipts_action_id_ck",drizzleOrm.sql`length(${t.action_id}) BETWEEN 1 AND 128`),actorJsonCheck:sqliteCore.check("ui_action_receipts_actor_json_ck",drizzleOrm.sql`json_valid(${t.actor_json}) AND json_type(${t.actor_json}) = 'object'`),sourceCheck:sqliteCore.check("ui_action_receipts_source_ck",drizzleOrm.sql`${t.source} IN ('ui_host', 'cli', 'system', 'mcp')`),expectedRevisionCheck:sqliteCore.check("ui_action_receipts_expected_revision_ck",drizzleOrm.sql`${t.expected_revision} >= 0`),beforeRevisionCheck:sqliteCore.check("ui_action_receipts_before_revision_ck",drizzleOrm.sql`${t.before_revision} >= 0`),afterRevisionCheck:sqliteCore.check("ui_action_receipts_after_revision_ck",drizzleOrm.sql`${t.after_revision} IS NULL OR ${t.after_revision} >= 0`),statusCheck:sqliteCore.check("ui_action_receipts_status_ck",drizzleOrm.sql`${t.status} IN ('requested', 'settled')`),outcomeCheck:sqliteCore.check("ui_action_receipts_outcome_ck",drizzleOrm.sql`${t.outcome} IS NULL OR ${t.outcome} IN ('succeeded', 'rejected', 'failed', 'conflicted', 'expired')`),inputJsonCheck:sqliteCore.check("ui_action_receipts_input_json_ck",drizzleOrm.sql`json_valid(${t.input_json}) AND json_type(${t.input_json}) = 'object'`),resultJsonCheck:sqliteCore.check("ui_action_receipts_result_json_ck",drizzleOrm.sql`${t.result_json} IS NULL OR (json_valid(${t.result_json}) AND json_type(${t.result_json}) = 'object')`),requestedAtCheck:sqliteCore.check("ui_action_receipts_requested_at_ck",drizzleOrm.sql`${t.requested_at} >= 0`),settledAtCheck:sqliteCore.check("ui_action_receipts_settled_at_ck",drizzleOrm.sql`${t.settled_at} IS NULL OR ${t.settled_at} >= ${t.requested_at}`),statusTransitionCheck:sqliteCore.check("ui_action_receipts_status_transition_ck",drizzleOrm.sql`(
|
|
4
4
|
(${t.status} = 'requested' AND ${t.after_revision} IS NULL AND ${t.outcome} IS NULL AND ${t.settled_at} IS NULL)
|
|
5
5
|
OR
|
|
6
6
|
(${t.status} = 'settled' AND ${t.after_revision} IS NOT NULL AND ${t.outcome} IS NOT NULL AND ${t.settled_at} IS NOT NULL)
|
|
7
|
-
)`),instanceRequestUnique:sqliteCore.uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:sqliteCore.index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:sqliteCore.index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));});var rs,os=I(()=>{h();rs=sqliteCore.sqliteTable("projects",{id:sqliteCore.text("id").primaryKey().notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),name:sqliteCore.text("name").notNull(),outcome:sqliteCore.text("outcome").notNull(),due_date:sqliteCore.text("due_date"),scene:sqliteCore.text("scene").notNull().default("planning"),stages_json:sqliteCore.text("stages_json").notNull(),stage_index:sqliteCore.integer("stage_index").notNull(),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),accepted_at:sqliteCore.text("accepted_at"),archived_at:sqliteCore.text("archived_at")},t=>({idCheck:sqliteCore.check("projects_id_ck",drizzleOrm.sql`${t.id} GLOB 'prj_*'`),sceneCheck:sqliteCore.check("projects_scene_ck",drizzleOrm.sql`${t.scene} IN ('planning', 'plan_review', 'running', 'human_wait', 'limit_wait', 'failed_stop', 'analyzing_feedback', 'replanned', 'awaiting_review', 'accepted')`),stagesJsonCheck:sqliteCore.check("projects_stages_json_ck",drizzleOrm.sql`json_valid(${t.stages_json}) AND json_type(${t.stages_json}) = 'array'`),stageIndexCheck:sqliteCore.check("projects_stage_index_ck",drizzleOrm.sql`${t.stage_index} >= 1`)})),sqliteCore.sqliteTable("project_criteria",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>rs.id,{onDelete:"cascade"}),position:sqliteCore.integer("position").notNull(),statement:sqliteCore.text("statement").notNull(),verify_status:sqliteCore.text("verify_status").notNull().default("pending"),verified_at:sqliteCore.text("verified_at"),evidence_json:sqliteCore.text("evidence_json").notNull().default("[]"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idCheck:sqliteCore.check("project_criteria_id_ck",drizzleOrm.sql`${t.id} GLOB 'pjc_*'`),verifyStatusCheck:sqliteCore.check("project_criteria_verify_status_ck",drizzleOrm.sql`${t.verify_status} IN ('pending', 'verifying', 'passed', 'failed')`),evidenceJsonCheck:sqliteCore.check("project_criteria_evidence_json_ck",drizzleOrm.sql`json_valid(${t.evidence_json}) AND json_type(${t.evidence_json}) = 'array'`),projectPositionUnique:sqliteCore.uniqueIndex("project_criteria_project_position_uq").on(t.project_id,t.position)})),sqliteCore.sqliteTable("project_events",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>rs.id,{onDelete:"restrict"}),seq:sqliteCore.integer("seq").notNull(),actor_type:sqliteCore.text("actor_type").notNull(),actor_id:sqliteCore.text("actor_id"),type:sqliteCore.text("type").notNull(),title:sqliteCore.text("title").notNull(),summary:sqliteCore.text("summary"),payload_json:sqliteCore.text("payload_json").notNull().default("{}"),created_at:sqliteCore.text("created_at").notNull()},t=>({idCheck:sqliteCore.check("project_events_id_ck",drizzleOrm.sql`${t.id} GLOB 'pje_*'`),actorTypeCheck:sqliteCore.check("project_events_actor_type_ck",drizzleOrm.sql`${t.actor_type} IN ('user', 'project_manager', 'system')`),payloadJsonCheck:sqliteCore.check("project_events_payload_json_ck",drizzleOrm.sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),projectSeqUnique:sqliteCore.uniqueIndex("project_events_project_seq_uq").on(t.project_id,t.seq)}));});var wr,yr,S,Er=I(()=>{h();wr=["THREAD_STATE","THREAD_PRIORITY"],yr=["gray","blue","violet","green","amber","orange","red","pink"],S=sqliteCore.sqliteTable("common_codes",{code_group:sqliteCore.text("code_group").notNull(),code:sqliteCore.text("code").notNull(),code_name:sqliteCore.text("code_name"),color:sqliteCore.text("color").notNull().default("gray"),sort_order:sqliteCore.integer("sort_order").notNull(),workspace_id:sqliteCore.text("workspace_id"),is_builtin:sqliteCore.integer("is_builtin").notNull().default(0),is_archived:sqliteCore.integer("is_archived").notNull().default(0),metadata:sqliteCore.text("metadata"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.code_group,t.code]}),metadataCheck:sqliteCore.check("common_codes_metadata_ck",drizzleOrm.sql`${t.metadata} IS NULL OR (json_valid(${t.metadata}) AND json_type(${t.metadata}) = 'object')`),builtinCheck:sqliteCore.check("common_codes_builtin_ck",drizzleOrm.sql`${t.is_builtin} IN (0, 1)`),archivedCheck:sqliteCore.check("common_codes_archived_ck",drizzleOrm.sql`${t.is_archived} IN (0, 1)`),idxCommonCodesSelection:sqliteCore.index("idx_common_codes_group_archived_order").on(t.code_group,t.is_archived,t.sort_order)}));});var ss,is,as,ds,us,U,M,C,cs=I(()=>{h();Rn();ss=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],is=["user","agent","system"],as=["auto","manual"],ds=["decision","judgment","issue","result","pivot"],us=["queued","running","completed","failed"],U=sqliteCore.sqliteTable("thread_events",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>_.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),type:sqliteCore.text("type").notNull(),actor_type:sqliteCore.text("actor_type").notNull(),payload_json:sqliteCore.text("payload_json").notNull(),created_at:sqliteCore.text("created_at").notNull(),actor_id:sqliteCore.text("actor_id"),task_id:sqliteCore.text("task_id"),highlight_id:sqliteCore.text("highlight_id")},t=>({typeCheck:sqliteCore.check("thread_events_type_ck",drizzleOrm.sql`${t.type} IN ('thread.snapshot.imported', 'thread.title.changed', 'thread.priority.changed', 'thread.state.changed', 'thread.highlight.created', 'thread.highlight.updated', 'thread.highlight.deleted', 'thread.highlights.regenerated')`),actorTypeCheck:sqliteCore.check("thread_events_actor_type_ck",drizzleOrm.sql`${t.actor_type} IN ('user', 'agent', 'system')`),payloadJsonCheck:sqliteCore.check("thread_events_payload_json_ck",drizzleOrm.sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),threadSeqIndex:sqliteCore.index("idx_thread_events_thread_seq").on(t.thread_id,t.seq),threadCreatedIndex:sqliteCore.index("idx_thread_events_thread_created").on(t.thread_id,t.created_at),threadSeqUnique:sqliteCore.uniqueIndex("thread_events_thread_seq_uq").on(t.thread_id,t.seq)})),M=sqliteCore.sqliteTable("thread_highlight_runs",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>_.id,{onDelete:"cascade"}),request_id:sqliteCore.text("request_id").notNull(),status:sqliteCore.text("status").notNull(),detector_version:sqliteCore.text("detector_version").notNull(),requested_at:sqliteCore.text("requested_at").notNull(),started_at:sqliteCore.text("started_at"),completed_at:sqliteCore.text("completed_at"),error_code:sqliteCore.text("error_code"),previous_auto_count:sqliteCore.integer("previous_auto_count"),new_auto_count:sqliteCore.integer("new_auto_count")},t=>({statusCheck:sqliteCore.check("thread_highlight_runs_status_ck",drizzleOrm.sql`${t.status} IN ('queued', 'running', 'completed', 'failed')`),countCheck:sqliteCore.check("thread_highlight_runs_counts_ck",drizzleOrm.sql`(${t.previous_auto_count} IS NULL OR ${t.previous_auto_count} >= 0) AND (${t.new_auto_count} IS NULL OR ${t.new_auto_count} >= 0)`),threadRequestUnique:sqliteCore.uniqueIndex("thread_highlight_runs_thread_request_uq").on(t.thread_id,t.request_id),inProgressThreadUnique:sqliteCore.uniqueIndex("thread_highlight_runs_in_progress_thread_uq").on(t.thread_id).where(drizzleOrm.sql`${t.status} IN ('queued', 'running')`),threadStatusRequestedIndex:sqliteCore.index("idx_thread_highlight_runs_thread_status_requested").on(t.thread_id,t.status,t.requested_at)})),C=sqliteCore.sqliteTable("thread_highlights",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>_.id,{onDelete:"cascade"}),source:sqliteCore.text("source").notNull(),kind:sqliteCore.text("kind").notNull(),status:sqliteCore.text("status").notNull().default("active"),text:sqliteCore.text("text"),covers_from_task_id:sqliteCore.text("covers_from_task_id").notNull(),covers_to_task_id:sqliteCore.text("covers_to_task_id").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),agent_id:sqliteCore.text("agent_id"),source_task_id:sqliteCore.text("source_task_id"),detector_version:sqliteCore.text("detector_version"),content_fingerprint:sqliteCore.text("content_fingerprint"),dismissed_at:sqliteCore.text("dismissed_at")},t=>({sourceCheck:sqliteCore.check("thread_highlights_source_ck",drizzleOrm.sql`${t.source} IN ('auto', 'manual')`),kindCheck:sqliteCore.check("thread_highlights_kind_ck",drizzleOrm.sql`${t.kind} IN ('decision', 'judgment', 'issue', 'result', 'pivot')`),statusCheck:sqliteCore.check("thread_highlights_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'dismissed')`),activeTextCheck:sqliteCore.check("thread_highlights_active_text_ck",drizzleOrm.sql`${t.status} = 'dismissed' OR (${t.text} IS NOT NULL AND length(${t.text}) > 0)`),coversCheck:sqliteCore.check("thread_highlights_covers_ck",drizzleOrm.sql`length(${t.covers_from_task_id}) > 0 AND length(${t.covers_to_task_id}) > 0`),autoKeyCheck:sqliteCore.check("thread_highlights_auto_key_ck",drizzleOrm.sql`${t.source} = 'manual' OR (${t.source} = 'auto' AND ${t.source_task_id} IS NOT NULL AND ${t.detector_version} IS NOT NULL AND ${t.content_fingerprint} IS NOT NULL AND length(${t.source_task_id}) > 0 AND length(${t.detector_version}) > 0 AND length(${t.content_fingerprint}) > 0)`),threadStatusCreatedIndex:sqliteCore.index("idx_thread_highlights_thread_status_created").on(t.thread_id,t.status,t.created_at),threadCoversIndex:sqliteCore.index("idx_thread_highlights_thread_covers").on(t.thread_id,t.covers_from_task_id,t.covers_to_task_id),autoIdempotencyUnique:sqliteCore.uniqueIndex("thread_highlights_auto_idempotency_uq").on(t.thread_id,t.source_task_id,t.detector_version,t.content_fingerprint).where(drizzleOrm.sql`${t.source} = 'auto'`)}));});var ps=I(()=>{h();sqliteCore.sqliteTable("storage_metadata",{source_kind:sqliteCore.text("source_kind").notNull(),source_id:sqliteCore.text("source_id").notNull(),utc_ts:sqliteCore.text("utc_ts"),bytes:sqliteCore.integer("bytes").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.source_kind,t.source_id]}),kindTimestampBytesIndex:sqliteCore.index("idx_storage_metadata_kind_ts_bytes").on(t.source_kind,t.utc_ts,t.bytes)})),sqliteCore.sqliteTable("storage_metadata_state",{unit:sqliteCore.text("unit").primaryKey().notNull(),cursor_rowid:sqliteCore.integer("cursor_rowid").notNull().default(0),end_rowid:sqliteCore.integer("end_rowid"),complete:sqliteCore.integer("complete").notNull().default(0),updated_at:sqliteCore.text("updated_at").notNull()});});var yt=I(()=>{h();fr();$t();Mo();Rn();Uo();qo();Bo();Go();Vo();Ko();Xo();Qo();Zo();ts();os();Er();cs();ps();});var Et,Sr,fs,Ir=I(()=>{h();Et={"claude-fable-5-1":{input:10,cachedInput:.25,output:50},"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-6-astra":{input:10,cachedInput:1,output:50},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},Sr=new Set(["gpt-5.3-codex-spark"]),fs=new Set(["auto","claude-fable-5","claude-fable-5-1","claude-haiku-4-5","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","gemini-3.1-pro","gemini-3.5-flash","gemini-3.6-flash","gemini-3.7-flash","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-oss-120b","grok-4.5","grok-4.6"]);});function Ar(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 yd(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),Bt;let e=Ar(t),n=wd[e];if(n)return On[n]??Et[n]??Bt;if(On[e])return On[e];if(Et[e])return Et[e];if(Sr.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),Bt;if(fs.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),Bt;let r={...Et,...On};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),Bt}function Ed(t,e,n,r=0,o){let s=yd(n),a=Math.min(r,t),u=(t-a)*s.input/1e6,c=a*s.cachedInput/1e6,l=e*s.output/1e6;return u+c+l}function gs(t,e,n,r,o,s){return t&&t>0?t:!e&&!n?0:Ed(e??0,n??0,o,r??0)}var wd,Bt,On,Cn=I(()=>{h();Ir();Ir();wd={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"},Bt={input:0,cachedInput:0,output:0},On={};});function ks(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function ms(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function Ts(t){return Number.isSafeInteger(t)&&t>0}function vd(t,e){return new Promise(n=>{let r;try{r=child_process.spawn(t,e,{windowsHide:!0});}catch(c){n({status:null,stdout:"",stderr:"",error:ks(c)});return}let o="",s="",a=false,d,u=setTimeout(()=>{try{r.kill();}catch{}d({status:null,stdout:o,stderr:s,error:new Error(`Command timed out after ${hs}ms`)});},hs);d=c=>{a||(a=true,clearTimeout(u),n(c));},r.stdout?.setEncoding("utf8"),r.stderr?.setEncoding("utf8"),r.stdout?.on("data",c=>{o+=String(c);}),r.stderr?.on("data",c=>{s+=String(c);}),r.once("error",c=>{d({status:null,stdout:o,stderr:s,error:c});}),r.once("close",c=>{d({status:c,stdout:o,stderr:s});});})}async function ws(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):vd(t,e)}function bd(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function xd(){return new Promise(t=>{setImmediate(t);})}function dt(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return ms(n)==="ESRCH"?"not_found":ms(n)==="EPERM"?"alive":"unknown"}}function Od(t,e){let n=dt(-t,e),r=dt(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function ys(t,e,n,r){let o=Math.max(0,n),s=Math.max(1,r.pollIntervalMs??Id),a=Date.now()+o,d,u=o===0,c=r.sleep?Promise.resolve().then(()=>r.sleep(o)).then(()=>{},()=>{}):new Promise(l=>{d=setTimeout(l,o);});c.then(()=>{u=true;});try{for(await xd();;){let l=Od(t,e);if(l==="not_found")return l;let p=a-Date.now();if(u||p<=0)return l;await Promise.race([c,bd(Math.min(s,p))]);}}finally{d!==void 0&&clearTimeout(d);}}async function _s(t,e,n,r,o){let s=await ys(t,e,o.hardConfirmMs??Ad,{...o,sleep:void 0});return s==="not_found"?n?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r}:s==="alive"?{status:"failed",pid:t,method:r,error:"Process is still running after termination attempt"}:{status:"failed",pid:t,method:r,error:"Unable to verify process termination"}}async function vr(t,e,n={}){if(!Ts(t))return "unknown";let r=n.platform??process.platform,o=r==="win32"?"powershell.exe":"ps",s=r==="win32"?["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-Command",`$p = Get-CimInstance -ClassName Win32_Process -Filter 'ProcessId = ${t}' -ErrorAction Stop; if ($null -ne $p) { [Console]::Write([string]$p.CommandLine) }`]:["-p",String(t),"-o","command="],a;try{a=await ws(o,s,n);}catch{return "unknown"}if(a.error||a.status!==0)return "unknown";let d=a.stdout.trim();if(!d)return "not_found";let u=r==="win32"?d.toLowerCase():d;return e.filter(l=>l.trim().length>0).some(l=>{let p=r==="win32"?l.toLowerCase():l;return u.includes(p)})?"owned":"not_owned"}async function Gt(t,e={}){let n=e.platform??process.platform,r=n==="win32"?"taskkill":"process-group",o=g=>({status:"failed",pid:t,method:r,error:g});if(!Ts(t))return o("Invalid process ID");let s=e.kill??process.kill,a=dt(t,s);if(a==="not_found")return {status:"not_found",pid:t,method:r};if(a!=="alive")return o("Unable to determine whether the process is alive");if(n==="win32"){let g;try{g=await ws("taskkill",["/PID",String(t),"/T","/F"],e);}catch(R){g={status:null,stdout:"",stderr:"",error:ks(R)};}let m=dt(t,s);return m==="not_found"?g.status===0&&!g.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:o(m==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let d,u=e.signal??"SIGKILL";try{s(-t,u);}catch(g){d=g;}if(u==="SIGKILL")return _s(t,s,d,r,e);if(await ys(t,s,e.graceMs??Sd,e)==="not_found")return d?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r};let l;try{s(-t,"SIGKILL");}catch(g){l=g;}let p=await _s(t,s,l,r,e);return p.status==="terminated"?p:p.status==="not_found"?d?p:{status:"terminated",pid:t,method:r}:o(p.error??"Process termination failed")}var hs,jt,Sd,Id,Ad,Nn=I(()=>{h();hs=3e3,jt="SIGINT",Sd=2e3,Id=25,Ad=100;});function As(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new f("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new f("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function Ss(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new f("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,o)=>As(r,o))}catch(r){throw r instanceof f?new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function vs(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new f("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new f("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new f("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function Is(t){return {taskId:t.id,source:vs(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function Md(t){if(!Number.isInteger(t)||t<0)throw new f("VALIDATION","Task log tail limit must be a non-negative integer")}var Pn,bs=I(()=>{h();st();mt();kt();rt();yt();Pn=class extends pe{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=ke.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?ot(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=ke.dirname(n);fs$1.existsSync(o)||fs$1.mkdirSync(o,{recursive:true});}else if(!fs$1.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=j(n);if(e)try{xe(r.db,n);}catch(o){throw r.close(),o}return r}findStateRow(e,n){return e.db.select({id:i.id,log_storage:i.log_storage,last_log_seq:i.last_log_seq,log_revision:i.log_revision,logs:i.logs}).from(i).where(drizzleOrm.eq(i.id,n)).limit(1).get()}findStateRowInTransaction(e,n){return e.select({id:i.id,log_storage:i.log_storage,last_log_seq:i.last_log_seq,log_revision:i.log_revision,logs:i.logs}).from(i).where(drizzleOrm.eq(i.id,n)).limit(1).get()}requireStateRowInTransaction(e,n){let r=this.findStateRowInTransaction(e,n);if(!r)throw new f("NOT_FOUND",`Task not found: ${n}`);return r}appendLog(e,n){return this.appendLogs(e,[n])}appendLogs(e,n){let r=n.map((s,a)=>As(s,a));if(r.length===0){let s=this.getLogState(e);if(!s)throw new f("NOT_FOUND",`Task not found: ${e}`);return s}let o=this.openHandle(true);try{return o.db.transaction(a=>{let d=this.requireStateRowInTransaction(a,e),u=vs(d);if(u==="blob"){let g=Ss(e,d.logs);if(a.update(i).set({logs:JSON.stringify([...g,...r]),log_revision:drizzleOrm.sql`${i.log_revision} + 1`}).where(drizzleOrm.eq(i.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:u,revision:d.log_revision+1,lastSeq:d.last_log_seq}}let c=d.last_log_seq+1,l=d.last_log_seq+r.length;if(a.insert(Ce).values(r.map((g,m)=>({task_id:e,seq:c+m,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),a.update(i).set({last_log_seq:l,log_revision:drizzleOrm.sql`${i.log_revision} + 1`}).where(drizzleOrm.eq(i.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:u,revision:d.log_revision+1,lastSeq:l}},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to append task log",s)}finally{o.close();}}getLogState(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=this.findStateRow(n,e);return r?Is(r):void 0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return Md(n),this.readLogsInternal(e,n)}readTail(e,n){return this.readLogsTail(e,n)}readLogsInternal(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.transaction(o=>{let s=this.findStateRowInTransaction(o,e);if(!s)return;let a=Is(s);if(a.source==="blob"){let l=Ss(e,s.logs);return {...a,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let d=o.select({seq:Ce.seq,timestamp:Ce.timestamp,level:Ce.level,message:Ce.message}).from(Ce).where(drizzleOrm.eq(Ce.task_id,e)).orderBy(n===void 0?drizzleOrm.asc(Ce.seq):drizzleOrm.desc(Ce.seq)),c=(n===void 0?d.all():d.limit(n).all()).map(({timestamp:l,level:p,message:g})=>({timestamp:l,level:p,message:g}));return n!==void 0&&c.reverse(),{...a,entries:c}},{behavior:"deferred"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read task logs",o)}finally{r.close();}}};});var xs=I(()=>{h();});var Z,zt=I(()=>{h();Z=class extends Error{constructor(n,r,o){super(n);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout};});var je,br=I(()=>{h();zt();je=class extends Z{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Le(t){return /crewx\s+(q|query|x|execute)\s/.test(t)}function Me(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 Rt=I(()=>{h();});function Ud(t){let e=qd(t),n=e.map((s,a)=>({line:s,index:a})).filter(({line:s})=>Bd(s.value)),r=Fd(e);return {result:n.length===1&&n[0].index===r?jd(n[0].line.value):null,resultPreview:zd(e,n),hasReservedLine:n.length>0}}function Ge(t,e){let n=Ud(t);return {resultPreview:n.resultPreview,isError:e||n.result?.isError===true,...n.hasReservedLine?{delegationResult:n.result}:{}}}function qd(t){let e=[],n=0;for(let r=0;r<t.length;r++){let o=t[r];if(o!==`
|
|
7
|
+
)`),instanceRequestUnique:sqliteCore.uniqueIndex("ui_action_receipts_instance_request_uq").on(t.instance_id,t.request_id),instanceIdIdx:sqliteCore.index("ui_action_receipts_instance_id_idx").on(t.instance_id),requestedAtIdx:sqliteCore.index("ui_action_receipts_requested_at_idx").on(t.requested_at)}));});var us,cs=A(()=>{h();us=sqliteCore.sqliteTable("projects",{id:sqliteCore.text("id").primaryKey().notNull(),workspace_id:sqliteCore.text("workspace_id").notNull(),name:sqliteCore.text("name").notNull(),outcome:sqliteCore.text("outcome").notNull(),due_date:sqliteCore.text("due_date"),scene:sqliteCore.text("scene").notNull().default("planning"),stages_json:sqliteCore.text("stages_json").notNull(),stage_index:sqliteCore.integer("stage_index").notNull(),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),accepted_at:sqliteCore.text("accepted_at"),archived_at:sqliteCore.text("archived_at")},t=>({idCheck:sqliteCore.check("projects_id_ck",drizzleOrm.sql`${t.id} GLOB 'prj_*'`),sceneCheck:sqliteCore.check("projects_scene_ck",drizzleOrm.sql`${t.scene} IN ('planning', 'plan_review', 'running', 'human_wait', 'limit_wait', 'failed_stop', 'analyzing_feedback', 'replanned', 'awaiting_review', 'accepted')`),stagesJsonCheck:sqliteCore.check("projects_stages_json_ck",drizzleOrm.sql`json_valid(${t.stages_json}) AND json_type(${t.stages_json}) = 'array'`),stageIndexCheck:sqliteCore.check("projects_stage_index_ck",drizzleOrm.sql`${t.stage_index} >= 1`)})),sqliteCore.sqliteTable("project_criteria",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>us.id,{onDelete:"cascade"}),position:sqliteCore.integer("position").notNull(),statement:sqliteCore.text("statement").notNull(),verify_status:sqliteCore.text("verify_status").notNull().default("pending"),verified_at:sqliteCore.text("verified_at"),evidence_json:sqliteCore.text("evidence_json").notNull().default("[]"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({idCheck:sqliteCore.check("project_criteria_id_ck",drizzleOrm.sql`${t.id} GLOB 'pjc_*'`),verifyStatusCheck:sqliteCore.check("project_criteria_verify_status_ck",drizzleOrm.sql`${t.verify_status} IN ('pending', 'verifying', 'passed', 'failed')`),evidenceJsonCheck:sqliteCore.check("project_criteria_evidence_json_ck",drizzleOrm.sql`json_valid(${t.evidence_json}) AND json_type(${t.evidence_json}) = 'array'`),projectPositionUnique:sqliteCore.uniqueIndex("project_criteria_project_position_uq").on(t.project_id,t.position)})),sqliteCore.sqliteTable("project_events",{id:sqliteCore.text("id").primaryKey().notNull(),project_id:sqliteCore.text("project_id").notNull().references(()=>us.id,{onDelete:"restrict"}),seq:sqliteCore.integer("seq").notNull(),actor_type:sqliteCore.text("actor_type").notNull(),actor_id:sqliteCore.text("actor_id"),type:sqliteCore.text("type").notNull(),title:sqliteCore.text("title").notNull(),summary:sqliteCore.text("summary"),payload_json:sqliteCore.text("payload_json").notNull().default("{}"),created_at:sqliteCore.text("created_at").notNull()},t=>({idCheck:sqliteCore.check("project_events_id_ck",drizzleOrm.sql`${t.id} GLOB 'pje_*'`),actorTypeCheck:sqliteCore.check("project_events_actor_type_ck",drizzleOrm.sql`${t.actor_type} IN ('user', 'project_manager', 'system')`),payloadJsonCheck:sqliteCore.check("project_events_payload_json_ck",drizzleOrm.sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),projectSeqUnique:sqliteCore.uniqueIndex("project_events_project_seq_uq").on(t.project_id,t.seq)}));});var Rr,Sr,S,Ir=A(()=>{h();Rr=["THREAD_STATE","THREAD_PRIORITY"],Sr=["gray","blue","violet","green","amber","orange","red","pink"],S=sqliteCore.sqliteTable("common_codes",{code_group:sqliteCore.text("code_group").notNull(),code:sqliteCore.text("code").notNull(),code_name:sqliteCore.text("code_name"),color:sqliteCore.text("color").notNull().default("gray"),sort_order:sqliteCore.integer("sort_order").notNull(),workspace_id:sqliteCore.text("workspace_id"),is_builtin:sqliteCore.integer("is_builtin").notNull().default(0),is_archived:sqliteCore.integer("is_archived").notNull().default(0),metadata:sqliteCore.text("metadata"),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.code_group,t.code]}),metadataCheck:sqliteCore.check("common_codes_metadata_ck",drizzleOrm.sql`${t.metadata} IS NULL OR (json_valid(${t.metadata}) AND json_type(${t.metadata}) = 'object')`),builtinCheck:sqliteCore.check("common_codes_builtin_ck",drizzleOrm.sql`${t.is_builtin} IN (0, 1)`),archivedCheck:sqliteCore.check("common_codes_archived_ck",drizzleOrm.sql`${t.is_archived} IN (0, 1)`),idxCommonCodesSelection:sqliteCore.index("idx_common_codes_group_archived_order").on(t.code_group,t.is_archived,t.sort_order)}));});var ls,ps,fs,gs,hs,U,M,P,ms=A(()=>{h();In();ls=["thread.snapshot.imported","thread.title.changed","thread.priority.changed","thread.state.changed","thread.highlight.created","thread.highlight.updated","thread.highlight.deleted","thread.highlights.regenerated"],ps=["user","agent","system"],fs=["auto","manual"],gs=["decision","judgment","issue","result","pivot"],hs=["queued","running","completed","failed"],U=sqliteCore.sqliteTable("thread_events",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>_.id,{onDelete:"cascade"}),seq:sqliteCore.integer("seq").notNull(),type:sqliteCore.text("type").notNull(),actor_type:sqliteCore.text("actor_type").notNull(),payload_json:sqliteCore.text("payload_json").notNull(),created_at:sqliteCore.text("created_at").notNull(),actor_id:sqliteCore.text("actor_id"),task_id:sqliteCore.text("task_id"),highlight_id:sqliteCore.text("highlight_id")},t=>({typeCheck:sqliteCore.check("thread_events_type_ck",drizzleOrm.sql`${t.type} IN ('thread.snapshot.imported', 'thread.title.changed', 'thread.priority.changed', 'thread.state.changed', 'thread.highlight.created', 'thread.highlight.updated', 'thread.highlight.deleted', 'thread.highlights.regenerated')`),actorTypeCheck:sqliteCore.check("thread_events_actor_type_ck",drizzleOrm.sql`${t.actor_type} IN ('user', 'agent', 'system')`),payloadJsonCheck:sqliteCore.check("thread_events_payload_json_ck",drizzleOrm.sql`json_valid(${t.payload_json}) AND json_type(${t.payload_json}) = 'object'`),threadSeqIndex:sqliteCore.index("idx_thread_events_thread_seq").on(t.thread_id,t.seq),threadCreatedIndex:sqliteCore.index("idx_thread_events_thread_created").on(t.thread_id,t.created_at),threadSeqUnique:sqliteCore.uniqueIndex("thread_events_thread_seq_uq").on(t.thread_id,t.seq)})),M=sqliteCore.sqliteTable("thread_highlight_runs",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>_.id,{onDelete:"cascade"}),request_id:sqliteCore.text("request_id").notNull(),status:sqliteCore.text("status").notNull(),detector_version:sqliteCore.text("detector_version").notNull(),requested_at:sqliteCore.text("requested_at").notNull(),started_at:sqliteCore.text("started_at"),completed_at:sqliteCore.text("completed_at"),error_code:sqliteCore.text("error_code"),previous_auto_count:sqliteCore.integer("previous_auto_count"),new_auto_count:sqliteCore.integer("new_auto_count")},t=>({statusCheck:sqliteCore.check("thread_highlight_runs_status_ck",drizzleOrm.sql`${t.status} IN ('queued', 'running', 'completed', 'failed')`),countCheck:sqliteCore.check("thread_highlight_runs_counts_ck",drizzleOrm.sql`(${t.previous_auto_count} IS NULL OR ${t.previous_auto_count} >= 0) AND (${t.new_auto_count} IS NULL OR ${t.new_auto_count} >= 0)`),threadRequestUnique:sqliteCore.uniqueIndex("thread_highlight_runs_thread_request_uq").on(t.thread_id,t.request_id),inProgressThreadUnique:sqliteCore.uniqueIndex("thread_highlight_runs_in_progress_thread_uq").on(t.thread_id).where(drizzleOrm.sql`${t.status} IN ('queued', 'running')`),threadStatusRequestedIndex:sqliteCore.index("idx_thread_highlight_runs_thread_status_requested").on(t.thread_id,t.status,t.requested_at)})),P=sqliteCore.sqliteTable("thread_highlights",{id:sqliteCore.text("id").primaryKey().notNull(),thread_id:sqliteCore.text("thread_id").notNull().references(()=>_.id,{onDelete:"cascade"}),source:sqliteCore.text("source").notNull(),kind:sqliteCore.text("kind").notNull(),status:sqliteCore.text("status").notNull().default("active"),text:sqliteCore.text("text"),covers_from_task_id:sqliteCore.text("covers_from_task_id").notNull(),covers_to_task_id:sqliteCore.text("covers_to_task_id").notNull(),revision:sqliteCore.integer("revision").notNull().default(0),created_at:sqliteCore.text("created_at").notNull(),updated_at:sqliteCore.text("updated_at").notNull(),agent_id:sqliteCore.text("agent_id"),source_task_id:sqliteCore.text("source_task_id"),detector_version:sqliteCore.text("detector_version"),content_fingerprint:sqliteCore.text("content_fingerprint"),dismissed_at:sqliteCore.text("dismissed_at")},t=>({sourceCheck:sqliteCore.check("thread_highlights_source_ck",drizzleOrm.sql`${t.source} IN ('auto', 'manual')`),kindCheck:sqliteCore.check("thread_highlights_kind_ck",drizzleOrm.sql`${t.kind} IN ('decision', 'judgment', 'issue', 'result', 'pivot')`),statusCheck:sqliteCore.check("thread_highlights_status_ck",drizzleOrm.sql`${t.status} IN ('active', 'dismissed')`),activeTextCheck:sqliteCore.check("thread_highlights_active_text_ck",drizzleOrm.sql`${t.status} = 'dismissed' OR (${t.text} IS NOT NULL AND length(${t.text}) > 0)`),coversCheck:sqliteCore.check("thread_highlights_covers_ck",drizzleOrm.sql`length(${t.covers_from_task_id}) > 0 AND length(${t.covers_to_task_id}) > 0`),autoKeyCheck:sqliteCore.check("thread_highlights_auto_key_ck",drizzleOrm.sql`${t.source} = 'manual' OR (${t.source} = 'auto' AND ${t.source_task_id} IS NOT NULL AND ${t.detector_version} IS NOT NULL AND ${t.content_fingerprint} IS NOT NULL AND length(${t.source_task_id}) > 0 AND length(${t.detector_version}) > 0 AND length(${t.content_fingerprint}) > 0)`),threadStatusCreatedIndex:sqliteCore.index("idx_thread_highlights_thread_status_created").on(t.thread_id,t.status,t.created_at),threadCoversIndex:sqliteCore.index("idx_thread_highlights_thread_covers").on(t.thread_id,t.covers_from_task_id,t.covers_to_task_id),autoIdempotencyUnique:sqliteCore.uniqueIndex("thread_highlights_auto_idempotency_uq").on(t.thread_id,t.source_task_id,t.detector_version,t.content_fingerprint).where(drizzleOrm.sql`${t.source} = 'auto'`)}));});var ks=A(()=>{h();sqliteCore.sqliteTable("storage_metadata",{source_kind:sqliteCore.text("source_kind").notNull(),source_id:sqliteCore.text("source_id").notNull(),utc_ts:sqliteCore.text("utc_ts"),bytes:sqliteCore.integer("bytes").notNull()},t=>({pk:sqliteCore.primaryKey({columns:[t.source_kind,t.source_id]}),kindTimestampBytesIndex:sqliteCore.index("idx_storage_metadata_kind_ts_bytes").on(t.source_kind,t.utc_ts,t.bytes)})),sqliteCore.sqliteTable("storage_metadata_state",{unit:sqliteCore.text("unit").primaryKey().notNull(),cursor_rowid:sqliteCore.integer("cursor_rowid").notNull().default(0),end_rowid:sqliteCore.integer("end_rowid"),complete:sqliteCore.integer("complete").notNull().default(0),updated_at:sqliteCore.text("updated_at").notNull()});});var yt=A(()=>{h();mr();qt();Bo();In();Go();zo();Ko();Xo();Zo();es();ns();os();ss();as();cs();Ir();ms();ks();});var Et,vr,Ts,Or=A(()=>{h();Et={"claude-fable-5-1":{input:10,cachedInput:.25,output:50},"claude-fable-5":{input:10,cachedInput:1,output:50},"claude-opus-5":{input:5,cachedInput:.5,output:25},"claude-opus-4-8":{input:5,cachedInput:.5,output:25},"claude-opus-4-7":{input:5,cachedInput:.5,output:25},"claude-opus-4-6":{input:5,cachedInput:.5,output:25},"claude-sonnet-5":{input:2,cachedInput:.2,output:10},"claude-sonnet-4-6":{input:3,cachedInput:.3,output:15},"claude-haiku-4-5":{input:1,cachedInput:.1,output:5},"gpt-6-astra":{input:10,cachedInput:1,output:50},"gpt-5.6-sol":{input:5,cachedInput:.5,output:30},"gpt-5.6-terra":{input:2,cachedInput:.2,output:12},"gpt-5.6-luna":{input:.2,cachedInput:.02,output:1.2},"gpt-5.5":{input:5,cachedInput:.5,output:30},"gpt-5.4":{input:2.5,cachedInput:.25,output:15},"gpt-5.4-mini":{input:.75,cachedInput:.075,output:4.5},"gpt-5.3-codex":{input:1.75,cachedInput:.175,output:14},"gpt-5-mini":{input:.4,cachedInput:.1,output:1.6},"gpt-4.1":{input:2,cachedInput:.5,output:8},"gpt-4o":{input:2.5,cachedInput:1.25,output:10},"glm-5.2":{input:1.4,cachedInput:.26,output:4.4},"glm-5.1":{input:1.4,cachedInput:.26,output:4.4},"gemini-3.7-flash":{input:1.5,cachedInput:.15,output:7.5},"gemini-3.6-flash":{input:1.5,cachedInput:.15,output:7.5},"grok-4.6":{input:2,cachedInput:.5,output:6},"grok-4.5":{input:2,cachedInput:.3,output:6}},vr=new Set(["gpt-5.3-codex-spark"]),Ts=new Set(["auto","claude-fable-5","claude-fable-5-1","claude-haiku-4-5","claude-opus-4-6-thinking","claude-opus-4-6[1m]","claude-opus-4-7[1m]","claude-opus-4-8[1m]","claude-opus-5","claude-sonnet-4-6","claude-sonnet-4-6[1m]","claude-sonnet-5","gemini-3.1-pro","gemini-3.5-flash","gemini-3.6-flash","gemini-3.7-flash","gpt-5.3-codex","gpt-5.3-codex-spark","gpt-5.4","gpt-5.4-mini","gpt-5.5","gpt-5.6-luna","gpt-5.6-sol","gpt-5.6-terra","gpt-6-astra","gpt-oss-120b","grok-4.5","grok-4.6"]);});function br(t){let e=t.toLowerCase().trim();e=e.replace(/\[[^\]]*\]$/g,"");let n=e.lastIndexOf("/");return n>=0&&(e=e.slice(n+1)),e=e.replace(/-\d{8}$/,""),e}function Ad(t){if(!t)return console.warn("[pricing] missing model id; cost is being recorded as 0"),Wt;let e=br(t),n=Id[e];if(n)return Nn[n]??Et[n]??Wt;if(Nn[e])return Nn[e];if(Et[e])return Et[e];if(vr.has(e))return console.warn(`[pricing] unpublished model pricing: ${t}, cost_usd=0`),Wt;if(Ts.has(e))return console.warn(`[pricing] missing catalog pricing: ${t}, cost_usd=0`),Wt;let r={...Et,...Nn};for(let o of Object.keys(r))if(e.includes(o))return r[o];return console.warn(`[pricing] Unknown model: ${t}, cost_usd=0`),Wt}function vd(t,e,n,r=0,o){let s=Ad(n),a=Math.min(r,t),u=(t-a)*s.input/1e6,c=a*s.cachedInput/1e6,l=e*s.output/1e6;return u+c+l}function ws(t,e,n,r,o,s){return t&&t>0?t:!e&&!n?0:vd(e??0,n??0,o,r??0)}var Id,Wt,Nn,Pn=A(()=>{h();Or();Or();Id={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"},Wt={input:0,cachedInput:0,output:0},Nn={};});function Ss(t){return t instanceof Error?t:t===void 0?void 0:new Error(String(t))}function Es(t){return typeof t=="object"&&t!==null&&"code"in t?String(t.code):void 0}function Is(t){return Number.isSafeInteger(t)&&t>0}function Nd(t,e){return new Promise(n=>{let r;try{r=child_process.spawn(t,e,{windowsHide:!0});}catch(c){n({status:null,stdout:"",stderr:"",error:Ss(c)});return}let o="",s="",a=false,d,u=setTimeout(()=>{try{r.kill();}catch{}d({status:null,stdout:o,stderr:s,error:new Error(`Command timed out after ${ys}ms`)});},ys);d=c=>{a||(a=true,clearTimeout(u),n(c));},r.stdout?.setEncoding("utf8"),r.stderr?.setEncoding("utf8"),r.stdout?.on("data",c=>{o+=String(c);}),r.stderr?.on("data",c=>{s+=String(c);}),r.once("error",c=>{d({status:null,stdout:o,stderr:s,error:c});}),r.once("close",c=>{d({status:c,stdout:o,stderr:s});});})}async function As(t,e,n){return n.runCommandAsync?n.runCommandAsync(t,e):n.runCommand?n.runCommand(t,e):Nd(t,e)}function Pd(t){return new Promise(e=>{setTimeout(e,Math.max(0,t));})}function Dd(){return new Promise(t=>{setImmediate(t);})}function dt(t,e=process.kill){try{return e(t,0),"alive"}catch(n){return Es(n)==="ESRCH"?"not_found":Es(n)==="EPERM"?"alive":"unknown"}}function Ld(t,e){let n=dt(-t,e),r=dt(t,e);return n==="alive"||r==="alive"?"alive":n==="unknown"||r==="unknown"?"unknown":"not_found"}async function vs(t,e,n,r){let o=Math.max(0,n),s=Math.max(1,r.pollIntervalMs??xd),a=Date.now()+o,d,u=o===0,c=r.sleep?Promise.resolve().then(()=>r.sleep(o)).then(()=>{},()=>{}):new Promise(l=>{d=setTimeout(l,o);});c.then(()=>{u=true;});try{for(await Dd();;){let l=Ld(t,e);if(l==="not_found")return l;let p=a-Date.now();if(u||p<=0)return l;await Promise.race([c,Pd(Math.min(s,p))]);}}finally{d!==void 0&&clearTimeout(d);}}async function Rs(t,e,n,r,o){let s=await vs(t,e,o.hardConfirmMs??Cd,{...o,sleep:void 0});return s==="not_found"?n?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r}:s==="alive"?{status:"failed",pid:t,method:r,error:"Process is still running after termination attempt"}:{status:"failed",pid:t,method:r,error:"Unable to verify process termination"}}async function Dn(t,e,n={}){if(!Is(t))return "unknown";let r=n.platform??process.platform,o=r==="win32"?"powershell.exe":"ps",s=r==="win32"?["-NoLogo","-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-Command",`$p = Get-CimInstance -ClassName Win32_Process -Filter 'ProcessId = ${t}' -ErrorAction Stop; if ($null -ne $p) { [Console]::Write([string]$p.CommandLine) }`]:["-p",String(t),"-o","command="],a;try{a=await As(o,s,n);}catch{return "unknown"}if(a.error||a.status!==0)return "unknown";let d=a.stdout.trim();if(!d)return "not_found";let u=r==="win32"?d.toLowerCase():d;return e.filter(l=>l.trim().length>0).some(l=>{let p=r==="win32"?l.toLowerCase():l;return u.includes(p)})?"owned":"not_owned"}async function St(t,e={}){let n=e.platform??process.platform,r=n==="win32"?"taskkill":"process-group",o=g=>({status:"failed",pid:t,method:r,error:g});if(!Is(t))return o("Invalid process ID");let s=e.kill??process.kill,a=dt(t,s);if(a==="not_found")return {status:"not_found",pid:t,method:r};if(a!=="alive")return o("Unable to determine whether the process is alive");if(n==="win32"){let g;try{g=await As("taskkill",["/PID",String(t),"/T","/F"],e);}catch(R){g={status:null,stdout:"",stderr:"",error:Ss(R)};}let m=dt(t,s);return m==="not_found"?g.status===0&&!g.error?{status:"terminated",pid:t,method:r}:{status:"not_found",pid:t,method:r}:o(m==="alive"?"Process is still running after termination attempt":"Unable to verify process termination")}let d,u=e.signal??"SIGKILL";try{s(-t,u);}catch(g){d=g;}if(u==="SIGKILL")return Rs(t,s,d,r,e);if(await vs(t,s,e.graceMs??bd,e)==="not_found")return d?{status:"not_found",pid:t,method:r}:{status:"terminated",pid:t,method:r};let l;try{s(-t,"SIGKILL");}catch(g){l=g;}let p=await Rs(t,s,l,r,e);return p.status==="terminated"?p:p.status==="not_found"?d?p:{status:"terminated",pid:t,method:r}:o(p.error??"Process termination failed")}var ys,Rt,bd,xd,Cd,Ln=A(()=>{h();ys=3e3,Rt="SIGINT",bd=2e3,xd=25,Cd=100;});function Ns(t,e){let n=e===void 0?"":` at index ${e}`;if(!t||typeof t!="object")throw new f("VALIDATION",`Task log entry${n} must be an object`);if(typeof t.timestamp!="string"||typeof t.level!="string"||typeof t.message!="string")throw new f("VALIDATION",`Task log entry${n} must contain string timestamp, level, and message fields`);return {timestamp:t.timestamp,level:t.level,message:t.message}}function xs(t,e){if(e===null||e.trim()==="")return [];let n;try{n=JSON.parse(e);}catch(r){throw new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r)}if(!Array.isArray(n))throw new f("DB_ERROR",`Malformed legacy task logs: ${t} (expected an array)`);try{return n.map((r,o)=>Ns(r,o))}catch(r){throw r instanceof f?new f("DB_ERROR",`Malformed legacy task logs: ${t}`,r):r}}function Ps(t){if(t.log_storage!=="blob"&&t.log_storage!=="events")throw new f("DB_ERROR",`Invalid task log storage for task: ${t.id}`);if(!Number.isInteger(t.last_log_seq)||t.last_log_seq<0)throw new f("DB_ERROR",`Invalid task log sequence for task: ${t.id}`);if(!Number.isInteger(t.log_revision)||t.log_revision<0)throw new f("DB_ERROR",`Invalid task log revision for task: ${t.id}`);return t.log_storage}function Cs(t){return {taskId:t.id,source:Ps(t),revision:t.log_revision,lastSeq:t.last_log_seq}}function Fd(t){if(!Number.isInteger(t)||t<0)throw new f("VALIDATION","Task log tail limit must be a non-negative integer")}var Mn,Ds=A(()=>{h();st();mt();kt();rt();yt();Mn=class extends ge{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Te.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?ot(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Te.dirname(n);fs$1.existsSync(o)||fs$1.mkdirSync(o,{recursive:true});}else if(!fs$1.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=j(n);if(e)try{xe(r.db,n);}catch(o){throw r.close(),o}return r}findStateRow(e,n){return e.db.select({id:i.id,log_storage:i.log_storage,last_log_seq:i.last_log_seq,log_revision:i.log_revision,logs:i.logs}).from(i).where(drizzleOrm.eq(i.id,n)).limit(1).get()}findStateRowInTransaction(e,n){return e.select({id:i.id,log_storage:i.log_storage,last_log_seq:i.last_log_seq,log_revision:i.log_revision,logs:i.logs}).from(i).where(drizzleOrm.eq(i.id,n)).limit(1).get()}requireStateRowInTransaction(e,n){let r=this.findStateRowInTransaction(e,n);if(!r)throw new f("NOT_FOUND",`Task not found: ${n}`);return r}appendLog(e,n){return this.appendLogs(e,[n])}appendLogs(e,n){let r=n.map((s,a)=>Ns(s,a));if(r.length===0){let s=this.getLogState(e);if(!s)throw new f("NOT_FOUND",`Task not found: ${e}`);return s}let o=this.openHandle(true);try{return o.db.transaction(a=>{let d=this.requireStateRowInTransaction(a,e),u=Ps(d);if(u==="blob"){let g=xs(e,d.logs);if(a.update(i).set({logs:JSON.stringify([...g,...r]),log_revision:drizzleOrm.sql`${i.log_revision} + 1`}).where(drizzleOrm.eq(i.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:u,revision:d.log_revision+1,lastSeq:d.last_log_seq}}let c=d.last_log_seq+1,l=d.last_log_seq+r.length;if(a.insert(Ne).values(r.map((g,m)=>({task_id:e,seq:c+m,timestamp:g.timestamp,level:g.level,message:g.message}))).run(),a.update(i).set({last_log_seq:l,log_revision:drizzleOrm.sql`${i.log_revision} + 1`}).where(drizzleOrm.eq(i.id,e)).run().changes!==1)throw new f("NOT_FOUND",`Task not found: ${e}`);return {taskId:e,source:u,revision:d.log_revision+1,lastSeq:l}},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to append task log",s)}finally{o.close();}}getLogState(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=this.findStateRow(n,e);return r?Cs(r):void 0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to read task log state",r)}finally{n.close();}}readLogs(e){return this.readLogsInternal(e)}readLogsTail(e,n){return Fd(n),this.readLogsInternal(e,n)}readTail(e,n){return this.readLogsTail(e,n)}readLogsInternal(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{return r.db.transaction(o=>{let s=this.findStateRowInTransaction(o,e);if(!s)return;let a=Cs(s);if(a.source==="blob"){let l=xs(e,s.logs);return {...a,entries:n===void 0?l:l.slice(Math.max(0,l.length-n))}}let d=o.select({seq:Ne.seq,timestamp:Ne.timestamp,level:Ne.level,message:Ne.message}).from(Ne).where(drizzleOrm.eq(Ne.task_id,e)).orderBy(n===void 0?drizzleOrm.asc(Ne.seq):drizzleOrm.desc(Ne.seq)),c=(n===void 0?d.all():d.limit(n).all()).map(({timestamp:l,level:p,message:g})=>({timestamp:l,level:p,message:g}));return n!==void 0&&c.reverse(),{...a,entries:c}},{behavior:"deferred"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read task logs",o)}finally{r.close();}}};});var Ls=A(()=>{h();});var ee,zt=A(()=>{h();ee=class extends Error{constructor(n,r,o){super(n);this.providerStr=r;this.name="ProviderError",this.code=o?.code??"UNKNOWN",this.kind=o?.kind??(this.code==="UNKNOWN"?"transient":void 0),this.retryAfterMs=o?.retryAfterMs;}providerStr;code;kind;retryAfterMs;stdout};});var je,xr=A(()=>{h();zt();je=class extends ee{name="RateLimitError";constructor(e,n="cli/claude"){super(e,n,{code:"QUOTA_EXHAUSTED",kind:"transient"});}};});function Me(t){return /crewx\s+(q|query|x|execute)\s/.test(t)}function He(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 It=A(()=>{h();});function Wd(t){let e=Gd(t),n=e.map((s,a)=>({line:s,index:a})).filter(({line:s})=>Vd(s.value)),r=zd(e);return {result:n.length===1&&n[0].index===r?Kd(n[0].line.value):null,resultPreview:Yd(e,n),hasReservedLine:n.length>0}}function We(t,e){let n=Wd(t);return {resultPreview:n.resultPreview,isError:e||n.result?.isError===true,...n.hasReservedLine?{delegationResult:n.result}:{}}}function Gd(t){let e=[],n=0;for(let r=0;r<t.length;r++){let o=t[r];if(o!==`
|
|
8
8
|
`&&o!=="\r")continue;let s=o==="\r"&&t[r+1]===`
|
|
9
9
|
`?`\r
|
|
10
|
-
`:o;e.push({value:t.slice(n,r),separator:s}),r+=s.length-1,n=r+1;}return e.push({value:t.slice(n),separator:""}),e}function Fd(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function Bd(t){return t.trimStart().startsWith(Hd)}function jd(t){let e=t.trim();if(!e.startsWith(Os)||!e.endsWith("]]"))return null;let n=e.slice(Os.length,-2);if(!n)return null;try{return Gd(JSON.parse(n))}catch{return null}}function Gd(t){return Wd(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function Wd(t){if(!Vd(t)||Object.keys(t).some(r=>!$d.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?Cs(t.taskId)&&Cs(t.agentId):t.isError===true}function zd(t,e){if(e.length===0)return t.map(r=>r.value+r.separator).join("");let n=new Set(e.map(({index:r})=>r));return t.map((r,o)=>n.has(o)?"":r.value+r.separator).join("")}function Cs(t){return typeof t=="string"&&t.trim().length>0}function Vd(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Os,Hd,$d,Vt=I(()=>{h();Os="[[crewx:delegation-result ",Hd="[[crewx:delegation-result",$d=new Set(["schema","taskId","agentId","isError"]);});function He(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 St=I(()=>{h();});var Ns,Dn,xr,Ln=I(()=>{h();Ns=["none","minimal","low","medium","high","xhigh","max","ultra"],Dn={claude:["low","medium","high","xhigh","max"],codex:["minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]},xr={claude:{models:[{id:"claude-fable-5-1",name:"Claude Fable 5.1",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5-1":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-6-astra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Object.fromEntries(Object.entries(xr).map(([t,e])=>[t,e.models]));});function Or(t){return Jd[t]??t}function Yd(t){return Xd.get(t)??t}function Cr(t){if(!t)return {};let e=Zd.get(t);return e?{...e}:{model:t}}function Nr(t,e){return t==="antigravity"||t==="cli/antigravity"?Cr(e):e===void 0?{}:{model:Yd(e)}}var Kd,Jd,Xd,Qd,Zd,Kt=I(()=>{h();Kd=[{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]"}],Jd={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};Xd=new Map(Kd.map(({baseModelId:t,catalogModelId:e})=>[t,e]));Qd=[{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"}],Zd=new Map(Qd.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function tu(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function Ze(t){return Mn(t).models}function Mn(t){return eu[t]??xr[t]??tu()}function Jt(t,e){let n=Mn(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=Nr(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function Ps(t){return Mn(t).modelOverrides}function Ds(){return Ze("claude")}function Ls(){return Ze("codex")}function Ms(){return Ze("copilot")}function Hs(){return Ze("antigravity")}var eu,ut=I(()=>{h();Ln();Cn();Kt();eu={};});function $s(t){return nu[t]??t}var nu,Us=I(()=>{h();ut();Kt();nu={auto:"default"};});function Hn(t,e){return (Dn[t]??[]).includes(e)}function et(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return ru.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function qs(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 Fs(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 Bs(t){return !t||!Hn("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function js(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=$s(t);return e.has(n)?["--permission-mode",n]:[]}function Gs(t){return t?Hn("claude",t)?["--effort",t]:[]:[]}function Ws(t){return t==="default"?[]:t&&ou.has(t)?["--permission-mode",t]:[]}function zs(t){return t===true?["--always-approve"]:[]}function Vs(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 Ks(t){return t?Hn("grok",t)?["--effort",t]:[]:[]}function Js(t){if(!t)return [];switch(Or(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function Xs(t){return t?Hn("antigravity",t)?["--effort",t]:[]:[]}var ru,ou,Xt=I(()=>{h();Us();Kt();Ln();ru=new Set(Ns);ou=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function su(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),o="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,s="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,a=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:n,cachedInputTokens:a}}function iu(t){let e=t.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(!("input_tokens"in n))return null;let r=Number(n.input_tokens??0),o=Number(n.output_tokens??0),a="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,d="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,u=a!==void 0?a:d??0;return {inputTokens:a!==void 0?r+a:r,outputTokens:o,cachedInputTokens:u}}function au(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),o=Number(n.output??0),s=n.cache,a=s?Number(s.read??0):0;return {inputTokens:r+a,outputTokens:o,cachedInputTokens:a}}function Ys(t){let e=new Map,n;for(let s of t.split(`
|
|
11
|
-
`))if(s.trim())try{let a=JSON.parse(s);if(a.type!=="assistant")continue;let d=a.message,u=d?.id,c=d?.usage;if(typeof u!="string"||!c)continue;let l=Number(c.input_tokens??0),p=Number(c.cache_read_input_tokens??0);e.set(u,{inputTokens:l+p,cachedInputTokens:p});let g=d?.model;typeof g=="string"&&g&&(n=g);}catch{}if(e.size===0)return;let r=0,o=0;for(let s of e.values())r+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:n}}function
|
|
12
|
-
`))if(r.trim())try{let o=JSON.parse(r),s=
|
|
13
|
-
`).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let a of s.message.content)a.type==="text"&&typeof a.text=="string"&&a.text.trim()&&n.push(a.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function
|
|
10
|
+
`:o;e.push({value:t.slice(n,r),separator:s}),r+=s.length-1,n=r+1;}return e.push({value:t.slice(n),separator:""}),e}function zd(t){for(let e=t.length-1;e>=0;e--)if(t[e].value.trim())return e;return -1}function Vd(t){return t.trimStart().startsWith(Bd)}function Kd(t){let e=t.trim();if(!e.startsWith(Ms)||!e.endsWith("]]"))return null;let n=e.slice(Ms.length,-2);if(!n)return null;try{return Jd(JSON.parse(n))}catch{return null}}function Jd(t){return Xd(t)?Object.prototype.hasOwnProperty.call(t,"taskId")?{schema:1,taskId:t.taskId,agentId:t.agentId,isError:t.isError}:{schema:1,isError:true}:null}function Xd(t){if(!Qd(t)||Object.keys(t).some(r=>!jd.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?Hs(t.taskId)&&Hs(t.agentId):t.isError===true}function Yd(t,e){if(e.length===0)return t.map(r=>r.value+r.separator).join("");let n=new Set(e.map(({index:r})=>r));return t.map((r,o)=>n.has(o)?"":r.value+r.separator).join("")}function Hs(t){return typeof t=="string"&&t.trim().length>0}function Qd(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Ms,Bd,jd,Vt=A(()=>{h();Ms="[[crewx:delegation-result ",Bd="[[crewx:delegation-result",jd=new Set(["schema","taskId","agentId","isError"]);});function $e(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return JSON.stringify(t??{});let e=t;return typeof e.command=="string"?e.command:typeof e.file_path=="string"?e.file_path:typeof e.filePath=="string"?e.filePath:typeof e.path=="string"?e.path:typeof e.query=="string"?e.query:typeof e.pattern=="string"?e.pattern:typeof e.url=="string"?e.url:typeof e.prompt=="string"?e.prompt.length>200?e.prompt.slice(0,200)+"\u2026":e.prompt:typeof e.description=="string"?e.description:JSON.stringify(e)}var At=A(()=>{h();});var $s,Hn,Cr,$n=A(()=>{h();$s=["none","minimal","low","medium","high","xhigh","max","ultra"],Hn={claude:["low","medium","high","xhigh","max"],codex:["minimal","low","medium","high","xhigh","max","ultra"],opencode:[],copilot:["none","low","medium","high","xhigh","max"],antigravity:["low","medium","high"],grok:["low","medium","high","xhigh"]},Cr={claude:{models:[{id:"claude-fable-5-1",name:"Claude Fable 5.1",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-fable-5",name:"Claude Fable 5",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-5",name:"Claude Opus 5",contextWindowTokens:1e6,tier:"flagship",recommended:true},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced",recommended:true},{id:"claude-opus-4-8[1m]",name:"Claude Opus 4.8",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-7[1m]",name:"Claude Opus 4.7",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-opus-4-6[1m]",name:"Claude Opus 4.6",contextWindowTokens:1e6,tier:"flagship"},{id:"claude-sonnet-4-6[1m]",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindowTokens:2e5,tier:"speed"}],modes:[{id:"default",name:"Default",description:"Uses Claude's default permission handling with normal approval prompts."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without approval; other permission checks remain in place."},{id:"plan",name:"Plan",description:"Keeps Claude in plan mode so it can inspect and propose changes without applying them."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permissions; only pre-approved tool actions can proceed."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Claude permission checks so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"claude-fable-5-1":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-fable-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-sonnet-5":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-8[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-7[1m]":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"claude-opus-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-sonnet-4-6[1m]":{effort:["low","medium","high","max"],defaultEffort:"high"},"claude-haiku-4-5":{effort:[]}},providerOptions:[]},codex:{models:[{id:"gpt-6-astra",name:"GPT-6 Astra",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.6-sol",name:"GPT-5.6 Sol",contextWindowTokens:105e4,tier:"flagship",recommended:true},{id:"gpt-5.6-terra",name:"GPT-5.6 Terra",contextWindowTokens:105e4,tier:"balanced",recommended:true},{id:"gpt-5.6-luna",name:"GPT-5.6 Luna",contextWindowTokens:105e4,tier:"speed",recommended:true},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindowTokens:4e5,tier:"speed"},{id:"gpt-5.3-codex",name:"GPT-5.3 Codex",contextWindowTokens:4e5,tier:"flagship"},{id:"gpt-5.3-codex-spark",name:"GPT-5.3 Codex Spark",contextWindowTokens:128e3,tier:"speed"}],modes:[{id:"agent",name:"Agent",description:"Uses the workspace-write sandbox; can read and modify workspace files without full machine access."},{id:"read-only",name:"Read Only",description:"Uses the read-only sandbox; can inspect files but cannot write to the workspace."},{id:"plan",name:"Plan",description:"Uses the read-only sandbox for planning and inspection; cannot write to the workspace."},{id:"agent-full-access",name:"Agent Full Access",description:"Bypasses approvals and the sandbox; can access and modify files beyond the workspace."},{id:"yolo",name:"YOLO",description:"Bypasses approvals and the sandbox for unrestricted execution and full filesystem access."}],effort:["minimal","low","medium","high"],modelOverrides:{"gpt-6-astra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-sol":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"xhigh"},"gpt-5.6-terra":{effort:["low","medium","high","xhigh","max","ultra"],defaultEffort:"high"},"gpt-5.6-luna":{effort:["low","medium","high","xhigh","max"],defaultEffort:"high"},"gpt-5.5":{effort:["low","medium","high","xhigh"],defaultEffort:"high"}},providerOptions:[]},opencode:{models:[],modes:[{id:"plan",name:"Plan",description:"Uses the plan agent without --auto; planning follows standard approval behavior."},{id:"plan-auto",name:"Plan \xB7 Auto",description:"Uses the plan agent with --auto; planning uses automatic approvals."},{id:"build",name:"Build",description:"Uses the build agent without --auto; work follows standard approval behavior."},{id:"build-auto",name:"Build \xB7 Auto",description:"Uses the build agent with --auto; work uses automatic approvals."}],effort:[],modelOverrides:{},providerOptions:[]},copilot:{models:[{id:"auto",name:"Auto"},{id:"claude-sonnet-5",name:"Claude Sonnet 5",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"gpt-5.5",name:"GPT-5.5",contextWindowTokens:105e4,tier:"flagship"},{id:"gpt-5.4",name:"GPT-5.4",contextWindowTokens:105e4,tier:"flagship"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"}],modes:[{id:"interactive",name:"Interactive",description:"Passes --mode interactive; tool access follows Copilot's interactive mode behavior."},{id:"plan",name:"Plan",description:"Passes --mode plan; planning and permission behavior follow Copilot's plan mode."},{id:"autopilot",name:"Autopilot",description:"Passes --mode autopilot; execution behavior follows Copilot's autonomous mode."}],effort:["none","low","medium","high","xhigh","max"],modelOverrides:{},providerOptions:[]},antigravity:{models:[{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",contextWindowTokens:1048576,tier:"balanced"},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",contextWindowTokens:1048576,tier:"flagship"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindowTokens:1e6,tier:"balanced"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 Thinking",contextWindowTokens:1e6,tier:"flagship"},{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindowTokens:128e3,tier:"balanced"}],modes:[{id:"default",name:"Default",description:"Uses Antigravity's default permission handling. No extra permission flags are passed."},{id:"plan",name:"Plan",description:"Passes --mode plan. This turns on /plan; it is not a Claude-style permission mode."},{id:"acceptEdits",name:"Accept Edits",description:"Passes --mode accept-edits."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Passes --dangerously-skip-permissions so tools can run without approval prompts."}],effort:["low","medium","high"],modelOverrides:{"gemini-3.7-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.6-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.5-flash":{effort:["low","medium","high"],defaultEffort:"medium"},"gemini-3.1-pro":{effort:["low","high"],defaultEffort:"high"},"claude-sonnet-4-6":{effort:[]},"claude-opus-4-6-thinking":{effort:[]},"gpt-oss-120b":{effort:["medium"],defaultEffort:"medium"}},providerOptions:[]},grok:{models:[{id:"grok-4.6",name:"Grok 4.6",contextWindowTokens:5e5,tier:"flagship",recommended:true},{id:"grok-4.5",name:"Grok 4.5",contextWindowTokens:5e5,tier:"flagship"}],modes:[{id:"default",name:"Default",description:"Uses Grok's default permission handling."},{id:"acceptEdits",name:"Accept Edits",description:"Allows file edits without changing the selected sandbox profile."},{id:"auto",name:"Auto",description:"Uses Grok automatic permission handling."},{id:"dontAsk",name:"Don't Ask",description:"Does not ask for permission before tool execution."},{id:"bypassPermissions",name:"Bypass Permissions",description:"Bypasses Grok permission checks for tool execution."},{id:"plan",name:"Plan",description:"Keeps Grok in planning mode without applying changes."}],effort:["low","medium","high"],modelOverrides:{"grok-4.6":{effort:["low","medium","high","xhigh"],defaultEffort:"high"},"grok-4.5":{effort:["low","medium","high"],defaultEffort:"high"}},providerOptions:[{key:"alwaysApprove",type:"boolean"},{key:"sandbox",type:"enum",values:["workspace","read-only","off"]}]}},Object.fromEntries(Object.entries(Cr).map(([t,e])=>[t,e.models]));});function Nr(t){return eu[t]??t}function nu(t){return tu.get(t)??t}function Pr(t){if(!t)return {};let e=ou.get(t);return e?{...e}:{model:t}}function Dr(t,e){return t==="antigravity"||t==="cli/antigravity"?Pr(e):e===void 0?{}:{model:nu(e)}}var Zd,eu,tu,ru,ou,Kt=A(()=>{h();Zd=[{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]"}],eu={"accept-edits":"acceptEdits",yolo:"bypassPermissions","agent-full-access":"bypassPermissions"};tu=new Map(Zd.map(({baseModelId:t,catalogModelId:e})=>[t,e]));ru=[{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"}],ou=new Map(ru.map(({legacyId:t,model:e,effort:n})=>[t,n===void 0?{model:e}:{model:e,effort:n}]));});function iu(){return {models:[],modes:[],effort:[],modelOverrides:{},providerOptions:[]}}function Ze(t){return Un(t).models}function Un(t){return su[t]??Cr[t]??iu()}function Jt(t,e){let n=Un(t);if(e){if(Object.prototype.hasOwnProperty.call(n.modelOverrides,e))return n.modelOverrides[e]?.effort??n.effort;let r=Dr(t,e);return r.model===void 0?n.effort:n.modelOverrides[r.model]?.effort??n.effort}return n.effort}function Us(t){return Un(t).modelOverrides}function qs(){return Ze("claude")}function Fs(){return Ze("codex")}function Bs(){return Ze("copilot")}function js(){return Ze("antigravity")}var su,ut=A(()=>{h();$n();Pn();Kt();su={};});function Ws(t){return au[t]??t}var au,Gs=A(()=>{h();ut();Kt();au={auto:"default"};});function qn(t,e){return (Hn[t]??[]).includes(e)}function et(t){if(!t)return {};let e=t.match(/^(.+?)\[([^\]]+)\]$/);if(e){let n=e[2].toLowerCase();return du.has(n)?{model:e[1],effort:n}:{model:t}}return {model:t}}function zs(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 Vs(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 Ks(t){return !t||!qn("codex",t)?[]:["-c",`model_reasoning_effort=${t}`]}function Js(t){if(!t)return [];let e=new Set(["acceptEdits","bypassPermissions","default","delegate","dontAsk","plan"]),n=Ws(t);return e.has(n)?["--permission-mode",n]:[]}function Xs(t){return t?qn("claude",t)?["--effort",t]:[]:[]}function Ys(t){return t==="default"?[]:t&&uu.has(t)?["--permission-mode",t]:[]}function Qs(t){return t===true?["--always-approve"]:[]}function Zs(t,e=n=>console.warn(n)){return t===void 0?[]:t==="workspace"||t==="read-only"||t==="off"?["--sandbox",t]:(e(`[grok] Invalid sandbox value ${JSON.stringify(t)}; using workspace.`),["--sandbox","workspace"])}function ei(t){return t?qn("grok",t)?["--effort",t]:[]:[]}function ti(t){if(!t)return [];switch(Nr(t)){case "default":return [];case "plan":return ["--mode","plan"];case "acceptEdits":return ["--mode","accept-edits"];case "bypassPermissions":return ["--dangerously-skip-permissions"];default:return []}}function ni(t){return t?qn("antigravity",t)?["--effort",t]:[]:[]}var du,uu,Xt=A(()=>{h();Gs();Kt();$n();du=new Set($s);uu=new Set(["default","acceptEdits","auto","dontAsk","bypassPermissions","plan"]);});function cu(t){if(t.type!=="usage"||!("input_tokens"in t))return null;let e=Number(t.input_tokens??0),n=Number(t.output_tokens??0),o="cache_read_input_tokens"in t?Number(t.cache_read_input_tokens):void 0,s="cached_input_tokens"in t?Number(t.cached_input_tokens):void 0,a=o!==void 0?o:s??0;return {inputTokens:o!==void 0?e+o:e,outputTokens:n,cachedInputTokens:a}}function lu(t){let e=t.usage;if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(!("input_tokens"in n))return null;let r=Number(n.input_tokens??0),o=Number(n.output_tokens??0),a="cache_read_input_tokens"in n?Number(n.cache_read_input_tokens):void 0,d="cached_input_tokens"in n?Number(n.cached_input_tokens):void 0,u=a!==void 0?a:d??0;return {inputTokens:a!==void 0?r+a:r,outputTokens:o,cachedInputTokens:u}}function pu(t){if(t.type!=="step_finish")return null;let n=t.part?.tokens;if(!n)return null;let r=Number(n.input??0),o=Number(n.output??0),s=n.cache,a=s?Number(s.read??0):0;return {inputTokens:r+a,outputTokens:o,cachedInputTokens:a}}function ri(t){let e=new Map,n;for(let s of t.split(`
|
|
11
|
+
`))if(s.trim())try{let a=JSON.parse(s);if(a.type!=="assistant")continue;let d=a.message,u=d?.id,c=d?.usage;if(typeof u!="string"||!c)continue;let l=Number(c.input_tokens??0),p=Number(c.cache_read_input_tokens??0);e.set(u,{inputTokens:l+p,cachedInputTokens:p});let g=d?.model;typeof g=="string"&&g&&(n=g);}catch{}if(e.size===0)return;let r=0,o=0;for(let s of e.values())r+=s.inputTokens,o+=s.cachedInputTokens;return {inputTokens:r,cachedInputTokens:o,model:n}}function vt(t){if(!t||!t.trim())return;let e=null,n=null;for(let r of t.split(`
|
|
12
|
+
`))if(r.trim())try{let o=JSON.parse(r),s=pu(o);if(s){n||(n={inputTokens:0,outputTokens:0,cachedInputTokens:0}),n.inputTokens+=s.inputTokens,n.outputTokens+=s.outputTokens,n.cachedInputTokens+=s.cachedInputTokens;continue}let a=cu(o)??lu(o);a&&(e=a);}catch{}return n||(e??void 0)}var Yt=A(()=>{h();});function Se(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 ct=A(()=>{h();});function oi(t){let e=t.split(`
|
|
13
|
+
`).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant"&&Array.isArray(s.message?.content))for(let a of s.message.content)a.type==="text"&&typeof a.text=="string"&&a.text.trim()&&n.push(a.text.trim());s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function gu(t){let n=t.message?.content;return Array.isArray(n)?n.map(r=>typeof r.text=="string"?r.text.trim():"").filter(Boolean).join(`
|
|
14
14
|
|
|
15
|
-
`):""}function
|
|
16
|
-
`):a=JSON.stringify(s),{timestamp:t,type:"tool_result",toolUseId:o,...
|
|
17
|
-
`);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let s=o.usage,a=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,d=o.modelUsage,u=d?Object.keys(d)[0]??null:null;return {usage:a,model:u}}}catch{}let n=
|
|
18
|
-
`).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let a=s.data.content;a.trim()&&n.push(a.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}var
|
|
19
|
-
`).map(o=>o.trim()).filter(Boolean),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let a=s.item.text;a.trim()&&n.push(a.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function mu(t,e){let n=e.type;if(n==="command_execution"){let r=String(e.command||"");return Le(r)?[Me(t,r)]:[{timestamp:t,type:"tool_use",toolName:"Bash",toolInput:r}]}return n==="web_search"?[]:n==="file_change"?[]:[]}function _u(t,e){let n=e.type;if(n==="message"||n==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let s=ku(t,o);if(s)return s}if(typeof e.text=="string")return {timestamp:t,type:"text",content:e.text}}if(n==="agent_message"&&typeof e.text=="string")return {timestamp:t,type:"text",content:e.text};if(n==="reasoning"){let r=typeof e.text=="string"?e.text.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:t,type:"tool_result",...Ge(r,o)}}if(n==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,s=He(o);return r==="Bash"&&Le(s)?Me(t,s):{timestamp:t,type:"tool_use",toolName:r,toolInput:s}}if(n==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",...Ge(o,r)}}if(n==="web_search"){let r=e.action,o;if(r?.type==="search"){let s=r.queries;o=String(r.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:t,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(n==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(a=>String(a.path||"")).filter(Boolean);if(o.length===0)return null;let s=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:t,type:"tool_use",toolName:"Edit",toolInput:s}}return null}function ku(t,e){let n=e.type;if(n==="text")return {timestamp:t,type:"text",content:String(e.text||"")};if(n==="tool_use"){let r=String(e.name||""),o=e.input,s=He(o);return r==="Bash"&&Le(s)?Me(t,s):{timestamp:t,type:"tool_use",toolName:r,toolInput:s}}return null}var fu,Hr,$r=I(()=>{h();Yt();Rt();St();Vt();Xt();ut();ct();fu=new Set(["turn.started","turn.completed","item.updated"]);Hr={command:"codex",meta:{displayName:"Codex",models:Ls(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=et(e.model),s=e.effort??o,a=e.resumeSessionId?Fs(e.mode):qs(e.mode),d=Bs(s),u=r?["-m",r]:[],c=hu(e.additionalArgs??[]),p=c.includes("--json")||c.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...p,...a,...d,...u,...c,e.resumeSessionId,"-"],stdinMessage:t}:{args:["exec",...p,...a,...d,...u,...c],stdinMessage:t}},extractText(t){return ei(t)??t.trim()},extractPartialText(t){return ei(t)},parseResultMeta(t){let e=It(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],o;try{JSON.parse(t),o=[t];}catch{o=gu(t),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let a;try{a=JSON.parse(s);}catch{continue}let d=a.type;if(!d||!d.startsWith("item.")&&!d.startsWith("turn.")&&!d.startsWith("thread."))continue;let u=Re(a,n),c=a.item;if(c){if(d==="item.started"){r.push(...mu(u,c));continue}if(d==="item.completed"){let l=_u(u,c);l&&r.push(l);continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?fu.has(r):!1}catch{return false}}};});function yu(t){return t?wu[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function $n(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function si(t){let e=[],n=0,r=false,o=false,s=0;for(let d=0;d<t.length;d++){let u=t[d];if(o){o=false;continue}if(u==="\\"&&r){o=true;continue}if(u==='"'){r=!r;continue}if(!r){if(u==="{")n++;else if(u==="}"&&(n--,n===0)){let c=t.slice(s,d+1).trim();c&&e.push(c),s=d+1;}}}let a=t.slice(s).trim();return a&&e.push(a),e}function vt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Eu(t){let e=[],n=false;for(let r of t.split(/\r?\n/)){let o=r.trim();if(!o)continue;try{let a=JSON.parse(o);vt(a)?e.push(a):n=!0;continue}catch{}let s=si(o);s.length>1&&console.warn("[opencode] extractText: falling back to concatenated-JSON split for a malformed line");for(let a of s)try{let d=JSON.parse(a);vt(d)?e.push(d):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function lt(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,oi).trim()}function ii(t){let e=vt(t.error)?t.error:void 0,n=e&&vt(e.data)?e.data:void 0,r=lt(e?.name),o=lt(n?.message)??lt(e?.message)??lt(t.message)??lt(t.errorMessage)??lt(t.error),s=lt(t.ref),a=r&&o&&r!==o?`${r}: ${o}`:r??o??ri;return (s?`${a} (ref: ${s})`:a).slice(0,oi)}function ti(t){let e=Eu(t),n=[],r=null,o=0,s=[],a,d=false;for(let u of e.events){let c=typeof u.type=="string"?u.type:void 0;if(c){if(c==="text"){let l=vt(u.part)?u.part:void 0,p=typeof l?.text=="string"?l.text:void 0;p?.trim()&&n.push(p.trim());continue}if(c==="result"){typeof u.result=="string"&&(r=u.result);continue}if(c==="tool_use"){o++;continue}if(c==="error"){s.push(ii(u));continue}if(c==="step_finish"){d=true;let l=vt(u.part)?u.part:void 0;a=typeof l?.reason=="string"?l.reason:void 0;}}}return {...e,texts:n,resultText:r,toolUseCount:o,errorMessages:s,terminalReason:a,hasTerminal:d}}function ai(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function Un(){return new Z("OpenCode returned no assistant output.",At,{code:"EMPTY_OUTPUT",kind:"transient"})}function Ru(){return new Z("OpenCode emitted malformed JSON output.",At,{code:"PROVIDER_CRASHED",kind:"transient"})}function ni(t,e){switch(ai(t)){case "length":return new Z("OpenCode stopped because the context window was exceeded.",At,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new Z("OpenCode stopped because the content filter blocked the response.",At,{code:"UNKNOWN",kind:"permanent"});case "error":return new Z(e?`OpenCode error: ${e}`:`${ri} while generating a response.`,At,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var Tu,At,ri,oi,wu,Ur,qr=I(()=>{h();zt();Yt();St();ct();Tu=new Set(["step_start","step_finish"]),At="cli/opencode",ri="OpenCode provider error",oi=240,wu={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};Ur={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];$n(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,autoApprove:a}=yu(e.mode);$n(o,"--agent")||s!==void 0&&o.push("--agent",s),a&&!$n(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!$n(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let d;return !n&&!a&&!e.env?.OPENCODE_PERMISSION&&(d={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:t,env:d}},extractText(t){let e=ti(t),n=e.errorMessages[0];if(n){let a=ni("error",n);if(a)throw a}let r=ni(e.terminalReason??"",void 0);if(r)throw r;let o=e.texts.length>0?e.texts[e.texts.length-1]:void 0;if(o!==void 0){if(!e.hasTerminal)throw Un();return o}if(e.resultText?.trim()){if(!e.hasTerminal)throw Un();return e.resultText}if(e.malformed)throw Ru();if(!e.hasTerminal)throw Un();let s=ai(e.terminalReason);if((s==="stop"||s==="tool-calls")&&e.toolUseCount>0)return "";throw Un()},interpretExit(t,e,n=""){if(t===0)return null;let o=ti(n).errorMessages[0];return o?new Z(`OpenCode error: ${o}`,At,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=It(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],o;try{JSON.parse(t),o=[t];}catch{o=si(t),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let a;try{a=JSON.parse(s);}catch{continue}let d=Re(a,n),u=a.type;if(u){if(u==="text"){let l=a.part?.text;l&&r.push({timestamp:d,type:"text",content:l});continue}if(u==="tool_use"){let c=a.part;if(!c)continue;let l=String(c.tool||""),p=String(c.callID||""),g=c.state,m=String(g?.status||""),R=g?.input,w=He(R);if(r.push({timestamp:d,type:"tool_use",toolName:l,toolUseId:p,toolInput:w}),m==="completed"&&g?.output!==void 0){let T=g.output,N=typeof T=="string"?T:JSON.stringify(T);r.push({timestamp:d,type:"tool_result",toolUseId:p,resultPreview:N,isError:false});}else m==="error"&&r.push({timestamp:d,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}if(u==="error"){let c=ii(a);r.push({timestamp:d,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?Tu.has(r):!1}catch{return false}}};});function Qt(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function Su(t,e){if(!(t?Ze(Fr).some(s=>s.id===t):false)||!t)return e;let r=Jt(Fr,t),o=Ps(Fr)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:o&&r.includes(o)?o:void 0:o}var Fr,Br,jr=I(()=>{h();zt();Kt();ut();Xt();Fr="antigravity";Br={command:"agy",meta:{displayName:"Antigravity",models:Hs(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:o}=et(e.model),s=Cr(r),a=s.model,d=e.effort??o??s.effort,u=Su(a,d),c=e.additionalArgs??[],l=a&&!Qt(c,"--model")?["--model",a]:[],p=Qt(c,"--effort")?[]:Xs(u),g=Qt(c,"--mode")||Qt(c,"--dangerously-skip-permissions")?[]:Js(e.mode),m=Qt(c,"--print")?[]:["--print",t];return {args:[...l,...p,...g,...c,...m]}},extractText(t){let e=t.trim();if(!e)throw new Z("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 di=I(()=>{h();Rt();St();Vt();ct();});function bt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Fn(t){return bt(t)?t:void 0}function ae(t){return typeof t=="string"?t:void 0}function pt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function xu(t){let e=[],n=-1,r=0,o=false,s=false;for(let a=0;a<t.length;a+=1){let d=t[a];if(n===-1){(d==="{"||d==="[")&&(n=a,r=1);continue}if(s){s=false;continue}if(d==="\\"&&o){s=true;continue}if(d==='"'){o=!o;continue}o||(d==="{"||d==="["?r+=1:(d==="}"||d==="]")&&(r-=1,r===0&&(e.push(t.slice(n,a+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function Zt(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return bt(n)?[n]:[]}catch{return xu(e).flatMap(n=>{try{let r=JSON.parse(n);return bt(r)?[r]:[]}catch{return []}})}}function en(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function tn(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(tn).filter(n=>n!==void 0);return e.length>0?e.join(`
|
|
20
|
-
`):void 0}if(
|
|
21
|
-
`).flatMap(Zt)){if(a.type!=="usage")continue;let d=
|
|
22
|
-
`),o=r.length>
|
|
23
|
-
`).flatMap(Zt))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 Zt(t))if(e.type==="error"){let n=
|
|
24
|
-
`).flatMap(Zt).find(r=>r.type==="end");return n?{usage:
|
|
25
|
-
`)??"";if(!n.trim())return;let r=_i(t.provider);if(!r)return;let o;try{o=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let s=Mu(o?.model,t.model),a=o?.usage;if(!a)return {stdout:n,adapter:r};let d=Bn(a.inputTokens),u=Bn(a.outputTokens),c=Bn(a.cachedInputTokens),l=gs(Bn(a.costUsd),d,u,c,s);return d!==0||u!==0||c!==0||l!==0?{stdout:n,adapter:r,usage:{inputTokens:d,outputTokens:u,cachedInputTokens:c,costUsd:l,model:s}}:{stdout:n,adapter:r}}var zr=I(()=>{h();ki();Cn();});function $u(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"&&Hu.has(n)?n:void 0}catch{return}}function ft(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=$u(t.metadata);return e==="user_stop"?"stopped":e==="runner_lost"?"runner_lost":e==="launch_failed"?"failed":typeof t.error=="string"&&Ti.stopped.test(t.error)?"stopped":typeof t.error=="string"&&Ti.runnerLost.test(t.error)?"runner_lost":"failed"}default:return t.status}}var wi,Ti,Hu,Gn=I(()=>{h();wi=["success","failed","stopped","runner_lost"],Ti={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},Hu=new Set(["user_stop","runner_lost","launch_failed"]);});function Vr(t,e,n=1){let r=process.env[t];if(r===void 0||r==="")return e;let o=Number(r);return !Number.isFinite(o)||o<=0?e:Math.max(n,Math.trunc(o))}function Kr(){return Vr("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function Ot(){return Vr("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function zn(){return Vr("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function xt(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Wn(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 Uu(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 yi(t,e){return !!t.stop_requested_at&&xt(t.stop_requested_epoch)===xt(e)}function Ei(t,e){let n=xt(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let o=Uu(t.getTask(e.taskId));return !o||o.status!=="running"||xt(o.run_epoch)!==n?{accepted:false,row:o}:{accepted:true,row:o}}function Ai(t,e){let n=nn.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),nn.delete(t),true)}function rn(t,e){let n=nn.get(t);return !n||e!==void 0&&n.runEpoch!==xt(e)?false:Ai(t,n)}function vi(t,e){let n=xt(e.runEpoch);rn(e.taskId);let r=true,o=null;try{let c=Ei(t,{...e,runEpoch:n});r=c.accepted,o=c.row;}catch(c){Wn(c);}if(!r)return false;let s=Kr(),a=Math.min(s,1e3),d=setInterval(()=>{let c=nn.get(e.taskId);if(!(!c||c.timer!==d))try{c.heartbeatElapsedMs+=a;let l=c.heartbeatElapsedMs>=s,p=Ei(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:l});if(!p.accepted){Ai(e.taskId,c);return}l&&(c.heartbeatElapsedMs%=s,c.lastHeartbeatAt=Date.now()),p.row&&yi(p.row,n)&&!c.stopRequested&&(c.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(Wn));}catch(l){Wn(l);}},a),u={timer:d,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return nn.set(e.taskId,u),typeof d=="object"&&d!==null&&"unref"in d&&d.unref(),o&&yi(o,n)&&e.onStopRequested&&(u.stopRequested=true,Promise.resolve(e.onStopRequested(o)).catch(Wn)),true}var Ri,Si,Ii,nn,on=I(()=>{h();Ri=1e4,Si=3e4,Ii=18e5;nn=new Map;});function Vn(t,e=Date.now(),n=Zr){let r=t?Date.parse(t):Number.NaN,o=typeof e=="number"?e:Date.parse(e),s=eo(n,Zr,0);return Number.isFinite(r)&&Number.isFinite(o)&&o-r>s?"forced":"cooperative"}function eo(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function Di(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function Gu(t){if(!t)return;let e=Di(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function $e(t,e){if(!t)return {status:"not_running",finalStatus:"not_running",...e?{pid:e}:{}};let n=typeof t.pid=="number"&&t.pid>0?t.pid:e;if(t.status==="stopped"){let r=Gu(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function Li(t,e){let n=e??(t.pid&&t.pid>0?t.pid:void 0);return {status:"ownership_unverified",finalStatus:t.status,...n?{pid:n}:{},error:"Process owner could not be verified"}}function ee(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 Yr(t,e){return ee(t,Bu,e)}function Wu(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=Ot():false}function zu(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function Vu(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=Di(t.metadata),r=n.ownership==="runner"&&typeof n.providerPid=="number"&&Number.isSafeInteger(n.providerPid)&&n.providerPid>0?n.providerPid:void 0;return [...new Set([e,r].filter(o=>o!==void 0))]}function Ku(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return $e(r,n)}async function Ju(t,e,n,r){let o=Date.now()+n;for(;;){let s=Ku(t,e);if(s)return s;let a=o-Date.now();if(a<=0)return;await new Promise(d=>{setTimeout(d,Math.min(r,a));});}}async function Oi(t,e,n){let r=new Date().toISOString(),o=t.requestTaskStop({id:e,requestedAt:r}),s=t.getTask(e);if(!o.accepted){if(o.status==="pending"){let P=t.stopPendingTask(e),$=t.getTask(e);if(P||!$||$.status!=="running")return $e($);if(o=t.requestTaskStop({id:e,requestedAt:r}),!o.accepted&&o.status!=="running"||!o.accepted&&!o.alreadyRequestedAt)return $e(t.getTask(e))}else if(!(o.status==="running"&&o.alreadyRequestedAt))return $e(s)}let a=o.runEpoch,d=eo(n.graceMs,Zr,0),u=eo(n.pollMs,qu,1),c=await Ju(t,e,d,u);if(c)return c;let l=t.getTask(e);if(!l||l.status!=="running")return $e(l);let p=Vu(l),g=p[0];if(!g){let P=t.finalizeTaskStop({id:e,runEpoch:a,method:"forced"}),$=t.getTask(e);return P||$?.status!=="running"?$e($):ee($,"Failed to finalize task stop")}let m=zu(n),R="unknown";if(!Wu(l,Date.now())){let P=n.processControl?.checkProcessOwnershipAsync??vr;try{R=await P(g,n.ownershipMarkers??Pi,m);}catch{R="unknown";}if(R!=="owned")return Li(l)}let w=n.processControl?.terminateProcessTree??Gt;for(let P of p){let $;try{$=await w(P,{...m,signal:jt});}catch(y){$={status:"failed",pid:P,method:m.platform==="win32"?"taskkill":"process-group",error:y instanceof Error?y.message:String(y)};}if($.status==="failed")return ee(t.getTask(e),$.error??"Failed to terminate process tree")}let T=t.finalizeTaskStop({id:e,runEpoch:a,method:"forced"}),N=t.getTask(e);return T||N?.status!=="running"?$e(N,g):ee(N,"Task changed before stop was finalized")}function Ci(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function Ni(t){return Number.isSafeInteger(t)&&t>=0}function Qr(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Xu(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}async function Mi(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Yr(n,Ci(e.targetPid)?e.targetPid:void 0);if(!Ni(e.sourceRunEpoch)||!Ni(e.settleRunEpoch)||Qr(n.run_epoch)!==e.settleRunEpoch)return ee(n,Jr,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return ee(n,Xr,e.targetPid);let r=new Date().toISOString(),o;try{o=t.requestTaskStop({id:e.taskId,requestedAt:r,sourceRunEpoch:e.sourceRunEpoch,settleRunEpoch:e.settleRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return ee(n,ju,e.targetPid)}let s=t.getTask(e.taskId);if(!s||s.status!=="running")return Yr(s,e.targetPid);if(o.runEpoch!==e.settleRunEpoch||Qr(s.run_epoch)!==e.settleRunEpoch)return ee(s,Jr,e.targetPid);if(e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId)return ee(s,Xr,e.targetPid);if(!Ci(e.targetPid))return ee(s,Fu);let a=Xu(e),d=e.processControl?.checkProcessOwnershipAsync??vr,u="unknown";try{u=await d(e.targetPid,e.ownershipMarkers??Pi,a);}catch{u="unknown";}if(u!=="owned")return Li(s,e.targetPid);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return Yr(c,e.targetPid);if(Qr(c.run_epoch)!==e.settleRunEpoch)return ee(c,Jr,e.targetPid);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return ee(c,Xr,e.targetPid);let l=e.processControl?.terminateProcessTree??Gt,p;try{p=await l(e.targetPid,{...a,signal:jt});}catch{return ee(t.getTask(e.taskId),bi,e.targetPid)}if(p.status==="failed")return ee(t.getTask(e.taskId),bi,e.targetPid);let g;try{g=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return ee(t.getTask(e.taskId),xi,e.targetPid)}return g?$e(t.getTask(e.taskId),e.targetPid):ee(t.getTask(e.taskId),xi,e.targetPid)}function Hi(t,e,n={}){if(typeof t=="string"){let r=t,o=e??{};return Promise.resolve().then(()=>(no(),$i)).then(({TaskRepository:s})=>Oi(new s,r,o))}return Oi(t,e,n)}var Zr,qu,Pi,Fu,Jr,Xr,Bu,bi,xi,ju,to=I(()=>{h();Nn();on();Zr=5e3,qu=250;Pi=["crewx","claude","codex","opencode","grok","node"],Fu="INSTRUCTION_STOP_TARGET_PID_MISSING",Jr="INSTRUCTION_STOP_EPOCH_MISMATCH",Xr="INSTRUCTION_STOP_WORKSPACE_MISMATCH",Bu="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",bi="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",xi="INSTRUCTION_STOP_SETTLE_CAS_FAILED",ju="INSTRUCTION_STOP_REQUEST_FAILED";});var $i={};ha($i,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>Wi,PENDING_ADOPT_GRACE_MS:()=>Gi,PID_NULL_REAP_GRACE_MS:()=>lo,TASK_HEARTBEAT_HARD_STALE_MS:()=>Ii,TASK_HEARTBEAT_INTERVAL_MS:()=>Ri,TASK_HEARTBEAT_STALE_MS:()=>Si,TaskRepository:()=>ln,hasRecordedUsage:()=>co,mergeTerminalReason:()=>uo,resolveTaskHeartbeatHardStaleMs:()=>zn,resolveTaskHeartbeatIntervalMs:()=>Kr,resolveTaskHeartbeatStaleMs:()=>Ot});function Ie(t){return {...t,status:ft(t)}}function qi(t){return {...t,status:ft(t)}}function Fi(){let t=drizzleOrm.sql`
|
|
15
|
+
`):""}function hu(t){let e=t.toLowerCase();return e.includes("out of extra usage")||e.includes("rate limit")||e.includes("quota")}function mu(t,e){let n=e.type;if(n==="text"){let r=String(e.text||"");return r?{timestamp:t,type:"text",content:r}:null}if(n==="thinking"){let r=typeof e.thinking=="string"?e.thinking.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="tool_use"){let r=String(e.name||""),o=e.id,s=e.input,a=$e(s);return r==="Bash"&&Me(a)?He(t,a,o):{timestamp:t,type:"tool_use",toolUseId:o,toolName:r,toolInput:a}}if(n==="tool_result"){let r=!!e.is_error,o=e.tool_use_id,s=e.output??e.content??"",a;return typeof s=="string"?a=s:Array.isArray(s)?a=s.filter(d=>d.type==="text"&&typeof d.text=="string").map(d=>d.text).join(`
|
|
16
|
+
`):a=JSON.stringify(s),{timestamp:t,type:"tool_result",toolUseId:o,...We(a,r)}}return null}var fu,Lr,Mr=A(()=>{h();xr();It();Vt();At();Xt();ut();Yt();ct();fu=new Set(["tool_progress"]);Lr={command:"claude",meta:{displayName:"Claude",models:qs(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=et(e.model),s=e.effort??o,a=Js(e.mode),d=Xs(s),u=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,...a,...d,...u,...p],stdinMessage:t}:{args:["--output-format","stream-json","--verbose",...c,...a,...d,...u,...p],stdinMessage:t}}return {args:["-p","--output-format","stream-json","--verbose",...c,...a,...d,...u],stdinMessage:t}},extractText(t){return oi(t)??t.trim()},extractPartialText(t){return oi(t)},extractFailure(t){try{let e=JSON.parse(t);if(e.type==="rate_limit_event"){let n=e.rate_limit_info??{};if(n.status==="rejected")return new je(`Claude rate limit: ${n.rateLimitType??"unknown"} (status: ${n.status})`)}if(e.error==="rate_limit"){let n=gu(e);return new je(n?`Claude rate limit: ${n}`:"Claude rate limit")}if(e.type==="result"&&e.is_error===!0){let n=typeof e.result=="string"?e.result:"";if(hu(n))return new je(`Claude rate limit: ${n}`)}}catch{}return null},parseResultMeta(t){let e=t.split(`
|
|
17
|
+
`);for(let r of e)if(r.trim())try{let o=JSON.parse(r);if(o.type==="result"){let s=o.usage,a=s?{inputTokens:Number(s.input_tokens??0)+Number(s.cache_read_input_tokens??0),outputTokens:Number(s.output_tokens??0),cachedInputTokens:Number(s.cache_read_input_tokens??0),costUsd:Number(o.total_cost_usd??0)}:null,d=o.modelUsage,u=d?Object.keys(d)[0]??null:null;return {usage:a,model:u}}}catch{}let n=ri(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 [];if(r!=="assistant"&&r!=="user")return [];let s=n.message?.content;if(!Array.isArray(s))return [];let a=Se(n,e??new Date().toISOString()),d=[];for(let u of s){let c=mu(a,u);c&&d.push(c);}return d},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?fu.has(r):!1}catch{return false}}};});function si(t){let e=t.split(`
|
|
18
|
+
`).filter(o=>o.trim()),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="assistant.message"&&typeof s.data?.content=="string"){let a=s.data.content;a.trim()&&n.push(a.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}var _u,Hr,$r=A(()=>{h();Yt();It();At();Vt();ut();$n();ct();_u=new Set(["interactive","plan","autopilot"]);Hr={command:"copilot",meta:{displayName:"Copilot",models:Bs()},buildArgs(t,e,n){let r=e.additionalArgs?[...e.additionalArgs]:[];return e.model&&r.push("--model",e.model),e.mode&&_u.has(e.mode)&&r.push("--mode",e.mode),e.effort&&(Hn.copilot??[]).includes(e.effort)&&r.push("--effort",e.effort),{args:r,stdinMessage:t}},extractText(t){return si(t)??t.trim()},extractPartialText(t){return si(t)},parseResultMeta(t){let e=vt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n;try{n=JSON.parse(t);}catch{return []}let r=n.type;if(!r)return [];if(!r.startsWith("tool.execution")&&!r.startsWith("assistant.")&&r!=="user.message")return [];let o=n.data;if(!o)return [];let s=Se(n,e??new Date().toISOString()),a=o.toolCallId;if(r==="tool.execution_start"){let d=String(o.toolName||""),u=o.arguments,c=$e(u);return (d==="bash"||d==="Bash")&&Me(c)?[He(s,c,a)]:[{timestamp:s,type:"tool_use",toolName:d,toolInput:c,...a&&{toolUseId:a}}]}if(r==="tool.execution_complete"){let d=o.error;if(d)return [{timestamp:s,type:"tool_result",...a&&{toolUseId:a},...We(String(d.message||""),true)}];let u=o.result,c=String(u?.content||"");return [{timestamp:s,type:"tool_result",...a&&{toolUseId:a},...We(c,false)}]}if(r==="assistant.message"){let d=String(o.content||"");return d?[{timestamp:s,type:"text",content:d}]:[]}return []}};});function Tu(t){let e=[],n=0,r=false,o=false,s=0;for(let d=0;d<t.length;d++){let u=t[d];if(o){o=false;continue}if(u==="\\"&&r){o=true;continue}if(u==='"'){r=!r;continue}if(!r){if(u==="{")n++;else if(u==="}"&&(n--,n===0)){let c=t.slice(s,d+1).trim();c&&e.push(c),s=d+1;}}}let a=t.slice(s).trim();return a&&e.push(a),e}function wu(t){return t[0]==="exec"?t.slice(1):t}function ii(t){let e=t.split(`
|
|
19
|
+
`).map(o=>o.trim()).filter(Boolean),n=[],r=null;for(let o of e)try{let s=JSON.parse(o);if(s.type==="item.completed"&&(s.item?.type==="message"||s.item?.type==="agent_message")&&typeof s.item?.text=="string"){let a=s.item.text;a.trim()&&n.push(a.trim());}s.type==="result"&&typeof s.result=="string"&&(r=s.result);}catch{}if(n.length>0)return n[n.length-1];if(r)return r}function yu(t,e){let n=e.type;if(n==="command_execution"){let r=String(e.command||"");return Me(r)?[He(t,r)]:[{timestamp:t,type:"tool_use",toolName:"Bash",toolInput:r}]}return n==="web_search"?[]:n==="file_change"?[]:[]}function Eu(t,e){let n=e.type;if(n==="message"||n==="text"){let r=e.content;if(Array.isArray(r))for(let o of r){let s=Ru(t,o);if(s)return s}if(typeof e.text=="string")return {timestamp:t,type:"text",content:e.text}}if(n==="agent_message"&&typeof e.text=="string")return {timestamp:t,type:"text",content:e.text};if(n==="reasoning"){let r=typeof e.text=="string"?e.text.trim():"";return r?{timestamp:t,type:"thinking",content:r}:null}if(n==="command_execution"){let r=String(e.aggregated_output||e.output||""),o=!!e.is_error;return {timestamp:t,type:"tool_result",...We(r,o)}}if(n==="tool_use"){let r=String(e.name||e.tool_name||""),o=e.input,s=$e(o);return r==="Bash"&&Me(s)?He(t,s):{timestamp:t,type:"tool_use",toolName:r,toolInput:s}}if(n==="tool_result"){let r=!!e.is_error,o=String(e.output||e.content||"");return {timestamp:t,type:"tool_result",...We(o,r)}}if(n==="web_search"){let r=e.action,o;if(r?.type==="search"){let s=r.queries;o=String(r.query||"")||(s?.length?s.join(", "):"")||String(e.query||"");}else o=e.query?"open: "+String(e.query):"";return o?{timestamp:t,type:"tool_use",toolName:"WebSearch",toolInput:o}:null}if(n==="file_change"){let r=e.changes;if(!Array.isArray(r)||r.length===0)return null;let o=r.map(a=>String(a.path||"")).filter(Boolean);if(o.length===0)return null;let s=o.length===1?o[0]:`${o.slice(0,2).join(", ")}${o.length>2?` (+${o.length-2})`:""}`;return {timestamp:t,type:"tool_use",toolName:"Edit",toolInput:s}}return null}function Ru(t,e){let n=e.type;if(n==="text")return {timestamp:t,type:"text",content:String(e.text||"")};if(n==="tool_use"){let r=String(e.name||""),o=e.input,s=$e(o);return r==="Bash"&&Me(s)?He(t,s):{timestamp:t,type:"tool_use",toolName:r,toolInput:s}}return null}var ku,Ur,qr=A(()=>{h();Yt();It();At();Vt();Xt();ut();ct();ku=new Set(["turn.started","turn.completed","item.updated"]);Ur={command:"codex",meta:{displayName:"Codex",models:Fs(),capabilities:{resume:true}},buildArgs(t,e,n){let{model:r,effort:o}=et(e.model),s=e.effort??o,a=e.resumeSessionId?Vs(e.mode):zs(e.mode),d=Ks(s),u=r?["-m",r]:[],c=wu(e.additionalArgs??[]),p=c.includes("--json")||c.includes("--experimental-json")?[]:["--json"];return e.resumeSessionId?{args:["exec","resume",...p,...a,...d,...u,...c,e.resumeSessionId,"-"],stdinMessage:t}:{args:["exec",...p,...a,...d,...u,...c],stdinMessage:t}},extractText(t){return ii(t)??t.trim()},extractPartialText(t){return ii(t)},parseResultMeta(t){let e=vt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],o;try{JSON.parse(t),o=[t];}catch{o=Tu(t),o.length>1&&console.warn("[codex] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let a;try{a=JSON.parse(s);}catch{continue}let d=a.type;if(!d||!d.startsWith("item.")&&!d.startsWith("turn.")&&!d.startsWith("thread."))continue;let u=Se(a,n),c=a.item;if(c){if(d==="item.started"){r.push(...yu(u,c));continue}if(d==="item.completed"){let l=Eu(u,c);l&&r.push(l);continue}}}return r},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let r=JSON.parse(e).type;return r?ku.has(r):!1}catch{return false}}};});function Au(t){return t?Iu[t]??{agent:"build",autoApprove:false}:{agent:void 0,autoApprove:false}}function Fn(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function li(t){let e=[],n=0,r=false,o=false,s=0;for(let d=0;d<t.length;d++){let u=t[d];if(o){o=false;continue}if(u==="\\"&&r){o=true;continue}if(u==='"'){r=!r;continue}if(!r){if(u==="{")n++;else if(u==="}"&&(n--,n===0)){let c=t.slice(s,d+1).trim();c&&e.push(c),s=d+1;}}}let a=t.slice(s).trim();return a&&e.push(a),e}function bt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function vu(t){let e=[],n=false;for(let r of t.split(/\r?\n/)){let o=r.trim();if(!o)continue;try{let a=JSON.parse(o);bt(a)?e.push(a):n=!0;continue}catch{}let s=li(o);s.length>1&&console.warn("[opencode] extractText: falling back to concatenated-JSON split for a malformed line");for(let a of s)try{let d=JSON.parse(a);bt(d)?e.push(d):n=!0;}catch{n=true;}}return {events:e,malformed:n}}function lt(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,ci).trim()}function pi(t){let e=bt(t.error)?t.error:void 0,n=e&&bt(e.data)?e.data:void 0,r=lt(e?.name),o=lt(n?.message)??lt(e?.message)??lt(t.message)??lt(t.errorMessage)??lt(t.error),s=lt(t.ref),a=r&&o&&r!==o?`${r}: ${o}`:r??o??ui;return (s?`${a} (ref: ${s})`:a).slice(0,ci)}function ai(t){let e=vu(t),n=[],r=null,o=0,s=[],a,d=false;for(let u of e.events){let c=typeof u.type=="string"?u.type:void 0;if(c){if(c==="text"){let l=bt(u.part)?u.part:void 0,p=typeof l?.text=="string"?l.text:void 0;p?.trim()&&n.push(p.trim());continue}if(c==="result"){typeof u.result=="string"&&(r=u.result);continue}if(c==="tool_use"){o++;continue}if(c==="error"){s.push(pi(u));continue}if(c==="step_finish"){d=true;let l=bt(u.part)?u.part:void 0;a=typeof l?.reason=="string"?l.reason:void 0;}}}return {...e,texts:n,resultText:r,toolUseCount:o,errorMessages:s,terminalReason:a,hasTerminal:d}}function fi(t){return (t??"unknown").trim().toLowerCase().replace(/_/g,"-")}function Bn(){return new ee("OpenCode returned no assistant output.",Ot,{code:"EMPTY_OUTPUT",kind:"transient"})}function Ou(){return new ee("OpenCode emitted malformed JSON output.",Ot,{code:"PROVIDER_CRASHED",kind:"transient"})}function di(t,e){switch(fi(t)){case "length":return new ee("OpenCode stopped because the context window was exceeded.",Ot,{code:"UNKNOWN",kind:"permanent"});case "content-filter":return new ee("OpenCode stopped because the content filter blocked the response.",Ot,{code:"UNKNOWN",kind:"permanent"});case "error":return new ee(e?`OpenCode error: ${e}`:`${ui} while generating a response.`,Ot,{code:"PROVIDER_CRASHED",kind:"transient"});default:return null}}var Su,Ot,ui,ci,Iu,Fr,Br=A(()=>{h();zt();Yt();At();ct();Su=new Set(["step_start","step_finish"]),Ot="cli/opencode",ui="OpenCode provider error",ci=240,Iu={build:{agent:"build",autoApprove:false},"build-auto":{agent:"build",autoApprove:true},plan:{agent:"plan",autoApprove:false},"plan-auto":{agent:"plan",autoApprove:true}};Fr={command:"opencode",meta:{displayName:"OpenCode",capabilities:{resume:true}},buildArgs(t,e,n){let r=e.additionalArgs,o=r!==void 0?[...r]:["run"];Fn(o,"--format")||o.push("--format","json"),e.resumeSessionId&&!o.includes("-s")&&!o.includes("--session")&&o.push("-s",e.resumeSessionId);let{agent:s,autoApprove:a}=Au(e.mode);Fn(o,"--agent")||s!==void 0&&o.push("--agent",s),a&&!Fn(o,"--auto")&&o.push("--auto"),e.effort!==void 0&&!Fn(o,"--variant")&&o.push("--variant",e.effort),e.model&&o.push("--model",e.model);let d;return !n&&!a&&!e.env?.OPENCODE_PERMISSION&&(d={OPENCODE_PERMISSION:JSON.stringify({external_directory:"allow"})}),{args:o,stdinMessage:t,env:d}},extractText(t){let e=ai(t),n=e.errorMessages[0];if(n){let a=di("error",n);if(a)throw a}let r=di(e.terminalReason??"",void 0);if(r)throw r;let o=e.texts.length>0?e.texts[e.texts.length-1]:void 0;if(o!==void 0){if(!e.hasTerminal)throw Bn();return o}if(e.resultText?.trim()){if(!e.hasTerminal)throw Bn();return e.resultText}if(e.malformed)throw Ou();if(!e.hasTerminal)throw Bn();let s=fi(e.terminalReason);if((s==="stop"||s==="tool-calls")&&e.toolUseCount>0)return "";throw Bn()},interpretExit(t,e,n=""){if(t===0)return null;let o=ai(n).errorMessages[0];return o?new ee(`OpenCode error: ${o}`,Ot,{code:"PROVIDER_CRASHED",kind:"transient"}):null},parseResultMeta(t){let e=vt(t);return e?{usage:{inputTokens:e.inputTokens,outputTokens:e.outputTokens,cachedInputTokens:e.cachedInputTokens,costUsd:0},model:null}:{usage:null,model:null}},parseEvent(t,e){let n=e??new Date().toISOString(),r=[],o;try{JSON.parse(t),o=[t];}catch{o=li(t),o.length>1&&console.warn("[opencode] parseEvent: falling back to concatenated-JSON split for a malformed line");}for(let s of o){let a;try{a=JSON.parse(s);}catch{continue}let d=Se(a,n),u=a.type;if(u){if(u==="text"){let l=a.part?.text;l&&r.push({timestamp:d,type:"text",content:l});continue}if(u==="tool_use"){let c=a.part;if(!c)continue;let l=String(c.tool||""),p=String(c.callID||""),g=c.state,m=String(g?.status||""),R=g?.input,w=$e(R);if(r.push({timestamp:d,type:"tool_use",toolName:l,toolUseId:p,toolInput:w}),m==="completed"&&g?.output!==void 0){let T=g.output,N=typeof T=="string"?T:JSON.stringify(T);r.push({timestamp:d,type:"tool_result",toolUseId:p,resultPreview:N,isError:false});}else m==="error"&&r.push({timestamp:d,type:"tool_result",toolUseId:p,resultPreview:String(g?.error||"tool error"),isError:true});continue}if(u==="error"){let c=pi(a);r.push({timestamp:d,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?Su.has(r):!1}catch{return false}}};});function Qt(t,e){return t.some(n=>n===e||n.startsWith(`${e}=`))}function bu(t,e){if(!(t?Ze(jr).some(s=>s.id===t):false)||!t)return e;let r=Jt(jr,t),o=Us(jr)[t]?.defaultEffort;if(r.length!==0)return e?r.includes(e)?e:o&&r.includes(o)?o:void 0:o}var jr,Wr,Gr=A(()=>{h();zt();Kt();ut();Xt();jr="antigravity";Wr={command:"agy",meta:{displayName:"Antigravity",models:js(),defaultTimeoutMs:{query:12e4,execute:3e5},defaultIdleMs:0},buildArgs(t,e,n){let{model:r,effort:o}=et(e.model),s=Pr(r),a=s.model,d=e.effort??o??s.effort,u=bu(a,d),c=e.additionalArgs??[],l=a&&!Qt(c,"--model")?["--model",a]:[],p=Qt(c,"--effort")?[]:ni(u),g=Qt(c,"--mode")||Qt(c,"--dangerously-skip-permissions")?[]:ti(e.mode),m=Qt(c,"--print")?[]:["--print",t];return {args:[...l,...p,...g,...c,...m]}},extractText(t){let e=t.trim();if(!e)throw new ee("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 gi=A(()=>{h();It();At();Vt();ct();});function xt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Wn(t){return xt(t)?t:void 0}function ae(t){return typeof t=="string"?t:void 0}function pt(t){let e=typeof t=="number"?t:Number(t??0);return Number.isFinite(e)?e:0}function Du(t){let e=[],n=-1,r=0,o=false,s=false;for(let a=0;a<t.length;a+=1){let d=t[a];if(n===-1){(d==="{"||d==="[")&&(n=a,r=1);continue}if(s){s=false;continue}if(d==="\\"&&o){s=true;continue}if(d==='"'){o=!o;continue}o||(d==="{"||d==="["?r+=1:(d==="}"||d==="]")&&(r-=1,r===0&&(e.push(t.slice(n,a+1)),n=-1)));}return n!==-1&&e.push(t.slice(n)),e}function Zt(t){let e=t.trim();if(!e)return [];try{let n=JSON.parse(e);return xt(n)?[n]:[]}catch{return Du(e).flatMap(n=>{try{let r=JSON.parse(n);return xt(r)?[r]:[]}catch{return []}})}}function en(t){let e=JSON.stringify(t);return e===void 0?String(t):e}function tn(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.map(tn).filter(n=>n!==void 0);return e.length>0?e.join(`
|
|
20
|
+
`):void 0}if(xt(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=tn(t[e]);if(n!==void 0)return n}}}function Lu(t){if(t.rawOutput!==null&&t.rawOutput!==void 0)return tn(t.rawOutput)??en(t.rawOutput);if(t.content!==null&&t.content!==void 0)return tn(t.content)??en(t.content);if(t.result!==null&&t.result!==void 0)return tn(t.result)??en(t.result)}function Ti(t){let e=Wn(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?wi(n):"Grok CLI reported an error."}function wi(t){return (t.replace(Pu,"").split(/\r?\n/).map(n=>n.trim()).filter(Boolean)[0]??t.trim()).slice(0,500)}function ki(t){return Nu.test(t)}function Mu(t){let e=Wn(t.modelUsage);return e?Object.keys(e)[0]??null:null}function Hu(t){let e=Wn(t.usage);if(!e)return null;let n=pt(e.cache_read_input_tokens);return {inputTokens:pt(e.input_tokens)+n,cachedInputTokens:n,outputTokens:pt(e.output_tokens),costUsd:pt(t.total_cost_usd)}}function $u(t){let e=0,n=0,r=0,o=false,s=new Set;for(let a of t.split(`
|
|
21
|
+
`).flatMap(Zt)){if(a.type!=="usage")continue;let d=Wn(a.usage);if(!d)continue;let u=ae(a.signature);if(u&&u.length>0){let l=`signature:${u}`;if(s.has(l))continue;s.add(l);}let c=pt(d.cache_read_input_tokens);e+=pt(d.input_tokens)+c,n+=c,r+=pt(d.output_tokens),o=true;}return o?{inputTokens:e,cachedInputTokens:n,outputTokens:r,costUsd:0}:null}function Uu(t,e){if(!Array.isArray(e.entries)||e.entries.length===0)return [];let n=[];for(let s of e.entries.slice(0,hi)){if(!xt(s))continue;let a=ae(s.content)?.trim();if(!a)continue;let d=ae(s.status)?.trim(),u=ae(s.priority)?.trim(),c=[d?`status=${d}`:void 0,u?`priority=${u}`:void 0].filter(p=>!!p),l=c.length>0?` (${c.join(", ")})`:"";n.push(`- ${a}${l}`);}if(n.length===0)return [];e.entries.length>hi&&n.push(_i);let r=n.join(`
|
|
22
|
+
`),o=r.length>mi?`${r.slice(0,mi-1)}${_i}`:r;return [{timestamp:t,type:"info",content:o}]}function qu(t,e){let n=ae(e.type);if(n==="thought"){let r=ae(e.data);return r===void 0?[]:[{timestamp:t,type:"thinking",content:r}]}if(n==="text"){let r=ae(e.data);return r===void 0?[]:[{timestamp:t,type:"text",content:r}]}if(n==="plan")return Uu(t,e);if(n==="tool_call"){let r=ae(e.toolCallId),o=ae(e.toolName)??ae(e.title),s=e.rawInput===void 0?void 0:en(e.rawInput);return [{timestamp:t,type:"tool_use",toolUseId:r,toolName:o,toolInput:s}]}if(n==="tool_call_update"){let r=ae(e.status);return r!=="completed"&&r!=="failed"&&r!=="error"?[]:[{timestamp:t,type:"tool_result",toolUseId:ae(e.toolCallId),toolName:ae(e.toolName)??ae(e.title),resultPreview:Lu(e),isError:r!=="completed"||e.isError===true}]}if(n==="error"){let r=Ti(e);return [{timestamp:t,type:"error",content:r,errorMessage:r}]}return []}var jn,Cu,Nu,Pu,hi,mi,_i,zr,Vr=A(()=>{h();zt();xr();ut();Xt();ct();jn="cli/grok",Cu=new Set(["available_commands","usage","end"]),Nu=/(?:rate[\s_-]*limit|quota|usage[\s_-]*limit|too many requests|limit(?:ed|ing)?\s+(?:exceeded|reached))/i,Pu=/\u001b\[[0-?]*[ -/]*[@-~]/g,hi=20,mi=4e3,_i="\u2026";zr={command:"grok",createSessionId:()=>crypto.randomUUID(),meta:{displayName:"Grok",capabilities:{resume:true}},buildArgs(t,e){let{model:n,effort:r}=et(e.model),o=e.effort??r,s=e.resumeSessionId?["--resume",e.resumeSessionId]:e.providerSessionId?["--session-id",e.providerSessionId]:[],a=n?["--model",n]:[],d=n?Ze("grok").some($=>$.id===n):false,u=n&&d?Jt("grok",n):[],c=!o||u.length===0||u.includes(o)?o:void 0,l=ei(c),p=e.additionalArgs??[],g=$=>p.some(y=>y===$||y.startsWith(`${$}=`)),m=e.providerOptions,R=m?.alwaysApprove,w=m?.sandbox,T=g("--permission-mode")?[]:Ys(e.mode),N=g("--always-approve")?[]:Qs(R),x=g("--sandbox")?[]:Zs(w);return {args:["--no-auto-update",...s,"--single",t,"--output-format","streaming-json","--no-alt-screen",...a,...l,...T,...N,...x,...p]}},extractText(t){let e=[],n=false;for(let r of t.split(`
|
|
23
|
+
`).flatMap(Zt))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 Zt(t))if(e.type==="error"){let n=Ti(e);return ki(en(e))?new je(n,jn):new ee(n,jn)}return null},interpretExit(t,e){if(t===0)return null;let n=wi(e)||`Grok CLI exited with code ${t}.`;return ki(e)?new je(n,jn):new ee(n,jn)},parseResultMeta(t){let n=t.split(`
|
|
24
|
+
`).flatMap(Zt).find(r=>r.type==="end");return n?{usage:Hu(n),model:Mu(n)}:{usage:$u(t),model:null}},parseEvent(t,e){let n=e??new Date().toISOString();return Zt(t).flatMap(r=>qu(Se(r,n),r))},suppressOutputLine(t){let e=t.trim();if(!e.startsWith("{")||!e.endsWith("}"))return false;try{let n=JSON.parse(e);return xt(n)&&typeof n.type=="string"?Cu.has(n.type):!1}catch{return false}}};});var yi,Ei=A(()=>{h();Mr();$r();qr();Br();Gr();gi();Vr();Mr();$r();qr();Br();Gr();Vr();It();yi={codex:Ur,claude:Lr,opencode:Fr,antigravity:Wr,copilot:Hr,grok:zr};});function Ri(t){if(t.startsWith("cli/"))return yi[t.slice(4)]}var Si=A(()=>{h();Ls();Ei();});function Gn(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function Fu(t,e){return typeof t=="string"&&t.length>0?t:typeof e=="string"&&e.length>0?e:null}function zn(t){if(typeof t.provider!="string"||t.provider.length===0)return;let n=t.taskLogRepository.readLogs(t.taskId)?.entries.filter(g=>g.level==="stdout").map(g=>g.message).join(`
|
|
25
|
+
`)??"";if(!n.trim())return;let r=Ri(t.provider);if(!r)return;let o;try{o=r.parseResultMeta?.(n);}catch{return {stdout:n,adapter:r}}let s=Fu(o?.model,t.model),a=o?.usage;if(!a)return {stdout:n,adapter:r};let d=Gn(a.inputTokens),u=Gn(a.outputTokens),c=Gn(a.cachedInputTokens),l=ws(Gn(a.costUsd),d,u,c,s);return d!==0||u!==0||c!==0||l!==0?{stdout:n,adapter:r,usage:{inputTokens:d,outputTokens:u,cachedInputTokens:c,costUsd:l,model:s}}:{stdout:n,adapter:r}}var Kr=A(()=>{h();Si();Pn();});function ju(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"&&Bu.has(n)?n:void 0}catch{return}}function ft(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=ju(t.metadata);return e==="user_stop"?"stopped":e==="runner_lost"?"runner_lost":e==="launch_failed"?"failed":typeof t.error=="string"&&Ii.stopped.test(t.error)?"stopped":typeof t.error=="string"&&Ii.runnerLost.test(t.error)?"runner_lost":"failed"}default:return t.status}}var Ai,Ii,Bu,Vn=A(()=>{h();Ai=["success","failed","stopped","runner_lost"],Ii={stopped:/^(Killed by user|Stopped by user|Cancelled by user|사용자에 의해 중지됨)/,runnerLost:/^Reaped: (process not found|pid never recorded|stale workflow run)/},Bu=new Set(["user_stop","runner_lost","launch_failed"]);});function Jr(t,e,n=1){let r=process.env[t];if(r===void 0||r==="")return e;let o=Number(r);return !Number.isFinite(o)||o<=0?e:Math.max(n,Math.trunc(o))}function Xr(){return Jr("CREWX_TASK_HEARTBEAT_MS",1e4,200)}function Nt(){return Jr("CREWX_TASK_HEARTBEAT_STALE_MS",3e4)}function Jn(){return Jr("CREWX_TASK_HEARTBEAT_HARD_STALE_MS",18e5)}function Ct(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Kn(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 Wu(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 vi(t,e){return !!t.stop_requested_at&&Ct(t.stop_requested_epoch)===Ct(e)}function Oi(t,e){let n=Ct(e.runEpoch);if(!(e.writeHeartbeat===false?true:t.heartbeatTask({id:e.taskId,runEpoch:n})))return {accepted:false,row:null};let o=Wu(t.getTask(e.taskId));return !o||o.status!=="running"||Ct(o.run_epoch)!==n?{accepted:false,row:o}:{accepted:true,row:o}}function Ni(t,e){let n=nn.get(t);return !n||e&&n!==e?false:(clearInterval(n.timer),nn.delete(t),true)}function rn(t,e){let n=nn.get(t);return !n||e!==void 0&&n.runEpoch!==Ct(e)?false:Ni(t,n)}function Pi(t,e){let n=Ct(e.runEpoch);rn(e.taskId);let r=true,o=null;try{let c=Oi(t,{...e,runEpoch:n});r=c.accepted,o=c.row;}catch(c){Kn(c);}if(!r)return false;let s=Xr(),a=Math.min(s,1e3),d=setInterval(()=>{let c=nn.get(e.taskId);if(!(!c||c.timer!==d))try{c.heartbeatElapsedMs+=a;let l=c.heartbeatElapsedMs>=s,p=Oi(t,{taskId:e.taskId,runEpoch:n,writeHeartbeat:l});if(!p.accepted){Ni(e.taskId,c);return}l&&(c.heartbeatElapsedMs%=s,c.lastHeartbeatAt=Date.now()),p.row&&vi(p.row,n)&&!c.stopRequested&&(c.stopRequested=!0,e.onStopRequested&&Promise.resolve(e.onStopRequested(p.row)).catch(Kn));}catch(l){Kn(l);}},a),u={timer:d,runEpoch:n,stopRequested:false,lastHeartbeatAt:Date.now(),heartbeatElapsedMs:0};return nn.set(e.taskId,u),typeof d=="object"&&d!==null&&"unref"in d&&d.unref(),o&&vi(o,n)&&e.onStopRequested&&(u.stopRequested=true,Promise.resolve(e.onStopRequested(o)).catch(Kn)),true}var bi,xi,Ci,nn,on=A(()=>{h();bi=1e4,xi=3e4,Ci=18e5;nn=new Map;});function Xn(t,e=Date.now(),n=eo){let r=t?Date.parse(t):Number.NaN,o=typeof e=="number"?e:Date.parse(e),s=ro(n,eo,0);return Number.isFinite(r)&&Number.isFinite(o)&&o-r>s?"forced":"cooperative"}function ro(t,e,n){return t===void 0||!Number.isFinite(t)?e:Math.max(n,Math.trunc(t))}function $i(t){if(!t)return {};try{let e=JSON.parse(t);if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}catch{}return {}}function Qu(t){if(!t)return;let e=$i(t.metadata).stopMethod;return e==="cooperative"||e==="forced"?e:void 0}function pe(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=Qu(t);return {status:"stopped",finalStatus:t.status,...r?{method:r}:{},...n?{pid:n}:{}}}return {status:"not_running",finalStatus:t.status,...n?{pid:n}:{}}}function ao(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 G(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 Zr(t,e){return G(t,Vu,e)}function Zu(t,e){if(!t.heartbeat_at)return false;let n=Date.parse(t.heartbeat_at);return Number.isFinite(n)?e-n<=Nt():false}function ec(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function tc(t){let e=typeof t.pid=="number"&&t.pid>0?t.pid:void 0,n=$i(t.metadata),r=n.ownership==="runner"&&typeof n.providerPid=="number"&&Number.isSafeInteger(n.providerPid)&&n.providerPid>0?n.providerPid:void 0;return [...new Set([e,r].filter(o=>o!==void 0))]}function nc(t,e,n){let r=t.getTask(e);if(!r||r.status!=="running")return pe(r,n)}async function rc(t,e,n,r){let o=Date.now()+n;for(;;){let s=nc(t,e);if(s)return s;let a=o-Date.now();if(a<=0)return;await new Promise(d=>{setTimeout(d,Math.min(r,a));});}}async function Hi(t,e,n){let r=new Date().toISOString(),o=t.requestTaskStop({id:e,requestedAt:r}),s=t.getTask(e);if(!o.accepted){if(o.status==="pending"){let x=t.stopPendingTask(e),$=t.getTask(e);if(x||!$||$.status!=="running")return pe($);if(o=t.requestTaskStop({id:e,requestedAt:r}),!o.accepted&&o.status!=="running"||!o.accepted&&!o.alreadyRequestedAt)return pe(t.getTask(e))}else if(!(o.status==="running"&&o.alreadyRequestedAt))return pe(s)}let a=o.runEpoch,d=ro(n.graceMs,eo,0),u=ro(n.pollMs,Gu,1),c=await rc(t,e,d,u);if(c)return c;let l=t.getTask(e);if(!l||l.status!=="running")return pe(l);let p=tc(l),g=p[0];if(!g){let x=t.finalizeTaskStop({id:e,runEpoch:a,method:"forced"}),$=t.getTask(e);return x||$?.status!=="running"?pe($):G($,"Failed to finalize task stop")}let m=ec(n),R="unknown";if(!Zu(l,Date.now())){let x=n.processControl?.checkProcessOwnershipAsync??Dn;try{R=await x(g,n.ownershipMarkers??io,m);}catch{R="unknown";}if(R!=="owned")return ao(l)}let w=n.processControl?.terminateProcessTree??St;for(let x of p){let $;try{$=await w(x,{...m,signal:Rt});}catch(y){$={status:"failed",pid:x,method:m.platform==="win32"?"taskkill":"process-group",error:y instanceof Error?y.message:String(y)};}if($.status==="failed")return G(t.getTask(e),$.error??"Failed to terminate process tree")}let T=t.finalizeTaskStop({id:e,runEpoch:a,method:"forced"}),N=t.getTask(e);return T||N?.status!=="running"?pe(N,g):G(N,"Task changed before stop was finalized")}function oo(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function so(t){return Number.isSafeInteger(t)&&t>=0}function sn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function oc(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function sc(t){return {...t.processControlOptions,...t.platform?{platform:t.platform}:{}}}function ic(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 ac(t){switch(t){case "epoch_mismatch":return to;case "workspace_mismatch":return no;default:return}}async function Ui(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return Zr(n,oo(e.targetPid)?e.targetPid:void 0);if(!so(e.sourceRunEpoch)||!so(e.settleRunEpoch)||sn(n.run_epoch)!==e.settleRunEpoch)return G(n,Yr,e.targetPid);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return G(n,Qr,e.targetPid);let r=new Date().toISOString(),o;try{o=t.requestTaskStop({id:e.taskId,requestedAt:r,sourceRunEpoch:e.sourceRunEpoch,settleRunEpoch:e.settleRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return G(n,Ku,e.targetPid)}let s=t.getTask(e.taskId);if(!s||s.status!=="running")return Zr(s,e.targetPid);if(o.runEpoch!==e.settleRunEpoch||sn(s.run_epoch)!==e.settleRunEpoch)return G(s,Yr,e.targetPid);if(e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId)return G(s,Qr,e.targetPid);if(!oo(e.targetPid))return G(s,zu);let a=oc(e),d=e.processControl?.checkProcessOwnershipAsync??Dn,u="unknown";try{u=await d(e.targetPid,e.ownershipMarkers??io,a);}catch{u="unknown";}if(u!=="owned")return ao(s,e.targetPid);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return Zr(c,e.targetPid);if(sn(c.run_epoch)!==e.settleRunEpoch)return G(c,Yr,e.targetPid);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return G(c,Qr,e.targetPid);let l=e.processControl?.terminateProcessTree??St,p;try{p=await l(e.targetPid,{...a,signal:Rt});}catch{return G(t.getTask(e.taskId),Di,e.targetPid)}if(p.status==="failed")return G(t.getTask(e.taskId),Di,e.targetPid);let g;try{g=t.finalizeTaskStop({id:e.taskId,runEpoch:e.settleRunEpoch,method:"forced"});}catch{return G(t.getTask(e.taskId),Li,e.targetPid)}return g?pe(t.getTask(e.taskId),e.targetPid):G(t.getTask(e.taskId),Li,e.targetPid)}async function qi(t,e){let n=t.getTask(e.taskId);if(!n||n.status!=="running")return pe(n);if(!so(e.expectedRunEpoch)||sn(n.run_epoch)!==e.expectedRunEpoch)return G(n,to);if(e.workspaceId!==void 0&&n.workspace_id!==e.workspaceId)return G(n,no);let r=n.pid;if(!oo(r))return G(n,Ju);let o=sc(e),s=e.processControl?.checkProcessOwnershipAsync??Dn,a="unknown";try{a=await s(r,e.ownershipMarkers??io,o);}catch{a="unknown";}if(a!=="owned")return ao(n,r,Xu);let d=e.processControl?.terminateProcessTree??St,u;try{u=await d(r,{...o,signal:Rt});}catch{return G(t.getTask(e.taskId),Mi,r)}if(u.status==="failed")return G(t.getTask(e.taskId),Mi,r);let c=t.getTask(e.taskId);if(!c||c.status!=="running")return pe(c,r);if(sn(c.run_epoch)!==e.expectedRunEpoch)return G(c,to,r);if(e.workspaceId!==void 0&&c.workspace_id!==e.workspaceId)return G(c,no,r);let l;try{l=t.finalizeTaskForHostShutdown({id:e.taskId,expectedRunEpoch:e.expectedRunEpoch,...e.workspaceId!==void 0?{workspaceId:e.workspaceId}:{}});}catch{return G(t.getTask(e.taskId),Yu,r)}let p=ac(l);return p?G(t.getTask(e.taskId),p,r):l!=="settled"?pe(t.getTask(e.taskId),r):ic(t.getTask(e.taskId),r)}function Fi(t,e,n={}){if(typeof t=="string"){let r=t,o=e??{};return Promise.resolve().then(()=>(co(),Bi)).then(({TaskRepository:s})=>Hi(new s,r,o))}return Hi(t,e,n)}var eo,Gu,io,zu,Yr,Qr,Vu,Di,Li,Ku,to,no,Ju,Xu,Mi,Yu,uo=A(()=>{h();Ln();on();eo=5e3,Gu=250;io=["crewx","claude","codex","opencode","grok","node"],zu="INSTRUCTION_STOP_TARGET_PID_MISSING",Yr="INSTRUCTION_STOP_EPOCH_MISMATCH",Qr="INSTRUCTION_STOP_WORKSPACE_MISMATCH",Vu="INSTRUCTION_STOP_GENERATION_ALREADY_SETTLED",Di="INSTRUCTION_STOP_PROCESS_TERMINATION_FAILED",Li="INSTRUCTION_STOP_SETTLE_CAS_FAILED",Ku="INSTRUCTION_STOP_REQUEST_FAILED",to="HOST_SHUTDOWN_EPOCH_MISMATCH",no="HOST_SHUTDOWN_WORKSPACE_MISMATCH",Ju="HOST_SHUTDOWN_TARGET_PID_MISSING",Xu="HOST_SHUTDOWN_OWNERSHIP_UNVERIFIED",Mi="HOST_SHUTDOWN_PROCESS_TERMINATION_FAILED",Yu="HOST_SHUTDOWN_SETTLE_CAS_FAILED";});var Bi={};wa(Bi,{DEFAULT_TASK_REAPER_TICK_INTERVAL_MS:()=>Xi,HOST_SHUTDOWN_TERMINAL_ERROR:()=>Ki,PENDING_ADOPT_GRACE_MS:()=>Ji,PID_NULL_REAP_GRACE_MS:()=>_o,TASK_HEARTBEAT_HARD_STALE_MS:()=>Ci,TASK_HEARTBEAT_INTERVAL_MS:()=>bi,TASK_HEARTBEAT_STALE_MS:()=>xi,TaskRepository:()=>pn,hasRecordedUsage:()=>mo,mergeTerminalReason:()=>ho,resolveTaskHeartbeatHardStaleMs:()=>Jn,resolveTaskHeartbeatIntervalMs:()=>Xr,resolveTaskHeartbeatStaleMs:()=>Nt});function Ae(t){return {...t,status:ft(t)}}function Wi(t){return {...t,status:ft(t)}}function Gi(){let t=drizzleOrm.sql`
|
|
26
26
|
CASE
|
|
27
27
|
WHEN ${i.model} LIKE 'claude-%' OR ${i.model} IN ('opus', 'sonnet', 'haiku', 'opus[1m]', 'sonnet[1m]') THEN 'claude'
|
|
28
28
|
WHEN ${i.model} LIKE 'gpt-%' OR ${i.model} LIKE 'codex-%' THEN 'codex'
|
|
@@ -51,7 +51,7 @@ ${r.join(`
|
|
|
51
51
|
WHEN trim(${o}) = '' THEN 'unknown'
|
|
52
52
|
ELSE ${o}
|
|
53
53
|
END
|
|
54
|
-
`}function
|
|
54
|
+
`}function cn(t){return drizzleOrm.sql`${t} NOT IN (${drizzleOrm.sql.join(mc.map(e=>drizzleOrm.sql`${e}`),drizzleOrm.sql`, `)})`}function Yn(t){let e=drizzleOrm.sql`
|
|
55
55
|
CASE
|
|
56
56
|
WHEN json_valid(${t}) = 1
|
|
57
57
|
THEN json_extract(${t}, '$.usageAccounting')
|
|
@@ -61,9 +61,9 @@ ${r.join(`
|
|
|
61
61
|
COALESCE(SUM(
|
|
62
62
|
CASE WHEN ${e} = 'unavailable' THEN 1 ELSE 0 END
|
|
63
63
|
), 0)
|
|
64
|
-
`}function
|
|
65
|
-
OR COALESCE(${i.stop_requested_epoch}, 0) <> COALESCE(${i.run_epoch}, 0)`)).run().changes===0){let g=o.select({status:i.status,run_epoch:i.run_epoch,stop_requested_at:i.stop_requested_at,stop_requested_epoch:i.stop_requested_epoch}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!g||g.status!=="running"){r={accepted:!1,status:g?.status??"not_running",runEpoch:
|
|
66
|
-
OR COALESCE(${i.stop_requested_epoch}, 0) <> COALESCE(${i.run_epoch}, 0)`)).run(),p(w.id,m+1));};p(e.id,0);},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request task stop",r)}finally{n.close();}}requestTaskStopForInstruction(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(o=>{let s=o.select({id:i.id,status:i.status,run_epoch:i.run_epoch,workspace_id:i.workspace_id,stop_requested_at:i.stop_requested_at,stop_requested_epoch:i.stop_requested_epoch}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!s)return;let a=
|
|
64
|
+
`}function ln(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function de(t){if(!t)return {};try{let e=JSON.parse(t);return ln(e)?{...e}:{}}catch{return {}}}function ho(t,e){let n=de(t??null);return n.terminalReason=e,JSON.stringify(n)}function go(t,e){let n={...t,terminalReason:"user_stop"},r=e?.trim();return r&&r!==zi&&(n[gc]=e),{error:zi,metadata:n}}function te(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function mo(t){return te(t.input_tokens)!==0||te(t.output_tokens)!==0||te(t.cached_input_tokens)!==0||te(t.cost_usd)!==0}function z(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}function Vi(t){return {inputTokens:te(t.inputTokens??0),outputTokens:te(t.outputTokens??0),cachedInputTokens:te(t.cachedInputTokens??0),costUsd:te(t.costUsd??0)}}function _c(t){if(ln(t))return {inputTokens:te(t.inputTokens),outputTokens:te(t.outputTokens),cachedInputTokens:te(t.cachedInputTokens),costUsd:te(t.costUsd)}}function kc(t){let e={inputTokens:0,outputTokens:0,cachedInputTokens:0,costUsd:0};for(let n of Object.values(t)){let r=_c(n);r&&(e.inputTokens+=r.inputTokens,e.outputTokens+=r.outputTokens,e.cachedInputTokens+=r.cachedInputTokens,e.costUsd+=r.costUsd);}return e}function Qn(t,e,n){let r=Date.parse(t),o=Date.parse(e);return Number.isFinite(r)&&Number.isFinite(o)?o-r:n??null}var po,ze,pc,Ve,Ke,fc,fo,un,ve,zi,Ki,gc,hc,mc,_o,Ji,Xi,pn,co=A(()=>{h();st();mt();kt();rt();yt();Pn();Ln();Ds();Kr();Vn();on();uo();on();po=40,ze="2026-05-09",pc="0.8.9-rc.13",Ve=10,Ke=parseInt(pc.split("rc.")[1]);fc=new Set(["workflow","mcp"]),fo="usageByEpoch",un="lateUsage",ve="usageAccounting",zi="Stopped by user",Ki="Stopped by app shutdown",gc="terminalErrorOriginal",hc=new Set(["stopped","runner_lost"]),mc=["pending","running"];_o=600*1e3,Ji=600*1e3,Xi=300*1e3,pn=class extends ge{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=Te.join(e.dbRoot,".crewx","crewx.db")),this.taskLogRepository=new Mn({dbPath:this.dbPath});}resolveDbPath(){return this.dbPath?ot(this.dbPath):super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Te.dirname(n);fs$1.existsSync(o)||fs$1.mkdirSync(o,{recursive:true});}else if(!fs$1.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=j(n);if(e)try{xe(r.db,n);}catch(o){throw r.close(),o}return r}heartbeatTask(e){let n=this.openHandle(true);try{let r=z(e.runEpoch),o=r===0?drizzleOrm.or(drizzleOrm.eq(i.run_epoch,0),drizzleOrm.isNull(i.run_epoch)):drizzleOrm.eq(i.run_epoch,r);return n.db.update(i).set({heartbeat_at:new Date(this.clock()).toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e.id),o,drizzleOrm.eq(i.status,"running"))).run().changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to heartbeat task",r)}finally{n.close();}}requestTaskStop(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(o=>{let s=o.select({id:i.id,status:i.status,run_epoch:i.run_epoch,stop_requested_at:i.stop_requested_at,stop_requested_epoch:i.stop_requested_epoch}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!s)return;let a=z(s.run_epoch);if(s.status!=="running"){r={accepted:!1,status:s.status,runEpoch:a};return}let u=s.stop_requested_at!==null&&z(s.stop_requested_epoch)===a?s.stop_requested_at:e.requestedAt;if(o.update(i).set({stop_requested_at:e.requestedAt,stop_requested_epoch:drizzleOrm.sql`${i.run_epoch}`}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e.id),drizzleOrm.eq(i.status,"running"),drizzleOrm.sql`${i.stop_requested_at} IS NULL
|
|
65
|
+
OR COALESCE(${i.stop_requested_epoch}, 0) <> COALESCE(${i.run_epoch}, 0)`)).run().changes===0){let g=o.select({status:i.status,run_epoch:i.run_epoch,stop_requested_at:i.stop_requested_at,stop_requested_epoch:i.stop_requested_epoch}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!g||g.status!=="running"){r={accepted:!1,status:g?.status??"not_running",runEpoch:z(g?.run_epoch)};return}r={accepted:!1,status:g.status,runEpoch:z(g.run_epoch),...g.stop_requested_at&&z(g.stop_requested_epoch)===z(g.run_epoch)?{alreadyRequestedAt:g.stop_requested_at}:{}};}else r={accepted:!0,status:s.status,runEpoch:a};let l=new Set([e.id]),p=(g,m)=>{if(m>=8)return;let R=o.select({id:i.id,status:i.status}).from(i).where(drizzleOrm.and(drizzleOrm.eq(i.parent_task_id,g),drizzleOrm.eq(i.status,"running"))).all();for(let w of R)l.has(w.id)||(l.add(w.id),o.update(i).set({stop_requested_at:u,stop_requested_epoch:drizzleOrm.sql`${i.run_epoch}`}).where(drizzleOrm.and(drizzleOrm.eq(i.id,w.id),drizzleOrm.eq(i.status,"running"),drizzleOrm.sql`${i.stop_requested_at} IS NULL
|
|
66
|
+
OR COALESCE(${i.stop_requested_epoch}, 0) <> COALESCE(${i.run_epoch}, 0)`)).run(),p(w.id,m+1));};p(e.id,0);},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request task stop",r)}finally{n.close();}}requestTaskStopForInstruction(e){if(!this.dbExists())return {accepted:false,status:"not_running",runEpoch:0};let n=this.openHandle(true);try{let r={accepted:!1,status:"not_running",runEpoch:0};return n.db.transaction(o=>{let s=o.select({id:i.id,status:i.status,run_epoch:i.run_epoch,workspace_id:i.workspace_id,stop_requested_at:i.stop_requested_at,stop_requested_epoch:i.stop_requested_epoch}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!s)return;let a=z(s.run_epoch),d=z(e.sourceRunEpoch),u=z(e.settleRunEpoch);if(s.status!=="running"||a!==u||e.workspaceId!==void 0&&s.workspace_id!==e.workspaceId){r={accepted:!1,status:s.status,runEpoch:a};return}let c=u===0?drizzleOrm.or(drizzleOrm.eq(i.run_epoch,0),drizzleOrm.isNull(i.run_epoch)):drizzleOrm.eq(i.run_epoch,u),l=drizzleOrm.or(drizzleOrm.isNull(i.stop_requested_at),drizzleOrm.isNull(i.stop_requested_epoch),drizzleOrm.ne(i.stop_requested_epoch,d)),p=w=>o.update(i).set({stop_requested_at:e.requestedAt,stop_requested_epoch:d}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e.id),drizzleOrm.eq(i.status,"running"),c,w,l)).run();if((e.workspaceId===void 0?p():e.workspaceId===null?p(drizzleOrm.isNull(i.workspace_id)):p(drizzleOrm.eq(i.workspace_id,e.workspaceId))).changes>0){r={accepted:!0,status:s.status,runEpoch:u};return}let m=o.select({status:i.status,run_epoch:i.run_epoch,stop_requested_at:i.stop_requested_at,stop_requested_epoch:i.stop_requested_epoch}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!m||m.status!=="running"){r={accepted:!1,status:m?.status??"not_running",runEpoch:z(m?.run_epoch)};return}let R=z(m.run_epoch);r={accepted:!1,status:m.status,runEpoch:R,...m.stop_requested_at&&z(m.stop_requested_epoch)===d?{alreadyRequestedAt:m.stop_requested_at}:{}};},{behavior:"immediate"}),r}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to request instruction task stop",r)}finally{n.close();}}finalizeTaskStop(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=e.completedAt??new Date(this.clock()).toISOString(),o=!1;return n.db.transaction(s=>{let a=s.select({status:i.status,run_epoch:i.run_epoch,stop_requested_at:i.stop_requested_at,stop_requested_epoch:i.stop_requested_epoch,started_at:i.started_at,duration_ms:i.duration_ms,metadata:i.metadata}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!a||a.status!=="running"||z(a.run_epoch)!==z(e.runEpoch))return;let d=a.stop_requested_at!==null&&z(a.stop_requested_epoch)===z(e.runEpoch),u=de(a.metadata),c=d?go(u,e.error):{error:e.error??null,metadata:e.terminalReason===void 0?{...u}:{...u,terminalReason:e.terminalReason}},l={...c.metadata,stopMethod:e.method},p=a.duration_ms??e.durationMs??Qn(a.started_at,r,void 0),g=a.run_epoch===null?drizzleOrm.isNull(i.run_epoch):drizzleOrm.eq(i.run_epoch,a.run_epoch);o=s.update(i).set({status:"stopped",error:c.error,completed_at:r,duration_ms:p,metadata:JSON.stringify(l)}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e.id),drizzleOrm.eq(i.status,"running"),g)).run().changes>0;},{behavior:"immediate"}),o}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to finalize task stop",r)}finally{n.close();}}finalizeTaskForHostShutdown(e){if(!this.dbExists())return "not_running";let n=this.openHandle(true);try{let r=e.completedAt??new Date(this.clock()).toISOString(),o=z(e.expectedRunEpoch),s="not_running";return n.db.transaction(a=>{let d=a.select({status:i.status,run_epoch:i.run_epoch,workspace_id:i.workspace_id,started_at:i.started_at,duration_ms:i.duration_ms,metadata:i.metadata}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!d||d.status!=="running"){s="not_running";return}if(z(d.run_epoch)!==o){s="epoch_mismatch";return}if(e.workspaceId!==void 0&&d.workspace_id!==e.workspaceId){s="workspace_mismatch";return}let c=d.run_epoch===null?drizzleOrm.isNull(i.run_epoch):drizzleOrm.eq(i.run_epoch,d.run_epoch),l=e.workspaceId===void 0?void 0:e.workspaceId===null?drizzleOrm.isNull(i.workspace_id):drizzleOrm.eq(i.workspace_id,e.workspaceId),p={...de(d.metadata),terminalReason:"runner_lost"},g=d.duration_ms??Qn(d.started_at,r,void 0);s=a.update(i).set({status:"runner_lost",error:Ki,completed_at:r,duration_ms:g,metadata:JSON.stringify(p)}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e.id),drizzleOrm.eq(i.status,"running"),c,l)).run().changes>0?"settled":"not_running";},{behavior:"immediate"}),s}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to finalize task for host shutdown",r)}finally{n.close();}}async stopTask(e,n={}){return Fi(this,e,n)}async stopTaskGenerationForInstruction(e){return Ui({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,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,project_id:e.projectId??null,platform:e.platform??"cli",crewx_version:e.crewxVersion??null,thread_id:e.threadId??null,model:e.model??null,rendered_prompt:e.renderedPrompt??null,coding_agent_command:e.codingAgentCommand??null,log_storage:"events"},o=s=>{n.db.insert(i).values(s).onConflictDoUpdate({target:i.id,set:{status:drizzleOrm.sql`CASE WHEN ${i.status} = 'pending' AND ${i.pid} IS NULL THEN 'running' ELSE ${i.status} END`,pid:drizzleOrm.sql`COALESCE(excluded.pid, ${i.pid})`,command:drizzleOrm.sql`CASE WHEN ${i.status} = 'pending' AND ${i.pid} IS NULL THEN excluded.command ELSE ${i.command} END`,metadata:drizzleOrm.sql`CASE WHEN ${i.status} = 'pending' AND ${i.pid} IS NULL THEN excluded.metadata ELSE ${i.metadata} END`,workspace_id:drizzleOrm.sql`CASE WHEN ${i.status} = 'pending' AND ${i.pid} IS NULL THEN COALESCE(${i.workspace_id}, excluded.workspace_id) ELSE ${i.workspace_id} END`,project_id:drizzleOrm.sql`CASE WHEN ${i.status} = 'pending' AND ${i.pid} IS NULL THEN COALESCE(${i.project_id}, excluded.project_id) ELSE ${i.project_id} END`,crewx_version:drizzleOrm.sql`CASE WHEN ${i.status} = 'pending' AND ${i.pid} IS NULL THEN excluded.crewx_version ELSE ${i.crewx_version} END`,model:drizzleOrm.sql`CASE WHEN ${i.status} = 'pending' AND ${i.pid} IS NULL THEN excluded.model ELSE ${i.model} END`,rendered_prompt:drizzleOrm.sql`CASE WHEN ${i.status} = 'pending' AND ${i.pid} IS NULL THEN excluded.rendered_prompt ELSE ${i.rendered_prompt} END`,coding_agent_command:drizzleOrm.sql`CASE WHEN ${i.status} = 'pending' AND ${i.pid} IS NULL THEN excluded.coding_agent_command ELSE ${i.coding_agent_command} END`},setWhere:drizzleOrm.or(drizzleOrm.eq(i.status,"running"),drizzleOrm.and(drizzleOrm.eq(i.status,"pending"),drizzleOrm.isNull(i.pid)))}).run();};try{o(r);}catch(s){let a=s instanceof Error?s.message:typeof s=="object"&&s!==null&&"message"in s?String(s.message):String(s);if(!/log_storage|heartbeat_at|stop_requested_at|stop_requested_epoch/i.test(a)||!/no such column|no column named/i.test(a))throw s;let u=new Set(n.db.all("PRAGMA table_info(tasks)").map(g=>g.name)).has("log_storage"),c=u?", log_storage":"",l=u?", ?":"",p=u?`,
|
|
67
67
|
log_storage = CASE WHEN tasks.status = 'pending' THEN excluded.log_storage ELSE tasks.log_storage END`:"";n.runRaw(`INSERT INTO tasks (
|
|
68
68
|
id, agent_id, prompt, mode, status, started_at, pid,
|
|
69
69
|
parent_task_id, caller_agent_id, trace_id, command, metadata,
|
|
@@ -81,9 +81,9 @@ ${r.join(`
|
|
|
81
81
|
model = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.model ELSE tasks.model END,
|
|
82
82
|
rendered_prompt = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.rendered_prompt ELSE tasks.rendered_prompt END,
|
|
83
83
|
coding_agent_command = CASE WHEN tasks.status = 'pending' AND tasks.pid IS NULL THEN excluded.coding_agent_command ELSE tasks.coding_agent_command END${p}
|
|
84
|
-
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,r.project_id,r.platform,r.crewx_version,r.thread_id,r.model,r.rendered_prompt,r.coding_agent_command,...u?[r.log_storage]:[]]);}}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to start task",r)}finally{n.close();}}updateTaskOwnership(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=n.db.select({status:i.status,run_epoch:i.run_epoch,metadata:i.metadata}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!r||r.status!=="running"||
|
|
85
|
-
AND COALESCE(${i.stop_requested_epoch}, 0) <> COALESCE(${i.run_epoch}, 0)`)).run(),a.changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to update task ownership",r)}finally{n.close();}}adoptPendingTask(e){let n=this.openHandle(true);try{return n.db.update(i).set({status:"running"}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.status,"pending"),drizzleOrm.isNull(i.pid))).run().changes===1}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to adopt pending task",r)}finally{n.close();}}failPendingTask(e,n,r=new Date().toISOString()){let o=this.openHandle(true);try{return o.db.update(i).set({status:"failed",error:n,completed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.status,"pending"))).run().changes>0}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to fail pending task",s)}finally{o.close();}}stopPendingTask(e,n,r=new Date().toISOString()){let o=this.openHandle(true);try{let s=!1;return o.db.transaction(a=>{let d=a.select({metadata:i.metadata}).from(i).where(drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.status,"pending"))).limit(1).get();if(!d)return;let u=
|
|
86
|
-
`);}}updateTaskLifecycle(e){let n=this.openHandle(true);try{let r=drizzleOrm.and(drizzleOrm.eq(i.id,e.id),drizzleOrm.eq(i.workspace_id,e.workspaceId)),o={status:e.status,error:e.error,completed_at:e.completedAt,duration_ms:e.durationMs};if(e.terminalReason){let s=n.db.select({metadata:i.metadata}).from(i).where(r).limit(1).get(),a=
|
|
84
|
+
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,r.project_id,r.platform,r.crewx_version,r.thread_id,r.model,r.rendered_prompt,r.coding_agent_command,...u?[r.log_storage]:[]]);}}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to start task",r)}finally{n.close();}}updateTaskOwnership(e){if(!this.dbExists())return false;let n=this.openHandle(true);try{let r=n.db.select({status:i.status,run_epoch:i.run_epoch,metadata:i.metadata}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!r||r.status!=="running"||z(r.run_epoch)!==z(e.runEpoch))return !1;let o=de(r.metadata);o.ownership=e.ownership,e.ownership==="runner"&&e.providerPid!==void 0&&(o.providerPid=e.providerPid);let s=r.run_epoch===null?drizzleOrm.isNull(i.run_epoch):drizzleOrm.eq(i.run_epoch,r.run_epoch),a=n.db.update(i).set({metadata:JSON.stringify(o)}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e.id),drizzleOrm.eq(i.status,"running"),s)).run();return a.changes>0&&z(e.runEpoch)>0&&n.db.update(i).set({stop_requested_at:null,stop_requested_epoch:null}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e.id),drizzleOrm.eq(i.status,"running"),s,drizzleOrm.sql`${i.stop_requested_at} IS NOT NULL
|
|
85
|
+
AND COALESCE(${i.stop_requested_epoch}, 0) <> COALESCE(${i.run_epoch}, 0)`)).run(),a.changes>0}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to update task ownership",r)}finally{n.close();}}adoptPendingTask(e){let n=this.openHandle(true);try{return n.db.update(i).set({status:"running"}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.status,"pending"),drizzleOrm.isNull(i.pid))).run().changes===1}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to adopt pending task",r)}finally{n.close();}}failPendingTask(e,n,r=new Date().toISOString()){let o=this.openHandle(true);try{return o.db.update(i).set({status:"failed",error:n,completed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.status,"pending"))).run().changes>0}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to fail pending task",s)}finally{o.close();}}stopPendingTask(e,n,r=new Date().toISOString()){let o=this.openHandle(true);try{let s=!1;return o.db.transaction(a=>{let d=a.select({metadata:i.metadata}).from(i).where(drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.status,"pending"))).limit(1).get();if(!d)return;let u=go(de(d.metadata),n),c={...u.metadata,stopMethod:"cooperative"};s=a.update(i).set({status:"stopped",error:u.error,completed_at:r,metadata:JSON.stringify(c)}).where(drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.status,"pending"))).run().changes===1;},{behavior:"immediate"}),s}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to stop pending task",s)}finally{o.close();}}listTasksByProjectId(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.select().from(i).where(drizzleOrm.eq(i.project_id,e)).orderBy(drizzleOrm.desc(i.started_at)).all().map(Ae)}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to list tasks by project",r)}finally{n.close();}}finishTask(e){let n=this.openHandle(true),r,o;try{n.db.transaction(s=>{let a=s.select({status:i.status,run_epoch:i.run_epoch,stop_requested_at:i.stop_requested_at,stop_requested_epoch:i.stop_requested_epoch,started_at:i.started_at,duration_ms:i.duration_ms,result:i.result,exit_code:i.exit_code,error:i.error,metadata:i.metadata,model:i.model,input_tokens:i.input_tokens,output_tokens:i.output_tokens,cached_input_tokens:i.cached_input_tokens,cost_usd:i.cost_usd}).from(i).where(drizzleOrm.eq(i.id,e.id)).limit(1).get();if(!a)return;let d=z(a.run_epoch),u=z(e.runEpoch),c=a.status==="running"&&d===u,l=a.stop_requested_at!==null&&z(a.stop_requested_epoch)===d,p=c&&l,g=a.status==="stopped"&&d===u&&l,m=de(a.metadata),R=ln(m[un])?m[un]:{},w=String(u),T=hc.has(a.status),N=T&&d===u&&!mo(a)&&!Object.prototype.hasOwnProperty.call(R,w),x=T&&d===u&&!Object.prototype.hasOwnProperty.call(R,w),$=d>0||u>0||e.runEpoch!==void 0&&e.runEpoch!==null||d!==u,y={},b;if(a.status!=="running"&&(r=a.status,o=e.result?.trim()||e.error?.trim()||`task:end status=${e.status}`),$&&(a.status==="running"||x)){b=de(a.metadata);let I=ln(b[fo])?{...b[fo]}:{};I[String(u)]=Vi(e),b[fo]=I;let Y=kc(I),ue=Y.inputTokens!==0||Y.outputTokens!==0||Y.cachedInputTokens!==0||Y.costUsd!==0;ue&&m[ve]==="unavailable"?b[ve]="recorded":a.status!=="running"&&!ue&&m[ve]===void 0&&(b[ve]="unavailable"),y.metadata=JSON.stringify(b),y.input_tokens=Y.inputTokens,y.output_tokens=Y.outputTokens,y.cached_input_tokens=Y.cachedInputTokens,y.cost_usd=Y.costUsd;}else if(c||N)if(c)y.input_tokens=te(e.inputTokens??0),y.output_tokens=te(e.outputTokens??0),y.cached_input_tokens=te(e.cachedInputTokens??0),y.cost_usd=te(e.costUsd??0);else {let I=Vi(e),Y=I.inputTokens!==0||I.outputTokens!==0||I.cachedInputTokens!==0||I.costUsd!==0;Y&&(y.input_tokens=I.inputTokens,y.output_tokens=I.outputTokens,y.cached_input_tokens=I.cachedInputTokens,y.cost_usd=I.costUsd),b={...m};let ue=ln(m[un])?{...m[un]}:{};ue[w]={at:e.completedAt},b[un]=ue,b[ve]===void 0?b[ve]=Y?"recorded":"unavailable":Y&&b[ve]==="unavailable"&&(b[ve]="recorded"),y.metadata=JSON.stringify(b);}if((c||N)&&e.model!==void 0&&e.model!==null&&(!N||a.model===null)&&(y.model=e.model),p){b??=de(a.metadata);let I=go(b,e.error);b={...I.metadata,...e.partialResultRecovered===!0?{partialResultRecovered:!0}:{},stopMethod:Xn(a.stop_requested_at,e.completedAt)},y.status="stopped",y.result=e.result??a.result,y.error=I.error,y.completed_at=e.completedAt,y.duration_ms=a.duration_ms??e.durationMs??Qn(a.started_at,e.completedAt,void 0),y.exit_code=e.exitCode??a.exit_code,y.metadata=JSON.stringify(b);}else if(c)e.partialResultRecovered===!0&&(b??=de(a.metadata),b.partialResultRecovered=!0,y.metadata=JSON.stringify(b)),y.status=e.status,y.result=e.result??null,y.error=e.error??null,y.completed_at=e.completedAt,y.duration_ms=d>0?Qn(a.started_at,e.completedAt,e.durationMs):e.durationMs??null,y.exit_code=e.exitCode??null;else if(g){let I=!1;a.result===null&&e.result!==void 0&&e.result!==null&&(y.result=e.result,I=!0),a.exit_code===null&&e.exitCode!==void 0&&e.exitCode!==null&&(y.exit_code=e.exitCode),e.partialResultRecovered===!0&&(b??=de(a.metadata),b.partialResultRecovered=!0,y.metadata=JSON.stringify(b)),I&&(r=void 0,o=void 0);}Object.keys(y).length>0&&s.update(i).set(y).where(drizzleOrm.eq(i.id,e.id)).run();},{behavior:"immediate"});}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to finish task",s)}finally{n.close();}if(r!==void 0){try{this.taskLogRepository.appendLog(e.id,{timestamp:e.completedAt,level:"late-result",message:o??`task:end status=${e.status}`});}catch(s){console.error(`[crewx] failed to preserve late task result for ${e.id}: ${s instanceof Error?s.message:String(s)}`);}process.stderr.write(`Task ${e.id} was already finalized (${r}); late result kept in task log
|
|
86
|
+
`);}}updateTaskLifecycle(e){let n=this.openHandle(true);try{let r=drizzleOrm.and(drizzleOrm.eq(i.id,e.id),drizzleOrm.eq(i.workspace_id,e.workspaceId)),o={status:e.status,error:e.error,completed_at:e.completedAt,duration_ms:e.durationMs};if(e.terminalReason){let s=n.db.select({metadata:i.metadata}).from(i).where(r).limit(1).get(),a=de(s?.metadata??null);a.terminalReason=e.terminalReason,o.metadata=JSON.stringify(a);}n.db.update(i).set(o).where(r).run();}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to update task lifecycle",r)}finally{n.close();}}appendLog(e,n){this.taskLogRepository.appendLog(e,n);}appendLogs(e,n){this.taskLogRepository.appendLogs(e,n);}readLogs(e){return this.taskLogRepository.readLogs(e)}readLogsTail(e,n){return this.taskLogRepository.readLogsTail(e,n)}getLogState(e){return this.taskLogRepository.getLogState(e)}getRunningTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(i).where(drizzleOrm.eq(i.status,"running")).orderBy(drizzleOrm.desc(i.started_at)).all().map(Ae)}catch(n){throw new f("DB_ERROR","Failed to get running tasks",n)}finally{e.close();}}getActiveTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(i).where(drizzleOrm.inArray(i.status,["pending","running"])).orderBy(drizzleOrm.desc(i.started_at)).all().map(Ae)}catch(n){throw new f("DB_ERROR","Failed to get active tasks",n)}finally{e.close();}}getAllTasks(){if(!this.dbExists())return [];let e=this.openHandle(false);try{return e.db.select().from(i).orderBy(drizzleOrm.desc(i.started_at)).limit(100).all().map(Ae)}catch(n){throw new f("DB_ERROR","Failed to get all tasks",n)}finally{e.close();}}getTask(e){if(!this.dbExists())return;let n=this.openHandle(false);try{let r=n.db.select().from(i).where(drizzleOrm.eq(i.id,e)).limit(1).get();return r?Ae(r):void 0}catch(r){throw new f("DB_ERROR","Failed to get task",r)}finally{n.close();}}async killTask(e){let n=await this.stopTask(e);return n.status==="stopped"?{status:"terminated",killed:n.method==="forced"||n.method==="cooperative",...n.pid?{pid:n.pid}:{}}:n.status==="not_running"?{status:"not_running",killed:false,...n.pid?{pid:n.pid}:{},...n.error?{error:n.error}:{}}:{status:"failed",killed:false,...n.pid?{pid:n.pid}:{},...n.error?{error:n.error}:{}}}reapOrphanedTasks(e={}){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=n.db.select({id:i.id,status:i.status,pid:i.pid,platform:i.platform,run_epoch:i.run_epoch,heartbeat_at:i.heartbeat_at,started_at:i.started_at,metadata:i.metadata,model:i.model,input_tokens:i.input_tokens,output_tokens:i.output_tokens,cached_input_tokens:i.cached_input_tokens,cost_usd:i.cost_usd}).from(i).where(drizzleOrm.or(drizzleOrm.eq(i.status,"running"),drizzleOrm.eq(i.status,"pending"))).all(),o=this.clock(),s=Math.max(1,Math.trunc(e.tickIntervalMs??Xi)),a=this.lastReaperTickAt,d=a===void 0?Number.POSITIVE_INFINITY:o-a,u=a!==void 0&&d>=0&&d<=s*2;this.lastReaperTickAt=o;let c=Nt(),l=Jn(),p=new Date(o-Ji).toISOString(),g=new Date(o).toISOString(),m=new Set,R=0,w=(T,N)=>{let x=de(ho(T.metadata,"runner_lost")),$=typeof x.provider=="string"?x.provider:void 0,y;try{y=zn({taskLogRepository:this.taskLogRepository,taskId:T.id,provider:$,model:T.model})?.usage;}catch{}let b={status:"runner_lost",error:N,completed_at:g};y?(b.input_tokens=y.inputTokens,b.output_tokens=y.outputTokens,b.cached_input_tokens=y.cachedInputTokens,b.cost_usd=y.costUsd,T.model===null&&y.model!==null&&(b.model=y.model),x[ve]="recorded"):!mo(T)&&x[ve]!=="recorded"&&(x[ve]="unavailable"),b.metadata=JSON.stringify(x);let I=T.run_epoch===null?drizzleOrm.isNull(i.run_epoch):drizzleOrm.eq(i.run_epoch,T.run_epoch),Y=T.heartbeat_at===null?drizzleOrm.isNull(i.heartbeat_at):drizzleOrm.eq(i.heartbeat_at,T.heartbeat_at),ue=n.db.update(i).set(b).where(drizzleOrm.and(drizzleOrm.eq(i.id,T.id),drizzleOrm.eq(i.status,"running"),I,Y)).run();return ue.changes>0&&R++,ue.changes>0};for(let T of r){if(T.status==="pending"){if(T.pid!==null||T.started_at>=p)continue;let y=ho(T.metadata,"launch_failed");n.db.update(i).set({status:"failed",error:"Reaped: runner never adopted task (pending timeout)",completed_at:g,metadata:y}).where(drizzleOrm.and(drizzleOrm.eq(i.id,T.id),drizzleOrm.eq(i.status,"pending"),drizzleOrm.isNull(i.pid),drizzleOrm.lt(i.started_at,p))).run().changes>0&&R++;continue}if(fc.has(T.platform??"cli"))continue;if(T.pid===null){let y=`${T.id}:${T.run_epoch??0}`;m.add(y);let b=this.pidNullObservedSince.get(y);if(b===void 0){this.pidNullObservedSince.set(y,o);continue}o-b>=_o&&w(T,"Reaped: pid never recorded after resume (stale running_instruction)")&&this.pidNullObservedSince.delete(y);continue}if(T.heartbeat_at===null){dt(T.pid)==="not_found"&&w(T,"Reaped: process not found (orphaned task)");continue}let N=Date.parse(T.heartbeat_at),x=Number.isFinite(N)?o-N:Number.POSITIVE_INFINITY;if(x<=c)continue;dt(T.pid)==="not_found"?w(T,"Reaped: process not found (orphaned task)"):x>l&&u&&w(T,"Reaped: heartbeat stale beyond hard limit (orphaned task)");}for(let T of Array.from(this.pidNullObservedSince.keys()))m.has(T)||this.pidNullObservedSince.delete(T);return R}finally{n.close();}}reapRunningWorkflowTasks(e=_o){if(!this.dbExists())return 0;let n=this.openHandle(true);try{let r=new Date(Date.now()-e).toISOString(),o=drizzleOrm.and(drizzleOrm.eq(i.status,"running"),drizzleOrm.eq(i.platform,"workflow"),drizzleOrm.isNull(i.pid),drizzleOrm.lt(i.started_at,r),drizzleOrm.or(drizzleOrm.isNull(i.metadata),drizzleOrm.and(drizzleOrm.notLike(i.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(i.metadata,'%"kind":"workflow_ui_instance"%')))),s=n.db.select({id:i.id,metadata:i.metadata}).from(i).where(o).all(),a=new Date().toISOString(),d=0;for(let u of s){let c=de(u.metadata);c.terminalReason="runner_lost";let l=n.db.update(i).set({status:"runner_lost",error:"Reaped: stale workflow run (finally not executed)",completed_at:a,metadata:JSON.stringify(c)}).where(drizzleOrm.and(drizzleOrm.eq(i.id,u.id),drizzleOrm.eq(i.status,"running"))).run();d+=l.changes??0;}return d}finally{n.close();}}findTaskStatus(e,n){let r=this.resolveDbPaths();for(let o of r){if(!fs$1.existsSync(o))continue;let s=j(o);try{let a=n?drizzleOrm.eq(i.workspace_id,n):void 0,d=a?drizzleOrm.and(drizzleOrm.eq(i.id,e),a):drizzleOrm.eq(i.id,e),u=s.db.select().from(i).where(d).limit(1).get()??void 0;if(!u){let c=a?drizzleOrm.and(drizzleOrm.eq(i.thread_id,e),a):drizzleOrm.eq(i.thread_id,e);u=s.db.select().from(i).where(c).orderBy(drizzleOrm.desc(i.started_at)).limit(1).get()??void 0;}if(u)return Ae(u)}catch(a){throw new f("DB_ERROR","Failed to find task status",a)}finally{s.close();}}}findChildTasks(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let a of r){if(!fs$1.existsSync(a))continue;let d=j(a);try{let u=n?drizzleOrm.and(drizzleOrm.eq(i.parent_task_id,e),drizzleOrm.eq(i.workspace_id,n)):drizzleOrm.eq(i.parent_task_id,e),c=d.db.select().from(i).where(u).orderBy(drizzleOrm.asc(i.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),s.push(Ae(l)));}catch(u){throw new f("DB_ERROR","Failed to find child tasks",u)}finally{d.close();}}return s}getWorkspaceUsageSummary(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{return n.db.all(e?drizzleOrm.sql`
|
|
87
87
|
SELECT
|
|
88
88
|
COALESCE(workspace_id, 'unknown') AS workspace_id,
|
|
89
89
|
COALESCE(SUM(input_tokens), 0) AS input_tokens,
|
|
@@ -104,7 +104,7 @@ ${r.join(`
|
|
|
104
104
|
FROM tasks
|
|
105
105
|
GROUP BY workspace_id
|
|
106
106
|
ORDER BY (COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0)) DESC
|
|
107
|
-
`)}catch(r){throw new f("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),o=new Set,s=0,a=0,d=0;for(let u of r){if(!fs$1.existsSync(u))continue;let c=j(u);try{let l=drizzleOrm.eq(i.thread_id,e),p=n?drizzleOrm.and(l,drizzleOrm.eq(i.workspace_id,n)):l,g=c.db.select({id:i.id,input_tokens:i.input_tokens,output_tokens:i.output_tokens,cost_usd:i.cost_usd}).from(i).where(p).all();for(let m of g)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,a+=m.output_tokens??0,d+=m.cost_usd??0);}catch(l){throw new f("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:s,outputTokens:a,costUsd:d}}findTasksByThread(e,n,r){let o=this.resolveDbPaths(),s=new Set,a=[],d=r?.projection==="activity-log";for(let u of o){if(!fs$1.existsSync(u))continue;let c=j(u);try{let l=drizzleOrm.eq(i.thread_id,e),p=n?drizzleOrm.and(l,drizzleOrm.eq(i.workspace_id,n)):l,g=d?c.db.select({id:i.id,thread_id:i.thread_id,agent_id:i.agent_id,parent_task_id:i.parent_task_id,started_at:i.started_at,completed_at:i.completed_at}).from(i).where(p).orderBy(drizzleOrm.asc(i.started_at)).all():c.db.select().from(i).where(p).orderBy(drizzleOrm.asc(i.started_at)).all().map(
|
|
107
|
+
`)}catch(r){throw new f("DB_ERROR","Failed to get workspace usage summary",r)}finally{n.close();}}getThreadTokenUsage(e,n){let r=this.resolveDbPaths(),o=new Set,s=0,a=0,d=0;for(let u of r){if(!fs$1.existsSync(u))continue;let c=j(u);try{let l=drizzleOrm.eq(i.thread_id,e),p=n?drizzleOrm.and(l,drizzleOrm.eq(i.workspace_id,n)):l,g=c.db.select({id:i.id,input_tokens:i.input_tokens,output_tokens:i.output_tokens,cost_usd:i.cost_usd}).from(i).where(p).all();for(let m of g)o.has(m.id)||(o.add(m.id),s+=m.input_tokens??0,a+=m.output_tokens??0,d+=m.cost_usd??0);}catch(l){throw new f("DB_ERROR","Failed to get thread token usage",l)}finally{c.close();}}return {inputTokens:s,outputTokens:a,costUsd:d}}findTasksByThread(e,n,r){let o=this.resolveDbPaths(),s=new Set,a=[],d=r?.projection==="activity-log";for(let u of o){if(!fs$1.existsSync(u))continue;let c=j(u);try{let l=drizzleOrm.eq(i.thread_id,e),p=n?drizzleOrm.and(l,drizzleOrm.eq(i.workspace_id,n)):l,g=d?c.db.select({id:i.id,thread_id:i.thread_id,agent_id:i.agent_id,parent_task_id:i.parent_task_id,started_at:i.started_at,completed_at:i.completed_at}).from(i).where(p).orderBy(drizzleOrm.asc(i.started_at)).all():c.db.select().from(i).where(p).orderBy(drizzleOrm.asc(i.started_at)).all().map(Ae);for(let m of g)s.has(m.id)||(s.add(m.id),a.push(m));}catch(l){throw new f("DB_ERROR","Failed to find tasks by thread",l)}finally{c.close();}}return a}parseWorkflowCardMetadata(e){if(!e)return {};try{let n=JSON.parse(e);return {kind:typeof n.kind=="string"?n.kind:void 0,workflowRunId:typeof n.workflowRunId=="string"?n.workflowRunId:void 0}}catch{return {}}}extractThreadIdFromCommand(e){return e?/--thread=(\S+)/.exec(e)?.[1]??null:null}findRunningWorkflowParentTasks(){if(!this.dbExists())return [];let e=[];for(let n of this.resolveDbPaths()){if(!fs$1.existsSync(n))continue;let r=j(n);try{e.push(...r.db.select({id:i.id,agent_id:i.agent_id,thread_id:i.thread_id,workspace_id:i.workspace_id,platform:i.platform,status:i.status,error:i.error,completed_at:i.completed_at,duration_ms:i.duration_ms,started_at:i.started_at,metadata:i.metadata}).from(i).where(drizzleOrm.and(drizzleOrm.eq(i.platform,"workflow"),drizzleOrm.or(drizzleOrm.like(i.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(i.metadata,'%"kind":"workflow_ui_instance"%')))).orderBy(drizzleOrm.desc(i.started_at)).all().map(Wi));}catch(o){throw new f("DB_ERROR","Failed to find workflow parent tasks",o)}finally{r.close();}}return e}findWorkflowParentTask(e){if(this.dbExists())for(let n of this.resolveDbPaths()){if(!fs$1.existsSync(n))continue;let r=j(n);try{let o=r.db.select({id:i.id,agent_id:i.agent_id,thread_id:i.thread_id,workspace_id:i.workspace_id,platform:i.platform,status:i.status,error:i.error,completed_at:i.completed_at,duration_ms:i.duration_ms,started_at:i.started_at,metadata:i.metadata}).from(i).where(drizzleOrm.and(drizzleOrm.eq(i.platform,"workflow"),drizzleOrm.eq(i.workspace_id,e.workspaceId))).orderBy(drizzleOrm.desc(i.started_at),drizzleOrm.desc(i.id)).all();for(let s of o){let a=this.parseWorkflowCardMetadata(s.metadata);if(a.kind===e.kind&&a.workflowRunId===e.workflowRunId)return Wi(s)}}catch(o){throw new f("DB_ERROR","Failed to find workflow parent task",o)}finally{r.close();}}}batchFetchWorkflowCards(e,n){let r=new Map;if(e.length===0)return r;let o=new Set(e),s=new Map,a=n?drizzleOrm.eq(i.workspace_id,n):void 0,d=(u,c)=>{if(!u)return;let l=s.get(u);if(l&&c.started_at<=l)return;let p=this.parseWorkflowCardMetadata(c.metadata);p.kind!=="workflow_card"&&p.kind!=="workflow_ui_instance"||(s.set(u,c.started_at),r.set(u,{taskId:c.id,workflowRunId:p.workflowRunId,raw:c.result??void 0}));};for(let u of this.resolveDbPaths()){if(!fs$1.existsSync(u))continue;let c=j(u);try{let l=drizzleOrm.and(drizzleOrm.inArray(i.thread_id,e),drizzleOrm.or(drizzleOrm.like(i.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(i.metadata,'%"kind":"workflow_ui_instance"%'))),p=c.db.select({id:i.id,thread_id:i.thread_id,metadata:i.metadata,result:i.result,started_at:i.started_at}).from(i).where(a?drizzleOrm.and(l,a):l).all();for(let R of p)d(R.thread_id,R);let g=drizzleOrm.and(drizzleOrm.isNull(i.thread_id),drizzleOrm.or(drizzleOrm.like(i.metadata,'%"kind":"workflow_card"%'),drizzleOrm.like(i.metadata,'%"kind":"workflow_ui_instance"%'))),m=c.db.select({id:i.id,command:i.command,metadata:i.metadata,result:i.result,started_at:i.started_at}).from(i).where(a?drizzleOrm.and(g,a):g).all();for(let R of m){let w=this.extractThreadIdFromCommand(R.command);!w||!o.has(w)||d(w,R);}}catch(l){throw new f("DB_ERROR","Failed to batch fetch workflow cards",l)}finally{c.close();}}return r}findAllTasks(e){if(!this.dbExists())return {rows:[],total:0};let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(i.workspace_id,e.workspaceId));let o=e.agents&&e.agents.length>0?e.agents:e.agentId?[e.agentId]:null;o&&r.push(drizzleOrm.inArray(i.agent_id,o));let s=e.statuses&&e.statuses.length>0?e.statuses:e.status?[e.status]:null;s&&r.push(drizzleOrm.inArray(i.status,s));let a=e.q??e.search;a&&r.push(drizzleOrm.like(i.prompt,`%${a}%`)),e.from&&r.push(drizzleOrm.gte(i.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(i.started_at,e.to));let d=r.length>0?drizzleOrm.and(...r):void 0,u=n.db.select({count:drizzleOrm.sql`count(*)`}).from(i).where(d).get(),c=(e.sortDir??"DESC")==="ASC"?drizzleOrm.asc(i.started_at):drizzleOrm.desc(i.started_at);return {rows:n.db.select().from(i).where(d).orderBy(c).limit(e.limit).offset(e.offset).all().map(Ae),total:u?.count??0}}catch(r){throw new f("DB_ERROR","Failed to find all tasks",r)}finally{n.close();}}getAgentUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=cn(drizzleOrm.sql.raw("t.status")),a=Yn(drizzleOrm.sql.raw("t.metadata"));return o.db.all(r?drizzleOrm.sql`
|
|
108
108
|
SELECT
|
|
109
109
|
t.agent_id,
|
|
110
110
|
t.workspace_id,
|
|
@@ -191,7 +191,7 @@ ${r.join(`
|
|
|
191
191
|
), 0)
|
|
192
192
|
+ COALESCE(SUM(t.output_tokens), 0)
|
|
193
193
|
) DESC
|
|
194
|
-
`).map(u=>({agentId:u.agent_id,workspaceId:u.workspace_id??null,totalTasks:u.total_tasks,unavailableTaskCount:u.unavailable_task_count,inputTokens:u.input_tokens,outputTokens:u.output_tokens,cachedInputTokens:u.cached_input_tokens,costUsd:u.cost_usd,totalTokens:u.input_tokens+u.output_tokens}))}catch(s){throw new f("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=
|
|
194
|
+
`).map(u=>({agentId:u.agent_id,workspaceId:u.workspace_id??null,totalTasks:u.total_tasks,unavailableTaskCount:u.unavailable_task_count,inputTokens:u.input_tokens,outputTokens:u.output_tokens,cachedInputTokens:u.cached_input_tokens,costUsd:u.cost_usd,totalTokens:u.input_tokens+u.output_tokens}))}catch(s){throw new f("DB_ERROR","Failed to get agent usage",s)}finally{o.close();}}getAgentUsageTrendRaw(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=cn(drizzleOrm.sql.raw("t.status")),a=Yn(drizzleOrm.sql.raw("t.metadata"));return o.db.all(r?drizzleOrm.sql`
|
|
195
195
|
SELECT
|
|
196
196
|
date(t.started_at) AS date,
|
|
197
197
|
t.agent_id,
|
|
@@ -246,7 +246,7 @@ ${r.join(`
|
|
|
246
246
|
AND t.started_at < ${n}
|
|
247
247
|
GROUP BY date(t.started_at), t.agent_id
|
|
248
248
|
ORDER BY date(t.started_at) ASC
|
|
249
|
-
`).map(u=>({date:u.date,agentId:u.agent_id,unavailableTaskCount:u.unavailable_task_count,inputTokens:u.input_tokens,outputTokens:u.output_tokens,cachedInputTokens:u.cached_input_tokens,costUsd:u.cost_usd,totalTokens:u.input_tokens+u.output_tokens}))}catch(s){throw new f("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let o=r.db.select().from(i).where(drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.workspace_id,n))).limit(1).get();return o?
|
|
249
|
+
`).map(u=>({date:u.date,agentId:u.agent_id,unavailableTaskCount:u.unavailable_task_count,inputTokens:u.input_tokens,outputTokens:u.output_tokens,cachedInputTokens:u.cached_input_tokens,costUsd:u.cost_usd,totalTokens:u.input_tokens+u.output_tokens}))}catch(s){throw new f("DB_ERROR","Failed to get agent usage trend",s)}finally{o.close();}}findTaskForStop(e,n){if(!this.dbExists())return;let r=this.openHandle(false);try{let o=r.db.select().from(i).where(drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.workspace_id,n))).limit(1).get();return o?Ae(o):void 0}catch(o){throw new f("DB_ERROR","Failed to find task for stop",o)}finally{r.close();}}findLatestTaskByMetadata(e){if(!this.dbExists())return null;let n=this.openHandle(false);try{return n.db.select({id:i.id,thread_id:i.thread_id,status:i.status,result:i.result,error:i.error,started_at:i.started_at,completed_at:i.completed_at,metadata:i.metadata}).from(i).where(drizzleOrm.and(drizzleOrm.eq(i.agent_id,e.agentId),drizzleOrm.eq(i.workspace_id,e.workspaceId),drizzleOrm.sql`${i.metadata} IS NOT NULL AND json_valid(${i.metadata}) AND json_extract(${i.metadata}, '$.' || ${e.metaKey}) = ${e.metaValue}`)).orderBy(drizzleOrm.desc(i.started_at)).limit(1).get()??null}catch(r){throw new f("DB_ERROR","Failed to find latest task by metadata",r)}finally{n.close();}}markTaskFailed(e,n,r,o="failed",s){if(!this.dbExists())return;let a=this.openHandle(true);try{let d=new Date().toISOString(),u=r?drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.status,"running"),drizzleOrm.eq(i.workspace_id,r)):drizzleOrm.and(drizzleOrm.eq(i.id,e),drizzleOrm.eq(i.status,"running")),c=a.db.select({metadata:i.metadata}).from(i).where(u).limit(1).get();if(!c)return;let l={status:o,error:n,completed_at:d};if(s){let p=de(c.metadata);p.terminalReason=s,l.metadata=JSON.stringify(p);}a.db.update(i).set(l).where(u).run();}catch(d){throw d instanceof f?d:new f("DB_ERROR","Failed to mark task failed",d)}finally{a.close();}}findTasksByPromptHint(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let a of r){if(!fs$1.existsSync(a))continue;let d=j(a);try{let u=n?drizzleOrm.and(drizzleOrm.like(i.prompt,`%${e}%`),drizzleOrm.eq(i.workspace_id,n)):drizzleOrm.like(i.prompt,`%${e}%`),c=d.db.select().from(i).where(u).orderBy(drizzleOrm.asc(i.started_at)).all();for(let l of c)o.has(l.id)||(o.add(l.id),s.push(Ae(l)));}catch(u){throw new f("DB_ERROR","Failed to find tasks by prompt hint",u)}finally{d.close();}}return s}getProviderUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=Gi(),a=cn(i.status),d=Yn(i.metadata),u=drizzleOrm.sql`
|
|
250
250
|
COALESCE(${i.input_tokens}, 0)
|
|
251
251
|
+ CASE
|
|
252
252
|
WHEN ${i.started_at} >= ${ze}
|
|
@@ -273,7 +273,7 @@ ${r.join(`
|
|
|
273
273
|
${c}
|
|
274
274
|
GROUP BY ${s}
|
|
275
275
|
ORDER BY (COALESCE(SUM(${u}), 0) + COALESCE(SUM(${i.output_tokens}), 0)) DESC
|
|
276
|
-
`).map(p=>({provider:p.provider,totalTasks:p.total_tasks,unavailableTaskCount:p.unavailable_task_count,inputTokens:p.input_tokens,outputTokens:p.output_tokens,cachedInputTokens:p.cached_input_tokens,costUsd:p.cost_usd,totalTokens:p.input_tokens+p.output_tokens,activeDurationMs:p.active_duration_ms??0,lastActiveAt:p.last_active_at??null}))}catch(s){throw new f("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=
|
|
276
|
+
`).map(p=>({provider:p.provider,totalTasks:p.total_tasks,unavailableTaskCount:p.unavailable_task_count,inputTokens:p.input_tokens,outputTokens:p.output_tokens,cachedInputTokens:p.cached_input_tokens,costUsd:p.cost_usd,totalTokens:p.input_tokens+p.output_tokens,activeDurationMs:p.active_duration_ms??0,lastActiveAt:p.last_active_at??null}))}catch(s){throw new f("DB_ERROR","Failed to get provider usage",s)}finally{o.close();}}getModelUsage(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=Gi(),a=cn(i.status),d=Yn(i.metadata),u=drizzleOrm.sql`
|
|
277
277
|
COALESCE(${i.input_tokens}, 0)
|
|
278
278
|
+ CASE
|
|
279
279
|
WHEN ${i.started_at} >= ${ze}
|
|
@@ -300,7 +300,7 @@ ${r.join(`
|
|
|
300
300
|
FROM ${i}
|
|
301
301
|
${c}
|
|
302
302
|
GROUP BY ${i.model}, ${s}
|
|
303
|
-
`),p=new Map;for(let g of l){let m=
|
|
303
|
+
`),p=new Map;for(let g of l){let m=br(g.model??""),R=JSON.stringify([g.provider,m]),w=p.get(R);w?(w.totalTasks+=g.total_tasks,w.unavailableTaskCount=(w.unavailableTaskCount??0)+g.unavailable_task_count,w.inputTokens+=g.input_tokens,w.outputTokens+=g.output_tokens,w.cachedInputTokens+=g.cached_input_tokens,w.costUsd+=g.cost_usd,w.totalTokens+=g.input_tokens+g.output_tokens,w.activeDurationMs+=g.active_duration_ms??0,g.last_active_at&&(!w.lastActiveAt||g.last_active_at>w.lastActiveAt)&&(w.lastActiveAt=g.last_active_at)):p.set(R,{model:m,provider:g.provider,totalTasks:g.total_tasks,unavailableTaskCount:g.unavailable_task_count,inputTokens:g.input_tokens,outputTokens:g.output_tokens,cachedInputTokens:g.cached_input_tokens,costUsd:g.cost_usd,totalTokens:g.input_tokens+g.output_tokens,activeDurationMs:g.active_duration_ms??0,lastActiveAt:g.last_active_at??null});}return Array.from(p.values()).sort((g,m)=>m.costUsd-g.costUsd)}catch(s){throw new f("DB_ERROR","Failed to get model usage",s)}finally{o.close();}}getTasksForReport(e,n,r){if(!this.dbExists())return [];let o=this.openHandle(false);try{let s=r?drizzleOrm.sql`WHERE ${i.started_at} >= ${e} AND ${i.started_at} < ${n} AND ${i.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${i.started_at} >= ${e} AND ${i.started_at} < ${n}`;return o.db.all(drizzleOrm.sql`
|
|
304
304
|
SELECT
|
|
305
305
|
${i.thread_id} AS thread_id,
|
|
306
306
|
${i.agent_id} AS agent_id,
|
|
@@ -323,7 +323,7 @@ ${r.join(`
|
|
|
323
323
|
THEN COALESCE(${i.cached_input_tokens}, 0)
|
|
324
324
|
ELSE 0
|
|
325
325
|
END
|
|
326
|
-
`,a=
|
|
326
|
+
`,a=cn(i.status),d=r?drizzleOrm.sql`WHERE ${a} AND ${i.started_at} >= ${e} AND ${i.started_at} < ${n} AND ${i.workspace_id} = ${r}`:drizzleOrm.sql`WHERE ${a} AND ${i.started_at} >= ${e} AND ${i.started_at} < ${n}`,u=o.db.all(drizzleOrm.sql`
|
|
327
327
|
SELECT
|
|
328
328
|
${i.caller_agent_id} AS caller_agent_id,
|
|
329
329
|
${i.agent_id} AS agent_id,
|
|
@@ -334,19 +334,19 @@ ${r.join(`
|
|
|
334
334
|
${d}
|
|
335
335
|
GROUP BY ${i.caller_agent_id}, ${i.agent_id}
|
|
336
336
|
ORDER BY task_count DESC, ${i.caller_agent_id} ASC, ${i.agent_id} ASC
|
|
337
|
-
LIMIT ${
|
|
338
|
-
`),c=u.length>
|
|
337
|
+
LIMIT ${po+1}
|
|
338
|
+
`),c=u.length>po;return {edges:u.slice(0,po).map(p=>({callerAgentId:p.caller_agent_id??null,agentId:p.agent_id,taskCount:p.task_count,totalTokens:p.input_tokens+p.output_tokens,outputTokens:p.output_tokens})),truncated:c}}catch(s){throw new f("DB_ERROR","Failed to get delegation matrix",s)}finally{o.close();}}findTaskEvidence(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=[];e.workspaceId&&r.push(drizzleOrm.eq(i.workspace_id,e.workspaceId)),e.agents&&e.agents.length>0&&r.push(drizzleOrm.inArray(i.agent_id,e.agents)),e.statuses&&e.statuses.length>0&&r.push(drizzleOrm.inArray(i.status,e.statuses)),e.from&&r.push(drizzleOrm.gte(i.started_at,e.from)),e.to&&r.push(drizzleOrm.lt(i.started_at,e.to));let o=r.length>0?drizzleOrm.and(...r):void 0,s=(e.order??"DESC")==="ASC"?drizzleOrm.asc(i.started_at):drizzleOrm.desc(i.started_at),a={id:i.id,agent_id:i.agent_id,status:i.status,prompt:i.prompt,started_at:i.started_at,completed_at:i.completed_at,thread_id:i.thread_id,error:i.error,metadata:i.metadata};return (e.limit?n.db.select(a).from(i).where(o).orderBy(s).limit(e.limit).all():n.db.select(a).from(i).where(o).orderBy(s).all()).map(({error:u,metadata:c,...l})=>({...l,status:ft({status:l.status,error:u,metadata:c})}))}catch(r){throw new f("DB_ERROR","Failed to find task evidence",r)}finally{n.close();}}findThreadChains(e){if(!this.dbExists())return [];let n=this.openHandle(false);try{let r=e.maxThreads??8,o=e.maxTurnsPerThread??4,s=[drizzleOrm.isNotNull(i.thread_id),drizzleOrm.isNull(i.parent_task_id),drizzleOrm.isNull(i.caller_agent_id),drizzleOrm.or(drizzleOrm.isNull(i.platform),drizzleOrm.ne(i.platform,"workflow")),drizzleOrm.or(drizzleOrm.isNull(i.metadata),drizzleOrm.and(drizzleOrm.notLike(i.metadata,'%"kind":"workflow_card"%'),drizzleOrm.notLike(i.metadata,'%"kind":"workflow_ui_instance"%'))),drizzleOrm.or(drizzleOrm.isNull(i.metadata),drizzleOrm.notLike(i.metadata,'%"retriedFromTaskId"%'))];e.workspaceId&&s.push(drizzleOrm.eq(i.workspace_id,e.workspaceId)),e.from&&s.push(drizzleOrm.gte(i.started_at,e.from)),e.to&&s.push(drizzleOrm.lt(i.started_at,e.to));let a=n.db.select({id:i.id,agent_id:i.agent_id,status:i.status,prompt:i.prompt,started_at:i.started_at,completed_at:i.completed_at,thread_id:i.thread_id}).from(i).where(drizzleOrm.and(...s)).orderBy(drizzleOrm.asc(i.started_at),drizzleOrm.asc(i.id)).all(),d=new Map;for(let c of a){if(!c.thread_id)continue;let l={id:c.id,agentId:c.agent_id,status:c.status,prompt:c.prompt,startedAt:c.started_at,completedAt:c.completed_at},p=d.get(c.thread_id);p?p.push(l):d.set(c.thread_id,[l]);}let u=[];for(let[c,l]of d){let p=l.filter(g=>g.agentId===e.targetAgentId).length;p<2||u.push({threadId:c,targetAgentTurnCount:p,turns:l});}return u.sort((c,l)=>{let p=c.turns[c.turns.length-1].startedAt,g=l.turns[l.turns.length-1].startedAt;return p<g?1:p>g?-1:0}),u.slice(0,r).map(c=>({threadId:c.threadId,targetAgentTurnCount:c.targetAgentTurnCount,turns:c.turns.slice(-o)}))}catch(r){throw new f("DB_ERROR","Failed to find thread chains",r)}finally{n.close();}}};});h();h();h();var Xe=class{detach(e){}};h();function xo(t){let e=n=>String(n).padStart(2,"0");return `${t.getFullYear()}${e(t.getMonth()+1)}${e(t.getDate())}T${e(t.getHours())}${e(t.getMinutes())}${e(t.getSeconds())}`}function cr(t){let e=t.toISOString();return `${e.slice(0,10)} ${e.slice(11,19)} UTC`}var lr=class extends Xe{name="file-logger";unsubs=[];logFiles=new Map;logsDir;version;constructor(e){super(),this.logsDir=Te.join(e?.workspaceRoot??process.cwd(),".crewx","logs"),this.version=e?.version??"unknown";}attach(e){this.unsubs.push(e.on("task:start",n=>{try{fs$1.existsSync(this.logsDir)||fs$1.mkdirSync(this.logsDir,{recursive:!0});let r=xo(n.timestamp),o=Te.join(this.logsDir,`${r}_${n.traceId}.log`);this.logFiles.set(n.traceId,o);let s=`=== TASK LOG: ${n.traceId} ===
|
|
339
339
|
CrewX Version: ${this.version}
|
|
340
340
|
Mode: ${n.mode}
|
|
341
341
|
Agent: ${n.agentRef}
|
|
342
|
-
Started: ${
|
|
342
|
+
Started: ${cr(n.timestamp)}
|
|
343
343
|
Message: ${n.message}
|
|
344
344
|
|
|
345
345
|
`;fs$1.writeFileSync(o,s,{encoding:"utf8",mode:384});}catch{}}),e.on("task:output",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let o=new Date().toISOString();fs$1.appendFileSync(r,`[${o}] STDOUT: ${n.output}
|
|
346
|
-
`,"utf8");}catch{}}),e.on("task:end",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let o=
|
|
346
|
+
`,"utf8");}catch{}}),e.on("task:end",n=>{try{let r=this.logFiles.get(n.traceId);if(!r)return;let o=cr(new Date),s=n.error?`failed: ${n.error.message}`:"completed successfully",a=`[${o}] INFO: Task ${s} in ${n.durationMs}ms
|
|
347
347
|
[${o}] INFO: Process closed with exit code: ${n.error?1:0}
|
|
348
|
-
`;fs$1.appendFileSync(r,a,"utf8"),this.logFiles.delete(n.traceId);}catch{}}));}detach(e){this.unsubs.forEach(n=>n()),this.unsubs=[],this.logFiles.clear();}};h();h();function
|
|
349
|
-
`).filter(r=>r.trim());return n.length===0?false:n.every(r=>dc(r,e))}function he(t){return typeof t=="object"&&t!==null}function zi(t,e){if(e==="assistant"||e==="user"){let n=t.message;return he(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||he(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?he(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function uc(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:zi(t,e)}function cc(t,e){if(e==="item.updated"||e.startsWith("thread.")||e.startsWith("turn."))return true;if(e==="item.started"||e==="item.completed"){let n=t.item;return he(n)&&typeof n.type=="string"}return false}function lc(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||he(t.part):e==="text"||e==="tool_use"?he(t.part):e==="result"?typeof t.result=="string":false}function pc(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||he(t.part)||e==="result"&&typeof t.result=="string")}function fc(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?he(t.data):e==="result"?typeof t.result=="string":false}function gc(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 hc(t,e){return e==="available_commands"?he(t.tools)||he(t.commands):e==="usage"?he(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||he(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var Vi={claude:zi,codex:cc,opencode:lc,copilot:fc,gemini:gc},mc={...Vi,claude:uc,opencode:pc,grok:hc,antigravity:()=>false};zr();on();to();Nn();var kc=200,Tc=200;function wc(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 yc(t){let e=t instanceof f?t.code:void 0,n=t instanceof f?t.cause:t,r=wc(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function Ji(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function Ec(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Xi(t){if(!t)return {};try{let e=JSON.parse(t);return Ec(e)?e:{}}catch{return {}}}function Yn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var Rc=new Set(["workflow","mcp"]),po=class extends Xe{name="sqlite-tracing";unsubs=[];dbPath;version;runnerIdentity;taskRepo;heartbeatTaskIds=new Set;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||process.env.CREWX_TRACES_DB;this.dbPath=e?.dbRoot!==void 0?ke.join(e.dbRoot,".crewx","crewx.db"):n??ke.join(No.homedir(),".crewx","crewx.db"),this.version=e?.version??"unknown";let r=e?.runnerIdentity;this.runnerIdentity={detachedRunner:r?.detachedRunner===true,assignedTaskId:r?.detachedRunner===true&&r.assignedTaskId?.trim()||void 0};}attach(e){let n=new ln({dbPath:this.dbPath});n.resolveDbPath(),this.taskRepo=n;let r=process.cwd(),s=fs$1.existsSync(ke.join(r,"crewx.yaml"))||fs$1.existsSync(ke.join(r,"crewx.yml"))?bo(r):null,a=process.argv.join(" ");this.unsubs.push(e.on("task:start",d=>{try{let u=d.callerAgentId??null,c=d.parentTaskId??null,l=d.rootTraceId??d.traceId,{detachedRunner:p,assignedTaskId:g}=this.runnerIdentity,m=g??d.traceId,R=Yn(d.metadata?.runEpoch),w=p?n.getTask(m):void 0,T=d.pid??null,N={...d.metadata??{provider:d.provider??"cli/claude"},ownership:p?"runner":"caller",...p&&T!==null?{providerPid:T}:{}},P=JSON.stringify(N);if(p&&w?.status==="running"&&w.pid!==null&&R===0){this.ignoredDetachedTaskIds.add(m);return}n.startTask({id:m,agentId:d.agentRef.replace(/^@/,""),prompt:d.message,mode:d.mode,status:"running",pid:p?process.pid:T,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,command:a,codingAgentCommand:d.codingAgentCommand??null,workspaceId:d.workspaceId??s,projectId:d.projectId??null,callerAgentId:u,parentTaskId:c,traceId:l,metadata:P,threadId:d.threadId??null}),n.updateTaskOwnership({id:m,runEpoch:R,ownership:p?"runner":"caller",...p?{providerPid:T}:{}}),Rc.has(d.platform??"cli")||vi(n,{taskId:m,runEpoch:R,onStopRequested:x=>this.handleStopRequested(n,x)})&&this.heartbeatTaskIds.add(m);}catch{}}),e.on("task:output",d=>{try{let u=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(u))return;this.enqueueLog(u,{timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output});}catch(u){let c={timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output};this.recordAppendFailure(u,[c],Ji(c));}}),e.on("task:end",d=>{try{let u=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.delete(u))return;let c=typeof d.metadata?.runEpoch=="number"?d.metadata.runEpoch:null;rn(u,c)&&this.heartbeatTaskIds.delete(u),this.flushTaskLogs(u);let p=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,g=d.result??null,m=!1;if(d.error&&(!g||g.trim()==="")){let R=this.recoverPartialResult(u,d,c);R&&(g=R,m=!0);}n.finishTask({id:u,status:d.error?"failed":"success",result:g,error:p,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:c,partialResultRecovered:m});}catch{}}));}detach(e){try{this.flushAllTaskLogs();}finally{this.clearAllTimers();for(let n of this.heartbeatTaskIds)rn(n);this.heartbeatTaskIds.clear(),this.unsubs.forEach(n=>n()),this.unsubs=[],this.queues.clear(),this.ignoredDetachedTaskIds.clear(),this.taskRepo=void 0;}}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}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+=Ji(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>=kc){this.flushTaskLogs(e);return}if(!r.timer){let o=setTimeout(()=>{let s=this.queues.get(e);!s||s.timer!==o||(s.timer=void 0,this.flushTaskLogs(e));},Tc);r.timer=o;}}recoverPartialResult(e,n,r){try{let o=this.taskRepo;if(!o)return;let s=o.getTask(e);if(!s||s.status!=="running"||Yn(s.run_epoch)!==Yn(r))return;let a=Xi(s.metadata),d=typeof a.provider=="string"?a.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!d)return;let u=jn({taskLogRepository:o,taskId:e,provider:d,model:s.model});if(!u?.adapter.extractPartialText)return;let c=u.adapter.extractPartialText(u.stdout);return !c||!c.trim()||Jn(c,d)?void 0:c}catch{return}}async handleStopRequested(e,n){let r=n.id;if(!r)return;let o=Yn(n.run_epoch),s=Xi(n.metadata??null),a=s.ownership==="runner"?"runner":"caller";if(a==="runner"&&n.pid!==process.pid){console.warn("[crewx] ignored stop request for task owned by another runner",{taskId:r});return}let d=typeof s.providerPid=="number"&&Number.isSafeInteger(s.providerPid)&&s.providerPid>0?s.providerPid:void 0,u=a==="runner"?d:typeof n.pid=="number"&&n.pid>0?n.pid:void 0;if(u!==void 0){let c;try{c=await Gt(u,{signal:jt});}catch(l){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:l instanceof Error?l.name:typeof l});return}if(c.status==="failed"){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:c.error??"process termination failed"});return}}try{let c=e.finalizeTaskStop({id:r,runEpoch:o,method:Vn(n.stop_requested_at)}),l=e.getTask(r);(c||l?.status!=="running")&&rn(r,o)&&this.heartbeatTaskIds.delete(r);}catch(c){console.warn("[crewx] cooperative task stop finalization failed",{taskId:r,cause:c instanceof Error?c.name:typeof c});}}flushTaskLogs(e){let n=this.queues.get(e);if(!n||n.entries.length===0){n?.timer&&clearTimeout(n.timer),this.queues.delete(e);return}n.timer&&(clearTimeout(n.timer),n.timer=void 0);let r=n.entries,o=n.bytes;n.entries=[],n.bytes=0,this.metrics.flushCount+=1;try{this.taskRepo?.appendLogs(e,r),this.metrics.flushedEntries+=r.length;}catch(a){this.recordAppendFailure(a,r,o);}let s=this.queues.get(e);s&&s.entries.length===0&&(s.timer&&clearTimeout(s.timer),this.queues.delete(e));}flushAllTaskLogs(){for(let e of [...this.queues.keys()])this.flushTaskLogs(e);}clearAllTimers(){for(let e of this.queues.values())e.timer&&(clearTimeout(e.timer),e.timer=void 0);}recordAppendFailure(e,n,r){let o=yc(e);this.metrics.appendFailureCount+=1,this.metrics.appendFailureEntries+=n.length,this.metrics.appendFailureBytes+=r,this.metrics.appendFailureByCode[o.code]=(this.metrics.appendFailureByCode[o.code]??0)+1,this.metrics.appendFailureByCause[o.cause]=(this.metrics.appendFailureByCause[o.cause]??0)+1,console.warn("[crewx] sqlite tracing append failed",{code:o.code,cause:o.cause,pendingEntries:n.length,pendingBytes:r});}};h();h();h();st();mt();kt();rt();yt();Gn();function Qn(t){return {...t,status:ft(t)}}function bc({metadata:t,...e}){return {...e,status:ft({...e,metadata:t})}}var Nt=class extends f{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function pn(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function xc(t){let n=pn(t).threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {priority:null,state:null};let r=n;return {priority:typeof r.priority=="string"?r.priority:null,state:typeof r.state=="string"?r.state:null}}var Zn=class extends pe{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=ke.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=ke.dirname(n);fs$1.existsSync(o)||fs$1.mkdirSync(o,{recursive:true});}else if(!fs$1.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=j(n);if(e)try{xe(r.db,n);}catch(o){throw r.close(),o}return r}validateWorkspaceId(e,n){return e.db.select({id:Tt.id}).from(Tt).where(drizzleOrm.eq(Tt.id,n)).limit(1).get()?n:null}topLevelTaskPredicateSql(e="child"){return drizzleOrm.sql.raw(`NOT EXISTS (
|
|
348
|
+
`;fs$1.appendFileSync(r,a,"utf8"),this.logFiles.delete(n.traceId);}catch{}}));}detach(e){this.unsubs.forEach(n=>n()),this.unsubs=[],this.logFiles.clear();}};h();h();function Ia(t){let e=Te__namespace.resolve(t);return process.platform==="win32"&&(e=e.replace(/\\/g,"/"),e=e.replace(/^([A-Z]):/,(n,r)=>`${r.toLowerCase()}:`)),e.length>1&&!/^[a-zA-Z]:\/$/.test(e)&&(e=e.replace(/\/+$/,"")),e}function Do(t){let e=Ia(t);return crypto.createHash("sha256").update(e).digest("hex")}rt();co();h();function Tc(t,e){let n=t.trimStart();if(!n.startsWith("{"))return false;let r;try{r=JSON.parse(n);}catch{return false}let o=r.type;if(typeof o!="string")return false;let s=e?vc[e]:void 0;return s?s(r,o):Object.values(Qi).some(a=>a(r,o))}function Zn(t,e){let n=t.split(`
|
|
349
|
+
`).filter(r=>r.trim());return n.length===0?false:n.every(r=>Tc(r,e))}function _e(t){return typeof t=="object"&&t!==null}function Yi(t,e){if(e==="assistant"||e==="user"){let n=t.message;return _e(n)&&Array.isArray(n.content)}return e==="system"?typeof t.subtype=="string"||typeof t.session_id=="string":e==="result"?typeof t.result=="string"||_e(t.usage)||typeof t.total_cost_usd=="number"||typeof t.is_error=="boolean":e==="rate_limit_event"?_e(t.rate_limit_info):e==="tool_progress"?t.heartbeat===true&&typeof t.tool_use_id=="string":false}function wc(t,e){return typeof t.session_id=="string"||typeof t.uuid=="string"?true:Yi(t,e)}function yc(t,e){if(e==="item.updated"||e.startsWith("thread.")||e.startsWith("turn."))return true;if(e==="item.started"||e==="item.completed"){let n=t.item;return _e(n)&&typeof n.type=="string"}return false}function Ec(t,e){return e==="step_start"||e==="step_finish"?typeof t.stepID=="string"||typeof t.sessionID=="string"||_e(t.part):e==="text"||e==="tool_use"?_e(t.part):e==="result"?typeof t.result=="string":false}function Rc(t,e){return !!(typeof t.stepID=="string"||typeof t.sessionID=="string"||_e(t.part)||e==="result"&&typeof t.result=="string")}function Sc(t,e){return e.startsWith("assistant.")||e.startsWith("tool.execution")||e==="user.message"?_e(t.data):e==="result"?typeof t.result=="string":false}function Ic(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 Ac(t,e){return e==="available_commands"?_e(t.tools)||_e(t.commands):e==="usage"?_e(t.usage):e==="end"?typeof t.sessionId=="string"||typeof t.stopReason=="string"||_e(t.usage):e==="tool_call_update"?typeof t.toolCallId=="string"||typeof t.status=="string":false}var Qi={claude:Yi,codex:yc,opencode:Ec,copilot:Sc,gemini:Ic},vc={...Qi,claude:wc,opencode:Rc,grok:Ac,antigravity:()=>false};Kr();on();uo();Ln();var bc=200,xc=200;function Cc(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 Nc(t){let e=t instanceof f?t.code:void 0,n=t instanceof f?t.cause:t,r=Cc(n);return {code:e??r??"DB_ERROR",cause:r??(n instanceof Error?n.name:e??typeof n)}}function ea(t){return Buffer.byteLength(JSON.stringify(t),"utf8")}function Pc(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ta(t){if(!t)return {};try{let e=JSON.parse(t);return Pc(e)?e:{}}catch{return {}}}function fn(t){return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):0}var Dc=new Set(["workflow","mcp"]),ko=class extends Xe{name="sqlite-tracing";unsubs=[];dbPath;version;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||process.env.CREWX_TRACES_DB;this.dbPath=e?.dbRoot!==void 0?Te.join(e.dbRoot,".crewx","crewx.db"):n??Te.join($o.homedir(),".crewx","crewx.db"),this.version=e?.version??"unknown";let r=e?.runnerIdentity;this.runnerIdentity={detachedRunner:r?.detachedRunner===true,assignedTaskId:r?.detachedRunner===true&&r.assignedTaskId?.trim()||void 0};}attach(e){let n=new pn({dbPath:this.dbPath});n.resolveDbPath(),this.taskRepo=n;let r=process.cwd(),s=fs$1.existsSync(Te.join(r,"crewx.yaml"))||fs$1.existsSync(Te.join(r,"crewx.yml"))?Do(r):null,a=process.argv.join(" ");this.unsubs.push(e.on("task:start",d=>{try{let u=d.callerAgentId??null,c=d.parentTaskId??null,l=d.rootTraceId??d.traceId,{detachedRunner:p,assignedTaskId:g}=this.runnerIdentity,m=g??d.traceId,R=fn(d.metadata?.runEpoch),w=p?"runner":"caller",T=d.workspaceId??s,N=p?n.getTask(m):void 0,x=d.pid??null,$={...d.metadata??{provider:d.provider??"cli/claude"},ownership:w,...p&&x!==null?{providerPid:x}:{}},y=JSON.stringify($);if(p&&N?.status==="running"&&N.pid!==null&&R===0){this.ignoredDetachedTaskIds.add(m);return}n.startTask({id:m,agentId:d.agentRef.replace(/^@/,""),prompt:d.message,mode:d.mode,status:"running",pid:p?process.pid:x,startedAt:d.timestamp.toISOString(),crewxVersion:this.version,platform:d.platform??"cli",model:d.model??null,renderedPrompt:d.renderedPrompt??null,command:a,codingAgentCommand:d.codingAgentCommand??null,workspaceId:T,projectId:d.projectId??null,callerAgentId:u,parentTaskId:c,traceId:l,metadata:y,threadId:d.threadId??null}),n.updateTaskOwnership({id:m,runEpoch:R,ownership:w,...p?{providerPid:x}:{}})&&this.recordOwnedTaskRun({taskId:m,runEpoch:R,workspaceId:T,ownership:w}),Dc.has(d.platform??"cli")||Pi(n,{taskId:m,runEpoch:R,onStopRequested:ue=>this.handleStopRequested(n,ue)})&&this.heartbeatTaskIds.add(m);}catch{}}),e.on("task:output",d=>{try{let u=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.has(u))return;this.enqueueLog(u,{timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output});}catch(u){let c={timestamp:d.timestamp.toISOString(),level:d.level??"stdout",message:d.output};this.recordAppendFailure(u,[c],ea(c));}}),e.on("task:end",d=>{try{let u=this.resolveTaskId(d.traceId);if(this.ignoredDetachedTaskIds.delete(u))return;let c=typeof d.metadata?.runEpoch=="number"?d.metadata.runEpoch:null;this.removeOwnedTaskRun(u,fn(c)),rn(u,c)&&this.heartbeatTaskIds.delete(u),this.flushTaskLogs(u);let p=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,g=d.result??null,m=!1;if(d.error&&(!g||g.trim()==="")){let R=this.recoverPartialResult(u,d,c);R&&(g=R,m=!0);}n.finishTask({id:u,status:d.error?"failed":"success",result:g,error:p,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:c,partialResultRecovered:m});}catch{}}));}detach(e){try{this.flushAllTaskLogs();}finally{this.clearAllTimers();for(let n of this.heartbeatTaskIds)rn(n);this.heartbeatTaskIds.clear(),this.ownedTaskRuns.clear(),this.unsubs.forEach(n=>n()),this.unsubs=[],this.queues.clear(),this.ignoredDetachedTaskIds.clear(),this.taskRepo=void 0;}}listOwnedRunningTasks(){return Array.from(this.ownedTaskRuns.values(),e=>({...e}))}async stopOwnedRunningTasksForHostShutdown(){let e=this.taskRepo;if(!e)return;let n=this.listOwnedRunningTasks();for(let r of n)try{let o=await qi(e,{taskId:r.taskId,expectedRunEpoch:r.runEpoch,workspaceId:r.workspaceId});(o.status==="failed"||o.status==="ownership_unverified")&&console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,status:o.status,...o.error?{error:o.error}:{}});}catch(o){console.warn("[crewx] host-shutdown task stop failed",{taskId:r.taskId,runEpoch:r.runEpoch,cause:o instanceof Error?o.name:typeof o});}}getMetrics(){let e=0,n=0;for(let r of this.queues.values())e+=r.entries.length,n+=r.bytes;return {...this.metrics,appendFailureByCode:{...this.metrics.appendFailureByCode},appendFailureByCause:{...this.metrics.appendFailureByCause},pendingQueueEntries:e,pendingQueueBytes:n}}resolveTaskId(e){return this.runnerIdentity.detachedRunner?this.runnerIdentity.assignedTaskId??e:e}recordOwnedTaskRun(e){let n=this.ownedTaskRuns.get(e.taskId);n&&n.runEpoch>e.runEpoch||this.ownedTaskRuns.set(e.taskId,{...e});}removeOwnedTaskRun(e,n){let r=this.ownedTaskRuns.get(e);!r||r.runEpoch!==n||this.ownedTaskRuns.delete(e);}enqueueLog(e,n){let r=this.queues.get(e);if(r||(r={entries:[],bytes:0},this.queues.set(e,r)),r.entries.push(n),r.bytes+=ea(n),this.metrics.maxQueueEntries=Math.max(this.metrics.maxQueueEntries,r.entries.length),this.metrics.maxQueueBytes=Math.max(this.metrics.maxQueueBytes,r.bytes),r.entries.length>=bc){this.flushTaskLogs(e);return}if(!r.timer){let o=setTimeout(()=>{let s=this.queues.get(e);!s||s.timer!==o||(s.timer=void 0,this.flushTaskLogs(e));},xc);r.timer=o;}}recoverPartialResult(e,n,r){try{let o=this.taskRepo;if(!o)return;let s=o.getTask(e);if(!s||s.status!=="running"||fn(s.run_epoch)!==fn(r))return;let a=ta(s.metadata),d=typeof a.provider=="string"?a.provider:typeof n.metadata?.provider=="string"?n.metadata.provider:void 0;if(!d)return;let u=zn({taskLogRepository:o,taskId:e,provider:d,model:s.model});if(!u?.adapter.extractPartialText)return;let c=u.adapter.extractPartialText(u.stdout);return !c||!c.trim()||Zn(c,d)?void 0:c}catch{return}}async handleStopRequested(e,n){let r=n.id;if(!r)return;let o=fn(n.run_epoch),s=ta(n.metadata??null),a=s.ownership==="runner"?"runner":"caller";if(a==="runner"&&n.pid!==process.pid){console.warn("[crewx] ignored stop request for task owned by another runner",{taskId:r});return}let d=typeof s.providerPid=="number"&&Number.isSafeInteger(s.providerPid)&&s.providerPid>0?s.providerPid:void 0,u=a==="runner"?d:typeof n.pid=="number"&&n.pid>0?n.pid:void 0;if(u!==void 0){let c;try{c=await St(u,{signal:Rt});}catch(l){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:l instanceof Error?l.name:typeof l});return}if(c.status==="failed"){console.warn("[crewx] cooperative task stop failed",{taskId:r,cause:c.error??"process termination failed"});return}}try{let c=e.finalizeTaskStop({id:r,runEpoch:o,method:Xn(n.stop_requested_at)}),l=e.getTask(r);(c||l?.status!=="running")&&rn(r,o)&&this.heartbeatTaskIds.delete(r);}catch(c){console.warn("[crewx] cooperative task stop finalization failed",{taskId:r,cause:c instanceof Error?c.name:typeof c});}}flushTaskLogs(e){let n=this.queues.get(e);if(!n||n.entries.length===0){n?.timer&&clearTimeout(n.timer),this.queues.delete(e);return}n.timer&&(clearTimeout(n.timer),n.timer=void 0);let r=n.entries,o=n.bytes;n.entries=[],n.bytes=0,this.metrics.flushCount+=1;try{this.taskRepo?.appendLogs(e,r),this.metrics.flushedEntries+=r.length;}catch(a){this.recordAppendFailure(a,r,o);}let s=this.queues.get(e);s&&s.entries.length===0&&(s.timer&&clearTimeout(s.timer),this.queues.delete(e));}flushAllTaskLogs(){for(let e of [...this.queues.keys()])this.flushTaskLogs(e);}clearAllTimers(){for(let e of this.queues.values())e.timer&&(clearTimeout(e.timer),e.timer=void 0);}recordAppendFailure(e,n,r){let o=Nc(e);this.metrics.appendFailureCount+=1,this.metrics.appendFailureEntries+=n.length,this.metrics.appendFailureBytes+=r,this.metrics.appendFailureByCode[o.code]=(this.metrics.appendFailureByCode[o.code]??0)+1,this.metrics.appendFailureByCause[o.cause]=(this.metrics.appendFailureByCause[o.cause]??0)+1,console.warn("[crewx] sqlite tracing append failed",{code:o.code,cause:o.cause,pendingEntries:n.length,pendingBytes:r});}};h();h();h();st();mt();kt();rt();yt();Vn();function tr(t){return {...t,status:ft(t)}}function Uc({metadata:t,...e}){return {...e,status:ft({...e,metadata:t})}}var Dt=class extends f{reason;constructor(e,n=e){super("VALIDATION",n),this.name="ThreadTitleMetadataPatchError",this.reason=e;}};function gn(t){if(!t)return {};try{let e=JSON.parse(t);return !e||typeof e!="object"||Array.isArray(e)?{}:e}catch{return {}}}function qc(t){let n=gn(t).threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {priority:null,state:null};let r=n;return {priority:typeof r.priority=="string"?r.priority:null,state:typeof r.state=="string"?r.state:null}}var nr=class extends ge{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Te.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath?this.dbPath:super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(e){let o=Te.dirname(n);fs$1.existsSync(o)||fs$1.mkdirSync(o,{recursive:true});}else if(!fs$1.existsSync(n))throw new f("NOT_FOUND","Database not found");let r=j(n);if(e)try{xe(r.db,n);}catch(o){throw r.close(),o}return r}validateWorkspaceId(e,n){return e.db.select({id:Tt.id}).from(Tt).where(drizzleOrm.eq(Tt.id,n)).limit(1).get()?n:null}topLevelTaskPredicateSql(e="child"){return drizzleOrm.sql.raw(`NOT EXISTS (
|
|
350
350
|
SELECT 1 FROM tasks parent
|
|
351
351
|
WHERE parent.id = ${e}.parent_task_id
|
|
352
352
|
AND parent.thread_id = ${e}.thread_id
|
|
@@ -384,7 +384,7 @@ Message: ${n.message}
|
|
|
384
384
|
AND ${this.topLevelTaskPredicateSql()}
|
|
385
385
|
${n?drizzleOrm.sql`AND child.workspace_id = ${n}`:drizzleOrm.sql``}
|
|
386
386
|
ORDER BY child.started_at ASC
|
|
387
|
-
`);for(let l of c)s.has(l.id)||(s.add(l.id),a.push(
|
|
387
|
+
`);for(let l of c)s.has(l.id)||(s.add(l.id),a.push(tr(l)));}catch(c){throw new f("DB_ERROR","Failed to find top-level tasks",c)}finally{u.close();}}if(r!==void 0&&o.length>1){let d=new Map;for(let u of a){let c=u.agent_id??"";d.has(c)||d.set(c,[]),d.get(c).push(u);}a=[];for(let u of d.values())u.sort((c,l)=>(l.started_at??"").localeCompare(c.started_at??"")),a.push(...u.slice(0,r));a.sort((u,c)=>(u.started_at??"").localeCompare(c.started_at??""));}return a}findAllTasks(e,n){let r=this.resolveDbPaths(),o=new Set,s=[];for(let a of r){if(!fs$1.existsSync(a))continue;let d=j(a);try{let u=drizzleOrm.eq(i.thread_id,e),c=n?drizzleOrm.and(u,drizzleOrm.eq(i.workspace_id,n)):u,l=d.db.select().from(i).where(c).orderBy(drizzleOrm.asc(i.started_at)).all();for(let p of l)o.has(p.id)||(o.add(p.id),s.push(tr(p)));}catch(u){throw new f("DB_ERROR","Failed to find all tasks for thread",u)}finally{d.close();}}return s}findTaskById(e,n,r){let o=this.resolveDbPaths();for(let s of o){if(!fs$1.existsSync(s))continue;let a=j(s);try{let d=drizzleOrm.and(drizzleOrm.eq(i.id,n),drizzleOrm.eq(i.thread_id,e)),u=r?drizzleOrm.and(d,drizzleOrm.eq(i.workspace_id,r)):d,c=a.db.select().from(i).where(u).limit(1).get();if(!c)continue;let l=a.db.select().from(i).where(drizzleOrm.eq(i.parent_task_id,c.id)).orderBy(drizzleOrm.asc(i.started_at)).all().map(tr);return {task:tr(c),children:l}}catch(d){throw new f("DB_ERROR","Failed to find task by id",d)}finally{a.close();}}}batchFetchTasksQuery(e,n){return drizzleOrm.sql`
|
|
388
388
|
SELECT child.id, child.thread_id, child.agent_id, child.status,
|
|
389
389
|
child.parent_task_id, child.started_at, child.completed_at,
|
|
390
390
|
child.duration_ms, child.input_tokens, child.output_tokens,
|
|
@@ -394,7 +394,7 @@ Message: ${n.message}
|
|
|
394
394
|
AND ${this.topLevelTaskPredicateSql()}
|
|
395
395
|
${n?drizzleOrm.sql`AND child.workspace_id = ${n}`:drizzleOrm.sql``}
|
|
396
396
|
ORDER BY child.started_at ASC
|
|
397
|
-
`}batchFetchTasks(e,n){let r=new Map;if(e.length===0)return r;let o=this.resolveDbPaths();for(let s of o){if(!fs$1.existsSync(s))continue;let a=j(s);try{let d=a.db.all(this.batchFetchTasksQuery(e,n));for(let u of d){let c=u.thread_id;r.has(c)||r.set(c,[]),r.get(c).push(
|
|
397
|
+
`}batchFetchTasks(e,n){let r=new Map;if(e.length===0)return r;let o=this.resolveDbPaths();for(let s of o){if(!fs$1.existsSync(s))continue;let a=j(s);try{let d=a.db.all(this.batchFetchTasksQuery(e,n));for(let u of d){let c=u.thread_id;r.has(c)||r.set(c,[]),r.get(c).push(Uc(u));}}catch(d){throw new f("DB_ERROR","Failed to batch fetch tasks",d)}finally{a.close();}}return r}explainBatchFetchTasksPlan(e,n){let r=this.resolveDbPaths();for(let o of r){if(!fs$1.existsSync(o))continue;let s=j(o);try{return s.db.all(drizzleOrm.sql`EXPLAIN QUERY PLAN ${this.batchFetchTasksQuery(e,n)}`).map(d=>d.detail)}finally{s.close();}}return []}updateThreadTitle(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=drizzleOrm.eq(_.id,e),a=r?drizzleOrm.and(s,drizzleOrm.eq(_.workspace_id,r)):s;if(!o.db.select({id:_.id}).from(_).where(a).limit(1).get())return;o.db.update(_).set({title:n,title_locked:1,updated_at:new Date().toISOString()}).where(drizzleOrm.eq(_.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread title",s)}finally{o.close();}}upsertThread(e,n){let r=this.openHandle(true);try{let o=n.workspaceId?this.validateWorkspaceId(r,n.workspaceId):null,s=new Date().toISOString();if(r.db.select({id:_.id,message_count:_.message_count}).from(_).where(drizzleOrm.eq(_.id,e)).limit(1).get()){let d={updated_at:s};n.title!==void 0&&(d.title=n.title),n.titleLocked!==void 0&&(d.title_locked=n.titleLocked?1:0),r.db.update(_).set(d).where(drizzleOrm.eq(_.id,e)).run();}else r.db.insert(_).values({id:e,platform:n.platform,workspace_id:o,title:n.title??null,title_locked:n.titleLocked?1:0,message_count:0,created_at:s,updated_at:s}).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to upsert thread",o)}finally{r.close();}}ensureThread(e,n,r){let o=this.openHandle(true);try{let s=r?this.validateWorkspaceId(o,r):null,a=o.db.select({id:_.id,platform:_.platform,workspace_id:_.workspace_id}).from(_).where(drizzleOrm.eq(_.id,e)).limit(1).get();if(a){s&&!a.workspace_id&&o.db.update(_).set({workspace_id:s}).where(drizzleOrm.eq(_.id,e)).run();return}let d=new Date().toISOString();o.db.insert(_).values({id:e,platform:n,workspace_id:s,message_count:0,created_at:d,updated_at:d}).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to ensure thread",s)}finally{o.close();}}saveUserMessage(e,n,r){if(!this.dbExists())return {firstMessage:false};let o=this.openHandle(true);try{let s=new Date().toISOString();return {firstMessage:o.db.transaction(d=>{let c=d.select({message_count:_.message_count}).from(_).where(drizzleOrm.eq(_.id,e)).limit(1).get()?.message_count===0;return d.run(drizzleOrm.sql`
|
|
398
398
|
UPDATE threads
|
|
399
399
|
SET first_message = COALESCE(first_message, ${n}),
|
|
400
400
|
title = CASE WHEN title_locked = 0 AND title IS NULL THEN substr(${n}, 1, 60) ELSE title END,
|
|
@@ -402,11 +402,11 @@ Message: ${n.message}
|
|
|
402
402
|
message_count = message_count + 1,
|
|
403
403
|
updated_at = ${s}
|
|
404
404
|
WHERE id = ${e}
|
|
405
|
-
`),c},{behavior:"immediate"})}}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to save user message",s)}finally{o.close();}}saveAssistantMessage(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString();o.db.update(_).set({last_message:n,updated_at:s}).where(drizzleOrm.eq(_.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to save assistant message",s)}finally{o.close();}}updateThread(e,n){if(!this.dbExists())return;let r=this.openHandle(true);try{let o={updated_at:new Date().toISOString()};n.title!==void 0&&(o.title=n.title,o.title_locked=1),n.titleLocked!==void 0&&(o.title_locked=n.titleLocked?1:0),r.db.update(_).set(o).where(drizzleOrm.eq(_.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread",o)}finally{r.close();}}patchThreadTitleMetadata(e,n,r){let o=n;if(!o||typeof o!="object"||Array.isArray(o))return new Nt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(o).some(u=>u!=="priority"&&u!=="state"))return new Nt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch only supports priority and state");let a=o;if(a.priority===void 0&&a.state===void 0)return new Nt("THREAD_TITLE_PATCH_EMPTY","Thread-title metadata patch must change priority or state");for(let u of [a.priority,a.state])if(u!=null&&(typeof u!="string"||u.length===0))return new Nt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let d=this.openHandle(true);try{let u=r?drizzleOrm.and(drizzleOrm.eq(_.id,e),drizzleOrm.eq(_.workspace_id,r)):drizzleOrm.eq(_.id,e);return d.db.transaction(c=>{let l=c.select({metadata:_.metadata}).from(_).where(u).get();if(!l)return null;let p=pn(l.metadata),g=p.threadTitle,m=g&&typeof g=="object"&&!Array.isArray(g)?{...g}:{};a.priority===null?delete m.priority:a.priority!==void 0&&(m.priority=a.priority),a.state===null?delete m.state:a.state!==void 0&&(m.state=a.state),Object.keys(m).length>0?p.threadTitle=m:delete p.threadTitle;let R=Object.keys(p).length>0?JSON.stringify(p):null,w=new Date().toISOString();c.update(_).set({metadata:R,updated_at:w}).where(u).run();let T=c.select({metadata:_.metadata}).from(_).where(u).get();if(!T)throw new f("DB_ERROR","Thread-title metadata update could not be read back");let N=xc(T.metadata);return {threadId:e,priority:N.priority,state:N.state}},{behavior:"immediate"})}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to patch thread-title metadata",u)}finally{d.close();}}togglePin(e,n){let r=this.openHandle(true);try{let o=n?drizzleOrm.and(drizzleOrm.eq(_.id,e),drizzleOrm.eq(_.workspace_id,n)):drizzleOrm.eq(_.id,e);return r.db.transaction(s=>{let a=s.select({pinned:_.pinned,metadata:_.metadata}).from(_).where(o).get();if(!a)return null;let d=a.pinned?0:1,u=pn(a.metadata);if(d){let c=n?drizzleOrm.and(drizzleOrm.eq(_.pinned,1),drizzleOrm.eq(_.workspace_id,n)):drizzleOrm.eq(_.pinned,1),l=s.select({metadata:_.metadata}).from(_).where(c).all(),p=null;for(let g of l){let m=pn(g.metadata);typeof m.pinOrder=="number"&&(p===null||m.pinOrder<p)&&(p=m.pinOrder);}u.pinOrder=p===null?0:p-1;}else delete u.pinOrder;return s.update(_).set({pinned:d,metadata:Object.keys(u).length>0?JSON.stringify(u):null}).where(o).run(),{pinned:!!d}},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to toggle pin",o)}finally{r.close();}}reorderPins(e,n){let r=this.openHandle(true);try{r.db.transaction(o=>{for(let s=0;s<e.length;s++){let a=n?drizzleOrm.and(drizzleOrm.eq(_.id,e[s]),drizzleOrm.eq(_.workspace_id,n)):drizzleOrm.eq(_.id,e[s]),d=o.select({metadata:_.metadata}).from(_).where(a).get();if(!d)continue;let u=pn(d.metadata);u.pinOrder=s+1,o.update(_).set({metadata:JSON.stringify(u)}).where(a).run();}},{behavior:"immediate"});}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to reorder pins",o)}finally{r.close();}}toggleStar(e,n){let r=this.openHandle(true);try{let o=n?drizzleOrm.and(drizzleOrm.eq(_.id,e),drizzleOrm.eq(_.workspace_id,n)):drizzleOrm.eq(_.id,e),s=r.db.select({starred:_.starred}).from(_).where(o).get();if(!s)return null;let a=s.starred?0:1;return r.db.update(_).set({starred:a}).where(o).run(),{starred:!!a}}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to toggle star",o)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,o){let a=this.openHandle(true);try{let d=n?drizzleOrm.and(drizzleOrm.eq(_.id,e),drizzleOrm.eq(_.workspace_id,n)):drizzleOrm.eq(_.id,e);return a.db.transaction(c=>{let l=c.select({metadata:_.metadata}).from(_).where(d).get();if(!l)return null;let p=l.metadata?JSON.parse(l.metadata):{},g=p.overdrive??{},m=o?.defaultTurns??g.defaultTurns??3,R=o?.updatedBy??"ui",w=new Date().toISOString(),T,N,P,$;switch(r){case "enable-count":{let y=o?.turns??m,x=o?.consumeCurrent?Math.max(y-1,0):y;T=x>0?"count":"off",N=x,P=!0,$="count";break}case "enable-latch":{T="latch",N=0,P=!0,$="latch";break}case "disable":{T="off",N=0,P=!1;break}default:{let y=g.state??"off",x=typeof g.remaining=="number"?g.remaining:0;if(y==="count"&&x>0){let A=x-1;A<=0?(T="off",N=0):(T="count",N=A),P=!0,$="count";}else y==="latch"?(T="latch",N=0,P=!0,$="latch"):(T="off",N=0,P=!1);break}}return p.overdrive={state:T,remaining:N,defaultTurns:m,updatedAt:w,updatedBy:R},c.update(_).set({metadata:JSON.stringify(p),updated_at:w}).where(d).run(),{applied:P,appliedMode:$,state:T,remaining:N}},{behavior:"immediate"})}catch(d){throw d instanceof f?d:new f("DB_ERROR","Failed to resolve overdrive",d)}finally{a.close();}}};h();st();mt();kt();rt();h();var fo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Oc(t){let e=crypto.randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let o=e[r];o<248&&(n+=fo[o%62]);}for(;n.length<t;)n+=fo[crypto.randomBytes(1)[0]%62];return n}function fn(t){return `${t}_${Oc(8)}`}function ta(t,e){let{createHash:n}=ht("crypto"),r=n("sha256").update(e).digest(),o=Buffer.alloc(8);for(let a=0;a<32;a++)o[a%8]^=r[a];let s="";for(let a of o)s+=fo[a%62];return `${t}_${s}`}yt();h();var Cc=["urgent","high","medium","low"],Nc=["investigating","in-progress","in-review","on-hold","done"],na="custom:";var Pc=new Set(Cc),Dc=new Set(Nc);function go(t){return typeof t=="string"&&Pc.has(t)}function ho(t){if(typeof t!="string")return false;if(Dc.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(na))return false;let e=t.slice(na.length);return e.length>=1&&e.length<=20}function ra(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 mo(t){let e=ra(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,o={};return go(r.priority)&&(o.priority=r.priority),ho(r.state)&&(o.state=r.state),o}function oa(t,e){let n=ra(t)??{},r={...mo(t)};return e.priority===null?delete r.priority:e.priority!==void 0&&(r.priority=e.priority),e.state===null?delete r.state:e.state!==void 0&&(r.state=e.state),r.priority===void 0&&r.state===void 0?delete n.threadTitle:n.threadTitle=r,Object.keys(n).length===0?null:JSON.stringify(n)}Gn();var Uc="regeneration_replaced";var qc="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var Fc="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",To=class extends f{threadId;highlightId;expectedRevision;currentRevision;constructor(e,n,r,o){super("CONFLICT",`Highlight revision conflict: expected ${r}, current ${o}`),this.name="ThreadHistoryConflictError",this.threadId=e,this.highlightId=n,this.expectedRevision=r,this.currentRevision=o;}},wn=class extends To{},wo=class extends f{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},Bc=new Set(is),jc=new Set(ss),Gc=new Set(as),Wc=new Set(ds),zc=50,ia=100,aa=280,da=40,Vc=new Set(us),er=["queued","running"];function ko(t){return Vc.has(t)}function F(t){throw new f("VALIDATION",t)}function be(t){throw new f("NOT_FOUND",t)}function O(t,e){(typeof t!="string"||t.trim().length===0)&&F(`${e} is required`);}function hn(t={}){let e=t.actor??t,n=e.actorType??"system";return Bc.has(n)||F(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&F("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function Kc(t){O(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&O(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&F("title must not be empty"),t.title.length>120&&F("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!go(t.priority)&&F(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!ho(t.state)&&F(`invalid state: ${String(t.state)}`);}function Jc(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&F("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)&&F(`${n} must be a non-negative integer`);let e=t.limit??zc;return (!Number.isInteger(e)||e<1||e>ia)&&F(`limit must be between 1 and ${ia}`),e}function yo(t){typeof t!="string"&&F("text is required");let e=t.trim();return e.length===0&&F("text must not be empty"),e.length>aa&&F(`text must be at most ${aa} characters`),e}function Je(t,e){return O(t??"",e),t}function Eo(t){Wc.has(t)||F(`invalid highlight kind: ${String(t)}`);}function Xc(t){Gc.has(t)||F(`invalid highlight source: ${String(t)}`);}function Yc(t){O(t.threadId,"threadId"),O(t.workspaceId,"workspaceId");let e=t.source??"manual";Xc(e),Eo(t.kind);let n=yo(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,o=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let l=t.taskId??(r&&o&&r===o?r:void 0),p=Je(l,"taskId");return (r!==p||o!==p)&&F("manual highlights must cover exactly one task"),{source:e,kind:t.kind,text:n,coversFromTaskId:p,coversToTaskId:p,agentId:t.agentId??null,sourceTaskId:null,detectorVersion:null,contentFingerprint:null}}let s=Je(r,"coversFromTaskId"),a=Je(o,"coversToTaskId"),d=t.sourceTaskId??s,u=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return Je(d??void 0,"sourceTaskId"),Je(u??void 0,"detectorVersion"),Je(c??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:s,coversToTaskId:a,agentId:t.agentId??null,sourceTaskId:d,detectorVersion:u,contentFingerprint:c}}function Qc(t,e){(!t||typeof t!="object")&&F(`candidates[${e}] is required`),Eo(t.kind);let n=yo(t.text),r=Je(t.anchorTaskId,`candidates[${e}].anchorTaskId`),o=Je(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),s=Je(t.coversToTaskId,`candidates[${e}].coversToTaskId`),a=t.contentFingerprint?.trim()||ta("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s}));return O(a,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s,contentFingerprint:a}}function Zc(t){Array.isArray(t)||F("candidates must be an array"),t.length>da&&F(`candidates must contain at most ${da} items`);let e=new Map;for(let[n,r]of t.entries()){let o=Qc(r,n);e.set(o.contentFingerprint,o);}return [...e.values()]}function Tn(t){let e=mo(t.metadata);return {threadId:t.id,workspaceId:t.workspace_id,title:t.title,priority:e.priority??null,state:e.state??null,metadata:t.metadata,titleLocked:t.title_locked===1,updatedAt:t.updated_at}}function el(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&F("event payload must be a JSON object"),e}catch(e){throw new f("VALIDATION","event payload must be JSON serializable",e)}}function mn(t,e){return t.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${U.seq}), 0)`}).from(U).where(drizzleOrm.eq(U.thread_id,e)).get()?.maxSeq??0}function _n(t,e){return !!t.select({id:U.id}).from(U).where(drizzleOrm.eq(U.thread_id,e)).limit(1).get()}function gt(t,e){jc.has(e.type)||F(`invalid thread event type: ${String(e.type)}`);let n=fn("the");t.insert(U).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:el(e.payload),created_at:e.createdAt}).run();let r=t.select().from(U).where(drizzleOrm.eq(U.id,n)).get();if(!r)throw new f("DB_ERROR","Thread event insert did not return a row");return r}function kn(t,e,n,r,o){let s=Tn(e);gt(t,{threadId:e.id,seq:o,type:"thread.snapshot.imported",actorType:n.actorType,actorId:n.actorId,createdAt:r,payload:{title:s.title,priority:s.priority,state:s.state}});}function nr(t){return {highlightId:t.id,source:t.source,kind:t.kind,status:t.status,coversFromTaskId:t.covers_from_task_id,coversToTaskId:t.covers_to_task_id,revision:t.revision,...t.dismissed_at===null?{}:{dismissedAt:t.dismissed_at}}}function tr(t,e,n,r,o,s,a){let d=o==="thread.highlight.created"?nr(e):{before:a?nr({...e,...a,id:e.id}):void 0,after:nr(e)};return gt(t,{threadId:e.thread_id,seq:s,type:o,actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source==="manual"?e.covers_from_task_id:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:d})}function tl(t,e,n,r,o,s){return gt(t,{threadId:e.thread_id,seq:o,type:"thread.highlight.deleted",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:{before:nr(e),...s??{}}})}var rr=class extends pe{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=ke.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!fs$1.existsSync(n))throw new f("NOT_FOUND","Database not found");if(e){let o=ke.dirname(n);fs$1.existsSync(o)||fs$1.mkdirSync(o,{recursive:true});}let r=j(n);if(e)try{xe(r.db,n);}catch(o){throw r.close(),o}return r}findThread(e,n,r){let o=drizzleOrm.eq(_.id,n),s=r===void 0?o:r===null?drizzleOrm.and(o,drizzleOrm.isNull(_.workspace_id)):drizzleOrm.and(o,drizzleOrm.eq(_.workspace_id,r));return e.select().from(_).where(s).limit(1).get()}findRegenerationRun(e,n,r){let o=e.select().from(M).where(drizzleOrm.eq(M.id,n)).limit(1).get();if(o&&!(r!==void 0&&!this.findThread(e,o.thread_id,r)))return o}resolveWorkspaceId(e){if(O(e,"threadId"),!fs$1.existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:_.workspace_id}).from(_).where(drizzleOrm.eq(_.id,e)).limit(1).get()?.workspaceId??null}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if(O(e,"threadId"),!fs$1.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let o=this.findThread(r.db,e,n);return o?Tn(o):null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read thread snapshot",o)}finally{r.close();}}updateSnapshot(e){Kc(e);let n=hn(e),r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let a=this.findThread(s,e.threadId,e.workspaceId);a||be(`Thread ${e.threadId} not found`);let d=Tn(a),u=e.title!==void 0,c=u&&e.title!==d.title,l=u&&a.title_locked!==1,p=e.priority!==void 0&&e.priority!==d.priority,g=e.state!==void 0&&e.state!==d.state,m=c||p||g;if(!m&&!l)return d;let R=a.metadata;(p||g)&&(R=oa(a.metadata,{priority:e.priority,state:e.state}));let w={};if(m&&(w.metadata=R,w.updated_at=r),c&&(w.title=e.title),u&&(w.title_locked=1),s.update(_).set(w).where(e.workspaceId===void 0?drizzleOrm.eq(_.id,e.threadId):e.workspaceId===null?drizzleOrm.and(drizzleOrm.eq(_.id,e.threadId),drizzleOrm.isNull(_.workspace_id)):drizzleOrm.and(drizzleOrm.eq(_.id,e.threadId),drizzleOrm.eq(_.workspace_id,e.workspaceId))).run(),!m){let P={...a,title_locked:1};return Tn(P)}let T=mn(s,a.id)+1;_n(s,a.id)||(kn(s,a,n,r,T),T+=1),c&&(gt(s,{threadId:a.id,seq:T,type:"thread.title.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.title,after:e.title}}),T+=1),p&&(gt(s,{threadId:a.id,seq:T,type:"thread.priority.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.priority,after:e.priority}}),T+=1),g&>(s,{threadId:a.id,seq:T,type:"thread.state.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.state,after:e.state}});let N={...a,title:c?e.title:a.title,metadata:R,title_locked:u?1:a.title_locked,updated_at:r};return Tn(N)},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread snapshot",s)}finally{o.close();}}mutateSnapshot(e){return this.updateSnapshot(e)}updateThreadSnapshot(e){return this.updateSnapshot(e)}getLatestSeq(e,n){if(O(e,"threadId"),!fs$1.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${U.seq}), 0)`}).from(U).where(drizzleOrm.eq(U.thread_id,e)).get()?.maxSeq??0:null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read latest thread event sequence",o)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if(O(e,"threadId"),O(n,"workspaceId"),!fs$1.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({taskId:i.id,prompt:i.prompt,result:i.result,status:i.status,startedAt:i.started_at,completedAt:i.completed_at}).from(i).where(drizzleOrm.and(drizzleOrm.eq(i.thread_id,e),drizzleOrm.eq(i.workspace_id,n),drizzleOrm.inArray(i.status,[...wi,"completed","done","error"]),drizzleOrm.or(drizzleOrm.isNull(i.parent_task_id),drizzleOrm.eq(i.parent_task_id,"")),drizzleOrm.sql`${i.result} IS NOT NULL AND length(trim(${i.result})) > 0`)).orderBy(drizzleOrm.asc(i.started_at),drizzleOrm.asc(i.id)).all().map(a=>({taskId:a.taskId,prompt:a.prompt,result:a.result,status:a.status,startedAt:a.startedAt,completedAt:a.completedAt})):null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read completed thread highlight turns",o)}finally{r.close();}}createHighlightRegenerationRun(e){O(e.threadId,"threadId"),O(e.workspaceId,"workspaceId"),O(e.requestId,"requestId"),O(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&O(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>{let s=this.findThread(o,e.threadId,e.workspaceId);s||be(`Thread ${e.threadId} not found`);let a=o.select().from(M).where(drizzleOrm.and(drizzleOrm.eq(M.thread_id,s.id),drizzleOrm.eq(M.request_id,e.requestId))).orderBy(drizzleOrm.desc(M.requested_at),drizzleOrm.desc(M.id)).limit(1).get();if(a)return {run:a,created:!1};let d=o.select().from(M).where(drizzleOrm.and(drizzleOrm.eq(M.thread_id,s.id),drizzleOrm.inArray(M.status,er))).orderBy(drizzleOrm.asc(M.requested_at),drizzleOrm.asc(M.id)).limit(1).get();if(d)throw new wo(d);let u=e.runId??fn("thr");o.insert(M).values({id:u,thread_id:s.id,request_id:e.requestId,status:"queued",detector_version:e.detectorVersion,requested_at:n,started_at:null,completed_at:null,error_code:null,previous_auto_count:null,new_auto_count:null}).run();let c=o.select().from(M).where(drizzleOrm.eq(M.id,u)).get();if(!c)throw new f("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:c,created:!0}},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to create highlight regeneration run",o)}finally{r.close();}}beginHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}queueHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}getHighlightRegenerationRun(e,n){if(O(e,"runId"),n!==void 0&&O(n,"workspaceId"),!fs$1.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read highlight regeneration run",o)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if(O(e,"threadId"),O(n,"workspaceId"),O(r,"requestId"),!fs$1.existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{return this.findThread(o.db,e,n)?o.db.select().from(M).where(drizzleOrm.and(drizzleOrm.eq(M.thread_id,e),drizzleOrm.eq(M.request_id,r))).orderBy(drizzleOrm.desc(M.requested_at),drizzleOrm.desc(M.id)).limit(1).get()??null:null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read highlight regeneration request",s)}finally{o.close();}}findHighlightRegenerationRun(e,n,r){return this.getHighlightRegenerationRunByRequest(e,n,r)}startHighlightRegenerationRun(e,n){O(e,"runId"),n!==void 0&&O(n,"workspaceId");let r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let a=this.findRegenerationRun(s,e,n);if(a||be(`Highlight regeneration run ${e} not found`),ko(a.status)||F(`invalid highlight regeneration status: ${a.status}`),a.status!=="queued")return a;s.update(M).set({status:"running",started_at:r}).where(drizzleOrm.and(drizzleOrm.eq(M.id,a.id),drizzleOrm.eq(M.status,"queued"))).run();let d=s.select().from(M).where(drizzleOrm.eq(M.id,a.id)).get();if(!d)throw new f("DB_ERROR","Highlight regeneration run start did not return a row");return d},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to start highlight regeneration run",s)}finally{o.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){O(e.runId,"runId"),O(e.errorCode,"errorCode"),e.workspaceId!==void 0&&O(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>{let s=this.findRegenerationRun(o,e.runId,e.workspaceId);if(s||be(`Highlight regeneration run ${e.runId} not found`),ko(s.status)||F(`invalid highlight regeneration status: ${s.status}`),s.status==="completed"||s.status==="failed")return s;o.update(M).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(drizzleOrm.and(drizzleOrm.eq(M.id,s.id),drizzleOrm.inArray(M.status,er))).run();let a=o.select().from(M).where(drizzleOrm.eq(M.id,s.id)).get();if(!a)throw new f("DB_ERROR","Highlight regeneration run failure did not return a row");return a},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to fail highlight regeneration run",o)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=qc){O(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>o.update(M).set({status:"failed",completed_at:n,error_code:e}).where(drizzleOrm.inArray(M.status,er)).run().changes,{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to recover interrupted highlight runs",o)}finally{r.close();}}completeHighlightRegenerationRun(e){O(e.runId,"runId"),O(e.threadId,"threadId"),O(e.workspaceId,"workspaceId"),O(e.detectorVersion,"detectorVersion");let n=Zc(e.candidates),r=hn(e),o=this.openHandle(true),s=false;try{return o.db.transaction(a=>{let d=this.findRegenerationRun(a,e.runId,e.workspaceId);if((!d||d.thread_id!==e.threadId)&&be(`Highlight regeneration run ${e.runId} not found`),ko(d.status)||F(`invalid highlight regeneration status: ${d.status}`),d.status==="failed")throw new f("CONFLICT","Highlight regeneration run has already failed");if(d.status==="completed")return {run:d,deletedCount:0,createdCount:0,previousAutoCount:d.previous_auto_count??0,newAutoCount:d.new_auto_count??0};s=!0;let u=this.findThread(a,e.threadId,e.workspaceId);u||be(`Thread ${e.threadId} not found`),d.detector_version!==e.detectorVersion&&F("detectorVersion does not match the regeneration run");let c=a.select().from(C).where(drizzleOrm.eq(C.thread_id,u.id)).orderBy(drizzleOrm.asc(C.created_at),drizzleOrm.asc(C.id)).all(),l=new Set(n.map(A=>A.contentFingerprint)),p=c.filter(A=>A.source==="auto"&&A.status==="active"&&A.revision===0&&!l.has(A.content_fingerprint??"")),g=c.filter(A=>A.source==="auto"&&A.status==="active").length,m=new Set(c.filter(A=>!p.includes(A)&&A.content_fingerprint).map(A=>A.content_fingerprint)),R=n.filter(A=>!m.has(A.contentFingerprint)),w=new Date().toISOString(),T=mn(a,u.id)+1;_n(a,u.id)||(kn(a,u,r,w,T),T+=1);for(let A of p)a.delete(C).where(drizzleOrm.eq(C.id,A.id)).run(),tl(a,A,r,w,T,{runId:e.runId,reason:Uc}),T+=1;let N=0,P=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let A of R){let X=fn("thl");a.insert(C).values({id:X,thread_id:u.id,source:"auto",kind:A.kind,status:"active",text:A.text,covers_from_task_id:A.coversFromTaskId,covers_to_task_id:A.coversToTaskId,revision:0,created_at:w,updated_at:w,agent_id:P,source_task_id:A.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:A.contentFingerprint,dismissed_at:null}).run();let _e=a.select().from(C).where(drizzleOrm.eq(C.id,X)).get();if(!_e)throw new f("DB_ERROR","Regenerated highlight insert did not return a row");tr(a,_e,r,w,"thread.highlight.created",T),T+=1,N+=1;}let y=a.select().from(C).where(drizzleOrm.eq(C.thread_id,u.id)).all().filter(A=>A.source==="auto"&&A.status==="active").length;gt(a,{threadId:u.id,seq:T,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:w,payload:{runId:d.id,detectorVersion:e.detectorVersion,previousAutoCount:g,newAutoCount:y,deletedCount:p.length,createdCount:N}}),a.update(M).set({status:"completed",started_at:d.started_at??w,completed_at:w,error_code:null,previous_auto_count:g,new_auto_count:y}).where(drizzleOrm.and(drizzleOrm.eq(M.id,d.id),drizzleOrm.inArray(M.status,er))).run();let x=a.select().from(M).where(drizzleOrm.eq(M.id,d.id)).get();if(!x)throw new f("DB_ERROR","Highlight regeneration completion did not return a row");return {run:x,deletedCount:p.length,createdCount:N,previousAutoCount:g,newAutoCount:y}},{behavior:"immediate"})}catch(a){if(s)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:Fc});}catch{}throw a instanceof f?a:new f("DB_ERROR","Failed to complete highlight regeneration",a)}finally{o.close();}}completeHighlightRegeneration(e){return this.completeHighlightRegenerationRun(e)}replaceAutoHighlightsAtomically(e){return this.completeHighlightRegenerationRun(e)}listTimeline(e,n,r={}){let o=typeof e=="string"?{...r,threadId:e,workspaceId:n}:e;O(o.threadId,"threadId"),O(o.workspaceId,"workspaceId");let s=Jc(o);if(!fs$1.existsSync(this.resolveDbPath()))return null;let a=this.openHandle(false);try{if(!this.findThread(a.db,o.threadId,o.workspaceId))return null;let d=a.db.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${U.seq}), 0)`}).from(U).where(drizzleOrm.eq(U.thread_id,o.threadId)).get()?.maxSeq??0,u;o.beforeSeq!==void 0?u=a.db.select().from(U).where(drizzleOrm.and(drizzleOrm.eq(U.thread_id,o.threadId),drizzleOrm.lt(U.seq,o.beforeSeq))).orderBy(drizzleOrm.desc(U.seq)).limit(s+1).all().reverse():o.afterSeq!==void 0?u=a.db.select().from(U).where(drizzleOrm.and(drizzleOrm.eq(U.thread_id,o.threadId),drizzleOrm.sql`${U.seq} > ${o.afterSeq}`)).orderBy(drizzleOrm.asc(U.seq)).limit(s+1).all():u=a.db.select().from(U).where(drizzleOrm.eq(U.thread_id,o.threadId)).orderBy(drizzleOrm.desc(U.seq)).limit(s+1).all().reverse();let c=u.length>s,l=o.afterSeq!==void 0?u.slice(0,s):c?u.slice(1):u,p=!1,g=l[0];return g&&(p=!!a.db.select({id:U.id}).from(U).where(drizzleOrm.and(drizzleOrm.eq(U.thread_id,o.threadId),drizzleOrm.lt(U.seq,g.seq))).limit(1).get()),{items:l,latestSeq:d,hasMoreOlder:p}}catch(d){throw d instanceof f?d:new f("DB_ERROR","Failed to list thread timeline",d)}finally{a.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=Yc(e),r=hn(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(a=>{let d=this.findThread(a,e.threadId,e.workspaceId);if(d||be(`Thread ${e.threadId} not found`),n.source==="auto"){let g=a.select().from(C).where(drizzleOrm.and(drizzleOrm.eq(C.thread_id,e.threadId),drizzleOrm.eq(C.source_task_id,n.sourceTaskId),drizzleOrm.eq(C.detector_version,n.detectorVersion),drizzleOrm.eq(C.content_fingerprint,n.contentFingerprint))).orderBy(drizzleOrm.asc(C.created_at),drizzleOrm.asc(C.id)).limit(1).get();if(g)return g}let u=e.id??fn("thl"),c={id:u,thread_id:e.threadId,source:n.source,kind:n.kind,status:"active",text:n.text,covers_from_task_id:n.coversFromTaskId,covers_to_task_id:n.coversToTaskId,revision:0,created_at:o,updated_at:o,agent_id:n.agentId,source_task_id:n.sourceTaskId,detector_version:n.detectorVersion,content_fingerprint:n.contentFingerprint,dismissed_at:null};a.insert(C).values(c).run();let l=a.select().from(C).where(drizzleOrm.eq(C.id,u)).get();if(!l)throw new f("DB_ERROR","Highlight insert did not return a row");let p=mn(a,d.id)+1;return _n(a,d.id)||(kn(a,d,r,o,p),p+=1),tr(a,l,r,o,"thread.highlight.created",p),l},{behavior:"immediate"})}catch(a){throw a instanceof f?a:new f("DB_ERROR","Failed to create thread highlight",a)}finally{s.close();}}updateHighlight(e){O(e.threadId,"threadId"),O(e.workspaceId,"workspaceId"),O(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&F("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&F("highlight update requires at least one field"),e.kind!==void 0&&Eo(e.kind);let n=e.text===void 0?void 0:yo(e.text),r=hn(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(a=>{let d=this.findThread(a,e.threadId,e.workspaceId);d||be(`Thread ${e.threadId} not found`);let u=a.select().from(C).where(drizzleOrm.and(drizzleOrm.eq(C.id,e.highlightId),drizzleOrm.eq(C.thread_id,d.id))).limit(1).get();if(u||be(`Highlight ${e.highlightId} not found`),u.revision!==e.expectedRevision)throw new wn(d.id,u.id,e.expectedRevision,u.revision);if(u.status!=="active")throw new wn(d.id,u.id,e.expectedRevision,u.revision);let c=e.kind??u.kind,l=n??u.text,p=e.coversFromTaskId??u.covers_from_task_id,g=e.coversToTaskId??u.covers_to_task_id;(!l||p.length===0||g.length===0)&&F("highlight projection is incomplete");let m=c!==u.kind||l!==u.text||p!==u.covers_from_task_id||g!==u.covers_to_task_id,R=r.actorType==="user"&&u.source==="auto"&&m?"manual":u.source;if(!(m||R!==u.source))return u;let T=u.revision+1;a.update(C).set({source:R,kind:c,text:l,covers_from_task_id:p,covers_to_task_id:g,revision:T,updated_at:o}).where(drizzleOrm.and(drizzleOrm.eq(C.id,u.id),drizzleOrm.eq(C.revision,u.revision))).run();let N=a.select().from(C).where(drizzleOrm.eq(C.id,u.id)).get();if(!N)throw new f("DB_ERROR","Highlight update did not return a row");let P=mn(a,d.id)+1;return _n(a,d.id)||(kn(a,d,r,o,P),P+=1),tr(a,N,r,o,"thread.highlight.updated",P,u),N},{behavior:"immediate"})}catch(a){throw a instanceof f?a:new f("DB_ERROR","Failed to update thread highlight",a)}finally{s.close();}}dismissHighlight(e){O(e.threadId,"threadId"),O(e.workspaceId,"workspaceId"),O(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&F("expectedRevision must be a non-negative integer");let n=hn(e),r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let a=this.findThread(s,e.threadId,e.workspaceId);a||be(`Thread ${e.threadId} not found`);let d=s.select().from(C).where(drizzleOrm.and(drizzleOrm.eq(C.id,e.highlightId),drizzleOrm.eq(C.thread_id,a.id))).limit(1).get();if(d||be(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new wn(a.id,d.id,e.expectedRevision,d.revision);if(d.status==="dismissed")return d;let u=d.revision+1;s.update(C).set({status:"dismissed",text:null,revision:u,updated_at:r,dismissed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(C.id,d.id),drizzleOrm.eq(C.revision,d.revision))).run();let c=s.select().from(C).where(drizzleOrm.eq(C.id,d.id)).get();if(!c)throw new f("DB_ERROR","Highlight dismissal did not return a row");let l=mn(s,a.id)+1;return _n(s,a.id)||(kn(s,a,n,r,l),l+=1),tr(s,c,n,r,"thread.highlight.deleted",l,d),c},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to dismiss thread highlight",s)}finally{o.close();}}listActiveHighlights(e,n,r={}){if(O(e,"threadId"),O(n,"workspaceId"),r.taskId!==void 0&&O(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&O(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&O(r.coversToTaskId,"coversToTaskId"),!fs$1.existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{if(!this.findThread(o.db,e,n))return null;let a=o.db.select().from(C).where(drizzleOrm.and(drizzleOrm.eq(C.thread_id,e),drizzleOrm.eq(C.status,"active"))).orderBy(drizzleOrm.asc(C.created_at),drizzleOrm.asc(C.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return a;let d=o.db.all(drizzleOrm.sql`
|
|
405
|
+
`),c},{behavior:"immediate"})}}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to save user message",s)}finally{o.close();}}saveAssistantMessage(e,n,r){if(!this.dbExists())return;let o=this.openHandle(true);try{let s=new Date().toISOString();o.db.update(_).set({last_message:n,updated_at:s}).where(drizzleOrm.eq(_.id,e)).run();}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to save assistant message",s)}finally{o.close();}}updateThread(e,n){if(!this.dbExists())return;let r=this.openHandle(true);try{let o={updated_at:new Date().toISOString()};n.title!==void 0&&(o.title=n.title,o.title_locked=1),n.titleLocked!==void 0&&(o.title_locked=n.titleLocked?1:0),r.db.update(_).set(o).where(drizzleOrm.eq(_.id,e)).run();}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update thread",o)}finally{r.close();}}patchThreadTitleMetadata(e,n,r){let o=n;if(!o||typeof o!="object"||Array.isArray(o))return new Dt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch must be an object");if(Object.keys(o).some(u=>u!=="priority"&&u!=="state"))return new Dt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata patch only supports priority and state");let a=o;if(a.priority===void 0&&a.state===void 0)return new Dt("THREAD_TITLE_PATCH_EMPTY","Thread-title metadata patch must change priority or state");for(let u of [a.priority,a.state])if(u!=null&&(typeof u!="string"||u.length===0))return new Dt("THREAD_TITLE_PATCH_INVALID","Thread-title metadata values must be non-empty strings or null");let d=this.openHandle(true);try{let u=r?drizzleOrm.and(drizzleOrm.eq(_.id,e),drizzleOrm.eq(_.workspace_id,r)):drizzleOrm.eq(_.id,e);return d.db.transaction(c=>{let l=c.select({metadata:_.metadata}).from(_).where(u).get();if(!l)return null;let p=gn(l.metadata),g=p.threadTitle,m=g&&typeof g=="object"&&!Array.isArray(g)?{...g}:{};a.priority===null?delete m.priority:a.priority!==void 0&&(m.priority=a.priority),a.state===null?delete m.state:a.state!==void 0&&(m.state=a.state),Object.keys(m).length>0?p.threadTitle=m:delete p.threadTitle;let R=Object.keys(p).length>0?JSON.stringify(p):null,w=new Date().toISOString();c.update(_).set({metadata:R,updated_at:w}).where(u).run();let T=c.select({metadata:_.metadata}).from(_).where(u).get();if(!T)throw new f("DB_ERROR","Thread-title metadata update could not be read back");let N=qc(T.metadata);return {threadId:e,priority:N.priority,state:N.state}},{behavior:"immediate"})}catch(u){throw u instanceof f?u:new f("DB_ERROR","Failed to patch thread-title metadata",u)}finally{d.close();}}togglePin(e,n){let r=this.openHandle(true);try{let o=n?drizzleOrm.and(drizzleOrm.eq(_.id,e),drizzleOrm.eq(_.workspace_id,n)):drizzleOrm.eq(_.id,e);return r.db.transaction(s=>{let a=s.select({pinned:_.pinned,metadata:_.metadata}).from(_).where(o).get();if(!a)return null;let d=a.pinned?0:1,u=gn(a.metadata);if(d){let c=n?drizzleOrm.and(drizzleOrm.eq(_.pinned,1),drizzleOrm.eq(_.workspace_id,n)):drizzleOrm.eq(_.pinned,1),l=s.select({metadata:_.metadata}).from(_).where(c).all(),p=null;for(let g of l){let m=gn(g.metadata);typeof m.pinOrder=="number"&&(p===null||m.pinOrder<p)&&(p=m.pinOrder);}u.pinOrder=p===null?0:p-1;}else delete u.pinOrder;return s.update(_).set({pinned:d,metadata:Object.keys(u).length>0?JSON.stringify(u):null}).where(o).run(),{pinned:!!d}},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to toggle pin",o)}finally{r.close();}}reorderPins(e,n){let r=this.openHandle(true);try{r.db.transaction(o=>{for(let s=0;s<e.length;s++){let a=n?drizzleOrm.and(drizzleOrm.eq(_.id,e[s]),drizzleOrm.eq(_.workspace_id,n)):drizzleOrm.eq(_.id,e[s]),d=o.select({metadata:_.metadata}).from(_).where(a).get();if(!d)continue;let u=gn(d.metadata);u.pinOrder=s+1,o.update(_).set({metadata:JSON.stringify(u)}).where(a).run();}},{behavior:"immediate"});}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to reorder pins",o)}finally{r.close();}}toggleStar(e,n){let r=this.openHandle(true);try{let o=n?drizzleOrm.and(drizzleOrm.eq(_.id,e),drizzleOrm.eq(_.workspace_id,n)):drizzleOrm.eq(_.id,e),s=r.db.select({starred:_.starred}).from(_).where(o).get();if(!s)return null;let a=s.starred?0:1;return r.db.update(_).set({starred:a}).where(o).run(),{starred:!!a}}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to toggle star",o)}finally{r.close();}}resolveOverdriveForRequest(e,n,r,o){let a=this.openHandle(true);try{let d=n?drizzleOrm.and(drizzleOrm.eq(_.id,e),drizzleOrm.eq(_.workspace_id,n)):drizzleOrm.eq(_.id,e);return a.db.transaction(c=>{let l=c.select({metadata:_.metadata}).from(_).where(d).get();if(!l)return null;let p=l.metadata?JSON.parse(l.metadata):{},g=p.overdrive??{},m=o?.defaultTurns??g.defaultTurns??3,R=o?.updatedBy??"ui",w=new Date().toISOString(),T,N,x,$;switch(r){case "enable-count":{let y=o?.turns??m,b=o?.consumeCurrent?Math.max(y-1,0):y;T=b>0?"count":"off",N=b,x=!0,$="count";break}case "enable-latch":{T="latch",N=0,x=!0,$="latch";break}case "disable":{T="off",N=0,x=!1;break}default:{let y=g.state??"off",b=typeof g.remaining=="number"?g.remaining:0;if(y==="count"&&b>0){let I=b-1;I<=0?(T="off",N=0):(T="count",N=I),x=!0,$="count";}else y==="latch"?(T="latch",N=0,x=!0,$="latch"):(T="off",N=0,x=!1);break}}return p.overdrive={state:T,remaining:N,defaultTurns:m,updatedAt:w,updatedBy:R},c.update(_).set({metadata:JSON.stringify(p),updated_at:w}).where(d).run(),{applied:x,appliedMode:$,state:T,remaining:N}},{behavior:"immediate"})}catch(d){throw d instanceof f?d:new f("DB_ERROR","Failed to resolve overdrive",d)}finally{a.close();}}};h();st();mt();kt();rt();h();var To="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function Fc(t){let e=crypto.randomBytes(t*2),n="";for(let r=0;r<e.length&&n.length<t;r++){let o=e[r];o<248&&(n+=To[o%62]);}for(;n.length<t;)n+=To[crypto.randomBytes(1)[0]%62];return n}function hn(t){return `${t}_${Fc(8)}`}function ia(t,e){let{createHash:n}=ht("crypto"),r=n("sha256").update(e).digest(),o=Buffer.alloc(8);for(let a=0;a<32;a++)o[a%8]^=r[a];let s="";for(let a of o)s+=To[a%62];return `${t}_${s}`}yt();h();var Bc=["urgent","high","medium","low"],jc=["investigating","in-progress","in-review","on-hold","done"],aa="custom:";var Wc=new Set(Bc),Gc=new Set(jc);function wo(t){return typeof t=="string"&&Wc.has(t)}function yo(t){if(typeof t!="string")return false;if(Gc.has(t))return true;if(t.startsWith("c_"))return t.length>2;if(!t.startsWith(aa))return false;let e=t.slice(aa.length);return e.length>=1&&e.length<=20}function da(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 Eo(t){let e=da(t);if(!e)return {};let n=e.threadTitle;if(!n||typeof n!="object"||Array.isArray(n))return {};let r=n,o={};return wo(r.priority)&&(o.priority=r.priority),yo(r.state)&&(o.state=r.state),o}function ua(t,e){let n=da(t)??{},r={...Eo(t)};return e.priority===null?delete r.priority:e.priority!==void 0&&(r.priority=e.priority),e.state===null?delete r.state:e.state!==void 0&&(r.state=e.state),r.priority===void 0&&r.state===void 0?delete n.threadTitle:n.threadTitle=r,Object.keys(n).length===0?null:JSON.stringify(n)}Vn();var Xc="regeneration_replaced";var Yc="THREAD_HIGHLIGHT_REGENERATION_INTERRUPTED";var Qc="THREAD_HIGHLIGHT_REGENERATION_COMMIT_FAILED",Io=class extends f{threadId;highlightId;expectedRevision;currentRevision;constructor(e,n,r,o){super("CONFLICT",`Highlight revision conflict: expected ${r}, current ${o}`),this.name="ThreadHistoryConflictError",this.threadId=e,this.highlightId=n,this.expectedRevision=r,this.currentRevision=o;}},En=class extends Io{},Ao=class extends f{stableCode="THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS";run;constructor(e){super("CONFLICT","THREAD_HIGHLIGHT_REGENERATION_IN_PROGRESS"),this.name="ThreadHighlightRegenerationConflictError",this.run=e;}},Zc=new Set(ps),el=new Set(ls),tl=new Set(fs),nl=new Set(gs),rl=50,la=100,pa=280,fa=40,ol=new Set(hs),rr=["queued","running"];function So(t){return ol.has(t)}function F(t){throw new f("VALIDATION",t)}function be(t){throw new f("NOT_FOUND",t)}function C(t,e){(typeof t!="string"||t.trim().length===0)&&F(`${e} is required`);}function _n(t={}){let e=t.actor??t,n=e.actorType??"system";return Zc.has(n)||F(`invalid actorType: ${String(n)}`),e.actorId!==void 0&&e.actorId!==null&&typeof e.actorId!="string"&&F("actorId must be a string or null"),{actorType:n,actorId:e.actorId??null}}function sl(t){C(t.threadId,"threadId"),t.workspaceId!==void 0&&t.workspaceId!==null&&C(t.workspaceId,"workspaceId"),t.title!==void 0&&t.title!==null&&((typeof t.title!="string"||t.title.trim().length===0)&&F("title must not be empty"),t.title.length>120&&F("title must be at most 120 characters")),t.priority!==void 0&&t.priority!==null&&!wo(t.priority)&&F(`invalid priority: ${String(t.priority)}`),t.state!==void 0&&t.state!==null&&!yo(t.state)&&F(`invalid state: ${String(t.state)}`);}function il(t){t.beforeSeq!==void 0&&t.afterSeq!==void 0&&F("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)&&F(`${n} must be a non-negative integer`);let e=t.limit??rl;return (!Number.isInteger(e)||e<1||e>la)&&F(`limit must be between 1 and ${la}`),e}function vo(t){typeof t!="string"&&F("text is required");let e=t.trim();return e.length===0&&F("text must not be empty"),e.length>pa&&F(`text must be at most ${pa} characters`),e}function Je(t,e){return C(t??"",e),t}function Oo(t){nl.has(t)||F(`invalid highlight kind: ${String(t)}`);}function al(t){tl.has(t)||F(`invalid highlight source: ${String(t)}`);}function dl(t){C(t.threadId,"threadId"),C(t.workspaceId,"workspaceId");let e=t.source??"manual";al(e),Oo(t.kind);let n=vo(t.text),r=t.coversFromTaskId??t.fromTaskId??t.taskId,o=t.coversToTaskId??t.toTaskId??t.taskId;if(e==="manual"){let l=t.taskId??(r&&o&&r===o?r:void 0),p=Je(l,"taskId");return (r!==p||o!==p)&&F("manual highlights must cover exactly one task"),{source:e,kind:t.kind,text:n,coversFromTaskId:p,coversToTaskId:p,agentId:t.agentId??null,sourceTaskId:null,detectorVersion:null,contentFingerprint:null}}let s=Je(r,"coversFromTaskId"),a=Je(o,"coversToTaskId"),d=t.sourceTaskId??s,u=t.detectorVersion??(t.idempotencyKey!==void 0?"default":null),c=t.contentFingerprint??t.idempotencyKey??null;return Je(d??void 0,"sourceTaskId"),Je(u??void 0,"detectorVersion"),Je(c??void 0,"contentFingerprint"),{source:e,kind:t.kind,text:n,coversFromTaskId:s,coversToTaskId:a,agentId:t.agentId??null,sourceTaskId:d,detectorVersion:u,contentFingerprint:c}}function ul(t,e){(!t||typeof t!="object")&&F(`candidates[${e}] is required`),Oo(t.kind);let n=vo(t.text),r=Je(t.anchorTaskId,`candidates[${e}].anchorTaskId`),o=Je(t.coversFromTaskId,`candidates[${e}].coversFromTaskId`),s=Je(t.coversToTaskId,`candidates[${e}].coversToTaskId`),a=t.contentFingerprint?.trim()||ia("thl",JSON.stringify({kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s}));return C(a,`candidates[${e}].contentFingerprint`),{kind:t.kind,text:n,anchorTaskId:r,coversFromTaskId:o,coversToTaskId:s,contentFingerprint:a}}function cl(t){Array.isArray(t)||F("candidates must be an array"),t.length>fa&&F(`candidates must contain at most ${fa} items`);let e=new Map;for(let[n,r]of t.entries()){let o=ul(r,n);e.set(o.contentFingerprint,o);}return [...e.values()]}function yn(t){let e=Eo(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 ll(t){try{let e=JSON.stringify(t);return (!e||e==="null"||e.startsWith("["))&&F("event payload must be a JSON object"),e}catch(e){throw new f("VALIDATION","event payload must be JSON serializable",e)}}function kn(t,e){return t.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${U.seq}), 0)`}).from(U).where(drizzleOrm.eq(U.thread_id,e)).get()?.maxSeq??0}function Tn(t,e){return !!t.select({id:U.id}).from(U).where(drizzleOrm.eq(U.thread_id,e)).limit(1).get()}function gt(t,e){el.has(e.type)||F(`invalid thread event type: ${String(e.type)}`);let n=hn("the");t.insert(U).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:ll(e.payload),created_at:e.createdAt}).run();let r=t.select().from(U).where(drizzleOrm.eq(U.id,n)).get();if(!r)throw new f("DB_ERROR","Thread event insert did not return a row");return r}function wn(t,e,n,r,o){let s=yn(e);gt(t,{threadId:e.id,seq:o,type:"thread.snapshot.imported",actorType:n.actorType,actorId:n.actorId,createdAt:r,payload:{title:s.title,priority:s.priority,state:s.state}});}function sr(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 or(t,e,n,r,o,s,a){let d=o==="thread.highlight.created"?sr(e):{before:a?sr({...e,...a,id:e.id}):void 0,after:sr(e)};return gt(t,{threadId:e.thread_id,seq:s,type:o,actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source==="manual"?e.covers_from_task_id:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:d})}function pl(t,e,n,r,o,s){return gt(t,{threadId:e.thread_id,seq:o,type:"thread.highlight.deleted",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.source_task_id??e.covers_from_task_id,highlightId:e.id,payload:{before:sr(e),...s??{}}})}var ir=class extends ge{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Te.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!fs$1.existsSync(n))throw new f("NOT_FOUND","Database not found");if(e){let o=Te.dirname(n);fs$1.existsSync(o)||fs$1.mkdirSync(o,{recursive:true});}let r=j(n);if(e)try{xe(r.db,n);}catch(o){throw r.close(),o}return r}findThread(e,n,r){let o=drizzleOrm.eq(_.id,n),s=r===void 0?o:r===null?drizzleOrm.and(o,drizzleOrm.isNull(_.workspace_id)):drizzleOrm.and(o,drizzleOrm.eq(_.workspace_id,r));return e.select().from(_).where(s).limit(1).get()}findRegenerationRun(e,n,r){let o=e.select().from(M).where(drizzleOrm.eq(M.id,n)).limit(1).get();if(o&&!(r!==void 0&&!this.findThread(e,o.thread_id,r)))return o}resolveWorkspaceId(e){if(C(e,"threadId"),!fs$1.existsSync(this.resolveDbPath()))return null;let n=this.openHandle(false);try{return n.db.select({workspaceId:_.workspace_id}).from(_).where(drizzleOrm.eq(_.id,e)).limit(1).get()?.workspaceId??null}catch(r){throw r instanceof f?r:new f("DB_ERROR","Failed to resolve thread workspace",r)}finally{n.close();}}getSnapshot(e,n){if(C(e,"threadId"),!fs$1.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{let o=this.findThread(r.db,e,n);return o?yn(o):null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read thread snapshot",o)}finally{r.close();}}updateSnapshot(e){sl(e);let n=_n(e),r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let a=this.findThread(s,e.threadId,e.workspaceId);a||be(`Thread ${e.threadId} not found`);let d=yn(a),u=e.title!==void 0,c=u&&e.title!==d.title,l=u&&a.title_locked!==1,p=e.priority!==void 0&&e.priority!==d.priority,g=e.state!==void 0&&e.state!==d.state,m=c||p||g;if(!m&&!l)return d;let R=a.metadata;(p||g)&&(R=ua(a.metadata,{priority:e.priority,state:e.state}));let w={};if(m&&(w.metadata=R,w.updated_at=r),c&&(w.title=e.title),u&&(w.title_locked=1),s.update(_).set(w).where(e.workspaceId===void 0?drizzleOrm.eq(_.id,e.threadId):e.workspaceId===null?drizzleOrm.and(drizzleOrm.eq(_.id,e.threadId),drizzleOrm.isNull(_.workspace_id)):drizzleOrm.and(drizzleOrm.eq(_.id,e.threadId),drizzleOrm.eq(_.workspace_id,e.workspaceId))).run(),!m){let x={...a,title_locked:1};return yn(x)}let T=kn(s,a.id)+1;Tn(s,a.id)||(wn(s,a,n,r,T),T+=1),c&&(gt(s,{threadId:a.id,seq:T,type:"thread.title.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.title,after:e.title}}),T+=1),p&&(gt(s,{threadId:a.id,seq:T,type:"thread.priority.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.priority,after:e.priority}}),T+=1),g&>(s,{threadId:a.id,seq:T,type:"thread.state.changed",actorType:n.actorType,actorId:n.actorId,createdAt:r,taskId:e.taskId,payload:{before:d.state,after:e.state}});let N={...a,title:c?e.title:a.title,metadata:R,title_locked:u?1:a.title_locked,updated_at:r};return yn(N)},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to update thread snapshot",s)}finally{o.close();}}mutateSnapshot(e){return this.updateSnapshot(e)}updateThreadSnapshot(e){return this.updateSnapshot(e)}getLatestSeq(e,n){if(C(e,"threadId"),!fs$1.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${U.seq}), 0)`}).from(U).where(drizzleOrm.eq(U.thread_id,e)).get()?.maxSeq??0:null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read latest thread event sequence",o)}finally{r.close();}}listCompletedThreadHighlightTurns(e,n){if(C(e,"threadId"),C(n,"workspaceId"),!fs$1.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findThread(r.db,e,n)?r.db.select({taskId:i.id,prompt:i.prompt,result:i.result,status:i.status,startedAt:i.started_at,completedAt:i.completed_at}).from(i).where(drizzleOrm.and(drizzleOrm.eq(i.thread_id,e),drizzleOrm.eq(i.workspace_id,n),drizzleOrm.inArray(i.status,[...Ai,"completed","done","error"]),drizzleOrm.or(drizzleOrm.isNull(i.parent_task_id),drizzleOrm.eq(i.parent_task_id,"")),drizzleOrm.sql`${i.result} IS NOT NULL AND length(trim(${i.result})) > 0`)).orderBy(drizzleOrm.asc(i.started_at),drizzleOrm.asc(i.id)).all().map(a=>({taskId:a.taskId,prompt:a.prompt,result:a.result,status:a.status,startedAt:a.startedAt,completedAt:a.completedAt})):null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read completed thread highlight turns",o)}finally{r.close();}}createHighlightRegenerationRun(e){C(e.threadId,"threadId"),C(e.workspaceId,"workspaceId"),C(e.requestId,"requestId"),C(e.detectorVersion,"detectorVersion"),e.runId!==void 0&&C(e.runId,"runId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>{let s=this.findThread(o,e.threadId,e.workspaceId);s||be(`Thread ${e.threadId} not found`);let a=o.select().from(M).where(drizzleOrm.and(drizzleOrm.eq(M.thread_id,s.id),drizzleOrm.eq(M.request_id,e.requestId))).orderBy(drizzleOrm.desc(M.requested_at),drizzleOrm.desc(M.id)).limit(1).get();if(a)return {run:a,created:!1};let d=o.select().from(M).where(drizzleOrm.and(drizzleOrm.eq(M.thread_id,s.id),drizzleOrm.inArray(M.status,rr))).orderBy(drizzleOrm.asc(M.requested_at),drizzleOrm.asc(M.id)).limit(1).get();if(d)throw new Ao(d);let u=e.runId??hn("thr");o.insert(M).values({id:u,thread_id:s.id,request_id:e.requestId,status:"queued",detector_version:e.detectorVersion,requested_at:n,started_at:null,completed_at:null,error_code:null,previous_auto_count:null,new_auto_count:null}).run();let c=o.select().from(M).where(drizzleOrm.eq(M.id,u)).get();if(!c)throw new f("DB_ERROR","Highlight regeneration run insert did not return a row");return {run:c,created:!0}},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to create highlight regeneration run",o)}finally{r.close();}}beginHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}queueHighlightRegenerationRun(e){return this.createHighlightRegenerationRun(e)}getHighlightRegenerationRun(e,n){if(C(e,"runId"),n!==void 0&&C(n,"workspaceId"),!fs$1.existsSync(this.resolveDbPath()))return null;let r=this.openHandle(false);try{return this.findRegenerationRun(r.db,e,n)??null}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to read highlight regeneration run",o)}finally{r.close();}}getHighlightRegenerationRunByRequest(e,n,r){if(C(e,"threadId"),C(n,"workspaceId"),C(r,"requestId"),!fs$1.existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{return this.findThread(o.db,e,n)?o.db.select().from(M).where(drizzleOrm.and(drizzleOrm.eq(M.thread_id,e),drizzleOrm.eq(M.request_id,r))).orderBy(drizzleOrm.desc(M.requested_at),drizzleOrm.desc(M.id)).limit(1).get()??null:null}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to read highlight regeneration request",s)}finally{o.close();}}findHighlightRegenerationRun(e,n,r){return this.getHighlightRegenerationRunByRequest(e,n,r)}startHighlightRegenerationRun(e,n){C(e,"runId"),n!==void 0&&C(n,"workspaceId");let r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let a=this.findRegenerationRun(s,e,n);if(a||be(`Highlight regeneration run ${e} not found`),So(a.status)||F(`invalid highlight regeneration status: ${a.status}`),a.status!=="queued")return a;s.update(M).set({status:"running",started_at:r}).where(drizzleOrm.and(drizzleOrm.eq(M.id,a.id),drizzleOrm.eq(M.status,"queued"))).run();let d=s.select().from(M).where(drizzleOrm.eq(M.id,a.id)).get();if(!d)throw new f("DB_ERROR","Highlight regeneration run start did not return a row");return d},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to start highlight regeneration run",s)}finally{o.close();}}startHighlightRegeneration(e,n){return this.startHighlightRegenerationRun(e,n)}failHighlightRegenerationRun(e){C(e.runId,"runId"),C(e.errorCode,"errorCode"),e.workspaceId!==void 0&&C(e.workspaceId,"workspaceId");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>{let s=this.findRegenerationRun(o,e.runId,e.workspaceId);if(s||be(`Highlight regeneration run ${e.runId} not found`),So(s.status)||F(`invalid highlight regeneration status: ${s.status}`),s.status==="completed"||s.status==="failed")return s;o.update(M).set({status:"failed",completed_at:n,error_code:e.errorCode}).where(drizzleOrm.and(drizzleOrm.eq(M.id,s.id),drizzleOrm.inArray(M.status,rr))).run();let a=o.select().from(M).where(drizzleOrm.eq(M.id,s.id)).get();if(!a)throw new f("DB_ERROR","Highlight regeneration run failure did not return a row");return a},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to fail highlight regeneration run",o)}finally{r.close();}}failHighlightRegeneration(e){return this.failHighlightRegenerationRun(e)}recoverInterruptedHighlightRegenerationRuns(e=Yc){C(e,"errorCode");let n=new Date().toISOString(),r=this.openHandle(true);try{return r.db.transaction(o=>o.update(M).set({status:"failed",completed_at:n,error_code:e}).where(drizzleOrm.inArray(M.status,rr)).run().changes,{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to recover interrupted highlight runs",o)}finally{r.close();}}completeHighlightRegenerationRun(e){C(e.runId,"runId"),C(e.threadId,"threadId"),C(e.workspaceId,"workspaceId"),C(e.detectorVersion,"detectorVersion");let n=cl(e.candidates),r=_n(e),o=this.openHandle(true),s=false;try{return o.db.transaction(a=>{let d=this.findRegenerationRun(a,e.runId,e.workspaceId);if((!d||d.thread_id!==e.threadId)&&be(`Highlight regeneration run ${e.runId} not found`),So(d.status)||F(`invalid highlight regeneration status: ${d.status}`),d.status==="failed")throw new f("CONFLICT","Highlight regeneration run has already failed");if(d.status==="completed")return {run:d,deletedCount:0,createdCount:0,previousAutoCount:d.previous_auto_count??0,newAutoCount:d.new_auto_count??0};s=!0;let u=this.findThread(a,e.threadId,e.workspaceId);u||be(`Thread ${e.threadId} not found`),d.detector_version!==e.detectorVersion&&F("detectorVersion does not match the regeneration run");let c=a.select().from(P).where(drizzleOrm.eq(P.thread_id,u.id)).orderBy(drizzleOrm.asc(P.created_at),drizzleOrm.asc(P.id)).all(),l=new Set(n.map(I=>I.contentFingerprint)),p=c.filter(I=>I.source==="auto"&&I.status==="active"&&I.revision===0&&!l.has(I.content_fingerprint??"")),g=c.filter(I=>I.source==="auto"&&I.status==="active").length,m=new Set(c.filter(I=>!p.includes(I)&&I.content_fingerprint).map(I=>I.content_fingerprint)),R=n.filter(I=>!m.has(I.contentFingerprint)),w=new Date().toISOString(),T=kn(a,u.id)+1;Tn(a,u.id)||(wn(a,u,r,w,T),T+=1);for(let I of p)a.delete(P).where(drizzleOrm.eq(P.id,I.id)).run(),pl(a,I,r,w,T,{runId:e.runId,reason:Xc}),T+=1;let N=0,x=e.agentId??(r.actorType==="agent"?r.actorId:null);for(let I of R){let Y=hn("thl");a.insert(P).values({id:Y,thread_id:u.id,source:"auto",kind:I.kind,status:"active",text:I.text,covers_from_task_id:I.coversFromTaskId,covers_to_task_id:I.coversToTaskId,revision:0,created_at:w,updated_at:w,agent_id:x,source_task_id:I.anchorTaskId,detector_version:e.detectorVersion,content_fingerprint:I.contentFingerprint,dismissed_at:null}).run();let ue=a.select().from(P).where(drizzleOrm.eq(P.id,Y)).get();if(!ue)throw new f("DB_ERROR","Regenerated highlight insert did not return a row");or(a,ue,r,w,"thread.highlight.created",T),T+=1,N+=1;}let y=a.select().from(P).where(drizzleOrm.eq(P.thread_id,u.id)).all().filter(I=>I.source==="auto"&&I.status==="active").length;gt(a,{threadId:u.id,seq:T,type:"thread.highlights.regenerated",actorType:r.actorType,actorId:r.actorId,createdAt:w,payload:{runId:d.id,detectorVersion:e.detectorVersion,previousAutoCount:g,newAutoCount:y,deletedCount:p.length,createdCount:N}}),a.update(M).set({status:"completed",started_at:d.started_at??w,completed_at:w,error_code:null,previous_auto_count:g,new_auto_count:y}).where(drizzleOrm.and(drizzleOrm.eq(M.id,d.id),drizzleOrm.inArray(M.status,rr))).run();let b=a.select().from(M).where(drizzleOrm.eq(M.id,d.id)).get();if(!b)throw new f("DB_ERROR","Highlight regeneration completion did not return a row");return {run:b,deletedCount:p.length,createdCount:N,previousAutoCount:g,newAutoCount:y}},{behavior:"immediate"})}catch(a){if(s)try{this.failHighlightRegenerationRun({runId:e.runId,workspaceId:e.workspaceId,errorCode:Qc});}catch{}throw a instanceof f?a:new f("DB_ERROR","Failed to complete highlight regeneration",a)}finally{o.close();}}completeHighlightRegeneration(e){return this.completeHighlightRegenerationRun(e)}replaceAutoHighlightsAtomically(e){return this.completeHighlightRegenerationRun(e)}listTimeline(e,n,r={}){let o=typeof e=="string"?{...r,threadId:e,workspaceId:n}:e;C(o.threadId,"threadId"),C(o.workspaceId,"workspaceId");let s=il(o);if(!fs$1.existsSync(this.resolveDbPath()))return null;let a=this.openHandle(false);try{if(!this.findThread(a.db,o.threadId,o.workspaceId))return null;let d=a.db.select({maxSeq:drizzleOrm.sql`COALESCE(MAX(${U.seq}), 0)`}).from(U).where(drizzleOrm.eq(U.thread_id,o.threadId)).get()?.maxSeq??0,u;o.beforeSeq!==void 0?u=a.db.select().from(U).where(drizzleOrm.and(drizzleOrm.eq(U.thread_id,o.threadId),drizzleOrm.lt(U.seq,o.beforeSeq))).orderBy(drizzleOrm.desc(U.seq)).limit(s+1).all().reverse():o.afterSeq!==void 0?u=a.db.select().from(U).where(drizzleOrm.and(drizzleOrm.eq(U.thread_id,o.threadId),drizzleOrm.sql`${U.seq} > ${o.afterSeq}`)).orderBy(drizzleOrm.asc(U.seq)).limit(s+1).all():u=a.db.select().from(U).where(drizzleOrm.eq(U.thread_id,o.threadId)).orderBy(drizzleOrm.desc(U.seq)).limit(s+1).all().reverse();let c=u.length>s,l=o.afterSeq!==void 0?u.slice(0,s):c?u.slice(1):u,p=!1,g=l[0];return g&&(p=!!a.db.select({id:U.id}).from(U).where(drizzleOrm.and(drizzleOrm.eq(U.thread_id,o.threadId),drizzleOrm.lt(U.seq,g.seq))).limit(1).get()),{items:l,latestSeq:d,hasMoreOlder:p}}catch(d){throw d instanceof f?d:new f("DB_ERROR","Failed to list thread timeline",d)}finally{a.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=dl(e),r=_n(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(a=>{let d=this.findThread(a,e.threadId,e.workspaceId);if(d||be(`Thread ${e.threadId} not found`),n.source==="auto"){let g=a.select().from(P).where(drizzleOrm.and(drizzleOrm.eq(P.thread_id,e.threadId),drizzleOrm.eq(P.source_task_id,n.sourceTaskId),drizzleOrm.eq(P.detector_version,n.detectorVersion),drizzleOrm.eq(P.content_fingerprint,n.contentFingerprint))).orderBy(drizzleOrm.asc(P.created_at),drizzleOrm.asc(P.id)).limit(1).get();if(g)return g}let u=e.id??hn("thl"),c={id:u,thread_id:e.threadId,source:n.source,kind:n.kind,status:"active",text:n.text,covers_from_task_id:n.coversFromTaskId,covers_to_task_id:n.coversToTaskId,revision:0,created_at:o,updated_at:o,agent_id:n.agentId,source_task_id:n.sourceTaskId,detector_version:n.detectorVersion,content_fingerprint:n.contentFingerprint,dismissed_at:null};a.insert(P).values(c).run();let l=a.select().from(P).where(drizzleOrm.eq(P.id,u)).get();if(!l)throw new f("DB_ERROR","Highlight insert did not return a row");let p=kn(a,d.id)+1;return Tn(a,d.id)||(wn(a,d,r,o,p),p+=1),or(a,l,r,o,"thread.highlight.created",p),l},{behavior:"immediate"})}catch(a){throw a instanceof f?a:new f("DB_ERROR","Failed to create thread highlight",a)}finally{s.close();}}updateHighlight(e){C(e.threadId,"threadId"),C(e.workspaceId,"workspaceId"),C(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&F("expectedRevision must be a non-negative integer"),e.text===void 0&&e.kind===void 0&&e.coversFromTaskId===void 0&&e.coversToTaskId===void 0&&F("highlight update requires at least one field"),e.kind!==void 0&&Oo(e.kind);let n=e.text===void 0?void 0:vo(e.text),r=_n(e),o=new Date().toISOString(),s=this.openHandle(true);try{return s.db.transaction(a=>{let d=this.findThread(a,e.threadId,e.workspaceId);d||be(`Thread ${e.threadId} not found`);let u=a.select().from(P).where(drizzleOrm.and(drizzleOrm.eq(P.id,e.highlightId),drizzleOrm.eq(P.thread_id,d.id))).limit(1).get();if(u||be(`Highlight ${e.highlightId} not found`),u.revision!==e.expectedRevision)throw new En(d.id,u.id,e.expectedRevision,u.revision);if(u.status!=="active")throw new En(d.id,u.id,e.expectedRevision,u.revision);let c=e.kind??u.kind,l=n??u.text,p=e.coversFromTaskId??u.covers_from_task_id,g=e.coversToTaskId??u.covers_to_task_id;(!l||p.length===0||g.length===0)&&F("highlight projection is incomplete");let m=c!==u.kind||l!==u.text||p!==u.covers_from_task_id||g!==u.covers_to_task_id,R=r.actorType==="user"&&u.source==="auto"&&m?"manual":u.source;if(!(m||R!==u.source))return u;let T=u.revision+1;a.update(P).set({source:R,kind:c,text:l,covers_from_task_id:p,covers_to_task_id:g,revision:T,updated_at:o}).where(drizzleOrm.and(drizzleOrm.eq(P.id,u.id),drizzleOrm.eq(P.revision,u.revision))).run();let N=a.select().from(P).where(drizzleOrm.eq(P.id,u.id)).get();if(!N)throw new f("DB_ERROR","Highlight update did not return a row");let x=kn(a,d.id)+1;return Tn(a,d.id)||(wn(a,d,r,o,x),x+=1),or(a,N,r,o,"thread.highlight.updated",x,u),N},{behavior:"immediate"})}catch(a){throw a instanceof f?a:new f("DB_ERROR","Failed to update thread highlight",a)}finally{s.close();}}dismissHighlight(e){C(e.threadId,"threadId"),C(e.workspaceId,"workspaceId"),C(e.highlightId,"highlightId"),(!Number.isInteger(e.expectedRevision)||e.expectedRevision<0)&&F("expectedRevision must be a non-negative integer");let n=_n(e),r=new Date().toISOString(),o=this.openHandle(true);try{return o.db.transaction(s=>{let a=this.findThread(s,e.threadId,e.workspaceId);a||be(`Thread ${e.threadId} not found`);let d=s.select().from(P).where(drizzleOrm.and(drizzleOrm.eq(P.id,e.highlightId),drizzleOrm.eq(P.thread_id,a.id))).limit(1).get();if(d||be(`Highlight ${e.highlightId} not found`),d.revision!==e.expectedRevision)throw new En(a.id,d.id,e.expectedRevision,d.revision);if(d.status==="dismissed")return d;let u=d.revision+1;s.update(P).set({status:"dismissed",text:null,revision:u,updated_at:r,dismissed_at:r}).where(drizzleOrm.and(drizzleOrm.eq(P.id,d.id),drizzleOrm.eq(P.revision,d.revision))).run();let c=s.select().from(P).where(drizzleOrm.eq(P.id,d.id)).get();if(!c)throw new f("DB_ERROR","Highlight dismissal did not return a row");let l=kn(s,a.id)+1;return Tn(s,a.id)||(wn(s,a,n,r,l),l+=1),or(s,c,n,r,"thread.highlight.deleted",l,d),c},{behavior:"immediate"})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to dismiss thread highlight",s)}finally{o.close();}}listActiveHighlights(e,n,r={}){if(C(e,"threadId"),C(n,"workspaceId"),r.taskId!==void 0&&C(r.taskId,"taskId"),r.coversFromTaskId!==void 0&&C(r.coversFromTaskId,"coversFromTaskId"),r.coversToTaskId!==void 0&&C(r.coversToTaskId,"coversToTaskId"),!fs$1.existsSync(this.resolveDbPath()))return null;let o=this.openHandle(false);try{if(!this.findThread(o.db,e,n))return null;let a=o.db.select().from(P).where(drizzleOrm.and(drizzleOrm.eq(P.thread_id,e),drizzleOrm.eq(P.status,"active"))).orderBy(drizzleOrm.asc(P.created_at),drizzleOrm.asc(P.id)).all();if(r.taskId===void 0&&r.coversFromTaskId===void 0&&r.coversToTaskId===void 0)return a;let d=o.db.all(drizzleOrm.sql`
|
|
406
406
|
SELECT id, started_at FROM tasks WHERE thread_id = ${e}
|
|
407
407
|
ORDER BY started_at ASC, id ASC
|
|
408
|
-
`),u=new Map(d.map((g,m)=>[g.id,m])),c=r.taskId===void 0?void 0:u.get(r.taskId),l=r.coversFromTaskId===void 0?void 0:u.get(r.coversFromTaskId),p=r.coversToTaskId===void 0?void 0:u.get(r.coversToTaskId);return a.filter(g=>{let m=u.get(g.covers_from_task_id),R=u.get(g.covers_to_task_id);if(m===void 0||R===void 0)return !1;let w=Math.min(m,R),T=Math.max(m,R);return !(c!==void 0&&(c<w||c>T)||l!==void 0&&T<l||p!==void 0&&w>p)})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to list active thread highlights",s)}finally{o.close();}}listHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}getActiveHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}};h();st();mt();kt();rt();yt();
|
|
408
|
+
`),u=new Map(d.map((g,m)=>[g.id,m])),c=r.taskId===void 0?void 0:u.get(r.taskId),l=r.coversFromTaskId===void 0?void 0:u.get(r.coversFromTaskId),p=r.coversToTaskId===void 0?void 0:u.get(r.coversToTaskId);return a.filter(g=>{let m=u.get(g.covers_from_task_id),R=u.get(g.covers_to_task_id);if(m===void 0||R===void 0)return !1;let w=Math.min(m,R),T=Math.max(m,R);return !(c!==void 0&&(c<w||c>T)||l!==void 0&&T<l||p!==void 0&&w>p)})}catch(s){throw s instanceof f?s:new f("DB_ERROR","Failed to list active thread highlights",s)}finally{o.close();}}listHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}getActiveHighlights(e,n,r){return this.listActiveHighlights(e,n,r)}};h();st();mt();kt();rt();yt();Ir();var V=class extends f{reason;constructor(e,n="VALIDATION",r=e,o){super(n,r,o),this.name="CommonCodeRepositoryError",this.reason=e;}},ha="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function yl(){let t=crypto.randomBytes(16),e="";for(let n of t)e+=ha[n%ha.length];return e.slice(0,12)}function ma(){return `c_${yl()}`}function El(t){return typeof t=="string"&&Rr.includes(t)}function Rl(t){return typeof t=="string"&&Sr.includes(t)}function $t(t){if(!El(t))throw new V("COMMON_CODE_GROUP_INVALID","VALIDATION",`Unsupported common-code group: ${t}`)}function _a(t){if(!Rl(t))throw new V("COMMON_CODE_COLOR_INVALID","VALIDATION",`Unsupported common-code color: ${t}`)}function ka(t){let e=typeof t=="string"?t.trim():"",n=[...e].length;if(n<1||n>20)throw new V("COMMON_CODE_NAME_INVALID","VALIDATION","Common-code names must contain 1 to 20 Unicode characters");return e}function Ut(t){if(typeof t!="string"||t.trim().length===0)throw new V("COMMON_CODE_WORKSPACE_INVALID","VALIDATION","Workspace id is required for a user common code")}function ar(t){if(typeof t!="string"||t.trim().length===0)throw new V("COMMON_CODE_CODE_INVALID","VALIDATION","Common-code code is required")}function nt(t,e){return drizzleOrm.and(drizzleOrm.eq(S.code_group,t),drizzleOrm.or(drizzleOrm.isNull(S.workspace_id),drizzleOrm.eq(S.workspace_id,e)))}var dr=class extends ge{dbPath;constructor(e={}){super(),e.dbPath?this.dbPath=e.dbPath:e.dbRoot&&(this.dbPath=Te.join(e.dbRoot,".crewx","crewx.db"));}resolveDbPath(){return this.dbPath??super.resolveDbPath()}openHandle(e){let n=this.resolveDbPath();if(!e&&!fs$1.existsSync(n))throw new f("NOT_FOUND","Database not found");e&&fs$1.mkdirSync(Te.dirname(n),{recursive:true});let r=j(n);if(e)try{xe(r.db,n);}catch(o){throw r.close(),o}return r}listSelectable(e,n){if($t(e),Ut(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(S).where(drizzleOrm.and(nt(e,n),drizzleOrm.eq(S.is_archived,0))).orderBy(drizzleOrm.asc(S.sort_order),drizzleOrm.asc(S.code)).all()}catch(o){throw new f("DB_ERROR","Failed to list selectable common codes",o)}finally{r.close();}}listForHistory(e,n){if($t(e),Ut(n),!this.dbExists())return [];let r=this.openHandle(false);try{return r.db.select().from(S).where(nt(e,n)).orderBy(drizzleOrm.asc(S.sort_order),drizzleOrm.asc(S.code)).all()}catch(o){throw new f("DB_ERROR","Failed to list common-code history",o)}finally{r.close();}}reorder(e){let n=e.group;if($t(n),Ut(e.workspaceId),!Array.isArray(e.codes)||e.codes.length===0)throw new V("COMMON_CODE_REORDER_INVALID","VALIDATION","At least one common-code code is required for reordering");for(let o of e.codes)ar(o);if(new Set(e.codes).size!==e.codes.length)throw new V("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder entries must be unique");if(!this.dbExists())throw new V("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder scope does not exist");let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(S).where(nt(n,e.workspaceId)).all(),a=s.filter(m=>m.is_archived===0),d=new Set(s.map(m=>m.code)),u=new Set(a.map(m=>m.code)),c=e.codes.find(m=>!d.has(m));if(c)throw new V("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not available in this scope: ${n}/${c}`);if(e.codes.length!==a.length||e.codes.some(m=>!u.has(m)))throw new V("COMMON_CODE_REORDER_INVALID","VALIDATION","Common-code reorder must contain every non-archived code in the scope");let l=new Map(a.map(m=>[m.code,m])),p=e.codes.map(m=>{let R=l.get(m);if(!R)throw new V("COMMON_CODE_REORDER_INVALID","VALIDATION",`Common code is not selectable in this scope: ${n}/${m}`);return R}),g;for(let[m,R]of p.entries())R.sort_order!==m&&(g??=new Date().toISOString(),o.update(S).set({sort_order:m,updated_at:g}).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,n),drizzleOrm.eq(S.code,R.code))).run());return o.select().from(S).where(nt(n,e.workspaceId)).orderBy(drizzleOrm.asc(S.sort_order),drizzleOrm.asc(S.code)).all()},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to reorder common codes",o)}finally{r.close();}}resolve(e,n){if($t(e),ar(n),!this.dbExists())return null;let r=this.openHandle(false);try{return r.db.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.code,n))).limit(1).get()??null}catch(o){throw new f("DB_ERROR","Failed to resolve common code",o)}finally{r.close();}}createThreadState(e){Ut(e.workspaceId);let n=ka(e.name);_a(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{if(o.select({code:S.code}).from(S).where(drizzleOrm.and(nt("THREAD_STATE",e.workspaceId),drizzleOrm.eq(S.is_archived,0),drizzleOrm.eq(S.code_name,n))).limit(1).get())throw new V("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`);let a=o.select({maxSortOrder:drizzleOrm.sql`max(${S.sort_order})`}).from(S).where(nt("THREAD_STATE",e.workspaceId)).get(),d=new Date().toISOString(),u=ma();for(;o.select({code:S.code}).from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,"THREAD_STATE"),drizzleOrm.eq(S.code,u))).limit(1).get();)u=ma();o.insert(S).values({code_group:"THREAD_STATE",code:u,code_name:n,color:e.color,sort_order:(a?.maxSortOrder??-1)+1,workspace_id:e.workspaceId,is_builtin:0,is_archived:0,metadata:null,created_at:d,updated_at:d}).run();let c=o.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,"THREAD_STATE"),drizzleOrm.eq(S.code,u))).limit(1).get();if(!c)throw new f("DB_ERROR","Created common code could not be read back");return c},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to create thread state common code",o)}finally{r.close();}}updateDisplay(e){if($t(e.group),ar(e.code),Ut(e.workspaceId),e.name===void 0&&e.color===void 0)throw new V("COMMON_CODE_UPDATE_EMPTY","VALIDATION","At least one display value is required");let n=e.name===void 0||e.name===null?e.name:ka(e.name);e.color!==void 0&&_a(e.color);let r=this.openHandle(true);try{return r.db.transaction(o=>{let s=o.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e.group),drizzleOrm.eq(S.code,e.code))).limit(1).get();if(!s)throw new V("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e.group}/${e.code}`);if(this.assertOwnership(s,e.workspaceId),n===null&&s.is_builtin!==1)throw new V("COMMON_CODE_NAME_INVALID","VALIDATION","User common-code names cannot be cleared");if(typeof n=="string"&&s.is_archived===0){let u=drizzleOrm.and(nt(e.group,e.workspaceId),drizzleOrm.eq(S.is_archived,0));if(o.select({code:S.code}).from(S).where(drizzleOrm.and(u,drizzleOrm.eq(S.code_name,n),drizzleOrm.sql`${S.code} <> ${e.code}`)).limit(1).get())throw new V("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${n}`)}let a={updated_at:new Date().toISOString()};e.name!==void 0&&(a.code_name=n??null),e.color!==void 0&&(a.color=e.color),o.update(S).set(a).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e.group),drizzleOrm.eq(S.code,e.code))).run();let d=o.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e.group),drizzleOrm.eq(S.code,e.code))).limit(1).get();if(!d)throw new f("DB_ERROR","Updated common code could not be read back");return d},{behavior:"immediate"})}catch(o){throw o instanceof f?o:new f("DB_ERROR","Failed to update common-code display values",o)}finally{r.close();}}archive(e,n,r,o=true){if($t(e),ar(n),Ut(r),typeof o!="boolean")throw new V("COMMON_CODE_ARCHIVE_INVALID","VALIDATION","Archive state must be boolean");let s=this.openHandle(true);try{return s.db.transaction(a=>{let d=a.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.code,n))).limit(1).get();if(!d)throw new V("COMMON_CODE_NOT_FOUND","NOT_FOUND",`Common code not found: ${e}/${n}`);if(d.is_builtin===1)throw new V("COMMON_CODE_BUILTIN_ARCHIVE_FORBIDDEN","VALIDATION","Builtin common codes cannot be archived");if(this.assertOwnership(d,r),!o&&d.code_name!==null&&a.select({code:S.code}).from(S).where(drizzleOrm.and(nt(e,r),drizzleOrm.eq(S.is_archived,0),drizzleOrm.eq(S.code_name,d.code_name),drizzleOrm.ne(S.code,n))).limit(1).get())throw new V("COMMON_CODE_NAME_CONFLICT","CONFLICT",`Common-code name is already in use: ${d.code_name}`);a.update(S).set({is_archived:o?1:0,updated_at:new Date().toISOString()}).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.code,n))).run();let u=a.select().from(S).where(drizzleOrm.and(drizzleOrm.eq(S.code_group,e),drizzleOrm.eq(S.code,n))).limit(1).get();if(!u)throw new f("DB_ERROR","Archived common code could not be read back");return u},{behavior:"immediate"})}catch(a){throw a instanceof f?a:new f("DB_ERROR","Failed to archive common code",a)}finally{s.close();}}assertOwnership(e,n){if(e.workspace_id!==null&&e.workspace_id!==n)throw new V("COMMON_CODE_SCOPE_FORBIDDEN","VALIDATION","Workspace does not own this common code")}};function Al(t){return t.replace(/<crewx_thread_context[^>]*>[\s\S]*?<\/crewx_thread_context>/g,"").replace(/<conversation_history[^>]*>[\s\S]*?<\/conversation_history>/g,"").split(`
|
|
409
409
|
`).filter(o=>!(o.startsWith("Loaded ")&&o.includes("layouts from")||o.includes("[dotenv@")||o.includes("[Nest]")&&o.includes("DEBUG")||o.startsWith("Registered custom layout:")||o.startsWith("Updated custom layout:"))).join(`
|
|
410
|
-
`).trim()}function
|
|
411
|
-
`):o&&typeof o=="object"&&o.result!==void 0&&(r=o.result||"");}catch{r=
|
|
412
|
-
`)[0].slice(0,200)),n.push({id:`${r.id}-assistant`,text:a,isAssistant:true,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:d});}}return n}};var
|
|
410
|
+
`).trim()}function vl(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 Ol(t,e,n){if(!t||e==="failed"&&Zn(t,n))return "";let r=t;try{let o=JSON.parse(r);Array.isArray(o)?r=o.filter(s=>s?.type==="text"&&s?.text).map(s=>s.text).join(`
|
|
411
|
+
`):o&&typeof o=="object"&&o.result!==void 0&&(r=o.result||"");}catch{r=Al(r);}return r}var ur=class{dbPath;constructor(e){this.dbPath=e??Te.join($o.homedir(),".crewx","crewx.db");}getThreadRepo(){return new nr({dbPath:this.dbPath})}getThreadHistoryRepo(){return new ir({dbPath:this.dbPath})}updateThread(e,n){this.getThreadRepo().updateThread(e,{title:n.title});}async ensureThread(e,n,r){let o=this.getThreadRepo(),s=o.findThreadById(e);if(s){if(s.platform!==n)throw new Error(`Thread '${e}' already exists with platform '${s.platform}' \u2014 cannot change to '${n}' (platform is immutable)`);return {created:false}}return o.ensureThread(e,n,r),{created:true}}async fetchHistory(e,n){let r=n?.limit??100,o=this.getThreadRepo(),s=o.findThreadById(e),a=o.findTopLevelTasks(e,void 0,r),d=new Set(["queued","cancelled"]);a=a.filter(p=>(!p.status||!d.has(p.status))&&(!n?.currentTraceId||p.trace_id!==n.currentTraceId));let u=s?.platform??"cli",c=this.rowsToMessages(a),l=n?.includeHighlights===false?void 0:this.readActiveHighlights(e,s?.workspace_id??null);return {threadId:e,platform:u,messages:c,...l?{highlights:l}:{},metadata:{title:s?.title??void 0,firstMessage:s?.first_message??void 0,lastMessage:s?.last_message??void 0,messageCount:s?.message_count??0,updatedAt:s?.updated_at?new Date(s.updated_at).getTime():void 0}}}async fetchThreadState(e){try{let n=this.getThreadHistoryRepo().getSnapshot(e);if(!n)return;let r=new dr({dbPath:this.dbPath}),o=(s,a)=>{try{return r.resolve(s,a)?.code_name||a}catch{return a}};return {...n.title?{title:n.title}:{},...n.priority?{priority:{code:n.priority,name:o("THREAD_PRIORITY",n.priority)}}:{},...n.state?{state:{code:n.state,name:o("THREAD_STATE",n.state)}}:{}}}catch{return}}async fetchHighlights(e){let n=this.getThreadRepo().findThreadById(e);return this.readActiveHighlights(e,n?.workspace_id??null)}async saveUserMessage(e,n,r,o){let{firstMessage:s}=this.getThreadRepo().saveUserMessage(e,n);return {id:e,firstMessage:s}}async saveAssistantMessage(e,n,r,o){return this.getThreadRepo().saveAssistantMessage(e,n),{id:e}}close(){}normalizeStatus(e){if(e&&!["success","completed","done"].includes(e)){if(["failed","error"].includes(e))return "failed";if(e==="running")return "running"}}readActiveHighlights(e,n){if(!n)return [];try{return (this.getThreadHistoryRepo().listActiveHighlights(e,n)??[]).filter(o=>typeof o.text=="string"&&o.text.length>0).map(o=>({id:o.id,text:o.text,kind:o.kind,source:o.source,coversFromTaskId:o.covers_from_task_id,coversToTaskId:o.covers_to_task_id,createdAt:o.created_at}))}catch{return}}rowsToMessages(e){let n=[];for(let r of e){r.prompt&&n.push({id:`${r.id}-user`,text:r.prompt,isAssistant:false,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:{caller_agent_id:r.caller_agent_id,task_id:r.id}});let o=this.normalizeStatus(r.status),s=vl(r.metadata),a=Ol(r.result,o??r.status??null,s);if(a||o==="running"||o==="failed"){let d={agent_id:r.agent_id,task_id:r.id};o&&(d.status=o),o==="failed"&&r.error&&(d.reason=r.error.split(`
|
|
412
|
+
`)[0].slice(0,200)),n.push({id:`${r.id}-assistant`,text:a,isAssistant:true,timestamp:new Date(r.started_at).getTime(),taskId:r.id,metadata:d});}}return n}};var bo=class extends Xe{name="conversation";_provider;unsubStart=null;unsubEnd=null;constructor(e){super(),this._provider=new ur(e?.dbPath);}get conversationProvider(){return this._provider}async afterUserMessage(e,n,r,o){}async afterAssistantMessage(e,n,r){}attach(e){this.unsubStart=e.on("task:start",async n=>{if(!n.threadId)return;let r=n.platform??"cli";try{let o=await this._provider.ensureThread(n.threadId,r,n.workspaceId),s=await this._provider.saveUserMessage(n.threadId,n.message??"");await this.afterUserMessage(n.threadId,s.id,o.created||s.firstMessage,n);}catch{}}),this.unsubEnd=e.on("task:end",async n=>{if(!n.result)return;let r=n.metadata?.threadId;if(!r)return;let o=n.agentRef?.replace(/^@/,"")??"";try{let{id:s}=await this._provider.saveAssistantMessage(r,n.result,o);await this.afterAssistantMessage(r,s,n);}catch{}});}detach(e){this.unsubStart?.(),this.unsubStart=null,this.unsubEnd?.(),this.unsubEnd=null,this._provider.close?.();}};exports.ConversationPlugin=bo;exports.FileLoggerPlugin=lr;exports.SqliteTracingPlugin=ko;
|