commandmate 0.1.5 → 0.1.7

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 (341) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-build-manifest.json +72 -0
  3. package/.next/app-path-routes-manifest.json +1 -0
  4. package/.next/build-manifest.json +32 -0
  5. package/.next/cache/.tsbuildinfo +1 -0
  6. package/.next/cache/config.json +7 -0
  7. package/.next/cache/webpack/client-production/0.pack +0 -0
  8. package/.next/cache/webpack/client-production/1.pack +0 -0
  9. package/.next/cache/webpack/client-production/2.pack +0 -0
  10. package/.next/cache/webpack/client-production/index.pack +0 -0
  11. package/.next/cache/webpack/client-production/index.pack.old +0 -0
  12. package/.next/cache/webpack/edge-server-production/0.pack +0 -0
  13. package/.next/cache/webpack/edge-server-production/index.pack +0 -0
  14. package/.next/cache/webpack/server-production/0.pack +0 -0
  15. package/.next/cache/webpack/server-production/index.pack +0 -0
  16. package/.next/export-marker.json +1 -0
  17. package/.next/images-manifest.json +1 -0
  18. package/.next/next-minimal-server.js.nft.json +1 -0
  19. package/.next/next-server.js.nft.json +1 -0
  20. package/.next/package.json +1 -0
  21. package/.next/prerender-manifest.json +1 -0
  22. package/.next/react-loadable-manifest.json +249 -0
  23. package/.next/required-server-files.json +1 -0
  24. package/.next/routes-manifest.json +1 -0
  25. package/.next/server/app/_not-found/page.js +1 -0
  26. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  27. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  28. package/.next/server/app/_not-found.html +1 -0
  29. package/.next/server/app/_not-found.meta +6 -0
  30. package/.next/server/app/_not-found.rsc +10 -0
  31. package/.next/server/app/api/external-apps/[id]/health/route.js +45 -0
  32. package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -0
  33. package/.next/server/app/api/external-apps/[id]/route.js +45 -0
  34. package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -0
  35. package/.next/server/app/api/external-apps/route.js +45 -0
  36. package/.next/server/app/api/external-apps/route.js.nft.json +1 -0
  37. package/.next/server/app/api/hooks/claude-done/route.js +19 -0
  38. package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -0
  39. package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -0
  40. package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -0
  41. package/.next/server/app/api/repositories/clone/route.js +1 -0
  42. package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -0
  43. package/.next/server/app/api/repositories/route.js +1 -0
  44. package/.next/server/app/api/repositories/route.js.nft.json +1 -0
  45. package/.next/server/app/api/repositories/scan/route.js +1 -0
  46. package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -0
  47. package/.next/server/app/api/repositories/sync/route.js +1 -0
  48. package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -0
  49. package/.next/server/app/api/slash-commands/route.js +1 -0
  50. package/.next/server/app/api/slash-commands/route.js.nft.json +1 -0
  51. package/.next/server/app/api/slash-commands.body +1 -0
  52. package/.next/server/app/api/slash-commands.meta +1 -0
  53. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -0
  54. package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -0
  55. package/.next/server/app/api/worktrees/[id]/capture/route.js +2 -0
  56. package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -0
  57. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -0
  58. package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -0
  59. package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -0
  60. package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -0
  61. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -0
  62. package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -0
  63. package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -0
  64. package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -0
  65. package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -0
  66. package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -0
  67. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -0
  68. package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -0
  69. package/.next/server/app/api/worktrees/[id]/logs/route.js +19 -0
  70. package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -0
  71. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -0
  72. package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -0
  73. package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -0
  74. package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -0
  75. package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -0
  76. package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -0
  77. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -0
  78. package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -0
  79. package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -0
  80. package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -0
  81. package/.next/server/app/api/worktrees/[id]/route.js +1 -0
  82. package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -0
  83. package/.next/server/app/api/worktrees/[id]/search/route.js +1 -0
  84. package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -0
  85. package/.next/server/app/api/worktrees/[id]/send/route.js +1 -0
  86. package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -0
  87. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -0
  88. package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -0
  89. package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -0
  90. package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -0
  91. package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -0
  92. package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -0
  93. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -0
  94. package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -0
  95. package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -0
  96. package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -0
  97. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -0
  98. package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -0
  99. package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -0
  100. package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -0
  101. package/.next/server/app/api/worktrees/route.js +1 -0
  102. package/.next/server/app/api/worktrees/route.js.nft.json +1 -0
  103. package/.next/server/app/apple-icon.png/route.js +1 -0
  104. package/.next/server/app/apple-icon.png/route.js.nft.json +1 -0
  105. package/.next/server/app/apple-icon.png.body +0 -0
  106. package/.next/server/app/apple-icon.png.meta +1 -0
  107. package/.next/server/app/icon.png/route.js +1 -0
  108. package/.next/server/app/icon.png/route.js.nft.json +1 -0
  109. package/.next/server/app/icon.png.body +0 -0
  110. package/.next/server/app/icon.png.meta +1 -0
  111. package/.next/server/app/index.html +9 -0
  112. package/.next/server/app/index.meta +5 -0
  113. package/.next/server/app/index.rsc +8 -0
  114. package/.next/server/app/page.js +16 -0
  115. package/.next/server/app/page.js.nft.json +1 -0
  116. package/.next/server/app/page_client-reference-manifest.js +1 -0
  117. package/.next/server/app/proxy/[...path]/route.js +45 -0
  118. package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -0
  119. package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -0
  120. package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -0
  121. package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -0
  122. package/.next/server/app/worktrees/[id]/page.js +21 -0
  123. package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -0
  124. package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -0
  125. package/.next/server/app/worktrees/[id]/simple-terminal/page.js +4 -0
  126. package/.next/server/app/worktrees/[id]/simple-terminal/page.js.nft.json +1 -0
  127. package/.next/server/app/worktrees/[id]/simple-terminal/page_client-reference-manifest.js +1 -0
  128. package/.next/server/app/worktrees/[id]/terminal/page.js +6 -0
  129. package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -0
  130. package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -0
  131. package/.next/server/app-paths-manifest.json +46 -0
  132. package/.next/server/chunks/1318.js +29 -0
  133. package/.next/server/chunks/1528.js +1 -0
  134. package/.next/server/chunks/1682.js +6 -0
  135. package/.next/server/chunks/2518.js +12 -0
  136. package/.next/server/chunks/3053.js +1 -0
  137. package/.next/server/chunks/3673.js +1 -0
  138. package/.next/server/chunks/3853.js +1 -0
  139. package/.next/server/chunks/434.js +1 -0
  140. package/.next/server/chunks/4471.js +2 -0
  141. package/.next/server/chunks/4893.js +2 -0
  142. package/.next/server/chunks/5972.js +12 -0
  143. package/.next/server/chunks/6550.js +1 -0
  144. package/.next/server/chunks/6621.js +1 -0
  145. package/.next/server/chunks/7213.js +1 -0
  146. package/.next/server/chunks/7425.js +500 -0
  147. package/.next/server/chunks/8585.js +1 -0
  148. package/.next/server/chunks/8887.js +1 -0
  149. package/.next/server/chunks/8948.js +2 -0
  150. package/.next/server/chunks/9703.js +31 -0
  151. package/.next/server/chunks/9723.js +19 -0
  152. package/.next/server/chunks/font-manifest.json +1 -0
  153. package/.next/server/edge-runtime-webpack.js +2 -0
  154. package/.next/server/edge-runtime-webpack.js.map +1 -0
  155. package/.next/server/font-manifest.json +1 -0
  156. package/.next/server/functions-config-manifest.json +1 -0
  157. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  158. package/.next/server/middleware-build-manifest.js +1 -0
  159. package/.next/server/middleware-manifest.json +32 -0
  160. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  161. package/.next/server/next-font-manifest.js +1 -0
  162. package/.next/server/next-font-manifest.json +1 -0
  163. package/.next/server/pages/404.html +1 -0
  164. package/.next/server/pages/500.html +1 -0
  165. package/.next/server/pages/_app.js +1 -0
  166. package/.next/server/pages/_app.js.nft.json +1 -0
  167. package/.next/server/pages/_document.js +1 -0
  168. package/.next/server/pages/_document.js.nft.json +1 -0
  169. package/.next/server/pages/_error.js +1 -0
  170. package/.next/server/pages/_error.js.nft.json +1 -0
  171. package/.next/server/pages-manifest.json +1 -0
  172. package/.next/server/server-reference-manifest.js +1 -0
  173. package/.next/server/server-reference-manifest.json +1 -0
  174. package/.next/server/src/middleware.js +14 -0
  175. package/.next/server/src/middleware.js.map +1 -0
  176. package/.next/server/webpack-runtime.js +1 -0
  177. package/.next/static/3jNZMmFnQhc5G7met-OU4/_buildManifest.js +1 -0
  178. package/.next/static/3jNZMmFnQhc5G7met-OU4/_ssgManifest.js +1 -0
  179. package/.next/static/chunks/0dbeb660.3e800dfbd28be3bd.js +53 -0
  180. package/.next/static/chunks/1015.0eaa4da7f61149bc.js +59 -0
  181. package/.next/static/chunks/1098.49268c9fe1b028fa.js +1 -0
  182. package/.next/static/chunks/13.feeafc7cc620f8c4.js +1 -0
  183. package/.next/static/chunks/1423.7b1e8bf760d28078.js +1 -0
  184. package/.next/static/chunks/1582.9f8590f71ff798ca.js +55 -0
  185. package/.next/static/chunks/1817.a66d96cedb761daa.js +262 -0
  186. package/.next/static/chunks/2117-d845c2cd62e344a6.js +2 -0
  187. package/.next/static/chunks/2398.0b21e4eb7006a230.js +93 -0
  188. package/.next/static/chunks/2526.8ac62b527c9ab703.js +43 -0
  189. package/.next/static/chunks/2626.2125083a1ff3b80a.js +29 -0
  190. package/.next/static/chunks/2689.720a4874b02d4211.js +174 -0
  191. package/.next/static/chunks/2853-d11a80b03c9a1640.js +1 -0
  192. package/.next/static/chunks/2957-327e43ef4c12808f.js +1 -0
  193. package/.next/static/chunks/2cdb6380.35626fc6e41bbba4.js +136 -0
  194. package/.next/static/chunks/30d07d85-393352a92199f695.js +3 -0
  195. package/.next/static/chunks/3559.f073f72c4466ce0e.js +1 -0
  196. package/.next/static/chunks/3574.7a94c27e6a496a56.js +63 -0
  197. package/.next/static/chunks/383.20683891c9a5f2c4.js +4 -0
  198. package/.next/static/chunks/3843.3fdda732987f7bb8.js +1 -0
  199. package/.next/static/chunks/3852.822389f445c9b427.js +1 -0
  200. package/.next/static/chunks/3991.4bc063cb5be3a86c.js +1 -0
  201. package/.next/static/chunks/4212.52c1bb34fc97d0d0.js +131 -0
  202. package/.next/static/chunks/4327.3b84aa049900fdeb.js +60 -0
  203. package/.next/static/chunks/4362.7bd6f0282e49d79b.js +1 -0
  204. package/.next/static/chunks/4721.40615a5f4f32b5fb.js +1 -0
  205. package/.next/static/chunks/4851-45df4d388db5623f.js +1 -0
  206. package/.next/static/chunks/5112.17318d1c6b28044b.js +1 -0
  207. package/.next/static/chunks/5126.93fa4e797d609286.js +56 -0
  208. package/.next/static/chunks/5387.47590ac4ef66c864.js +5 -0
  209. package/.next/static/chunks/5813.4483664ba482beb1.js +1 -0
  210. package/.next/static/chunks/6143.1450875bd03a2366.js +36 -0
  211. package/.next/static/chunks/6406.9653f0d41ab85059.js +1 -0
  212. package/.next/static/chunks/656.d72f25ce819bd77e.js +149 -0
  213. package/.next/static/chunks/6678.492e73ca42b2a273.js +62 -0
  214. package/.next/static/chunks/6725-f7607851b7d57eb1.js +1 -0
  215. package/.next/static/chunks/6792.3c01ac4dda4b5c6d.js +1 -0
  216. package/.next/static/chunks/7004.808cbf327ef5955e.js +1 -0
  217. package/.next/static/chunks/7290.09ef84cf94f90c4d.js +1 -0
  218. package/.next/static/chunks/7415.6b481c2baf363262.js +148 -0
  219. package/.next/static/chunks/7648-325564a6e12a3257.js +1 -0
  220. package/.next/static/chunks/7665.47fccad04449a8f9.js +215 -0
  221. package/.next/static/chunks/7753.6bdce86b7fde3d10.js +166 -0
  222. package/.next/static/chunks/8125.245a9df052d274fb.js +1 -0
  223. package/.next/static/chunks/816-7e340dad784be28c.js +1 -0
  224. package/.next/static/chunks/8288.4883743fa40672e2.js +24 -0
  225. package/.next/static/chunks/8522.1607e96011c66877.js +1 -0
  226. package/.next/static/chunks/8772.863c564498d88487.js +1 -0
  227. package/.next/static/chunks/8841.dadeb1ece8e46004.js +1 -0
  228. package/.next/static/chunks/8885.f8d9912b40d74811.js +1 -0
  229. package/.next/static/chunks/90542734.c1553d0fe7fc14fc.js +1 -0
  230. package/.next/static/chunks/9365-733d8c05712d2888.js +1 -0
  231. package/.next/static/chunks/9552.b7dfb7903ead934b.js +1 -0
  232. package/.next/static/chunks/9834.295b45635ce04f5e.js +24 -0
  233. package/.next/static/chunks/app/_not-found/page-a9d04e58c81115ec.js +1 -0
  234. package/.next/static/chunks/app/layout-37e55f11dcc8b1bf.js +1 -0
  235. package/.next/static/chunks/app/page-9cd00de9cc0abc43.js +1 -0
  236. package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9e5adf57cbbbdf05.js +1 -0
  237. package/.next/static/chunks/app/worktrees/[id]/page-8c6676303b63fdaf.js +1 -0
  238. package/.next/static/chunks/app/worktrees/[id]/simple-terminal/page-16feb3e86e42f4d1.js +1 -0
  239. package/.next/static/chunks/app/worktrees/[id]/terminal/page-be802baffc84dbd2.js +1 -0
  240. package/.next/static/chunks/d3ac728e.6c9c508274d4d2d5.js +1 -0
  241. package/.next/static/chunks/fd9d1056-bbe86e4ae099d5cd.js +1 -0
  242. package/.next/static/chunks/framework-8e0e0f4a6b83a956.js +1 -0
  243. package/.next/static/chunks/main-a960f4a5e1a2f598.js +1 -0
  244. package/.next/static/chunks/main-app-420d93e43682fee5.js +1 -0
  245. package/.next/static/chunks/pages/_app-3c9ca398d360b709.js +1 -0
  246. package/.next/static/chunks/pages/_error-cf5ca766ac8f493f.js +1 -0
  247. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  248. package/.next/static/chunks/webpack-3fc79fab9bb738d7.js +1 -0
  249. package/.next/static/css/5eacd01f773eed7f.css +11 -0
  250. package/.next/static/css/85fa6dafca566008.css +1 -0
  251. package/.next/static/css/e174aa24f94ce607.css +3 -0
  252. package/.next/trace +5 -0
  253. package/.next/types/app/api/external-apps/[id]/health/route.ts +343 -0
  254. package/.next/types/app/api/external-apps/[id]/route.ts +343 -0
  255. package/.next/types/app/api/external-apps/route.ts +343 -0
  256. package/.next/types/app/api/hooks/claude-done/route.ts +343 -0
  257. package/.next/types/app/api/repositories/clone/[jobId]/route.ts +343 -0
  258. package/.next/types/app/api/repositories/clone/route.ts +343 -0
  259. package/.next/types/app/api/repositories/route.ts +343 -0
  260. package/.next/types/app/api/repositories/scan/route.ts +343 -0
  261. package/.next/types/app/api/repositories/sync/route.ts +343 -0
  262. package/.next/types/app/api/slash-commands/route.ts +343 -0
  263. package/.next/types/app/api/worktrees/[id]/auto-yes/route.ts +343 -0
  264. package/.next/types/app/api/worktrees/[id]/capture/route.ts +343 -0
  265. package/.next/types/app/api/worktrees/[id]/cli-tool/route.ts +343 -0
  266. package/.next/types/app/api/worktrees/[id]/current-output/route.ts +343 -0
  267. package/.next/types/app/api/worktrees/[id]/files/[...path]/route.ts +343 -0
  268. package/.next/types/app/api/worktrees/[id]/interrupt/route.ts +343 -0
  269. package/.next/types/app/api/worktrees/[id]/kill-session/route.ts +343 -0
  270. package/.next/types/app/api/worktrees/[id]/logs/[filename]/route.ts +343 -0
  271. package/.next/types/app/api/worktrees/[id]/logs/route.ts +343 -0
  272. package/.next/types/app/api/worktrees/[id]/memos/[memoId]/route.ts +343 -0
  273. package/.next/types/app/api/worktrees/[id]/memos/route.ts +343 -0
  274. package/.next/types/app/api/worktrees/[id]/messages/route.ts +343 -0
  275. package/.next/types/app/api/worktrees/[id]/prompt-response/route.ts +343 -0
  276. package/.next/types/app/api/worktrees/[id]/respond/route.ts +343 -0
  277. package/.next/types/app/api/worktrees/[id]/route.ts +343 -0
  278. package/.next/types/app/api/worktrees/[id]/search/route.ts +343 -0
  279. package/.next/types/app/api/worktrees/[id]/send/route.ts +343 -0
  280. package/.next/types/app/api/worktrees/[id]/slash-commands/route.ts +343 -0
  281. package/.next/types/app/api/worktrees/[id]/start-polling/route.ts +343 -0
  282. package/.next/types/app/api/worktrees/[id]/terminal/route.ts +343 -0
  283. package/.next/types/app/api/worktrees/[id]/tree/[...path]/route.ts +343 -0
  284. package/.next/types/app/api/worktrees/[id]/tree/route.ts +343 -0
  285. package/.next/types/app/api/worktrees/[id]/upload/[...path]/route.ts +343 -0
  286. package/.next/types/app/api/worktrees/[id]/viewed/route.ts +343 -0
  287. package/.next/types/app/api/worktrees/route.ts +343 -0
  288. package/.next/types/app/page.ts +79 -0
  289. package/.next/types/app/proxy/[...path]/route.ts +343 -0
  290. package/.next/types/app/worktrees/[id]/files/[...path]/page.ts +79 -0
  291. package/.next/types/app/worktrees/[id]/page.ts +79 -0
  292. package/.next/types/app/worktrees/[id]/simple-terminal/page.ts +79 -0
  293. package/.next/types/app/worktrees/[id]/terminal/page.ts +79 -0
  294. package/.next/types/package.json +1 -0
  295. package/README.md +39 -8
  296. package/dist/cli/commands/init.d.ts +1 -0
  297. package/dist/cli/commands/init.d.ts.map +1 -1
  298. package/dist/cli/commands/init.js +143 -27
  299. package/dist/cli/types/index.d.ts +18 -0
  300. package/dist/cli/types/index.d.ts.map +1 -1
  301. package/dist/cli/utils/env-setup.d.ts +25 -0
  302. package/dist/cli/utils/env-setup.d.ts.map +1 -1
  303. package/dist/cli/utils/env-setup.js +56 -1
  304. package/dist/cli/utils/prompt.d.ts +68 -0
  305. package/dist/cli/utils/prompt.d.ts.map +1 -0
  306. package/dist/cli/utils/prompt.js +208 -0
  307. package/dist/server/server.js +123 -0
  308. package/dist/server/src/lib/claude-output.js +33 -0
  309. package/dist/server/src/lib/claude-session.js +312 -0
  310. package/dist/server/src/lib/cli-patterns.js +137 -0
  311. package/dist/server/src/lib/cli-session.js +73 -0
  312. package/dist/server/src/lib/cli-tools/base.js +51 -0
  313. package/dist/server/src/lib/cli-tools/claude.js +65 -0
  314. package/dist/server/src/lib/cli-tools/codex.js +132 -0
  315. package/dist/server/src/lib/cli-tools/gemini.js +122 -0
  316. package/dist/server/src/lib/cli-tools/index.js +22 -0
  317. package/dist/server/src/lib/cli-tools/manager.js +143 -0
  318. package/dist/server/src/lib/cli-tools/types.js +5 -0
  319. package/dist/server/src/lib/conversation-logger.js +25 -0
  320. package/dist/server/src/lib/db-instance.js +51 -0
  321. package/dist/server/src/lib/db-migrations.js +777 -0
  322. package/dist/server/src/lib/db.js +835 -0
  323. package/dist/server/src/lib/env.js +179 -0
  324. package/dist/server/src/lib/log-manager.js +234 -0
  325. package/dist/server/src/lib/logger.js +232 -0
  326. package/dist/server/src/lib/prompt-detector.js +285 -0
  327. package/dist/server/src/lib/response-poller.js +638 -0
  328. package/dist/server/src/lib/tmux.js +299 -0
  329. package/dist/server/src/lib/worktrees.js +231 -0
  330. package/dist/server/src/lib/ws-server.js +323 -0
  331. package/dist/server/src/types/clone.js +39 -0
  332. package/dist/server/src/types/conversation.js +9 -0
  333. package/dist/server/src/types/external-apps.js +6 -0
  334. package/dist/server/src/types/infinite-messages.js +65 -0
  335. package/dist/server/src/types/markdown-editor.js +94 -0
  336. package/dist/server/src/types/models.js +5 -0
  337. package/dist/server/src/types/sidebar.js +89 -0
  338. package/dist/server/src/types/slash-commands.js +47 -0
  339. package/dist/server/src/types/ui-actions.js +8 -0
  340. package/dist/server/src/types/ui-state.js +62 -0
  341. package/package.json +8 -4
package/README.md CHANGED
@@ -49,11 +49,43 @@ Claude Code での開発経験があり、本業の傍らで個人開発を続
49
49
 
50
50
  - macOS / Linux(tmux 依存のため Windows は非対応)
51
51
  - Node.js v20+、npm、git、tmux、openssl
52
- - Claude CLI(CLAUDE_HOOKS_STOP 対応)
52
+ - Claude CLI(オプション)
53
53
 
54
- > **Tip**: `./scripts/preflight-check.sh` で依存関係を確認できます。
54
+ ### インストール
55
55
 
56
- ### セットアップ
56
+ ```bash
57
+ npm install -g commandmate
58
+ ```
59
+
60
+ ### セットアップと起動
61
+
62
+ ```bash
63
+ commandmate init # 依存チェック、環境設定、DB初期化
64
+ commandmate start --daemon # バックグラウンドで起動
65
+ ```
66
+
67
+ ブラウザで http://localhost:3000 にアクセスしてください。
68
+
69
+ ### CLI コマンド
70
+
71
+ | コマンド | 説明 |
72
+ |---------|------|
73
+ | `commandmate init` | 初期設定(対話形式) |
74
+ | `commandmate init --defaults` | 初期設定(デフォルト値) |
75
+ | `commandmate start --daemon` | バックグラウンド起動 |
76
+ | `commandmate start -p 3001` | ポート指定で起動 |
77
+ | `commandmate stop` | サーバー停止 |
78
+ | `commandmate status` | 状態確認 |
79
+
80
+ 詳しくは [CLI セットアップガイド](./docs/user-guide/cli-setup-guide.md) を参照してください。
81
+
82
+ ### モバイルからのアクセス
83
+
84
+ `commandmate init` で外部アクセスを有効にすると、`CM_BIND=0.0.0.0` と `CM_AUTH_TOKEN` が自動設定されます。同一LAN内から `http://<PCのIP>:3000` にアクセスします。
85
+
86
+ ## 開発者向けセットアップ
87
+
88
+ コントリビューターや開発環境を構築する場合は、git clone を使用してください。
57
89
 
58
90
  ```bash
59
91
  git clone https://github.com/Kewton/CommandMate.git
@@ -61,8 +93,6 @@ cd CommandMate
61
93
  ./scripts/setup.sh # 依存チェック、環境設定、ビルド、起動まで自動実行
62
94
  ```
63
95
 
64
- ブラウザで http://localhost:3000 にアクセスしてください。
65
-
66
96
  ### 手動セットアップ(カスタマイズしたい場合)
67
97
 
68
98
  ```bash
@@ -76,7 +106,7 @@ npm run build
76
106
  npm start
77
107
  ```
78
108
 
79
- スマホから利用する場合は `./scripts/setup-env.sh` で外部アクセスを有効にすると、`CM_BIND=0.0.0.0` `CM_AUTH_TOKEN` が自動設定されます。同一LAN内から `http://<PCのIP>:3000` にアクセスします。
109
+ > **Note**: `./scripts/*` スクリプトは開発環境でのみ使用可能です。グローバルインストール(`npm install -g`)では `commandmate` CLI を使用してください。
80
110
 
81
111
  > **Note**: 旧名称の環境変数(`MCBD_*`)も後方互換性のためサポートされていますが、新名称(`CM_*`)の使用を推奨します。
82
112
 
@@ -104,13 +134,14 @@ A: 現時点では個人利用を想定しています。複数人での同時
104
134
 
105
135
  | ドキュメント | 説明 |
106
136
  |-------------|------|
137
+ | [CLI セットアップガイド](./docs/user-guide/cli-setup-guide.md) | インストールと初期設定 |
138
+ | [Webアプリ操作ガイド](./docs/user-guide/webapp-guide.md) | Webアプリの基本操作 |
139
+ | [クイックスタート](./docs/user-guide/quick-start.md) | Claude Codeコマンドの使い方 |
107
140
  | [コンセプト](./docs/concept.md) | ビジョンと解決する課題 |
108
141
  | [アーキテクチャ](./docs/architecture.md) | システム設計 |
109
142
  | [デプロイガイド](./docs/DEPLOYMENT.md) | 本番環境構築手順 |
110
143
  | [移行ガイド](./docs/migration-to-commandmate.md) | MyCodeBranchDesk からの移行手順 |
111
144
  | [UI/UXガイド](./docs/UI_UX_GUIDE.md) | UI実装の詳細 |
112
- | [Webアプリ操作ガイド](./docs/user-guide/webapp-guide.md) | Webアプリの基本操作 |
113
- | [クイックスタート](./docs/user-guide/quick-start.md) | Claude Codeコマンドの使い方 |
114
145
  | [Trust & Safety](./docs/TRUST_AND_SAFETY.md) | セキュリティと権限の考え方 |
115
146
 
116
147
  ## Contributing
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Init Command
3
3
  * Issue #96: npm install CLI support
4
+ * Issue #119: Interactive init support
4
5
  * Initialize CommandMate configuration
5
6
  */
6
7
  import { InitOptions } from '../types';
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAC;AAQ5D;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0HrE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAC;AAuI5D;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyIrE"}
@@ -2,18 +2,120 @@
2
2
  /**
3
3
  * Init Command
4
4
  * Issue #96: npm install CLI support
5
+ * Issue #119: Interactive init support
5
6
  * Initialize CommandMate configuration
6
7
  */
7
8
  Object.defineProperty(exports, "__esModule", { value: true });
8
9
  exports.initCommand = initCommand;
9
- const path_1 = require("path");
10
+ const fs_1 = require("fs");
10
11
  const os_1 = require("os");
11
12
  const types_1 = require("../types");
12
13
  const logger_1 = require("../utils/logger");
13
14
  const preflight_1 = require("../utils/preflight");
14
15
  const env_setup_1 = require("../utils/env-setup");
16
+ const prompt_1 = require("../utils/prompt");
15
17
  const security_logger_1 = require("../utils/security-logger");
16
18
  const logger = new logger_1.CLILogger();
19
+ /**
20
+ * Create default configuration (non-interactive mode)
21
+ */
22
+ function createDefaultConfig() {
23
+ return {
24
+ CM_ROOT_DIR: (0, env_setup_1.sanitizePath)(process.env.CM_ROOT_DIR || env_setup_1.DEFAULT_ROOT_DIR),
25
+ CM_PORT: env_setup_1.ENV_DEFAULTS.CM_PORT,
26
+ CM_BIND: env_setup_1.ENV_DEFAULTS.CM_BIND,
27
+ CM_DB_PATH: env_setup_1.ENV_DEFAULTS.CM_DB_PATH,
28
+ CM_LOG_LEVEL: env_setup_1.ENV_DEFAULTS.CM_LOG_LEVEL,
29
+ CM_LOG_FORMAT: env_setup_1.ENV_DEFAULTS.CM_LOG_FORMAT,
30
+ };
31
+ }
32
+ /**
33
+ * Prompt user for configuration (interactive mode)
34
+ * Issue #119: Interactive init support
35
+ */
36
+ async function promptForConfig() {
37
+ logger.info('--- Required Settings ---');
38
+ logger.blank();
39
+ // CM_ROOT_DIR
40
+ const rootDirInput = await (0, prompt_1.prompt)('Repository root directory (CM_ROOT_DIR)', {
41
+ default: env_setup_1.DEFAULT_ROOT_DIR.replace((0, os_1.homedir)(), '~'),
42
+ });
43
+ const rootDir = (0, prompt_1.resolvePath)(rootDirInput || env_setup_1.DEFAULT_ROOT_DIR);
44
+ // Check if path exists
45
+ if (!(0, fs_1.existsSync)(rootDir)) {
46
+ logger.warn(`Directory does not exist: ${rootDir}`);
47
+ const createDir = await (0, prompt_1.confirm)('Directory will be validated when adding repositories. Continue?', {
48
+ default: true,
49
+ });
50
+ if (!createDir) {
51
+ throw new Error('Setup cancelled by user');
52
+ }
53
+ }
54
+ logger.blank();
55
+ logger.info('--- Server Settings ---');
56
+ logger.blank();
57
+ // CM_PORT
58
+ const portInput = await (0, prompt_1.prompt)('Server port (CM_PORT)', {
59
+ default: String(env_setup_1.ENV_DEFAULTS.CM_PORT),
60
+ validate: prompt_1.validatePort,
61
+ });
62
+ const port = parseInt(portInput || String(env_setup_1.ENV_DEFAULTS.CM_PORT), 10);
63
+ // External access
64
+ const enableExternal = await (0, prompt_1.confirm)('Enable external access (bind to 0.0.0.0)?', {
65
+ default: false,
66
+ });
67
+ let bind = env_setup_1.ENV_DEFAULTS.CM_BIND;
68
+ let authToken;
69
+ if (enableExternal) {
70
+ bind = '0.0.0.0';
71
+ const envSetup = new env_setup_1.EnvSetup();
72
+ authToken = envSetup.generateAuthToken();
73
+ logger.blank();
74
+ logger.success('External access enabled');
75
+ logger.info(` Bind address: 0.0.0.0`);
76
+ logger.info(` Auth token generated: ${authToken.substring(0, 8)}...`);
77
+ }
78
+ // CM_DB_PATH
79
+ const dbPathInput = await (0, prompt_1.prompt)('Database path (CM_DB_PATH)', {
80
+ default: env_setup_1.ENV_DEFAULTS.CM_DB_PATH,
81
+ });
82
+ const dbPath = dbPathInput || env_setup_1.ENV_DEFAULTS.CM_DB_PATH;
83
+ return {
84
+ CM_ROOT_DIR: rootDir,
85
+ CM_PORT: port,
86
+ CM_BIND: bind,
87
+ CM_AUTH_TOKEN: authToken,
88
+ CM_DB_PATH: dbPath,
89
+ CM_LOG_LEVEL: env_setup_1.ENV_DEFAULTS.CM_LOG_LEVEL,
90
+ CM_LOG_FORMAT: env_setup_1.ENV_DEFAULTS.CM_LOG_FORMAT,
91
+ };
92
+ }
93
+ /**
94
+ * Display configuration summary
95
+ * Issue #119: Show settings after configuration
96
+ */
97
+ function displayConfigSummary(config, envPath) {
98
+ logger.blank();
99
+ logger.info('==================================');
100
+ logger.info('Configuration Summary');
101
+ logger.info('==================================');
102
+ logger.blank();
103
+ logger.info(` CM_ROOT_DIR: ${config.CM_ROOT_DIR}`);
104
+ logger.info(` CM_PORT: ${config.CM_PORT}`);
105
+ logger.info(` CM_BIND: ${config.CM_BIND}`);
106
+ if (config.CM_AUTH_TOKEN) {
107
+ logger.info(` CM_AUTH_TOKEN: ${config.CM_AUTH_TOKEN.substring(0, 8)}... (generated)`);
108
+ }
109
+ logger.info(` CM_DB_PATH: ${config.CM_DB_PATH}`);
110
+ logger.blank();
111
+ logger.info(` Config file: ${envPath}`);
112
+ logger.blank();
113
+ if (config.CM_AUTH_TOKEN) {
114
+ logger.warn('IMPORTANT: Save your auth token securely!');
115
+ logger.info(` Token: ${config.CM_AUTH_TOKEN}`);
116
+ logger.blank();
117
+ }
118
+ }
17
119
  /**
18
120
  * Execute init command
19
121
  */
@@ -53,19 +155,30 @@ async function initCommand(options) {
53
155
  logger.blank();
54
156
  logger.success('All required dependencies found');
55
157
  logger.blank();
56
- // Step 2: Setup environment
57
- const envSetup = new env_setup_1.EnvSetup();
58
- // Create configuration
59
- const config = {
60
- CM_ROOT_DIR: options.defaults
61
- ? (0, path_1.join)((0, os_1.homedir)(), 'repos')
62
- : (0, env_setup_1.sanitizePath)(process.env.CM_ROOT_DIR || (0, path_1.join)((0, os_1.homedir)(), 'repos')),
63
- CM_PORT: env_setup_1.ENV_DEFAULTS.CM_PORT,
64
- CM_BIND: env_setup_1.ENV_DEFAULTS.CM_BIND,
65
- CM_DB_PATH: env_setup_1.ENV_DEFAULTS.CM_DB_PATH,
66
- CM_LOG_LEVEL: env_setup_1.ENV_DEFAULTS.CM_LOG_LEVEL,
67
- CM_LOG_FORMAT: env_setup_1.ENV_DEFAULTS.CM_LOG_FORMAT,
68
- };
158
+ // Step 2: Get environment path
159
+ const envPath = (0, env_setup_1.getEnvPath)();
160
+ const envSetup = new env_setup_1.EnvSetup(envPath);
161
+ // Backup existing .env if force mode
162
+ if (options.force) {
163
+ const backupPath = await envSetup.backupExisting();
164
+ if (backupPath) {
165
+ logger.info(`Backed up existing .env to ${backupPath}`);
166
+ }
167
+ }
168
+ // Step 3: Create configuration
169
+ let config;
170
+ // Determine if interactive mode should be used
171
+ // Use interactive mode if:
172
+ // - Not using --defaults flag
173
+ // - Running in a TTY (interactive terminal)
174
+ const useInteractive = !options.defaults && (0, prompt_1.isInteractive)();
175
+ if (useInteractive) {
176
+ config = await promptForConfig();
177
+ (0, prompt_1.closeReadline)(); // Close readline after prompts
178
+ }
179
+ else {
180
+ config = createDefaultConfig();
181
+ }
69
182
  // Validate configuration
70
183
  const validationResult = envSetup.validateConfig(config);
71
184
  if (!validationResult.valid) {
@@ -82,37 +195,40 @@ async function initCommand(options) {
82
195
  process.exit(types_1.ExitCode.CONFIG_ERROR);
83
196
  return;
84
197
  }
85
- // Backup existing .env if force mode
86
- if (options.force) {
87
- const backupPath = await envSetup.backupExisting();
88
- if (backupPath) {
89
- logger.info(`Backed up existing .env to ${backupPath}`);
90
- }
91
- }
92
- // Create .env file
198
+ // Step 4: Create .env file
199
+ logger.blank();
200
+ logger.info('--- Generating .env ---');
201
+ logger.blank();
93
202
  logger.info('Creating .env file...');
94
203
  await envSetup.createEnvFile(config, { force: options.force });
95
204
  logger.success('.env file created');
96
- // Step 3: Initialize database
205
+ // Step 5: Initialize database message
97
206
  logger.info('Initializing database...');
98
207
  // Note: Database initialization is handled by the server on startup
99
208
  logger.success('Database will be initialized on first server start');
100
- logger.blank();
209
+ // Display configuration summary
210
+ displayConfigSummary(config, envPath);
101
211
  logger.success('CommandMate initialized successfully!');
102
212
  logger.blank();
103
213
  logger.info('Next steps:');
104
- logger.info(' 1. Edit .env to customize your configuration');
105
- logger.info(' 2. Run "commandmate start" to start the server');
214
+ if (!useInteractive) {
215
+ logger.info(' 1. Edit .env to customize your configuration');
216
+ logger.info(' 2. Run "commandmate start" to start the server');
217
+ }
218
+ else {
219
+ logger.info(' 1. Run "commandmate start" to start the server');
220
+ }
106
221
  logger.blank();
107
222
  (0, security_logger_1.logSecurityEvent)({
108
223
  timestamp: new Date().toISOString(),
109
224
  command: 'init',
110
225
  action: 'success',
111
- details: 'Configuration initialized',
226
+ details: `Configuration initialized (interactive: ${useInteractive})`,
112
227
  });
113
228
  process.exit(types_1.ExitCode.SUCCESS);
114
229
  }
115
230
  catch (error) {
231
+ (0, prompt_1.closeReadline)(); // Ensure readline is closed on error
116
232
  const message = error instanceof Error ? error.message : String(error);
117
233
  logger.error(`Initialization failed: ${message}`);
118
234
  (0, security_logger_1.logSecurityEvent)({
@@ -121,4 +121,22 @@ export interface ValidationResult {
121
121
  valid: boolean;
122
122
  errors: string[];
123
123
  }
124
+ /**
125
+ * Options for prompt function
126
+ * Issue #119: Interactive init support
127
+ */
128
+ export interface PromptOptions {
129
+ /** Default value if user presses Enter */
130
+ default?: string;
131
+ /** Validation function - returns error message or true if valid */
132
+ validate?: (input: string) => string | true;
133
+ }
134
+ /**
135
+ * Options for confirm function
136
+ * Issue #119: Interactive init support
137
+ */
138
+ export interface ConfirmOptions {
139
+ /** Default value if user presses Enter (true = Y, false = N) */
140
+ default?: boolean;
141
+ }
124
142
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,oBAAY,QAAQ;IAClB,OAAO,IAAI;IACX,gBAAgB,IAAI;IACpB,YAAY,IAAI;IAChB,YAAY,IAAI;IAChB,WAAW,IAAI;IACf,gBAAgB,KAAK;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wBAAwB;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,kBAAkB,CAAC;IAC9C,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,oBAAY,QAAQ;IAClB,OAAO,IAAI;IACX,gBAAgB,IAAI;IACpB,YAAY,IAAI;IAChB,YAAY,IAAI;IAChB,WAAW,IAAI;IACf,gBAAgB,KAAK;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wBAAwB;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,kBAAkB,CAAC;IAC9C,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -15,6 +15,31 @@ export declare const ENV_DEFAULTS: {
15
15
  readonly CM_LOG_LEVEL: "info";
16
16
  readonly CM_LOG_FORMAT: "text";
17
17
  };
18
+ /**
19
+ * Default root directory for worktrees
20
+ */
21
+ export declare const DEFAULT_ROOT_DIR: string;
22
+ /**
23
+ * Check if running as global npm package
24
+ * Issue #119: Determine .env location based on install type
25
+ *
26
+ * @returns true if running as global npm package
27
+ */
28
+ export declare function isGlobalInstall(): boolean;
29
+ /**
30
+ * Get the path to .env file based on install type
31
+ * Issue #119: Global install uses ~/.commandmate/, local uses cwd
32
+ *
33
+ * @returns Path to .env file
34
+ */
35
+ export declare function getEnvPath(): string;
36
+ /**
37
+ * Get the config directory path
38
+ * Issue #119: Returns ~/.commandmate for global, cwd for local
39
+ *
40
+ * @returns Path to config directory
41
+ */
42
+ export declare function getConfigDir(): string;
18
43
  /**
19
44
  * Sanitize input by removing control characters
20
45
  * SF-SEC-3: Input sanitization
@@ -1 +1 @@
1
- {"version":3,"file":"env-setup.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/env-setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EACL,SAAS,EACT,eAAe,EACf,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;CAMf,CAAC;AAEX;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUpD;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,MAAM;IAI5B;;;OAGG;IACG,aAAa,CACjB,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAiChB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY9C;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,gBAAgB;CAoCpD"}
1
+ {"version":3,"file":"env-setup.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/env-setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,EACL,SAAS,EACT,eAAe,EACf,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;CAMf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAA2B,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAYzC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAcnC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAKrC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUpD;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,CAAC,EAAE,MAAM;IAI5B;;;OAGG;IACG,aAAa,CACjB,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAiChB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY9C;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,gBAAgB;CAoCpD"}
@@ -5,7 +5,10 @@
5
5
  * Migrated from scripts/setup-env.sh
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.EnvSetup = exports.ENV_DEFAULTS = void 0;
8
+ exports.EnvSetup = exports.DEFAULT_ROOT_DIR = exports.ENV_DEFAULTS = void 0;
9
+ exports.isGlobalInstall = isGlobalInstall;
10
+ exports.getEnvPath = getEnvPath;
11
+ exports.getConfigDir = getConfigDir;
9
12
  exports.sanitizeInput = sanitizeInput;
10
13
  exports.sanitizePath = sanitizePath;
11
14
  exports.validatePort = validatePort;
@@ -13,6 +16,7 @@ exports.escapeEnvValue = escapeEnvValue;
13
16
  const fs_1 = require("fs");
14
17
  const path_1 = require("path");
15
18
  const crypto_1 = require("crypto");
19
+ const os_1 = require("os");
16
20
  /**
17
21
  * Default environment configuration values
18
22
  * SF-4: DRY - Centralized defaults
@@ -24,6 +28,57 @@ exports.ENV_DEFAULTS = {
24
28
  CM_LOG_LEVEL: 'info',
25
29
  CM_LOG_FORMAT: 'text',
26
30
  };
31
+ /**
32
+ * Default root directory for worktrees
33
+ */
34
+ exports.DEFAULT_ROOT_DIR = (0, path_1.join)((0, os_1.homedir)(), 'repos');
35
+ /**
36
+ * Check if running as global npm package
37
+ * Issue #119: Determine .env location based on install type
38
+ *
39
+ * @returns true if running as global npm package
40
+ */
41
+ function isGlobalInstall() {
42
+ // Check if running from global node_modules
43
+ // Global installs typically have paths like:
44
+ // - /usr/local/lib/node_modules/
45
+ // - /Users/xxx/.npm-global/lib/node_modules/
46
+ // - C:\Users\xxx\AppData\Roaming\npm\node_modules\
47
+ const currentPath = (0, path_1.dirname)(__dirname);
48
+ return (currentPath.includes('/lib/node_modules/') ||
49
+ currentPath.includes('\\node_modules\\') ||
50
+ currentPath.includes('/node_modules/commandmate'));
51
+ }
52
+ /**
53
+ * Get the path to .env file based on install type
54
+ * Issue #119: Global install uses ~/.commandmate/, local uses cwd
55
+ *
56
+ * @returns Path to .env file
57
+ */
58
+ function getEnvPath() {
59
+ if (isGlobalInstall()) {
60
+ const configDir = (0, path_1.join)((0, os_1.homedir)(), '.commandmate');
61
+ // Create config directory if it doesn't exist
62
+ if (!(0, fs_1.existsSync)(configDir)) {
63
+ (0, fs_1.mkdirSync)(configDir, { recursive: true, mode: 0o700 });
64
+ }
65
+ return (0, path_1.join)(configDir, '.env');
66
+ }
67
+ // Local install - use current working directory
68
+ return (0, path_1.join)(process.cwd(), '.env');
69
+ }
70
+ /**
71
+ * Get the config directory path
72
+ * Issue #119: Returns ~/.commandmate for global, cwd for local
73
+ *
74
+ * @returns Path to config directory
75
+ */
76
+ function getConfigDir() {
77
+ if (isGlobalInstall()) {
78
+ return (0, path_1.join)((0, os_1.homedir)(), '.commandmate');
79
+ }
80
+ return process.cwd();
81
+ }
27
82
  /**
28
83
  * Sanitize input by removing control characters
29
84
  * SF-SEC-3: Input sanitization
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Interactive Prompt Utilities
3
+ * Issue #119: Interactive init support
4
+ *
5
+ * Provides readline-based prompts for CLI commands.
6
+ * Reference implementation: scripts/setup-env.sh
7
+ */
8
+ import { PromptOptions, ConfirmOptions } from '../types';
9
+ /**
10
+ * Close readline interface
11
+ * Should be called when all prompts are done
12
+ */
13
+ export declare function closeReadline(): void;
14
+ /**
15
+ * Expand tilde (~) to home directory
16
+ *
17
+ * @param path - Path that may contain tilde
18
+ * @returns Path with tilde expanded to home directory
19
+ *
20
+ * @example
21
+ * expandTilde('~/repos') // '/Users/xxx/repos'
22
+ * expandTilde('/absolute/path') // '/absolute/path'
23
+ */
24
+ export declare function expandTilde(path: string): string;
25
+ /**
26
+ * Resolve path to absolute path
27
+ * Handles tilde expansion and relative paths
28
+ *
29
+ * @param path - Path to resolve
30
+ * @returns Absolute path
31
+ */
32
+ export declare function resolvePath(path: string): string;
33
+ /**
34
+ * Validate port number
35
+ *
36
+ * @param input - Port number as string
37
+ * @returns Error message or true if valid
38
+ */
39
+ export declare function validatePort(input: string): string | true;
40
+ /**
41
+ * Interactive prompt with default value and validation
42
+ *
43
+ * @param question - Question to display
44
+ * @param options - Prompt options (default, validate)
45
+ * @returns User input or default value
46
+ *
47
+ * @example
48
+ * const port = await prompt('Server port', { default: '3000', validate: validatePort });
49
+ */
50
+ export declare function prompt(question: string, options?: PromptOptions): Promise<string>;
51
+ /**
52
+ * Interactive Yes/No confirmation
53
+ *
54
+ * @param question - Question to display
55
+ * @param options - Confirm options (default)
56
+ * @returns true for Yes, false for No
57
+ *
58
+ * @example
59
+ * const enableExternal = await confirm('Enable external access?', { default: false });
60
+ */
61
+ export declare function confirm(question: string, options?: ConfirmOptions): Promise<boolean>;
62
+ /**
63
+ * Check if running in interactive mode (TTY)
64
+ *
65
+ * @returns true if stdin is a TTY (interactive terminal)
66
+ */
67
+ export declare function isInteractive(): boolean;
68
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAqBzD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASzD;AAED;;;;;;;;;GASG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA8BjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAmClB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}