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.
- package/.next/BUILD_ID +1 -0
- package/.next/app-build-manifest.json +72 -0
- package/.next/app-path-routes-manifest.json +1 -0
- package/.next/build-manifest.json +32 -0
- package/.next/cache/.tsbuildinfo +1 -0
- package/.next/cache/config.json +7 -0
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/1.pack +0 -0
- package/.next/cache/webpack/client-production/2.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack.old +0 -0
- package/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/export-marker.json +1 -0
- package/.next/images-manifest.json +1 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +1 -0
- package/.next/react-loadable-manifest.json +249 -0
- package/.next/required-server-files.json +1 -0
- package/.next/routes-manifest.json +1 -0
- package/.next/server/app/_not-found/page.js +1 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +6 -0
- package/.next/server/app/_not-found.rsc +10 -0
- package/.next/server/app/api/external-apps/[id]/health/route.js +45 -0
- package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -0
- package/.next/server/app/api/external-apps/[id]/route.js +45 -0
- package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/external-apps/route.js +45 -0
- package/.next/server/app/api/external-apps/route.js.nft.json +1 -0
- package/.next/server/app/api/hooks/claude-done/route.js +19 -0
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -0
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -0
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -0
- package/.next/server/app/api/repositories/clone/route.js +1 -0
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -0
- package/.next/server/app/api/repositories/route.js +1 -0
- package/.next/server/app/api/repositories/route.js.nft.json +1 -0
- package/.next/server/app/api/repositories/scan/route.js +1 -0
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -0
- package/.next/server/app/api/repositories/sync/route.js +1 -0
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -0
- package/.next/server/app/api/slash-commands/route.js +1 -0
- package/.next/server/app/api/slash-commands/route.js.nft.json +1 -0
- package/.next/server/app/api/slash-commands.body +1 -0
- package/.next/server/app/api/slash-commands.meta +1 -0
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/capture/route.js +2 -0
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/logs/route.js +19 -0
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/route.js +1 -0
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -0
- package/.next/server/app/apple-icon.png/route.js +1 -0
- package/.next/server/app/apple-icon.png/route.js.nft.json +1 -0
- package/.next/server/app/apple-icon.png.body +0 -0
- package/.next/server/app/apple-icon.png.meta +1 -0
- package/.next/server/app/icon.png/route.js +1 -0
- package/.next/server/app/icon.png/route.js.nft.json +1 -0
- package/.next/server/app/icon.png.body +0 -0
- package/.next/server/app/icon.png.meta +1 -0
- package/.next/server/app/index.html +9 -0
- package/.next/server/app/index.meta +5 -0
- package/.next/server/app/index.rsc +8 -0
- package/.next/server/app/page.js +16 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +1 -0
- package/.next/server/app/proxy/[...path]/route.js +45 -0
- package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -0
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -0
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -0
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/worktrees/[id]/page.js +21 -0
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -0
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -0
- package/.next/server/app/worktrees/[id]/simple-terminal/page.js +4 -0
- package/.next/server/app/worktrees/[id]/simple-terminal/page.js.nft.json +1 -0
- package/.next/server/app/worktrees/[id]/simple-terminal/page_client-reference-manifest.js +1 -0
- package/.next/server/app/worktrees/[id]/terminal/page.js +6 -0
- package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -0
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -0
- package/.next/server/app-paths-manifest.json +46 -0
- package/.next/server/chunks/1318.js +29 -0
- package/.next/server/chunks/1528.js +1 -0
- package/.next/server/chunks/1682.js +6 -0
- package/.next/server/chunks/2518.js +12 -0
- package/.next/server/chunks/3053.js +1 -0
- package/.next/server/chunks/3673.js +1 -0
- package/.next/server/chunks/3853.js +1 -0
- package/.next/server/chunks/434.js +1 -0
- package/.next/server/chunks/4471.js +2 -0
- package/.next/server/chunks/4893.js +2 -0
- package/.next/server/chunks/5972.js +12 -0
- package/.next/server/chunks/6550.js +1 -0
- package/.next/server/chunks/6621.js +1 -0
- package/.next/server/chunks/7213.js +1 -0
- package/.next/server/chunks/7425.js +500 -0
- package/.next/server/chunks/8585.js +1 -0
- package/.next/server/chunks/8887.js +1 -0
- package/.next/server/chunks/8948.js +2 -0
- package/.next/server/chunks/9703.js +31 -0
- package/.next/server/chunks/9723.js +19 -0
- package/.next/server/chunks/font-manifest.json +1 -0
- package/.next/server/edge-runtime-webpack.js +2 -0
- package/.next/server/edge-runtime-webpack.js.map +1 -0
- package/.next/server/font-manifest.json +1 -0
- package/.next/server/functions-config-manifest.json +1 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -0
- package/.next/server/middleware-manifest.json +32 -0
- package/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +1 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages/_app.js +1 -0
- package/.next/server/pages/_app.js.nft.json +1 -0
- package/.next/server/pages/_document.js +1 -0
- package/.next/server/pages/_document.js.nft.json +1 -0
- package/.next/server/pages/_error.js +1 -0
- package/.next/server/pages/_error.js.nft.json +1 -0
- package/.next/server/pages-manifest.json +1 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +1 -0
- package/.next/server/src/middleware.js +14 -0
- package/.next/server/src/middleware.js.map +1 -0
- package/.next/server/webpack-runtime.js +1 -0
- package/.next/static/3jNZMmFnQhc5G7met-OU4/_buildManifest.js +1 -0
- package/.next/static/3jNZMmFnQhc5G7met-OU4/_ssgManifest.js +1 -0
- package/.next/static/chunks/0dbeb660.3e800dfbd28be3bd.js +53 -0
- package/.next/static/chunks/1015.0eaa4da7f61149bc.js +59 -0
- package/.next/static/chunks/1098.49268c9fe1b028fa.js +1 -0
- package/.next/static/chunks/13.feeafc7cc620f8c4.js +1 -0
- package/.next/static/chunks/1423.7b1e8bf760d28078.js +1 -0
- package/.next/static/chunks/1582.9f8590f71ff798ca.js +55 -0
- package/.next/static/chunks/1817.a66d96cedb761daa.js +262 -0
- package/.next/static/chunks/2117-d845c2cd62e344a6.js +2 -0
- package/.next/static/chunks/2398.0b21e4eb7006a230.js +93 -0
- package/.next/static/chunks/2526.8ac62b527c9ab703.js +43 -0
- package/.next/static/chunks/2626.2125083a1ff3b80a.js +29 -0
- package/.next/static/chunks/2689.720a4874b02d4211.js +174 -0
- package/.next/static/chunks/2853-d11a80b03c9a1640.js +1 -0
- package/.next/static/chunks/2957-327e43ef4c12808f.js +1 -0
- package/.next/static/chunks/2cdb6380.35626fc6e41bbba4.js +136 -0
- package/.next/static/chunks/30d07d85-393352a92199f695.js +3 -0
- package/.next/static/chunks/3559.f073f72c4466ce0e.js +1 -0
- package/.next/static/chunks/3574.7a94c27e6a496a56.js +63 -0
- package/.next/static/chunks/383.20683891c9a5f2c4.js +4 -0
- package/.next/static/chunks/3843.3fdda732987f7bb8.js +1 -0
- package/.next/static/chunks/3852.822389f445c9b427.js +1 -0
- package/.next/static/chunks/3991.4bc063cb5be3a86c.js +1 -0
- package/.next/static/chunks/4212.52c1bb34fc97d0d0.js +131 -0
- package/.next/static/chunks/4327.3b84aa049900fdeb.js +60 -0
- package/.next/static/chunks/4362.7bd6f0282e49d79b.js +1 -0
- package/.next/static/chunks/4721.40615a5f4f32b5fb.js +1 -0
- package/.next/static/chunks/4851-45df4d388db5623f.js +1 -0
- package/.next/static/chunks/5112.17318d1c6b28044b.js +1 -0
- package/.next/static/chunks/5126.93fa4e797d609286.js +56 -0
- package/.next/static/chunks/5387.47590ac4ef66c864.js +5 -0
- package/.next/static/chunks/5813.4483664ba482beb1.js +1 -0
- package/.next/static/chunks/6143.1450875bd03a2366.js +36 -0
- package/.next/static/chunks/6406.9653f0d41ab85059.js +1 -0
- package/.next/static/chunks/656.d72f25ce819bd77e.js +149 -0
- package/.next/static/chunks/6678.492e73ca42b2a273.js +62 -0
- package/.next/static/chunks/6725-f7607851b7d57eb1.js +1 -0
- package/.next/static/chunks/6792.3c01ac4dda4b5c6d.js +1 -0
- package/.next/static/chunks/7004.808cbf327ef5955e.js +1 -0
- package/.next/static/chunks/7290.09ef84cf94f90c4d.js +1 -0
- package/.next/static/chunks/7415.6b481c2baf363262.js +148 -0
- package/.next/static/chunks/7648-325564a6e12a3257.js +1 -0
- package/.next/static/chunks/7665.47fccad04449a8f9.js +215 -0
- package/.next/static/chunks/7753.6bdce86b7fde3d10.js +166 -0
- package/.next/static/chunks/8125.245a9df052d274fb.js +1 -0
- package/.next/static/chunks/816-7e340dad784be28c.js +1 -0
- package/.next/static/chunks/8288.4883743fa40672e2.js +24 -0
- package/.next/static/chunks/8522.1607e96011c66877.js +1 -0
- package/.next/static/chunks/8772.863c564498d88487.js +1 -0
- package/.next/static/chunks/8841.dadeb1ece8e46004.js +1 -0
- package/.next/static/chunks/8885.f8d9912b40d74811.js +1 -0
- package/.next/static/chunks/90542734.c1553d0fe7fc14fc.js +1 -0
- package/.next/static/chunks/9365-733d8c05712d2888.js +1 -0
- package/.next/static/chunks/9552.b7dfb7903ead934b.js +1 -0
- package/.next/static/chunks/9834.295b45635ce04f5e.js +24 -0
- package/.next/static/chunks/app/_not-found/page-a9d04e58c81115ec.js +1 -0
- package/.next/static/chunks/app/layout-37e55f11dcc8b1bf.js +1 -0
- package/.next/static/chunks/app/page-9cd00de9cc0abc43.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9e5adf57cbbbdf05.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-8c6676303b63fdaf.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/simple-terminal/page-16feb3e86e42f4d1.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-be802baffc84dbd2.js +1 -0
- package/.next/static/chunks/d3ac728e.6c9c508274d4d2d5.js +1 -0
- package/.next/static/chunks/fd9d1056-bbe86e4ae099d5cd.js +1 -0
- package/.next/static/chunks/framework-8e0e0f4a6b83a956.js +1 -0
- package/.next/static/chunks/main-a960f4a5e1a2f598.js +1 -0
- package/.next/static/chunks/main-app-420d93e43682fee5.js +1 -0
- package/.next/static/chunks/pages/_app-3c9ca398d360b709.js +1 -0
- package/.next/static/chunks/pages/_error-cf5ca766ac8f493f.js +1 -0
- package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/.next/static/chunks/webpack-3fc79fab9bb738d7.js +1 -0
- package/.next/static/css/5eacd01f773eed7f.css +11 -0
- package/.next/static/css/85fa6dafca566008.css +1 -0
- package/.next/static/css/e174aa24f94ce607.css +3 -0
- package/.next/trace +5 -0
- package/.next/types/app/api/external-apps/[id]/health/route.ts +343 -0
- package/.next/types/app/api/external-apps/[id]/route.ts +343 -0
- package/.next/types/app/api/external-apps/route.ts +343 -0
- package/.next/types/app/api/hooks/claude-done/route.ts +343 -0
- package/.next/types/app/api/repositories/clone/[jobId]/route.ts +343 -0
- package/.next/types/app/api/repositories/clone/route.ts +343 -0
- package/.next/types/app/api/repositories/route.ts +343 -0
- package/.next/types/app/api/repositories/scan/route.ts +343 -0
- package/.next/types/app/api/repositories/sync/route.ts +343 -0
- package/.next/types/app/api/slash-commands/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/auto-yes/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/capture/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/cli-tool/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/current-output/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/files/[...path]/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/interrupt/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/kill-session/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/logs/[filename]/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/logs/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/memos/[memoId]/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/memos/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/messages/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/prompt-response/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/respond/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/search/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/send/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/slash-commands/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/start-polling/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/terminal/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/tree/[...path]/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/tree/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/upload/[...path]/route.ts +343 -0
- package/.next/types/app/api/worktrees/[id]/viewed/route.ts +343 -0
- package/.next/types/app/api/worktrees/route.ts +343 -0
- package/.next/types/app/page.ts +79 -0
- package/.next/types/app/proxy/[...path]/route.ts +343 -0
- package/.next/types/app/worktrees/[id]/files/[...path]/page.ts +79 -0
- package/.next/types/app/worktrees/[id]/page.ts +79 -0
- package/.next/types/app/worktrees/[id]/simple-terminal/page.ts +79 -0
- package/.next/types/app/worktrees/[id]/terminal/page.ts +79 -0
- package/.next/types/package.json +1 -0
- package/README.md +39 -8
- package/dist/cli/commands/init.d.ts +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +143 -27
- package/dist/cli/types/index.d.ts +18 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/env-setup.d.ts +25 -0
- package/dist/cli/utils/env-setup.d.ts.map +1 -1
- package/dist/cli/utils/env-setup.js +56 -1
- package/dist/cli/utils/prompt.d.ts +68 -0
- package/dist/cli/utils/prompt.d.ts.map +1 -0
- package/dist/cli/utils/prompt.js +208 -0
- package/dist/server/server.js +123 -0
- package/dist/server/src/lib/claude-output.js +33 -0
- package/dist/server/src/lib/claude-session.js +312 -0
- package/dist/server/src/lib/cli-patterns.js +137 -0
- package/dist/server/src/lib/cli-session.js +73 -0
- package/dist/server/src/lib/cli-tools/base.js +51 -0
- package/dist/server/src/lib/cli-tools/claude.js +65 -0
- package/dist/server/src/lib/cli-tools/codex.js +132 -0
- package/dist/server/src/lib/cli-tools/gemini.js +122 -0
- package/dist/server/src/lib/cli-tools/index.js +22 -0
- package/dist/server/src/lib/cli-tools/manager.js +143 -0
- package/dist/server/src/lib/cli-tools/types.js +5 -0
- package/dist/server/src/lib/conversation-logger.js +25 -0
- package/dist/server/src/lib/db-instance.js +51 -0
- package/dist/server/src/lib/db-migrations.js +777 -0
- package/dist/server/src/lib/db.js +835 -0
- package/dist/server/src/lib/env.js +179 -0
- package/dist/server/src/lib/log-manager.js +234 -0
- package/dist/server/src/lib/logger.js +232 -0
- package/dist/server/src/lib/prompt-detector.js +285 -0
- package/dist/server/src/lib/response-poller.js +638 -0
- package/dist/server/src/lib/tmux.js +299 -0
- package/dist/server/src/lib/worktrees.js +231 -0
- package/dist/server/src/lib/ws-server.js +323 -0
- package/dist/server/src/types/clone.js +39 -0
- package/dist/server/src/types/conversation.js +9 -0
- package/dist/server/src/types/external-apps.js +6 -0
- package/dist/server/src/types/infinite-messages.js +65 -0
- package/dist/server/src/types/markdown-editor.js +94 -0
- package/dist/server/src/types/models.js +5 -0
- package/dist/server/src/types/sidebar.js +89 -0
- package/dist/server/src/types/slash-commands.js +47 -0
- package/dist/server/src/types/ui-actions.js +8 -0
- package/dist/server/src/types/ui-state.js +62 -0
- 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
|
|
52
|
+
- Claude CLI(オプション)
|
|
53
53
|
|
|
54
|
-
|
|
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
|
-
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
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:
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
//
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
105
|
-
|
|
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:
|
|
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;
|
|
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"}
|