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.
Files changed (113) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +13 -13
  3. package/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/build-manifest.json +4 -4
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/cache/config.json +3 -3
  7. package/.next/cache/webpack/client-production/0.pack +0 -0
  8. package/.next/cache/webpack/client-production/1.pack +0 -0
  9. package/.next/cache/webpack/client-production/2.pack +0 -0
  10. package/.next/cache/webpack/client-production/index.pack +0 -0
  11. package/.next/cache/webpack/client-production/index.pack.old +0 -0
  12. package/.next/cache/webpack/edge-server-production/0.pack +0 -0
  13. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  14. package/.next/cache/webpack/server-production/0.pack +0 -0
  15. package/.next/cache/webpack/server-production/index.pack +0 -0
  16. package/.next/next-server.js.nft.json +1 -1
  17. package/.next/prerender-manifest.json +1 -1
  18. package/.next/required-server-files.json +1 -1
  19. package/.next/routes-manifest.json +1 -1
  20. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/api/app/update-check/route.js +1 -1
  22. package/.next/server/app/api/ollama/models/route.js +1 -0
  23. package/.next/server/app/api/ollama/models/route.js.nft.json +1 -0
  24. package/.next/server/app/api/ollama/models.body +1 -0
  25. package/.next/server/app/api/ollama/models.meta +1 -0
  26. package/.next/server/app/api/repositories/route.js +3 -3
  27. package/.next/server/app/api/repositories/route.js.nft.json +1 -1
  28. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
  29. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
  30. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
  31. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
  32. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
  33. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
  34. package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
  35. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
  36. package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
  37. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
  38. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
  39. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
  40. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
  41. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
  42. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
  43. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
  44. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
  45. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
  46. package/.next/server/app/api/worktrees/[id]/route.js +1 -1
  47. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
  48. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
  49. package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
  50. package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -2
  51. package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
  52. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
  53. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
  54. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
  55. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
  56. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
  57. package/.next/server/app/api/worktrees/route.js +1 -1
  58. package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
  59. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  60. package/.next/server/app/page.js +1 -1
  61. package/.next/server/app/page_client-reference-manifest.js +1 -1
  62. package/.next/server/app/proxy/[...path]/route.js +1 -1
  63. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  64. package/.next/server/app/worktrees/[id]/page.js +4 -4
  65. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  66. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app-paths-manifest.json +11 -10
  68. package/.next/server/chunks/2314.js +1 -1
  69. package/.next/server/chunks/4559.js +1 -1
  70. package/.next/server/chunks/539.js +10 -10
  71. package/.next/server/chunks/5853.js +1 -1
  72. package/.next/server/chunks/6228.js +1 -1
  73. package/.next/server/chunks/7425.js +67 -41
  74. package/.next/server/chunks/7566.js +1 -1
  75. package/.next/server/chunks/8693.js +1 -1
  76. package/.next/server/chunks/9446.js +1 -0
  77. package/.next/server/functions-config-manifest.json +1 -1
  78. package/.next/server/middleware-build-manifest.js +1 -1
  79. package/.next/server/middleware-manifest.json +5 -5
  80. package/.next/server/pages/500.html +1 -1
  81. package/.next/server/pages-manifest.json +1 -1
  82. package/.next/server/server-reference-manifest.json +1 -1
  83. package/.next/static/chunks/8091-c0e955616dd86f82.js +1 -0
  84. package/.next/static/chunks/app/page-9e523a8f415bc707.js +1 -0
  85. package/.next/static/chunks/app/worktrees/[id]/page-9c0c64488c17db3c.js +1 -0
  86. package/.next/static/chunks/{main-db79434ee4a6c931.js → main-2feda12a4d321111.js} +1 -1
  87. package/.next/static/css/{bd6065b03ddb3efd.css → fa3df0e6f437f2ba.css} +1 -1
  88. package/.next/trace +5 -5
  89. package/.next/types/app/api/ollama/models/route.ts +343 -0
  90. package/README.md +74 -76
  91. package/dist/server/src/config/schedule-config.js +7 -1
  92. package/dist/server/src/lib/auto-yes-manager.js +2 -2
  93. package/dist/server/src/lib/claude-executor.js +15 -4
  94. package/dist/server/src/lib/cli-patterns.js +73 -9
  95. package/dist/server/src/lib/cli-tools/gemini.js +81 -22
  96. package/dist/server/src/lib/cli-tools/manager.js +4 -2
  97. package/dist/server/src/lib/cli-tools/types.js +98 -2
  98. package/dist/server/src/lib/cli-tools/vibe-local.js +172 -0
  99. package/dist/server/src/lib/cmate-parser.js +25 -3
  100. package/dist/server/src/lib/db-migrations.js +66 -1
  101. package/dist/server/src/lib/db.js +70 -1
  102. package/dist/server/src/lib/prompt-detector.js +23 -3
  103. package/dist/server/src/lib/response-poller.js +50 -23
  104. package/dist/server/src/lib/schedule-manager.js +6 -2
  105. package/dist/server/src/lib/selected-agents-validator.js +99 -0
  106. package/dist/server/src/types/sidebar.js +9 -4
  107. package/package.json +4 -4
  108. package/.next/server/chunks/7536.js +0 -1
  109. package/.next/static/chunks/8091-925542bdfc843dce.js +0 -1
  110. package/.next/static/chunks/app/page-238b5a70d8c101e9.js +0 -1
  111. package/.next/static/chunks/app/worktrees/[id]/page-0c889ab3f30d5af7.js +0 -1
  112. /package/.next/static/{j8HFvzDZj7tHjAnhpXUno → BiyH3zkbySg7ZWTeZuXqj}/_buildManifest.js +0 -0
  113. /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:()=>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:()=>c,getDbInstance:()=>p});var r=s(85890),a=s.n(r),o=s(55315),i=s.n(o),E=s(75748);let _=[{version:1,name:"initial-schema",up:e=>{(0,E.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(`
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=n(e.path),r=i().basename(t);s.run(t,r,e.id)}let r=e.prepare(`
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=n(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(`
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(),a=e.prepare(`
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
- `),o=Date.now();for(let e of r)a.run(t(),e.id,e.memo,o,o);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(`
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")}}];function n(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 l(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 p(){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(`
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=l(e);console.log(`Current schema version: ${t}`);let s=_.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(`
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: ${l(e)}`)}(T)}return T}function c(){T&&(T.close(),T=null)}},75748:(e,t,s)=>{s.d(t,{DF:()=>v,Db:()=>X,ER:()=>E,Ek:()=>M,GA:()=>D,GP:()=>A,GZ:()=>N,HE:()=>u,IH:()=>L,Mf:()=>I,Nf:()=>k,Nr:()=>f,OK:()=>O,Of:()=>T,Pv:()=>b,Q7:()=>y,R3:()=>S,S$:()=>g,VW:()=>x,Xv:()=>i,ZI:()=>h,_U:()=>c,_e:()=>F,dD:()=>U,gU:()=>_,j8:()=>w,ly:()=>n,pM:()=>P,qZ:()=>o,tn:()=>p,vX:()=>m,xr:()=>l,y:()=>d,zl:()=>R});var r=s(84770);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 o(e){e.exec(`
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 i(e,t){let s=`
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),o=function(e,t){if(0===t.length)return new Map;let s=t.map(()=>"?").join(","),r=e.prepare(`
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),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,a.map(e=>e.id));return a.map(e=>{let t=o.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"}})}function E(e){return e.prepare(`
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 n(e,t){e.prepare("DELETE FROM worktrees WHERE path = ? AND id != ?").run(t.path,t.id),e.prepare(`
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 l(e,t,s){e.prepare(`
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 d(e,t,s){e.prepare(`
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 T(e,t,s){e.prepare(`
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&&O(e,t.worktreeId,t.content,t.timestamp),{id:s,...t}}function c(e,t,s,r=50,o){let i=`
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
- `,E=[t,s?.getTime()||null,s?.getTime()||null];return o&&(i+=" AND cli_tool_id = ?",E.push(o)),i+=" ORDER BY timestamp DESC LIMIT ?",E.push(r),e.prepare(i).all(...E).map(a)}function m(e,t){let s=e.prepare(`
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 u(e,t){e.prepare(`
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 N(e,t,s){let r=e.prepare(`
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 L(e,t,s,r){e.prepare(`
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 I(e,t,s){!function(e,t,s,r){e.prepare(`
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 w(e,t,s){s?e.prepare(`
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 O(e,t,s,r){let a=e.prepare(`
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
- `),o=s.substring(0,200);a.run(o,r.getTime(),t)}function g(e,t){let s=e.prepare(`
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 A(e,t,s){let r=e.prepare(`
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 a=e.prepare(`
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
- `),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 S(e,t,s){e.prepare(`
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 x(e,t,s){e.prepare(`
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 C(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 X(e,t){return e.prepare(`
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(C)}function h(e,t){let s=e.prepare(`
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?C(s):null}function U(e,t,s){let a=(0,r.randomUUID)(),o=Date.now(),i=s.title??"Memo",E=s.content??"";return e.prepare(`
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(a,t,i,E,s.position,o,o),{id:a,worktreeId:t,title:i,content:E,position:s.position,createdAt:new Date(o),updatedAt:new Date(o)}}function f(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(`
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 ${a.join(", ")}
681
+ SET ${o.join(", ")}
656
682
  WHERE id = ?
657
- `).run(...o)}function F(e,t){e.prepare(`
683
+ `).run(...a)}function M(e,t){e.prepare(`
658
684
  DELETE FROM worktree_memos
659
685
  WHERE id = ?
660
- `).run(t)}function M(e,t,s){e.prepare(`
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 y(e,t){let s=e.prepare(`
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 b(e,t){return e.prepare(`
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 v(e,t){return{deletedCount:e.prepare(`
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 P(e,t){if(0===t.length)return{deletedCount:0};let s=t.map(()=>"?").join(",");return{deletedCount:e.prepare(`
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:()=>m,Hb:()=>T,LI:()=>c});var r=s(55315),a=s.n(r),o=s(19801),i=s(16672),E=s(43753);function _(){return(0,i.ZP)()?a().join((0,o.homedir)(),".commandmate","data","cm.db"):a().resolve(process.cwd(),"data","cm.db")}function n(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,E.F)(t))throw Error(`Security error: DB path cannot be in system directory: ${t}`);return t}let l={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,l[e])}let p=!1;function c(){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 m(){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&&!p&&(console.warn("[DEPRECATED] DATABASE_PATH is deprecated. Use CM_DB_PATH instead."),p=!0),e}()||_();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=n(o)}catch{console.warn(`[Security] Invalid DB path "${o}", using default.`),e=n(_())}return{CM_ROOT_DIR:a().resolve(t),CM_PORT:s,CM_BIND:r,CM_DB_PATH:e}}}};
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(43839),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.vp)(r)}async function P(e,t,r,n){try{var i;let u=(0,a.Sg)(r),c=(0,o.F)(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)}}};
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/external-apps/[id]/health":{},"/api/external-apps/[id]":{},"/api/external-apps":{},"/api/auth/status":{},"/api/worktrees/[id]/logs/[filename]":{},"/api/worktrees/[id]/logs":{},"/api/worktrees":{},"/proxy/[...path]":{}}}
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-db79434ee4a6c931.js","static/chunks/pages/_app-3c9ca398d360b709.js"],"/_error":["static/chunks/webpack-3c0ee3ce5b546818.js","static/chunks/framework-8e0e0f4a6b83a956.js","static/chunks/main-db79434ee4a6c931.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"];
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": "j8HFvzDZj7tHjAnhpXUno",
21
- "NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "7A+IEUNscHQfPu+2/wFZTP1war59FAH/S7w0MNJ+QsI=",
22
- "__NEXT_PREVIEW_MODE_ID": "15473dfdcc7fa96c4bce23e42905b6d0",
23
- "__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "e2e5c7b4b10b2917e0ef3813fb1a206d6d8ab171d63ad90a1e34ff73607b5f63",
24
- "__NEXT_PREVIEW_MODE_SIGNING_KEY": "62930ceda175fa74eca9c5a4f818fae279612ba1122751bc0621f05d39fdcad7"
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-db79434ee4a6c931.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/j8HFvzDZj7tHjAnhpXUno/_buildManifest.js" defer=""></script><script src="/_next/static/j8HFvzDZj7tHjAnhpXUno/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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":"j8HFvzDZj7tHjAnhpXUno","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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
- {"/_app":"pages/_app.js","/_error":"pages/_error.js","/_document":"pages/_document.js"}
1
+ {"/_error":"pages/_error.js","/_app":"pages/_app.js","/_document":"pages/_document.js"}
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"7A+IEUNscHQfPu+2/wFZTP1war59FAH/S7w0MNJ+QsI="}
1
+ {"node":{},"edge":{},"encryptionKey":"PVPAPo2Yb8QPY8s/PRbFoOJqyalgbV37ienkbsfxtxM="}