@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,62 +0,0 @@
1
- /**
2
- * Status Command
3
- * Shows authentication status and user info
4
- */
5
-
6
- const configManager = require('../config/config-manager');
7
- const backendClient = require('../api/backend-client');
8
- const chalk = require('chalk');
9
-
10
- async function handleStatus() {
11
- const isLoggedIn = configManager.isLoggedIn();
12
- const session = configManager.getSession();
13
-
14
- console.log(chalk.bold(' Authentication Status\n'));
15
-
16
- if (!isLoggedIn) {
17
- console.log(chalk.red(' ❌ Not logged in'));
18
- console.log(chalk.gray('\n Run "l4yercak3 login" to authenticate\n'));
19
- return;
20
- }
21
-
22
- console.log(chalk.green(' ✅ Logged in\n'));
23
-
24
- if (session) {
25
- if (session.email) {
26
- console.log(chalk.gray(` Email: ${session.email}`));
27
- }
28
- if (session.expiresAt) {
29
- const expiresDate = new Date(session.expiresAt);
30
- const now = Date.now();
31
- const daysLeft = Math.floor((session.expiresAt - now) / (24 * 60 * 60 * 1000));
32
-
33
- if (daysLeft > 0) {
34
- console.log(chalk.gray(` Session expires: ${expiresDate.toLocaleString()} (${daysLeft} days)`));
35
- } else {
36
- console.log(chalk.yellow(` ⚠️ Session expired: ${expiresDate.toLocaleString()}`));
37
- }
38
- }
39
- }
40
-
41
- // Try to validate session with backend
42
- try {
43
- const userInfo = await backendClient.validateSession();
44
- if (userInfo) {
45
- console.log(chalk.gray(`\n Backend URL: ${configManager.getBackendUrl()}`));
46
- if (userInfo.organizations && userInfo.organizations.length > 0) {
47
- console.log(chalk.gray(` Organizations: ${userInfo.organizations.length}`));
48
- }
49
- }
50
- } catch (error) {
51
- console.log(chalk.yellow(`\n ⚠️ Could not validate session: ${error.message}`));
52
- }
53
-
54
- console.log('');
55
- }
56
-
57
- module.exports = {
58
- command: 'status',
59
- description: 'Show authentication status',
60
- handler: handleStatus,
61
- };
62
-
@@ -1,169 +0,0 @@
1
- /**
2
- * Sync Command
3
- * Re-detects project structure and syncs the manifest with the L4YERCAK3 platform
4
- *
5
- * Flow:
6
- * 1. Re-run all detectors (models, routes, pages)
7
- * 2. Re-compute suggested mappings
8
- * 3. Diff old manifest vs new detection results
9
- * 4. Write updated .l4yercak3.json
10
- * 5. Push manifest to platform if connected
11
- */
12
-
13
- const configManager = require('../config/config-manager');
14
- const backendClient = require('../api/backend-client');
15
- const projectDetector = require('../detectors');
16
- const pageDetector = require('../detectors/page-detector');
17
- const { suggestMappings } = require('../detectors/mapping-suggestor');
18
- const manifestGenerator = require('../generators/manifest-generator');
19
- const { requireAuth } = require('../utils/init-helpers');
20
- const chalk = require('chalk');
21
-
22
- async function handleSync() {
23
- requireAuth(configManager);
24
-
25
- console.log(chalk.cyan(' 🔄 Syncing project structure...\n'));
26
-
27
- try {
28
- const projectPath = process.cwd();
29
-
30
- // Step 1: Load existing manifest
31
- const existingManifest = manifestGenerator.loadManifest(projectPath);
32
- if (!existingManifest) {
33
- console.log(chalk.yellow(' ⚠️ No .l4yercak3.json manifest found.'));
34
- console.log(chalk.gray(' Run "l4yercak3 init" first to scan your project.\n'));
35
- process.exit(1);
36
- }
37
-
38
- console.log(chalk.gray(' Loading existing manifest...'));
39
- console.log(chalk.gray(` Framework: ${existingManifest.framework}`));
40
- console.log(chalk.gray(` Models: ${existingManifest.detectedModels?.length || 0}`));
41
- console.log(chalk.gray(` Routes: ${existingManifest.detectedRoutes?.length || 0}`));
42
- console.log(chalk.gray(` Last synced: ${existingManifest.lastSyncedAt || 'never'}\n`));
43
-
44
- // Step 2: Re-run detection
45
- console.log(chalk.gray(' 🔍 Re-scanning project...\n'));
46
- const detection = projectDetector.detect(projectPath);
47
-
48
- // Step 3: Re-scan routes with methods
49
- const detectedRoutes = pageDetector.detect(
50
- projectPath,
51
- detection.framework.type,
52
- detection.framework.metadata || {}
53
- );
54
-
55
- // Step 4: Re-compute mappings
56
- const models = detection.models ? detection.models.models : [];
57
- const mappings = suggestMappings(models);
58
-
59
- // Step 5: Build new manifest data for diff
60
- const newManifestData = {
61
- version: existingManifest.version || '1.0.0',
62
- framework: detection.framework.type || existingManifest.framework,
63
- routerType: detection.framework.metadata?.routerType || existingManifest.routerType,
64
- typescript: detection.framework.metadata?.hasTypeScript || existingManifest.typescript,
65
- database: detection.database?.primary?.type || existingManifest.database,
66
- detectedModels: models.map(m => ({
67
- name: m.name,
68
- source: m.source,
69
- fields: m.fields || [],
70
- })),
71
- detectedRoutes: detectedRoutes
72
- .filter(r => r.pageType === 'api_route')
73
- .map(r => ({
74
- path: r.path,
75
- methods: r.methods || ['GET', 'POST'],
76
- })),
77
- suggestedMappings: mappings.map(m => ({
78
- localModel: m.localModel,
79
- platformType: m.platformType,
80
- confidence: m.confidence,
81
- })),
82
- };
83
-
84
- // Step 6: Compute diff
85
- const diff = manifestGenerator.diff(existingManifest, newManifestData);
86
-
87
- if (!diff.hasChanges) {
88
- console.log(chalk.green(' ✅ No changes detected. Your manifest is up to date.\n'));
89
- } else {
90
- console.log(chalk.cyan(' 📊 Changes detected:\n'));
91
-
92
- if (diff.modelsAdded.length > 0) {
93
- console.log(chalk.green(` + ${diff.modelsAdded.length} new model(s)`));
94
- for (const m of diff.modelsAdded) {
95
- console.log(chalk.gray(` • ${m.name} (${m.source})`));
96
- }
97
- }
98
-
99
- if (diff.modelsRemoved.length > 0) {
100
- console.log(chalk.red(` - ${diff.modelsRemoved.length} removed model(s)`));
101
- for (const m of diff.modelsRemoved) {
102
- console.log(chalk.gray(` • ${m.name} (${m.source})`));
103
- }
104
- }
105
-
106
- if (diff.routesAdded.length > 0) {
107
- console.log(chalk.green(` + ${diff.routesAdded.length} new route(s)`));
108
- for (const r of diff.routesAdded) {
109
- console.log(chalk.gray(` • ${r.path} [${(r.methods || []).join(', ')}]`));
110
- }
111
- }
112
-
113
- if (diff.routesRemoved.length > 0) {
114
- console.log(chalk.red(` - ${diff.routesRemoved.length} removed route(s)`));
115
- for (const r of diff.routesRemoved) {
116
- console.log(chalk.gray(` • ${r.path}`));
117
- }
118
- }
119
-
120
- console.log('');
121
- }
122
-
123
- // Step 7: Write updated manifest
124
- manifestGenerator.generate({
125
- projectPath,
126
- detection,
127
- models,
128
- routes: detectedRoutes,
129
- mappings,
130
- });
131
- console.log(chalk.green(` ✅ Manifest updated: .l4yercak3.json`));
132
-
133
- // Step 8: Summary
134
- console.log(chalk.gray(` Models: ${newManifestData.detectedModels.length}`));
135
- console.log(chalk.gray(` Routes: ${newManifestData.detectedRoutes.length}`));
136
- console.log(chalk.gray(` Mappings: ${newManifestData.suggestedMappings.length}\n`));
137
-
138
- // Step 9: Push to platform if connected
139
- const projectConfig = configManager.getProjectConfig(projectPath);
140
- if (projectConfig && projectConfig.applicationId) {
141
- console.log(chalk.gray(' Syncing to platform...'));
142
- try {
143
- const updatedManifest = manifestGenerator.loadManifest(projectPath);
144
- await backendClient.syncManifest(projectConfig.applicationId, updatedManifest);
145
- console.log(chalk.green(' ✅ Manifest synced to L4YERCAK3 platform\n'));
146
- } catch (syncError) {
147
- console.log(chalk.yellow(` ⚠️ Could not sync to platform: ${syncError.message}`));
148
- console.log(chalk.gray(' The manifest was updated locally. Platform sync may not be available yet.\n'));
149
- }
150
- } else {
151
- console.log(chalk.gray(' ℹ️ Not connected to platform. Run "l4yercak3 connect" to enable remote sync.\n'));
152
- }
153
-
154
- console.log(chalk.cyan(' 🎉 Sync complete!\n'));
155
-
156
- } catch (error) {
157
- console.error(chalk.red(`\n ❌ Error: ${error.message}\n`));
158
- if (process.env.L4YERCAK3_DEBUG && error.stack) {
159
- console.error(chalk.gray(error.stack));
160
- }
161
- process.exit(1);
162
- }
163
- }
164
-
165
- module.exports = {
166
- command: 'sync',
167
- description: 'Re-detect project structure and sync with L4YERCAK3',
168
- handler: handleSync,
169
- };
@@ -1,48 +0,0 @@
1
- /**
2
- * Upgrade Command
3
- * Opens the upgrade page in the browser for plan upgrades
4
- */
5
-
6
- const configManager = require('../config/config-manager');
7
- const chalk = require('chalk');
8
- const { default: open } = require('open');
9
-
10
- /**
11
- * Upgrade command handler
12
- */
13
- async function handleUpgrade() {
14
- // Check if logged in
15
- if (!configManager.isLoggedIn()) {
16
- console.log(chalk.yellow(' ⚠️ You must be logged in first'));
17
- console.log(chalk.gray('\n Run "l4yercak3 login" to authenticate\n'));
18
- process.exit(1);
19
- }
20
-
21
- const session = configManager.getSession();
22
- const backendUrl = configManager.getBackendUrl();
23
-
24
- console.log(chalk.cyan(' 🚀 Opening upgrade page...\n'));
25
-
26
- // Build upgrade URL with CLI token for seamless authentication
27
- const upgradeUrl = `${backendUrl}/upgrade?token=${encodeURIComponent(session.token)}&reason=cli_upgrade`;
28
-
29
- console.log(chalk.gray(` URL: ${upgradeUrl}\n`));
30
-
31
- try {
32
- await open(upgradeUrl);
33
- console.log(chalk.green(' ✅ Upgrade page opened in your browser\n'));
34
- console.log(chalk.gray(' Select a plan to unlock more features:'));
35
- console.log(chalk.gray(' • More API keys'));
36
- console.log(chalk.gray(' • Priority support'));
37
- console.log(chalk.gray(' • Advanced features\n'));
38
- } catch (error) {
39
- console.log(chalk.yellow(' ⚠️ Could not open browser automatically'));
40
- console.log(chalk.gray(`\n Please visit: ${upgradeUrl}\n`));
41
- }
42
- }
43
-
44
- module.exports = {
45
- command: 'upgrade',
46
- description: 'Upgrade your L4YERCAK3 plan',
47
- handler: handleUpgrade,
48
- };
@@ -1,206 +0,0 @@
1
- /**
2
- * Configuration Manager
3
- * Handles storing and retrieving CLI configuration and session data
4
- */
5
-
6
- const fs = require('fs');
7
- const path = require('path');
8
- const os = require('os');
9
-
10
- class ConfigManager {
11
- constructor() {
12
- this.configDir = path.join(os.homedir(), '.l4yercak3');
13
- this.configFile = path.join(this.configDir, 'config.json');
14
- }
15
-
16
- /**
17
- * Ensure config directory exists
18
- */
19
- ensureConfigDir() {
20
- if (!fs.existsSync(this.configDir)) {
21
- fs.mkdirSync(this.configDir, { recursive: true, mode: 0o700 });
22
- }
23
- }
24
-
25
- /**
26
- * Get full config object
27
- */
28
- getConfig() {
29
- this.ensureConfigDir();
30
-
31
- if (!fs.existsSync(this.configFile)) {
32
- return {
33
- session: null,
34
- organizations: [],
35
- settings: {
36
- backendUrl: process.env.L4YERCAK3_BACKEND_URL || 'https://agreeable-lion-828.convex.site',
37
- },
38
- };
39
- }
40
-
41
- try {
42
- const data = fs.readFileSync(this.configFile, 'utf8');
43
- return JSON.parse(data);
44
- } catch (error) {
45
- console.error('Error reading config file:', error.message);
46
- return {
47
- session: null,
48
- organizations: [],
49
- settings: {},
50
- };
51
- }
52
- }
53
-
54
- /**
55
- * Save config object
56
- */
57
- saveConfig(config) {
58
- this.ensureConfigDir();
59
-
60
- try {
61
- fs.writeFileSync(
62
- this.configFile,
63
- JSON.stringify(config, null, 2),
64
- { mode: 0o600 } // Read/write for owner only
65
- );
66
- return true;
67
- } catch (error) {
68
- console.error('Error saving config file:', error.message);
69
- return false;
70
- }
71
- }
72
-
73
- /**
74
- * Get current session
75
- */
76
- getSession() {
77
- const config = this.getConfig();
78
- return config.session;
79
- }
80
-
81
- /**
82
- * Save session
83
- */
84
- saveSession(session) {
85
- const config = this.getConfig();
86
- config.session = session;
87
- return this.saveConfig(config);
88
- }
89
-
90
- /**
91
- * Clear session (logout)
92
- */
93
- clearSession() {
94
- const config = this.getConfig();
95
- config.session = null;
96
- return this.saveConfig(config);
97
- }
98
-
99
- /**
100
- * Check if user is logged in
101
- */
102
- isLoggedIn() {
103
- const session = this.getSession();
104
- if (!session || !session.token) {
105
- return false;
106
- }
107
-
108
- // Check expiration
109
- if (session.expiresAt && session.expiresAt < Date.now()) {
110
- return false;
111
- }
112
-
113
- return true;
114
- }
115
-
116
- /**
117
- * Get backend URL from config or env
118
- * This is the Convex HTTP URL for all API calls
119
- */
120
- getBackendUrl() {
121
- const config = this.getConfig();
122
- return config.settings?.backendUrl || process.env.L4YERCAK3_BACKEND_URL || 'https://agreeable-lion-828.convex.site';
123
- }
124
-
125
- /**
126
- * Set backend URL
127
- */
128
- setBackendUrl(url) {
129
- const config = this.getConfig();
130
- if (!config.settings) {
131
- config.settings = {};
132
- }
133
- config.settings.backendUrl = url;
134
- return this.saveConfig(config);
135
- }
136
-
137
- /**
138
- * Add organization to config
139
- */
140
- addOrganization(org) {
141
- const config = this.getConfig();
142
- if (!config.organizations) {
143
- config.organizations = [];
144
- }
145
-
146
- // Remove if exists
147
- config.organizations = config.organizations.filter(o => o.id !== org.id);
148
-
149
- // Add new
150
- config.organizations.push(org);
151
-
152
- return this.saveConfig(config);
153
- }
154
-
155
- /**
156
- * Get organizations
157
- */
158
- getOrganizations() {
159
- const config = this.getConfig();
160
- return config.organizations || [];
161
- }
162
-
163
- /**
164
- * Save project configuration
165
- * Stores configuration for a specific project (by project path)
166
- */
167
- saveProjectConfig(projectPath, projectConfig) {
168
- const config = this.getConfig();
169
- if (!config.projects) {
170
- config.projects = {};
171
- }
172
-
173
- // Normalize project path (use absolute path)
174
- const normalizedPath = path.resolve(projectPath);
175
- config.projects[normalizedPath] = {
176
- ...projectConfig,
177
- updatedAt: Date.now(),
178
- };
179
-
180
- return this.saveConfig(config);
181
- }
182
-
183
- /**
184
- * Get project configuration
185
- */
186
- getProjectConfig(projectPath) {
187
- const config = this.getConfig();
188
- if (!config.projects) {
189
- return null;
190
- }
191
-
192
- const normalizedPath = path.resolve(projectPath);
193
- return config.projects[normalizedPath] || null;
194
- }
195
-
196
- /**
197
- * Get all project configurations
198
- */
199
- getAllProjectConfigs() {
200
- const config = this.getConfig();
201
- return config.projects || {};
202
- }
203
- }
204
-
205
- module.exports = new ConfigManager();
206
-
@@ -1,85 +0,0 @@
1
- /**
2
- * API Client Pattern Detector
3
- * Detects existing API client implementations
4
- */
5
-
6
- const fs = require('fs');
7
- const path = require('path');
8
-
9
- class ApiClientDetector {
10
- /**
11
- * Detect existing API client patterns
12
- */
13
- detect(projectPath = process.cwd()) {
14
- const results = {
15
- hasApiClient: false,
16
- clientPath: null,
17
- clientType: null, // 'fetch', 'axios', 'custom'
18
- hasEnvFile: false,
19
- envFilePath: null,
20
- };
21
-
22
- // Common API client locations
23
- const clientPaths = [
24
- 'lib/api-client.ts',
25
- 'lib/api-client.js',
26
- 'lib/api.ts',
27
- 'lib/api.js',
28
- 'src/lib/api-client.ts',
29
- 'src/lib/api-client.js',
30
- 'src/lib/api.ts',
31
- 'src/lib/api.js',
32
- 'utils/api-client.ts',
33
- 'utils/api-client.js',
34
- 'utils/api.ts',
35
- 'utils/api.js',
36
- 'src/utils/api-client.ts',
37
- 'src/utils/api-client.js',
38
- ];
39
-
40
- // Check for existing API client
41
- for (const clientPath of clientPaths) {
42
- const fullPath = path.join(projectPath, clientPath);
43
- if (fs.existsSync(fullPath)) {
44
- results.hasApiClient = true;
45
- results.clientPath = clientPath;
46
-
47
- // Try to detect client type
48
- try {
49
- const content = fs.readFileSync(fullPath, 'utf8');
50
- if (content.includes('axios')) {
51
- results.clientType = 'axios';
52
- } else if (content.includes('fetch')) {
53
- results.clientType = 'fetch';
54
- } else {
55
- results.clientType = 'custom';
56
- }
57
- } catch (error) {
58
- results.clientType = 'unknown';
59
- }
60
- break;
61
- }
62
- }
63
-
64
- // Check for environment files
65
- const envFiles = [
66
- '.env.local',
67
- '.env',
68
- '.env.development',
69
- '.env.production',
70
- ];
71
-
72
- for (const envFile of envFiles) {
73
- const fullPath = path.join(projectPath, envFile);
74
- if (fs.existsSync(fullPath)) {
75
- results.hasEnvFile = true;
76
- results.envFilePath = envFile;
77
- break;
78
- }
79
- }
80
-
81
- return results;
82
- }
83
- }
84
-
85
- module.exports = new ApiClientDetector();
@@ -1,77 +0,0 @@
1
- /**
2
- * Base Detector Class
3
- *
4
- * All project type detectors should extend this class or implement its interface.
5
- * This provides a consistent API for detection across all project types.
6
- */
7
-
8
- class BaseDetector {
9
- /**
10
- * Unique identifier for this project type
11
- * @returns {string} Detector name (e.g., 'nextjs', 'react', 'vue')
12
- */
13
- get name() {
14
- throw new Error('Detector must implement name getter');
15
- }
16
-
17
- /**
18
- * Detection priority (higher = checked first)
19
- * Range: 0-100
20
- *
21
- * Priority guidelines:
22
- * - 100: Very specific frameworks (Next.js, Nuxt, SvelteKit)
23
- * - 75: Framework with build tool (Vite + React, Webpack + Vue)
24
- * - 50: Pure frameworks (React, Vue, Svelte)
25
- * - 25: Generic JavaScript/TypeScript projects
26
- *
27
- * @returns {number} Priority value
28
- */
29
- get priority() {
30
- return 50; // Default priority
31
- }
32
-
33
- /**
34
- * Detect if project matches this type
35
- *
36
- * @param {string} projectPath - Path to project directory (defaults to process.cwd())
37
- * @returns {object} Detection result with:
38
- * - detected: {boolean} Is this the project type?
39
- * - confidence: {number} 0-1, how sure are we?
40
- * - metadata: {object} Type-specific information
41
- */
42
- detect(_projectPath = process.cwd()) {
43
- throw new Error('Detector must implement detect() method');
44
- }
45
-
46
- /**
47
- * Get supported features for this project type
48
- *
49
- * @returns {object} Feature support matrix:
50
- * - oauth: {boolean|'manual'} true = full support, 'manual' = guide only, false = not supported
51
- * - stripe: {boolean} Stripe integration support
52
- * - crm: {boolean} CRM features support
53
- * - projects: {boolean} Projects feature support
54
- * - invoices: {boolean} Invoices feature support
55
- */
56
- getSupportedFeatures() {
57
- return {
58
- oauth: false,
59
- stripe: false,
60
- crm: false,
61
- projects: false,
62
- invoices: false,
63
- };
64
- }
65
-
66
- /**
67
- * Get available generators for this project type
68
- *
69
- * @returns {string[]} List of generator names that work with this project type
70
- */
71
- getAvailableGenerators() {
72
- return ['api-client', 'env']; // Default: shared generators only
73
- }
74
- }
75
-
76
- module.exports = BaseDetector;
77
-