commandmate 0.3.1 → 0.3.3
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/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +11 -11
- package/.next/app-path-routes-manifest.json +1 -1
- package/.next/build-manifest.json +4 -4
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/cache/config.json +3 -3
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/1.pack +0 -0
- package/.next/cache/webpack/client-production/2.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack.old +0 -0
- package/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js +1 -1
- package/.next/server/app/api/external-apps/route.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +1 -1
- package/.next/server/app/api/ollama/models/route.js +1 -0
- package/.next/server/app/api/ollama/models/route.js.nft.json +1 -0
- package/.next/server/app/api/ollama/models.body +1 -0
- package/.next/server/app/api/ollama/models.meta +1 -0
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js +7 -7
- package/.next/server/app/api/repositories/restore/route.js +3 -3
- package/.next/server/app/api/repositories/route.js +13 -11
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +9 -0
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +4 -0
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +8 -3
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +10 -5
- package/.next/server/chunks/2314.js +1 -0
- package/.next/server/chunks/3860.js +1 -1
- package/.next/server/chunks/4559.js +1 -1
- package/.next/server/chunks/539.js +10 -10
- package/.next/server/chunks/5853.js +1 -1
- package/.next/server/chunks/6228.js +1 -0
- package/.next/server/chunks/7425.js +112 -37
- package/.next/server/chunks/7566.js +1 -1
- package/.next/server/chunks/8693.js +1 -1
- package/.next/server/chunks/9446.js +1 -0
- package/.next/server/functions-config-manifest.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/8091-274bc0716106e7fc.js +1 -0
- package/.next/static/chunks/app/page-060057e02b841125.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-78580947c201d698.js +1 -0
- package/.next/static/chunks/{main-db79434ee4a6c931.js → main-2feda12a4d321111.js} +1 -1
- package/.next/static/css/e85de230ef5ddc40.css +3 -0
- package/.next/trace +5 -5
- package/.next/types/app/api/ollama/models/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/execution-logs/[logId]/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/execution-logs/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/schedules/[scheduleId]/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/schedules/route.ts +343 -0
- package/README.md +74 -76
- package/dist/cli/utils/docs-reader.d.ts.map +1 -1
- package/dist/cli/utils/docs-reader.js +1 -0
- package/dist/server/server.js +5 -0
- package/dist/server/src/config/cmate-constants.js +79 -0
- package/dist/server/src/config/schedule-config.js +60 -0
- package/dist/server/src/lib/auto-yes-manager.js +2 -2
- package/dist/server/src/lib/claude-executor.js +158 -0
- package/dist/server/src/lib/cli-patterns.js +73 -9
- package/dist/server/src/lib/cli-tools/gemini.js +81 -22
- package/dist/server/src/lib/cli-tools/manager.js +4 -2
- package/dist/server/src/lib/cli-tools/types.js +64 -2
- package/dist/server/src/lib/cli-tools/vibe-local.js +163 -0
- package/dist/server/src/lib/cmate-parser.js +262 -0
- package/dist/server/src/lib/db-instance.js +3 -0
- package/dist/server/src/lib/db-migrations.js +145 -2
- package/dist/server/src/lib/db.js +51 -1
- package/dist/server/src/lib/env-sanitizer.js +57 -0
- package/dist/server/src/lib/prompt-detector.js +4 -3
- package/dist/server/src/lib/response-poller.js +22 -11
- package/dist/server/src/lib/schedule-manager.js +401 -0
- package/dist/server/src/lib/selected-agents-validator.js +99 -0
- package/dist/server/src/types/cmate.js +6 -0
- package/dist/server/src/types/sidebar.js +9 -4
- package/package.json +2 -1
- package/.next/server/chunks/7536.js +0 -1
- package/.next/static/chunks/8091-925542bdfc843dce.js +0 -1
- package/.next/static/chunks/app/page-238b5a70d8c101e9.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-a556551ce5c69dec.js +0 -1
- package/.next/static/css/b9ea6a4fad17dc32.css +0 -3
- /package/.next/static/{hmAjbCPjxX_C0Os7rphI1 → O7EDFfAYQNe_HRbORxQAC}/_buildManifest.js +0 -0
- /package/.next/static/{hmAjbCPjxX_C0Os7rphI1 → O7EDFfAYQNe_HRbORxQAC}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";exports.id=7425,exports.ids=[7425],exports.modules={16672:(e,t,s)=>{s.d(t,{ZP:()=>a}),s(92048);var r=s(55315);function a(){let e=(0,r.dirname)(__dirname);return e.includes("/lib/node_modules/")||e.includes("\\node_modules\\")||e.includes("/node_modules/commandmate")}s(19801)},43753:(e,t,s)=>{s.d(t,{F:()=>a});let r=["/etc","/usr","/bin","/sbin","/var","/tmp","/dev","/sys","/proc"];function a(e){return r.some(t=>e.startsWith(t))}},97425:(e,t,s)=>{s.d(t,{
|
|
1
|
+
"use strict";exports.id=7425,exports.ids=[7425],exports.modules={16672:(e,t,s)=>{s.d(t,{ZP:()=>a}),s(92048);var r=s(55315);function a(){let e=(0,r.dirname)(__dirname);return e.includes("/lib/node_modules/")||e.includes("\\node_modules\\")||e.includes("/node_modules/commandmate")}s(19801)},43753:(e,t,s)=>{s.d(t,{F:()=>a});let r=["/etc","/usr","/bin","/sbin","/var","/tmp","/dev","/sys","/proc"];function a(e){return r.some(t=>e.startsWith(t))}},83513:(e,t,s)=>{s.d(t,{Y1:()=>o,_7:()=>a,tK:()=>r});let r=["claude","codex","gemini","vibe-local"];function a(e){return r.includes(e)}let o=/^[a-zA-Z0-9][a-zA-Z0-9._:/-]*$/},97425:(e,t,s)=>{s.r(t),s.d(t,{closeDbInstance:()=>p,getDbInstance:()=>c});var r=s(85890),a=s.n(r),o=s(55315),i=s.n(o),n=s(75748);let l=[{version:1,name:"initial-schema",up:e=>{(0,n.qZ)(e)},down:e=>{e.exec("DROP TABLE IF EXISTS session_states;"),e.exec("DROP TABLE IF EXISTS chat_messages;"),e.exec("DROP TABLE IF EXISTS worktrees;")}},{version:2,name:"add-multi-repo-and-memo-support",up:e=>{e.exec(`
|
|
2
2
|
ALTER TABLE worktrees ADD COLUMN repository_path TEXT;
|
|
3
3
|
ALTER TABLE worktrees ADD COLUMN repository_name TEXT;
|
|
4
4
|
ALTER TABLE worktrees ADD COLUMN memo TEXT;
|
|
@@ -372,16 +372,82 @@
|
|
|
372
372
|
-- 6. Recreate original indexes
|
|
373
373
|
CREATE INDEX idx_external_apps_path_prefix ON external_apps(path_prefix);
|
|
374
374
|
CREATE INDEX idx_external_apps_enabled ON external_apps(enabled);
|
|
375
|
-
`),console.log("✓ Removed issue_no column from external_apps table")}}
|
|
375
|
+
`),console.log("✓ Removed issue_no column from external_apps table")}},{version:17,name:"add-scheduled-executions-and-execution-logs",up:e=>{e.exec(`
|
|
376
|
+
DELETE FROM chat_messages WHERE worktree_id NOT IN (SELECT id FROM worktrees);
|
|
377
|
+
`),e.exec(`
|
|
378
|
+
DELETE FROM session_states WHERE worktree_id NOT IN (SELECT id FROM worktrees);
|
|
379
|
+
`),e.exec(`
|
|
380
|
+
DELETE FROM worktree_memos WHERE worktree_id NOT IN (SELECT id FROM worktrees);
|
|
381
|
+
`),e.exec(`
|
|
382
|
+
UPDATE clone_jobs SET repository_id = NULL
|
|
383
|
+
WHERE repository_id IS NOT NULL AND repository_id NOT IN (SELECT id FROM repositories);
|
|
384
|
+
`),e.exec(`
|
|
385
|
+
CREATE TABLE scheduled_executions (
|
|
386
|
+
id TEXT PRIMARY KEY,
|
|
387
|
+
worktree_id TEXT NOT NULL,
|
|
388
|
+
cli_tool_id TEXT DEFAULT 'claude',
|
|
389
|
+
name TEXT NOT NULL,
|
|
390
|
+
message TEXT NOT NULL,
|
|
391
|
+
cron_expression TEXT,
|
|
392
|
+
enabled INTEGER DEFAULT 1,
|
|
393
|
+
last_executed_at INTEGER,
|
|
394
|
+
next_execute_at INTEGER,
|
|
395
|
+
created_at INTEGER NOT NULL,
|
|
396
|
+
updated_at INTEGER NOT NULL,
|
|
397
|
+
UNIQUE(worktree_id, name),
|
|
398
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
399
|
+
);
|
|
400
|
+
`),e.exec(`
|
|
401
|
+
CREATE INDEX idx_scheduled_executions_worktree
|
|
402
|
+
ON scheduled_executions(worktree_id);
|
|
403
|
+
`),e.exec(`
|
|
404
|
+
CREATE INDEX idx_scheduled_executions_enabled
|
|
405
|
+
ON scheduled_executions(enabled);
|
|
406
|
+
`),e.exec(`
|
|
407
|
+
CREATE TABLE execution_logs (
|
|
408
|
+
id TEXT PRIMARY KEY,
|
|
409
|
+
schedule_id TEXT NOT NULL,
|
|
410
|
+
worktree_id TEXT NOT NULL,
|
|
411
|
+
message TEXT NOT NULL,
|
|
412
|
+
result TEXT,
|
|
413
|
+
exit_code INTEGER,
|
|
414
|
+
status TEXT DEFAULT 'running' CHECK(status IN ('running', 'completed', 'failed', 'timeout', 'cancelled')),
|
|
415
|
+
started_at INTEGER NOT NULL,
|
|
416
|
+
completed_at INTEGER,
|
|
417
|
+
created_at INTEGER NOT NULL,
|
|
418
|
+
FOREIGN KEY (schedule_id) REFERENCES scheduled_executions(id) ON DELETE CASCADE,
|
|
419
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
420
|
+
);
|
|
421
|
+
`),e.exec(`
|
|
422
|
+
CREATE INDEX idx_execution_logs_schedule
|
|
423
|
+
ON execution_logs(schedule_id);
|
|
424
|
+
`),e.exec(`
|
|
425
|
+
CREATE INDEX idx_execution_logs_worktree
|
|
426
|
+
ON execution_logs(worktree_id);
|
|
427
|
+
`),e.exec(`
|
|
428
|
+
CREATE INDEX idx_execution_logs_status
|
|
429
|
+
ON execution_logs(status);
|
|
430
|
+
`),console.log("✓ Cleaned up orphan records"),console.log("✓ Created scheduled_executions table"),console.log("✓ Created execution_logs table"),console.log("✓ Created indexes for schedule tables")},down:e=>{e.exec("DROP INDEX IF EXISTS idx_execution_logs_status"),e.exec("DROP INDEX IF EXISTS idx_execution_logs_worktree"),e.exec("DROP INDEX IF EXISTS idx_execution_logs_schedule"),e.exec("DROP TABLE IF EXISTS execution_logs"),e.exec("DROP INDEX IF EXISTS idx_scheduled_executions_enabled"),e.exec("DROP INDEX IF EXISTS idx_scheduled_executions_worktree"),e.exec("DROP TABLE IF EXISTS scheduled_executions"),console.log("✓ Dropped scheduled_executions and execution_logs tables")}},{version:18,name:"add-selected-agents-column",up:e=>{e.exec(`
|
|
431
|
+
ALTER TABLE worktrees ADD COLUMN selected_agents TEXT;
|
|
432
|
+
`),e.exec(`
|
|
433
|
+
UPDATE worktrees SET selected_agents =
|
|
434
|
+
CASE
|
|
435
|
+
WHEN cli_tool_id NOT IN ('claude', 'codex')
|
|
436
|
+
THEN json_array(cli_tool_id, 'claude')
|
|
437
|
+
ELSE '["claude","codex"]'
|
|
438
|
+
END;
|
|
439
|
+
`),console.log("✓ Added selected_agents column to worktrees table"),console.log("✓ Initialized selected_agents based on cli_tool_id")},down:()=>{console.log("No rollback for selected_agents column (SQLite limitation)")}},{version:19,name:"add-vibe-local-model-column",up:e=>{e.exec(`
|
|
440
|
+
ALTER TABLE worktrees ADD COLUMN vibe_local_model TEXT DEFAULT NULL;
|
|
441
|
+
`),console.log("✓ Added vibe_local_model column to worktrees table")},down:()=>{console.log("No rollback for vibe_local_model column (SQLite limitation)")}}];function E(e){let t=s(92048),r=e;for(;r!==i().dirname(r);){let e=i().join(r,".git");if(t.existsSync(e)){let s=t.statSync(e);if(s.isDirectory())return r;if(s.isFile()){let s=t.readFileSync(e,"utf-8").trim().match(/^gitdir:\s*(.+)$/);if(s)return s[1].split("/.git/")[0]}}r=i().dirname(r)}return e}function _(e){try{let t=e.prepare("SELECT MAX(version) as version FROM schema_version").get();return t?.version??0}catch{return 0}}var d=s(98838);let T=null;function c(){if(!T){let e=(0,d.dU)().CM_DB_PATH,t=s(92048),r=i().dirname(e);t.existsSync(r)||t.mkdirSync(r,{recursive:!0,mode:448}),(T=new(a())(e)).pragma("foreign_keys = ON"),function(e){!function(e){e.exec(`
|
|
376
442
|
CREATE TABLE IF NOT EXISTS schema_version (
|
|
377
443
|
version INTEGER PRIMARY KEY,
|
|
378
444
|
name TEXT NOT NULL,
|
|
379
445
|
applied_at INTEGER NOT NULL
|
|
380
446
|
);
|
|
381
|
-
`)}(e);let t=
|
|
447
|
+
`)}(e);let t=_(e);console.log(`Current schema version: ${t}`);let s=l.filter(e=>e.version>t);if(0===s.length){console.log("✓ Schema is up to date");return}for(let t of(console.log(`Found ${s.length} pending migration(s)`),s)){console.log(`Applying migration ${t.version}: ${t.name}...`);try{e.transaction(()=>{t.up(e),e.prepare(`
|
|
382
448
|
INSERT INTO schema_version (version, name, applied_at)
|
|
383
449
|
VALUES (?, ?, ?)
|
|
384
|
-
`).run(t.version,t.name,Date.now())})(),console.log(`✓ Migration ${t.version} applied successfully`)}catch(s){let e=s instanceof Error?s.message:String(s);throw console.error(`✗ Migration ${t.version} failed:`,e),Error(`Migration ${t.version} (${t.name}) failed: ${e}`)}}console.log(`✓ All migrations completed. Current version: ${
|
|
450
|
+
`).run(t.version,t.name,Date.now())})(),console.log(`✓ Migration ${t.version} applied successfully`)}catch(s){let e=s instanceof Error?s.message:String(s);throw console.error(`✗ Migration ${t.version} failed:`,e),Error(`Migration ${t.version} (${t.name}) failed: ${e}`)}}console.log(`✓ All migrations completed. Current version: ${_(e)}`)}(T)}return T}function p(){T&&(T.close(),T=null)}},75748:(e,t,s)=>{s.d(t,{DF:()=>H,Db:()=>f,ER:()=>l,Ek:()=>v,GA:()=>D,GP:()=>S,GZ:()=>L,HE:()=>N,IH:()=>w,Mf:()=>g,Nf:()=>x,Nr:()=>b,OK:()=>O,Of:()=>c,Pv:()=>B,Q7:()=>P,R3:()=>k,S$:()=>A,VW:()=>C,Xv:()=>n,ZI:()=>F,_U:()=>u,_e:()=>M,dD:()=>y,dl:()=>h,ey:()=>X,gU:()=>E,j8:()=>I,ly:()=>_,pM:()=>G,qZ:()=>i,tn:()=>p,vX:()=>m,xr:()=>d,y:()=>T,zl:()=>R});var r=s(84770),a=s(55483);function o(e){return{id:e.id,worktreeId:e.worktree_id,role:e.role,content:e.content,summary:e.summary||void 0,timestamp:new Date(e.timestamp),logFileName:e.log_file_name||void 0,requestId:e.request_id||void 0,messageType:e.message_type||"normal",promptData:e.prompt_data?JSON.parse(e.prompt_data):void 0,cliToolId:e.cli_tool_id??"claude"}}function i(e){e.exec(`
|
|
385
451
|
CREATE TABLE IF NOT EXISTS worktrees (
|
|
386
452
|
id TEXT PRIMARY KEY,
|
|
387
453
|
name TEXT NOT NULL,
|
|
@@ -429,15 +495,16 @@
|
|
|
429
495
|
PRIMARY KEY (worktree_id, cli_tool_id),
|
|
430
496
|
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
431
497
|
);
|
|
432
|
-
`)}function
|
|
498
|
+
`)}function n(e,t){let s=`
|
|
433
499
|
SELECT
|
|
434
500
|
w.id, w.name, w.path, w.repository_path, w.repository_name, w.description,
|
|
435
501
|
w.last_user_message, w.last_user_message_at, w.last_message_summary,
|
|
436
502
|
w.updated_at, w.favorite, w.status, w.link, w.cli_tool_id, w.last_viewed_at,
|
|
503
|
+
w.selected_agents, w.vibe_local_model,
|
|
437
504
|
(SELECT MAX(timestamp) FROM chat_messages
|
|
438
505
|
WHERE worktree_id = w.id AND role = 'assistant') as last_assistant_message_at
|
|
439
506
|
FROM worktrees w
|
|
440
|
-
`,r=[];t&&(s+=" WHERE w.repository_path = ?",r.push(t)),s+=" ORDER BY w.updated_at DESC NULLS LAST";let
|
|
507
|
+
`,r=[];t&&(s+=" WHERE w.repository_path = ?",r.push(t)),s+=" ORDER BY w.updated_at DESC NULLS LAST";let o=e.prepare(s).all(...r),i=function(e,t){if(0===t.length)return new Map;let s=t.map(()=>"?").join(","),r=e.prepare(`
|
|
441
508
|
WITH ranked_messages AS (
|
|
442
509
|
SELECT
|
|
443
510
|
worktree_id,
|
|
@@ -450,12 +517,11 @@
|
|
|
450
517
|
FROM chat_messages
|
|
451
518
|
WHERE worktree_id IN (${s})
|
|
452
519
|
AND role = 'user'
|
|
453
|
-
AND cli_tool_id IN ('claude', 'codex', 'gemini')
|
|
454
520
|
)
|
|
455
521
|
SELECT worktree_id, cli_tool_id, content
|
|
456
522
|
FROM ranked_messages
|
|
457
523
|
WHERE rn = 1
|
|
458
|
-
`).all(...t),a=new Map;for(let e of t)a.set(e,{});for(let e of r){let t=a.get(e.worktree_id)||{};t[e.cli_tool_id]=e.content.substring(0,50),a.set(e.worktree_id,t)}return a}(e,
|
|
524
|
+
`).all(...t),a=new Map;for(let e of t)a.set(e,{});for(let e of r){let t=a.get(e.worktree_id)||{};t[e.cli_tool_id]=e.content.substring(0,50),a.set(e.worktree_id,t)}return a}(e,o.map(e=>e.id));return o.map(e=>{let t=i.get(e.id)||{};return{id:e.id,name:e.name,path:e.path,repositoryPath:e.repository_path||"",repositoryName:e.repository_name||"",description:e.description||void 0,lastUserMessage:e.last_user_message||void 0,lastUserMessageAt:e.last_user_message_at?new Date(e.last_user_message_at):void 0,lastMessageSummary:e.last_message_summary||void 0,lastMessagesByCli:t,updatedAt:e.updated_at?new Date(e.updated_at):void 0,lastViewedAt:e.last_viewed_at?new Date(e.last_viewed_at):void 0,lastAssistantMessageAt:e.last_assistant_message_at?new Date(e.last_assistant_message_at):void 0,favorite:1===e.favorite,status:e.status||null,link:e.link||void 0,cliToolId:e.cli_tool_id??"claude",selectedAgents:(0,a.e7)(e.selected_agents),vibeLocalModel:e.vibe_local_model??null}})}function l(e){return e.prepare(`
|
|
459
525
|
SELECT
|
|
460
526
|
repository_path as path,
|
|
461
527
|
repository_name as name,
|
|
@@ -464,16 +530,17 @@
|
|
|
464
530
|
WHERE repository_path IS NOT NULL
|
|
465
531
|
GROUP BY repository_path, repository_name
|
|
466
532
|
ORDER BY repository_name ASC
|
|
467
|
-
`).all().map(e=>({path:e.path,name:e.name,worktreeCount:e.worktree_count}))}function
|
|
533
|
+
`).all().map(e=>({path:e.path,name:e.name,worktreeCount:e.worktree_count}))}function E(e,t){let s=e.prepare(`
|
|
468
534
|
SELECT
|
|
469
535
|
w.id, w.name, w.path, w.repository_path, w.repository_name, w.description,
|
|
470
536
|
w.last_user_message, w.last_user_message_at, w.last_message_summary,
|
|
471
537
|
w.updated_at, w.favorite, w.status, w.link, w.cli_tool_id, w.last_viewed_at,
|
|
538
|
+
w.selected_agents, w.vibe_local_model,
|
|
472
539
|
(SELECT MAX(timestamp) FROM chat_messages
|
|
473
540
|
WHERE worktree_id = w.id AND role = 'assistant') as last_assistant_message_at
|
|
474
541
|
FROM worktrees w
|
|
475
542
|
WHERE w.id = ?
|
|
476
|
-
`).get(t);return s?{id:s.id,name:s.name,path:s.path,repositoryPath:s.repository_path||"",repositoryName:s.repository_name||"",description:s.description||void 0,lastUserMessage:s.last_user_message||void 0,lastUserMessageAt:s.last_user_message_at?new Date(s.last_user_message_at):void 0,lastMessageSummary:s.last_message_summary||void 0,updatedAt:s.updated_at?new Date(s.updated_at):void 0,lastViewedAt:s.last_viewed_at?new Date(s.last_viewed_at):void 0,lastAssistantMessageAt:s.last_assistant_message_at?new Date(s.last_assistant_message_at):void 0,favorite:1===s.favorite,status:s.status||null,link:s.link||void 0,cliToolId:s.cli_tool_id??"claude"}:null}function
|
|
543
|
+
`).get(t);return s?{id:s.id,name:s.name,path:s.path,repositoryPath:s.repository_path||"",repositoryName:s.repository_name||"",description:s.description||void 0,lastUserMessage:s.last_user_message||void 0,lastUserMessageAt:s.last_user_message_at?new Date(s.last_user_message_at):void 0,lastMessageSummary:s.last_message_summary||void 0,updatedAt:s.updated_at?new Date(s.updated_at):void 0,lastViewedAt:s.last_viewed_at?new Date(s.last_viewed_at):void 0,lastAssistantMessageAt:s.last_assistant_message_at?new Date(s.last_assistant_message_at):void 0,favorite:1===s.favorite,status:s.status||null,link:s.link||void 0,cliToolId:s.cli_tool_id??"claude",selectedAgents:(0,a.e7)(s.selected_agents),vibeLocalModel:s.vibe_local_model??null}:null}function _(e,t){e.prepare("DELETE FROM worktrees WHERE path = ? AND id != ?").run(t.path,t.id),e.prepare(`
|
|
477
544
|
INSERT INTO worktrees (
|
|
478
545
|
id, name, path, repository_path, repository_name, description,
|
|
479
546
|
last_user_message, last_user_message_at, last_message_summary, updated_at, cli_tool_id
|
|
@@ -490,15 +557,15 @@
|
|
|
490
557
|
last_message_summary = COALESCE(excluded.last_message_summary, worktrees.last_message_summary),
|
|
491
558
|
updated_at = COALESCE(excluded.updated_at, worktrees.updated_at),
|
|
492
559
|
cli_tool_id = COALESCE(excluded.cli_tool_id, worktrees.cli_tool_id)
|
|
493
|
-
`).run(t.id,t.name,t.path,t.repositoryPath||null,t.repositoryName||null,t.description||null,t.lastUserMessage||null,t.lastUserMessageAt?.getTime()||null,t.lastMessageSummary||null,t.updatedAt?.getTime()||null,t.cliToolId||"claude")}function
|
|
560
|
+
`).run(t.id,t.name,t.path,t.repositoryPath||null,t.repositoryName||null,t.description||null,t.lastUserMessage||null,t.lastUserMessageAt?.getTime()||null,t.lastMessageSummary||null,t.updatedAt?.getTime()||null,t.cliToolId||"claude")}function d(e,t,s){e.prepare(`
|
|
494
561
|
UPDATE worktrees
|
|
495
562
|
SET description = ?
|
|
496
563
|
WHERE id = ?
|
|
497
|
-
`).run(s||null,t)}function
|
|
564
|
+
`).run(s||null,t)}function T(e,t,s){e.prepare(`
|
|
498
565
|
UPDATE worktrees
|
|
499
566
|
SET link = ?
|
|
500
567
|
WHERE id = ?
|
|
501
|
-
`).run(s||null,t)}function
|
|
568
|
+
`).run(s||null,t)}function c(e,t,s){e.prepare(`
|
|
502
569
|
UPDATE worktrees
|
|
503
570
|
SET last_viewed_at = ?
|
|
504
571
|
WHERE id = ?
|
|
@@ -510,32 +577,32 @@
|
|
|
510
577
|
UPDATE worktrees
|
|
511
578
|
SET updated_at = ?
|
|
512
579
|
WHERE id = ?
|
|
513
|
-
`).run(s.getTime(),t)}(e,t.worktreeId,t.timestamp),"user"===t.role&&
|
|
580
|
+
`).run(s.getTime(),t)}(e,t.worktreeId,t.timestamp),"user"===t.role&&O(e,t.worktreeId,t.content,t.timestamp),{id:s,...t}}function u(e,t,s,r=50,a){let i=`
|
|
514
581
|
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id
|
|
515
582
|
FROM chat_messages
|
|
516
583
|
WHERE worktree_id = ? AND (? IS NULL OR timestamp < ?)
|
|
517
|
-
`,
|
|
584
|
+
`,n=[t,s?.getTime()||null,s?.getTime()||null];return a&&(i+=" AND cli_tool_id = ?",n.push(a)),i+=" ORDER BY timestamp DESC LIMIT ?",n.push(r),e.prepare(i).all(...n).map(o)}function m(e,t){let s=e.prepare(`
|
|
518
585
|
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id
|
|
519
586
|
FROM chat_messages
|
|
520
587
|
WHERE worktree_id = ? AND role = 'user'
|
|
521
588
|
ORDER BY timestamp DESC
|
|
522
589
|
LIMIT 1
|
|
523
|
-
`).get(t);return s?
|
|
590
|
+
`).get(t);return s?o(s):null}function N(e,t){e.prepare(`
|
|
524
591
|
DELETE FROM chat_messages
|
|
525
592
|
WHERE worktree_id = ?
|
|
526
|
-
`).run(t),console.log(`[deleteAllMessages] Deleted all messages for worktree: ${t}`)}function
|
|
593
|
+
`).run(t),console.log(`[deleteAllMessages] Deleted all messages for worktree: ${t}`)}function L(e,t,s){let r=e.prepare(`
|
|
527
594
|
DELETE FROM chat_messages
|
|
528
595
|
WHERE worktree_id = ? AND cli_tool_id = ?
|
|
529
|
-
`).run(t,s);return console.log(`[deleteMessagesByCliTool] Deleted ${r.changes} messages for worktree: ${t}, cliTool: ${s}`),r.changes}function
|
|
596
|
+
`).run(t,s);return console.log(`[deleteMessagesByCliTool] Deleted ${r.changes} messages for worktree: ${t}, cliTool: ${s}`),r.changes}function R(e,t,s="claude"){let r=e.prepare(`
|
|
530
597
|
SELECT worktree_id, cli_tool_id, last_captured_line, in_progress_message_id
|
|
531
598
|
FROM session_states
|
|
532
599
|
WHERE worktree_id = ? AND cli_tool_id = ?
|
|
533
|
-
`).get(t,s);return r?{worktreeId:r.worktree_id,cliToolId:r.cli_tool_id,lastCapturedLine:r.last_captured_line,inProgressMessageId:r.in_progress_message_id||null}:null}function
|
|
600
|
+
`).get(t,s);return r?{worktreeId:r.worktree_id,cliToolId:r.cli_tool_id,lastCapturedLine:r.last_captured_line,inProgressMessageId:r.in_progress_message_id||null}:null}function w(e,t,s,r){e.prepare(`
|
|
534
601
|
INSERT INTO session_states (worktree_id, cli_tool_id, last_captured_line)
|
|
535
602
|
VALUES (?, ?, ?)
|
|
536
603
|
ON CONFLICT(worktree_id, cli_tool_id) DO UPDATE SET
|
|
537
604
|
last_captured_line = excluded.last_captured_line
|
|
538
|
-
`).run(t,s,r)}function
|
|
605
|
+
`).run(t,s,r)}function g(e,t,s){!function(e,t,s,r){e.prepare(`
|
|
539
606
|
INSERT INTO session_states (worktree_id, cli_tool_id, last_captured_line, in_progress_message_id)
|
|
540
607
|
VALUES (?, ?, 0, ?)
|
|
541
608
|
ON CONFLICT(worktree_id, cli_tool_id) DO UPDATE SET
|
|
@@ -546,20 +613,20 @@
|
|
|
546
613
|
`).run(t,s):e.prepare(`
|
|
547
614
|
DELETE FROM session_states
|
|
548
615
|
WHERE worktree_id = ?
|
|
549
|
-
`).run(t)}function
|
|
616
|
+
`).run(t)}function O(e,t,s,r){let a=e.prepare(`
|
|
550
617
|
UPDATE worktrees
|
|
551
618
|
SET last_user_message = ?,
|
|
552
619
|
last_user_message_at = ?
|
|
553
620
|
WHERE id = ?
|
|
554
|
-
`),o=s.substring(0,200);a.run(o,r.getTime(),t)}function
|
|
621
|
+
`),o=s.substring(0,200);a.run(o,r.getTime(),t)}function A(e,t){let s=e.prepare(`
|
|
555
622
|
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id
|
|
556
623
|
FROM chat_messages
|
|
557
624
|
WHERE id = ?
|
|
558
|
-
`).get(t);return s?
|
|
625
|
+
`).get(t);return s?o(s):null}function D(e,t,s){e.prepare(`
|
|
559
626
|
UPDATE chat_messages
|
|
560
627
|
SET prompt_data = ?
|
|
561
628
|
WHERE id = ?
|
|
562
|
-
`).run(JSON.stringify(s),t)}function
|
|
629
|
+
`).run(JSON.stringify(s),t)}function S(e,t,s){let r=e.prepare(`
|
|
563
630
|
SELECT id, prompt_data
|
|
564
631
|
FROM chat_messages
|
|
565
632
|
WHERE worktree_id = ?
|
|
@@ -571,11 +638,11 @@
|
|
|
571
638
|
UPDATE chat_messages
|
|
572
639
|
SET prompt_data = ?
|
|
573
640
|
WHERE id = ?
|
|
574
|
-
`),o=0;for(let e of r)try{let t=JSON.parse(e.prompt_data);t.status="answered",t.answer="(answered via terminal)",t.answeredAt=new Date().toISOString(),a.run(JSON.stringify(t),e.id),o++}catch{}return o}function
|
|
641
|
+
`),o=0;for(let e of r)try{let t=JSON.parse(e.prompt_data);t.status="answered",t.answer="(answered via terminal)",t.answeredAt=new Date().toISOString(),a.run(JSON.stringify(t),e.id),o++}catch{}return o}function k(e,t,s){e.prepare(`
|
|
575
642
|
UPDATE worktrees
|
|
576
643
|
SET favorite = ?
|
|
577
644
|
WHERE id = ?
|
|
578
|
-
`).run(s?1:0,t)}function
|
|
645
|
+
`).run(s?1:0,t)}function x(e,t,s){e.prepare(`
|
|
579
646
|
UPDATE worktrees
|
|
580
647
|
SET status = ?
|
|
581
648
|
WHERE id = ?
|
|
@@ -583,37 +650,45 @@
|
|
|
583
650
|
UPDATE worktrees
|
|
584
651
|
SET cli_tool_id = ?
|
|
585
652
|
WHERE id = ?
|
|
586
|
-
`).run(s,t)}function
|
|
653
|
+
`).run(s,t)}function X(e,t,s){e.prepare(`
|
|
654
|
+
UPDATE worktrees
|
|
655
|
+
SET selected_agents = ?
|
|
656
|
+
WHERE id = ?
|
|
657
|
+
`).run(JSON.stringify(s),t)}function h(e,t,s){e.prepare(`
|
|
658
|
+
UPDATE worktrees
|
|
659
|
+
SET vibe_local_model = ?
|
|
660
|
+
WHERE id = ?
|
|
661
|
+
`).run(s,t)}function U(e){return{id:e.id,worktreeId:e.worktree_id,title:e.title,content:e.content,position:e.position,createdAt:new Date(e.created_at),updatedAt:new Date(e.updated_at)}}function f(e,t){return e.prepare(`
|
|
587
662
|
SELECT id, worktree_id, title, content, position, created_at, updated_at
|
|
588
663
|
FROM worktree_memos
|
|
589
664
|
WHERE worktree_id = ?
|
|
590
665
|
ORDER BY position ASC
|
|
591
|
-
`).all(t).map(
|
|
666
|
+
`).all(t).map(U)}function F(e,t){let s=e.prepare(`
|
|
592
667
|
SELECT id, worktree_id, title, content, position, created_at, updated_at
|
|
593
668
|
FROM worktree_memos
|
|
594
669
|
WHERE id = ?
|
|
595
|
-
`).get(t);return s?
|
|
670
|
+
`).get(t);return s?U(s):null}function y(e,t,s){let a=(0,r.randomUUID)(),o=Date.now(),i=s.title??"Memo",n=s.content??"";return e.prepare(`
|
|
596
671
|
INSERT INTO worktree_memos (id, worktree_id, title, content, position, created_at, updated_at)
|
|
597
672
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
598
|
-
`).run(a,t,i,
|
|
673
|
+
`).run(a,t,i,n,s.position,o,o),{id:a,worktreeId:t,title:i,content:n,position:s.position,createdAt:new Date(o),updatedAt:new Date(o)}}function b(e,t,s){let r=Date.now(),a=["updated_at = ?"],o=[r];void 0!==s.title&&(a.push("title = ?"),o.push(s.title)),void 0!==s.content&&(a.push("content = ?"),o.push(s.content)),o.push(t),e.prepare(`
|
|
599
674
|
UPDATE worktree_memos
|
|
600
675
|
SET ${a.join(", ")}
|
|
601
676
|
WHERE id = ?
|
|
602
|
-
`).run(...o)}function
|
|
677
|
+
`).run(...o)}function M(e,t){e.prepare(`
|
|
603
678
|
DELETE FROM worktree_memos
|
|
604
679
|
WHERE id = ?
|
|
605
|
-
`).run(t)}function
|
|
680
|
+
`).run(t)}function v(e,t,s){e.prepare(`
|
|
606
681
|
UPDATE worktrees
|
|
607
682
|
SET initial_branch = ?
|
|
608
683
|
WHERE id = ?
|
|
609
|
-
`).run(s,t)}function
|
|
684
|
+
`).run(s,t)}function P(e,t){let s=e.prepare(`
|
|
610
685
|
SELECT initial_branch
|
|
611
686
|
FROM worktrees
|
|
612
687
|
WHERE id = ?
|
|
613
|
-
`).get(t);return s?.initial_branch??null}function
|
|
688
|
+
`).get(t);return s?.initial_branch??null}function B(e,t){return e.prepare(`
|
|
614
689
|
SELECT id FROM worktrees WHERE repository_path = ?
|
|
615
|
-
`).all(t).map(e=>e.id)}function
|
|
690
|
+
`).all(t).map(e=>e.id)}function H(e,t){return{deletedCount:e.prepare(`
|
|
616
691
|
DELETE FROM worktrees WHERE repository_path = ?
|
|
617
|
-
`).run(t).changes}}function
|
|
692
|
+
`).run(t).changes}}function G(e,t){if(0===t.length)return{deletedCount:0};let s=t.map(()=>"?").join(",");return{deletedCount:e.prepare(`
|
|
618
693
|
DELETE FROM worktrees WHERE id IN (${s})
|
|
619
|
-
`).run(...t).changes}}},98838:(e,t,s)=>{s.d(t,{dU:()=>
|
|
694
|
+
`).run(...t).changes}}},98838:(e,t,s)=>{s.d(t,{dU:()=>u,Hb:()=>T,LI:()=>p});var r=s(55315),a=s.n(r),o=s(19801),i=s(16672),n=s(43753);function l(){return(0,i.ZP)()?a().join((0,o.homedir)(),".commandmate","data","cm.db"):a().resolve(process.cwd(),"data","cm.db")}function E(e){let t=a().resolve(e);if((0,i.ZP)()){let e=(0,o.homedir)();if(!t.startsWith(e))throw Error(`Security error: DB path must be within home directory: ${t}`)}else if((0,n.F)(t))throw Error(`Security error: DB path cannot be in system directory: ${t}`);return t}let _={CM_ROOT_DIR:"MCBD_ROOT_DIR",CM_PORT:"MCBD_PORT",CM_BIND:"MCBD_BIND",CM_LOG_LEVEL:"MCBD_LOG_LEVEL",CM_LOG_FORMAT:"MCBD_LOG_FORMAT",CM_LOG_DIR:"MCBD_LOG_DIR",CM_DB_PATH:"MCBD_DB_PATH"},d=new Set;function T(e){return function(e,t){let s=process.env[e];if(void 0!==s)return s;let r=process.env[t];if(void 0!==r)return d.has(t)||(console.warn(`[DEPRECATED] ${t} is deprecated, use ${e} instead`),d.add(t)),r}(e,_[e])}let c=!1;function p(){let e=T("CM_LOG_LEVEL")?.toLowerCase(),t=T("CM_LOG_FORMAT")?.toLowerCase();return{level:void 0!==e&&["debug","info","warn","error"].includes(e)?e:"info",format:"json"===t?"json":"text"}}function u(){let e;let t=T("CM_ROOT_DIR")||process.cwd(),s=parseInt(T("CM_PORT")||"3000",10),r=T("CM_BIND")||"127.0.0.1",o=T("CM_DB_PATH")||function(){let e=process.env.DATABASE_PATH;return e&&!c&&(console.warn("[DEPRECATED] DATABASE_PATH is deprecated. Use CM_DB_PATH instead."),c=!0),e}()||l();if(!t)throw Error("CM_ROOT_DIR (or MCBD_ROOT_DIR) is required");if(isNaN(s)||s<1||s>65535)throw Error(`Invalid CM_PORT: ${T("CM_PORT")}. Must be between 1 and 65535.`);if("127.0.0.1"!==r&&"0.0.0.0"!==r&&"localhost"!==r)throw Error(`Invalid CM_BIND: ${r}. Must be '127.0.0.1', '0.0.0.0', or 'localhost'.`);try{e=E(o)}catch{console.warn(`[Security] Invalid DB path "${o}", using default.`),e=E(l())}return{CM_ROOT_DIR:a().resolve(t),CM_PORT:s,CM_BIND:r,CM_DB_PATH:e}}},55483:(e,t,s)=>{s.d(t,{KE:()=>E,e7:()=>l});var r=s(83513);let a=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function o(e){return e.replace(a,"").replace(/[\n\r]/g," ").substring(0,100)}let i=["claude","codex"];function n(e){return 2!==e.length?{valid:!1,error:"Must be 2 elements"}:e.every(e=>"string"==typeof e&&r.tK.includes(e))?e[0]===e[1]?{valid:!1,error:"Duplicate tool IDs not allowed"}:{valid:!0,value:e}:{valid:!1,error:"Invalid CLI tool ID"}}function l(e){if(!e)return i;try{let t=JSON.parse(e);if(!Array.isArray(t))return console.warn(`[selected-agents] Invalid format in DB, falling back to default: ${o(e)}`),i;let s=n(t);if(!s.valid)return console.warn(`[selected-agents] Invalid data in DB (${s.error}), falling back to default: ${o(e)}`),i;return s.value}catch{return console.warn(`[selected-agents] JSON parse error in DB, falling back to default: ${o(e)}`),i}}function E(e){return Array.isArray(e)&&2===e.length?n(e):{valid:!1,error:"selected_agents must be an array of 2 elements"}}}};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
exports.id=7566,exports.ids=[7566],exports.modules={58359:()=>{},93739:()=>{},98241:(t,e,r)=>{"use strict";r.d(e,{s:()=>o});var n=r(55315),a=r.n(n),i=r(98838);function o(){return(0,i.Hb)("CM_LOG_DIR")||a().join(process.cwd(),"data","logs")}},40824:(t,e,r)=>{"use strict";r.d(e,{HI:()=>i,pC:()=>l,Gn:()=>m,H2:()=>w,n8:()=>h,KL:()=>f,WX:()=>d});var n=r(84770),a=r.n(n);let i="cm_auth_token",o=/^[0-9a-f]{64}$/,s={maxAttempts:5,lockoutDuration:9e5,cleanupInterval:36e5},l=86400,c=(()=>{let t=process.env.CM_AUTH_TOKEN_HASH||void 0;if(t){if(!function(t){return!!t&&o.test(t)}(t)){console.error(`[Security] CM_AUTH_TOKEN_HASH is not a valid 64-character hex string (got ${t.length} chars). Authentication will be disabled.`);return}return t}})(),u=function(){let t=process.env.CM_AUTH_EXPIRE,e=Date.now();if(t)try{return e+function(t){let e=t.match(/^(\d+)([hdm])$/);if(!e)throw Error(`Invalid duration format: "${t}". Use Nh, Nd, or Nm (e.g., "24h", "7d", "90m")`);let r=parseInt(e[1],10),n=e[2],a={h:36e5,d:864e5,m:6e4}[n];if(void 0===a)throw Error(`Invalid duration unit: "${n}"`);let i=r*a;if(i<36e5)throw Error(`Duration too short: minimum is 1h (60m). Got: "${t}"`);if(i>2592e6)throw Error(`Duration too long: maximum is 30d (720h). Got: "${t}"`);return i}(t)}catch{return e+864e5}return process.env.CM_AUTH_TOKEN_HASH?e+864e5:null}();function d(t){if(!c||!t||"string"!=typeof t||null!==u&&Date.now()>u)return!1;let e=a().createHash("sha256").update(t).digest("hex"),r=Buffer.from(e,"hex"),n=Buffer.from(c,"hex");return r.length===n.length&&a().timingSafeEqual(r,n)}function f(){return!!c}function h(){if(null===u)return 0;let t=u-Date.now();return t<=0?0:Math.floor(t/1e3)}function m(t){return{httpOnly:!0,sameSite:"strict",secure:!!process.env.CM_HTTPS_CERT,maxAge:t,path:"/"}}function w(){let t=new Map,e=setInterval(()=>{let e=Date.now();for(let[r,n]of t){let a=null===n.lockedUntil||e>n.lockedUntil,i=e-n.lastAttempt>s.lockoutDuration;a&&i&&t.delete(r)}},s.cleanupInterval);return e.unref&&e.unref(),{checkLimit(e){let r=t.get(e);if(!r)return{allowed:!0};if(null!==r.lockedUntil){let t=Date.now();if(t<r.lockedUntil)return{allowed:!1,retryAfter:Math.ceil((r.lockedUntil-t)/1e3)};r.attempts=0,r.lockedUntil=null}return{allowed:!0}},recordFailure(e){let r=Date.now(),n=t.get(e)||{attempts:0,lockedUntil:null,lastAttempt:r};n.attempts++,n.lastAttempt=r,n.attempts>=s.maxAttempts&&(n.lockedUntil=r+s.lockoutDuration),t.set(e,n)},recordSuccess(e){t.delete(e)},destroy(){clearInterval(e),t.clear()}}}},89287:(t,e,r)=>{"use strict";r.d(e,{Z:()=>o});let n=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,a=/Request ID: ([^\s\n]+)/,i=/Summary: (.+?)(?:\n─|$)/s;function o(t){let e={content:t},r=n.exec(t);r&&(e.logFileName=r[2]);let o=a.exec(t);o&&(e.requestId=o[1]);let s=i.exec(t);return s&&(e.summary=s[1].trim()),e}},62648:(t,e,r)=>{"use strict";r.d(e,{Lm:()=>I,Uv:()=>x,YI:()=>$,_f:()=>D,xd:()=>k,ym:()=>C});var n=r(10927),a=r(19377),i=r(92900),o=r(61282),s=r(21764),l=r(20629);let c=(0,s.promisify)(o.exec);function u(t){return t instanceof Error?t.message:String(t)}let d=["$","%","#"],f=null;async function h(){if(f)return f;let t=process.env.CLAUDE_PATH;if(t&&(/^[/a-zA-Z0-9._-]+$/.test(t)?!t.includes("..")||(console.log("[claude-session] CLAUDE_PATH contains path traversal sequence, ignoring"),!1):(console.log(`[claude-session] CLAUDE_PATH contains invalid characters, ignoring: ${t.substring(0,50)}`),!1)))try{return await (0,l.access)(t,l.constants.X_OK),f=t}catch{console.log(`[claude-session] CLAUDE_PATH is not executable: ${t}`)}try{let{stdout:t}=await c("which claude",{timeout:5e3});return f=t.trim()}catch{for(let t of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await c(`test -x "${t}"`,{timeout:1e3}),f=t}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}async function m(t,e=50){let r=await (0,n.xq)(t,{startLine:-e});return(0,a.vp)(r)}async function w(t){try{let e=(await m(t)).trim();if(""===e)return{healthy:!1,reason:"empty output"};if(a.V7.test(e))return{healthy:!0};let r=e.split("\n").filter(t=>""!==t.trim()),n=r.slice(-10).join("\n");for(let t of a.KJ)if(n.includes(t))return{healthy:!1,reason:`error pattern: ${t}`};for(let t of a.dR)if(t.test(n))return{healthy:!1,reason:`error pattern: ${t.source}`};let i=r[r.length-1]?.trim()??"";if(i.length>=40)return{healthy:!0};if(d.some(t=>!(!i.endsWith(t)||"%"===t&&/\d+%$/.test(i))))return{healthy:!1,reason:`shell prompt ending detected: ${i}`};return{healthy:!0}}catch{return{healthy:!1,reason:"capture error"}}}async function p(t){let e=await w(t);return!!e.healthy||(console.warn(`[health-check] Session ${t} unhealthy: ${e.reason}`),await (0,n.AJ)(t),!1)}async function g(t){await c("tmux set-environment -g -u CLAUDECODE 2>/dev/null || true"),await (0,n.Is)(t,"unset CLAUDECODE",!0),await new Promise(t=>setTimeout(t,100))}function y(t){return`mcbd-claude-${t}`}async function x(){try{return await c("which claude",{timeout:5e3}),!0}catch{return!1}}async function $(t){let e=y(t);if(!await (0,n.Hk)(e))return!1;let r=await w(e);return!!r.healthy||(console.warn(`[isClaudeRunning] Session ${e} unhealthy: ${r.reason}`),!1)}async function E(t,e=5e3){let r=Date.now();for(;Date.now()-r<e;){let e=await m(t);if(a.V7.test(e))return;await new Promise(t=>setTimeout(t,200))}throw Error(`Prompt detection timeout (${e}ms)`)}async function C(t){let{worktreeId:e,worktreePath:r}=t;if(!await x())throw Error("Claude CLI is not installed or not in PATH");let i=y(e);if(await (0,n.Hk)(i)&&await p(i)){console.log(`Claude session ${i} already exists and is healthy`);return}try{await (0,n.ed)({sessionName:i,workingDirectory:r,historyLimit:5e4}),await g(i);let t=await h();await (0,n.Is)(i,t,!0);let e=Date.now(),o=!1,s=!1;for(;Date.now()-e<15e3;){await new Promise(t=>setTimeout(t,300));try{let t=await m(i);if(a.V7.test(t)){await new Promise(t=>setTimeout(t,500)),console.log(`Claude initialized in ${Date.now()-e}ms`),o=!0;break}!s&&a.H3.test(t)&&(await (0,n.Is)(i,"",!0),s=!0,console.log("Trust dialog detected, sending Enter to confirm"))}catch{}}if(!o)throw Error("Claude initialization timeout (15000ms)");console.log(`Started Claude session: ${i}`)}catch(t){throw f=null,console.log(`[claude-session] Session start failed: ${u(t)}`),Error("Failed to start Claude session")}}async function k(t,e){let r=y(t);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist. Start the session first.`);let o=await m(r);a.V7.test(o)||await E(r,1e4),await new Promise(t=>setTimeout(t,500)),await (0,n.Is)(r,e,!1),await (0,n.Is)(r,"",!0),e.includes("\n")&&await (0,i.N)(r),console.log(`Sent message to Claude session: ${r}`)}async function I(t,e=1e3){let r=y(t);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist`);try{return await (0,n.xq)(r,{startLine:-e})}catch(t){throw Error(`Failed to capture Claude output: ${u(t)}`)}}async function D(t){let e=y(t);try{await (0,n.Hk)(e)&&(await (0,n.Is)(e,"",!1),await c(`tmux send-keys -t "${e}" C-d`),await new Promise(t=>setTimeout(t,500)));let t=await (0,n.AJ)(e);return t&&console.log(`Stopped Claude session: ${e}`),t}catch(t){return console.error(`Error stopping Claude session: ${u(t)}`),!1}}},19377:(t,e,r)=>{"use strict";r.d(e,{H3:()=>l,KJ:()=>y,Sg:()=>$,V7:()=>o,Wg:()=>w,_r:()=>f,bs:()=>function t(e){switch(e){case"claude":return{promptPattern:o,separatorPattern:s,thinkingPattern:a,skipPatterns:[/^─{10,}$/,/^[>❯]\s*$/,a,/^\s*[⎿⏋]\s+Tip:/,/^\s*Tip:/,/^\s*\?\s*for shortcuts/,/to interrupt\)/,d]};case"codex":return{promptPattern:c,separatorPattern:u,thinkingPattern:i,skipPatterns:[/^─.*─+$/,/^›\s*$/,/^›\s+(Implement|Find and fix|Type)/,i,/^\s*\d+%\s+context left/,/^\s*for shortcuts$/,/╭─+╮/,/╰─+╯/,/•\s*Ran\s+/,/^\s*└/,/^\s*│/,/\(.*esc to interrupt\)/,d]};case"gemini":return{promptPattern:m,separatorPattern:/^gemini\s+--\s+/m,thinkingPattern:/(?!)/m,skipPatterns:[/^gemini\s+--\s+/,m,/^\s*$/]};default:return t("claude")}},d8:()=>d,dR:()=>x,vp:()=>g,ww:()=>h});let n=(0,r(43895).h)("cli-patterns"),a=RegExp(`[✻✽⏺\xb7∴✢✳✶⦿◉●○◌◎⊙⊚⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\\s+.+…|esc to interrupt`,"m"),i=/•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m,o=/^[>❯](\s*$|\s+\S)/m,s=/^─{10,}$/m,l=/Yes, I trust this folder/m,c=/^›\s*/m,u=/^─.*Worked for.*─+$/m,d=/\[Pasted text #\d+/,f=500,h=3,m=/^(%|\$|.*@.*[%$#])\s*$/m;function w(t,e){let r;let o=n.withContext({cliToolId:t});switch(o.debug("detectThinking:check",{contentLength:e.length}),t){case"claude":default:r=a.test(e);break;case"codex":r=i.test(e);break;case"gemini":r=!1}return o.debug("detectThinking:result",{isThinking:r}),r}let p=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function g(t){return t.replace(p,"")}let y=["Claude Code cannot be launched inside another Claude Code session"],x=[/^Error:.*Claude Code/];function $(t){if("claude"===t)return{requireDefaultIndicator:!1}}},76966:(t,e,r)=>{"use strict";r.d(e,{o:()=>i});var n=r(75748),a=r(98636);async function i(t,e,r,i="claude"){let o=(0,n.vX)(t,e);if(o)try{await (0,a.xN)(e,o.content,r,i)}catch(t){console.error("[recordClaudeConversation] Failed to create log file:",t)}}},98636:(t,e,r)=>{"use strict";r.d(e,{e7:()=>f,xN:()=>d});var n=r(20629),a=r.n(n),i=r(55315),o=r.n(i),s=r(73853),l=r(98241);function c(t="claude"){return o().join((0,l.s)(),t)}async function u(t="claude"){let e=c(t);try{await a().access(e)}catch{await a().mkdir(e,{recursive:!0})}}async function d(t,e,r,n="claude"){await u(n);let i=function(t,e="claude"){let r=(0,s.WU)(new Date,"yyyy-MM-dd"),n=`${t}-${r}.md`,a=c(e);return o().join(a,n)}(t,n),l=(0,s.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),d="";try{d=await a().readFile(i,"utf-8")}catch{let e="claude"===n?"Claude Code":"codex"===n?"Codex CLI":"Gemini CLI";d=`# ${e} Conversation Log: ${t}
|
|
1
|
+
exports.id=7566,exports.ids=[7566],exports.modules={58359:()=>{},93739:()=>{},98241:(t,e,r)=>{"use strict";r.d(e,{s:()=>o});var n=r(55315),a=r.n(n),i=r(98838);function o(){return(0,i.Hb)("CM_LOG_DIR")||a().join(process.cwd(),"data","logs")}},40824:(t,e,r)=>{"use strict";r.d(e,{HI:()=>i,pC:()=>l,Gn:()=>m,H2:()=>w,n8:()=>h,KL:()=>f,WX:()=>d});var n=r(84770),a=r.n(n);let i="cm_auth_token",o=/^[0-9a-f]{64}$/,s={maxAttempts:5,lockoutDuration:9e5,cleanupInterval:36e5},l=86400,c=(()=>{let t=process.env.CM_AUTH_TOKEN_HASH||void 0;if(t){if(!function(t){return!!t&&o.test(t)}(t)){console.error(`[Security] CM_AUTH_TOKEN_HASH is not a valid 64-character hex string (got ${t.length} chars). Authentication will be disabled.`);return}return t}})(),u=function(){let t=process.env.CM_AUTH_EXPIRE,e=Date.now();if(t)try{return e+function(t){let e=t.match(/^(\d+)([hdm])$/);if(!e)throw Error(`Invalid duration format: "${t}". Use Nh, Nd, or Nm (e.g., "24h", "7d", "90m")`);let r=parseInt(e[1],10),n=e[2],a={h:36e5,d:864e5,m:6e4}[n];if(void 0===a)throw Error(`Invalid duration unit: "${n}"`);let i=r*a;if(i<36e5)throw Error(`Duration too short: minimum is 1h (60m). Got: "${t}"`);if(i>2592e6)throw Error(`Duration too long: maximum is 30d (720h). Got: "${t}"`);return i}(t)}catch{return e+864e5}return process.env.CM_AUTH_TOKEN_HASH?e+864e5:null}();function d(t){if(!c||!t||"string"!=typeof t||null!==u&&Date.now()>u)return!1;let e=a().createHash("sha256").update(t).digest("hex"),r=Buffer.from(e,"hex"),n=Buffer.from(c,"hex");return r.length===n.length&&a().timingSafeEqual(r,n)}function f(){return!!c}function h(){if(null===u)return 0;let t=u-Date.now();return t<=0?0:Math.floor(t/1e3)}function m(t){return{httpOnly:!0,sameSite:"strict",secure:!!process.env.CM_HTTPS_CERT,maxAge:t,path:"/"}}function w(){let t=new Map,e=setInterval(()=>{let e=Date.now();for(let[r,n]of t){let a=null===n.lockedUntil||e>n.lockedUntil,i=e-n.lastAttempt>s.lockoutDuration;a&&i&&t.delete(r)}},s.cleanupInterval);return e.unref&&e.unref(),{checkLimit(e){let r=t.get(e);if(!r)return{allowed:!0};if(null!==r.lockedUntil){let t=Date.now();if(t<r.lockedUntil)return{allowed:!1,retryAfter:Math.ceil((r.lockedUntil-t)/1e3)};r.attempts=0,r.lockedUntil=null}return{allowed:!0}},recordFailure(e){let r=Date.now(),n=t.get(e)||{attempts:0,lockedUntil:null,lastAttempt:r};n.attempts++,n.lastAttempt=r,n.attempts>=s.maxAttempts&&(n.lockedUntil=r+s.lockoutDuration),t.set(e,n)},recordSuccess(e){t.delete(e)},destroy(){clearInterval(e),t.clear()}}}},89287:(t,e,r)=>{"use strict";r.d(e,{Z:()=>o});let n=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,a=/Request ID: ([^\s\n]+)/,i=/Summary: (.+?)(?:\n─|$)/s;function o(t){let e={content:t},r=n.exec(t);r&&(e.logFileName=r[2]);let o=a.exec(t);o&&(e.requestId=o[1]);let s=i.exec(t);return s&&(e.summary=s[1].trim()),e}},62648:(t,e,r)=>{"use strict";r.d(e,{Lm:()=>I,Uv:()=>x,YI:()=>$,_f:()=>D,xd:()=>k,ym:()=>C});var n=r(10927),a=r(19377),i=r(92900),o=r(61282),s=r(21764),l=r(20629);let c=(0,s.promisify)(o.exec);function u(t){return t instanceof Error?t.message:String(t)}let d=["$","%","#"],f=null;async function h(){if(f)return f;let t=process.env.CLAUDE_PATH;if(t&&(/^[/a-zA-Z0-9._-]+$/.test(t)?!t.includes("..")||(console.log("[claude-session] CLAUDE_PATH contains path traversal sequence, ignoring"),!1):(console.log(`[claude-session] CLAUDE_PATH contains invalid characters, ignoring: ${t.substring(0,50)}`),!1)))try{return await (0,l.access)(t,l.constants.X_OK),f=t}catch{console.log(`[claude-session] CLAUDE_PATH is not executable: ${t}`)}try{let{stdout:t}=await c("which claude",{timeout:5e3});return f=t.trim()}catch{for(let t of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await c(`test -x "${t}"`,{timeout:1e3}),f=t}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}async function m(t,e=50){let r=await (0,n.xq)(t,{startLine:-e});return(0,a.vp)(r)}async function w(t){try{let e=(await m(t)).trim();if(""===e)return{healthy:!1,reason:"empty output"};if(a.V7.test(e))return{healthy:!0};let r=e.split("\n").filter(t=>""!==t.trim()),n=r.slice(-10).join("\n");for(let t of a.KJ)if(n.includes(t))return{healthy:!1,reason:`error pattern: ${t}`};for(let t of a.dR)if(t.test(n))return{healthy:!1,reason:`error pattern: ${t.source}`};let i=r[r.length-1]?.trim()??"";if(i.length>=40)return{healthy:!0};if(d.some(t=>!(!i.endsWith(t)||"%"===t&&/\d+%$/.test(i))))return{healthy:!1,reason:`shell prompt ending detected: ${i}`};return{healthy:!0}}catch{return{healthy:!1,reason:"capture error"}}}async function p(t){let e=await w(t);return!!e.healthy||(console.warn(`[health-check] Session ${t} unhealthy: ${e.reason}`),await (0,n.AJ)(t),!1)}async function g(t){await c("tmux set-environment -g -u CLAUDECODE 2>/dev/null || true"),await (0,n.Is)(t,"unset CLAUDECODE",!0),await new Promise(t=>setTimeout(t,100))}function y(t){return`mcbd-claude-${t}`}async function x(){try{return await c("which claude",{timeout:5e3}),!0}catch{return!1}}async function $(t){let e=y(t);if(!await (0,n.Hk)(e))return!1;let r=await w(e);return!!r.healthy||(console.warn(`[isClaudeRunning] Session ${e} unhealthy: ${r.reason}`),!1)}async function E(t,e=5e3){let r=Date.now();for(;Date.now()-r<e;){let e=await m(t);if(a.V7.test(e))return;await new Promise(t=>setTimeout(t,200))}throw Error(`Prompt detection timeout (${e}ms)`)}async function C(t){let{worktreeId:e,worktreePath:r}=t;if(!await x())throw Error("Claude CLI is not installed or not in PATH");let i=y(e);if(await (0,n.Hk)(i)&&await p(i)){console.log(`Claude session ${i} already exists and is healthy`);return}try{await (0,n.ed)({sessionName:i,workingDirectory:r,historyLimit:5e4}),await g(i);let t=await h();await (0,n.Is)(i,t,!0);let e=Date.now(),o=!1,s=!1;for(;Date.now()-e<15e3;){await new Promise(t=>setTimeout(t,300));try{let t=await m(i);if(a.V7.test(t)){await new Promise(t=>setTimeout(t,500)),console.log(`Claude initialized in ${Date.now()-e}ms`),o=!0;break}!s&&a.H3.test(t)&&(await (0,n.Is)(i,"",!0),s=!0,console.log("Trust dialog detected, sending Enter to confirm"))}catch{}}if(!o)throw Error("Claude initialization timeout (15000ms)");console.log(`Started Claude session: ${i}`)}catch(t){throw f=null,console.log(`[claude-session] Session start failed: ${u(t)}`),Error("Failed to start Claude session")}}async function k(t,e){let r=y(t);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist. Start the session first.`);let o=await m(r);a.V7.test(o)||await E(r,1e4),await new Promise(t=>setTimeout(t,500)),await (0,n.Is)(r,e,!1),await (0,n.Is)(r,"",!0),e.includes("\n")&&await (0,i.N)(r),console.log(`Sent message to Claude session: ${r}`)}async function I(t,e=1e3){let r=y(t);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist`);try{return await (0,n.xq)(r,{startLine:-e})}catch(t){throw Error(`Failed to capture Claude output: ${u(t)}`)}}async function D(t){let e=y(t);try{await (0,n.Hk)(e)&&(await (0,n.Is)(e,"",!1),await c(`tmux send-keys -t "${e}" C-d`),await new Promise(t=>setTimeout(t,500)));let t=await (0,n.AJ)(e);return t&&console.log(`Stopped Claude session: ${e}`),t}catch(t){return console.error(`Error stopping Claude session: ${u(t)}`),!1}}},19377:(t,e,r)=>{"use strict";r.d(e,{BN:()=>E,H3:()=>l,KJ:()=>C,Sg:()=>I,V7:()=>o,Wg:()=>y,_r:()=>f,bs:()=>function t(e){switch(e){case"claude":return{promptPattern:o,separatorPattern:s,thinkingPattern:a,skipPatterns:[/^─{10,}$/,/^[>❯]\s*$/,a,/^\s*[⎿⏋]\s+Tip:/,/^\s*Tip:/,/^\s*\?\s*for shortcuts/,/to interrupt\)/,d]};case"codex":return{promptPattern:c,separatorPattern:u,thinkingPattern:i,skipPatterns:[/^─.*─+$/,/^›\s*$/,/^›\s+(Implement|Find and fix|Type)/,i,/^\s*\d+%\s+context left/,/^\s*for shortcuts$/,/╭─+╮/,/╰─+╯/,/•\s*Ran\s+/,/^\s*└/,/^\s*│/,/\(.*esc to interrupt\)/,d]};case"gemini":return{promptPattern:m,separatorPattern:/^[─━]{3,}$/m,thinkingPattern:w,skipPatterns:[/^[>❯]\s*$/,w,/^\s*$/,/Gemini\s+\d+\.\d+/,d]};case"vibe-local":return{promptPattern:p,separatorPattern:/^[·]{10,}$/m,thinkingPattern:g,skipPatterns:[p,g,/^\s*$/,/vibe-local|vibe-coder/,/ctx:\s*\d+%/,/Model\s+\w/,/Engine\s+\w/,/Mode\s+/,/RAM\s+/,/CWD\s+/,/^[·]{10,}$/,/✦\s*Ready/,/ESC:\s*stop/,d]};default:return t("claude")}},d8:()=>d,dR:()=>k,vp:()=>$,ww:()=>h});let n=(0,r(43895).h)("cli-patterns"),a=RegExp(`[✻✽⏺\xb7∴✢✳✶⦿◉●○◌◎⊙⊚⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\\s+.+…|esc to interrupt`,"m"),i=/•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m,o=/^[>❯](\s*$|\s+\S)/m,s=/^─{10,}$/m,l=/Yes, I trust this folder/m,c=/^›\s*/m,u=/^─.*Worked for.*─+$/m,d=/\[Pasted text #\d+/,f=500,h=3,m=/^[>❯]\s*$/m,w=/[\u2800-\u28FF]|Thinking\.\.\./,p=/ctx:\d+%\s*[>❯]/m,g=/[\u2800-\u28FF]|Thinking|⠋|⠙|⠹|⠸|⠼|⠴|⠦|⠧|⠇|⠏|Running|Executing/;function y(t,e){let r;let o=n.withContext({cliToolId:t});switch(o.debug("detectThinking:check",{contentLength:e.length}),t){case"claude":default:r=a.test(e);break;case"codex":r=i.test(e);break;case"gemini":r=w.test(e);break;case"vibe-local":r=g.test(e)}return o.debug("detectThinking:result",{isThinking:r}),r}let x=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function $(t){return t.replace(x,"")}function E(t){return t.split("\n").map(t=>/^[\u2502\u256D\u256E\u256F\u2570\u2500\s]+$/.test(t)?"":t.replace(/^\u2502\s?/,"").replace(/\s*\u2502$/,"")).join("\n")}let C=["Claude Code cannot be launched inside another Claude Code session"],k=[/^Error:.*Claude Code/];function I(t){if("claude"===t)return{requireDefaultIndicator:!1}}},76966:(t,e,r)=>{"use strict";r.d(e,{o:()=>i});var n=r(75748),a=r(98636);async function i(t,e,r,i="claude"){let o=(0,n.vX)(t,e);if(o)try{await (0,a.xN)(e,o.content,r,i)}catch(t){console.error("[recordClaudeConversation] Failed to create log file:",t)}}},98636:(t,e,r)=>{"use strict";r.d(e,{e7:()=>f,xN:()=>d});var n=r(20629),a=r.n(n),i=r(55315),o=r.n(i),s=r(73853),l=r(98241);function c(t="claude"){return o().join((0,l.s)(),t)}async function u(t="claude"){let e=c(t);try{await a().access(e)}catch{await a().mkdir(e,{recursive:!0})}}async function d(t,e,r,n="claude"){await u(n);let i=function(t,e="claude"){let r=(0,s.WU)(new Date,"yyyy-MM-dd"),n=`${t}-${r}.md`,a=c(e);return o().join(a,n)}(t,n),l=(0,s.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),d="";try{d=await a().readFile(i,"utf-8")}catch{let e="claude"===n?"Claude Code":"codex"===n?"Codex CLI":"Gemini CLI";d=`# ${e} Conversation Log: ${t}
|
|
2
2
|
|
|
3
3
|
Created: ${l}
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";exports.id=8693,exports.ids=[8693],exports.modules={87946:(e,t,r)=>{r.d(t,{Ad:()=>s,go:()=>i,l1:()=>a});var n=r(12509),o=r.n(n);let l=[36e5,108e5,288e5],s=36e5;function a(e){return"number"==typeof e&&l.includes(e)}function i(e){if(e.length>500)return{valid:!1,error:"Pattern must be 500 characters or less"};if(!o()(e))return{valid:!1,error:"Pattern may cause performance issues (catastrophic backtracking detected)"};try{return new RegExp(e),{valid:!0}}catch{return{valid:!1,error:"Invalid regular expression syntax"}}}},38693:(e,t,r)=>{r.d(t,{bq:()=>m,gf:()=>b,m$:()=>d,bY:()=>g,w:()=>x,Qz:()=>I});var n=r(89194),o=r(63661),l=r(49528),s=r(
|
|
1
|
+
"use strict";exports.id=8693,exports.ids=[8693],exports.modules={87946:(e,t,r)=>{r.d(t,{Ad:()=>s,go:()=>i,l1:()=>a});var n=r(12509),o=r.n(n);let l=[36e5,108e5,288e5],s=36e5;function a(e){return"number"==typeof e&&l.includes(e)}function i(e){if(e.length>500)return{valid:!1,error:"Pattern must be 500 characters or less"};if(!o()(e))return{valid:!1,error:"Pattern may cause performance issues (catastrophic backtracking detected)"};try{return new RegExp(e),{valid:!0}}catch{return{valid:!1,error:"Invalid regular expression syntax"}}}},38693:(e,t,r)=>{r.d(t,{bq:()=>m,gf:()=>b,m$:()=>d,bY:()=>g,w:()=>x,Qz:()=>I});var n=r(89194),o=r(63661),l=r(49528),s=r(23816),a=r(19377),i=r(87946);let u=/^[a-zA-Z0-9_-]+$/;function c(e){return e instanceof Error?e.message:"Unknown error"}let p=globalThis.__autoYesStates??(globalThis.__autoYesStates=new Map),f=globalThis.__autoYesPollerStates??(globalThis.__autoYesPollerStates=new Map);function d(e){return!!e&&0!==e.length&&u.test(e)}function h(e){return Date.now()>e.expiresAt}function m(e){let t=p.get(e);return t?h(t)?w(e,"expired"):t:null}function g(e,t,r,n){if(!t)return w(e);{let t=Date.now(),o={enabled:!0,enabledAt:t,expiresAt:t+(r??i.Ad),stopPattern:n};return p.set(e,o),o}}function w(e,t){let r=p.get(e),n={enabled:!1,enabledAt:r?.enabledAt??0,expiresAt:r?.expiresAt??0,stopPattern:r?.stopPattern,stopReason:t};return p.set(e,n),n}function v(e){return f.get(e)}function b(e){let t=v(e);return t?.lastServerResponseTimestamp??null}function y(e){let t=v(e);if(t){var r;t.consecutiveErrors++,t.currentInterval=(r=t.consecutiveErrors)<5?2e3:Math.min(2e3*Math.pow(2,r-5+1),6e4)}}async function A(e,t){let r=await (0,n.NA)(e,t,5e3);return(0,a.BN)((0,a.vp)(r))}async function P(e,t,r,n){try{var i;let u=(0,a.Sg)(r),c=(0,o.F)((0,a.BN)(n),u);if(!c.isPrompt||!c.promptData)return t.lastAnsweredPromptKey=null,"no_prompt";let p=(i=c.promptData,`${i.type}:${i.question}`);if(t.lastAnsweredPromptKey===p)return"duplicate";let f=function(e){if("yes_no"===e.type)return"y";if("multiple_choice"===e.type){let t=e.options.find(e=>e.isDefault)??e.options[0];return!t||t.requiresTextInput?null:t.number.toString()}return null}(c.promptData);if(null===f)return"no_answer";let d=s.g.getInstance().getTool(r).getSessionName(e);return await (0,l.z)({sessionName:d,answer:f,cliToolId:r,promptData:c.promptData}),function(e,t){let r=v(e);r&&(r.lastServerResponseTimestamp=t)}(e,Date.now()),function(e){let t=v(e);t&&(t.consecutiveErrors=0,t.currentInterval=2e3)}(e),t.lastAnsweredPromptKey=p,console.info(`[Auto-Yes Poller] Sent response for worktree: ${e}`),"responded"}catch(t){return y(e),console.warn(`[Auto-Yes Poller] Error in detectAndRespondToPrompt for worktree ${e}: ${c(t)}`),"error"}}async function _(e,t){let r=v(e);if("valid"===function(e,t){if(!t)return"stopped";let r=m(e);return!r?.enabled||h(r)?(I(e),"expired"):"valid"}(e,r)){try{let n=await A(e,t),o=n.split("\n").slice(-50).join("\n");if((0,a.Wg)(t,o)){k(e,t);return}if(function(e,t,r){if(t.stopCheckBaselineLength<0)return t.stopCheckBaselineLength=r.length,!1;let n=t.stopCheckBaselineLength;if(r.length>n){let o=r.substring(n);return t.stopCheckBaselineLength=r.length,function(e,t){let r=m(e);if(!r?.stopPattern)return!1;if(!(0,i.go)(r.stopPattern).valid)return console.warn("[Auto-Yes] Invalid stop pattern, disabling",{worktreeId:e}),w(e),!1;try{let n=new RegExp(r.stopPattern),o=function(e,t,r=100){try{return e.test(t)}catch{return null}}(n,t);if(null===o)return console.warn("[Auto-Yes] Stop condition check failed, disabling pattern",{worktreeId:e}),w(e),!1;if(o)return w(e,"stop_pattern_matched"),I(e),console.warn("[Auto-Yes] Stop condition matched, auto-yes disabled",{worktreeId:e}),!0}catch{console.warn("[Auto-Yes] Stop condition check error",{worktreeId:e})}return!1}(e,o)}return r.length<n&&(t.stopCheckBaselineLength=r.length),!1}(e,r,n))return;let l=await P(e,r,t,n);if("responded"===l){k(e,t,5e3);return}}catch(t){y(e),console.warn(`[Auto-Yes Poller] Error for worktree ${e}: ${c(t)}`)}k(e,t)}}function k(e,t,r){let n=v(e);if(!n)return;let o=Math.max(r??n.currentInterval,2e3);n.timerId=setTimeout(()=>{_(e,t)},o)}function x(e,t){if(!d(e))return{started:!1,reason:"invalid worktree ID"};let r=m(e);if(!r?.enabled)return{started:!1,reason:"auto-yes not enabled"};let n=f.has(e);if(!n&&f.size>=50)return{started:!1,reason:"max concurrent pollers reached"};n&&I(e);let o={timerId:null,cliToolId:t,consecutiveErrors:0,currentInterval:2e3,lastServerResponseTimestamp:null,lastAnsweredPromptKey:null,stopCheckBaselineLength:-1};return f.set(e,o),o.timerId=setTimeout(()=>{_(e,t)},2e3),console.info(`[Auto-Yes Poller] Started for worktree: ${e}, cliTool: ${t}`),{started:!0}}function I(e){let t=v(e);t&&(t.timerId&&clearTimeout(t.timerId),f.delete(e),console.info(`[Auto-Yes Poller] Stopped for worktree: ${e}`))}},49528:(e,t,r)=>{r.d(t,{z:()=>s});var n=r(10927);let o=/^\[[ x]\] /;function l(e){if(0===e)return[];let t=e>0?"Down":"Up";return Array.from({length:Math.abs(e)},()=>t)}async function s(e){let{sessionName:t,answer:r,cliToolId:s,promptData:a,fallbackPromptType:i,fallbackDefaultOptionNumber:u}=e;if("claude"===s&&(a?.type==="multiple_choice"||"multiple_choice"===i)&&/^\d+$/.test(r)){let e;let s=parseInt(r,10),i=null;if(a?.type==="multiple_choice"){let t=(i=a.options).find(e=>e.isDefault);e=t?.number??1}else e=u??1;let c=s-e;if(null!==i&&i.some(e=>o.test(e.label))&&null!==i){let e=i.filter(e=>o.test(e.label)).length,r=[...l(c),"Space"];r.push(...l(e-s+1)),r.push("Enter"),await (0,n.hL)(t,r)}else{let e=[...l(c),"Enter"];await (0,n.hL)(t,e)}}else await (0,n.Is)(t,r,!1),await new Promise(e=>setTimeout(e,100)),await (0,n.Is)(t,"",!0)}}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";exports.id=9446,exports.ids=[9446],exports.modules={89194:(e,t,s)=>{s.d(t,{Lg:()=>r,NA:()=>a});var i=s(10927),n=s(23816);let o=(0,s(43895).h)("cli-session");async function r(e,t){let s=n.g.getInstance().getTool(t).getSessionName(e);return await (0,i.Hk)(s)}async function a(e,t,s=1e3){let r=o.withContext({worktreeId:e,cliToolId:t});r.debug("captureSessionOutput:start",{requestedLines:s});let a=n.g.getInstance().getTool(t),l=a.getSessionName(e);if(!await (0,i.Hk)(l))throw r.debug("captureSessionOutput:sessionNotFound",{sessionName:l}),Error(`${a.name} session ${l} does not exist`);try{let e=await (0,i.xq)(l,{startLine:-s}),t=e.split("\n").length;return r.debug("captureSessionOutput:success",{actualLines:t,lastFewLines:e.split("\n").slice(-3).join(" | ")}),e}catch(t){let e=t instanceof Error?t.message:String(t);throw r.error("captureSessionOutput:failed",{error:e}),Error(`Failed to capture ${a.name} output: ${e}`)}}},23816:(e,t,s)=>{s.d(t,{g:()=>T});var i=s(61282),n=s(21764);let o=/^[a-zA-Z0-9_-]+$/;var r=s(10927);let a=(0,n.promisify)(i.exec);class l{async isInstalled(){try{return await a(`which ${this.command}`,{timeout:5e3}),!0}catch{return!1}}getSessionName(e){let t=`mcbd-${this.id}-${e}`;return function(e){if(!o.test(e))throw Error(`Invalid session name format: ${e}`)}(t),t}async interrupt(e){let t=this.getSessionName(e);await (0,r.ZV)(t,"Escape")}}var c=s(62648);class u extends l{async isInstalled(){return await (0,c.Uv)()}async isRunning(e){return await (0,c.YI)(e)}async startSession(e,t){await (0,c.ym)({worktreeId:e,worktreePath:t})}async sendMessage(e,t){await (0,c.xd)(e,t)}async killSession(e){await (0,c._f)(e)}constructor(...e){super(...e),this.id="claude",this.name="Claude Code",this.command="claude"}}var m=s(92900);let d=(0,n.promisify)(i.exec);function p(e){return e instanceof Error?e.message:String(e)}class f extends l{async isRunning(e){let t=this.getSessionName(e);return await (0,r.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("Codex CLI is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,r.Hk)(s)){console.log(`Codex session ${s} already exists`);return}try{await (0,r.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),await new Promise(e=>setTimeout(e,100)),await (0,r.Is)(s,"codex",!0),await new Promise(e=>setTimeout(e,3e3)),await (0,r.Is)(s,"2",!0),await new Promise(e=>setTimeout(e,200)),await d(`tmux send-keys -t "${s}" Down`),await new Promise(e=>setTimeout(e,200)),await d(`tmux send-keys -t "${s}" Enter`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Started Codex session: ${s}`)}catch(t){let e=p(t);throw Error(`Failed to start Codex session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,r.Hk)(s))throw Error(`Codex session ${s} does not exist. Start the session first.`);try{await (0,r.Is)(s,t,!1),await new Promise(e=>setTimeout(e,100)),await d(`tmux send-keys -t "${s}" C-m`),await new Promise(e=>setTimeout(e,200)),t.includes("\n")&&await (0,m.N)(s),console.log(`✓ Sent message to Codex session: ${s}`)}catch(t){let e=p(t);throw Error(`Failed to send message to Codex: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,r.Hk)(t)&&(await d(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,r.AJ)(t)&&console.log(`✓ Stopped Codex session: ${t}`)}catch(t){let e=p(t);throw console.error(`Error stopping Codex session: ${e}`),t}}constructor(...e){super(...e),this.id="codex",this.name="Codex CLI",this.command="codex"}}function h(e){return e instanceof Error?e.message:String(e)}class g extends l{async isRunning(e){let t=this.getSessionName(e);return await (0,r.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("Gemini CLI is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,r.Hk)(s)){console.log(`Gemini session ${s} already exists`);return}try{await (0,r.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),await new Promise(e=>setTimeout(e,100)),await (0,r.Is)(s,"gemini",!0),await new Promise(e=>setTimeout(e,6e3)),await this.handleTrustDialog(s),console.log(`✓ Started Gemini session: ${s}`)}catch(t){let e=h(t);throw Error(`Failed to start Gemini session: ${e}`)}}async handleTrustDialog(e){for(let t=0;t<10;t++){try{let t=await (0,r.xq)(e,50);if(t.includes("Do you trust this folder?")){await (0,r.ZV)(e,"Enter"),await new Promise(e=>setTimeout(e,2e3)),console.log("✓ Auto-trusted folder for Gemini session");return}if(t.match(/^[>❯]\s*$/m)){console.log("✓ Gemini prompt detected - no trust dialog needed");return}}catch{}await new Promise(e=>setTimeout(e,1e3))}console.log("⚠ Trust dialog detection timed out - proceeding anyway")}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,r.Hk)(s))throw Error(`Gemini session ${s} does not exist. Start the session first.`);try{await (0,r.Is)(s,t,!1),await new Promise(e=>setTimeout(e,100)),await (0,r.ZV)(s,"C-m"),await new Promise(e=>setTimeout(e,200)),t.includes("\n")&&await (0,m.N)(s),console.log(`✓ Sent message to Gemini session: ${s}`)}catch(t){let e=h(t);throw Error(`Failed to send message to Gemini: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,r.Hk)(t)&&(await (0,r.ZV)(t,"C-c"),await new Promise(e=>setTimeout(e,300)),await (0,r.Is)(t,"/quit",!0),await new Promise(e=>setTimeout(e,500))),await (0,r.AJ)(t)&&console.log(`✓ Stopped Gemini session: ${t}`)}catch(t){let e=h(t);throw console.error(`Error stopping Gemini session: ${e}`),t}}constructor(...e){super(...e),this.id="gemini",this.name="Gemini CLI",this.command="gemini"}}var w=s(83513),y=s(97425),$=s(75748);function x(e){return e instanceof Error?e.message:String(e)}class C extends l{async isRunning(e){let t=this.getSessionName(e);return await (0,r.Hk)(t)}async startSession(e,t){if(!await this.isInstalled())throw Error("vibe-local is not installed or not in PATH");let s=this.getSessionName(e);if(await (0,r.Hk)(s)){console.log(`Vibe Local session ${s} already exists`);return}try{await (0,r.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),await new Promise(e=>setTimeout(e,100));let i="vibe-local -y";try{let t=(0,y.getDbInstance)(),s=(0,$.gU)(t,e);s?.vibeLocalModel&&w.Y1.test(s.vibeLocalModel)&&(i=`vibe-local -y -m ${s.vibeLocalModel}`)}catch{}await (0,r.Is)(s,i,!0),await new Promise(e=>setTimeout(e,5e3)),console.log(`✓ Started Vibe Local session: ${s}`)}catch(t){let e=x(t);throw Error(`Failed to start Vibe Local session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,r.Hk)(s))throw Error(`Vibe Local session ${s} does not exist. Start the session first.`);try{await (0,r.Is)(s,t,!1),await new Promise(e=>setTimeout(e,100)),await (0,r.ZV)(s,"C-m"),await new Promise(e=>setTimeout(e,200)),await (0,r.ZV)(s,"C-m"),await new Promise(e=>setTimeout(e,200)),t.includes("\n")&&await (0,m.N)(s),console.log(`✓ Sent message to Vibe Local session: ${s}`)}catch(t){let e=x(t);throw Error(`Failed to send message to Vibe Local: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,r.Hk)(t)&&(await (0,r.ZV)(t,"C-c"),await new Promise(e=>setTimeout(e,300)),await (0,r.ZV)(t,"C-c"),await new Promise(e=>setTimeout(e,500))),await (0,r.AJ)(t)&&console.log(`✓ Stopped Vibe Local session: ${t}`)}catch(t){let e=x(t);throw console.error(`Error stopping Vibe Local session: ${e}`),t}}constructor(...e){super(...e),this.id="vibe-local",this.name="Vibe Local",this.command="vibe-local"}}var S=s(59991);class T{constructor(){this.tools=new Map,this.tools.set("claude",new u),this.tools.set("codex",new f),this.tools.set("gemini",new g),this.tools.set("vibe-local",new C)}static getInstance(){return T.instance||(T.instance=new T),T.instance}getTool(e){let t=this.tools.get(e);if(!t)throw Error(`CLI tool '${e}' not found`);return t}getAllTools(){return Array.from(this.tools.values())}async getToolInfo(e){let t=this.getTool(e),s=await t.isInstalled();return{id:t.id,name:t.name,command:t.command,installed:s}}async getAllToolsInfo(){return Promise.all(this.getAllTools().map(async e=>{let t=await e.isInstalled();return{id:e.id,name:e.name,command:e.command,installed:t}}))}async getInstalledTools(){return(await this.getAllToolsInfo()).filter(e=>e.installed)}stopPollers(e,t){(0,S.FN)(e,t)}}},63661:(e,t,s)=>{s.d(t,{F:()=>r,J:()=>f});let i=(0,s(43895).h)("prompt-detector"),n=[{regex:/^(.+)\s+\(y\/n\)\s*$/m},{regex:/^(.+)\s+\[y\/N\]\s*$/m,defaultOption:"no"},{regex:/^(.+)\s+\[Y\/n\]\s*$/m,defaultOption:"yes"},{regex:/^(.+)\s+\(yes\/no\)\s*$/m}];function o(e,t,s,i){return{isPrompt:!0,promptData:{type:"yes_no",question:e,options:["yes","no"],status:"pending",...void 0!==i&&{defaultOption:i},instructionText:s},cleanContent:t,rawContent:s}}function r(e,t){i.debug("detectPrompt:start",{outputLength:e.length});let s=e.split("\n").slice(-20).join("\n"),r=function(e,t){let s=t?.requireDefaultIndicator??!0,i=e.split("\n"),n=i.length;for(;n>0&&""===i[n-1].trim();)n--;let o=Math.max(0,n-50);if(s){let t=!1;for(let e=o;e<n;e++){let s=i[e].trim();if(l.test(s)){t=!0;break}}if(!t)return m(e)}let r=[],d=-1;for(let t=n-1;t>=o;t--){let s=i[t].trim(),n=s.match(l);if(n){let e=parseInt(n[1],10),t=n[2].trim();r.unshift({number:e,label:t,isDefault:!0});continue}let o=s.match(c);if(o){let e=parseInt(o[1],10),t=o[2].trim();r.unshift({number:e,label:t,isDefault:!1});continue}if(0===r.length&&(s.startsWith("❯")||s.startsWith("●")))return m(e);if(r.length>0&&s&&!u.test(s)){if(p(s)){d=t;break}if(function(e,t){let s=t.endsWith("?")||t.endsWith("?");return!!(!s&&/^\s{2,}[^\d]/.test(e)&&!/^\s*\d+\./.test(e)||t.length<5&&!s||/^[\/~]/.test(t)||t.length>=2&&/^[a-zA-Z0-9_-]+$/.test(t))}(i[t],s))continue;d=t;break}}if(!function(e){if(0===e.length||1!==e[0])return!1;for(let t=1;t<e.length;t++)if(e[t]!==e[t-1]+1)return!1;return!0}(r.map(e=>e.number)))return m(e);let f=r.some(e=>e.isDefault);if(r.length<2||s&&!f||!s&&(-1===d||!p(i[d]?.trim()??"")&&!function(e,t,s,i){let n=Math.max(i,t-3);for(let s=t-1;s>=n;s--){let t=e[s]?.trim()??"";if(!(!t||u.test(t))&&p(t))return!0}return!1}(i,d,0,o)))return m(e);let h=function(e,t){if(t<0)return"Please select an option:";let s=[];for(let i=Math.max(0,t-5);i<=t;i++){let t=e[i].trim();t&&!u.test(t)&&s.push(t)}return s.join(" ")}(i,d),g=function(e,t,s){if(t<0)return;let i=e.slice(Math.max(0,t-19),s).map(e=>e.trimEnd()).join("\n").trim();return i.length>0?i:void 0}(i,d,n);return{isPrompt:!0,promptData:{type:"multiple_choice",question:h.trim(),options:r.map(e=>{let t=a.some(t=>t.test(e.label));return{number:e.number,label:e.label,isDefault:e.isDefault,requiresTextInput:t}}),status:"pending",instructionText:g},cleanContent:h.trim(),rawContent:function(e){let t=e.split("\n"),s=(t.length>200?t.slice(-200):t).join("\n");return s.length>5e3&&(s=s.slice(-5e3)),s}(e.trim())}}(e,t);if(r.isPrompt)return i.info("detectPrompt:multipleChoice",{isPrompt:!0,question:r.promptData?.question,optionsCount:r.promptData?.options?.length}),r;let d=s.trim();for(let e of n){let t=s.match(e.regex);if(t){let s=t[1].trim();return o(s,s,d,e.defaultOption)}}let f=s.match(/^(.*?)Approve\?\s*$/m);if(f){let e=f[1].trim();return o(e?`${e} Approve?`:"Approve?",e||"Approve?",d)}return i.debug("detectPrompt:complete",{isPrompt:!1}),{isPrompt:!1,cleanContent:e.trim()}}let a=[/type\s+here/i,/tell\s+(me|claude)/i,/enter\s+/i,/custom/i,/differently/i],l=/^\s*[\u276F\u25CF]\s*(\d+)\.\s*(.+)$/,c=/^\s*(\d+)\.\s*(.+)$/,u=/^[-─]+$/;function m(e){return{isPrompt:!1,cleanContent:e.trim()}}let d=/(?:select|choose|pick|which|what|how|where|enter|type|specify|confirm|approve|accept|reject|decide|preference|option)/i;function p(e){return 0!==e.length&&!!(e.includes("?")||e.includes("?")||d.test(e))}function f(e,t="yes_no"){let s=e.toLowerCase().trim();if("multiple_choice"===t){if(/^\d+$/.test(s))return s;throw Error("Invalid answer for multiple choice prompt. Expected a number.")}if("yes"===s||"y"===s)return"y";if("no"===s||"n"===s)return"n";throw Error("Invalid answer for yes/no prompt. Expected 'yes', 'no', 'y', or 'n'.")}},59991:(e,t,s)=>{s.d(t,{FN:()=>T,RJ:()=>$,ci:()=>y,cn:()=>S});var i=s(89194),n=s(97425),o=s(75748),r=s(68507),a=s(63661),l=s(76966),c=s(89287),u=s(19377);let m=["Waiting for auth","⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];function d(e){return{response:"",isComplete:!1,lineCount:e}}function p(e,t,s,i,n,o){let r=x(t,s,i,n,o),a=e.slice(r);return{response:(0,u.vp)(a.join("\n")),isComplete:!0,lineCount:s}}let f=new Map,h=new Map;function g(e,t){return`${e}:${t}`}function w(e,t){let s=(0,u.Sg)(t);return(0,a.F)((0,u.BN)((0,u.vp)(e)),s)}function y(e){let t=(0,u.vp)(e).split("\n"),s=-1;for(let e=t.length-1;e>=0;e--)if(/^❯\s+\S/.test(t[e])){s=e;break}let i=s>=0?s+1:0,n=t.slice(i),o=[/CLAUDE_HOOKS_/,/\/bin\/claude/,/^claude\s*$/,/@.*\s+%\s*$/,/^[^⏺]*curl.*POST/,/^[^⏺]*Content-Type/,/^[^⏺]*export\s+CLAUDE_/,/^\s*$/,/^[╭╮╰╯│─\s]+$/,/^[│╭╮╰╯].*[│╭╮╰╯]$/,/Claude Code v[\d.]+/,/^Tips for getting started/,/^Welcome back/,/Run \/init to create/,/^Recent activity/,/^No recent activity/,/▐▛███▜▌|▝▜█████▛▘|▘▘ ▝▝/,/^\s*Opus \d+\.\d+\s*·\s*Claude Max/,/\.com's Organization/,/\?\s*for shortcuts\s*$/,/^─{10,}$/,/^❯\s*$/,u.d8],r=[];for(let e of n)!o.some(t=>t.test(e))&&e.trim()&&r.push(e);return r.join("\n").trim()}function $(e){let t=e.split("\n"),s=[],i=[/^maenokota@.*%/,/^zsh:/,/^feature-issue-\d+/,/^\s*$/],n=!1,o=[];for(let e of t){if(e.includes("✦")){n=!0;let t=e.indexOf("✦"),s=e.substring(t+1).trim();s&&o.push(s);continue}if(n){if(i.some(t=>t.test(e)))continue;o.push(e)}}if(o.length>0)return o.join("\n").trim();for(let e of t)i.some(t=>t.test(e))||s.push(e);return s.join("\n").trim()}function x(e,t,s,i,n){if((e=Math.max(0,e))>=t||s){let e=n(40);return e>=0?e+1:0}if("codex"===i)return Math.max(0,e);if(e>=t-5){let e=n(50);return e>=0?e+1:Math.max(0,t-40)}return Math.max(0,e)}async function C(e,t){let s=(0,n.getDbInstance)();try{if(!(0,o.gU)(s,e))return console.error(`Worktree ${e} not found, stopping poller`),T(e,t),!1;if(!await (0,i.Lg)(e,t))return T(e,t),!1;let n=(0,o.zl)(s,e,t),a=n?.lastCapturedLine||0,f=await (0,i.NA)(e,t,1e4),h=function(e,t,s){let i=e.split("\n"),n=i.length;for(;n>0&&""===i[n-1].trim();)n--;let o=i.slice(0,n),r=o.length,a=r>0&&t>25&&r+25<t,l=r>0&&t>50&&r<50,c=a||l;if(!c&&r<t-5)return null;let f=Math.max(0,r-20),h=o.slice(f).join("\n"),{promptPattern:g,separatorPattern:y,thinkingPattern:$,skipPatterns:C}=(0,u.bs)(s),S=(e=60)=>{let t="codex"===s?/^›\s+(?!Implement|Find and fix|Type|Summarize)/:/^[>❯]\s+\S/;for(let s=r-1;s>=Math.max(0,r-e);s--){let e=(0,u.vp)(o[s]);if(t.test(e))return s}return -1};if("claude"===s&&w(o.join("\n"),s).isPrompt)return p(o,t,r,c,s,S);let T=(0,u.vp)(h),P=g.test(T),v=y.test(T),b=$.test(T),I=("codex"===s||"gemini"===s||"vibe-local"===s)&&P&&!b,k="claude"===s&&P&&v&&!b;if(I||k){let e=[],i=x(t,r,c,s,S),n=r;for(let t=i;t<r;t++){let i=o[t],r=(0,u.vp)(i);if("codex"===s&&/^›\s+/.test(r)||"gemini"===s&&/^(%|\$|.*@.*[%$#])\s*$/.test(r)){n=t;break}C.some(e=>e.test(r))||e.push(i)}let a=e.join("\n").trim(),l=a.split("\n").slice(-5).join("\n");if($.test(l))return d(r);if("claude"===s){let e=(0,u.vp)(a),t=/[╭╮╰╯│]/.test(e)||/░{3,}/.test(e)||/▓{3,}/.test(e),s=/Claude Code|claude\/|v\d+\.\d+/.test(e),i=/Tip:|for shortcuts|\?\s*for help/.test(e),n=/^\s*\/Users\/.*$/m.test(e)&&e.split("\n").length<30,o=e.match(/^[>❯]\s+(\S.*)$/m);if(o){let t=e.indexOf(o[0]);if(0===e.substring(t+o[0].length).trim().split("\n").filter(e=>{let t=e.trim();return t&&!C.some(e=>e.test(t))&&!/^─+$/.test(t)}).length)return d(r)}else if((t||s||i||n)&&a.length<2e3)return d(r)}return"gemini"===s&&((a.match(/[░███]/g)||[]).length>.3*a.length||m.some(e=>a.includes(e))||!a.includes("✦")&&a.length<10)?d(r):{response:a,isComplete:!0,lineCount:n}}if(w(o.join("\n"),s).isPrompt)return p(o,t,r,c,s,S);let E=[],L=c||t>=r-5,N=L?S(80):-1,M=L?N>=0?N+1:Math.max(0,r-80):Math.max(0,t);for(let e=M;e<r;e++){let t=o[e],s=(0,u.vp)(t);C.some(e=>e.test(s))||E.push(t)}let D=E.join("\n").trim();return D?{response:D,isComplete:!1,lineCount:r}:d(r)}(f,a,t);if(!h||!h.isComplete){let{thinkingPattern:i}=(0,u.bs)(t),n=(0,u.vp)(f).split("\n").slice(-5).join("\n");if(i.test(n)){let i=(0,o.GP)(s,e,t);i>0&&console.log(`Marked ${i} pending prompt(s) as answered (thinking detected) for ${e}`)}return!1}if(h.lineCount===a&&!n?.inProgressMessageId)return!1;if(h.lineCount<=a)return console.log(`[checkForResponse] Already saved up to line ${a}, skipping (result: ${h.lineCount})`),!1;let g=w(h.response,t);if(g.isPrompt){(0,o.Mf)(s,e,t);let i=(0,o.tn)(s,{worktreeId:e,role:"assistant",content:g.rawContent||g.cleanContent,messageType:"prompt",promptData:g.promptData,timestamp:new Date,cliToolId:t});return(0,o.IH)(s,e,t,h.lineCount),(0,r.ps)("message",{worktreeId:e,message:i}),T(e,t),!0}if(!h.response||""===h.response.trim())return(0,o.IH)(s,e,t,h.lineCount),!1;let C="claude"===t?(0,c.Z)(h.response):void 0,S=h.response;if("gemini"===t?S=$(h.response):"claude"===t&&(S=y(h.response)),!S||""===S.trim()||"[No content]"===S)return(0,o.IH)(s,e,t,h.lineCount),(0,o.Mf)(s,e,t),!1;S&&await (0,l.o)(s,e,S,t);let P=(0,o.GP)(s,e,t);P>0&&console.log(`Marked ${P} pending prompt(s) as answered for ${e}`);let v=(0,o.zl)(s,e,t);if(v&&h.lineCount<=v.lastCapturedLine)return console.log(`[checkForResponse] Race condition detected, skipping save (result: ${h.lineCount}, current: ${v.lastCapturedLine})`),!1;let b=(0,o.tn)(s,{worktreeId:e,role:"assistant",content:S,messageType:"normal",timestamp:new Date,cliToolId:t,summary:C?.summary,logFileName:C?.logFileName,requestId:C?.requestId});return(0,r.ps)("message",{worktreeId:e,message:b}),(0,o.IH)(s,e,t,h.lineCount),!0}catch(t){return console.error(`Error checking for response (${e}):`,t instanceof Error?t.message:String(t)),!1}}function S(e,t){let s=g(e,t);T(e,t),h.set(s,Date.now()),function e(t,s){let i=g(t,s),n=setTimeout(async()=>{let n=h.get(i);if(n&&Date.now()-n>18e5){T(t,s);return}try{await C(t,s)}catch(e){console.error("[Poller] Error:",e)}f.has(i)&&e(t,s)},2e3);f.set(i,n)}(e,t)}function T(e,t){let s=g(e,t),i=f.get(s);i&&(clearTimeout(i),f.delete(s),h.delete(s))}}};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":1,"functions":{"/api/app/update-check":{},"/api/auth/status":{},"/api/external-apps/[id]/health":{},"/api/external-apps/[id]":{},"/api/external-apps":{},"/api/worktrees/[id]/logs":{},"/api/worktrees/[id]/logs
|
|
1
|
+
{"version":1,"functions":{"/api/app/update-check":{},"/api/auth/status":{},"/api/external-apps/[id]/health":{},"/api/external-apps/[id]":{},"/api/external-apps":{},"/api/worktrees/[id]/logs/[filename]":{},"/api/worktrees/[id]/logs":{},"/api/worktrees":{},"/proxy/[...path]":{}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
self.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-3c0ee3ce5b546818.js","static/chunks/fd9d1056-cfdf4f91f13d3485.js","static/chunks/2117-e31fa477cb500950.js","static/chunks/main-app-420d93e43682fee5.js"],pages:{"/_app":["static/chunks/webpack-3c0ee3ce5b546818.js","static/chunks/framework-8e0e0f4a6b83a956.js","static/chunks/main-
|
|
1
|
+
self.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-3c0ee3ce5b546818.js","static/chunks/fd9d1056-cfdf4f91f13d3485.js","static/chunks/2117-e31fa477cb500950.js","static/chunks/main-app-420d93e43682fee5.js"],pages:{"/_app":["static/chunks/webpack-3c0ee3ce5b546818.js","static/chunks/framework-8e0e0f4a6b83a956.js","static/chunks/main-2feda12a4d321111.js","static/chunks/pages/_app-3c9ca398d360b709.js"],"/_error":["static/chunks/webpack-3c0ee3ce5b546818.js","static/chunks/framework-8e0e0f4a6b83a956.js","static/chunks/main-2feda12a4d321111.js","static/chunks/pages/_error-cf5ca766ac8f493f.js"]},ampFirstPages:[]},self.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
"wasm": [],
|
|
18
18
|
"assets": [],
|
|
19
19
|
"env": {
|
|
20
|
-
"__NEXT_BUILD_ID": "
|
|
21
|
-
"NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "
|
|
22
|
-
"__NEXT_PREVIEW_MODE_ID": "
|
|
23
|
-
"__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "
|
|
24
|
-
"__NEXT_PREVIEW_MODE_SIGNING_KEY": "
|
|
20
|
+
"__NEXT_BUILD_ID": "O7EDFfAYQNe_HRbORxQAC",
|
|
21
|
+
"NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "HjSeyEJW5j6LL0pq2ZuLliSH/ggh6YmlyPQQNyNBmNk=",
|
|
22
|
+
"__NEXT_PREVIEW_MODE_ID": "fe0ec2124f3e88ac56779cad7b3ac26c",
|
|
23
|
+
"__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "bcfbcbd97f8158a49c09548d52de66c70c9d33ff7cead9db6435b126b03bd5e1",
|
|
24
|
+
"__NEXT_PREVIEW_MODE_SIGNING_KEY": "659fef5fb681ce1f3d1032ccab75ec2429d33df6949f0afacb3f4f2ef5a8038a"
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-3c0ee3ce5b546818.js" defer=""></script><script src="/_next/static/chunks/framework-8e0e0f4a6b83a956.js" defer=""></script><script src="/_next/static/chunks/main-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-3c0ee3ce5b546818.js" defer=""></script><script src="/_next/static/chunks/framework-8e0e0f4a6b83a956.js" defer=""></script><script src="/_next/static/chunks/main-2feda12a4d321111.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3c9ca398d360b709.js" defer=""></script><script src="/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js" defer=""></script><script src="/_next/static/O7EDFfAYQNe_HRbORxQAC/_buildManifest.js" defer=""></script><script src="/_next/static/O7EDFfAYQNe_HRbORxQAC/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"O7EDFfAYQNe_HRbORxQAC","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{},"edge":{},"encryptionKey":"
|
|
1
|
+
{"node":{},"edge":{},"encryptionKey":"HjSeyEJW5j6LL0pq2ZuLliSH/ggh6YmlyPQQNyNBmNk="}
|