commandmate 0.3.2 → 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 +13 -13
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/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/route.js +3 -3
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- 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 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +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]/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 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +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/route.js +1 -1
- package/.next/server/app/api/worktrees/route.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_client-reference-manifest.js +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 +4 -4
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +7 -6
- package/.next/server/chunks/2314.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 -1
- package/.next/server/chunks/7425.js +59 -39
- 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/{bd6065b03ddb3efd.css → e85de230ef5ddc40.css} +1 -1
- package/.next/trace +5 -5
- package/.next/types/app/api/ollama/models/route.ts +343 -0
- package/README.md +74 -76
- package/dist/server/src/config/schedule-config.js +7 -1
- package/dist/server/src/lib/auto-yes-manager.js +2 -2
- package/dist/server/src/lib/claude-executor.js +15 -4
- 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 +25 -3
- package/dist/server/src/lib/db-migrations.js +50 -1
- package/dist/server/src/lib/db.js +51 -1
- 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 +6 -2
- package/dist/server/src/lib/selected-agents-validator.js +99 -0
- package/dist/server/src/types/sidebar.js +9 -4
- package/package.json +1 -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-0c889ab3f30d5af7.js +0 -1
- /package/.next/static/{j8HFvzDZj7tHjAnhpXUno → O7EDFfAYQNe_HRbORxQAC}/_buildManifest.js +0 -0
- /package/.next/static/{j8HFvzDZj7tHjAnhpXUno → 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.r(t),s.d(t,{closeDbInstance:()=>
|
|
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;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
SET repository_path = ?,
|
|
13
13
|
repository_name = ?
|
|
14
14
|
WHERE id = ?
|
|
15
|
-
`);for(let e of t){let t=
|
|
15
|
+
`);for(let e of t){let t=E(e.path),r=i().basename(t);s.run(t,r,e.id)}let r=e.prepare(`
|
|
16
16
|
UPDATE worktrees
|
|
17
17
|
SET last_user_message = ?,
|
|
18
18
|
last_user_message_at = ?
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
SET repository_path = ?,
|
|
57
57
|
repository_name = ?
|
|
58
58
|
WHERE id = ?
|
|
59
|
-
`);for(let e of t){let t=
|
|
59
|
+
`);for(let e of t){let t=E(e.path),r=i().basename(t);s.run(t,r,e.id)}},down:()=>{console.log("No rollback needed for repository path fix")}},{version:4,name:"add-favorite-field",up:e=>{e.exec(`
|
|
60
60
|
ALTER TABLE worktrees ADD COLUMN favorite INTEGER DEFAULT 0;
|
|
61
61
|
`),e.exec(`
|
|
62
62
|
CREATE INDEX IF NOT EXISTS idx_worktrees_favorite
|
|
@@ -427,16 +427,27 @@
|
|
|
427
427
|
`),e.exec(`
|
|
428
428
|
CREATE INDEX idx_execution_logs_status
|
|
429
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")}}
|
|
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(`
|
|
431
442
|
CREATE TABLE IF NOT EXISTS schema_version (
|
|
432
443
|
version INTEGER PRIMARY KEY,
|
|
433
444
|
name TEXT NOT NULL,
|
|
434
445
|
applied_at INTEGER NOT NULL
|
|
435
446
|
);
|
|
436
|
-
`)}(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(`
|
|
437
448
|
INSERT INTO schema_version (version, name, applied_at)
|
|
438
449
|
VALUES (?, ?, ?)
|
|
439
|
-
`).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(`
|
|
440
451
|
CREATE TABLE IF NOT EXISTS worktrees (
|
|
441
452
|
id TEXT PRIMARY KEY,
|
|
442
453
|
name TEXT NOT NULL,
|
|
@@ -484,15 +495,16 @@
|
|
|
484
495
|
PRIMARY KEY (worktree_id, cli_tool_id),
|
|
485
496
|
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
486
497
|
);
|
|
487
|
-
`)}function
|
|
498
|
+
`)}function n(e,t){let s=`
|
|
488
499
|
SELECT
|
|
489
500
|
w.id, w.name, w.path, w.repository_path, w.repository_name, w.description,
|
|
490
501
|
w.last_user_message, w.last_user_message_at, w.last_message_summary,
|
|
491
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,
|
|
492
504
|
(SELECT MAX(timestamp) FROM chat_messages
|
|
493
505
|
WHERE worktree_id = w.id AND role = 'assistant') as last_assistant_message_at
|
|
494
506
|
FROM worktrees w
|
|
495
|
-
`,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(`
|
|
496
508
|
WITH ranked_messages AS (
|
|
497
509
|
SELECT
|
|
498
510
|
worktree_id,
|
|
@@ -505,12 +517,11 @@
|
|
|
505
517
|
FROM chat_messages
|
|
506
518
|
WHERE worktree_id IN (${s})
|
|
507
519
|
AND role = 'user'
|
|
508
|
-
AND cli_tool_id IN ('claude', 'codex', 'gemini')
|
|
509
520
|
)
|
|
510
521
|
SELECT worktree_id, cli_tool_id, content
|
|
511
522
|
FROM ranked_messages
|
|
512
523
|
WHERE rn = 1
|
|
513
|
-
`).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(`
|
|
514
525
|
SELECT
|
|
515
526
|
repository_path as path,
|
|
516
527
|
repository_name as name,
|
|
@@ -519,16 +530,17 @@
|
|
|
519
530
|
WHERE repository_path IS NOT NULL
|
|
520
531
|
GROUP BY repository_path, repository_name
|
|
521
532
|
ORDER BY repository_name ASC
|
|
522
|
-
`).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(`
|
|
523
534
|
SELECT
|
|
524
535
|
w.id, w.name, w.path, w.repository_path, w.repository_name, w.description,
|
|
525
536
|
w.last_user_message, w.last_user_message_at, w.last_message_summary,
|
|
526
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,
|
|
527
539
|
(SELECT MAX(timestamp) FROM chat_messages
|
|
528
540
|
WHERE worktree_id = w.id AND role = 'assistant') as last_assistant_message_at
|
|
529
541
|
FROM worktrees w
|
|
530
542
|
WHERE w.id = ?
|
|
531
|
-
`).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(`
|
|
532
544
|
INSERT INTO worktrees (
|
|
533
545
|
id, name, path, repository_path, repository_name, description,
|
|
534
546
|
last_user_message, last_user_message_at, last_message_summary, updated_at, cli_tool_id
|
|
@@ -545,15 +557,15 @@
|
|
|
545
557
|
last_message_summary = COALESCE(excluded.last_message_summary, worktrees.last_message_summary),
|
|
546
558
|
updated_at = COALESCE(excluded.updated_at, worktrees.updated_at),
|
|
547
559
|
cli_tool_id = COALESCE(excluded.cli_tool_id, worktrees.cli_tool_id)
|
|
548
|
-
`).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(`
|
|
549
561
|
UPDATE worktrees
|
|
550
562
|
SET description = ?
|
|
551
563
|
WHERE id = ?
|
|
552
|
-
`).run(s||null,t)}function
|
|
564
|
+
`).run(s||null,t)}function T(e,t,s){e.prepare(`
|
|
553
565
|
UPDATE worktrees
|
|
554
566
|
SET link = ?
|
|
555
567
|
WHERE id = ?
|
|
556
|
-
`).run(s||null,t)}function
|
|
568
|
+
`).run(s||null,t)}function c(e,t,s){e.prepare(`
|
|
557
569
|
UPDATE worktrees
|
|
558
570
|
SET last_viewed_at = ?
|
|
559
571
|
WHERE id = ?
|
|
@@ -565,37 +577,37 @@
|
|
|
565
577
|
UPDATE worktrees
|
|
566
578
|
SET updated_at = ?
|
|
567
579
|
WHERE id = ?
|
|
568
|
-
`).run(s.getTime(),t)}(e,t.worktreeId,t.timestamp),"user"===t.role&&O(e,t.worktreeId,t.content,t.timestamp),{id:s,...t}}function
|
|
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=`
|
|
569
581
|
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id
|
|
570
582
|
FROM chat_messages
|
|
571
583
|
WHERE worktree_id = ? AND (? IS NULL OR timestamp < ?)
|
|
572
|
-
`,
|
|
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(`
|
|
573
585
|
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id
|
|
574
586
|
FROM chat_messages
|
|
575
587
|
WHERE worktree_id = ? AND role = 'user'
|
|
576
588
|
ORDER BY timestamp DESC
|
|
577
589
|
LIMIT 1
|
|
578
|
-
`).get(t);return s?
|
|
590
|
+
`).get(t);return s?o(s):null}function N(e,t){e.prepare(`
|
|
579
591
|
DELETE FROM chat_messages
|
|
580
592
|
WHERE worktree_id = ?
|
|
581
|
-
`).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(`
|
|
582
594
|
DELETE FROM chat_messages
|
|
583
595
|
WHERE worktree_id = ? AND cli_tool_id = ?
|
|
584
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(`
|
|
585
597
|
SELECT worktree_id, cli_tool_id, last_captured_line, in_progress_message_id
|
|
586
598
|
FROM session_states
|
|
587
599
|
WHERE worktree_id = ? AND cli_tool_id = ?
|
|
588
|
-
`).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(`
|
|
589
601
|
INSERT INTO session_states (worktree_id, cli_tool_id, last_captured_line)
|
|
590
602
|
VALUES (?, ?, ?)
|
|
591
603
|
ON CONFLICT(worktree_id, cli_tool_id) DO UPDATE SET
|
|
592
604
|
last_captured_line = excluded.last_captured_line
|
|
593
|
-
`).run(t,s,r)}function
|
|
605
|
+
`).run(t,s,r)}function g(e,t,s){!function(e,t,s,r){e.prepare(`
|
|
594
606
|
INSERT INTO session_states (worktree_id, cli_tool_id, last_captured_line, in_progress_message_id)
|
|
595
607
|
VALUES (?, ?, 0, ?)
|
|
596
608
|
ON CONFLICT(worktree_id, cli_tool_id) DO UPDATE SET
|
|
597
609
|
in_progress_message_id = excluded.in_progress_message_id
|
|
598
|
-
`).run(t,s,null)}(e,t,s,0)}function
|
|
610
|
+
`).run(t,s,null)}(e,t,s,0)}function I(e,t,s){s?e.prepare(`
|
|
599
611
|
DELETE FROM session_states
|
|
600
612
|
WHERE worktree_id = ? AND cli_tool_id = ?
|
|
601
613
|
`).run(t,s):e.prepare(`
|
|
@@ -606,15 +618,15 @@
|
|
|
606
618
|
SET last_user_message = ?,
|
|
607
619
|
last_user_message_at = ?
|
|
608
620
|
WHERE id = ?
|
|
609
|
-
`),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(`
|
|
610
622
|
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id
|
|
611
623
|
FROM chat_messages
|
|
612
624
|
WHERE id = ?
|
|
613
|
-
`).get(t);return s?
|
|
625
|
+
`).get(t);return s?o(s):null}function D(e,t,s){e.prepare(`
|
|
614
626
|
UPDATE chat_messages
|
|
615
627
|
SET prompt_data = ?
|
|
616
628
|
WHERE id = ?
|
|
617
|
-
`).run(JSON.stringify(s),t)}function
|
|
629
|
+
`).run(JSON.stringify(s),t)}function S(e,t,s){let r=e.prepare(`
|
|
618
630
|
SELECT id, prompt_data
|
|
619
631
|
FROM chat_messages
|
|
620
632
|
WHERE worktree_id = ?
|
|
@@ -626,49 +638,57 @@
|
|
|
626
638
|
UPDATE chat_messages
|
|
627
639
|
SET prompt_data = ?
|
|
628
640
|
WHERE id = ?
|
|
629
|
-
`),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(`
|
|
630
642
|
UPDATE worktrees
|
|
631
643
|
SET favorite = ?
|
|
632
644
|
WHERE id = ?
|
|
633
|
-
`).run(s?1:0,t)}function
|
|
645
|
+
`).run(s?1:0,t)}function x(e,t,s){e.prepare(`
|
|
634
646
|
UPDATE worktrees
|
|
635
647
|
SET status = ?
|
|
636
648
|
WHERE id = ?
|
|
637
|
-
`).run(s,t)}function
|
|
649
|
+
`).run(s,t)}function C(e,t,s){e.prepare(`
|
|
638
650
|
UPDATE worktrees
|
|
639
651
|
SET cli_tool_id = ?
|
|
640
652
|
WHERE id = ?
|
|
641
|
-
`).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(`
|
|
642
662
|
SELECT id, worktree_id, title, content, position, created_at, updated_at
|
|
643
663
|
FROM worktree_memos
|
|
644
664
|
WHERE worktree_id = ?
|
|
645
665
|
ORDER BY position ASC
|
|
646
|
-
`).all(t).map(
|
|
666
|
+
`).all(t).map(U)}function F(e,t){let s=e.prepare(`
|
|
647
667
|
SELECT id, worktree_id, title, content, position, created_at, updated_at
|
|
648
668
|
FROM worktree_memos
|
|
649
669
|
WHERE id = ?
|
|
650
|
-
`).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(`
|
|
651
671
|
INSERT INTO worktree_memos (id, worktree_id, title, content, position, created_at, updated_at)
|
|
652
672
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
653
|
-
`).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(`
|
|
654
674
|
UPDATE worktree_memos
|
|
655
675
|
SET ${a.join(", ")}
|
|
656
676
|
WHERE id = ?
|
|
657
|
-
`).run(...o)}function
|
|
677
|
+
`).run(...o)}function M(e,t){e.prepare(`
|
|
658
678
|
DELETE FROM worktree_memos
|
|
659
679
|
WHERE id = ?
|
|
660
|
-
`).run(t)}function
|
|
680
|
+
`).run(t)}function v(e,t,s){e.prepare(`
|
|
661
681
|
UPDATE worktrees
|
|
662
682
|
SET initial_branch = ?
|
|
663
683
|
WHERE id = ?
|
|
664
|
-
`).run(s,t)}function
|
|
684
|
+
`).run(s,t)}function P(e,t){let s=e.prepare(`
|
|
665
685
|
SELECT initial_branch
|
|
666
686
|
FROM worktrees
|
|
667
687
|
WHERE id = ?
|
|
668
|
-
`).get(t);return s?.initial_branch??null}function
|
|
688
|
+
`).get(t);return s?.initial_branch??null}function B(e,t){return e.prepare(`
|
|
669
689
|
SELECT id FROM worktrees WHERE repository_path = ?
|
|
670
|
-
`).all(t).map(e=>e.id)}function
|
|
690
|
+
`).all(t).map(e=>e.id)}function H(e,t){return{deletedCount:e.prepare(`
|
|
671
691
|
DELETE FROM worktrees WHERE repository_path = ?
|
|
672
|
-
`).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(`
|
|
673
693
|
DELETE FROM worktrees WHERE id IN (${s})
|
|
674
|
-
`).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/
|
|
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="}
|