@l4yercak3/cli 1.3.1 → 2.0.0-alpha.0

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 (357) hide show
  1. package/README.md +10 -220
  2. package/dist/api/client.d.ts +12 -0
  3. package/dist/api/client.d.ts.map +1 -0
  4. package/dist/api/client.js +37 -0
  5. package/dist/api/client.js.map +1 -0
  6. package/dist/api/platform.d.ts +161 -0
  7. package/dist/api/platform.d.ts.map +1 -0
  8. package/dist/api/platform.js +70 -0
  9. package/dist/api/platform.js.map +1 -0
  10. package/dist/bin/sevenlayers.d.ts +3 -0
  11. package/dist/bin/sevenlayers.d.ts.map +1 -0
  12. package/dist/bin/sevenlayers.js +198 -0
  13. package/dist/bin/sevenlayers.js.map +1 -0
  14. package/dist/commands/agent/catalog.d.ts +5 -0
  15. package/dist/commands/agent/catalog.d.ts.map +1 -0
  16. package/dist/commands/agent/catalog.js +142 -0
  17. package/dist/commands/agent/catalog.js.map +1 -0
  18. package/dist/commands/agent/drift.d.ts +5 -0
  19. package/dist/commands/agent/drift.d.ts.map +1 -0
  20. package/dist/commands/agent/drift.js +113 -0
  21. package/dist/commands/agent/drift.js.map +1 -0
  22. package/dist/commands/agent/init.d.ts +5 -0
  23. package/dist/commands/agent/init.d.ts.map +1 -0
  24. package/dist/commands/agent/init.js +75 -0
  25. package/dist/commands/agent/init.js.map +1 -0
  26. package/dist/commands/agent/permissions.d.ts +5 -0
  27. package/dist/commands/agent/permissions.d.ts.map +1 -0
  28. package/dist/commands/agent/permissions.js +88 -0
  29. package/dist/commands/agent/permissions.js.map +1 -0
  30. package/dist/commands/agent/runner.d.ts +14 -0
  31. package/dist/commands/agent/runner.d.ts.map +1 -0
  32. package/dist/commands/agent/runner.js +59 -0
  33. package/dist/commands/agent/runner.js.map +1 -0
  34. package/dist/commands/agent/shared.d.ts +13 -0
  35. package/dist/commands/agent/shared.d.ts.map +1 -0
  36. package/dist/commands/agent/shared.js +31 -0
  37. package/dist/commands/agent/shared.js.map +1 -0
  38. package/dist/commands/agent/template.d.ts +5 -0
  39. package/dist/commands/agent/template.d.ts.map +1 -0
  40. package/dist/commands/agent/template.js +104 -0
  41. package/dist/commands/agent/template.js.map +1 -0
  42. package/dist/commands/app/connect.d.ts +7 -0
  43. package/dist/commands/app/connect.d.ts.map +1 -0
  44. package/dist/commands/app/connect.js +12 -0
  45. package/dist/commands/app/connect.js.map +1 -0
  46. package/dist/commands/app/init.d.ts +7 -0
  47. package/dist/commands/app/init.d.ts.map +1 -0
  48. package/dist/commands/app/init.js +12 -0
  49. package/dist/commands/app/init.js.map +1 -0
  50. package/dist/commands/app/link.d.ts +3 -0
  51. package/dist/commands/app/link.d.ts.map +1 -0
  52. package/dist/commands/app/link.js +92 -0
  53. package/dist/commands/app/link.js.map +1 -0
  54. package/dist/commands/app/pages.d.ts +15 -0
  55. package/dist/commands/app/pages.d.ts.map +1 -0
  56. package/dist/commands/app/pages.js +180 -0
  57. package/dist/commands/app/pages.js.map +1 -0
  58. package/dist/commands/app/register.d.ts +3 -0
  59. package/dist/commands/app/register.d.ts.map +1 -0
  60. package/dist/commands/app/register.js +120 -0
  61. package/dist/commands/app/register.js.map +1 -0
  62. package/dist/commands/app/remote.d.ts +14 -0
  63. package/dist/commands/app/remote.d.ts.map +1 -0
  64. package/dist/commands/app/remote.js +44 -0
  65. package/dist/commands/app/remote.js.map +1 -0
  66. package/dist/commands/app/setup.d.ts +3 -0
  67. package/dist/commands/app/setup.d.ts.map +1 -0
  68. package/dist/commands/app/setup.js +299 -0
  69. package/dist/commands/app/setup.js.map +1 -0
  70. package/dist/commands/app/shared.d.ts +9 -0
  71. package/dist/commands/app/shared.d.ts.map +1 -0
  72. package/dist/commands/app/shared.js +122 -0
  73. package/dist/commands/app/shared.js.map +1 -0
  74. package/dist/commands/app/sync.d.ts +7 -0
  75. package/dist/commands/app/sync.d.ts.map +1 -0
  76. package/dist/commands/app/sync.js +107 -0
  77. package/dist/commands/app/sync.js.map +1 -0
  78. package/dist/commands/booking/check.d.ts +3 -0
  79. package/dist/commands/booking/check.d.ts.map +1 -0
  80. package/dist/commands/booking/check.js +68 -0
  81. package/dist/commands/booking/check.js.map +1 -0
  82. package/dist/commands/booking/setup.d.ts +3 -0
  83. package/dist/commands/booking/setup.d.ts.map +1 -0
  84. package/dist/commands/booking/setup.js +95 -0
  85. package/dist/commands/booking/setup.js.map +1 -0
  86. package/dist/commands/booking/shared.d.ts +31 -0
  87. package/dist/commands/booking/shared.d.ts.map +1 -0
  88. package/dist/commands/booking/shared.js +112 -0
  89. package/dist/commands/booking/shared.js.map +1 -0
  90. package/dist/commands/booking/smoke.d.ts +3 -0
  91. package/dist/commands/booking/smoke.d.ts.map +1 -0
  92. package/dist/commands/booking/smoke.js +101 -0
  93. package/dist/commands/booking/smoke.js.map +1 -0
  94. package/dist/commands/cms/bind.d.ts +3 -0
  95. package/dist/commands/cms/bind.d.ts.map +1 -0
  96. package/dist/commands/cms/bind.js +212 -0
  97. package/dist/commands/cms/bind.js.map +1 -0
  98. package/dist/commands/cms/content.d.ts +40 -0
  99. package/dist/commands/cms/content.d.ts.map +1 -0
  100. package/dist/commands/cms/content.js +169 -0
  101. package/dist/commands/cms/content.js.map +1 -0
  102. package/dist/commands/cms/doctor.d.ts +3 -0
  103. package/dist/commands/cms/doctor.d.ts.map +1 -0
  104. package/dist/commands/cms/doctor.js +69 -0
  105. package/dist/commands/cms/doctor.js.map +1 -0
  106. package/dist/commands/cms/migrate.d.ts +3 -0
  107. package/dist/commands/cms/migrate.d.ts.map +1 -0
  108. package/dist/commands/cms/migrate.js +78 -0
  109. package/dist/commands/cms/migrate.js.map +1 -0
  110. package/dist/commands/cms/registry.d.ts +3 -0
  111. package/dist/commands/cms/registry.d.ts.map +1 -0
  112. package/dist/commands/cms/registry.js +161 -0
  113. package/dist/commands/cms/registry.js.map +1 -0
  114. package/dist/commands/cms/seed.d.ts +3 -0
  115. package/dist/commands/cms/seed.d.ts.map +1 -0
  116. package/dist/commands/cms/seed.js +102 -0
  117. package/dist/commands/cms/seed.js.map +1 -0
  118. package/dist/commands/cms/shared.d.ts +22 -0
  119. package/dist/commands/cms/shared.d.ts.map +1 -0
  120. package/dist/commands/cms/shared.js +82 -0
  121. package/dist/commands/cms/shared.js.map +1 -0
  122. package/dist/commands/doctor/target.d.ts +3 -0
  123. package/dist/commands/doctor/target.d.ts.map +1 -0
  124. package/dist/commands/doctor/target.js +46 -0
  125. package/dist/commands/doctor/target.js.map +1 -0
  126. package/dist/commands/env/list.d.ts +3 -0
  127. package/dist/commands/env/list.d.ts.map +1 -0
  128. package/dist/commands/env/list.js +28 -0
  129. package/dist/commands/env/list.js.map +1 -0
  130. package/dist/commands/env/set.d.ts +3 -0
  131. package/dist/commands/env/set.d.ts.map +1 -0
  132. package/dist/commands/env/set.js +36 -0
  133. package/dist/commands/env/set.js.map +1 -0
  134. package/dist/commands/env/use.d.ts +3 -0
  135. package/dist/commands/env/use.d.ts.map +1 -0
  136. package/dist/commands/env/use.js +15 -0
  137. package/dist/commands/env/use.js.map +1 -0
  138. package/dist/commands/legacy/connect.d.ts +3 -0
  139. package/dist/commands/legacy/connect.d.ts.map +1 -0
  140. package/dist/commands/legacy/connect.js +8 -0
  141. package/dist/commands/legacy/connect.js.map +1 -0
  142. package/dist/commands/legacy/pages.d.ts +3 -0
  143. package/dist/commands/legacy/pages.d.ts.map +1 -0
  144. package/dist/commands/legacy/pages.js +16 -0
  145. package/dist/commands/legacy/pages.js.map +1 -0
  146. package/dist/commands/legacy/spread.d.ts +3 -0
  147. package/dist/commands/legacy/spread.d.ts.map +1 -0
  148. package/dist/commands/legacy/spread.js +8 -0
  149. package/dist/commands/legacy/spread.js.map +1 -0
  150. package/dist/commands/legacy/sync.d.ts +3 -0
  151. package/dist/commands/legacy/sync.d.ts.map +1 -0
  152. package/dist/commands/legacy/sync.js +8 -0
  153. package/dist/commands/legacy/sync.js.map +1 -0
  154. package/dist/config/env-diff.d.ts +10 -0
  155. package/dist/config/env-diff.d.ts.map +1 -0
  156. package/dist/config/env-diff.js +24 -0
  157. package/dist/config/env-diff.js.map +1 -0
  158. package/dist/config/env-parser.d.ts +20 -0
  159. package/dist/config/env-parser.d.ts.map +1 -0
  160. package/dist/config/env-parser.js +70 -0
  161. package/dist/config/env-parser.js.map +1 -0
  162. package/dist/config/env-writer.d.ts +22 -0
  163. package/dist/config/env-writer.d.ts.map +1 -0
  164. package/dist/config/env-writer.js +172 -0
  165. package/dist/config/env-writer.js.map +1 -0
  166. package/dist/config/profile-store.d.ts +29 -0
  167. package/dist/config/profile-store.d.ts.map +1 -0
  168. package/dist/config/profile-store.js +257 -0
  169. package/dist/config/profile-store.js.map +1 -0
  170. package/dist/core/args.d.ts +11 -0
  171. package/dist/core/args.d.ts.map +1 -0
  172. package/dist/core/args.js +106 -0
  173. package/dist/core/args.js.map +1 -0
  174. package/dist/core/colors.d.ts +6 -0
  175. package/dist/core/colors.d.ts.map +1 -0
  176. package/dist/core/colors.js +29 -0
  177. package/dist/core/colors.js.map +1 -0
  178. package/dist/safety/target-guard.d.ts +16 -0
  179. package/dist/safety/target-guard.d.ts.map +1 -0
  180. package/dist/safety/target-guard.js +55 -0
  181. package/dist/safety/target-guard.js.map +1 -0
  182. package/dist/testing/booking-smoke.d.ts +17 -0
  183. package/dist/testing/booking-smoke.d.ts.map +1 -0
  184. package/dist/testing/booking-smoke.js +43 -0
  185. package/dist/testing/booking-smoke.js.map +1 -0
  186. package/dist/tests/agent-commands.test.d.ts +2 -0
  187. package/dist/tests/agent-commands.test.d.ts.map +1 -0
  188. package/dist/tests/agent-commands.test.js +180 -0
  189. package/dist/tests/agent-commands.test.js.map +1 -0
  190. package/dist/tests/agent-governance.test.d.ts +2 -0
  191. package/dist/tests/agent-governance.test.d.ts.map +1 -0
  192. package/dist/tests/agent-governance.test.js +233 -0
  193. package/dist/tests/agent-governance.test.js.map +1 -0
  194. package/dist/tests/app-commands.test.d.ts +2 -0
  195. package/dist/tests/app-commands.test.d.ts.map +1 -0
  196. package/dist/tests/app-commands.test.js +462 -0
  197. package/dist/tests/app-commands.test.js.map +1 -0
  198. package/dist/tests/booking-commands.test.d.ts +2 -0
  199. package/dist/tests/booking-commands.test.d.ts.map +1 -0
  200. package/dist/tests/booking-commands.test.js +204 -0
  201. package/dist/tests/booking-commands.test.js.map +1 -0
  202. package/dist/tests/booking-smoke.test.d.ts +2 -0
  203. package/dist/tests/booking-smoke.test.d.ts.map +1 -0
  204. package/dist/tests/booking-smoke.test.js +183 -0
  205. package/dist/tests/booking-smoke.test.js.map +1 -0
  206. package/dist/tests/cms-commands.test.d.ts +2 -0
  207. package/dist/tests/cms-commands.test.d.ts.map +1 -0
  208. package/dist/tests/cms-commands.test.js +254 -0
  209. package/dist/tests/cms-commands.test.js.map +1 -0
  210. package/dist/tests/cms-ops.test.d.ts +2 -0
  211. package/dist/tests/cms-ops.test.d.ts.map +1 -0
  212. package/dist/tests/cms-ops.test.js +125 -0
  213. package/dist/tests/cms-ops.test.js.map +1 -0
  214. package/dist/tests/env-writer.test.d.ts +2 -0
  215. package/dist/tests/env-writer.test.d.ts.map +1 -0
  216. package/dist/tests/env-writer.test.js +90 -0
  217. package/dist/tests/env-writer.test.js.map +1 -0
  218. package/dist/tests/profile-store.test.d.ts +2 -0
  219. package/dist/tests/profile-store.test.d.ts.map +1 -0
  220. package/dist/tests/profile-store.test.js +88 -0
  221. package/dist/tests/profile-store.test.js.map +1 -0
  222. package/dist/tests/target-guard.test.d.ts +2 -0
  223. package/dist/tests/target-guard.test.d.ts.map +1 -0
  224. package/dist/tests/target-guard.test.js +132 -0
  225. package/dist/tests/target-guard.test.js.map +1 -0
  226. package/dist/ui/logo.d.ts +2 -0
  227. package/dist/ui/logo.d.ts.map +1 -0
  228. package/dist/ui/logo.js +22 -0
  229. package/dist/ui/logo.js.map +1 -0
  230. package/package.json +17 -53
  231. package/.claude/settings.local.json +0 -36
  232. package/.cursor/rules.md +0 -203
  233. package/.eslintrc.js +0 -31
  234. package/CLAUDE.md +0 -100
  235. package/bin/cli.js +0 -116
  236. package/docs/ADDING_FRAMEWORK_DETECTORS.md +0 -391
  237. package/docs/ADDING_NEW_PROJECT_TYPE.md +0 -156
  238. package/docs/ARCHITECTURE_RELATIONSHIPS.md +0 -411
  239. package/docs/CLI_AUTHENTICATION.md +0 -214
  240. package/docs/CLI_PAGE_DETECTION_REQUIREMENTS.md +0 -519
  241. package/docs/CRM-PIPELINES-SEQUENCES-SPEC.md +0 -429
  242. package/docs/DETECTOR_ARCHITECTURE.md +0 -326
  243. package/docs/DEVELOPMENT.md +0 -194
  244. package/docs/IMPLEMENTATION_PHASES.md +0 -468
  245. package/docs/INTEGRATION_PATHS_ARCHITECTURE.md +0 -1543
  246. package/docs/OAUTH_CLARIFICATION.md +0 -258
  247. package/docs/OAUTH_SETUP_GUIDE_TEMPLATE.md +0 -211
  248. package/docs/PHASE_0_PROGRESS.md +0 -120
  249. package/docs/PHASE_1_COMPLETE.md +0 -366
  250. package/docs/PHASE_SUMMARY.md +0 -149
  251. package/docs/PLAN.md +0 -511
  252. package/docs/README.md +0 -56
  253. package/docs/STRIPE_INTEGRATION.md +0 -447
  254. package/docs/SUMMARY.md +0 -230
  255. package/docs/UPDATED_PLAN.md +0 -447
  256. package/docs/mcp_server/MCP_EXTENSION_GUIDE.md +0 -1313
  257. package/docs/mcp_server/MCP_SERVER_ARCHITECTURE.md +0 -1481
  258. package/docs/mcp_server/applicationOntology.ts +0 -817
  259. package/docs/mcp_server/cliApplications.ts +0 -639
  260. package/docs/mcp_server/crmOntology.ts +0 -1063
  261. package/docs/mcp_server/eventOntology.ts +0 -1183
  262. package/docs/mcp_server/formsOntology.ts +0 -1401
  263. package/docs/mcp_server/ontologySchemas.ts +0 -185
  264. package/docs/mcp_server/schema.ts +0 -250
  265. package/docs/microsass_production_machine/CLI_API_REFERENCE.md +0 -1197
  266. package/docs/microsass_production_machine/CLI_PRODUCT_VISION.md +0 -676
  267. package/docs/microsass_production_machine/CLI_REQUIREMENTS.md +0 -606
  268. package/docs/microsass_production_machine/CONNECTED_APPLICATIONS_SPEC.md +0 -390
  269. package/docs/microsass_production_machine/IMPLEMENTATION_ROADMAP.md +0 -725
  270. package/docs/microsass_production_machine/OBJECT_MAPPINGS.md +0 -808
  271. package/docs/microsass_production_machine/REFERENCE_IMPLEMENTATION.md +0 -532
  272. package/src/api/backend-client.js +0 -449
  273. package/src/commands/api-keys.js +0 -119
  274. package/src/commands/connect.js +0 -243
  275. package/src/commands/login.js +0 -332
  276. package/src/commands/logout.js +0 -30
  277. package/src/commands/mcp-server.js +0 -85
  278. package/src/commands/mcp-setup.js +0 -686
  279. package/src/commands/pages.js +0 -317
  280. package/src/commands/scaffold.js +0 -409
  281. package/src/commands/spread.js +0 -861
  282. package/src/commands/status.js +0 -62
  283. package/src/commands/sync.js +0 -169
  284. package/src/commands/upgrade.js +0 -48
  285. package/src/config/config-manager.js +0 -206
  286. package/src/detectors/api-client-detector.js +0 -85
  287. package/src/detectors/base-detector.js +0 -77
  288. package/src/detectors/database-detector.js +0 -245
  289. package/src/detectors/expo-detector.js +0 -166
  290. package/src/detectors/github-detector.js +0 -74
  291. package/src/detectors/index.js +0 -106
  292. package/src/detectors/mapping-suggestor.js +0 -119
  293. package/src/detectors/model-detector.js +0 -318
  294. package/src/detectors/nextjs-detector.js +0 -139
  295. package/src/detectors/oauth-detector.js +0 -122
  296. package/src/detectors/page-detector.js +0 -480
  297. package/src/detectors/registry.js +0 -121
  298. package/src/generators/api-client-generator.js +0 -223
  299. package/src/generators/api-only/client.js +0 -683
  300. package/src/generators/api-only/index.js +0 -96
  301. package/src/generators/api-only/types.js +0 -618
  302. package/src/generators/api-only/webhooks.js +0 -377
  303. package/src/generators/env-generator.js +0 -191
  304. package/src/generators/expo-auth-generator.js +0 -1009
  305. package/src/generators/gitignore-generator.js +0 -92
  306. package/src/generators/index.js +0 -166
  307. package/src/generators/manifest-generator.js +0 -154
  308. package/src/generators/mcp-guide-generator.js +0 -256
  309. package/src/generators/nextauth-generator.js +0 -247
  310. package/src/generators/oauth-guide-generator.js +0 -277
  311. package/src/generators/quickstart/components/index.js +0 -1699
  312. package/src/generators/quickstart/components-mobile/index.js +0 -1440
  313. package/src/generators/quickstart/database/convex.js +0 -1257
  314. package/src/generators/quickstart/database/index.js +0 -34
  315. package/src/generators/quickstart/database/supabase.js +0 -1132
  316. package/src/generators/quickstart/hooks/index.js +0 -1065
  317. package/src/generators/quickstart/index.js +0 -191
  318. package/src/generators/quickstart/pages/index.js +0 -1466
  319. package/src/generators/quickstart/screens/index.js +0 -1498
  320. package/src/logo.js +0 -116
  321. package/src/mcp/auth.js +0 -127
  322. package/src/mcp/registry/domains/applications.js +0 -516
  323. package/src/mcp/registry/domains/benefits.js +0 -798
  324. package/src/mcp/registry/domains/codegen.js +0 -894
  325. package/src/mcp/registry/domains/core.js +0 -324
  326. package/src/mcp/registry/domains/crm.js +0 -591
  327. package/src/mcp/registry/domains/events.js +0 -649
  328. package/src/mcp/registry/domains/forms.js +0 -696
  329. package/src/mcp/registry/index.js +0 -164
  330. package/src/mcp/server.js +0 -116
  331. package/src/utils/file-utils.js +0 -117
  332. package/src/utils/init-helpers.js +0 -243
  333. package/src/utils/prompt-utils.js +0 -195
  334. package/templates/CLAUDE.md +0 -86
  335. package/tests/api-client-detector.test.js +0 -214
  336. package/tests/api-client-generator.test.js +0 -176
  337. package/tests/backend-client.test.js +0 -640
  338. package/tests/base-detector.test.js +0 -101
  339. package/tests/commands/login.test.js +0 -143
  340. package/tests/commands/logout.test.js +0 -84
  341. package/tests/commands/status.test.js +0 -167
  342. package/tests/config-manager.test.js +0 -321
  343. package/tests/database-detector.test.js +0 -221
  344. package/tests/detector-index.test.js +0 -209
  345. package/tests/detector-registry.test.js +0 -93
  346. package/tests/env-generator.test.js +0 -278
  347. package/tests/expo-detector.test.js +0 -263
  348. package/tests/file-utils.test.js +0 -194
  349. package/tests/generators-index.test.js +0 -454
  350. package/tests/github-detector.test.js +0 -145
  351. package/tests/gitignore-generator.test.js +0 -109
  352. package/tests/logo.test.js +0 -96
  353. package/tests/nextauth-generator.test.js +0 -255
  354. package/tests/nextjs-detector.test.js +0 -235
  355. package/tests/oauth-detector.test.js +0 -264
  356. package/tests/oauth-guide-generator.test.js +0 -273
  357. package/tests/page-detector.test.js +0 -371
@@ -1,686 +0,0 @@
1
- /**
2
- * MCP Setup Command
3
- *
4
- * Configures MCP clients to use the L4YERCAK3 MCP server.
5
- * Supports Claude Code CLI, Claude Desktop, and other MCP-compatible clients.
6
- *
7
- * @module commands/mcp-setup
8
- */
9
-
10
- const fs = require('fs');
11
- const path = require('path');
12
- const os = require('os');
13
- const { execSync } = require('child_process');
14
- const chalk = require('chalk');
15
- const inquirer = require('inquirer');
16
- const configManager = require('../config/config-manager');
17
- const backendClient = require('../api/backend-client');
18
-
19
- /**
20
- * Check if Claude CLI is installed
21
- */
22
- function isClaudeInstalled() {
23
- try {
24
- execSync('claude --version', { stdio: 'pipe' });
25
- return true;
26
- } catch {
27
- return false;
28
- }
29
- }
30
-
31
- /**
32
- * Check if MCP server is already configured in Claude
33
- */
34
- function isMcpConfigured() {
35
- try {
36
- const result = execSync('claude mcp list', {
37
- stdio: 'pipe',
38
- encoding: 'utf8'
39
- });
40
- return result.includes('l4yercak3');
41
- } catch {
42
- return false;
43
- }
44
- }
45
-
46
- /**
47
- * Configure Claude MCP with l4yercak3 server
48
- */
49
- async function configureMcp(scope = 'user') {
50
- const scopeFlag = scope === 'project' ? '--scope project' : '';
51
- const command = `claude mcp add l4yercak3 ${scopeFlag} -- npx @l4yercak3/cli mcp-server`.trim();
52
-
53
- try {
54
- execSync(command, { stdio: 'inherit' });
55
- return true;
56
- } catch (error) {
57
- console.error(chalk.red(`Failed to configure MCP: ${error.message}`));
58
- return false;
59
- }
60
- }
61
-
62
- /**
63
- * Remove existing MCP configuration from Claude Code
64
- */
65
- function removeMcpConfig() {
66
- try {
67
- execSync('claude mcp remove l4yercak3', { stdio: 'pipe' });
68
- return true;
69
- } catch {
70
- return false;
71
- }
72
- }
73
-
74
- /**
75
- * Get Claude Desktop config path based on platform
76
- */
77
- function getClaudeDesktopConfigPath() {
78
- const platform = os.platform();
79
- const home = os.homedir();
80
-
81
- if (platform === 'darwin') {
82
- return path.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
83
- } else if (platform === 'win32') {
84
- return path.join(process.env.APPDATA || home, 'Claude', 'claude_desktop_config.json');
85
- } else {
86
- // Linux
87
- return path.join(home, '.config', 'Claude', 'claude_desktop_config.json');
88
- }
89
- }
90
-
91
- /**
92
- * Get the full path to npx executable
93
- * Claude Desktop needs absolute paths since it doesn't inherit shell PATH
94
- */
95
- function getNpxPath() {
96
- try {
97
- const npxPath = execSync('which npx', { stdio: 'pipe', encoding: 'utf8' }).trim();
98
- return npxPath || 'npx';
99
- } catch {
100
- // Fallback to common locations
101
- const commonPaths = [
102
- '/usr/local/bin/npx',
103
- '/opt/homebrew/bin/npx',
104
- '/usr/bin/npx',
105
- path.join(os.homedir(), '.nvm/versions/node', 'current', 'bin', 'npx'),
106
- ];
107
-
108
- for (const p of commonPaths) {
109
- if (fs.existsSync(p)) {
110
- return p;
111
- }
112
- }
113
-
114
- return 'npx'; // Last resort fallback
115
- }
116
- }
117
-
118
- /**
119
- * Get the full path to l4yercak3 CLI if globally installed
120
- * Returns null if not found
121
- */
122
- function getL4yercak3Path() {
123
- try {
124
- const cliPath = execSync('which l4yercak3', { stdio: 'pipe', encoding: 'utf8' }).trim();
125
- return cliPath || null;
126
- } catch {
127
- return null;
128
- }
129
- }
130
-
131
- /**
132
- * Get the best command configuration for Claude Desktop
133
- * Prefers globally installed l4yercak3 over npx for reliability
134
- */
135
- function getClaudeDesktopCommand() {
136
- const l4yercak3Path = getL4yercak3Path();
137
-
138
- if (l4yercak3Path) {
139
- // Use globally installed CLI directly (more reliable)
140
- return {
141
- command: l4yercak3Path,
142
- args: ['mcp-server'],
143
- description: `${l4yercak3Path} mcp-server`
144
- };
145
- }
146
-
147
- // Fall back to npx
148
- const npxPath = getNpxPath();
149
- return {
150
- command: npxPath,
151
- args: ['@l4yercak3/cli', 'mcp-server'],
152
- description: `${npxPath} @l4yercak3/cli mcp-server`
153
- };
154
- }
155
-
156
- /**
157
- * Check if Claude Desktop config exists
158
- */
159
- function hasClaudeDesktopConfig() {
160
- return fs.existsSync(getClaudeDesktopConfigPath());
161
- }
162
-
163
- /**
164
- * Configure Claude Desktop with l4yercak3 MCP server
165
- */
166
- function configureClaudeDesktop() {
167
- const configPath = getClaudeDesktopConfigPath();
168
- let config = { mcpServers: {} };
169
-
170
- // Read existing config if it exists
171
- if (fs.existsSync(configPath)) {
172
- try {
173
- const content = fs.readFileSync(configPath, 'utf8');
174
- config = JSON.parse(content);
175
- if (!config.mcpServers) {
176
- config.mcpServers = {};
177
- }
178
- } catch {
179
- // If parsing fails, start fresh but preserve the file structure
180
- config = { mcpServers: {} };
181
- }
182
- } else {
183
- // Ensure directory exists
184
- const configDir = path.dirname(configPath);
185
- if (!fs.existsSync(configDir)) {
186
- fs.mkdirSync(configDir, { recursive: true });
187
- }
188
- }
189
-
190
- // Add l4yercak3 server with full path
191
- // Claude Desktop doesn't inherit shell PATH, so we need absolute paths
192
- const cmdConfig = getClaudeDesktopCommand();
193
-
194
- config.mcpServers.l4yercak3 = {
195
- command: cmdConfig.command,
196
- args: cmdConfig.args
197
- };
198
-
199
- // Write config
200
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf8');
201
- return { configPath, commandDescription: cmdConfig.description };
202
- }
203
-
204
- /**
205
- * Remove l4yercak3 from Claude Desktop config
206
- */
207
- function removeClaudeDesktopConfig() {
208
- const configPath = getClaudeDesktopConfigPath();
209
-
210
- if (!fs.existsSync(configPath)) {
211
- return false;
212
- }
213
-
214
- try {
215
- const content = fs.readFileSync(configPath, 'utf8');
216
- const config = JSON.parse(content);
217
-
218
- if (config.mcpServers && config.mcpServers.l4yercak3) {
219
- delete config.mcpServers.l4yercak3;
220
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf8');
221
- return true;
222
- }
223
- } catch {
224
- return false;
225
- }
226
-
227
- return false;
228
- }
229
-
230
- /**
231
- * Check if l4yercak3 is configured in Claude Desktop
232
- */
233
- function isClaudeDesktopConfigured() {
234
- const configPath = getClaudeDesktopConfigPath();
235
-
236
- if (!fs.existsSync(configPath)) {
237
- return false;
238
- }
239
-
240
- try {
241
- const content = fs.readFileSync(configPath, 'utf8');
242
- const config = JSON.parse(content);
243
- return config.mcpServers && config.mcpServers.l4yercak3;
244
- } catch {
245
- return false;
246
- }
247
- }
248
-
249
- module.exports = {
250
- command: 'mcp-setup',
251
- description: 'Configure MCP clients to use the L4YERCAK3 server',
252
- handler: async () => {
253
- console.log('');
254
- console.log(chalk.bold.hex('#9F7AEA')('🔧 L4YERCAK3 MCP Setup\n'));
255
-
256
- // Check if logged in
257
- const session = configManager.getSession();
258
- if (!session || !session.token) {
259
- console.log(chalk.yellow('⚠️ Not logged in to L4YERCAK3'));
260
- console.log(chalk.gray(' Run `l4yercak3 login` first to authenticate.\n'));
261
- console.log(chalk.gray(' The MCP server needs your session to access L4YERCAK3 features.'));
262
- process.exit(1);
263
- }
264
-
265
- // Validate session and get user info
266
- let userEmail = session.email;
267
- if (!userEmail) {
268
- try {
269
- const userInfo = await backendClient.validateSession();
270
- if (userInfo && userInfo.email) {
271
- userEmail = userInfo.email;
272
- // Update stored session with email for future use
273
- configManager.saveSession({ ...session, email: userEmail, userId: userInfo.userId });
274
- }
275
- } catch {
276
- // Validation failed, continue without email display
277
- }
278
- }
279
-
280
- console.log(chalk.green('✓ Logged in') + (userEmail ? chalk.gray(` as ${userEmail}`) : ''));
281
- console.log('');
282
-
283
- // Detect available clients
284
- const hasClaudeCli = isClaudeInstalled();
285
-
286
- // Build client choices
287
- const clientChoices = [];
288
-
289
- if (hasClaudeCli) {
290
- const configured = isMcpConfigured();
291
- clientChoices.push({
292
- name: `Claude Code (CLI)${configured ? chalk.gray(' - already configured') : ''}`,
293
- value: 'claude-code',
294
- configured
295
- });
296
- }
297
-
298
- clientChoices.push({
299
- name: `Claude Desktop${isClaudeDesktopConfigured() ? chalk.gray(' - already configured') : ''}`,
300
- value: 'claude-desktop',
301
- configured: isClaudeDesktopConfigured()
302
- });
303
-
304
- clientChoices.push({
305
- name: 'VS Code',
306
- value: 'vscode'
307
- });
308
-
309
- clientChoices.push({
310
- name: 'Cursor',
311
- value: 'cursor'
312
- });
313
-
314
- clientChoices.push({
315
- name: 'Windsurf',
316
- value: 'windsurf'
317
- });
318
-
319
- clientChoices.push({
320
- name: 'Zed',
321
- value: 'zed'
322
- });
323
-
324
- clientChoices.push({
325
- name: 'Other MCP client (show manual instructions)',
326
- value: 'other'
327
- });
328
-
329
- // Ask which client to configure
330
- const { client } = await inquirer.prompt([
331
- {
332
- type: 'list',
333
- name: 'client',
334
- message: 'Which MCP client would you like to configure?',
335
- choices: clientChoices,
336
- },
337
- ]);
338
-
339
- console.log('');
340
-
341
- if (client === 'claude-code') {
342
- await setupClaudeCode();
343
- } else if (client === 'claude-desktop') {
344
- await setupClaudeDesktop();
345
- } else if (client === 'vscode') {
346
- showVSCodeInstructions();
347
- } else if (client === 'cursor') {
348
- showCursorInstructions();
349
- } else if (client === 'windsurf') {
350
- showWindsurfInstructions();
351
- } else if (client === 'zed') {
352
- showZedInstructions();
353
- } else {
354
- showOtherClientInstructions();
355
- }
356
- },
357
- };
358
-
359
- /**
360
- * Setup Claude Code CLI
361
- */
362
- async function setupClaudeCode() {
363
- const alreadyConfigured = isMcpConfigured();
364
-
365
- if (alreadyConfigured) {
366
- const { action } = await inquirer.prompt([
367
- {
368
- type: 'list',
369
- name: 'action',
370
- message: 'L4YERCAK3 is already configured. What would you like to do?',
371
- choices: [
372
- { name: 'Keep existing configuration', value: 'keep' },
373
- { name: 'Reconfigure (remove and re-add)', value: 'reconfigure' },
374
- { name: 'Remove configuration', value: 'remove' },
375
- ],
376
- },
377
- ]);
378
-
379
- if (action === 'keep') {
380
- console.log(chalk.gray('\nKeeping existing configuration.'));
381
- showUsageInstructions('Claude Code');
382
- return;
383
- }
384
-
385
- if (action === 'remove') {
386
- removeMcpConfig();
387
- console.log(chalk.green('\n✓ L4YERCAK3 MCP server removed from Claude Code'));
388
- return;
389
- }
390
-
391
- removeMcpConfig();
392
- console.log(chalk.gray('Removed existing configuration...'));
393
- }
394
-
395
- // Ask for scope
396
- const { scope } = await inquirer.prompt([
397
- {
398
- type: 'list',
399
- name: 'scope',
400
- message: 'Where should the MCP server be configured?',
401
- choices: [
402
- { name: 'User (global) - Available in all projects', value: 'user' },
403
- { name: 'Project - Only for current directory', value: 'project' },
404
- ],
405
- default: 'user',
406
- },
407
- ]);
408
-
409
- console.log('');
410
- console.log(chalk.gray('Configuring Claude Code...'));
411
-
412
- const success = await configureMcp(scope);
413
-
414
- if (success) {
415
- console.log('');
416
- console.log(chalk.green.bold('✓ L4YERCAK3 MCP server configured for Claude Code!\n'));
417
- showUsageInstructions('Claude Code');
418
- } else {
419
- console.log('');
420
- console.log(chalk.red('Failed to configure MCP server.'));
421
- console.log(chalk.gray('\nYou can try manual configuration:'));
422
- console.log(chalk.cyan(' claude mcp add l4yercak3 -- npx @l4yercak3/cli mcp-server'));
423
- }
424
- }
425
-
426
- /**
427
- * Setup Claude Desktop
428
- */
429
- async function setupClaudeDesktop() {
430
- const alreadyConfigured = isClaudeDesktopConfigured();
431
-
432
- if (alreadyConfigured) {
433
- const { action } = await inquirer.prompt([
434
- {
435
- type: 'list',
436
- name: 'action',
437
- message: 'L4YERCAK3 is already configured. What would you like to do?',
438
- choices: [
439
- { name: 'Keep existing configuration', value: 'keep' },
440
- { name: 'Reconfigure', value: 'reconfigure' },
441
- { name: 'Remove configuration', value: 'remove' },
442
- ],
443
- },
444
- ]);
445
-
446
- if (action === 'keep') {
447
- console.log(chalk.gray('\nKeeping existing configuration.'));
448
- showUsageInstructions('Claude Desktop');
449
- return;
450
- }
451
-
452
- if (action === 'remove') {
453
- removeClaudeDesktopConfig();
454
- console.log(chalk.green('\n✓ L4YERCAK3 MCP server removed from Claude Desktop'));
455
- console.log(chalk.gray(' Restart Claude Desktop for changes to take effect.'));
456
- return;
457
- }
458
- }
459
-
460
- console.log(chalk.gray('Configuring Claude Desktop...'));
461
-
462
- try {
463
- const { configPath, commandDescription } = configureClaudeDesktop();
464
- console.log('');
465
- console.log(chalk.green.bold('✓ L4YERCAK3 MCP server configured for Claude Desktop!\n'));
466
- console.log(chalk.gray(` Config: ${configPath}`));
467
- console.log(chalk.gray(` Command: ${commandDescription}`));
468
- console.log(chalk.yellow('\n ⚠️ Restart Claude Desktop for changes to take effect.'));
469
- console.log(chalk.gray(' (Using absolute path since Claude Desktop doesn\'t inherit your shell PATH)\n'));
470
- showUsageInstructions('Claude Desktop');
471
- } catch (error) {
472
- console.log('');
473
- console.log(chalk.red(`Failed to configure Claude Desktop: ${error.message}`));
474
- showClaudeDesktopManualInstructions();
475
- }
476
- }
477
-
478
- /**
479
- * Show manual instructions for Claude Desktop
480
- */
481
- function showClaudeDesktopManualInstructions() {
482
- const configPath = getClaudeDesktopConfigPath();
483
- const cmdConfig = getClaudeDesktopCommand();
484
-
485
- console.log(chalk.gray('\nManual configuration:'));
486
- console.log(chalk.gray(` Edit: ${configPath}`));
487
- console.log('');
488
- console.log(chalk.white(' Add to mcpServers (use absolute paths):'));
489
- console.log(chalk.cyan(' {'));
490
- console.log(chalk.cyan(' "mcpServers": {'));
491
- console.log(chalk.cyan(' "l4yercak3": {'));
492
- console.log(chalk.cyan(` "command": "${cmdConfig.command}",`));
493
- console.log(chalk.cyan(` "args": ${JSON.stringify(cmdConfig.args)}`));
494
- console.log(chalk.cyan(' }'));
495
- console.log(chalk.cyan(' }'));
496
- console.log(chalk.cyan(' }'));
497
- console.log('');
498
- console.log(chalk.gray(' Note: Claude Desktop doesn\'t inherit your shell PATH.'));
499
- console.log(chalk.gray(` Find paths with: ${chalk.cyan('which l4yercak3')} or ${chalk.cyan('which npx')}`));
500
- console.log('');
501
- }
502
-
503
- /**
504
- * Show VS Code setup instructions
505
- */
506
- function showVSCodeInstructions() {
507
- console.log(chalk.bold('🔧 VS Code MCP Setup\n'));
508
-
509
- const cmdConfig = getClaudeDesktopCommand();
510
-
511
- console.log(chalk.white(' VS Code supports MCP through various extensions.\n'));
512
-
513
- console.log(chalk.gray(' Add this MCP server configuration to your extension:'));
514
- console.log('');
515
- console.log(chalk.cyan(' {'));
516
- console.log(chalk.cyan(' "mcpServers": {'));
517
- console.log(chalk.cyan(' "l4yercak3": {'));
518
- console.log(chalk.cyan(` "command": "${cmdConfig.command}",`));
519
- console.log(chalk.cyan(` "args": ${JSON.stringify(cmdConfig.args)}`));
520
- console.log(chalk.cyan(' }'));
521
- console.log(chalk.cyan(' }'));
522
- console.log(chalk.cyan(' }'));
523
- console.log('');
524
-
525
- console.log(chalk.gray(' Check your extension\'s docs for where to add MCP servers.'));
526
- console.log(chalk.gray(` Server command: ${cmdConfig.description}`));
527
- console.log('');
528
- }
529
-
530
- /**
531
- * Show Cursor setup instructions
532
- */
533
- function showCursorInstructions() {
534
- console.log(chalk.bold('🔧 Cursor MCP Setup\n'));
535
-
536
- console.log(chalk.white(' Cursor supports MCP servers through its settings.\n'));
537
-
538
- const cmdConfig = getClaudeDesktopCommand();
539
- const configPath = os.platform() === 'darwin'
540
- ? '~/.cursor/mcp.json'
541
- : os.platform() === 'win32'
542
- ? '%APPDATA%\\Cursor\\mcp.json'
543
- : '~/.config/cursor/mcp.json';
544
-
545
- console.log(chalk.gray(` 1. Create or edit: ${configPath}`));
546
- console.log(chalk.gray(' 2. Add the following configuration:\n'));
547
-
548
- console.log(chalk.cyan(' {'));
549
- console.log(chalk.cyan(' "mcpServers": {'));
550
- console.log(chalk.cyan(' "l4yercak3": {'));
551
- console.log(chalk.cyan(` "command": "${cmdConfig.command}",`));
552
- console.log(chalk.cyan(` "args": ${JSON.stringify(cmdConfig.args)}`));
553
- console.log(chalk.cyan(' }'));
554
- console.log(chalk.cyan(' }'));
555
- console.log(chalk.cyan(' }'));
556
- console.log('');
557
-
558
- console.log(chalk.gray(' 3. Restart Cursor for changes to take effect'));
559
- console.log('');
560
-
561
- console.log(chalk.yellow(' Note: Cursor\'s MCP support may vary by version.'));
562
- console.log(chalk.gray(' Check Cursor documentation for the latest setup process.'));
563
- console.log('');
564
- }
565
-
566
- /**
567
- * Show Windsurf setup instructions
568
- */
569
- function showWindsurfInstructions() {
570
- console.log(chalk.bold('🔧 Windsurf (Codeium) MCP Setup\n'));
571
-
572
- console.log(chalk.white(' Windsurf supports MCP through Cascade.\n'));
573
-
574
- const cmdConfig = getClaudeDesktopCommand();
575
- const configPath = os.platform() === 'darwin'
576
- ? '~/.codeium/windsurf/mcp_config.json'
577
- : os.platform() === 'win32'
578
- ? '%APPDATA%\\Codeium\\windsurf\\mcp_config.json'
579
- : '~/.config/codeium/windsurf/mcp_config.json';
580
-
581
- console.log(chalk.gray(` 1. Create or edit: ${configPath}`));
582
- console.log(chalk.gray(' 2. Add the following configuration:\n'));
583
-
584
- console.log(chalk.cyan(' {'));
585
- console.log(chalk.cyan(' "mcpServers": {'));
586
- console.log(chalk.cyan(' "l4yercak3": {'));
587
- console.log(chalk.cyan(` "command": "${cmdConfig.command}",`));
588
- console.log(chalk.cyan(` "args": ${JSON.stringify(cmdConfig.args)}`));
589
- console.log(chalk.cyan(' }'));
590
- console.log(chalk.cyan(' }'));
591
- console.log(chalk.cyan(' }'));
592
- console.log('');
593
-
594
- console.log(chalk.gray(' 3. Restart Windsurf for changes to take effect'));
595
- console.log('');
596
-
597
- console.log(chalk.gray(' Once configured, you can use L4YERCAK3 tools through Cascade.'));
598
- console.log('');
599
- }
600
-
601
- /**
602
- * Show Zed setup instructions
603
- */
604
- function showZedInstructions() {
605
- console.log(chalk.bold('🔧 Zed MCP Setup\n'));
606
-
607
- console.log(chalk.white(' Zed supports MCP servers through its settings.\n'));
608
-
609
- const cmdConfig = getClaudeDesktopCommand();
610
- const configPath = os.platform() === 'darwin'
611
- ? '~/.config/zed/settings.json'
612
- : '~/.config/zed/settings.json';
613
-
614
- console.log(chalk.gray(` 1. Open Zed settings: ${configPath}`));
615
- console.log(chalk.gray(' 2. Add or update the context_servers section:\n'));
616
-
617
- console.log(chalk.cyan(' {'));
618
- console.log(chalk.cyan(' "context_servers": {'));
619
- console.log(chalk.cyan(' "l4yercak3": {'));
620
- console.log(chalk.cyan(` "command": {`));
621
- console.log(chalk.cyan(` "path": "${cmdConfig.command}",`));
622
- console.log(chalk.cyan(` "args": ${JSON.stringify(cmdConfig.args)}`));
623
- console.log(chalk.cyan(' }'));
624
- console.log(chalk.cyan(' }'));
625
- console.log(chalk.cyan(' }'));
626
- console.log(chalk.cyan(' }'));
627
- console.log('');
628
-
629
- console.log(chalk.gray(' 3. Restart Zed or reload the configuration'));
630
- console.log('');
631
-
632
- console.log(chalk.gray(' See https://zed.dev/docs/context-servers for more details.'));
633
- console.log('');
634
- }
635
-
636
- /**
637
- * Show instructions for other MCP clients
638
- */
639
- function showOtherClientInstructions() {
640
- console.log(chalk.bold('🔌 Manual MCP Configuration\n'));
641
-
642
- console.log(chalk.white(' Server command:'));
643
- console.log(chalk.cyan(' npx @l4yercak3/cli mcp-server\n'));
644
-
645
- console.log(chalk.white(' Transport: ') + chalk.cyan('stdio\n'));
646
-
647
- console.log(chalk.white(' Compatible clients include:'));
648
- console.log(chalk.gray(' • Cursor'));
649
- console.log(chalk.gray(' • Cody (Sourcegraph)'));
650
- console.log(chalk.gray(' • Continue'));
651
- console.log(chalk.gray(' • Zed'));
652
- console.log(chalk.gray(' • Any MCP-compatible AI assistant'));
653
- console.log('');
654
-
655
- console.log(chalk.white(' JSON configuration format:'));
656
- console.log(chalk.cyan(' {'));
657
- console.log(chalk.cyan(' "command": "npx",'));
658
- console.log(chalk.cyan(' "args": ["@l4yercak3/cli", "mcp-server"],'));
659
- console.log(chalk.cyan(' "transport": "stdio"'));
660
- console.log(chalk.cyan(' }'));
661
- console.log('');
662
-
663
- console.log(chalk.gray(' Refer to your client\'s documentation for where to add this config.\n'));
664
- }
665
-
666
- /**
667
- * Show usage instructions after setup
668
- */
669
- function showUsageInstructions(clientName = 'your AI assistant') {
670
- console.log(chalk.bold('📖 How to use:\n'));
671
-
672
- console.log(chalk.white(` In ${clientName}, you can now:`));
673
- console.log(chalk.gray(' • Ask Claude to list your L4YERCAK3 contacts, projects, or invoices'));
674
- console.log(chalk.gray(' • Create or update CRM records through natural language'));
675
- console.log(chalk.gray(' • Get project integration help with context from your L4YERCAK3 data'));
676
- console.log('');
677
-
678
- console.log(chalk.white(' Example prompts:'));
679
- console.log(chalk.cyan(' "Show me my recent contacts in L4YERCAK3"'));
680
- console.log(chalk.cyan(' "Create a new project called Website Redesign"'));
681
- console.log(chalk.cyan(' "What invoices are pending?"'));
682
- console.log('');
683
-
684
- console.log(chalk.gray(' The MCP server runs automatically when needed.'));
685
- console.log(chalk.gray(' Your session stays active until you run `l4yercak3 logout`.\n'));
686
- }