@cortexmemory/cli 0.1.1 → 0.22.1

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 (103) hide show
  1. package/README.md +8 -0
  2. package/dist/commands/conversations.d.ts +1 -1
  3. package/dist/commands/conversations.d.ts.map +1 -1
  4. package/dist/commands/conversations.js +57 -27
  5. package/dist/commands/conversations.js.map +1 -1
  6. package/dist/commands/convex.d.ts +1 -1
  7. package/dist/commands/convex.d.ts.map +1 -1
  8. package/dist/commands/convex.js +237 -64
  9. package/dist/commands/convex.js.map +1 -1
  10. package/dist/commands/db.d.ts +1 -1
  11. package/dist/commands/db.d.ts.map +1 -1
  12. package/dist/commands/db.js +59 -109
  13. package/dist/commands/db.js.map +1 -1
  14. package/dist/commands/dev.d.ts +8 -8
  15. package/dist/commands/dev.d.ts.map +1 -1
  16. package/dist/commands/dev.js +734 -513
  17. package/dist/commands/dev.js.map +1 -1
  18. package/dist/commands/facts.d.ts +1 -1
  19. package/dist/commands/facts.d.ts.map +1 -1
  20. package/dist/commands/facts.js +50 -21
  21. package/dist/commands/facts.js.map +1 -1
  22. package/dist/commands/init.d.ts +28 -0
  23. package/dist/commands/init.d.ts.map +1 -0
  24. package/dist/commands/init.js +895 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/memory.d.ts +1 -1
  27. package/dist/commands/memory.d.ts.map +1 -1
  28. package/dist/commands/memory.js +64 -27
  29. package/dist/commands/memory.js.map +1 -1
  30. package/dist/commands/setup.d.ts +4 -5
  31. package/dist/commands/setup.d.ts.map +1 -1
  32. package/dist/commands/setup.js +428 -250
  33. package/dist/commands/setup.js.map +1 -1
  34. package/dist/commands/spaces.d.ts +1 -1
  35. package/dist/commands/spaces.d.ts.map +1 -1
  36. package/dist/commands/spaces.js +100 -43
  37. package/dist/commands/spaces.js.map +1 -1
  38. package/dist/commands/status.d.ts +17 -0
  39. package/dist/commands/status.d.ts.map +1 -0
  40. package/dist/commands/status.js +314 -0
  41. package/dist/commands/status.js.map +1 -0
  42. package/dist/commands/users.d.ts +1 -1
  43. package/dist/commands/users.d.ts.map +1 -1
  44. package/dist/commands/users.js +80 -42
  45. package/dist/commands/users.js.map +1 -1
  46. package/dist/index.js +42 -14
  47. package/dist/index.js.map +1 -1
  48. package/dist/types.d.ts +11 -0
  49. package/dist/types.d.ts.map +1 -1
  50. package/dist/utils/__tests__/client.test.d.ts +5 -0
  51. package/dist/utils/__tests__/client.test.d.ts.map +1 -0
  52. package/dist/utils/__tests__/client.test.js +88 -0
  53. package/dist/utils/__tests__/client.test.js.map +1 -0
  54. package/dist/utils/__tests__/env-file.test.d.ts +7 -0
  55. package/dist/utils/__tests__/env-file.test.d.ts.map +1 -0
  56. package/dist/utils/__tests__/env-file.test.js +196 -0
  57. package/dist/utils/__tests__/env-file.test.js.map +1 -0
  58. package/dist/utils/__tests__/shell.test.d.ts +7 -0
  59. package/dist/utils/__tests__/shell.test.d.ts.map +1 -0
  60. package/dist/utils/__tests__/shell.test.js +89 -0
  61. package/dist/utils/__tests__/shell.test.js.map +1 -0
  62. package/dist/utils/config.d.ts.map +1 -1
  63. package/dist/utils/config.js +12 -39
  64. package/dist/utils/config.js.map +1 -1
  65. package/dist/utils/deployment-selector.d.ts +50 -0
  66. package/dist/utils/deployment-selector.d.ts.map +1 -0
  67. package/dist/utils/deployment-selector.js +129 -0
  68. package/dist/utils/deployment-selector.js.map +1 -0
  69. package/dist/utils/init/convex-setup.d.ts +30 -0
  70. package/dist/utils/init/convex-setup.d.ts.map +1 -0
  71. package/dist/utils/init/convex-setup.js +225 -0
  72. package/dist/utils/init/convex-setup.js.map +1 -0
  73. package/dist/utils/init/env-generator.d.ts +32 -0
  74. package/dist/utils/init/env-generator.d.ts.map +1 -0
  75. package/dist/utils/init/env-generator.js +210 -0
  76. package/dist/utils/init/env-generator.js.map +1 -0
  77. package/dist/utils/init/file-operations.d.ts +22 -0
  78. package/dist/utils/init/file-operations.d.ts.map +1 -0
  79. package/dist/utils/init/file-operations.js +211 -0
  80. package/dist/utils/init/file-operations.js.map +1 -0
  81. package/dist/utils/init/graph-setup.d.ts +35 -0
  82. package/dist/utils/init/graph-setup.d.ts.map +1 -0
  83. package/dist/utils/init/graph-setup.js +413 -0
  84. package/dist/utils/init/graph-setup.js.map +1 -0
  85. package/dist/utils/init/index.d.ts +11 -0
  86. package/dist/utils/init/index.d.ts.map +1 -0
  87. package/dist/utils/init/index.js +11 -0
  88. package/dist/utils/init/index.js.map +1 -0
  89. package/dist/utils/init/types.d.ts +73 -0
  90. package/dist/utils/init/types.d.ts.map +1 -0
  91. package/dist/utils/init/types.js +5 -0
  92. package/dist/utils/init/types.js.map +1 -0
  93. package/dist/utils/shell.d.ts +60 -0
  94. package/dist/utils/shell.d.ts.map +1 -0
  95. package/dist/utils/shell.js +188 -0
  96. package/dist/utils/shell.js.map +1 -0
  97. package/package.json +25 -20
  98. package/templates/basic/README.md +105 -0
  99. package/templates/basic/dev-runner.mjs +215 -0
  100. package/templates/basic/package-lock.json +1263 -0
  101. package/templates/basic/package.json +22 -0
  102. package/templates/basic/src/index.ts +85 -0
  103. package/templates/basic/tsconfig.json +17 -0
@@ -0,0 +1,413 @@
1
+ /**
2
+ * Graph database setup
3
+ *
4
+ * Handles setting up Neo4j or Memgraph for the init wizard.
5
+ */
6
+ import fs from "fs-extra";
7
+ import path from "path";
8
+ import prompts from "prompts";
9
+ import ora from "ora";
10
+ import pc from "picocolors";
11
+ import { createGraphDockerCompose } from "./env-generator.js";
12
+ import { execCommand } from "../shell.js";
13
+ /**
14
+ * Check if Docker is installed
15
+ */
16
+ async function checkDockerInstalled() {
17
+ try {
18
+ const result = await execCommand("docker", ["--version"], { quiet: true });
19
+ return result.code === 0;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ /**
26
+ * Show Docker installation instructions
27
+ */
28
+ function showDockerInstructions() {
29
+ console.log(pc.yellow("\n Docker Desktop is not installed\n"));
30
+ console.log(pc.bold("To use local graph database, please install Docker Desktop:\n"));
31
+ const platform = process.platform;
32
+ if (platform === "darwin") {
33
+ console.log(pc.cyan("macOS:"));
34
+ console.log(pc.dim(" 1. Download Docker Desktop: https://www.docker.com/products/docker-desktop"));
35
+ console.log(pc.dim(" 2. Install and start Docker Desktop"));
36
+ console.log(pc.dim(" 3. Run the wizard again\n"));
37
+ }
38
+ else if (platform === "win32") {
39
+ console.log(pc.cyan("Windows:"));
40
+ console.log(pc.dim(" 1. Download Docker Desktop: https://www.docker.com/products/docker-desktop"));
41
+ console.log(pc.dim(" 2. Install and start Docker Desktop"));
42
+ console.log(pc.dim(" 3. Run the wizard again\n"));
43
+ }
44
+ else {
45
+ console.log(pc.cyan("Linux:"));
46
+ console.log(pc.dim(" 1. Install Docker Engine: https://docs.docker.com/engine/install/"));
47
+ console.log(pc.dim(" 2. Install Docker Compose: https://docs.docker.com/compose/install/"));
48
+ console.log(pc.dim(" 3. Run the wizard again\n"));
49
+ }
50
+ console.log(pc.dim('Or choose "Cloud/Existing instance" to use a remote graph database.\n'));
51
+ }
52
+ /**
53
+ * Get graph database configuration (prompts only, no file creation)
54
+ */
55
+ export async function getGraphConfig() {
56
+ console.log(pc.cyan("\n Graph Database Setup"));
57
+ console.log(pc.dim(" Graph databases enable advanced relationship queries"));
58
+ console.log(pc.dim(" Recommended for production use\n"));
59
+ const { enableGraph } = await prompts({
60
+ type: "confirm",
61
+ name: "enableGraph",
62
+ message: "Enable graph database integration?",
63
+ initial: true,
64
+ });
65
+ if (!enableGraph) {
66
+ console.log(pc.dim(" Skipping graph database setup"));
67
+ return null;
68
+ }
69
+ const { graphType } = await prompts({
70
+ type: "select",
71
+ name: "graphType",
72
+ message: "Which graph database would you like to use?",
73
+ choices: [
74
+ { title: "Neo4j (Most popular, enterprise-ready)", value: "neo4j" },
75
+ {
76
+ title: "Memgraph (High-performance, analytics-focused)",
77
+ value: "memgraph",
78
+ },
79
+ { title: "Skip for now", value: "skip" },
80
+ ],
81
+ initial: 0,
82
+ });
83
+ if (!graphType || graphType === "skip") {
84
+ return null;
85
+ }
86
+ // Check for Docker if user wants local deployment
87
+ const hasDocker = await checkDockerInstalled();
88
+ const deploymentChoices = [
89
+ { title: "Local (Docker Compose)", value: "local", disabled: !hasDocker },
90
+ { title: "Cloud/Existing instance", value: "cloud" },
91
+ ];
92
+ if (!hasDocker) {
93
+ console.log(pc.yellow(" Docker not detected - local deployment unavailable"));
94
+ }
95
+ const { deploymentType } = await prompts({
96
+ type: "select",
97
+ name: "deploymentType",
98
+ message: `How would you like to run ${graphType === "neo4j" ? "Neo4j" : "Memgraph"}?`,
99
+ choices: deploymentChoices,
100
+ initial: hasDocker ? 0 : 1,
101
+ });
102
+ if (!deploymentType) {
103
+ return null;
104
+ }
105
+ // If local was selected but Docker isn't installed, show instructions
106
+ if (deploymentType === "local" && !hasDocker) {
107
+ showDockerInstructions();
108
+ return null;
109
+ }
110
+ let config;
111
+ if (deploymentType === "local") {
112
+ config = await getLocalGraphConfig(graphType);
113
+ }
114
+ else {
115
+ config = await getCloudGraphConfig(graphType);
116
+ }
117
+ console.log(pc.green("\n Graph database configured"));
118
+ console.log(pc.dim(` Type: ${config.type}`));
119
+ console.log(pc.dim(` URI: ${config.uri}`));
120
+ return config;
121
+ }
122
+ /**
123
+ * Create graph database files (docker-compose, etc.)
124
+ */
125
+ export async function setupGraphFiles(projectPath, config) {
126
+ // Only create docker-compose for local deployments
127
+ if (config.uri.includes("localhost") || config.uri.includes("127.0.0.1")) {
128
+ await createGraphDockerCompose(projectPath, config.type);
129
+ }
130
+ }
131
+ /**
132
+ * Get local graph database configuration
133
+ */
134
+ async function getLocalGraphConfig(graphType) {
135
+ const defaultPort = 7687;
136
+ const defaultPassword = "cortex-password";
137
+ console.log(pc.cyan(`\n Local ${graphType} will be configured with Docker Compose`));
138
+ if (graphType === "neo4j") {
139
+ console.log(pc.dim(" Neo4j Browser: http://localhost:7474"));
140
+ console.log(pc.dim(" Bolt: bolt://localhost:7687\n"));
141
+ }
142
+ else {
143
+ console.log(pc.dim(" Memgraph Lab: http://localhost:3000"));
144
+ console.log(pc.dim(" Bolt: bolt://localhost:7687\n"));
145
+ }
146
+ return {
147
+ type: graphType,
148
+ uri: `bolt://localhost:${defaultPort}`,
149
+ username: graphType === "neo4j" ? "neo4j" : "memgraph",
150
+ password: defaultPassword,
151
+ };
152
+ }
153
+ /**
154
+ * Start graph database containers
155
+ */
156
+ export async function startGraphContainers(projectPath, graphType) {
157
+ const dockerComposePath = path.join(projectPath, "docker-compose.graph.yml");
158
+ if (!fs.existsSync(dockerComposePath)) {
159
+ console.log(pc.yellow(" docker-compose.graph.yml not found"));
160
+ return false;
161
+ }
162
+ const spinner = ora(`Starting ${graphType} containers...`).start();
163
+ const containerName = `cortex-${graphType}`;
164
+ try {
165
+ // Check if containers are already running
166
+ const checkResult = await execCommand("docker", ["ps", "--filter", `name=${containerName}`, "--format", "{{.Status}}"], { cwd: projectPath, quiet: true });
167
+ if (checkResult.stdout.includes("Up")) {
168
+ spinner.succeed(`${graphType} is already running`);
169
+ showGraphConnectionInfo(graphType);
170
+ return true;
171
+ }
172
+ // Check if container exists but is stopped (from a previous run)
173
+ const existsResult = await execCommand("docker", ["ps", "-a", "--filter", `name=${containerName}`, "--format", "{{.Names}}"], { cwd: projectPath, quiet: true });
174
+ if (existsResult.stdout.includes(containerName)) {
175
+ // Container exists, try to start it first
176
+ spinner.text = `Starting existing ${graphType} container...`;
177
+ const startResult = await execCommand("docker", ["start", containerName], { cwd: projectPath, quiet: true });
178
+ if (startResult.code === 0) {
179
+ await waitForGraphReady(spinner, graphType);
180
+ spinner.succeed(`${graphType} is running`);
181
+ showGraphConnectionInfo(graphType);
182
+ return true;
183
+ }
184
+ // If start failed, remove the old container and recreate
185
+ spinner.text = `Removing old ${graphType} container...`;
186
+ await execCommand("docker", ["rm", "-f", containerName], { cwd: projectPath, quiet: true });
187
+ }
188
+ // Pull images first (may take time on first run)
189
+ spinner.text = `Pulling ${graphType} image (this may take a few minutes on first run)...`;
190
+ await execCommand("docker", ["compose", "-f", "docker-compose.graph.yml", "pull"], { cwd: projectPath, quiet: true });
191
+ // Start containers
192
+ spinner.text = `Starting ${graphType} containers...`;
193
+ const result = await execCommand("docker", ["compose", "-f", "docker-compose.graph.yml", "up", "-d"], { cwd: projectPath, quiet: true });
194
+ if (result.code !== 0) {
195
+ spinner.fail(`Failed to start ${graphType}`);
196
+ console.log(pc.dim(` Error: ${result.stderr}`));
197
+ return false;
198
+ }
199
+ // Wait for container to be healthy
200
+ await waitForGraphReady(spinner, graphType);
201
+ spinner.succeed(`${graphType} is running`);
202
+ showGraphConnectionInfo(graphType);
203
+ return true;
204
+ }
205
+ catch (error) {
206
+ spinner.fail(`Failed to start ${graphType}`);
207
+ console.log(pc.dim(` Error: ${error}`));
208
+ return false;
209
+ }
210
+ }
211
+ /**
212
+ * Wait for graph database to be ready
213
+ */
214
+ async function waitForGraphReady(spinner, graphType) {
215
+ spinner.text = `Waiting for ${graphType} to be ready...`;
216
+ const maxWait = 60; // seconds
217
+ const startTime = Date.now();
218
+ while ((Date.now() - startTime) / 1000 < maxWait) {
219
+ const healthCheck = await execCommand("docker", ["ps", "--filter", `name=cortex-${graphType}`, "--format", "{{.Status}}"], { quiet: true });
220
+ if (healthCheck.stdout.includes("Up")) {
221
+ // Give it a moment to fully initialize
222
+ await new Promise((resolve) => setTimeout(resolve, 3000));
223
+ return;
224
+ }
225
+ await new Promise((resolve) => setTimeout(resolve, 2000));
226
+ }
227
+ }
228
+ /**
229
+ * Show graph database connection info
230
+ */
231
+ function showGraphConnectionInfo(graphType) {
232
+ if (graphType === "neo4j") {
233
+ console.log(pc.dim(" Browser: http://localhost:7474"));
234
+ console.log(pc.dim(" Bolt: bolt://localhost:7687"));
235
+ console.log(pc.dim(" Default login: neo4j / cortex-password"));
236
+ }
237
+ else {
238
+ console.log(pc.dim(" Memgraph Lab: http://localhost:3000"));
239
+ console.log(pc.dim(" Bolt: bolt://localhost:7687"));
240
+ }
241
+ }
242
+ /**
243
+ * Stop graph database containers
244
+ */
245
+ export async function stopGraphContainers(projectPath) {
246
+ const dockerComposePath = path.join(projectPath, "docker-compose.graph.yml");
247
+ if (!fs.existsSync(dockerComposePath)) {
248
+ return false;
249
+ }
250
+ const spinner = ora("Stopping graph database containers...").start();
251
+ try {
252
+ const result = await execCommand("docker", ["compose", "-f", "docker-compose.graph.yml", "down"], { cwd: projectPath, quiet: true });
253
+ if (result.code === 0) {
254
+ spinner.succeed("Graph database containers stopped");
255
+ return true;
256
+ }
257
+ else {
258
+ spinner.fail("Failed to stop containers");
259
+ return false;
260
+ }
261
+ }
262
+ catch {
263
+ spinner.fail("Failed to stop containers");
264
+ return false;
265
+ }
266
+ }
267
+ /**
268
+ * Check if graph containers are running
269
+ */
270
+ export async function isGraphRunning(graphType) {
271
+ try {
272
+ const result = await execCommand("docker", ["ps", "--filter", `name=cortex-${graphType}`, "--format", "{{.Status}}"], { quiet: true });
273
+ return result.stdout.includes("Up");
274
+ }
275
+ catch {
276
+ return false;
277
+ }
278
+ }
279
+ /**
280
+ * Get cloud/existing graph database configuration
281
+ */
282
+ async function getCloudGraphConfig(graphType) {
283
+ console.log(pc.cyan("\n Enter your graph database connection details:"));
284
+ const response = await prompts([
285
+ {
286
+ type: "text",
287
+ name: "uri",
288
+ message: "Database URI (e.g., bolt://localhost:7687):",
289
+ initial: "bolt://localhost:7687",
290
+ validate: (value) => {
291
+ if (!value)
292
+ return "URI is required";
293
+ if (!value.startsWith("bolt://") && !value.startsWith("neo4j://")) {
294
+ return "URI must start with bolt:// or neo4j://";
295
+ }
296
+ return true;
297
+ },
298
+ },
299
+ {
300
+ type: "text",
301
+ name: "username",
302
+ message: "Username:",
303
+ initial: graphType === "neo4j" ? "neo4j" : "memgraph",
304
+ },
305
+ {
306
+ type: "password",
307
+ name: "password",
308
+ message: "Password:",
309
+ },
310
+ ]);
311
+ if (!response.uri || !response.username || !response.password) {
312
+ throw new Error("All connection details are required");
313
+ }
314
+ console.log(pc.green(" Connection details saved"));
315
+ console.log(pc.dim(" Connection will be tested when you start your app"));
316
+ return {
317
+ type: graphType,
318
+ uri: response.uri,
319
+ username: response.username,
320
+ password: response.password,
321
+ };
322
+ }
323
+ /**
324
+ * Add graph database dependencies to package.json
325
+ */
326
+ export async function addGraphDependencies(projectPath) {
327
+ const packageJsonPath = path.join(projectPath, "package.json");
328
+ if (!fs.existsSync(packageJsonPath)) {
329
+ throw new Error("package.json not found");
330
+ }
331
+ const packageJson = await fs.readJson(packageJsonPath);
332
+ // Add neo4j-driver if not present
333
+ if (!packageJson.dependencies) {
334
+ packageJson.dependencies = {};
335
+ }
336
+ if (!packageJson.dependencies["neo4j-driver"]) {
337
+ packageJson.dependencies["neo4j-driver"] = "^6.0.0";
338
+ await fs.writeJson(packageJsonPath, packageJson, { spaces: 2 });
339
+ console.log(pc.dim(" Added neo4j-driver to dependencies"));
340
+ }
341
+ }
342
+ /**
343
+ * Create example graph initialization file
344
+ */
345
+ export async function createGraphExample(projectPath) {
346
+ const examplePath = path.join(projectPath, "src", "graph-init.example.ts");
347
+ const exampleCode = `/**
348
+ * Graph Database Initialization Example
349
+ *
350
+ * This file shows how to initialize and use the graph database
351
+ * with Cortex Memory SDK.
352
+ */
353
+
354
+ import { Cortex } from '@cortexmemory/sdk';
355
+ import { CypherGraphAdapter, initializeGraphSchema } from '@cortexmemory/sdk/graph';
356
+
357
+ async function initializeGraph() {
358
+ // 1. Create graph adapter
359
+ const graphAdapter = new CypherGraphAdapter();
360
+
361
+ // 2. Connect to graph database
362
+ await graphAdapter.connect({
363
+ uri: process.env.NEO4J_URI || 'bolt://localhost:7687',
364
+ username: process.env.NEO4J_USERNAME || 'neo4j',
365
+ password: process.env.NEO4J_PASSWORD || 'cortex-password',
366
+ });
367
+
368
+ // 3. Initialize schema (constraints and indexes)
369
+ await initializeGraphSchema(graphAdapter);
370
+
371
+ // 4. Initialize Cortex with graph integration
372
+ const cortex = new Cortex({
373
+ convexUrl: process.env.CONVEX_URL!,
374
+ graph: {
375
+ adapter: graphAdapter,
376
+ orphanCleanup: true,
377
+ },
378
+ });
379
+
380
+ return { cortex, graphAdapter };
381
+ }
382
+
383
+ // Example usage
384
+ async function main() {
385
+ const { cortex, graphAdapter } = await initializeGraph();
386
+
387
+ try {
388
+ // Use Cortex normally - graph sync happens automatically!
389
+ await cortex.memory.remember({
390
+ memorySpaceId: 'my-agent',
391
+ conversationId: 'conv-1',
392
+ userMessage: 'Hello, Cortex with graph!',
393
+ agentResponse: 'Ready to remember with enhanced graph capabilities!',
394
+ userId: 'user-1',
395
+ userName: 'User',
396
+ });
397
+
398
+ console.log('Memory stored with graph enrichment!');
399
+ } finally {
400
+ // Cleanup
401
+ cortex.close();
402
+ await graphAdapter.disconnect();
403
+ }
404
+ }
405
+
406
+ // Uncomment to run:
407
+ // main().catch(console.error);
408
+ `;
409
+ await fs.ensureDir(path.dirname(examplePath));
410
+ await fs.writeFile(examplePath, exampleCode);
411
+ console.log(pc.dim(` Created example: ${path.relative(projectPath, examplePath)}`));
412
+ }
413
+ //# sourceMappingURL=graph-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-setup.js","sourceRoot":"","sources":["../../../src/utils/init/graph-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Init utilities index
3
+ *
4
+ * Re-exports all init-related utilities for convenience.
5
+ */
6
+ export * from "./types.js";
7
+ export * from "./file-operations.js";
8
+ export * from "./env-generator.js";
9
+ export * from "./convex-setup.js";
10
+ export * from "./graph-setup.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/init/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Init utilities index
3
+ *
4
+ * Re-exports all init-related utilities for convenience.
5
+ */
6
+ export * from "./types.js";
7
+ export * from "./file-operations.js";
8
+ export * from "./env-generator.js";
9
+ export * from "./convex-setup.js";
10
+ export * from "./graph-setup.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/init/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Types for the init wizard
3
+ */
4
+ /**
5
+ * Configuration collected by the wizard
6
+ */
7
+ export interface WizardConfig {
8
+ projectName: string;
9
+ projectPath: string;
10
+ installationType: "new" | "existing";
11
+ convexSetupType: "new" | "existing" | "local";
12
+ convexUrl?: string;
13
+ deployKey?: string;
14
+ graphEnabled: boolean;
15
+ graphType?: "neo4j" | "memgraph" | "skip";
16
+ graphUri?: string;
17
+ graphUsername?: string;
18
+ graphPassword?: string;
19
+ installCLI?: boolean;
20
+ }
21
+ /**
22
+ * Convex deployment configuration
23
+ */
24
+ export interface ConvexConfig {
25
+ convexUrl: string;
26
+ deployKey?: string;
27
+ deployment?: string;
28
+ }
29
+ /**
30
+ * Graph database configuration
31
+ */
32
+ export interface GraphConfig {
33
+ type: "neo4j" | "memgraph";
34
+ uri: string;
35
+ username: string;
36
+ password: string;
37
+ }
38
+ /**
39
+ * Status of a setup component
40
+ */
41
+ export type SetupStatus = "ok" | "warning" | "error" | "not_configured";
42
+ /**
43
+ * Status dashboard data
44
+ */
45
+ export interface StatusDashboard {
46
+ environment: {
47
+ convexUrl: string | null;
48
+ convexDeployKey: boolean;
49
+ neo4jUri: string | null;
50
+ openaiKey: boolean;
51
+ };
52
+ convexBackend: {
53
+ status: SetupStatus;
54
+ message: string;
55
+ functionCount?: number;
56
+ };
57
+ graphDatabase: {
58
+ status: SetupStatus;
59
+ message: string;
60
+ type?: string;
61
+ };
62
+ sdkVersion: {
63
+ current: string | null;
64
+ latest: string | null;
65
+ upToDate: boolean;
66
+ };
67
+ connection: {
68
+ status: SetupStatus;
69
+ latency?: number;
70
+ error?: string;
71
+ };
72
+ }
73
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/init/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,KAAK,GAAG,UAAU,CAAC;IACrC,eAAe,EAAE,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,gBAAgB,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,eAAe,EAAE,OAAO,CAAC;QACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,aAAa,EAAE;QACb,MAAM,EAAE,WAAW,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,aAAa,EAAE;QACb,MAAM,EAAE,WAAW,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,UAAU,EAAE;QACV,MAAM,EAAE,WAAW,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Types for the init wizard
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/init/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Shell Execution Utilities
3
+ *
4
+ * Shared utilities for executing shell commands safely.
5
+ * Used by init wizard and other CLI commands.
6
+ */
7
+ /**
8
+ * Check if a command exists in the system
9
+ */
10
+ export declare function commandExists(command: string): Promise<boolean>;
11
+ /**
12
+ * Execute a shell command and return the output
13
+ *
14
+ * SECURITY: This function only executes commands from an allowlist.
15
+ * User input is NEVER passed as the command parameter.
16
+ */
17
+ export declare function execCommand(command: string, args: string[], options?: {
18
+ cwd?: string;
19
+ env?: Record<string, string | undefined>;
20
+ quiet?: boolean;
21
+ }): Promise<{
22
+ stdout: string;
23
+ stderr: string;
24
+ code: number;
25
+ }>;
26
+ /**
27
+ * Execute a command with live output (stdio: inherit)
28
+ *
29
+ * SECURITY: This function only executes commands from an allowlist.
30
+ * User input is NEVER passed as the command parameter.
31
+ */
32
+ export declare function execCommandLive(command: string, args: string[], options?: {
33
+ cwd?: string;
34
+ env?: Record<string, string | undefined>;
35
+ }): Promise<number>;
36
+ /**
37
+ * Validate project name
38
+ */
39
+ export declare function isValidProjectName(name: string): boolean;
40
+ /**
41
+ * Check if directory is empty
42
+ */
43
+ export declare function isDirectoryEmpty(dirPath: string): boolean;
44
+ /**
45
+ * Get the path to the installed SDK package
46
+ * @param projectPath - Optional project path to look in (defaults to current directory)
47
+ */
48
+ export declare function getSDKPath(projectPath?: string): string | null;
49
+ /**
50
+ * Parse Convex URL to determine if it's local or cloud
51
+ */
52
+ export declare function isLocalConvexUrl(url: string): boolean;
53
+ /**
54
+ * Fetch the latest SDK package.json from npm registry
55
+ */
56
+ export declare function fetchLatestSDKMetadata(): Promise<{
57
+ convexVersion: string;
58
+ sdkVersion: string;
59
+ }>;
60
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/utils/shell.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GACxF,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAyC3D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;CAAO,GACvE,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAyCD"}