commandmate 0.2.3 → 0.2.5

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 (89) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +25 -25
  3. package/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/build-manifest.json +7 -7
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/cache/config.json +3 -3
  7. package/.next/cache/fetch-cache/e7a5282a8c6f6e86940328b91498c8c8abc4b300cf449cb16e8ecd707767c12b +1 -0
  8. package/.next/cache/webpack/client-production/0.pack +0 -0
  9. package/.next/cache/webpack/client-production/1.pack +0 -0
  10. package/.next/cache/webpack/client-production/2.pack +0 -0
  11. package/.next/cache/webpack/client-production/index.pack +0 -0
  12. package/.next/cache/webpack/client-production/index.pack.old +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/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/app/update-check/route.js +1 -0
  21. package/.next/server/app/api/app/update-check/route.js.nft.json +1 -0
  22. package/.next/server/app/api/app/update-check.body +1 -0
  23. package/.next/server/app/api/app/update-check.meta +1 -0
  24. package/.next/server/app/api/repositories/restore/route.js +1 -1
  25. package/.next/server/app/api/repositories/scan/route.js +1 -1
  26. package/.next/server/app/api/repositories/sync/route.js +1 -1
  27. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
  28. package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
  29. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
  30. package/.next/server/app/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/proxy/[...path]/route.js +1 -1
  32. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/worktrees/[id]/page.js +3 -3
  34. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app-paths-manifest.json +10 -9
  37. package/.next/server/chunks/2683.js +1 -1
  38. package/.next/server/chunks/5488.js +1 -1
  39. package/.next/server/chunks/5823.js +1 -1
  40. package/.next/server/chunks/7425.js +3 -3
  41. package/.next/server/chunks/7536.js +1 -1
  42. package/.next/server/chunks/9367.js +2 -2
  43. package/.next/server/middleware-build-manifest.js +1 -1
  44. package/.next/server/pages/500.html +1 -1
  45. package/.next/server/server-reference-manifest.json +1 -1
  46. package/.next/static/chunks/{816-bb41b20a51ae924a.js → 816-af44cb865b0c980e.js} +1 -1
  47. package/.next/static/chunks/app/page-43b5de1a0a788b1f.js +1 -0
  48. package/.next/static/chunks/app/worktrees/[id]/{page-9d77c6f755d08086.js → page-66b59fb8c9ee90f4.js} +1 -1
  49. package/.next/static/chunks/{main-b6d727aa9248d4f2.js → main-f00f82f1cf18dd99.js} +1 -1
  50. package/.next/static/chunks/{webpack-e6531fcf859d9451.js → webpack-af8567a485ade35a.js} +1 -1
  51. package/.next/static/css/{4eca30cb81bc52b4.css → 6a92c8ad3c94d15a.css} +1 -1
  52. package/.next/trace +5 -5
  53. package/.next/types/app/api/app/update-check/route.ts +343 -0
  54. package/dist/cli/commands/docs.d.ts +22 -0
  55. package/dist/cli/commands/docs.d.ts.map +1 -0
  56. package/dist/cli/commands/docs.js +96 -0
  57. package/dist/cli/commands/init.d.ts.map +1 -1
  58. package/dist/cli/commands/init.js +3 -0
  59. package/dist/cli/commands/issue.d.ts +23 -0
  60. package/dist/cli/commands/issue.d.ts.map +1 -0
  61. package/dist/cli/commands/issue.js +143 -0
  62. package/dist/cli/config/ai-integration-messages.d.ts +6 -0
  63. package/dist/cli/config/ai-integration-messages.d.ts.map +1 -0
  64. package/dist/cli/config/ai-integration-messages.js +27 -0
  65. package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
  66. package/dist/cli/config/cli-dependencies.js +6 -0
  67. package/dist/cli/config/security-messages.d.ts +3 -1
  68. package/dist/cli/config/security-messages.d.ts.map +1 -1
  69. package/dist/cli/config/security-messages.js +4 -1
  70. package/dist/cli/index.js +15 -2
  71. package/dist/cli/types/index.d.ts +23 -0
  72. package/dist/cli/types/index.d.ts.map +1 -1
  73. package/dist/cli/utils/docs-reader.d.ts +42 -0
  74. package/dist/cli/utils/docs-reader.d.ts.map +1 -0
  75. package/dist/cli/utils/docs-reader.js +155 -0
  76. package/dist/cli/utils/input-validators.d.ts +32 -0
  77. package/dist/cli/utils/input-validators.d.ts.map +1 -1
  78. package/dist/cli/utils/input-validators.js +51 -1
  79. package/dist/cli/utils/preflight.d.ts.map +1 -1
  80. package/dist/cli/utils/preflight.js +1 -0
  81. package/dist/config/github-links.d.ts +16 -0
  82. package/dist/config/github-links.d.ts.map +1 -0
  83. package/dist/config/github-links.js +22 -0
  84. package/dist/server/src/lib/prompt-detector.js +207 -67
  85. package/package.json +1 -1
  86. package/.next/static/chunks/app/page-792c0577dc44e5e5.js +0 -1
  87. /package/.next/static/chunks/{4733-db0112b08802aaa7.js → 4733-50bdfc169adb4881.js} +0 -0
  88. /package/.next/static/{rppRTm2sRWa4sZE7ili8A → zoVKZmyy2snskN1roYhHr}/_buildManifest.js +0 -0
  89. /package/.next/static/{rppRTm2sRWa4sZE7ili8A → zoVKZmyy2snskN1roYhHr}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/worktrees/[id]/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"80":{"*":{"id":"41868","name":"*","chunks":[],"async":false}},"4707":{"*":{"id":"79671","name":"*","chunks":[],"async":false}},"12846":{"*":{"id":"12994","name":"*","chunks":[],"async":false}},"18828":{"*":{"id":"2108","name":"*","chunks":[],"async":false}},"19107":{"*":{"id":"96114","name":"*","chunks":[],"async":false}},"23327":{"*":{"id":"84792","name":"*","chunks":[],"async":false}},"36423":{"*":{"id":"84759","name":"*","chunks":[],"async":false}},"41845":{"*":{"id":"37398","name":"*","chunks":[],"async":false}},"50653":{"*":{"id":"84442","name":"*","chunks":[],"async":false}},"61060":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"74392":{"*":{"id":"64809","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/globals.css":{"id":2778,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","816","static/chunks/816-bb41b20a51ae924a.js","3185","static/chunks/app/layout-07755491d5d57242.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/components/providers/AppProviders.tsx":{"id":18828,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","816","static/chunks/816-bb41b20a51ae924a.js","3185","static/chunks/app/layout-07755491d5d57242.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/page.tsx":{"id":23327,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","216","static/chunks/216-f18f4a9d8b04a91e.js","8216","static/chunks/8216-00e20326f32abd12.js","2330","static/chunks/2330-0299b9879f4977d2.js","816","static/chunks/816-bb41b20a51ae924a.js","4733","static/chunks/4733-db0112b08802aaa7.js","1931","static/chunks/app/page-792c0577dc44e5e5.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/files/[...path]/page.tsx":{"id":50653,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/terminal/page.tsx":{"id":41845,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/page.tsx":{"id":74392,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","216","static/chunks/216-f18f4a9d8b04a91e.js","1038","static/chunks/1038-3509435b68c0967e.js","8216","static/chunks/8216-00e20326f32abd12.js","6140","static/chunks/6140-389f1951062dcf4f.js","816","static/chunks/816-bb41b20a51ae924a.js","4733","static/chunks/4733-db0112b08802aaa7.js","130","static/chunks/app/worktrees/%5Bid%5D/page-9d77c6f755d08086.js"],"async":false}},"entryCSSFiles":{"/home/runner/work/CommandMate/CommandMate/src/":[],"/home/runner/work/CommandMate/CommandMate/src/app/layout":["static/css/4eca30cb81bc52b4.css"],"/home/runner/work/CommandMate/CommandMate/src/app/page":[],"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/page":["static/css/5eacd01f773eed7f.css"]}}
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/worktrees/[id]/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"80":{"*":{"id":"41868","name":"*","chunks":[],"async":false}},"4707":{"*":{"id":"79671","name":"*","chunks":[],"async":false}},"12846":{"*":{"id":"12994","name":"*","chunks":[],"async":false}},"18828":{"*":{"id":"2108","name":"*","chunks":[],"async":false}},"19107":{"*":{"id":"96114","name":"*","chunks":[],"async":false}},"23327":{"*":{"id":"84792","name":"*","chunks":[],"async":false}},"27311":{"*":{"id":"47272","name":"*","chunks":[],"async":false}},"36423":{"*":{"id":"84759","name":"*","chunks":[],"async":false}},"41845":{"*":{"id":"37398","name":"*","chunks":[],"async":false}},"50653":{"*":{"id":"84442","name":"*","chunks":[],"async":false}},"61060":{"*":{"id":"9727","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/globals.css":{"id":2778,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","816","static/chunks/816-af44cb865b0c980e.js","3185","static/chunks/app/layout-07755491d5d57242.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/components/providers/AppProviders.tsx":{"id":18828,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","816","static/chunks/816-af44cb865b0c980e.js","3185","static/chunks/app/layout-07755491d5d57242.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/page.tsx":{"id":27311,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","216","static/chunks/216-f18f4a9d8b04a91e.js","1038","static/chunks/1038-3509435b68c0967e.js","8216","static/chunks/8216-00e20326f32abd12.js","6140","static/chunks/6140-389f1951062dcf4f.js","816","static/chunks/816-af44cb865b0c980e.js","4733","static/chunks/4733-50bdfc169adb4881.js","130","static/chunks/app/worktrees/%5Bid%5D/page-66b59fb8c9ee90f4.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/page.tsx":{"id":23327,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","216","static/chunks/216-f18f4a9d8b04a91e.js","8216","static/chunks/8216-00e20326f32abd12.js","2330","static/chunks/2330-0299b9879f4977d2.js","816","static/chunks/816-af44cb865b0c980e.js","4733","static/chunks/4733-50bdfc169adb4881.js","1931","static/chunks/app/page-43b5de1a0a788b1f.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/files/[...path]/page.tsx":{"id":50653,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/terminal/page.tsx":{"id":41845,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/runner/work/CommandMate/CommandMate/src/":[],"/home/runner/work/CommandMate/CommandMate/src/app/layout":["static/css/6a92c8ad3c94d15a.css"],"/home/runner/work/CommandMate/CommandMate/src/app/page":[],"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/page":["static/css/5eacd01f773eed7f.css"]}}
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/worktrees/[id]/terminal/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"80":{"*":{"id":"41868","name":"*","chunks":[],"async":false}},"4707":{"*":{"id":"79671","name":"*","chunks":[],"async":false}},"12846":{"*":{"id":"12994","name":"*","chunks":[],"async":false}},"18828":{"*":{"id":"2108","name":"*","chunks":[],"async":false}},"19107":{"*":{"id":"96114","name":"*","chunks":[],"async":false}},"23327":{"*":{"id":"84792","name":"*","chunks":[],"async":false}},"36423":{"*":{"id":"84759","name":"*","chunks":[],"async":false}},"41845":{"*":{"id":"37398","name":"*","chunks":[],"async":false}},"50653":{"*":{"id":"84442","name":"*","chunks":[],"async":false}},"61060":{"*":{"id":"9727","name":"*","chunks":[],"async":false}},"74392":{"*":{"id":"64809","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/globals.css":{"id":2778,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","816","static/chunks/816-bb41b20a51ae924a.js","3185","static/chunks/app/layout-07755491d5d57242.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/components/providers/AppProviders.tsx":{"id":18828,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","816","static/chunks/816-bb41b20a51ae924a.js","3185","static/chunks/app/layout-07755491d5d57242.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/page.tsx":{"id":23327,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","216","static/chunks/216-f18f4a9d8b04a91e.js","8216","static/chunks/8216-00e20326f32abd12.js","2330","static/chunks/2330-0299b9879f4977d2.js","816","static/chunks/816-bb41b20a51ae924a.js","4733","static/chunks/4733-db0112b08802aaa7.js","1931","static/chunks/app/page-792c0577dc44e5e5.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/files/[...path]/page.tsx":{"id":50653,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/terminal/page.tsx":{"id":41845,"name":"*","chunks":["9838","static/chunks/30d07d85-393352a92199f695.js","216","static/chunks/216-f18f4a9d8b04a91e.js","1224","static/chunks/app/worktrees/%5Bid%5D/terminal/page-5d85a7e508ce36d3.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/page.tsx":{"id":74392,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","216","static/chunks/216-f18f4a9d8b04a91e.js","1038","static/chunks/1038-3509435b68c0967e.js","8216","static/chunks/8216-00e20326f32abd12.js","6140","static/chunks/6140-389f1951062dcf4f.js","816","static/chunks/816-bb41b20a51ae924a.js","4733","static/chunks/4733-db0112b08802aaa7.js","130","static/chunks/app/worktrees/%5Bid%5D/page-9d77c6f755d08086.js"],"async":false}},"entryCSSFiles":{"/home/runner/work/CommandMate/CommandMate/src/":[],"/home/runner/work/CommandMate/CommandMate/src/app/layout":["static/css/4eca30cb81bc52b4.css"],"/home/runner/work/CommandMate/CommandMate/src/app/page":[],"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/page":["static/css/5eacd01f773eed7f.css"],"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/terminal/page":["static/css/85fa6dafca566008.css"]}}
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/worktrees/[id]/terminal/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"80":{"*":{"id":"41868","name":"*","chunks":[],"async":false}},"4707":{"*":{"id":"79671","name":"*","chunks":[],"async":false}},"12846":{"*":{"id":"12994","name":"*","chunks":[],"async":false}},"18828":{"*":{"id":"2108","name":"*","chunks":[],"async":false}},"19107":{"*":{"id":"96114","name":"*","chunks":[],"async":false}},"23327":{"*":{"id":"84792","name":"*","chunks":[],"async":false}},"27311":{"*":{"id":"47272","name":"*","chunks":[],"async":false}},"36423":{"*":{"id":"84759","name":"*","chunks":[],"async":false}},"41845":{"*":{"id":"37398","name":"*","chunks":[],"async":false}},"50653":{"*":{"id":"84442","name":"*","chunks":[],"async":false}},"61060":{"*":{"id":"9727","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/app-router.js":{"id":12846,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/client-page.js":{"id":19107,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/error-boundary.js":{"id":61060,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/layout-router.js":{"id":4707,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/not-found-boundary.js":{"id":80,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":36423,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/globals.css":{"id":2778,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","816","static/chunks/816-af44cb865b0c980e.js","3185","static/chunks/app/layout-07755491d5d57242.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/components/providers/AppProviders.tsx":{"id":18828,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","816","static/chunks/816-af44cb865b0c980e.js","3185","static/chunks/app/layout-07755491d5d57242.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/page.tsx":{"id":27311,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","216","static/chunks/216-f18f4a9d8b04a91e.js","1038","static/chunks/1038-3509435b68c0967e.js","8216","static/chunks/8216-00e20326f32abd12.js","6140","static/chunks/6140-389f1951062dcf4f.js","816","static/chunks/816-af44cb865b0c980e.js","4733","static/chunks/4733-50bdfc169adb4881.js","130","static/chunks/app/worktrees/%5Bid%5D/page-66b59fb8c9ee90f4.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/page.tsx":{"id":23327,"name":"*","chunks":["9234","static/chunks/9234-b0304101384ca079.js","216","static/chunks/216-f18f4a9d8b04a91e.js","8216","static/chunks/8216-00e20326f32abd12.js","2330","static/chunks/2330-0299b9879f4977d2.js","816","static/chunks/816-af44cb865b0c980e.js","4733","static/chunks/4733-50bdfc169adb4881.js","1931","static/chunks/app/page-43b5de1a0a788b1f.js"],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/files/[...path]/page.tsx":{"id":50653,"name":"*","chunks":[],"async":false},"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/terminal/page.tsx":{"id":41845,"name":"*","chunks":["9838","static/chunks/30d07d85-393352a92199f695.js","216","static/chunks/216-f18f4a9d8b04a91e.js","1224","static/chunks/app/worktrees/%5Bid%5D/terminal/page-5d85a7e508ce36d3.js"],"async":false}},"entryCSSFiles":{"/home/runner/work/CommandMate/CommandMate/src/":[],"/home/runner/work/CommandMate/CommandMate/src/app/layout":["static/css/6a92c8ad3c94d15a.css"],"/home/runner/work/CommandMate/CommandMate/src/app/page":[],"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/page":["static/css/5eacd01f773eed7f.css"],"/home/runner/work/CommandMate/CommandMate/src/app/worktrees/[id]/terminal/page":["static/css/85fa6dafca566008.css"]}}
@@ -1,18 +1,19 @@
1
1
  {
2
2
  "/_not-found/page": "app/_not-found/page.js",
3
+ "/api/app/update-check/route": "app/api/app/update-check/route.js",
3
4
  "/api/hooks/claude-done/route": "app/api/hooks/claude-done/route.js",
4
5
  "/api/repositories/clone/[jobId]/route": "app/api/repositories/clone/[jobId]/route.js",
5
- "/api/repositories/clone/route": "app/api/repositories/clone/route.js",
6
6
  "/api/repositories/excluded/route": "app/api/repositories/excluded/route.js",
7
- "/api/repositories/restore/route": "app/api/repositories/restore/route.js",
7
+ "/api/repositories/clone/route": "app/api/repositories/clone/route.js",
8
8
  "/api/repositories/route": "app/api/repositories/route.js",
9
+ "/api/repositories/restore/route": "app/api/repositories/restore/route.js",
9
10
  "/api/repositories/scan/route": "app/api/repositories/scan/route.js",
10
11
  "/api/repositories/sync/route": "app/api/repositories/sync/route.js",
11
12
  "/api/slash-commands/route": "app/api/slash-commands/route.js",
12
13
  "/api/worktrees/[id]/auto-yes/route": "app/api/worktrees/[id]/auto-yes/route.js",
13
14
  "/api/worktrees/[id]/capture/route": "app/api/worktrees/[id]/capture/route.js",
14
- "/api/worktrees/[id]/current-output/route": "app/api/worktrees/[id]/current-output/route.js",
15
15
  "/api/worktrees/[id]/cli-tool/route": "app/api/worktrees/[id]/cli-tool/route.js",
16
+ "/api/worktrees/[id]/current-output/route": "app/api/worktrees/[id]/current-output/route.js",
16
17
  "/api/worktrees/[id]/files/[...path]/route": "app/api/worktrees/[id]/files/[...path]/route.js",
17
18
  "/api/worktrees/[id]/interrupt/route": "app/api/worktrees/[id]/interrupt/route.js",
18
19
  "/api/worktrees/[id]/kill-session/route": "app/api/worktrees/[id]/kill-session/route.js",
@@ -20,28 +21,28 @@
20
21
  "/api/worktrees/[id]/memos/route": "app/api/worktrees/[id]/memos/route.js",
21
22
  "/api/worktrees/[id]/messages/route": "app/api/worktrees/[id]/messages/route.js",
22
23
  "/api/worktrees/[id]/prompt-response/route": "app/api/worktrees/[id]/prompt-response/route.js",
23
- "/api/worktrees/[id]/respond/route": "app/api/worktrees/[id]/respond/route.js",
24
24
  "/api/worktrees/[id]/route": "app/api/worktrees/[id]/route.js",
25
25
  "/api/worktrees/[id]/search/route": "app/api/worktrees/[id]/search/route.js",
26
+ "/api/worktrees/[id]/respond/route": "app/api/worktrees/[id]/respond/route.js",
26
27
  "/api/worktrees/[id]/send/route": "app/api/worktrees/[id]/send/route.js",
28
+ "/api/worktrees/[id]/terminal/route": "app/api/worktrees/[id]/terminal/route.js",
27
29
  "/api/worktrees/[id]/slash-commands/route": "app/api/worktrees/[id]/slash-commands/route.js",
28
30
  "/api/worktrees/[id]/start-polling/route": "app/api/worktrees/[id]/start-polling/route.js",
29
- "/api/worktrees/[id]/terminal/route": "app/api/worktrees/[id]/terminal/route.js",
30
31
  "/api/worktrees/[id]/tree/[...path]/route": "app/api/worktrees/[id]/tree/[...path]/route.js",
31
32
  "/api/worktrees/[id]/tree/route": "app/api/worktrees/[id]/tree/route.js",
32
- "/api/worktrees/[id]/viewed/route": "app/api/worktrees/[id]/viewed/route.js",
33
33
  "/api/worktrees/[id]/upload/[...path]/route": "app/api/worktrees/[id]/upload/[...path]/route.js",
34
+ "/api/worktrees/[id]/viewed/route": "app/api/worktrees/[id]/viewed/route.js",
34
35
  "/apple-icon.png/route": "app/apple-icon.png/route.js",
36
+ "/worktrees/[id]/page": "app/worktrees/[id]/page.js",
35
37
  "/icon.png/route": "app/icon.png/route.js",
36
38
  "/page": "app/page.js",
37
39
  "/worktrees/[id]/files/[...path]/page": "app/worktrees/[id]/files/[...path]/page.js",
38
40
  "/worktrees/[id]/terminal/page": "app/worktrees/[id]/terminal/page.js",
39
- "/worktrees/[id]/page": "app/worktrees/[id]/page.js",
40
- "/api/external-apps/route": "app/api/external-apps/route.js",
41
41
  "/api/external-apps/[id]/health/route": "app/api/external-apps/[id]/health/route.js",
42
+ "/api/external-apps/route": "app/api/external-apps/route.js",
42
43
  "/api/external-apps/[id]/route": "app/api/external-apps/[id]/route.js",
43
- "/api/worktrees/[id]/logs/route": "app/api/worktrees/[id]/logs/route.js",
44
44
  "/api/worktrees/[id]/logs/[filename]/route": "app/api/worktrees/[id]/logs/[filename]/route.js",
45
+ "/api/worktrees/[id]/logs/route": "app/api/worktrees/[id]/logs/route.js",
45
46
  "/api/worktrees/route": "app/api/worktrees/route.js",
46
47
  "/proxy/[...path]/route": "app/proxy/[...path]/route.js"
47
48
  }
@@ -1 +1 @@
1
- "use strict";exports.id=2683,exports.ids=[2683],exports.modules={32683:e=>{e.exports=JSON.parse('{"session":{"confirmKill":"End session for \\"{name}\\"?\\n\\nAll message history will be deleted. Log files will be retained.","failedToKill":"Failed to end session","confirmEnd":"End {tool} session?","endWarning":"Ending the session will clear chat history.","running":"Session running","starting":"Starting session","startingEllipsis":"Starting session..."},"status":{"waitingForResponse":"Waiting for response","responseCompleted":"Response completed","thinking":"Thinking...","thinkingStatus":"Thinking","claudeIsThinking":"Claude is thinking..."},"output":{"latest":"Latest output","realtimeUpdate":"Real-time update"},"errors":{"failedToUpdateFavorite":"Failed to update favorite","failedToUpdateStatus":"Failed to update status"}}')}};
1
+ "use strict";exports.id=2683,exports.ids=[2683],exports.modules={32683:e=>{e.exports=JSON.parse('{"session":{"confirmKill":"End session for \\"{name}\\"?\\n\\nAll message history will be deleted. Log files will be retained.","failedToKill":"Failed to end session","confirmEnd":"End {tool} session?","endWarning":"Ending the session will clear chat history.","running":"Session running","starting":"Starting session","startingEllipsis":"Starting session..."},"status":{"waitingForResponse":"Waiting for response","responseCompleted":"Response completed","thinking":"Thinking...","thinkingStatus":"Thinking","claudeIsThinking":"Claude is thinking..."},"output":{"latest":"Latest output","realtimeUpdate":"Real-time update"},"errors":{"failedToUpdateFavorite":"Failed to update favorite","failedToUpdateStatus":"Failed to update status"},"feedback":{"title":"Feedback & Support","bugReport":"Report a bug","featureRequest":"Request a feature","question":"Ask a question","viewIssues":"View all issues"},"update":{"available":"A new version is available","latestVersion":"Latest: v{version}","updateCommand":"Update command:","viewRelease":"View Release","dataPreserved":"Your database data will be preserved during the update.","version":"Version","installTypeGlobal":"npm (global)","installTypeLocal":"Local (git pull)"}}')}};
@@ -33,4 +33,4 @@
33
33
  AND status IN ('pending', 'running')
34
34
  ORDER BY created_at DESC
35
35
  LIMIT 1
36
- `).get(t);return r?l(r):null}},57440:(e,t,r)=>{r.d(t,{j:()=>a});var o=r(55315),s=r.n(o);function a(e,t){if(!e||""===e.trim()||e.includes("\0"))return!1;let r=e;try{r=decodeURIComponent(e)}catch{r=e}if(r.includes("\0"))return!1;let o=s().resolve(t),a=s().resolve(t,r),n=s().relative(o,a);return!(n.startsWith("..")||s().isAbsolute(n))}},67722:(e,t,r)=>{r.d(t,{Lj:()=>u,a$:()=>c,e9:()=>d,h2:()=>p});var o=r(61282),s=r(21764),a=r(55315),n=r.n(a),i=r(75748),l=r(57569);function c(){let e=process.env.WORKTREE_REPOS;if(e&&e.trim())return e.split(",").map(e=>e.trim()).filter(e=>e.length>0);let t=(0,l.Hb)("CM_ROOT_DIR");return t&&t.trim()?[t.trim()]:[]}async function d(e){let t=(0,s.promisify)(o.exec);try{let{stdout:r}=await t("git worktree list",{cwd:e}),o=function(e){if(!e||""===e.trim())return[];let t=e.trim().split("\n"),r=[];for(let e of t){let t=e.trim();if(!t)continue;let o=t.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(o){let[,e,t,s]=o;r.push({path:e.trim(),branch:s||`detached-${t}`,commit:t})}}return r}(r),s=n().resolve(e),a=n().basename(s);return o.map(e=>({id:function(e,t){if(!e)return"";let r=e=>e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),o=r(e);if(t){let e=r(t);return`${e}-${o}`}return o}(e.branch,a),name:e.branch,path:n().resolve(e.path),repositoryPath:s,repositoryName:a})).filter(e=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(t=>e.path.startsWith(t))?(console.warn(`Skipping potentially unsafe worktree path: ${e.path}`),!1):!(e.path.includes("\0")||e.path.includes(".."))||(console.warn(`Skipping path with potentially malicious characters: ${e.path}`),!1))}catch(r){let e=r instanceof Error?r.message:String(r),t=r.code;if(e?.includes("not a git repository")||128===t)return[];throw r}}async function u(e){let t=[];for(let r of e)try{console.log(`Scanning repository: ${r}`);let e=await d(r);t.push(...e),console.log(` Found ${e.length} worktree(s)`)}catch(e){console.error(`Error scanning repository ${r}:`,e)}return t}function p(e,t){if(0===t.length)return;let r=new Map;for(let e of t){let t=e.repositoryPath||"";r.has(t)||r.set(t,[]),r.get(t).push(e)}for(let[t,o]of r){if(!t)continue;let r=(0,i.Pv)(e,t),s=new Set(o.map(e=>e.id)),a=r.filter(e=>!s.has(e));if(a.length>0){let r=(0,i.pM)(e,a);console.log(`Removed ${r.deletedCount} deleted worktree(s) from ${t}`)}for(let t of o)(0,i.ly)(e,t)}}}};
36
+ `).get(t);return r?l(r):null}},57440:(e,t,r)=>{r.d(t,{j:()=>a});var o=r(55315),s=r.n(o);function a(e,t){if(!e||""===e.trim()||e.includes("\0"))return!1;let r=e;try{r=decodeURIComponent(e)}catch{r=e}if(r.includes("\0"))return!1;let o=s().resolve(t),a=s().resolve(t,r),n=s().relative(o,a);return!(n.startsWith("..")||s().isAbsolute(n))}},67722:(e,t,r)=>{r.d(t,{Lj:()=>u,a$:()=>c,e9:()=>d,h2:()=>p});var o=r(61282),s=r(21764),a=r(55315),n=r.n(a),i=r(75748),l=r(98838);function c(){let e=process.env.WORKTREE_REPOS;if(e&&e.trim())return e.split(",").map(e=>e.trim()).filter(e=>e.length>0);let t=(0,l.Hb)("CM_ROOT_DIR");return t&&t.trim()?[t.trim()]:[]}async function d(e){let t=(0,s.promisify)(o.exec);try{let{stdout:r}=await t("git worktree list",{cwd:e}),o=function(e){if(!e||""===e.trim())return[];let t=e.trim().split("\n"),r=[];for(let e of t){let t=e.trim();if(!t)continue;let o=t.match(/^(.+?)\s+([a-z0-9]+)\s+(?:\[(.+?)\]|\(detached HEAD\))/);if(o){let[,e,t,s]=o;r.push({path:e.trim(),branch:s||`detached-${t}`,commit:t})}}return r}(r),s=n().resolve(e),a=n().basename(s);return o.map(e=>({id:function(e,t){if(!e)return"";let r=e=>e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),o=r(e);if(t){let e=r(t);return`${e}-${o}`}return o}(e.branch,a),name:e.branch,path:n().resolve(e.path),repositoryPath:s,repositoryName:a})).filter(e=>["/etc","/root","/sys","/proc","/dev","/boot","/bin","/sbin","/usr/bin","/usr/sbin"].some(t=>e.path.startsWith(t))?(console.warn(`Skipping potentially unsafe worktree path: ${e.path}`),!1):!(e.path.includes("\0")||e.path.includes(".."))||(console.warn(`Skipping path with potentially malicious characters: ${e.path}`),!1))}catch(r){let e=r instanceof Error?r.message:String(r),t=r.code;if(e?.includes("not a git repository")||128===t)return[];throw r}}async function u(e){let t=[];for(let r of e)try{console.log(`Scanning repository: ${r}`);let e=await d(r);t.push(...e),console.log(` Found ${e.length} worktree(s)`)}catch(e){console.error(`Error scanning repository ${r}:`,e)}return t}function p(e,t){if(0===t.length)return;let r=new Map;for(let e of t){let t=e.repositoryPath||"";r.has(t)||r.set(t,[]),r.get(t).push(e)}for(let[t,o]of r){if(!t)continue;let r=(0,i.Pv)(e,t),s=new Set(o.map(e=>e.id)),a=r.filter(e=>!s.has(e));if(a.length>0){let r=(0,i.pM)(e,a);console.log(`Removed ${r.deletedCount} deleted worktree(s) from ${t}`)}for(let t of o)(0,i.ly)(e,t)}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=5823,exports.ids=[5823],exports.modules={95823:t=>{t.exports=JSON.parse('{"session":{"confirmKill":"「{name}」のセッションを終了しますか?\\n\\n※全てのメッセージ履歴が削除されます。ログファイルは保持されます。","failedToKill":"セッションの終了に失敗しました","confirmEnd":"{tool} セッションを終了しますか?","endWarning":"セッションを終了すると、チャット履歴がクリアされます。","running":"セッション実行中","starting":"セッション起動中","startingEllipsis":"セッション起動中..."},"status":{"waitingForResponse":"レスポンス待ち","responseCompleted":"レスポンス完了","thinking":"考え中...","thinkingStatus":"思考中","claudeIsThinking":"Claude が考え中です..."},"output":{"latest":"最新の出力","realtimeUpdate":"リアルタイム更新"},"errors":{"failedToUpdateFavorite":"お気に入りの更新に失敗しました","failedToUpdateStatus":"ステータスの更新に失敗しました"}}')}};
1
+ "use strict";exports.id=5823,exports.ids=[5823],exports.modules={95823:e=>{e.exports=JSON.parse('{"session":{"confirmKill":"「{name}」のセッションを終了しますか?\\n\\n※全てのメッセージ履歴が削除されます。ログファイルは保持されます。","failedToKill":"セッションの終了に失敗しました","confirmEnd":"{tool} セッションを終了しますか?","endWarning":"セッションを終了すると、チャット履歴がクリアされます。","running":"セッション実行中","starting":"セッション起動中","startingEllipsis":"セッション起動中..."},"status":{"waitingForResponse":"レスポンス待ち","responseCompleted":"レスポンス完了","thinking":"考え中...","thinkingStatus":"思考中","claudeIsThinking":"Claude が考え中です..."},"output":{"latest":"最新の出力","realtimeUpdate":"リアルタイム更新"},"errors":{"failedToUpdateFavorite":"お気に入りの更新に失敗しました","failedToUpdateStatus":"ステータスの更新に失敗しました"},"feedback":{"title":"フィードバック・サポート","bugReport":"バグを報告","featureRequest":"機能を提案","question":"質問する","viewIssues":"Issue一覧を見る"},"update":{"available":"新しいバージョンが利用可能です","latestVersion":"最新: v{version}","updateCommand":"更新コマンド:","viewRelease":"リリースを表示","dataPreserved":"アップデートによりデータベースのデータは保持されます。","version":"バージョン","installTypeGlobal":"npm(グローバル)","installTypeLocal":"ローカル(git pull)"}}')}};
@@ -1,4 +1,4 @@
1
- "use strict";exports.id=7425,exports.ids=[7425],exports.modules={43753:(e,t,s)=>{s.d(t,{F:()=>a});let r=["/etc","/usr","/bin","/sbin","/var","/tmp","/dev","/sys","/proc"];function a(e){return r.some(t=>e.startsWith(t))}},97425:(e,t,s)=>{s.d(t,{n:()=>p});var r=s(85890),a=s.n(r),o=s(55315),i=s.n(o),_=s(75748);let n=[{version:1,name:"initial-schema",up:e=>{(0,_.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:()=>a}),s(92048);var r=s(55315);function a(){let e=(0,r.dirname)(__dirname);return e.includes("/lib/node_modules/")||e.includes("\\node_modules\\")||e.includes("/node_modules/commandmate")}s(19801)},43753:(e,t,s)=>{s.d(t,{F:()=>a});let r=["/etc","/usr","/bin","/sbin","/var","/tmp","/dev","/sys","/proc"];function a(e){return r.some(t=>e.startsWith(t))}},97425:(e,t,s)=>{s.d(t,{n:()=>p});var r=s(85890),a=s.n(r),o=s(55315),i=s.n(o),_=s(75748);let n=[{version:1,name:"initial-schema",up:e=>{(0,_.qZ)(e)},down:e=>{e.exec("DROP TABLE IF EXISTS session_states;"),e.exec("DROP TABLE IF EXISTS chat_messages;"),e.exec("DROP TABLE IF EXISTS worktrees;")}},{version:2,name:"add-multi-repo-and-memo-support",up:e=>{e.exec(`
2
2
  ALTER TABLE worktrees ADD COLUMN repository_path TEXT;
3
3
  ALTER TABLE worktrees ADD COLUMN repository_name TEXT;
4
4
  ALTER TABLE worktrees ADD COLUMN memo TEXT;
@@ -372,7 +372,7 @@
372
372
  -- 6. Recreate original indexes
373
373
  CREATE INDEX idx_external_apps_path_prefix ON external_apps(path_prefix);
374
374
  CREATE INDEX idx_external_apps_enabled ON external_apps(enabled);
375
- `),console.log("✓ Removed issue_no column from external_apps table")}}];function E(e){let t=s(92048),r=e;for(;r!==i().dirname(r);){let e=i().join(r,".git");if(t.existsSync(e)){let s=t.statSync(e);if(s.isDirectory())return r;if(s.isFile()){let s=t.readFileSync(e,"utf-8").trim().match(/^gitdir:\s*(.+)$/);if(s)return s[1].split("/.git/")[0]}}r=i().dirname(r)}return e}function 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(57569);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}),function(e){!function(e){e.exec(`
375
+ `),console.log("✓ Removed issue_no column from external_apps table")}}];function E(e){let t=s(92048),r=e;for(;r!==i().dirname(r);){let e=i().join(r,".git");if(t.existsSync(e)){let s=t.statSync(e);if(s.isDirectory())return r;if(s.isFile()){let s=t.readFileSync(e,"utf-8").trim().match(/^gitdir:\s*(.+)$/);if(s)return s[1].split("/.git/")[0]}}r=i().dirname(r)}return e}function 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}),function(e){!function(e){e.exec(`
376
376
  CREATE TABLE IF NOT EXISTS schema_version (
377
377
  version INTEGER PRIMARY KEY,
378
378
  name TEXT NOT NULL,
@@ -616,4 +616,4 @@
616
616
  DELETE FROM worktrees WHERE repository_path = ?
617
617
  `).run(t).changes}}function B(e,t){if(0===t.length)return{deletedCount:0};let s=t.map(()=>"?").join(",");return{deletedCount:e.prepare(`
618
618
  DELETE FROM worktrees WHERE id IN (${s})
619
- `).run(...t).changes}}},57569:(e,t,s)=>{s.d(t,{dU:()=>m,Hb:()=>T,LI:()=>c});var r=s(55315),a=s.n(r),o=s(19801);function i(){let e=(0,r.dirname)(__dirname);return e.includes("/lib/node_modules/")||e.includes("\\node_modules\\")||e.includes("/node_modules/commandmate")}s(92048);var _=s(43753);function n(){return i()?a().join((0,o.homedir)(),".commandmate","data","cm.db"):a().resolve(process.cwd(),"data","cm.db")}function E(e){let t=a().resolve(e);if(i()){let e=(0,o.homedir)();if(!t.startsWith(e))throw Error(`Security error: DB path must be within home directory: ${t}`)}else if((0,_.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}()||n();if(!t)throw Error("CM_ROOT_DIR (or MCBD_ROOT_DIR) is required");if(isNaN(s)||s<1||s>65535)throw Error(`Invalid CM_PORT: ${T("CM_PORT")}. Must be between 1 and 65535.`);if("127.0.0.1"!==r&&"0.0.0.0"!==r&&"localhost"!==r)throw Error(`Invalid CM_BIND: ${r}. Must be '127.0.0.1', '0.0.0.0', or 'localhost'.`);try{e=E(o)}catch{console.warn(`[Security] Invalid DB path "${o}", using default.`),e=E(n())}return{CM_ROOT_DIR:a().resolve(t),CM_PORT:s,CM_BIND:r,CM_DB_PATH:e}}}};
619
+ `).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),_=s(43753);function n(){return(0,i.ZP)()?a().join((0,o.homedir)(),".commandmate","data","cm.db"):a().resolve(process.cwd(),"data","cm.db")}function E(e){let t=a().resolve(e);if((0,i.ZP)()){let e=(0,o.homedir)();if(!t.startsWith(e))throw Error(`Security error: DB path must be within home directory: ${t}`)}else if((0,_.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}()||n();if(!t)throw Error("CM_ROOT_DIR (or MCBD_ROOT_DIR) is required");if(isNaN(s)||s<1||s>65535)throw Error(`Invalid CM_PORT: ${T("CM_PORT")}. Must be between 1 and 65535.`);if("127.0.0.1"!==r&&"0.0.0.0"!==r&&"localhost"!==r)throw Error(`Invalid CM_BIND: ${r}. Must be '127.0.0.1', '0.0.0.0', or 'localhost'.`);try{e=E(o)}catch{console.warn(`[Security] Invalid DB path "${o}", using default.`),e=E(n())}return{CM_ROOT_DIR:a().resolve(t),CM_PORT:s,CM_BIND:r,CM_DB_PATH:e}}}};
@@ -1 +1 @@
1
- "use strict";exports.id=7536,exports.ids=[7536],exports.modules={89194:(e,t,s)=>{s.d(t,{Lg:()=>r,NA:()=>a});var n=s(10927),i=s(43839);let o=(0,s(43895).h)("cli-session");async function r(e,t){let s=i.g.getInstance().getTool(t).getSessionName(e);return await (0,n.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=i.g.getInstance().getTool(t),l=a.getSessionName(e);if(!await (0,n.Hk)(l))throw r.debug("captureSessionOutput:sessionNotFound",{sessionName:l}),Error(`${a.name} session ${l} does not exist`);try{let e=await (0,n.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}`)}}},43839:(e,t,s)=>{s.d(t,{g:()=>y});var n=s(61282),i=s(21764);let o=/^[a-zA-Z0-9_-]+$/;var r=s(10927);let a=(0,i.promisify)(n.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 u=s(62648);class c extends l{async isInstalled(){return await (0,u.Uv)()}async isRunning(e){return await (0,u.YI)(e)}async startSession(e,t){await (0,u.ym)({worktreeId:e,worktreePath:t})}async sendMessage(e,t){await (0,u.xd)(e,t)}async killSession(e){await (0,u._f)(e)}constructor(...e){super(...e),this.id="claude",this.name="Claude Code",this.command="claude"}}var m=s(92900);let p=(0,i.promisify)(n.exec);function d(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 p(`tmux send-keys -t "${s}" Down`),await new Promise(e=>setTimeout(e,200)),await p(`tmux send-keys -t "${s}" Enter`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Started Codex session: ${s}`)}catch(t){let e=d(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 p(`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=d(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 p(`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=d(t);throw console.error(`Error stopping Codex session: ${e}`),t}}constructor(...e){super(...e),this.id="codex",this.name="Codex CLI",this.command="codex"}}let h=(0,i.promisify)(n.exec);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}),console.log(`✓ Started Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Gemini session: ${e}`)}}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{let e=t.replace(/'/g,"'\\''");await (0,r.Is)(s,`echo '${e}' | gemini`,!0),console.log(`✓ Sent message to Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(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 h(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,r.AJ)(t)&&console.log(`✓ Stopped Gemini session: ${t}`)}catch(t){let e=t instanceof Error?t.message:String(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(59991);class y{constructor(){this.tools=new Map,this.tools.set("claude",new c),this.tools.set("codex",new f),this.tools.set("gemini",new g)}static getInstance(){return y.instance||(y.instance=new y),y.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,w.FN)(e,t)}}},63661:(e,t,s)=>{s.d(t,{F:()=>r,J:()=>d});let n=(0,s(43895).h)("prompt-detector"),i=[{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,n){return{isPrompt:!0,promptData:{type:"yes_no",question:e,options:["yes","no"],status:"pending",...void 0!==n&&{defaultOption:n},instructionText:s},cleanContent:t,rawContent:s}}function r(e,t){n.debug("detectPrompt:start",{outputLength:e.length});let s=e.split("\n").slice(-20).join("\n"),r=function(e,t){let s;let n=t?.requireDefaultIndicator??!0,i=e.split("\n"),o=i.length;for(;o>0&&""===i[o-1].trim();)o--;let r=Math.max(0,o-50);if(n){let t=!1;for(let e=r;e<o;e++){let s=i[e].trim();if(l.test(s)){t=!0;break}}if(!t)return m(e)}let d=[],f=-1;for(let e=o-1;e>=r;e--){let t=i[e].trim(),s=t.match(l);if(s){let e=parseInt(s[1],10),t=s[2].trim();d.unshift({number:e,label:t,isDefault:!0});continue}let n=t.match(u);if(n){let e=parseInt(n[1],10),t=n[2].trim();d.unshift({number:e,label:t,isDefault:!1});continue}if(d.length>0&&t&&!c.test(t)){if(function(e,t){let s=t.endsWith("?")||t.endsWith("?"),n=/^\s{2,}[^\d]/.test(e)&&!/^\s*\d+\./.test(e)&&!s,i=t.length<5&&!s,o=/^[\/~]/.test(t)||t.length>=2&&/^[a-zA-Z0-9_-]+$/.test(t);return!!n||i||o}(i[e],t))continue;f=e;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}(d.map(e=>e.number)))return m(e);let h=d.some(e=>e.isDefault);if(d.length<2||n&&!h)return m(e);if(!n){var g;if(-1===f||!(0!==(g=i[f]?.trim()??"").length&&(g.endsWith("?")||g.endsWith("?")||g.endsWith(":")&&p.test(g))))return m(e)}let w="";if(f>=0){let e=[];for(let t=Math.max(0,f-5);t<=f;t++){let s=i[t].trim();s&&!c.test(s)&&e.push(s)}w=e.join(" ")}else w="Please select an option:";if(f>=0){let e=Math.max(0,f-19),t=i.slice(e,o).map(e=>e.trimEnd()).join("\n").trim();t.length>0&&(s=t)}return{isPrompt:!0,promptData:{type:"multiple_choice",question:w.trim(),options:d.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:s},cleanContent:w.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 n.info("detectPrompt:multipleChoice",{isPrompt:!0,question:r.promptData?.question,optionsCount:r.promptData?.options?.length}),r;let d=s.trim();for(let e of i){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 n.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\s*(\d+)\.\s*(.+)$/,u=/^\s*(\d+)\.\s*(.+)$/,c=/^[-─]+$/;function m(e){return{isPrompt:!1,cleanContent:e.trim()}}let p=/(?:select|choose|pick|which|what|how|where|enter|type|specify|confirm|approve|accept|reject|decide|preference|option)/i;function d(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:()=>x,RJ:()=>w,ci:()=>g,cn:()=>$});var n=s(89194),i=s(97425),o=s(75748),r=s(25079),a=s(63661),l=s(76966),u=s(89287),c=s(19377);let m=["Waiting for auth","⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];function p(e){return{response:"",isComplete:!1,lineCount:e}}let d=new Map,f=new Map;function h(e,t){let s=(0,c.Sg)(t);return(0,a.F)((0,c.vp)(e),s)}function g(e){let t=(0,c.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 n=s>=0?s+1:0,i=t.slice(n),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*$/,c.d8],r=[];for(let e of i)!o.some(t=>t.test(e))&&e.trim()&&r.push(e);return r.join("\n").trim()}function w(e){let t=e.split("\n"),s=[],n=[/^maenokota@.*%/,/^zsh:/,/^feature-issue-\d+/,/^\s*$/],i=!1,o=[];for(let e of t){if(e.includes("✦")){i=!0;let t=e.indexOf("✦"),s=e.substring(t+1).trim();s&&o.push(s);continue}if(i){if(n.some(t=>t.test(e)))continue;o.push(e)}}if(o.length>0)return o.join("\n").trim();for(let e of t)n.some(t=>t.test(e))||s.push(e);return s.join("\n").trim()}async function y(e,t){let s=(0,i.n)();try{if(!(0,o.gU)(s,e))return console.error(`Worktree ${e} not found, stopping poller`),x(e,t),!1;if(!await (0,n.Lg)(e,t))return x(e,t),!1;let i=(0,o.zl)(s,e,t),a=i?.lastCapturedLine||0,d=await (0,n.NA)(e,t,1e4),f=function(e,t,s){let n=e.split("\n"),i=n.length;for(;i>0&&""===n[i-1].trim();)i--;let o=n.slice(0,i),r=o.length,a=r>0&&t>25&&r+25<t,l=r>0&&t>50&&r<50,u=a||l;if(!u&&r<t-5)return null;let d=Math.max(0,r-20),f=o.slice(d).join("\n"),{promptPattern:g,separatorPattern:w,thinkingPattern:y,skipPatterns:$}=(0,c.bs)(s),x=(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,c.vp)(o[s]);if(t.test(e))return s}return -1};if("claude"===s){let e=o.join("\n");if(h(e,s).isPrompt)return{response:(0,c.vp)(e),isComplete:!0,lineCount:r}}let C=(0,c.vp)(f),S=g.test(C),I=w.test(C),v=y.test(C),k=("codex"===s||"gemini"===s)&&S&&!v,P="claude"===s&&S&&I&&!v;if(k||P){let e;let n=[];if(t>=r||u){let t=x(40);e=t>=0?t+1:0}else if("codex"===s)e=Math.max(0,t);else if(t>=r-5){let t=x(50);e=t>=0?t+1:Math.max(0,r-40)}else e=Math.max(0,t);let i=r;for(let t=e;t<r;t++){let e=o[t],r=(0,c.vp)(e);if("codex"===s&&/^›\s+/.test(r)||"gemini"===s&&/^(%|\$|.*@.*[%$#])\s*$/.test(r)){i=t;break}$.some(e=>e.test(r))||n.push(e)}let a=n.join("\n").trim(),l=a.split("\n").slice(-5).join("\n");if(y.test(l))return p(r);if("claude"===s){let e=(0,c.vp)(a),t=/[╭╮╰╯│]/.test(e)||/░{3,}/.test(e)||/▓{3,}/.test(e),s=/Claude Code|claude\/|v\d+\.\d+/.test(e),n=/Tip:|for shortcuts|\?\s*for help/.test(e),i=/^\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&&!$.some(e=>e.test(t))&&!/^─+$/.test(t)}).length)return p(r)}else if((t||s||n||i)&&a.length<2e3)return p(r)}return"gemini"===s&&((a.match(/[░███]/g)||[]).length>.3*a.length||m.some(e=>a.includes(e))||!a.includes("✦")&&a.length<10)?p(r):{response:a,isComplete:!0,lineCount:i}}let E=o.join("\n");if(h(E,s).isPrompt)return{response:E,isComplete:!0,lineCount:r};let T=[],b=u||t>=r-5,N=b?x(80):-1,M=b?N>=0?N+1:Math.max(0,r-80):Math.max(0,t);for(let e=M;e<r;e++){let t=o[e],s=(0,c.vp)(t);$.some(e=>e.test(s))||T.push(t)}let D=T.join("\n").trim();return D?{response:D,isComplete:!1,lineCount:r}:p(r)}(d,a,t);if(!f||!f.isComplete){let{thinkingPattern:n}=(0,c.bs)(t),i=(0,c.vp)(d).split("\n").slice(-5).join("\n");if(n.test(i)){let n=(0,o.GP)(s,e,t);n>0&&console.log(`Marked ${n} pending prompt(s) as answered (thinking detected) for ${e}`)}return!1}if(f.lineCount===a&&!i?.inProgressMessageId)return!1;if(f.lineCount<=a)return console.log(`[checkForResponse] Already saved up to line ${a}, skipping (result: ${f.lineCount})`),!1;let y=h(f.response,t);if(y.isPrompt){(0,o.Mf)(s,e,t);let n=(0,o.tn)(s,{worktreeId:e,role:"assistant",content:y.rawContent||y.cleanContent,messageType:"prompt",promptData:y.promptData,timestamp:new Date,cliToolId:t});return(0,o.IH)(s,e,t,f.lineCount),(0,r.ps)("message",{worktreeId:e,message:n}),x(e,t),!0}if(!f.response||""===f.response.trim())return(0,o.IH)(s,e,t,f.lineCount),!1;let $="claude"===t?(0,u.Z)(f.response):void 0,C=f.response;if("gemini"===t?C=w(f.response):"claude"===t&&(C=g(f.response)),!C||""===C.trim()||"[No content]"===C)return(0,o.IH)(s,e,t,f.lineCount),(0,o.Mf)(s,e,t),!1;C&&await (0,l.o)(s,e,C,t);let S=(0,o.GP)(s,e,t);S>0&&console.log(`Marked ${S} pending prompt(s) as answered for ${e}`);let I=(0,o.zl)(s,e,t);if(I&&f.lineCount<=I.lastCapturedLine)return console.log(`[checkForResponse] Race condition detected, skipping save (result: ${f.lineCount}, current: ${I.lastCapturedLine})`),!1;let v=(0,o.tn)(s,{worktreeId:e,role:"assistant",content:C,messageType:"normal",timestamp:new Date,cliToolId:t,summary:$?.summary,logFileName:$?.logFileName,requestId:$?.requestId});return(0,r.ps)("message",{worktreeId:e,message:v}),(0,o.IH)(s,e,t,f.lineCount),!0}catch(t){return console.error(`Error checking for response (${e}):`,t instanceof Error?t.message:String(t)),!1}}function $(e,t){let s=`${e}:${t}`;x(e,t),f.set(s,Date.now());let n=setInterval(async()=>{let n=f.get(s);if(n&&Date.now()-n>3e5){x(e,t);return}try{await y(e,t)}catch(e){console.error("[Poller] Error:",e)}},2e3);d.set(s,n)}function x(e,t){let s=`${e}:${t}`,n=d.get(s);n&&(clearInterval(n),d.delete(s),f.delete(s))}}};
1
+ "use strict";exports.id=7536,exports.ids=[7536],exports.modules={89194:(e,t,s)=>{s.d(t,{Lg:()=>o,NA:()=>a});var n=s(10927),i=s(43839);let r=(0,s(43895).h)("cli-session");async function o(e,t){let s=i.g.getInstance().getTool(t).getSessionName(e);return await (0,n.Hk)(s)}async function a(e,t,s=1e3){let o=r.withContext({worktreeId:e,cliToolId:t});o.debug("captureSessionOutput:start",{requestedLines:s});let a=i.g.getInstance().getTool(t),l=a.getSessionName(e);if(!await (0,n.Hk)(l))throw o.debug("captureSessionOutput:sessionNotFound",{sessionName:l}),Error(`${a.name} session ${l} does not exist`);try{let e=await (0,n.xq)(l,{startLine:-s}),t=e.split("\n").length;return o.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 o.error("captureSessionOutput:failed",{error:e}),Error(`Failed to capture ${a.name} output: ${e}`)}}},43839:(e,t,s)=>{s.d(t,{g:()=>y});var n=s(61282),i=s(21764);let r=/^[a-zA-Z0-9_-]+$/;var o=s(10927);let a=(0,i.promisify)(n.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(!r.test(e))throw Error(`Invalid session name format: ${e}`)}(t),t}async interrupt(e){let t=this.getSessionName(e);await (0,o.ZV)(t,"Escape")}}var u=s(62648);class c extends l{async isInstalled(){return await (0,u.Uv)()}async isRunning(e){return await (0,u.YI)(e)}async startSession(e,t){await (0,u.ym)({worktreeId:e,worktreePath:t})}async sendMessage(e,t){await (0,u.xd)(e,t)}async killSession(e){await (0,u._f)(e)}constructor(...e){super(...e),this.id="claude",this.name="Claude Code",this.command="claude"}}var m=s(92900);let p=(0,i.promisify)(n.exec);function d(e){return e instanceof Error?e.message:String(e)}class f extends l{async isRunning(e){let t=this.getSessionName(e);return await (0,o.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,o.Hk)(s)){console.log(`Codex session ${s} already exists`);return}try{await (0,o.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),await new Promise(e=>setTimeout(e,100)),await (0,o.Is)(s,"codex",!0),await new Promise(e=>setTimeout(e,3e3)),await (0,o.Is)(s,"2",!0),await new Promise(e=>setTimeout(e,200)),await p(`tmux send-keys -t "${s}" Down`),await new Promise(e=>setTimeout(e,200)),await p(`tmux send-keys -t "${s}" Enter`),await new Promise(e=>setTimeout(e,200)),console.log(`✓ Started Codex session: ${s}`)}catch(t){let e=d(t);throw Error(`Failed to start Codex session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,o.Hk)(s))throw Error(`Codex session ${s} does not exist. Start the session first.`);try{await (0,o.Is)(s,t,!1),await new Promise(e=>setTimeout(e,100)),await p(`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=d(t);throw Error(`Failed to send message to Codex: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,o.Hk)(t)&&(await p(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,o.AJ)(t)&&console.log(`✓ Stopped Codex session: ${t}`)}catch(t){let e=d(t);throw console.error(`Error stopping Codex session: ${e}`),t}}constructor(...e){super(...e),this.id="codex",this.name="Codex CLI",this.command="codex"}}let g=(0,i.promisify)(n.exec);class h extends l{async isRunning(e){let t=this.getSessionName(e);return await (0,o.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,o.Hk)(s)){console.log(`Gemini session ${s} already exists`);return}try{await (0,o.ed)({sessionName:s,workingDirectory:t,historyLimit:5e4}),console.log(`✓ Started Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to start Gemini session: ${e}`)}}async sendMessage(e,t){let s=this.getSessionName(e);if(!await (0,o.Hk)(s))throw Error(`Gemini session ${s} does not exist. Start the session first.`);try{let e=t.replace(/'/g,"'\\''");await (0,o.Is)(s,`echo '${e}' | gemini`,!0),console.log(`✓ Sent message to Gemini session: ${s}`)}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send message to Gemini: ${e}`)}}async killSession(e){let t=this.getSessionName(e);try{await (0,o.Hk)(t)&&(await g(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500))),await (0,o.AJ)(t)&&console.log(`✓ Stopped Gemini session: ${t}`)}catch(t){let e=t instanceof Error?t.message:String(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(59991);class y{constructor(){this.tools=new Map,this.tools.set("claude",new c),this.tools.set("codex",new f),this.tools.set("gemini",new h)}static getInstance(){return y.instance||(y.instance=new y),y.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,w.FN)(e,t)}}},63661:(e,t,s)=>{s.d(t,{F:()=>o,J:()=>f});let n=(0,s(43895).h)("prompt-detector"),i=[{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 r(e,t,s,n){return{isPrompt:!0,promptData:{type:"yes_no",question:e,options:["yes","no"],status:"pending",...void 0!==n&&{defaultOption:n},instructionText:s},cleanContent:t,rawContent:s}}function o(e,t){n.debug("detectPrompt:start",{outputLength:e.length});let s=e.split("\n").slice(-20).join("\n"),o=function(e,t){let s=t?.requireDefaultIndicator??!0,n=e.split("\n"),i=n.length;for(;i>0&&""===n[i-1].trim();)i--;let r=Math.max(0,i-50);if(s){let t=!1;for(let e=r;e<i;e++){let s=n[e].trim();if(l.test(s)){t=!0;break}}if(!t)return m(e)}let o=[],p=-1;for(let e=i-1;e>=r;e--){let t=n[e].trim(),s=t.match(l);if(s){let e=parseInt(s[1],10),t=s[2].trim();o.unshift({number:e,label:t,isDefault:!0});continue}let i=t.match(u);if(i){let e=parseInt(i[1],10),t=i[2].trim();o.unshift({number:e,label:t,isDefault:!1});continue}if(o.length>0&&t&&!c.test(t)){if(d(t)){p=e;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))}(n[e],t))continue;p=e;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}(o.map(e=>e.number)))return m(e);let f=o.some(e=>e.isDefault);if(o.length<2||s&&!f||!s&&(-1===p||!d(n[p]?.trim()??"")&&!function(e,t,s,n){let i=Math.max(n,t-3);for(let s=t-1;s>=i;s--){let t=e[s]?.trim()??"";if(!(!t||c.test(t))&&d(t))return!0}return!1}(n,p,0,r)))return m(e);let g=function(e,t){if(t<0)return"Please select an option:";let s=[];for(let n=Math.max(0,t-5);n<=t;n++){let t=e[n].trim();t&&!c.test(t)&&s.push(t)}return s.join(" ")}(n,p),h=function(e,t,s){if(t<0)return;let n=e.slice(Math.max(0,t-19),s).map(e=>e.trimEnd()).join("\n").trim();return n.length>0?n:void 0}(n,p,i);return{isPrompt:!0,promptData:{type:"multiple_choice",question:g.trim(),options:o.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:h},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(o.isPrompt)return n.info("detectPrompt:multipleChoice",{isPrompt:!0,question:o.promptData?.question,optionsCount:o.promptData?.options?.length}),o;let p=s.trim();for(let e of i){let t=s.match(e.regex);if(t){let s=t[1].trim();return r(s,s,p,e.defaultOption)}}let f=s.match(/^(.*?)Approve\?\s*$/m);if(f){let e=f[1].trim();return r(e?`${e} Approve?`:"Approve?",e||"Approve?",p)}return n.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\s*(\d+)\.\s*(.+)$/,u=/^\s*(\d+)\.\s*(.+)$/,c=/^[-─]+$/;function m(e){return{isPrompt:!1,cleanContent:e.trim()}}let p=/(?:select|choose|pick|which|what|how|where|enter|type|specify|confirm|approve|accept|reject|decide|preference|option)/i;function d(e){return 0!==e.length&&!!(e.includes("?")||e.includes("?")||p.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:()=>x,RJ:()=>w,ci:()=>h,cn:()=>$});var n=s(89194),i=s(97425),r=s(75748),o=s(25079),a=s(63661),l=s(76966),u=s(89287),c=s(19377);let m=["Waiting for auth","⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];function p(e){return{response:"",isComplete:!1,lineCount:e}}let d=new Map,f=new Map;function g(e,t){let s=(0,c.Sg)(t);return(0,a.F)((0,c.vp)(e),s)}function h(e){let t=(0,c.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 n=s>=0?s+1:0,i=t.slice(n),r=[/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*$/,c.d8],o=[];for(let e of i)!r.some(t=>t.test(e))&&e.trim()&&o.push(e);return o.join("\n").trim()}function w(e){let t=e.split("\n"),s=[],n=[/^maenokota@.*%/,/^zsh:/,/^feature-issue-\d+/,/^\s*$/],i=!1,r=[];for(let e of t){if(e.includes("✦")){i=!0;let t=e.indexOf("✦"),s=e.substring(t+1).trim();s&&r.push(s);continue}if(i){if(n.some(t=>t.test(e)))continue;r.push(e)}}if(r.length>0)return r.join("\n").trim();for(let e of t)n.some(t=>t.test(e))||s.push(e);return s.join("\n").trim()}async function y(e,t){let s=(0,i.n)();try{if(!(0,r.gU)(s,e))return console.error(`Worktree ${e} not found, stopping poller`),x(e,t),!1;if(!await (0,n.Lg)(e,t))return x(e,t),!1;let i=(0,r.zl)(s,e,t),a=i?.lastCapturedLine||0,d=await (0,n.NA)(e,t,1e4),f=function(e,t,s){let n=e.split("\n"),i=n.length;for(;i>0&&""===n[i-1].trim();)i--;let r=n.slice(0,i),o=r.length,a=o>0&&t>25&&o+25<t,l=o>0&&t>50&&o<50,u=a||l;if(!u&&o<t-5)return null;let d=Math.max(0,o-20),f=r.slice(d).join("\n"),{promptPattern:h,separatorPattern:w,thinkingPattern:y,skipPatterns:$}=(0,c.bs)(s),x=(e=60)=>{let t="codex"===s?/^›\s+(?!Implement|Find and fix|Type|Summarize)/:/^[>❯]\s+\S/;for(let s=o-1;s>=Math.max(0,o-e);s--){let e=(0,c.vp)(r[s]);if(t.test(e))return s}return -1};if("claude"===s){let e=r.join("\n");if(g(e,s).isPrompt)return{response:(0,c.vp)(e),isComplete:!0,lineCount:o}}let C=(0,c.vp)(f),S=h.test(C),I=w.test(C),k=y.test(C),v=("codex"===s||"gemini"===s)&&S&&!k,P="claude"===s&&S&&I&&!k;if(v||P){let e;let n=[];if(t>=o||u){let t=x(40);e=t>=0?t+1:0}else if("codex"===s)e=Math.max(0,t);else if(t>=o-5){let t=x(50);e=t>=0?t+1:Math.max(0,o-40)}else e=Math.max(0,t);let i=o;for(let t=e;t<o;t++){let e=r[t],o=(0,c.vp)(e);if("codex"===s&&/^›\s+/.test(o)||"gemini"===s&&/^(%|\$|.*@.*[%$#])\s*$/.test(o)){i=t;break}$.some(e=>e.test(o))||n.push(e)}let a=n.join("\n").trim(),l=a.split("\n").slice(-5).join("\n");if(y.test(l))return p(o);if("claude"===s){let e=(0,c.vp)(a),t=/[╭╮╰╯│]/.test(e)||/░{3,}/.test(e)||/▓{3,}/.test(e),s=/Claude Code|claude\/|v\d+\.\d+/.test(e),n=/Tip:|for shortcuts|\?\s*for help/.test(e),i=/^\s*\/Users\/.*$/m.test(e)&&e.split("\n").length<30,r=e.match(/^[>❯]\s+(\S.*)$/m);if(r){let t=e.indexOf(r[0]);if(0===e.substring(t+r[0].length).trim().split("\n").filter(e=>{let t=e.trim();return t&&!$.some(e=>e.test(t))&&!/^─+$/.test(t)}).length)return p(o)}else if((t||s||n||i)&&a.length<2e3)return p(o)}return"gemini"===s&&((a.match(/[░███]/g)||[]).length>.3*a.length||m.some(e=>a.includes(e))||!a.includes("✦")&&a.length<10)?p(o):{response:a,isComplete:!0,lineCount:i}}let E=r.join("\n");if(g(E,s).isPrompt)return{response:E,isComplete:!0,lineCount:o};let T=[],b=u||t>=o-5,M=b?x(80):-1,N=b?M>=0?M+1:Math.max(0,o-80):Math.max(0,t);for(let e=N;e<o;e++){let t=r[e],s=(0,c.vp)(t);$.some(e=>e.test(s))||T.push(t)}let D=T.join("\n").trim();return D?{response:D,isComplete:!1,lineCount:o}:p(o)}(d,a,t);if(!f||!f.isComplete){let{thinkingPattern:n}=(0,c.bs)(t),i=(0,c.vp)(d).split("\n").slice(-5).join("\n");if(n.test(i)){let n=(0,r.GP)(s,e,t);n>0&&console.log(`Marked ${n} pending prompt(s) as answered (thinking detected) for ${e}`)}return!1}if(f.lineCount===a&&!i?.inProgressMessageId)return!1;if(f.lineCount<=a)return console.log(`[checkForResponse] Already saved up to line ${a}, skipping (result: ${f.lineCount})`),!1;let y=g(f.response,t);if(y.isPrompt){(0,r.Mf)(s,e,t);let n=(0,r.tn)(s,{worktreeId:e,role:"assistant",content:y.rawContent||y.cleanContent,messageType:"prompt",promptData:y.promptData,timestamp:new Date,cliToolId:t});return(0,r.IH)(s,e,t,f.lineCount),(0,o.ps)("message",{worktreeId:e,message:n}),x(e,t),!0}if(!f.response||""===f.response.trim())return(0,r.IH)(s,e,t,f.lineCount),!1;let $="claude"===t?(0,u.Z)(f.response):void 0,C=f.response;if("gemini"===t?C=w(f.response):"claude"===t&&(C=h(f.response)),!C||""===C.trim()||"[No content]"===C)return(0,r.IH)(s,e,t,f.lineCount),(0,r.Mf)(s,e,t),!1;C&&await (0,l.o)(s,e,C,t);let S=(0,r.GP)(s,e,t);S>0&&console.log(`Marked ${S} pending prompt(s) as answered for ${e}`);let I=(0,r.zl)(s,e,t);if(I&&f.lineCount<=I.lastCapturedLine)return console.log(`[checkForResponse] Race condition detected, skipping save (result: ${f.lineCount}, current: ${I.lastCapturedLine})`),!1;let k=(0,r.tn)(s,{worktreeId:e,role:"assistant",content:C,messageType:"normal",timestamp:new Date,cliToolId:t,summary:$?.summary,logFileName:$?.logFileName,requestId:$?.requestId});return(0,o.ps)("message",{worktreeId:e,message:k}),(0,r.IH)(s,e,t,f.lineCount),!0}catch(t){return console.error(`Error checking for response (${e}):`,t instanceof Error?t.message:String(t)),!1}}function $(e,t){let s=`${e}:${t}`;x(e,t),f.set(s,Date.now());let n=setInterval(async()=>{let n=f.get(s);if(n&&Date.now()-n>3e5){x(e,t);return}try{await y(e,t)}catch(e){console.error("[Poller] Error:",e)}},2e3);d.set(s,n)}function x(e,t){let s=`${e}:${t}`,n=d.get(s);n&&(clearInterval(n),d.delete(s),f.delete(s))}}};
@@ -1,4 +1,4 @@
1
- exports.id=9367,exports.ids=[9367],exports.modules={58359:()=>{},93739:()=>{},98241:(e,t,r)=>{"use strict";r.d(t,{s:()=>i});var n=r(55315),a=r.n(n),o=r(57569);function i(){return(0,o.Hb)("CM_LOG_DIR")||a().join(process.cwd(),"data","logs")}},89287:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});let n=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,a=/Request ID: ([^\s\n]+)/,o=/Summary: (.+?)(?:\n─|$)/s;function i(e){let t={content:e},r=n.exec(e);r&&(t.logFileName=r[2]);let i=a.exec(e);i&&(t.requestId=i[1]);let s=o.exec(e);return s&&(t.summary=s[1].trim()),t}},62648:(e,t,r)=>{"use strict";r.d(t,{Lm:()=>y,Uv:()=>f,YI:()=>m,_f:()=>x,xd:()=>p,ym:()=>g});var n=r(10927),a=r(19377),o=r(92900),i=r(61282);let s=(0,r(21764).promisify)(i.exec);function c(e){return e instanceof Error?e.message:String(e)}let l=null;async function u(){if(l)return l;if(process.env.CLAUDE_PATH)return l=process.env.CLAUDE_PATH;try{let{stdout:e}=await s("which claude",{timeout:5e3});return l=e.trim()}catch{for(let e of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await s(`test -x "${e}"`,{timeout:1e3}),l=e}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}function d(e){return`mcbd-claude-${e}`}async function f(){try{return await s("which claude",{timeout:5e3}),!0}catch{return!1}}async function m(e){let t=d(e);return await (0,n.Hk)(t)}async function w(e,t=5e3){let r=Date.now();for(;Date.now()-r<t;){let t=await (0,n.xq)(e,{startLine:-50});if(a.V7.test((0,a.vp)(t)))return;await new Promise(e=>setTimeout(e,200))}throw Error(`Prompt detection timeout (${t}ms)`)}async function g(e){let{worktreeId:t,worktreePath:r}=e;if(!await f())throw Error("Claude CLI is not installed or not in PATH");let o=d(t);if(await (0,n.Hk)(o)){console.log(`Claude session ${o} already exists`);return}try{await (0,n.ed)({sessionName:o,workingDirectory:r,historyLimit:5e4});let e=await u();await (0,n.Is)(o,e,!0);let t=Date.now(),i=!1,s=!1;for(;Date.now()-t<15e3;){await new Promise(e=>setTimeout(e,300));try{let e=await (0,n.xq)(o,{startLine:-50}),r=(0,a.vp)(e);if(a.V7.test(r)){await new Promise(e=>setTimeout(e,500)),console.log(`Claude initialized in ${Date.now()-t}ms`),i=!0;break}!s&&a.H3.test(r)&&(await (0,n.Is)(o,"",!0),s=!0,console.log("Trust dialog detected, sending Enter to confirm"))}catch{}}if(!i)throw Error("Claude initialization timeout (15000ms)");console.log(`Started Claude session: ${o}`)}catch(e){throw Error(`Failed to start Claude session: ${c(e)}`)}}async function p(e,t){let r=d(e);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist. Start the session first.`);let i=await (0,n.xq)(r,{startLine:-50});a.V7.test((0,a.vp)(i))||await w(r,1e4),await new Promise(e=>setTimeout(e,500)),await (0,n.Is)(r,t,!1),await (0,n.Is)(r,"",!0),t.includes("\n")&&await (0,o.N)(r),console.log(`Sent message to Claude session: ${r}`)}async function y(e,t=1e3){let r=d(e);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist`);try{return await (0,n.xq)(r,{startLine:-t})}catch(e){throw Error(`Failed to capture Claude output: ${c(e)}`)}}async function x(e){let t=d(e);try{await (0,n.Hk)(t)&&(await (0,n.Is)(t,"",!1),await s(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500)));let e=await (0,n.AJ)(t);return e&&console.log(`✓ Stopped Claude session: ${t}`),e}catch(e){return console.error(`Error stopping Claude session: ${c(e)}`),!1}}},19377:(e,t,r)=>{"use strict";r.d(t,{H3:()=>c,Sg:()=>x,V7:()=>i,Wg:()=>g,_r:()=>f,bs:()=>function e(t){switch(t){case"claude":return{promptPattern:i,separatorPattern:s,thinkingPattern:a,skipPatterns:[/^─{10,}$/,/^[>❯]\s*$/,a,/^\s*[⎿⏋]\s+Tip:/,/^\s*Tip:/,/^\s*\?\s*for shortcuts/,/to interrupt\)/,d]};case"codex":return{promptPattern:l,separatorPattern:u,thinkingPattern:o,skipPatterns:[/^─.*─+$/,/^›\s*$/,/^›\s+(Implement|Find and fix|Type)/,o,/^\s*\d+%\s+context left/,/^\s*for shortcuts$/,/╭─+╮/,/╰─+╯/,/•\s*Ran\s+/,/^\s*└/,/^\s*│/,/\(.*esc to interrupt\)/,d]};case"gemini":return{promptPattern:w,separatorPattern:/^gemini\s+--\s+/m,thinkingPattern:/(?!)/m,skipPatterns:[/^gemini\s+--\s+/,w,/^\s*$/]};default:return e("claude")}},d8:()=>d,vp:()=>y,ww:()=>m});let n=(0,r(43895).h)("cli-patterns"),a=RegExp(`[✻✽⏺\xb7∴✢✳✶⦿◉●○◌◎⊙⊚⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\\s+.+…|esc to interrupt`,"m"),o=/•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m,i=/^[>❯](\s*$|\s+\S)/m,s=/^─{10,}$/m,c=/Yes, I trust this folder/m,l=/^›\s*/m,u=/^─.*Worked for.*─+$/m,d=/\[Pasted text #\d+/,f=500,m=3,w=/^(%|\$|.*@.*[%$#])\s*$/m;function g(e,t){let r;let i=n.withContext({cliToolId:e});switch(i.debug("detectThinking:check",{contentLength:t.length}),e){case"claude":default:r=a.test(t);break;case"codex":r=o.test(t);break;case"gemini":r=!1}return i.debug("detectThinking:result",{isThinking:r}),r}let p=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function y(e){return e.replace(p,"")}function x(e){if("claude"===e)return{requireDefaultIndicator:!1}}},76966:(e,t,r)=>{"use strict";r.d(t,{o:()=>o});var n=r(75748),a=r(98636);async function o(e,t,r,o="claude"){let i=(0,n.vX)(e,t);if(i)try{await (0,a.xN)(t,i.content,r,o)}catch(e){console.error("[recordClaudeConversation] Failed to create log file:",e)}}},98636:(e,t,r)=>{"use strict";r.d(t,{e7:()=>f,xN:()=>d});var n=r(20629),a=r.n(n),o=r(55315),i=r.n(o),s=r(73853),c=r(98241);function l(e="claude"){return i().join((0,c.s)(),e)}async function u(e="claude"){let t=l(e);try{await a().access(t)}catch{await a().mkdir(t,{recursive:!0})}}async function d(e,t,r,n="claude"){await u(n);let o=function(e,t="claude"){let r=(0,s.WU)(new Date,"yyyy-MM-dd"),n=`${e}-${r}.md`,a=l(t);return i().join(a,n)}(e,n),c=(0,s.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),d="";try{d=await a().readFile(o,"utf-8")}catch{let t="claude"===n?"Claude Code":"codex"===n?"Codex CLI":"Gemini CLI";d=`# ${t} Conversation Log: ${e}
1
+ exports.id=9367,exports.ids=[9367],exports.modules={58359:()=>{},93739:()=>{},98241:(e,t,r)=>{"use strict";r.d(t,{s:()=>i});var n=r(55315),a=r.n(n),o=r(98838);function i(){return(0,o.Hb)("CM_LOG_DIR")||a().join(process.cwd(),"data","logs")}},89287:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});let n=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,a=/Request ID: ([^\s\n]+)/,o=/Summary: (.+?)(?:\n─|$)/s;function i(e){let t={content:e},r=n.exec(e);r&&(t.logFileName=r[2]);let i=a.exec(e);i&&(t.requestId=i[1]);let s=o.exec(e);return s&&(t.summary=s[1].trim()),t}},62648:(e,t,r)=>{"use strict";r.d(t,{Lm:()=>y,Uv:()=>f,YI:()=>m,_f:()=>x,xd:()=>p,ym:()=>g});var n=r(10927),a=r(19377),o=r(92900),i=r(61282);let s=(0,r(21764).promisify)(i.exec);function c(e){return e instanceof Error?e.message:String(e)}let l=null;async function u(){if(l)return l;if(process.env.CLAUDE_PATH)return l=process.env.CLAUDE_PATH;try{let{stdout:e}=await s("which claude",{timeout:5e3});return l=e.trim()}catch{for(let e of["/opt/homebrew/bin/claude","/usr/local/bin/claude","/usr/bin/claude"])try{return await s(`test -x "${e}"`,{timeout:1e3}),l=e}catch{}throw Error("Claude CLI not found. Set CLAUDE_PATH environment variable or install Claude CLI.")}}function d(e){return`mcbd-claude-${e}`}async function f(){try{return await s("which claude",{timeout:5e3}),!0}catch{return!1}}async function m(e){let t=d(e);return await (0,n.Hk)(t)}async function w(e,t=5e3){let r=Date.now();for(;Date.now()-r<t;){let t=await (0,n.xq)(e,{startLine:-50});if(a.V7.test((0,a.vp)(t)))return;await new Promise(e=>setTimeout(e,200))}throw Error(`Prompt detection timeout (${t}ms)`)}async function g(e){let{worktreeId:t,worktreePath:r}=e;if(!await f())throw Error("Claude CLI is not installed or not in PATH");let o=d(t);if(await (0,n.Hk)(o)){console.log(`Claude session ${o} already exists`);return}try{await (0,n.ed)({sessionName:o,workingDirectory:r,historyLimit:5e4});let e=await u();await (0,n.Is)(o,e,!0);let t=Date.now(),i=!1,s=!1;for(;Date.now()-t<15e3;){await new Promise(e=>setTimeout(e,300));try{let e=await (0,n.xq)(o,{startLine:-50}),r=(0,a.vp)(e);if(a.V7.test(r)){await new Promise(e=>setTimeout(e,500)),console.log(`Claude initialized in ${Date.now()-t}ms`),i=!0;break}!s&&a.H3.test(r)&&(await (0,n.Is)(o,"",!0),s=!0,console.log("Trust dialog detected, sending Enter to confirm"))}catch{}}if(!i)throw Error("Claude initialization timeout (15000ms)");console.log(`Started Claude session: ${o}`)}catch(e){throw Error(`Failed to start Claude session: ${c(e)}`)}}async function p(e,t){let r=d(e);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist. Start the session first.`);let i=await (0,n.xq)(r,{startLine:-50});a.V7.test((0,a.vp)(i))||await w(r,1e4),await new Promise(e=>setTimeout(e,500)),await (0,n.Is)(r,t,!1),await (0,n.Is)(r,"",!0),t.includes("\n")&&await (0,o.N)(r),console.log(`Sent message to Claude session: ${r}`)}async function y(e,t=1e3){let r=d(e);if(!await (0,n.Hk)(r))throw Error(`Claude session ${r} does not exist`);try{return await (0,n.xq)(r,{startLine:-t})}catch(e){throw Error(`Failed to capture Claude output: ${c(e)}`)}}async function x(e){let t=d(e);try{await (0,n.Hk)(t)&&(await (0,n.Is)(t,"",!1),await s(`tmux send-keys -t "${t}" C-d`),await new Promise(e=>setTimeout(e,500)));let e=await (0,n.AJ)(t);return e&&console.log(`✓ Stopped Claude session: ${t}`),e}catch(e){return console.error(`Error stopping Claude session: ${c(e)}`),!1}}},19377:(e,t,r)=>{"use strict";r.d(t,{H3:()=>c,Sg:()=>x,V7:()=>i,Wg:()=>g,_r:()=>f,bs:()=>function e(t){switch(t){case"claude":return{promptPattern:i,separatorPattern:s,thinkingPattern:a,skipPatterns:[/^─{10,}$/,/^[>❯]\s*$/,a,/^\s*[⎿⏋]\s+Tip:/,/^\s*Tip:/,/^\s*\?\s*for shortcuts/,/to interrupt\)/,d]};case"codex":return{promptPattern:l,separatorPattern:u,thinkingPattern:o,skipPatterns:[/^─.*─+$/,/^›\s*$/,/^›\s+(Implement|Find and fix|Type)/,o,/^\s*\d+%\s+context left/,/^\s*for shortcuts$/,/╭─+╮/,/╰─+╯/,/•\s*Ran\s+/,/^\s*└/,/^\s*│/,/\(.*esc to interrupt\)/,d]};case"gemini":return{promptPattern:w,separatorPattern:/^gemini\s+--\s+/m,thinkingPattern:/(?!)/m,skipPatterns:[/^gemini\s+--\s+/,w,/^\s*$/]};default:return e("claude")}},d8:()=>d,vp:()=>y,ww:()=>m});let n=(0,r(43895).h)("cli-patterns"),a=RegExp(`[✻✽⏺\xb7∴✢✳✶⦿◉●○◌◎⊙⊚⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\\s+.+…|esc to interrupt`,"m"),o=/•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m,i=/^[>❯](\s*$|\s+\S)/m,s=/^─{10,}$/m,c=/Yes, I trust this folder/m,l=/^›\s*/m,u=/^─.*Worked for.*─+$/m,d=/\[Pasted text #\d+/,f=500,m=3,w=/^(%|\$|.*@.*[%$#])\s*$/m;function g(e,t){let r;let i=n.withContext({cliToolId:e});switch(i.debug("detectThinking:check",{contentLength:t.length}),e){case"claude":default:r=a.test(t);break;case"codex":r=o.test(t);break;case"gemini":r=!1}return i.debug("detectThinking:result",{isThinking:r}),r}let p=/\x1b\[[0-9;]*[a-zA-Z]|\x1b\][^\x07]*\x07|\[[0-9;]*m/g;function y(e){return e.replace(p,"")}function x(e){if("claude"===e)return{requireDefaultIndicator:!1}}},76966:(e,t,r)=>{"use strict";r.d(t,{o:()=>o});var n=r(75748),a=r(98636);async function o(e,t,r,o="claude"){let i=(0,n.vX)(e,t);if(i)try{await (0,a.xN)(t,i.content,r,o)}catch(e){console.error("[recordClaudeConversation] Failed to create log file:",e)}}},98636:(e,t,r)=>{"use strict";r.d(t,{e7:()=>f,xN:()=>d});var n=r(20629),a=r.n(n),o=r(55315),i=r.n(o),s=r(73853),c=r(98241);function l(e="claude"){return i().join((0,c.s)(),e)}async function u(e="claude"){let t=l(e);try{await a().access(t)}catch{await a().mkdir(t,{recursive:!0})}}async function d(e,t,r,n="claude"){await u(n);let o=function(e,t="claude"){let r=(0,s.WU)(new Date,"yyyy-MM-dd"),n=`${e}-${r}.md`,a=l(t);return i().join(a,n)}(e,n),c=(0,s.WU)(new Date,"yyyy-MM-dd HH:mm:ss"),d="";try{d=await a().readFile(o,"utf-8")}catch{let t="claude"===n?"Claude Code":"codex"===n?"Codex CLI":"Gemini CLI";d=`# ${t} Conversation Log: ${e}
2
2
 
3
3
  Created: ${c}
4
4
 
@@ -16,4 +16,4 @@ ${r}
16
16
 
17
17
  ---
18
18
 
19
- `,await a().writeFile(o,d,"utf-8"),o}async function f(e,t="all"){let r=[];for(let n of"all"===t?["claude","codex","gemini"]:[t]){await u(n);let t=l(n);try{let n=(await a().readdir(t)).filter(t=>t.startsWith(`${e}-`)&&t.endsWith(".md")).map(e=>i().join(t,e));r.push(...n)}catch{}}return r.sort().reverse()}},43895:(e,t,r)=>{"use strict";r.d(t,{Y:()=>c,h:()=>l});var n=r(57569);let a=[{pattern:/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,replacement:"Bearer [REDACTED]"},{pattern:/(password|passwd|pwd)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/(token|secret|api_key|apikey|auth)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/Authorization:\s*\S+/gi,replacement:"Authorization: [REDACTED]"},{pattern:/-----BEGIN\s+\w+\s+PRIVATE\s+KEY-----[\s\S]*?-----END\s+\w+\s+PRIVATE\s+KEY-----/g,replacement:"[SSH_KEY_REDACTED]"}],o=/password|secret|token|key|auth/i,i={debug:0,info:1,warn:2,error:3};function s(e,t,r,s,c){let l=(0,n.LI)().level;if(i[e]<i[l])return;let u=s?function e(t){if("string"==typeof t){let e=t;for(let{pattern:t,replacement:r}of a)e=e.replace(t,r);return e}if("object"==typeof t&&null!==t){if(Array.isArray(t))return t.map(e);let r={};for(let[n,a]of Object.entries(t))o.test(n)?r[n]="[REDACTED]":r[n]=e(a);return r}return t}(s):void 0,d=function(e){if("json"===(0,n.LI)().format)return JSON.stringify(e);let{timestamp:t,level:r,module:a,action:o,data:i,worktreeId:s,cliToolId:c,requestId:l}=e,u=[s,c].filter(Boolean),d=u.length>0?` [${u.join(":")}]`:"",f=l?` (${l.slice(0,8)})`:"",m=i?` ${JSON.stringify(i)}`:"";return`[${t}] [${r.toUpperCase()}] [${a}]${d}${f} ${o}${m}`}({level:e,module:t,action:r,timestamp:new Date().toISOString(),...c,...u&&{data:u}});switch(e){case"error":console.error(d);break;case"warn":console.warn(d);break;default:console.log(d)}}function c(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function l(e){let t=r=>({debug:(t,n)=>s("debug",e,t,n,r),info:(t,n)=>s("info",e,t,n,r),warn:(t,n)=>s("warn",e,t,n,r),error:(t,n)=>s("error",e,t,n,r),withContext:e=>t({...r,...e})});return t()}},92900:(e,t,r)=>{"use strict";r.d(t,{N:()=>i});var n=r(10927),a=r(19377);let o=(0,r(43895).h)("pasted-text");async function i(e){for(let t=0;t<a.ww;t++){await new Promise(e=>setTimeout(e,a._r));let r=await (0,n.xq)(e,{startLine:-10});if(!a.d8.test((0,a.vp)(r)))return;await (0,n.Is)(e,"",!0),t===a.ww-1&&o.warn("Pasted text detection: max retries reached",{sessionName:e,maxRetries:a.ww,finalAttempt:t})}}},10927:(e,t,r)=>{"use strict";r.d(t,{AJ:()=>d,Hk:()=>o,Is:()=>s,ZV:()=>f,ed:()=>i,hL:()=>l,xq:()=>u});var n=r(61282);let a=(0,r(21764).promisify)(n.exec);async function o(e){try{return await a(`tmux has-session -t "${e}"`,{timeout:5e3}),!0}catch{return!1}}async function i(e,t){let r,n,o;"string"==typeof e?(r=e,n=t,o=5e4):(r=e.sessionName,n=e.workingDirectory,o=e.historyLimit||5e4);try{await a(`tmux new-session -d -s "${r}" -c "${n}"`,{timeout:5e3}),await a(`tmux set-option -t "${r}" history-limit ${o}`,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to create tmux session: ${e}`)}}async function s(e,t,r=!0){let n=t.replace(/'/g,"'\\''"),o=r?`tmux send-keys -t "${e}" '${n}' C-m`:`tmux send-keys -t "${e}" '${n}'`;try{await a(o,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send keys to tmux session: ${e}`)}}let c=new Set(["Up","Down","Left","Right","Enter","Space","Tab","Escape","BSpace","DC"]);async function l(e,t){if(0!==t.length){for(let e of t)if(!c.has(e))throw Error(`Invalid special key: ${e}`);try{for(let r=0;r<t.length;r++){let n=`tmux send-keys -t "${e}" ${t[r]}`;await a(n,{timeout:5e3}),r<t.length-1&&await new Promise(e=>setTimeout(e,100))}}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send special keys to tmux session: ${e}`)}}}async function u(e,t){let r,n;"number"==typeof t?(r=-t,n="-"):t?(r=t.startLine??-1e4,n=t.endLine??"-"):(r=-1e3,n="-");try{let{stdout:t}=await a(`tmux capture-pane -t "${e}" -p -e -S ${r} -E ${n}`,{timeout:5e3,maxBuffer:10485760});return t}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to capture pane: ${e}`)}}async function d(e){try{return await a(`tmux kill-session -t "${e}"`,{timeout:5e3}),!0}catch(t){let e=t instanceof Error?t.message:String(t);if(e?.includes("no server running")||e?.includes("can't find session"))return!1;throw Error(`Failed to kill tmux session: ${e}`)}}async function f(e,t){try{await a(`tmux send-keys -t "${e}" ${t}`,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send special key: ${e}`)}}},25079:(e,t,r)=>{"use strict";r.d(t,{ZV:()=>l,fM:()=>s,ps:()=>c});var n=r(34893);let a=new Map,o=new Map;function i(e,t){let r=o.get(e);if(console.log(`[WS] handleBroadcast called for ${e}, room size: ${r?.size||0}`),!r){console.log(`[WS] No room found for ${e}`);return}if(0===r.size){console.log(`[WS] Room for ${e} is empty`);return}try{let a=JSON.stringify({type:"broadcast",worktreeId:e,data:t}),o=0,i=0;r.forEach(e=>{if(e.readyState===n.XY.OPEN)try{e.send(a),o++}catch(e){i++,console.error("Error sending WebSocket message to client:",e)}}),console.log(`Broadcast to worktree ${e}: ${o}/${r.size} clients (${i} errors)`)}catch(t){console.error(`Error broadcasting to worktree ${e}:`,t);try{let t=JSON.stringify({type:"broadcast",worktreeId:e,data:{error:"Message encoding error"}});r.forEach(e=>{if(e.readyState===n.XY.OPEN)try{e.send(t)}catch{}})}catch(e){console.error("Failed to send fallback message:",e)}}}function s(e,t){i(e,t)}function c(e,t){t.worktreeId?i(t.worktreeId,{type:e,...t}):console.warn("broadcastMessage called without worktreeId")}function l(e){for(let t of e){let e=o.get(t);e&&(e.forEach(e=>{let r=a.get(e);r&&r.worktreeIds.delete(t)}),o.delete(t),console.log(`[WS] Cleaned up room for worktree: ${t}`))}}}};
19
+ `,await a().writeFile(o,d,"utf-8"),o}async function f(e,t="all"){let r=[];for(let n of"all"===t?["claude","codex","gemini"]:[t]){await u(n);let t=l(n);try{let n=(await a().readdir(t)).filter(t=>t.startsWith(`${e}-`)&&t.endsWith(".md")).map(e=>i().join(t,e));r.push(...n)}catch{}}return r.sort().reverse()}},43895:(e,t,r)=>{"use strict";r.d(t,{Y:()=>c,h:()=>l});var n=r(98838);let a=[{pattern:/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,replacement:"Bearer [REDACTED]"},{pattern:/(password|passwd|pwd)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/(token|secret|api_key|apikey|auth)[=:]\s*\S+/gi,replacement:"$1=[REDACTED]"},{pattern:/Authorization:\s*\S+/gi,replacement:"Authorization: [REDACTED]"},{pattern:/-----BEGIN\s+\w+\s+PRIVATE\s+KEY-----[\s\S]*?-----END\s+\w+\s+PRIVATE\s+KEY-----/g,replacement:"[SSH_KEY_REDACTED]"}],o=/password|secret|token|key|auth/i,i={debug:0,info:1,warn:2,error:3};function s(e,t,r,s,c){let l=(0,n.LI)().level;if(i[e]<i[l])return;let u=s?function e(t){if("string"==typeof t){let e=t;for(let{pattern:t,replacement:r}of a)e=e.replace(t,r);return e}if("object"==typeof t&&null!==t){if(Array.isArray(t))return t.map(e);let r={};for(let[n,a]of Object.entries(t))o.test(n)?r[n]="[REDACTED]":r[n]=e(a);return r}return t}(s):void 0,d=function(e){if("json"===(0,n.LI)().format)return JSON.stringify(e);let{timestamp:t,level:r,module:a,action:o,data:i,worktreeId:s,cliToolId:c,requestId:l}=e,u=[s,c].filter(Boolean),d=u.length>0?` [${u.join(":")}]`:"",f=l?` (${l.slice(0,8)})`:"",m=i?` ${JSON.stringify(i)}`:"";return`[${t}] [${r.toUpperCase()}] [${a}]${d}${f} ${o}${m}`}({level:e,module:t,action:r,timestamp:new Date().toISOString(),...c,...u&&{data:u}});switch(e){case"error":console.error(d);break;case"warn":console.warn(d);break;default:console.log(d)}}function c(){return"undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}function l(e){let t=r=>({debug:(t,n)=>s("debug",e,t,n,r),info:(t,n)=>s("info",e,t,n,r),warn:(t,n)=>s("warn",e,t,n,r),error:(t,n)=>s("error",e,t,n,r),withContext:e=>t({...r,...e})});return t()}},92900:(e,t,r)=>{"use strict";r.d(t,{N:()=>i});var n=r(10927),a=r(19377);let o=(0,r(43895).h)("pasted-text");async function i(e){for(let t=0;t<a.ww;t++){await new Promise(e=>setTimeout(e,a._r));let r=await (0,n.xq)(e,{startLine:-10});if(!a.d8.test((0,a.vp)(r)))return;await (0,n.Is)(e,"",!0),t===a.ww-1&&o.warn("Pasted text detection: max retries reached",{sessionName:e,maxRetries:a.ww,finalAttempt:t})}}},10927:(e,t,r)=>{"use strict";r.d(t,{AJ:()=>d,Hk:()=>o,Is:()=>s,ZV:()=>f,ed:()=>i,hL:()=>l,xq:()=>u});var n=r(61282);let a=(0,r(21764).promisify)(n.exec);async function o(e){try{return await a(`tmux has-session -t "${e}"`,{timeout:5e3}),!0}catch{return!1}}async function i(e,t){let r,n,o;"string"==typeof e?(r=e,n=t,o=5e4):(r=e.sessionName,n=e.workingDirectory,o=e.historyLimit||5e4);try{await a(`tmux new-session -d -s "${r}" -c "${n}"`,{timeout:5e3}),await a(`tmux set-option -t "${r}" history-limit ${o}`,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to create tmux session: ${e}`)}}async function s(e,t,r=!0){let n=t.replace(/'/g,"'\\''"),o=r?`tmux send-keys -t "${e}" '${n}' C-m`:`tmux send-keys -t "${e}" '${n}'`;try{await a(o,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send keys to tmux session: ${e}`)}}let c=new Set(["Up","Down","Left","Right","Enter","Space","Tab","Escape","BSpace","DC"]);async function l(e,t){if(0!==t.length){for(let e of t)if(!c.has(e))throw Error(`Invalid special key: ${e}`);try{for(let r=0;r<t.length;r++){let n=`tmux send-keys -t "${e}" ${t[r]}`;await a(n,{timeout:5e3}),r<t.length-1&&await new Promise(e=>setTimeout(e,100))}}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send special keys to tmux session: ${e}`)}}}async function u(e,t){let r,n;"number"==typeof t?(r=-t,n="-"):t?(r=t.startLine??-1e4,n=t.endLine??"-"):(r=-1e3,n="-");try{let{stdout:t}=await a(`tmux capture-pane -t "${e}" -p -e -S ${r} -E ${n}`,{timeout:5e3,maxBuffer:10485760});return t}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to capture pane: ${e}`)}}async function d(e){try{return await a(`tmux kill-session -t "${e}"`,{timeout:5e3}),!0}catch(t){let e=t instanceof Error?t.message:String(t);if(e?.includes("no server running")||e?.includes("can't find session"))return!1;throw Error(`Failed to kill tmux session: ${e}`)}}async function f(e,t){try{await a(`tmux send-keys -t "${e}" ${t}`,{timeout:5e3})}catch(t){let e=t instanceof Error?t.message:String(t);throw Error(`Failed to send special key: ${e}`)}}},25079:(e,t,r)=>{"use strict";r.d(t,{ZV:()=>l,fM:()=>s,ps:()=>c});var n=r(34893);let a=new Map,o=new Map;function i(e,t){let r=o.get(e);if(console.log(`[WS] handleBroadcast called for ${e}, room size: ${r?.size||0}`),!r){console.log(`[WS] No room found for ${e}`);return}if(0===r.size){console.log(`[WS] Room for ${e} is empty`);return}try{let a=JSON.stringify({type:"broadcast",worktreeId:e,data:t}),o=0,i=0;r.forEach(e=>{if(e.readyState===n.XY.OPEN)try{e.send(a),o++}catch(e){i++,console.error("Error sending WebSocket message to client:",e)}}),console.log(`Broadcast to worktree ${e}: ${o}/${r.size} clients (${i} errors)`)}catch(t){console.error(`Error broadcasting to worktree ${e}:`,t);try{let t=JSON.stringify({type:"broadcast",worktreeId:e,data:{error:"Message encoding error"}});r.forEach(e=>{if(e.readyState===n.XY.OPEN)try{e.send(t)}catch{}})}catch(e){console.error("Failed to send fallback message:",e)}}}function s(e,t){i(e,t)}function c(e,t){t.worktreeId?i(t.worktreeId,{type:e,...t}):console.warn("broadcastMessage called without worktreeId")}function l(e){for(let t of e){let e=o.get(t);e&&(e.forEach(e=>{let r=a.get(e);r&&r.worktreeIds.delete(t)}),o.delete(t),console.log(`[WS] Cleaned up room for worktree: ${t}`))}}}};
@@ -1 +1 @@
1
- self.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:["static/chunks/webpack-e6531fcf859d9451.js","static/chunks/fd9d1056-cfdf4f91f13d3485.js","static/chunks/2117-e31fa477cb500950.js","static/chunks/main-app-420d93e43682fee5.js"],pages:{"/_app":["static/chunks/webpack-e6531fcf859d9451.js","static/chunks/framework-8e0e0f4a6b83a956.js","static/chunks/main-b6d727aa9248d4f2.js","static/chunks/pages/_app-3c9ca398d360b709.js"],"/_error":["static/chunks/webpack-e6531fcf859d9451.js","static/chunks/framework-8e0e0f4a6b83a956.js","static/chunks/main-b6d727aa9248d4f2.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-af8567a485ade35a.js","static/chunks/fd9d1056-cfdf4f91f13d3485.js","static/chunks/2117-e31fa477cb500950.js","static/chunks/main-app-420d93e43682fee5.js"],pages:{"/_app":["static/chunks/webpack-af8567a485ade35a.js","static/chunks/framework-8e0e0f4a6b83a956.js","static/chunks/main-f00f82f1cf18dd99.js","static/chunks/pages/_app-3c9ca398d360b709.js"],"/_error":["static/chunks/webpack-af8567a485ade35a.js","static/chunks/framework-8e0e0f4a6b83a956.js","static/chunks/main-f00f82f1cf18dd99.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 +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-e6531fcf859d9451.js" defer=""></script><script src="/_next/static/chunks/framework-8e0e0f4a6b83a956.js" defer=""></script><script src="/_next/static/chunks/main-b6d727aa9248d4f2.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/rppRTm2sRWa4sZE7ili8A/_buildManifest.js" defer=""></script><script src="/_next/static/rppRTm2sRWa4sZE7ili8A/_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":"rppRTm2sRWa4sZE7ili8A","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-af8567a485ade35a.js" defer=""></script><script src="/_next/static/chunks/framework-8e0e0f4a6b83a956.js" defer=""></script><script src="/_next/static/chunks/main-f00f82f1cf18dd99.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/zoVKZmyy2snskN1roYhHr/_buildManifest.js" defer=""></script><script src="/_next/static/zoVKZmyy2snskN1roYhHr/_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":"zoVKZmyy2snskN1roYhHr","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"whe1pRAPqqIdim8eQAWxUrAUMLURg+vGlUyPkjdQP1g="}
1
+ {"node":{},"edge":{},"encryptionKey":"1uCa8Kzjf4ZYbqVtSlZ7qTT8eo7Okx8YaIWOwAKxBXg="}
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[816],{43241:function(e,t,r){r.d(t,{Hn:function(){return c},Sz:function(){return l}});var o=r(57437),s=r(2265);let n="mcbd-sidebar-sort",i=(0,s.createContext)(null);function a(e,t){switch(t.type){case"TOGGLE":return{...e,isOpen:!e.isOpen};case"SET_WIDTH":return{...e,width:t.width};case"OPEN_MOBILE_DRAWER":return{...e,isMobileDrawerOpen:!0};case"CLOSE_MOBILE_DRAWER":return{...e,isMobileDrawerOpen:!1};case"SET_SORT_KEY":return{...e,sortKey:t.sortKey};case"SET_SORT_DIRECTION":return{...e,sortDirection:t.sortDirection};case"LOAD_SORT_SETTINGS":return{...e,sortKey:t.sortKey,sortDirection:t.sortDirection};default:return e}}function c(e){let{children:t,initialOpen:r=!0,initialWidth:c=288}=e,[l,u]=(0,s.useReducer)(a,{isOpen:r,width:c,isMobileDrawerOpen:!1,sortKey:"updatedAt",sortDirection:"desc"});(0,s.useEffect)(()=>{try{let e=localStorage.getItem(n);if(e){let{sortKey:t,sortDirection:r}=JSON.parse(e);t&&r&&u({type:"LOAD_SORT_SETTINGS",sortKey:t,sortDirection:r})}}catch(e){}},[]),(0,s.useEffect)(()=>{try{localStorage.setItem(n,JSON.stringify({sortKey:l.sortKey,sortDirection:l.sortDirection}))}catch(e){}},[l.sortKey,l.sortDirection]);let d=(0,s.useCallback)(()=>{u({type:"TOGGLE"})},[]),y=(0,s.useCallback)(e=>{u({type:"SET_WIDTH",width:e})},[]),E=(0,s.useCallback)(()=>{u({type:"OPEN_MOBILE_DRAWER"})},[]),S=(0,s.useCallback)(()=>{u({type:"CLOSE_MOBILE_DRAWER"})},[]),p=(0,s.useCallback)(e=>{u({type:"SET_SORT_KEY",sortKey:e})},[]),T=(0,s.useCallback)(e=>{u({type:"SET_SORT_DIRECTION",sortDirection:e})},[]),O={isOpen:l.isOpen,width:l.width,isMobileDrawerOpen:l.isMobileDrawerOpen,sortKey:l.sortKey,sortDirection:l.sortDirection,toggle:d,setWidth:y,openMobileDrawer:E,closeMobileDrawer:S,setSortKey:p,setSortDirection:T};return(0,o.jsx)(i.Provider,{value:O,children:t})}function l(){let e=(0,s.useContext)(i);if(!e)throw Error("useSidebarContext must be used within a SidebarProvider");return e}},34021:function(e,t,r){r.d(t,{Mu:function(){return d},_I:function(){return u}});var o=r(57437),s=r(2265),n=r(3227);let i={PROCESSING:2e3,SESSION_RUNNING:5e3,IDLE:1e4},a=(0,s.createContext)(null),c={selectedWorktreeId:null,worktrees:[],selectedWorktreeDetail:null,isLoading:!0,isLoadingDetail:!1,error:null};function l(e,t){switch(t.type){case"SET_WORKTREES":return{...e,worktrees:t.worktrees,isLoading:!1};case"SELECT_WORKTREE":return{...e,selectedWorktreeId:t.id};case"SET_WORKTREE_DETAIL":return{...e,selectedWorktreeDetail:t.detail};case"SET_LOADING":return{...e,isLoading:t.isLoading};case"SET_LOADING_DETAIL":return{...e,isLoadingDetail:t.isLoadingDetail};case"SET_ERROR":return{...e,error:t.error,isLoading:!1};default:return e}}function u(e){let{children:t}=e,[r,u]=(0,s.useReducer)(l,c),d=(0,s.useCallback)(async()=>{u({type:"SET_LOADING",isLoading:!0}),u({type:"SET_ERROR",error:null});try{let e=await n.Iv.getAll();u({type:"SET_WORKTREES",worktrees:e.worktrees})}catch(e){u({type:"SET_ERROR",error:e instanceof Error?e.message:"Failed to fetch worktrees"})}},[]),y=(0,s.useCallback)(async e=>{u({type:"SELECT_WORKTREE",id:e}),u({type:"SET_LOADING_DETAIL",isLoadingDetail:!0}),u({type:"SET_ERROR",error:null});try{n.Iv.markAsViewed(e).catch(e=>{console.warn("[WorktreeSelectionContext] Failed to mark as viewed:",e)});let t=await n.Iv.getById(e);u({type:"SET_WORKTREE_DETAIL",detail:t})}catch(e){u({type:"SET_ERROR",error:e instanceof Error?e.message:"Failed to fetch worktree detail"})}finally{u({type:"SET_LOADING_DETAIL",isLoadingDetail:!1})}},[]),E=(0,s.useCallback)(async()=>{await d()},[d]);(0,s.useEffect)(()=>{d()},[d]),(0,s.useEffect)(()=>{let e=null,t=!0,r=async()=>{if(t)try{var o;let s=await n.Iv.getAll();u({type:"SET_WORKTREES",worktrees:s.worktrees});let a=(o=s.worktrees).some(e=>e.isProcessing||e.isWaitingForResponse)?i.PROCESSING:o.some(e=>e.isSessionRunning)?i.SESSION_RUNNING:i.IDLE;t&&(e=setTimeout(r,a))}catch(o){console.error("[WorktreeSelectionContext] Polling error:",o),t&&(e=setTimeout(r,i.SESSION_RUNNING))}};return r(),()=>{t=!1,e&&clearTimeout(e)}},[]);let S={selectedWorktreeId:r.selectedWorktreeId,worktrees:r.worktrees,selectedWorktreeDetail:r.selectedWorktreeDetail,isLoadingDetail:r.isLoadingDetail,error:r.error,selectWorktree:y,refreshWorktrees:E};return(0,o.jsx)(a.Provider,{value:S,children:t})}function d(){let e=(0,s.useContext)(a);if(!e)throw Error("useWorktreeSelection must be used within a WorktreeSelectionProvider");return e}},3227:function(e,t,r){r.d(t,{Iv:function(){return n},J1:function(){return i},nE:function(){return a},zG:function(){return c}});class o extends Error{constructor(e,t,r){super(e),this.status=t,this.data=r,this.name="ApiError"}}async function s(e,t){try{let r=new Headers(null==t?void 0:t.headers);r.set("Content-Type","application/json");let s=await fetch(e,{...t,headers:r});if(!s.ok){let e=await s.json().catch(()=>({}));throw new o(e.error||"HTTP error ".concat(s.status),s.status,e)}return s.json()}catch(e){if(e instanceof o)throw e;throw new o(e instanceof Error?e.message:"Unknown error",0,e)}}let n={getAll:async()=>s("/api/worktrees"),getById:async e=>s("/api/worktrees/".concat(e)),updateDescription:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({description:t})}),updateLink:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({link:t})}),toggleFavorite:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({favorite:t})}),updateStatus:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({status:t})}),updateCliTool:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({cliToolId:t})}),markAsViewed:async e=>s("/api/worktrees/".concat(e,"/viewed"),{method:"PATCH"}),async getMessages(e,t){let r=new URLSearchParams;return t&&r.append("cliTool",t),s("/api/worktrees/".concat(e,"/messages").concat(r.toString()?"?".concat(r.toString()):""))},async sendMessage(e,t,r){let o={content:t};return r&&(o.cliToolId=r),s("/api/worktrees/".concat(e,"/send"),{method:"POST",body:JSON.stringify(o)})},getLogs:async e=>s("/api/worktrees/".concat(e,"/logs")),async getLogFile(e,t,r){let o=(null==r?void 0:r.sanitize)?"?sanitize=true":"";return s("/api/worktrees/".concat(e,"/logs/").concat(t).concat(o))},killSession:async(e,t)=>s("/api/worktrees/".concat(e,"/kill-session"),{method:"POST",body:t?JSON.stringify({cliToolId:t}):void 0})},i={scan:async e=>s("/api/repositories/scan",{method:"POST",body:JSON.stringify({repositoryPath:e})}),sync:async()=>s("/api/repositories/sync",{method:"POST"}),delete:async e=>s("/api/repositories",{method:"DELETE",body:JSON.stringify({repositoryPath:e})}),clone:async e=>s("/api/repositories/clone",{method:"POST",body:JSON.stringify({cloneUrl:e})}),getCloneStatus:async e=>s("/api/repositories/clone/".concat(e)),getExcluded:async()=>s("/api/repositories/excluded"),restore:async e=>s("/api/repositories/restore",{method:"PUT",body:JSON.stringify({repositoryPath:e})})},a={getAll:async e=>(await s("/api/worktrees/".concat(e,"/memos"))).memos,create:async(e,t)=>(await s("/api/worktrees/".concat(e,"/memos"),{method:"POST",body:JSON.stringify(t||{})})).memo,update:async(e,t,r)=>(await s("/api/worktrees/".concat(e,"/memos/").concat(t),{method:"PUT",body:JSON.stringify(r)})).memo,delete:async(e,t)=>s("/api/worktrees/".concat(e,"/memos/").concat(t),{method:"DELETE"})};function c(e){return e instanceof o||e instanceof Error?e.message:"An unknown error occurred"}}}]);
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[816],{43241:function(e,t,r){r.d(t,{Hn:function(){return c},Sz:function(){return l}});var o=r(57437),s=r(2265);let n="mcbd-sidebar-sort",i=(0,s.createContext)(null);function a(e,t){switch(t.type){case"TOGGLE":return{...e,isOpen:!e.isOpen};case"SET_WIDTH":return{...e,width:t.width};case"OPEN_MOBILE_DRAWER":return{...e,isMobileDrawerOpen:!0};case"CLOSE_MOBILE_DRAWER":return{...e,isMobileDrawerOpen:!1};case"SET_SORT_KEY":return{...e,sortKey:t.sortKey};case"SET_SORT_DIRECTION":return{...e,sortDirection:t.sortDirection};case"LOAD_SORT_SETTINGS":return{...e,sortKey:t.sortKey,sortDirection:t.sortDirection};default:return e}}function c(e){let{children:t,initialOpen:r=!0,initialWidth:c=288}=e,[l,u]=(0,s.useReducer)(a,{isOpen:r,width:c,isMobileDrawerOpen:!1,sortKey:"updatedAt",sortDirection:"desc"});(0,s.useEffect)(()=>{try{let e=localStorage.getItem(n);if(e){let{sortKey:t,sortDirection:r}=JSON.parse(e);t&&r&&u({type:"LOAD_SORT_SETTINGS",sortKey:t,sortDirection:r})}}catch(e){}},[]),(0,s.useEffect)(()=>{try{localStorage.setItem(n,JSON.stringify({sortKey:l.sortKey,sortDirection:l.sortDirection}))}catch(e){}},[l.sortKey,l.sortDirection]);let d=(0,s.useCallback)(()=>{u({type:"TOGGLE"})},[]),y=(0,s.useCallback)(e=>{u({type:"SET_WIDTH",width:e})},[]),E=(0,s.useCallback)(()=>{u({type:"OPEN_MOBILE_DRAWER"})},[]),S=(0,s.useCallback)(()=>{u({type:"CLOSE_MOBILE_DRAWER"})},[]),p=(0,s.useCallback)(e=>{u({type:"SET_SORT_KEY",sortKey:e})},[]),T=(0,s.useCallback)(e=>{u({type:"SET_SORT_DIRECTION",sortDirection:e})},[]),O={isOpen:l.isOpen,width:l.width,isMobileDrawerOpen:l.isMobileDrawerOpen,sortKey:l.sortKey,sortDirection:l.sortDirection,toggle:d,setWidth:y,openMobileDrawer:E,closeMobileDrawer:S,setSortKey:p,setSortDirection:T};return(0,o.jsx)(i.Provider,{value:O,children:t})}function l(){let e=(0,s.useContext)(i);if(!e)throw Error("useSidebarContext must be used within a SidebarProvider");return e}},34021:function(e,t,r){r.d(t,{Mu:function(){return d},_I:function(){return u}});var o=r(57437),s=r(2265),n=r(3227);let i={PROCESSING:2e3,SESSION_RUNNING:5e3,IDLE:1e4},a=(0,s.createContext)(null),c={selectedWorktreeId:null,worktrees:[],selectedWorktreeDetail:null,isLoading:!0,isLoadingDetail:!1,error:null};function l(e,t){switch(t.type){case"SET_WORKTREES":return{...e,worktrees:t.worktrees,isLoading:!1};case"SELECT_WORKTREE":return{...e,selectedWorktreeId:t.id};case"SET_WORKTREE_DETAIL":return{...e,selectedWorktreeDetail:t.detail};case"SET_LOADING":return{...e,isLoading:t.isLoading};case"SET_LOADING_DETAIL":return{...e,isLoadingDetail:t.isLoadingDetail};case"SET_ERROR":return{...e,error:t.error,isLoading:!1};default:return e}}function u(e){let{children:t}=e,[r,u]=(0,s.useReducer)(l,c),d=(0,s.useCallback)(async()=>{u({type:"SET_LOADING",isLoading:!0}),u({type:"SET_ERROR",error:null});try{let e=await n.Iv.getAll();u({type:"SET_WORKTREES",worktrees:e.worktrees})}catch(e){u({type:"SET_ERROR",error:e instanceof Error?e.message:"Failed to fetch worktrees"})}},[]),y=(0,s.useCallback)(async e=>{u({type:"SELECT_WORKTREE",id:e}),u({type:"SET_LOADING_DETAIL",isLoadingDetail:!0}),u({type:"SET_ERROR",error:null});try{n.Iv.markAsViewed(e).catch(e=>{console.warn("[WorktreeSelectionContext] Failed to mark as viewed:",e)});let t=await n.Iv.getById(e);u({type:"SET_WORKTREE_DETAIL",detail:t})}catch(e){u({type:"SET_ERROR",error:e instanceof Error?e.message:"Failed to fetch worktree detail"})}finally{u({type:"SET_LOADING_DETAIL",isLoadingDetail:!1})}},[]),E=(0,s.useCallback)(async()=>{await d()},[d]);(0,s.useEffect)(()=>{d()},[d]),(0,s.useEffect)(()=>{let e=null,t=!0,r=async()=>{if(t)try{var o;let s=await n.Iv.getAll();u({type:"SET_WORKTREES",worktrees:s.worktrees});let a=(o=s.worktrees).some(e=>e.isProcessing||e.isWaitingForResponse)?i.PROCESSING:o.some(e=>e.isSessionRunning)?i.SESSION_RUNNING:i.IDLE;t&&(e=setTimeout(r,a))}catch(o){console.error("[WorktreeSelectionContext] Polling error:",o),t&&(e=setTimeout(r,i.SESSION_RUNNING))}};return r(),()=>{t=!1,e&&clearTimeout(e)}},[]);let S={selectedWorktreeId:r.selectedWorktreeId,worktrees:r.worktrees,selectedWorktreeDetail:r.selectedWorktreeDetail,isLoadingDetail:r.isLoadingDetail,error:r.error,selectWorktree:y,refreshWorktrees:E};return(0,o.jsx)(a.Provider,{value:S,children:t})}function d(){let e=(0,s.useContext)(a);if(!e)throw Error("useWorktreeSelection must be used within a WorktreeSelectionProvider");return e}},3227:function(e,t,r){r.d(t,{Bb:function(){return l},Iv:function(){return n},J1:function(){return i},nE:function(){return a},zG:function(){return c}});class o extends Error{constructor(e,t,r){super(e),this.status=t,this.data=r,this.name="ApiError"}}async function s(e,t){try{let r=new Headers(null==t?void 0:t.headers);r.set("Content-Type","application/json");let s=await fetch(e,{...t,headers:r});if(!s.ok){let e=await s.json().catch(()=>({}));throw new o(e.error||"HTTP error ".concat(s.status),s.status,e)}return s.json()}catch(e){if(e instanceof o)throw e;throw new o(e instanceof Error?e.message:"Unknown error",0,e)}}let n={getAll:async()=>s("/api/worktrees"),getById:async e=>s("/api/worktrees/".concat(e)),updateDescription:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({description:t})}),updateLink:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({link:t})}),toggleFavorite:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({favorite:t})}),updateStatus:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({status:t})}),updateCliTool:async(e,t)=>s("/api/worktrees/".concat(e),{method:"PATCH",body:JSON.stringify({cliToolId:t})}),markAsViewed:async e=>s("/api/worktrees/".concat(e,"/viewed"),{method:"PATCH"}),async getMessages(e,t){let r=new URLSearchParams;return t&&r.append("cliTool",t),s("/api/worktrees/".concat(e,"/messages").concat(r.toString()?"?".concat(r.toString()):""))},async sendMessage(e,t,r){let o={content:t};return r&&(o.cliToolId=r),s("/api/worktrees/".concat(e,"/send"),{method:"POST",body:JSON.stringify(o)})},getLogs:async e=>s("/api/worktrees/".concat(e,"/logs")),async getLogFile(e,t,r){let o=(null==r?void 0:r.sanitize)?"?sanitize=true":"";return s("/api/worktrees/".concat(e,"/logs/").concat(t).concat(o))},killSession:async(e,t)=>s("/api/worktrees/".concat(e,"/kill-session"),{method:"POST",body:t?JSON.stringify({cliToolId:t}):void 0})},i={scan:async e=>s("/api/repositories/scan",{method:"POST",body:JSON.stringify({repositoryPath:e})}),sync:async()=>s("/api/repositories/sync",{method:"POST"}),delete:async e=>s("/api/repositories",{method:"DELETE",body:JSON.stringify({repositoryPath:e})}),clone:async e=>s("/api/repositories/clone",{method:"POST",body:JSON.stringify({cloneUrl:e})}),getCloneStatus:async e=>s("/api/repositories/clone/".concat(e)),getExcluded:async()=>s("/api/repositories/excluded"),restore:async e=>s("/api/repositories/restore",{method:"PUT",body:JSON.stringify({repositoryPath:e})})},a={getAll:async e=>(await s("/api/worktrees/".concat(e,"/memos"))).memos,create:async(e,t)=>(await s("/api/worktrees/".concat(e,"/memos"),{method:"POST",body:JSON.stringify(t||{})})).memo,update:async(e,t,r)=>(await s("/api/worktrees/".concat(e,"/memos/").concat(t),{method:"PUT",body:JSON.stringify(r)})).memo,delete:async(e,t)=>s("/api/worktrees/".concat(e,"/memos/").concat(t),{method:"DELETE"})};function c(e){return e instanceof o||e instanceof Error?e.message:"An unknown error occurred"}let l={checkForUpdate:async()=>s("/api/app/update-check",{method:"GET"})}}}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1931],{14564:function(e,t,a){Promise.resolve().then(a.bind(a,23327))},23327:function(e,t,a){"use strict";a.r(t),a.d(t,{default:function(){return z}});var s=a(57437),r=a(2265),l=a(21221),n=a(27648),i=a(10789),c=a(38706),o=a(69234),d=a(45306),x=a(69073),m=a(8854);let p={en:m._,ja:x.ja};var u=a(3227);function h(e){var t;let{worktree:a,onSessionKilled:l,onStatusChanged:x}=e,{id:h,name:g,description:y,updatedAt:b,isSessionRunning:f,isWaitingForResponse:v,favorite:j,status:N,link:w}=a,[k,C]=(0,r.useState)(!1),[S,z]=(0,r.useState)(j||!1),[P,E]=(0,r.useState)(!1),[A,L]=(0,r.useState)(N||null),[T,D]=(0,r.useState)(!1),R=(0,c.T)(),I=null!==(t=p[(0,o.bU)()])&&void 0!==t?t:m._,O=b?(0,d.Q)(new Date(b),{addSuffix:!0,locale:I}):null,M="main"===g||"master"===g,F=async e=>{if(e.preventDefault(),e.stopPropagation(),confirm(R("worktree.session.confirmKill",{name:g})))try{C(!0),await u.Iv.killSession(h),l&&l()}catch(t){let e=(0,u.zG)(t);alert("".concat(R("worktree.session.failedToKill"),": ").concat(e))}finally{C(!1)}},U=async e=>{e.preventDefault(),e.stopPropagation();try{E(!0);let e=!S;await u.Iv.toggleFavorite(h,e),z(e)}catch(t){let e=(0,u.zG)(t);alert("".concat(R("worktree.errors.failedToUpdateFavorite"),": ").concat(e))}finally{E(!1)}},_=async(e,t)=>{t.preventDefault(),t.stopPropagation();try{D(!0),await u.Iv.updateStatus(h,e),L(e),x&&x()}catch(t){let e=(0,u.zG)(t);alert("".concat(R("worktree.errors.failedToUpdateStatus"),": ").concat(e))}finally{D(!1)}};return(0,s.jsx)(n.default,{href:"/worktrees/".concat(h),className:"block",children:(0,s.jsxs)(i.Zb,{hover:!0,padding:"lg",className:"h-full",children:[(0,s.jsx)(i.Ol,{children:(0,s.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,s.jsxs)(i.ll,{className:"flex items-center gap-2 flex-wrap",children:[(0,s.jsx)("button",{onClick:U,disabled:P,className:"flex-shrink-0 transition-colors hover:scale-110",title:S?R("common.favorites.remove"):R("common.favorites.add"),children:(0,s.jsx)("svg",{className:"w-5 h-5 ".concat(S?"fill-yellow-400 text-yellow-400":"fill-none text-gray-400"),stroke:"currentColor",strokeWidth:"2",viewBox:"0 0 24 24",children:(0,s.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.563.563 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.563.563 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z"})})}),(0,s.jsx)("span",{className:"truncate",children:g}),M&&(0,s.jsx)(i.Ct,{variant:"info",children:"Main"}),f&&v&&(0,s.jsx)(i.Ct,{variant:"warning",dot:!0,children:R("worktree.status.waitingForResponse")}),f&&!v&&(0,s.jsx)(i.Ct,{variant:"success",dot:!0,children:R("worktree.status.responseCompleted")})]}),f&&(0,s.jsx)(i.zx,{variant:"danger",size:"sm",onClick:F,disabled:k,className:"flex-shrink-0",children:k?R("common.ending"):R("common.end")})]})}),(0,s.jsx)(i.aY,{children:(0,s.jsxs)("div",{className:"space-y-3",children:[y&&(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-1",children:"Description"}),(0,s.jsx)("p",{className:"text-sm text-gray-700 line-clamp-2 whitespace-pre-wrap",children:y})]}),w&&(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-1",children:"Link"}),(0,s.jsxs)("button",{onClick:e=>{e.preventDefault(),e.stopPropagation(),w&&window.open(w,"_blank","noopener,noreferrer")},className:"flex items-center gap-1 text-sm text-blue-600 hover:text-blue-800 hover:underline transition-colors",title:"Open link in new tab",children:[(0,s.jsx)("svg",{className:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,s.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"})}),(0,s.jsx)("span",{className:"truncate",children:w})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-xs text-gray-500 mb-1",children:"Status"}),(0,s.jsxs)("div",{className:"flex gap-1 flex-wrap",children:[(0,s.jsx)("button",{onClick:e=>_(null,e),disabled:T,className:"px-2 py-1 text-xs font-medium rounded border transition-colors disabled:opacity-50 ".concat(null===A?"bg-gray-100 text-gray-700 border-gray-400":"bg-white text-gray-600 border-gray-200 hover:bg-gray-50"),children:"Not set"}),(0,s.jsx)("button",{onClick:e=>_("todo",e),disabled:T,className:"px-2 py-1 text-xs font-medium rounded border transition-colors disabled:opacity-50 ".concat("todo"===A?"bg-gray-100 text-gray-700 border-gray-400":"bg-white text-gray-600 border-gray-200 hover:bg-gray-50"),children:"ToDo"}),(0,s.jsx)("button",{onClick:e=>_("doing",e),disabled:T,className:"px-2 py-1 text-xs font-medium rounded border transition-colors disabled:opacity-50 ".concat("doing"===A?"bg-blue-100 text-blue-700 border-blue-400":"bg-white text-gray-600 border-gray-200 hover:bg-blue-50"),children:"Doing"}),(0,s.jsx)("button",{onClick:e=>_("done",e),disabled:T,className:"px-2 py-1 text-xs font-medium rounded border transition-colors disabled:opacity-50 ".concat("done"===A?"bg-green-100 text-green-700 border-green-400":"bg-white text-gray-600 border-gray-200 hover:bg-green-50"),children:"Done"})]})]}),O&&(0,s.jsxs)("div",{className:"flex items-center text-xs text-gray-500",children:[(0,s.jsx)("svg",{className:"w-4 h-4 mr-1",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,s.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"})}),(0,s.jsxs)("span",{children:["Updated ",O]})]})]})})]})})}function g(e){let{initialWorktrees:t=[]}=e,[a,l]=(0,r.useState)(t),[n,c]=(0,r.useState)([]),[o,d]=(0,r.useState)(!t.length),[x,m]=(0,r.useState)(null),[p,g]=(0,r.useState)(""),[y,b]=(0,r.useState)("updated"),[f,v]=(0,r.useState)("desc"),[j,N]=(0,r.useState)(null),[w,k]=(0,r.useState)(null),[C,S]=(0,r.useState)(null),[z,P]=(0,r.useState)([]),[E,A]=(0,r.useState)(!1),[L,T]=(0,r.useState)(null),D=(0,r.useCallback)(async()=>{try{let e=await u.J1.getExcluded();e.success&&P(e.repositories)}catch(e){}},[]),R=(0,r.useCallback)(async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];try{e||d(!0),m(null);let t=await u.Iv.getAll();l(t.worktrees),c(t.repositories)}catch(e){m((0,u.zG)(e))}finally{e||d(!1)}},[]),I=e=>!!(e&&"session_status_changed"===e.type),{status:O}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{worktreeIds:t=[],onMessage:a,onStatusChange:s,autoReconnect:l=!0,reconnectDelay:n=3e3}=e,[i,c]=(0,r.useState)("disconnected"),o=(0,r.useRef)(null),d=(0,r.useRef)(),x=(0,r.useRef)(new Set),m=(0,r.useCallback)(e=>{c(e),null==s||s(e)},[s]),p=(0,r.useCallback)(()=>{var e;if((null===(e=o.current)||void 0===e?void 0:e.readyState)===WebSocket.OPEN)return;m("connecting");let t="https:"===window.location.protocol?"wss:":"ws:",s=new WebSocket("".concat(t,"//").concat(window.location.host));s.onopen=()=>{m("connected"),x.current.forEach(e=>{s.send(JSON.stringify({type:"subscribe",worktreeId:e}))})},s.onmessage=e=>{try{let t=JSON.parse(e.data);null==a||a(t)}catch(e){console.error("Failed to parse WebSocket message:",e)}},s.onerror=()=>{m("error")},s.onclose=()=>{m("disconnected"),o.current=null,l&&(d.current=setTimeout(()=>{p()},n))},o.current=s},[m,a,l,n]),u=(0,r.useCallback)(()=>{d.current&&clearTimeout(d.current),o.current&&(o.current.close(1e3,"Client disconnect"),o.current=null),m("disconnected")},[m]),h=(0,r.useCallback)(e=>{var t;(null===(t=o.current)||void 0===t?void 0:t.readyState)===WebSocket.OPEN&&(o.current.send(JSON.stringify({type:"subscribe",worktreeId:e})),x.current.add(e))},[]),g=(0,r.useCallback)(e=>{var t;(null===(t=o.current)||void 0===t?void 0:t.readyState)===WebSocket.OPEN&&(o.current.send(JSON.stringify({type:"unsubscribe",worktreeId:e})),x.current.delete(e))},[]),y=(0,r.useCallback)(e=>{var t;(null===(t=o.current)||void 0===t?void 0:t.readyState)===WebSocket.OPEN&&o.current.send(JSON.stringify(e))},[]);return(0,r.useEffect)(()=>(p(),()=>{u()}),[]),(0,r.useEffect)(()=>{"connected"===i&&t.length>0&&t.forEach(e=>{h(e)})},[i,t]),{status:i,subscribe:h,unsubscribe:g,sendMessage:y,connect:p,disconnect:u}}({onMessage:(0,r.useCallback)(e=>{if(I(e.data)){let t=e.data;l(e=>e.map(e=>e.id===t.worktreeId?{...e,isSessionRunning:t.isRunning}:e))}"broadcast"===e.type&&R(!0)},[R])});(0,r.useEffect)(()=>{t.length||R(),D()},[t.length,R,D]),(0,r.useEffect)(()=>{let e=setInterval(()=>{R(!0)},5e3);return()=>clearInterval(e)},[R]),(0,r.useEffect)(()=>{let e=()=>{"visible"===document.visibilityState&&R(!0)};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[R]);let M=(0,r.useMemo)(()=>{let e=[...a];if(j&&(e=e.filter(e=>e.repositoryPath===j)),null!==w&&(e="unset"===w?e.filter(e=>!e.status):e.filter(e=>e.status===w)),p){let t=p.toLowerCase();e=e.filter(e=>{var a,s;return e.name.toLowerCase().includes(t)||e.path.toLowerCase().includes(t)||e.repositoryName.toLowerCase().includes(t)||(null===(a=e.lastMessageSummary)||void 0===a?void 0:a.toLowerCase().includes(t))||(null===(s=e.description)||void 0===s?void 0:s.toLowerCase().includes(t))})}return e.sort((e,t)=>{let a=0;switch(y){case"name":a=e.name.localeCompare(t.name);break;case"updated":a=(e.updatedAt?new Date(e.updatedAt).getTime():0)-(t.updatedAt?new Date(t.updatedAt).getTime():0);break;case"favorite":a=(e.favorite?1:0)-(t.favorite?1:0)}return"asc"===f?a:-a}),e},[a,j,w,p,y,f]),F=(0,r.useMemo)(()=>{let e=new Map;for(let t of M){let a=t.repositoryPath||"unknown";e.has(a)||e.set(a,[]),e.get(a).push(t)}return e},[M]),U=e=>{y===e?v(e=>"asc"===e?"desc":"asc"):(b(e),v("asc"))},_=async e=>{T(e);try{let t=await u.J1.restore(e);t.warning&&m(t.warning),await R(),await D()}catch(e){m((0,u.zG)(e))}finally{T(null)}},W=async(e,t)=>{var a;let s=(null===(a=n.find(t=>t.path===e))||void 0===a?void 0:a.worktreeCount)||0;if("delete"===prompt('Delete repository "'.concat(t,'"?\n\nThis will delete:\n- ').concat(s,' worktree(s)\n- Related chat history\n- Related memos\n\n* Log files will be preserved\n\nThis repository will be added to the exclusion list.\nIt will NOT be re-registered when you run "Sync All".\nYou can restore it from the excluded repositories list.\n\nType "delete" to confirm:'))){S(e);try{await u.J1.delete(e),j===e&&N(null),await R(),await D()}catch(e){m((0,u.zG)(e))}finally{S(null)}}};return(0,s.jsxs)("div",{className:"space-y-6",children:[(0,s.jsxs)("div",{className:"flex flex-col sm:flex-row gap-4 items-start sm:items-center justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,s.jsxs)(i.Ct,{variant:"gray",children:[a.length," branches"]}),n.length>0&&(0,s.jsxs)(i.Ct,{variant:"info",children:[n.length," ",1===n.length?"repository":"repositories"]}),"connected"===O&&(0,s.jsx)(i.Ct,{variant:"success",dot:!0,children:"Live"})]}),(0,s.jsx)("div",{className:"flex gap-2 w-full sm:w-auto",children:(0,s.jsx)(i.zx,{variant:"secondary",size:"sm",onClick:()=>R(),disabled:o,children:o?"Loading...":"Refresh"})})]}),(0,s.jsx)("div",{className:"flex flex-col sm:flex-row gap-3",children:(0,s.jsx)("input",{type:"text",placeholder:"Search worktrees...",value:p,onChange:e=>g(e.target.value),className:"input flex-1"})}),n.length>0&&(0,s.jsxs)("div",{className:"flex gap-2 flex-wrap items-center",children:[(0,s.jsxs)(i.zx,{variant:null===j?"primary":"ghost",size:"sm",onClick:()=>N(null),children:["All (",a.length,")"]}),n.map(e=>(0,s.jsxs)("div",{className:"relative group inline-flex items-center",children:[(0,s.jsxs)(i.zx,{variant:j===e.path?"primary":"ghost",size:"sm",onClick:()=>N(e.path),className:"pr-6",children:[e.name," (",e.worktreeCount,")"]}),(0,s.jsx)("button",{className:"absolute right-1 opacity-0 group-hover:opacity-100 text-gray-400 hover:text-red-500 transition-opacity px-1",onClick:t=>{t.stopPropagation(),W(e.path,e.name)},disabled:C===e.path,title:"Delete repository",children:C===e.path?"...":"x"})]},e.path))]}),(0,s.jsxs)("div",{className:"flex gap-2 flex-wrap items-center",children:[(0,s.jsx)(i.zx,{variant:null===w?"primary":"ghost",size:"sm",onClick:()=>k(null),children:"All"}),(0,s.jsx)(i.zx,{variant:"todo"===w?"primary":"ghost",size:"sm",onClick:()=>k("todo"),children:"\uD83D\uDCDD ToDo"}),(0,s.jsx)(i.zx,{variant:"doing"===w?"primary":"ghost",size:"sm",onClick:()=>k("doing"),children:"\uD83D\uDEA7 Doing"}),(0,s.jsx)(i.zx,{variant:"done"===w?"primary":"ghost",size:"sm",onClick:()=>k("done"),children:"✅ Done"}),(0,s.jsx)(i.zx,{variant:"unset"===w?"primary":"ghost",size:"sm",onClick:()=>k("unset"),children:"Not set"})]}),(0,s.jsxs)("div",{className:"flex gap-2 flex-wrap",children:[(0,s.jsx)("span",{className:"text-sm text-gray-600 self-center",children:"Sort by:"}),(0,s.jsxs)(i.zx,{variant:"favorite"===y?"primary":"ghost",size:"sm",onClick:()=>U("favorite"),children:["⭐ Favorite ","favorite"===y&&("asc"===f?"↑":"↓")]}),(0,s.jsxs)(i.zx,{variant:"name"===y?"primary":"ghost",size:"sm",onClick:()=>U("name"),children:["Name ","name"===y&&("asc"===f?"↑":"↓")]}),(0,s.jsxs)(i.zx,{variant:"updated"===y?"primary":"ghost",size:"sm",onClick:()=>U("updated"),children:["Updated ","updated"===y&&("asc"===f?"↑":"↓")]})]}),x&&(0,s.jsx)("div",{className:"p-4 bg-red-50 border border-red-200 rounded-lg",children:(0,s.jsx)("p",{className:"text-sm text-red-800",children:x})}),o&&!a.length&&(0,s.jsxs)("div",{className:"text-center py-12",children:[(0,s.jsx)("div",{className:"inline-block animate-spin rounded-full h-8 w-8 border-4 border-gray-300 border-t-blue-600"}),(0,s.jsx)("p",{className:"mt-4 text-gray-600",children:"Loading worktrees..."})]}),!o&&!x&&0===M.length&&(0,s.jsxs)("div",{className:"text-center py-12",children:[(0,s.jsx)("svg",{className:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,s.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"})}),(0,s.jsx)("p",{className:"mt-4 text-gray-600",children:p?"No worktrees found matching your search":"No worktrees found"})]}),!o&&M.length>0&&(0,s.jsx)("div",{className:"space-y-8",children:Array.from(F.entries()).map(e=>{let[t,a]=e,r=n.find(e=>e.path===t),l=(null==r?void 0:r.name)||"Unknown Repository";return(0,s.jsxs)("div",{className:"space-y-4",children:[(n.length>1||!j)&&(0,s.jsxs)("div",{className:"flex items-center gap-3 pb-2 border-b border-gray-200",children:[(0,s.jsx)("h3",{className:"text-xl font-semibold text-gray-900",children:l}),(0,s.jsx)(i.Ct,{variant:"gray",children:a.length})]}),(0,s.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:a.map(e=>(0,s.jsx)(h,{worktree:e,onSessionKilled:R,onStatusChanged:R},e.id))})]},t)})}),z.length>0&&(0,s.jsxs)("div",{className:"border border-gray-200 rounded-lg",children:[(0,s.jsxs)("button",{className:"w-full flex items-center justify-between p-4 text-left hover:bg-gray-50 transition-colors",onClick:()=>A(!E),children:[(0,s.jsxs)("span",{className:"text-sm font-medium text-gray-700",children:["Excluded Repositories (",z.length,")"]}),(0,s.jsx)("span",{className:"text-gray-400 text-sm",children:E?"Hide":"Show"})]}),E&&(0,s.jsx)("div",{className:"border-t border-gray-200 divide-y divide-gray-100",children:z.map(e=>(0,s.jsxs)("div",{className:"flex items-center justify-between p-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"text-sm font-medium text-gray-700",children:e.name}),(0,s.jsx)("span",{className:"text-xs text-gray-500 ml-2",children:e.path})]}),(0,s.jsx)(i.zx,{variant:"secondary",size:"sm",onClick:()=>_(e.path),disabled:L===e.path,children:L===e.path?"Restoring...":"Restore"})]},e.id))})]})]})}a(99376),a(34343),a(6940),a(43616);class y{static getInstance(){return y.instance||(y.instance=new y),y.instance}normalize(e){let t=e.match(/^ssh:\/\/git@([^:\/]+)(:\d+)?\/(.+?)(\.git)?$/);if(t)return"https://".concat(t[1],"/").concat(t[3]).toLowerCase().replace(/\/$/,"");let a=e.match(/^git@([^:]+):(.+?)(\.git)?$/);return a?"https://".concat(a[1],"/").concat(a[2]).toLowerCase().replace(/\/$/,""):e.replace(/\.git\/?$/,"").replace(/\/$/,"").toLowerCase()}isSameRepository(e,t){return this.normalize(e)===this.normalize(t)}extractRepoName(e){let t=e.match(/^ssh:\/\/git@[^\/]+\/(.+?)(\.git)?$/);if(t){let e=t[1].split("/");return e[e.length-1]}let a=e.match(/:(.+?)(\.git)?$/);if(a&&e.startsWith("git@")){let e=a[1].split("/");return e[e.length-1]}let s=e.match(/\/([^\/]+?)(\.git)?$/);return s?s[1]:""}getUrlType(e){return e.startsWith("https://")?"https":e.startsWith("git@")||e.startsWith("ssh://")?"ssh":null}validate(e){if(!e||"string"!=typeof e||""===e.trim())return{valid:!1,error:"EMPTY_URL"};let t=e.trim();return t.startsWith("https://")?/^https:\/\/[^\/]+\/[^\/]+\/[^\/]+(\.git)?$/.test(t)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}:t.startsWith("git@")?/^git@[^:]+:.+\/.+(\.git)?$/.test(t)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}:t.startsWith("ssh://")&&/^ssh:\/\/git@[^\/]+(:\d+)?\/[^\/]+\/.+(\.git)?$/.test(t)?{valid:!0}:{valid:!1,error:"INVALID_URL_FORMAT"}}constructor(){}}function b(e){let{onRepositoryAdded:t}=e,[a,l]=(0,r.useState)(!1),[n,c]=(0,r.useState)("local"),[o,d]=(0,r.useState)(""),[x,m]=(0,r.useState)(""),[p,h]=(0,r.useState)(!1),[g,b]=(0,r.useState)(!1),[f,v]=(0,r.useState)(!1),[j,N]=(0,r.useState)(null),[w,k]=(0,r.useState)(null),[C,S]=(0,r.useState)(null),z=y.getInstance(),P=(0,r.useCallback)(async e=>{try{let s=await u.J1.getCloneStatus(e);if("completed"===s.status)S("Repository cloned successfully"),v(!1),N(null),m(""),l(!1),t&&t();else if("failed"===s.status){var a;k((null===(a=s.error)||void 0===a?void 0:a.message)||"Clone failed"),v(!1),N(null)}else("running"===s.status||"pending"===s.status)&&setTimeout(()=>P(e),2e3)}catch(e){k((0,u.zG)(e)),v(!1),N(null)}},[t]);(0,r.useEffect)(()=>{j&&f&&P(j)},[j,f,P]);let E=async e=>{if(e.preventDefault(),!o.trim()){k("Repository path is required");return}k(null),S(null),h(!0);try{let e=await u.J1.scan(o);S(e.message),d(""),l(!1),t&&t()}catch(e){k((0,u.zG)(e))}finally{h(!1)}},A=async e=>{if(e.preventDefault(),!x.trim()){k("Clone URL is required");return}let t=z.validate(x.trim());if(!t.valid){"EMPTY_URL"===t.error?k("Clone URL is required"):k("Invalid URL format");return}k(null),S(null),v(!0);try{let e=await u.J1.clone(x.trim());N(e.jobId)}catch(e){k((0,u.zG)(e)),v(!1)}},L=async()=>{k(null),S(null),b(!0);try{let e=await u.J1.sync();S(e.message),t&&t()}catch(e){k((0,u.zG)(e))}finally{b(!1)}},T=()=>{l(!1),d(""),m(""),k(null),c("local")};return(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"flex gap-2 flex-wrap",children:[!a&&(0,s.jsx)(i.zx,{variant:"primary",size:"sm",onClick:()=>l(!0),children:"+ Add Repository"}),(0,s.jsx)(i.zx,{variant:"secondary",size:"sm",onClick:L,disabled:g,children:g?"Syncing...":"Sync All"})]}),a&&(0,s.jsx)(i.Zb,{padding:"lg",children:(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsx)("div",{children:(0,s.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Add New Repository"})}),(0,s.jsxs)("div",{className:"flex border-b border-gray-200",role:"tablist",children:[(0,s.jsx)("button",{role:"tab","aria-selected":"local"===n,onClick:()=>c("local"),className:"px-4 py-2 text-sm font-medium border-b-2 -mb-px transition-colors ".concat("local"===n?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"),children:"Local Path"}),(0,s.jsx)("button",{role:"tab","aria-selected":"url"===n,onClick:()=>c("url"),className:"px-4 py-2 text-sm font-medium border-b-2 -mb-px transition-colors ".concat("url"===n?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:text-gray-700"),children:"Clone URL"})]}),"local"===n&&(0,s.jsxs)("form",{onSubmit:E,className:"space-y-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm text-gray-600 mb-4",children:"Enter the absolute path to a git repository containing worktrees."}),(0,s.jsx)("label",{htmlFor:"repositoryPath",className:"block text-sm font-medium text-gray-700 mb-2",children:"Repository Path"}),(0,s.jsx)("input",{id:"repositoryPath",type:"text",value:o,onChange:e=>d(e.target.value),placeholder:"/absolute/path/to/repository",className:"input w-full font-mono text-sm",disabled:p}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-1",children:"Example: /Users/username/projects/my-repo"})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(i.zx,{type:"submit",variant:"primary",disabled:p||!o.trim(),children:p?"Scanning...":"Scan & Add"}),(0,s.jsx)(i.zx,{type:"button",variant:"ghost",onClick:T,disabled:p,children:"Cancel"})]})]}),"url"===n&&(0,s.jsxs)("form",{onSubmit:A,className:"space-y-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-sm text-gray-600 mb-4",children:"Enter a git clone URL to clone a remote repository."}),(0,s.jsx)("label",{htmlFor:"cloneUrl",className:"block text-sm font-medium text-gray-700 mb-2",children:"Clone URL"}),(0,s.jsx)("input",{id:"cloneUrl",type:"text",value:x,onChange:e=>m(e.target.value),placeholder:"https://github.com/user/repo.git",className:"input w-full font-mono text-sm",disabled:f}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-1",children:"Supports HTTPS and SSH URLs"})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(i.zx,{type:"submit",variant:"primary",disabled:f||!x.trim(),children:f?"Cloning...":"Clone"}),(0,s.jsx)(i.zx,{type:"button",variant:"ghost",onClick:T,disabled:f,children:"Cancel"})]})]})]})}),C&&(0,s.jsx)("div",{className:"p-4 bg-green-50 border border-green-200 rounded-lg",children:(0,s.jsx)("p",{className:"text-sm text-green-800",children:C})}),w&&(0,s.jsx)("div",{className:"p-4 bg-red-50 border border-red-200 rounded-lg",children:(0,s.jsx)("p",{className:"text-sm text-red-800",children:w})})]})}function f(e){var t;let{appId:a,pollInterval:l=3e4,showResponseTime:n=!1,compact:i=!1}=e,[c,o]=(0,r.useState)(null),[d,x]=(0,r.useState)(!0),m=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/external-apps/".concat(a,"/health"));if(e.ok){let t=await e.json();o(t)}else o({id:a,healthy:!1,lastChecked:Date.now(),error:"Failed to check health"})}catch(e){o({id:a,healthy:!1,lastChecked:Date.now(),error:"Network error"})}finally{x(!1)}},[a]);if((0,r.useEffect)(()=>{m();let e=setInterval(m,l);return()=>clearInterval(e)},[m,l]),d)return(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("span",{className:"inline-block h-2.5 w-2.5 rounded-full bg-gray-300 animate-pulse"}),!i&&(0,s.jsx)("span",{className:"text-xs text-gray-400",children:"Checking..."})]});let p=null!==(t=null==c?void 0:c.healthy)&&void 0!==t&&t,u=p?"bg-green-500":"bg-gray-400",h=p?"Running":"Stopped";return i?(0,s.jsx)("span",{className:"inline-block h-2.5 w-2.5 rounded-full ".concat(u),title:h}):(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("span",{className:"inline-block h-2.5 w-2.5 rounded-full ".concat(u)}),(0,s.jsx)("span",{className:"text-xs ".concat(p?"text-green-600":"text-gray-500"),children:h}),n&&(null==c?void 0:c.responseTime)!==void 0&&(0,s.jsxs)("span",{className:"text-xs text-gray-400",children:["(",c.responseTime,"ms)"]})]})}function v(e){var t;let{app:a,onEdit:l,onDelete:n}=e,[c,o]=(0,r.useState)(!1),[d,x]=(0,r.useState)(!1),m=async()=>{x(!0);try{await n(a.id)}finally{x(!1),o(!1)}},p="/proxy/".concat(a.pathPrefix,"/");return(0,s.jsxs)(i.Zb,{padding:"md",className:"relative",children:[(0,s.jsxs)("div",{className:"flex items-start justify-between mb-3",children:[(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("h4",{className:"text-base font-semibold text-gray-900 truncate",children:a.displayName}),(0,s.jsx)("p",{className:"text-xs text-gray-500 mt-0.5 font-mono truncate",children:a.name})]}),(0,s.jsx)(i.Ct,{variant:{sveltekit:"warning",streamlit:"error",nextjs:"info",other:"gray"}[a.appType]||"gray",children:{sveltekit:"SvelteKit",streamlit:"Streamlit",nextjs:"Next.js",other:"Other"}[t=a.appType]||t})]}),(0,s.jsxs)("div",{className:"space-y-2 mb-4",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("span",{className:"text-sm text-gray-600",children:"Status"}),(0,s.jsx)(f,{appId:a.id,pollInterval:3e4})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("span",{className:"text-sm text-gray-600",children:"Port"}),(0,s.jsxs)("span",{className:"text-sm font-mono text-gray-900",children:[":",a.targetPort]})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("span",{className:"text-sm text-gray-600",children:"Path"}),(0,s.jsxs)("span",{className:"text-sm font-mono text-gray-900 truncate max-w-[150px]",children:["/proxy/",a.pathPrefix,"/"]})]}),a.websocketEnabled&&(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("span",{className:"text-sm text-gray-600",children:"WebSocket"}),(0,s.jsx)(i.Ct,{variant:"info",children:"Enabled"})]}),!a.enabled&&(0,s.jsx)("div",{className:"mt-2 py-1 px-2 bg-yellow-50 border border-yellow-200 rounded text-xs text-yellow-700",children:"This app is disabled"})]}),c?(0,s.jsxs)("div",{className:"space-y-2",children:[(0,s.jsxs)("p",{className:"text-sm text-gray-600",children:['Delete "',a.displayName,'"?']}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(i.zx,{variant:"danger",size:"sm",onClick:m,disabled:d,loading:d,children:"Delete"}),(0,s.jsx)(i.zx,{variant:"ghost",size:"sm",onClick:()=>o(!1),disabled:d,children:"Cancel"})]})]}):(0,s.jsxs)("div",{className:"flex gap-2 flex-wrap",children:[(0,s.jsx)(i.zx,{variant:"primary",size:"sm",onClick:()=>window.open(p,"_blank"),disabled:!a.enabled,children:"Open"}),(0,s.jsx)(i.zx,{variant:"secondary",size:"sm",onClick:()=>l(a),children:"Settings"}),(0,s.jsx)(i.zx,{variant:"ghost",size:"sm",onClick:()=>o(!0),className:"text-red-600 hover:bg-red-50",children:"Delete"})]})]})}let j={MIN:1024,MAX:65535},N=/^[a-zA-Z0-9-]+$/,w={sveltekit:"SvelteKit",streamlit:"Streamlit",nextjs:"Next.js",other:"Other"},k=["sveltekit","streamlit","nextjs","other"].map(e=>({value:e,label:w[e]}));function C(e){let{isOpen:t,onClose:a,editApp:l,onSave:n}=e,c=!!l,[o,d]=(0,r.useState)(""),[x,m]=(0,r.useState)(""),[p,u]=(0,r.useState)(""),[h,g]=(0,r.useState)(""),[y,b]=(0,r.useState)(""),[f,v]=(0,r.useState)(!1),[w,C]=(0,r.useState)(""),[S,z]=(0,r.useState)(!0),[P,E]=(0,r.useState)({}),[A,L]=(0,r.useState)(!1),[T,D]=(0,r.useState)(null);(0,r.useEffect)(()=>{t&&(l?(d(l.displayName),m(l.name),u(l.pathPrefix),g(l.targetPort),b(l.appType),v(l.websocketEnabled),C(l.description||""),z(l.enabled)):(d(""),m(""),u(""),g(""),b(""),v(!1),C(""),z(!0)),E({}),D(null))},[t,l]);let R=async e=>{e.preventDefault(),D(null);let t=function(e,t){var a,s,r,l;let n={};return((null===(a=e.displayName)||void 0===a?void 0:a.trim())||(n.displayName="Display name is required"),t||((null===(s=e.name)||void 0===s?void 0:s.trim())?N.test(e.name)||(n.name="Only alphanumeric characters and hyphens are allowed"):n.name="Identifier name is required",(null===(r=e.pathPrefix)||void 0===r?void 0:r.trim())?N.test(e.pathPrefix)||(n.pathPrefix="Only alphanumeric characters and hyphens are allowed"):n.pathPrefix="Path prefix is required"),e.targetPort)?"number"!=typeof e.targetPort||Number.isInteger(l=e.targetPort)&&l>=j.MIN&&l<=j.MAX||(n.targetPort="Port must be between ".concat(j.MIN," and ").concat(j.MAX)):n.targetPort="Port number is required",t||e.appType||(n.appType="App type is required"),n}({displayName:o,name:x,pathPrefix:p,targetPort:h,appType:y},c);if(Object.keys(t).length>0){E(t);return}E({}),L(!0);try{if(c&&l){let e=await fetch("/api/external-apps/".concat(l.id),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({displayName:o,description:w||void 0,targetPort:h||void 0,websocketEnabled:f,enabled:S})});if(!e.ok){let t=await e.json();throw Error(t.error||"Failed to update app")}}else{let e=await fetch("/api/external-apps",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({displayName:o,name:x,pathPrefix:p,targetPort:h,appType:y,websocketEnabled:f,description:w||void 0})});if(!e.ok){let t=await e.json();throw Error(t.error||"Failed to create app")}}n(),a()}catch(e){D(e instanceof Error?e.message:"An error occurred")}finally{L(!1)}};return(0,s.jsx)(i.u_,{isOpen:t,onClose:a,title:c?"Edit External App":"Add External App",size:"md",children:(0,s.jsxs)("form",{onSubmit:R,className:"space-y-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsxs)("label",{htmlFor:"displayName",className:"block text-sm font-medium text-gray-700 mb-1",children:["Display Name ",(0,s.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,s.jsx)("input",{id:"displayName",type:"text",value:o,onChange:e=>d(e.target.value),className:"input w-full ".concat(P.displayName?"border-red-500":""),placeholder:"My App",disabled:A}),P.displayName&&(0,s.jsx)("p",{className:"mt-1 text-xs text-red-500",children:P.displayName})]}),!c&&(0,s.jsxs)("div",{children:[(0,s.jsxs)("label",{htmlFor:"name",className:"block text-sm font-medium text-gray-700 mb-1",children:["Identifier Name ",(0,s.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,s.jsx)("input",{id:"name",type:"text",value:x,onChange:e=>m(e.target.value),className:"input w-full font-mono ".concat(P.name?"border-red-500":""),placeholder:"my-app",disabled:A}),(0,s.jsx)("p",{className:"mt-1 text-xs text-gray-500",children:"Alphanumeric and hyphens only. Cannot be changed later."}),P.name&&(0,s.jsx)("p",{className:"mt-1 text-xs text-red-500",children:P.name})]}),!c&&(0,s.jsxs)("div",{children:[(0,s.jsxs)("label",{htmlFor:"pathPrefix",className:"block text-sm font-medium text-gray-700 mb-1",children:["Path Prefix ",(0,s.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,s.jsxs)("div",{className:"flex items-center",children:[(0,s.jsx)("span",{className:"text-sm text-gray-500 mr-1",children:"/proxy/"}),(0,s.jsx)("input",{id:"pathPrefix",type:"text",value:p,onChange:e=>u(e.target.value),className:"input flex-1 font-mono ".concat(P.pathPrefix?"border-red-500":""),placeholder:"app-name",disabled:A}),(0,s.jsx)("span",{className:"text-sm text-gray-500 ml-1",children:"/"})]}),(0,s.jsx)("p",{className:"mt-1 text-xs text-gray-500",children:"URL path for accessing this app. Cannot be changed later."}),P.pathPrefix&&(0,s.jsx)("p",{className:"mt-1 text-xs text-red-500",children:P.pathPrefix})]}),(0,s.jsxs)("div",{children:[(0,s.jsxs)("label",{htmlFor:"targetPort",className:"block text-sm font-medium text-gray-700 mb-1",children:["Port Number ",(0,s.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,s.jsx)("input",{id:"targetPort",type:"number",value:h,onChange:e=>g(e.target.value?parseInt(e.target.value,10):""),className:"input w-full font-mono ".concat(P.targetPort?"border-red-500":""),placeholder:"5173",min:j.MIN,max:j.MAX,disabled:A}),(0,s.jsxs)("p",{className:"mt-1 text-xs text-gray-500",children:["Target port (",j.MIN,"-",j.MAX,")"]}),P.targetPort&&(0,s.jsx)("p",{className:"mt-1 text-xs text-red-500",children:P.targetPort})]}),!c&&(0,s.jsxs)("div",{children:[(0,s.jsxs)("label",{htmlFor:"appType",className:"block text-sm font-medium text-gray-700 mb-1",children:["App Type ",(0,s.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,s.jsxs)("select",{id:"appType",value:y,onChange:e=>b(e.target.value),className:"input w-full ".concat(P.appType?"border-red-500":""),disabled:A,children:[(0,s.jsx)("option",{value:"",children:"Select app type..."}),k.map(e=>(0,s.jsx)("option",{value:e.value,children:e.label},e.value))]}),P.appType&&(0,s.jsx)("p",{className:"mt-1 text-xs text-red-500",children:P.appType})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{htmlFor:"description",className:"block text-sm font-medium text-gray-700 mb-1",children:"Description"}),(0,s.jsx)("textarea",{id:"description",value:w,onChange:e=>C(e.target.value),className:"input w-full",placeholder:"Optional description...",rows:2,disabled:A})]}),(0,s.jsxs)("div",{className:"flex items-center",children:[(0,s.jsx)("input",{id:"websocketEnabled",type:"checkbox",checked:f,onChange:e=>v(e.target.checked),className:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",disabled:A}),(0,s.jsx)("label",{htmlFor:"websocketEnabled",className:"ml-2 text-sm text-gray-700",children:"Enable WebSocket support"})]}),c&&(0,s.jsxs)("div",{className:"flex items-center",children:[(0,s.jsx)("input",{id:"enabled",type:"checkbox",checked:S,onChange:e=>z(e.target.checked),className:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",disabled:A}),(0,s.jsx)("label",{htmlFor:"enabled",className:"ml-2 text-sm text-gray-700",children:"App is enabled"})]}),T&&(0,s.jsx)("div",{className:"p-3 bg-red-50 border border-red-200 rounded text-sm text-red-700",children:T}),(0,s.jsxs)("div",{className:"flex justify-end gap-2 pt-4 border-t border-gray-200",children:[(0,s.jsx)(i.zx,{type:"button",variant:"ghost",onClick:a,disabled:A,children:"Cancel"}),(0,s.jsx)(i.zx,{type:"submit",variant:"primary",loading:A,children:c?"Save Changes":"Add App"})]})]})})}function S(){let[e,t]=(0,r.useState)([]),[a,l]=(0,r.useState)(!0),[n,c]=(0,r.useState)(null),[o,d]=(0,r.useState)(!1),[x,m]=(0,r.useState)(null),p=(0,r.useCallback)(async()=>{try{c(null);let e=await fetch("/api/external-apps");if(!e.ok)throw Error("Failed to fetch external apps");let a=await e.json();t(a.apps||[])}catch(e){c(e instanceof Error?e.message:"An error occurred")}finally{l(!1)}},[]);(0,r.useEffect)(()=>{p();let e=setInterval(p,6e4);return()=>clearInterval(e)},[p]);let u=(0,r.useCallback)(e=>{m(e),d(!0)},[]),h=(0,r.useCallback)(()=>{m(null),d(!0)},[]),g=(0,r.useCallback)(async e=>{try{let t=await fetch("/api/external-apps/".concat(e),{method:"DELETE"});if(!t.ok){let e=await t.json();throw Error(e.error||"Failed to delete app")}p()}catch(e){console.error("Failed to delete app:",e)}},[p]),y=(0,r.useCallback)(()=>{p()},[p]),b=(0,r.useCallback)(()=>{d(!1),m(null)},[]);return(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("h2",{className:"text-xl font-semibold text-gray-900",children:"External Apps"}),(0,s.jsx)(i.zx,{variant:"primary",size:"sm",onClick:h,children:"+ Add App"})]}),a?(0,s.jsx)(i.Zb,{padding:"lg",children:(0,s.jsxs)("div",{className:"flex items-center justify-center py-8",children:[(0,s.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600"}),(0,s.jsx)("span",{className:"ml-3 text-gray-600",children:"Loading apps..."})]})}):n?(0,s.jsx)(i.Zb,{padding:"lg",children:(0,s.jsxs)("div",{className:"text-center py-8",children:[(0,s.jsx)("p",{className:"text-red-600 mb-4",children:"Failed to load external apps"}),(0,s.jsx)(i.zx,{variant:"secondary",size:"sm",onClick:p,children:"Retry"})]})}):0===e.length?(0,s.jsx)(i.Zb,{padding:"lg",children:(0,s.jsxs)("div",{className:"text-center py-8",children:[(0,s.jsx)("p",{className:"text-gray-500 mb-4",children:"No external apps registered yet."}),(0,s.jsx)("p",{className:"text-sm text-gray-400 mb-4",children:"Add an external app to proxy requests to other frontend applications."}),(0,s.jsx)(i.zx,{variant:"primary",size:"sm",onClick:h,children:"Add Your First App"})]})}):(0,s.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:e.map(e=>(0,s.jsx)(v,{app:e,onEdit:u,onDelete:g},e.id))}),(0,s.jsx)(C,{isOpen:o,onClose:b,editApp:x,onSave:y})]})}function z(){let[e,t]=(0,r.useState)(0),a=(0,r.useCallback)(()=>{t(e=>e+1)},[]);return(0,s.jsx)(l.Vw,{children:(0,s.jsxs)("div",{className:"container-custom py-8 overflow-auto h-full",children:[(0,s.jsxs)("div",{className:"mb-8",children:[(0,s.jsx)("h1",{className:"mb-2",children:"CommandMate"}),(0,s.jsx)("p",{className:"text-lg text-gray-600",children:"Git worktree management with Claude CLI and tmux sessions"})]}),(0,s.jsx)("div",{className:"mb-8",children:(0,s.jsx)(b,{onRepositoryAdded:a})}),(0,s.jsx)(g,{},e),(0,s.jsx)("div",{className:"mt-8",children:(0,s.jsx)(S,{})})]})})}}},function(e){e.O(0,[9234,216,8216,2330,816,4733,2971,2117,1744],function(){return e(e.s=14564)}),_N_E=e.O()}]);