commandmate 0.3.2 → 0.3.4
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/proxy/[...path]/route.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 +11 -10
- 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 +67 -41
- 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/pages-manifest.json +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/8091-c0e955616dd86f82.js +1 -0
- package/.next/static/chunks/app/page-9e523a8f415bc707.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-9c0c64488c17db3c.js +1 -0
- package/.next/static/chunks/{main-db79434ee4a6c931.js → main-2feda12a4d321111.js} +1 -1
- package/.next/static/css/{bd6065b03ddb3efd.css → fa3df0e6f437f2ba.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 +98 -2
- package/dist/server/src/lib/cli-tools/vibe-local.js +172 -0
- package/dist/server/src/lib/cmate-parser.js +25 -3
- package/dist/server/src/lib/db-migrations.js +66 -1
- package/dist/server/src/lib/db.js +70 -1
- package/dist/server/src/lib/prompt-detector.js +23 -3
- package/dist/server/src/lib/response-poller.js +50 -23
- 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 +4 -4
- 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 → BiyH3zkbySg7ZWTeZuXqj}/_buildManifest.js +0 -0
- /package/.next/static/{j8HFvzDZj7tHjAnhpXUno → BiyH3zkbySg7ZWTeZuXqj}/_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:()=>
|
|
1
|
+
"use strict";exports.id=7425,exports.ids=[7425],exports.modules={16672:(e,t,s)=>{s.d(t,{ZP:()=>o}),s(92048);var r=s(55315);function o(){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:()=>o});let r=["/etc","/usr","/bin","/sbin","/var","/tmp","/dev","/sys","/proc"];function o(e){return r.some(t=>e.startsWith(t))}},83513:(e,t,s)=>{s.d(t,{Ho:()=>a,Ns:()=>i,Y1:()=>l,ZP:()=>n,_7:()=>o,tK:()=>r});let r=["claude","codex","gemini","vibe-local"];function o(e){return r.includes(e)}let a=128,i=2097152;function n(e){return"number"==typeof e&&Number.isInteger(e)&&e>=a&&e<=i}let l=/^[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),o=s.n(r),a=s(55315),i=s.n(a),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.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.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
|
|
@@ -177,10 +177,10 @@
|
|
|
177
177
|
ON worktree_memos(worktree_id, position);
|
|
178
178
|
`);let{randomUUID:t}=s(84770),r=e.prepare(`
|
|
179
179
|
SELECT id, memo FROM worktrees WHERE memo IS NOT NULL AND memo != ''
|
|
180
|
-
`).all(),
|
|
180
|
+
`).all(),o=e.prepare(`
|
|
181
181
|
INSERT INTO worktree_memos (id, worktree_id, title, content, position, created_at, updated_at)
|
|
182
182
|
VALUES (?, ?, 'Memo', ?, 0, ?, ?)
|
|
183
|
-
`),
|
|
183
|
+
`),a=Date.now();for(let e of r)o.run(t(),e.id,e.memo,a,a);console.log(`✓ Created worktree_memos table`),console.log(`✓ Migrated ${r.length} existing memos to new table`)},down:e=>{e.exec("DROP TABLE IF EXISTS worktree_memos"),console.log("✓ Dropped worktree_memos table")}},{version:11,name:"add-viewed-tracking",up:e=>{e.exec(`
|
|
184
184
|
ALTER TABLE worktrees ADD COLUMN last_viewed_at TEXT;
|
|
185
185
|
`),e.exec(`
|
|
186
186
|
CREATE INDEX IF NOT EXISTS idx_chat_messages_assistant_latest
|
|
@@ -427,16 +427,29 @@
|
|
|
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)")}},{version:20,name:"add-vibe-local-context-window-column",up:e=>{e.exec(`
|
|
442
|
+
ALTER TABLE worktrees ADD COLUMN vibe_local_context_window INTEGER DEFAULT NULL;
|
|
443
|
+
`),console.log("✓ Added vibe_local_context_window column to worktrees table")},down:()=>{console.log("No rollback for vibe_local_context_window column (SQLite limitation)")}}];function _(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(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(o())(e)).pragma("foreign_keys = ON"),function(e){!function(e){e.exec(`
|
|
431
444
|
CREATE TABLE IF NOT EXISTS schema_version (
|
|
432
445
|
version INTEGER PRIMARY KEY,
|
|
433
446
|
name TEXT NOT NULL,
|
|
434
447
|
applied_at INTEGER NOT NULL
|
|
435
448
|
);
|
|
436
|
-
`)}(e);let t=
|
|
449
|
+
`)}(e);let t=E(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
450
|
INSERT INTO schema_version (version, name, applied_at)
|
|
438
451
|
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: ${
|
|
452
|
+
`).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(e)}`)}(T)}return T}function p(){T&&(T.close(),T=null)}},75748:(e,t,s)=>{s.d(t,{DF:()=>G,Db:()=>F,ER:()=>l,Ek:()=>P,GA:()=>D,GP:()=>S,GZ:()=>L,HE:()=>N,IH:()=>w,Mf:()=>g,Nf:()=>k,Nr:()=>y,OK:()=>A,Of:()=>c,Pv:()=>H,Q7:()=>B,R3:()=>x,S$:()=>O,VW:()=>C,Xv:()=>n,Yg:()=>U,ZI:()=>b,_U:()=>u,_e:()=>M,dD:()=>v,dl:()=>h,ey:()=>X,gU:()=>_,j8:()=>I,ly:()=>E,pM:()=>W,qZ:()=>i,tn:()=>p,vX:()=>m,xr:()=>d,y:()=>T,zl:()=>R});var r=s(84770),o=s(55483);function a(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
453
|
CREATE TABLE IF NOT EXISTS worktrees (
|
|
441
454
|
id TEXT PRIMARY KEY,
|
|
442
455
|
name TEXT NOT NULL,
|
|
@@ -484,15 +497,16 @@
|
|
|
484
497
|
PRIMARY KEY (worktree_id, cli_tool_id),
|
|
485
498
|
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
486
499
|
);
|
|
487
|
-
`)}function
|
|
500
|
+
`)}function n(e,t){let s=`
|
|
488
501
|
SELECT
|
|
489
502
|
w.id, w.name, w.path, w.repository_path, w.repository_name, w.description,
|
|
490
503
|
w.last_user_message, w.last_user_message_at, w.last_message_summary,
|
|
491
504
|
w.updated_at, w.favorite, w.status, w.link, w.cli_tool_id, w.last_viewed_at,
|
|
505
|
+
w.selected_agents, w.vibe_local_model, w.vibe_local_context_window,
|
|
492
506
|
(SELECT MAX(timestamp) FROM chat_messages
|
|
493
507
|
WHERE worktree_id = w.id AND role = 'assistant') as last_assistant_message_at
|
|
494
508
|
FROM worktrees w
|
|
495
|
-
`,r=[];t&&(s+=" WHERE w.repository_path = ?",r.push(t)),s+=" ORDER BY w.updated_at DESC NULLS LAST";let a=e.prepare(s).all(...r),
|
|
509
|
+
`,r=[];t&&(s+=" WHERE w.repository_path = ?",r.push(t)),s+=" ORDER BY w.updated_at DESC NULLS LAST";let a=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
510
|
WITH ranked_messages AS (
|
|
497
511
|
SELECT
|
|
498
512
|
worktree_id,
|
|
@@ -505,12 +519,11 @@
|
|
|
505
519
|
FROM chat_messages
|
|
506
520
|
WHERE worktree_id IN (${s})
|
|
507
521
|
AND role = 'user'
|
|
508
|
-
AND cli_tool_id IN ('claude', 'codex', 'gemini')
|
|
509
522
|
)
|
|
510
523
|
SELECT worktree_id, cli_tool_id, content
|
|
511
524
|
FROM ranked_messages
|
|
512
525
|
WHERE rn = 1
|
|
513
|
-
`).all(...t),
|
|
526
|
+
`).all(...t),o=new Map;for(let e of t)o.set(e,{});for(let e of r){let t=o.get(e.worktree_id)||{};t[e.cli_tool_id]=e.content.substring(0,50),o.set(e.worktree_id,t)}return o}(e,a.map(e=>e.id));return a.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,o.e7)(e.selected_agents),vibeLocalModel:e.vibe_local_model??null,vibeLocalContextWindow:e.vibe_local_context_window??null}})}function l(e){return e.prepare(`
|
|
514
527
|
SELECT
|
|
515
528
|
repository_path as path,
|
|
516
529
|
repository_name as name,
|
|
@@ -524,11 +537,12 @@
|
|
|
524
537
|
w.id, w.name, w.path, w.repository_path, w.repository_name, w.description,
|
|
525
538
|
w.last_user_message, w.last_user_message_at, w.last_message_summary,
|
|
526
539
|
w.updated_at, w.favorite, w.status, w.link, w.cli_tool_id, w.last_viewed_at,
|
|
540
|
+
w.selected_agents, w.vibe_local_model, w.vibe_local_context_window,
|
|
527
541
|
(SELECT MAX(timestamp) FROM chat_messages
|
|
528
542
|
WHERE worktree_id = w.id AND role = 'assistant') as last_assistant_message_at
|
|
529
543
|
FROM worktrees w
|
|
530
544
|
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
|
|
545
|
+
`).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,o.e7)(s.selected_agents),vibeLocalModel:s.vibe_local_model??null,vibeLocalContextWindow:s.vibe_local_context_window??null}:null}function E(e,t){e.prepare("DELETE FROM worktrees WHERE path = ? AND id != ?").run(t.path,t.id),e.prepare(`
|
|
532
546
|
INSERT INTO worktrees (
|
|
533
547
|
id, name, path, repository_path, repository_name, description,
|
|
534
548
|
last_user_message, last_user_message_at, last_message_summary, updated_at, cli_tool_id
|
|
@@ -545,15 +559,15 @@
|
|
|
545
559
|
last_message_summary = COALESCE(excluded.last_message_summary, worktrees.last_message_summary),
|
|
546
560
|
updated_at = COALESCE(excluded.updated_at, worktrees.updated_at),
|
|
547
561
|
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
|
|
562
|
+
`).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
563
|
UPDATE worktrees
|
|
550
564
|
SET description = ?
|
|
551
565
|
WHERE id = ?
|
|
552
|
-
`).run(s||null,t)}function
|
|
566
|
+
`).run(s||null,t)}function T(e,t,s){e.prepare(`
|
|
553
567
|
UPDATE worktrees
|
|
554
568
|
SET link = ?
|
|
555
569
|
WHERE id = ?
|
|
556
|
-
`).run(s||null,t)}function
|
|
570
|
+
`).run(s||null,t)}function c(e,t,s){e.prepare(`
|
|
557
571
|
UPDATE worktrees
|
|
558
572
|
SET last_viewed_at = ?
|
|
559
573
|
WHERE id = ?
|
|
@@ -565,48 +579,48 @@
|
|
|
565
579
|
UPDATE worktrees
|
|
566
580
|
SET updated_at = ?
|
|
567
581
|
WHERE id = ?
|
|
568
|
-
`).run(s.getTime(),t)}(e,t.worktreeId,t.timestamp),"user"===t.role&&
|
|
582
|
+
`).run(s.getTime(),t)}(e,t.worktreeId,t.timestamp),"user"===t.role&&A(e,t.worktreeId,t.content,t.timestamp),{id:s,...t}}function u(e,t,s,r=50,o){let i=`
|
|
569
583
|
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id
|
|
570
584
|
FROM chat_messages
|
|
571
585
|
WHERE worktree_id = ? AND (? IS NULL OR timestamp < ?)
|
|
572
|
-
`,
|
|
586
|
+
`,n=[t,s?.getTime()||null,s?.getTime()||null];return o&&(i+=" AND cli_tool_id = ?",n.push(o)),i+=" ORDER BY timestamp DESC LIMIT ?",n.push(r),e.prepare(i).all(...n).map(a)}function m(e,t){let s=e.prepare(`
|
|
573
587
|
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id
|
|
574
588
|
FROM chat_messages
|
|
575
589
|
WHERE worktree_id = ? AND role = 'user'
|
|
576
590
|
ORDER BY timestamp DESC
|
|
577
591
|
LIMIT 1
|
|
578
|
-
`).get(t);return s?a(s):null}function
|
|
592
|
+
`).get(t);return s?a(s):null}function N(e,t){e.prepare(`
|
|
579
593
|
DELETE FROM chat_messages
|
|
580
594
|
WHERE worktree_id = ?
|
|
581
|
-
`).run(t),console.log(`[deleteAllMessages] Deleted all messages for worktree: ${t}`)}function
|
|
595
|
+
`).run(t),console.log(`[deleteAllMessages] Deleted all messages for worktree: ${t}`)}function L(e,t,s){let r=e.prepare(`
|
|
582
596
|
DELETE FROM chat_messages
|
|
583
597
|
WHERE worktree_id = ? AND cli_tool_id = ?
|
|
584
598
|
`).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
599
|
SELECT worktree_id, cli_tool_id, last_captured_line, in_progress_message_id
|
|
586
600
|
FROM session_states
|
|
587
601
|
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
|
|
602
|
+
`).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
603
|
INSERT INTO session_states (worktree_id, cli_tool_id, last_captured_line)
|
|
590
604
|
VALUES (?, ?, ?)
|
|
591
605
|
ON CONFLICT(worktree_id, cli_tool_id) DO UPDATE SET
|
|
592
606
|
last_captured_line = excluded.last_captured_line
|
|
593
|
-
`).run(t,s,r)}function
|
|
607
|
+
`).run(t,s,r)}function g(e,t,s){!function(e,t,s,r){e.prepare(`
|
|
594
608
|
INSERT INTO session_states (worktree_id, cli_tool_id, last_captured_line, in_progress_message_id)
|
|
595
609
|
VALUES (?, ?, 0, ?)
|
|
596
610
|
ON CONFLICT(worktree_id, cli_tool_id) DO UPDATE SET
|
|
597
611
|
in_progress_message_id = excluded.in_progress_message_id
|
|
598
|
-
`).run(t,s,null)}(e,t,s,0)}function
|
|
612
|
+
`).run(t,s,null)}(e,t,s,0)}function I(e,t,s){s?e.prepare(`
|
|
599
613
|
DELETE FROM session_states
|
|
600
614
|
WHERE worktree_id = ? AND cli_tool_id = ?
|
|
601
615
|
`).run(t,s):e.prepare(`
|
|
602
616
|
DELETE FROM session_states
|
|
603
617
|
WHERE worktree_id = ?
|
|
604
|
-
`).run(t)}function
|
|
618
|
+
`).run(t)}function A(e,t,s,r){let o=e.prepare(`
|
|
605
619
|
UPDATE worktrees
|
|
606
620
|
SET last_user_message = ?,
|
|
607
621
|
last_user_message_at = ?
|
|
608
622
|
WHERE id = ?
|
|
609
|
-
`),
|
|
623
|
+
`),a=s.substring(0,200);o.run(a,r.getTime(),t)}function O(e,t){let s=e.prepare(`
|
|
610
624
|
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id
|
|
611
625
|
FROM chat_messages
|
|
612
626
|
WHERE id = ?
|
|
@@ -614,7 +628,7 @@
|
|
|
614
628
|
UPDATE chat_messages
|
|
615
629
|
SET prompt_data = ?
|
|
616
630
|
WHERE id = ?
|
|
617
|
-
`).run(JSON.stringify(s),t)}function
|
|
631
|
+
`).run(JSON.stringify(s),t)}function S(e,t,s){let r=e.prepare(`
|
|
618
632
|
SELECT id, prompt_data
|
|
619
633
|
FROM chat_messages
|
|
620
634
|
WHERE worktree_id = ?
|
|
@@ -622,11 +636,11 @@
|
|
|
622
636
|
AND message_type = 'prompt'
|
|
623
637
|
AND json_extract(prompt_data, '$.status') = 'pending'
|
|
624
638
|
ORDER BY timestamp DESC
|
|
625
|
-
`).all(t,s);if(0===r.length)return 0;let
|
|
639
|
+
`).all(t,s);if(0===r.length)return 0;let o=e.prepare(`
|
|
626
640
|
UPDATE chat_messages
|
|
627
641
|
SET prompt_data = ?
|
|
628
642
|
WHERE id = ?
|
|
629
|
-
`),
|
|
643
|
+
`),a=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(),o.run(JSON.stringify(t),e.id),a++}catch{}return a}function x(e,t,s){e.prepare(`
|
|
630
644
|
UPDATE worktrees
|
|
631
645
|
SET favorite = ?
|
|
632
646
|
WHERE id = ?
|
|
@@ -634,41 +648,53 @@
|
|
|
634
648
|
UPDATE worktrees
|
|
635
649
|
SET status = ?
|
|
636
650
|
WHERE id = ?
|
|
637
|
-
`).run(s,t)}function
|
|
651
|
+
`).run(s,t)}function C(e,t,s){e.prepare(`
|
|
638
652
|
UPDATE worktrees
|
|
639
653
|
SET cli_tool_id = ?
|
|
640
654
|
WHERE id = ?
|
|
641
|
-
`).run(s,t)}function
|
|
655
|
+
`).run(s,t)}function X(e,t,s){e.prepare(`
|
|
656
|
+
UPDATE worktrees
|
|
657
|
+
SET selected_agents = ?
|
|
658
|
+
WHERE id = ?
|
|
659
|
+
`).run(JSON.stringify(s),t)}function h(e,t,s){e.prepare(`
|
|
660
|
+
UPDATE worktrees
|
|
661
|
+
SET vibe_local_model = ?
|
|
662
|
+
WHERE id = ?
|
|
663
|
+
`).run(s,t)}function U(e,t,s){e.prepare(`
|
|
664
|
+
UPDATE worktrees
|
|
665
|
+
SET vibe_local_context_window = ?
|
|
666
|
+
WHERE id = ?
|
|
667
|
+
`).run(s,t)}function f(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
668
|
SELECT id, worktree_id, title, content, position, created_at, updated_at
|
|
643
669
|
FROM worktree_memos
|
|
644
670
|
WHERE worktree_id = ?
|
|
645
671
|
ORDER BY position ASC
|
|
646
|
-
`).all(t).map(
|
|
672
|
+
`).all(t).map(f)}function b(e,t){let s=e.prepare(`
|
|
647
673
|
SELECT id, worktree_id, title, content, position, created_at, updated_at
|
|
648
674
|
FROM worktree_memos
|
|
649
675
|
WHERE id = ?
|
|
650
|
-
`).get(t);return s?
|
|
676
|
+
`).get(t);return s?f(s):null}function v(e,t,s){let o=(0,r.randomUUID)(),a=Date.now(),i=s.title??"Memo",n=s.content??"";return e.prepare(`
|
|
651
677
|
INSERT INTO worktree_memos (id, worktree_id, title, content, position, created_at, updated_at)
|
|
652
678
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
653
|
-
`).run(
|
|
679
|
+
`).run(o,t,i,n,s.position,a,a),{id:o,worktreeId:t,title:i,content:n,position:s.position,createdAt:new Date(a),updatedAt:new Date(a)}}function y(e,t,s){let r=Date.now(),o=["updated_at = ?"],a=[r];void 0!==s.title&&(o.push("title = ?"),a.push(s.title)),void 0!==s.content&&(o.push("content = ?"),a.push(s.content)),a.push(t),e.prepare(`
|
|
654
680
|
UPDATE worktree_memos
|
|
655
|
-
SET ${
|
|
681
|
+
SET ${o.join(", ")}
|
|
656
682
|
WHERE id = ?
|
|
657
|
-
`).run(...
|
|
683
|
+
`).run(...a)}function M(e,t){e.prepare(`
|
|
658
684
|
DELETE FROM worktree_memos
|
|
659
685
|
WHERE id = ?
|
|
660
|
-
`).run(t)}function
|
|
686
|
+
`).run(t)}function P(e,t,s){e.prepare(`
|
|
661
687
|
UPDATE worktrees
|
|
662
688
|
SET initial_branch = ?
|
|
663
689
|
WHERE id = ?
|
|
664
|
-
`).run(s,t)}function
|
|
690
|
+
`).run(s,t)}function B(e,t){let s=e.prepare(`
|
|
665
691
|
SELECT initial_branch
|
|
666
692
|
FROM worktrees
|
|
667
693
|
WHERE id = ?
|
|
668
|
-
`).get(t);return s?.initial_branch??null}function
|
|
694
|
+
`).get(t);return s?.initial_branch??null}function H(e,t){return e.prepare(`
|
|
669
695
|
SELECT id FROM worktrees WHERE repository_path = ?
|
|
670
|
-
`).all(t).map(e=>e.id)}function
|
|
696
|
+
`).all(t).map(e=>e.id)}function G(e,t){return{deletedCount:e.prepare(`
|
|
671
697
|
DELETE FROM worktrees WHERE repository_path = ?
|
|
672
|
-
`).run(t).changes}}function
|
|
698
|
+
`).run(t).changes}}function W(e,t){if(0===t.length)return{deletedCount:0};let s=t.map(()=>"?").join(",");return{deletedCount:e.prepare(`
|
|
673
699
|
DELETE FROM worktrees WHERE id IN (${s})
|
|
674
|
-
`).run(...t).changes}}},98838:(e,t,s)=>{s.d(t,{dU:()=>
|
|
700
|
+
`).run(...t).changes}}},98838:(e,t,s)=>{s.d(t,{dU:()=>u,Hb:()=>T,LI:()=>p});var r=s(55315),o=s.n(r),a=s(19801),i=s(16672),n=s(43753);function l(){return(0,i.ZP)()?o().join((0,a.homedir)(),".commandmate","data","cm.db"):o().resolve(process.cwd(),"data","cm.db")}function _(e){let t=o().resolve(e);if((0,i.ZP)()){let e=(0,a.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 E={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[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",a=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=_(a)}catch{console.warn(`[Security] Invalid DB path "${a}", using default.`),e=_(l())}return{CM_ROOT_DIR:o().resolve(t),CM_PORT:s,CM_BIND:r,CM_DB_PATH:e}}},55483:(e,t,s)=>{s.d(t,{KE:()=>_,e7:()=>l});var r=s(83513);let o=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function a(e){return e.replace(o,"").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: ${a(e)}`),i;let s=n(t);if(!s.valid)return console.warn(`[selected-agents] Invalid data in DB (${s.error}), falling back to default: ${a(e)}`),i;return s.value}catch{return console.warn(`[selected-agents] JSON parse error in DB, falling back to default: ${a(e)}`),i}}function _(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+=` -m ${s.vibeLocalModel}`);let n=s?.vibeLocalContextWindow;(0,w.ZP)(n)&&(i+=` --context-window ${Number(n)}`)}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,f=0;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}),f=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}),f=0;continue}if(0===r.length&&(s.startsWith("❯")||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)){if(++f>5){d=t;break}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 h=r.some(e=>e.isDefault);if(r.length<2||s&&!h||!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 g=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),w=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:g.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:w},cleanContent:g.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\u203A]\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,r){let a=x(t,s,i,n,o),l=e.slice(a);return{response:(0,u.vp)(l.join("\n")),isComplete:!0,lineCount:s,promptDetection:r,bufferReset:i}}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 console.log(`[checkForResponse] Session not running for ${e} (${t}), stopping poller`),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||"codex"===s){let e=w(o.join("\n"),s);if(e.isPrompt)return p(o,t,r,c,s,S,e)}let T=(0,u.vp)(h),b=g.test(T),P=y.test(T),v=$.test(T),k=("codex"===s||"gemini"===s||"vibe-local"===s)&&b&&!v,I="claude"===s&&b&&P&&!v;if(k||I){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,bufferReset:c}}let E=w(o.join("\n"),s);if(E.isPrompt)return p(o,t,r,c,s,S,E);let L=[],N=c||t>=r-5,D=N?S(80):-1,M=N?D>=0?D+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))||L.push(t)}let A=L.join("\n").trim();return A?{response:A,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.bufferReset&&h.lineCount===a&&!n?.inProgressMessageId)return!1;if(!h.bufferReset&&h.lineCount<=a)return console.log(`[checkForResponse] Already saved up to line ${a}, skipping (result: ${h.lineCount})`),!1;let g=h.promptDetection??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 b=(0,o.GP)(s,e,t);b>0&&console.log(`Marked ${b} pending prompt(s) as answered for ${e}`);let P=(0,o.zl)(s,e,t);if(P&&h.lineCount<=P.lastCapturedLine)return console.log(`[checkForResponse] Race condition detected, skipping save (result: ${h.lineCount}, current: ${P.lastCapturedLine})`),!1;let v=(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:v}),(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": "BiyH3zkbySg7ZWTeZuXqj",
|
|
21
|
+
"NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "PVPAPo2Yb8QPY8s/PRbFoOJqyalgbV37ienkbsfxtxM=",
|
|
22
|
+
"__NEXT_PREVIEW_MODE_ID": "627a86862bb21611d90b4c05f9d87e9e",
|
|
23
|
+
"__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "467f4ce8ef71d51f1d704542c0dd61a1f48718fad0aeb68f8f8de8f57a797a8f",
|
|
24
|
+
"__NEXT_PREVIEW_MODE_SIGNING_KEY": "f06e7285c75cd644e0d77695764455c232d81bb4241907f0d6e9039855daa0c5"
|
|
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/BiyH3zkbySg7ZWTeZuXqj/_buildManifest.js" defer=""></script><script src="/_next/static/BiyH3zkbySg7ZWTeZuXqj/_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":"BiyH3zkbySg7ZWTeZuXqj","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"/
|
|
1
|
+
{"/_error":"pages/_error.js","/_app":"pages/_app.js","/_document":"pages/_document.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{},"edge":{},"encryptionKey":"
|
|
1
|
+
{"node":{},"edge":{},"encryptionKey":"PVPAPo2Yb8QPY8s/PRbFoOJqyalgbV37ienkbsfxtxM="}
|