@cortexmemory/cli 0.26.2 → 0.27.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.
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +121 -10
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +273 -43
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +102 -46
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +94 -7
- package/dist/commands/status.js.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/config.d.ts +11 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +20 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/init/graph-setup.d.ts.map +1 -1
- package/dist/utils/init/graph-setup.js +12 -0
- package/dist/utils/init/graph-setup.js.map +1 -1
- package/dist/utils/init/quickstart-setup.d.ts +87 -0
- package/dist/utils/init/quickstart-setup.d.ts.map +1 -0
- package/dist/utils/init/quickstart-setup.js +462 -0
- package/dist/utils/init/quickstart-setup.js.map +1 -0
- package/dist/utils/schema-sync.d.ts.map +1 -1
- package/dist/utils/schema-sync.js +27 -21
- package/dist/utils/schema-sync.js.map +1 -1
- package/package.json +3 -2
- package/templates/vercel-ai-quickstart/.env.local.example +45 -0
- package/templates/vercel-ai-quickstart/README.md +280 -0
- package/templates/vercel-ai-quickstart/app/api/chat/route.ts +196 -0
- package/templates/vercel-ai-quickstart/app/api/facts/route.ts +39 -0
- package/templates/vercel-ai-quickstart/app/api/health/route.ts +99 -0
- package/templates/vercel-ai-quickstart/app/api/memories/route.ts +37 -0
- package/templates/vercel-ai-quickstart/app/globals.css +114 -0
- package/templates/vercel-ai-quickstart/app/layout.tsx +19 -0
- package/templates/vercel-ai-quickstart/app/page.tsx +131 -0
- package/templates/vercel-ai-quickstart/components/ChatInterface.tsx +237 -0
- package/templates/vercel-ai-quickstart/components/ConvexClientProvider.tsx +21 -0
- package/templates/vercel-ai-quickstart/components/DataPreview.tsx +57 -0
- package/templates/vercel-ai-quickstart/components/HealthStatus.tsx +214 -0
- package/templates/vercel-ai-quickstart/components/LayerCard.tsx +263 -0
- package/templates/vercel-ai-quickstart/components/LayerFlowDiagram.tsx +195 -0
- package/templates/vercel-ai-quickstart/components/MemorySpaceSwitcher.tsx +93 -0
- package/templates/vercel-ai-quickstart/convex/conversations.ts +67 -0
- package/templates/vercel-ai-quickstart/convex/facts.ts +131 -0
- package/templates/vercel-ai-quickstart/convex/health.ts +15 -0
- package/templates/vercel-ai-quickstart/convex/memories.ts +104 -0
- package/templates/vercel-ai-quickstart/convex/schema.ts +20 -0
- package/templates/vercel-ai-quickstart/convex/users.ts +105 -0
- package/templates/vercel-ai-quickstart/lib/animations.ts +146 -0
- package/templates/vercel-ai-quickstart/lib/layer-tracking.ts +214 -0
- package/templates/vercel-ai-quickstart/next.config.js +7 -0
- package/templates/vercel-ai-quickstart/package.json +41 -0
- package/templates/vercel-ai-quickstart/postcss.config.js +5 -0
- package/templates/vercel-ai-quickstart/tailwind.config.js +37 -0
- package/templates/vercel-ai-quickstart/tsconfig.json +33 -0
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel AI Quickstart Setup
|
|
3
|
+
*
|
|
4
|
+
* Handles installing the Vercel AI quickstart demo app
|
|
5
|
+
* as a subfolder of the user's project.
|
|
6
|
+
*/
|
|
7
|
+
import fs from "fs-extra";
|
|
8
|
+
import path from "path";
|
|
9
|
+
import { fileURLToPath } from "url";
|
|
10
|
+
import { dirname } from "path";
|
|
11
|
+
import pc from "picocolors";
|
|
12
|
+
import ora from "ora";
|
|
13
|
+
import { execCommand } from "../shell.js";
|
|
14
|
+
// ES module equivalents of __dirname
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
const __dirname = dirname(__filename);
|
|
17
|
+
/**
|
|
18
|
+
* Default port for the quickstart app
|
|
19
|
+
*/
|
|
20
|
+
const QUICKSTART_PORT = 3000;
|
|
21
|
+
/**
|
|
22
|
+
* Files to exclude when copying template
|
|
23
|
+
*/
|
|
24
|
+
const EXCLUDE_FILES = [
|
|
25
|
+
"node_modules",
|
|
26
|
+
"package-lock.json",
|
|
27
|
+
".next",
|
|
28
|
+
".env.local",
|
|
29
|
+
"tsconfig.tsbuildinfo",
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Find the quickstart template directory
|
|
33
|
+
*/
|
|
34
|
+
function findTemplatePath() {
|
|
35
|
+
const possiblePaths = [
|
|
36
|
+
// From dist/utils/init/
|
|
37
|
+
path.join(__dirname, "../../../templates/vercel-ai-quickstart"),
|
|
38
|
+
// From dist/utils/init/subdir
|
|
39
|
+
path.join(__dirname, "../../../../templates/vercel-ai-quickstart"),
|
|
40
|
+
// From installed package in node_modules
|
|
41
|
+
path.join(process.cwd(), "node_modules", "@cortexmemory", "cli", "templates", "vercel-ai-quickstart"),
|
|
42
|
+
];
|
|
43
|
+
for (const tryPath of possiblePaths) {
|
|
44
|
+
if (fs.existsSync(tryPath)) {
|
|
45
|
+
return tryPath;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Recursively copy directory, excluding specified patterns
|
|
52
|
+
*/
|
|
53
|
+
async function copyDir(src, dest) {
|
|
54
|
+
await fs.ensureDir(dest);
|
|
55
|
+
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
const srcPath = path.join(src, entry.name);
|
|
58
|
+
const destPath = path.join(dest, entry.name);
|
|
59
|
+
// Skip excluded files/folders
|
|
60
|
+
if (EXCLUDE_FILES.includes(entry.name)) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (entry.isDirectory()) {
|
|
64
|
+
await copyDir(srcPath, destPath);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
await fs.copyFile(srcPath, destPath);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Update package.json to use npm packages instead of file: references
|
|
73
|
+
*/
|
|
74
|
+
async function updatePackageJson(quickstartPath, sdkVersion) {
|
|
75
|
+
const packageJsonPath = path.join(quickstartPath, "package.json");
|
|
76
|
+
// Read and write atomically to avoid race conditions
|
|
77
|
+
// If the file doesn't exist, readFile will throw and we'll catch it
|
|
78
|
+
let content;
|
|
79
|
+
try {
|
|
80
|
+
content = await fs.readFile(packageJsonPath, "utf-8");
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const error = err;
|
|
84
|
+
if (error.code === "ENOENT") {
|
|
85
|
+
return; // File doesn't exist, nothing to update
|
|
86
|
+
}
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
const pkg = JSON.parse(content);
|
|
90
|
+
// Update dependencies to use npm packages
|
|
91
|
+
if (pkg.dependencies) {
|
|
92
|
+
// Replace file: references with npm versions
|
|
93
|
+
if (pkg.dependencies["@cortexmemory/sdk"]?.startsWith("file:") ||
|
|
94
|
+
pkg.dependencies["@cortexmemory/sdk"] === "*") {
|
|
95
|
+
pkg.dependencies["@cortexmemory/sdk"] = `^${sdkVersion}`;
|
|
96
|
+
}
|
|
97
|
+
if (pkg.dependencies["@cortexmemory/vercel-ai-provider"]?.startsWith("file:")) {
|
|
98
|
+
// Use same version as SDK (they're released together)
|
|
99
|
+
pkg.dependencies["@cortexmemory/vercel-ai-provider"] = `^${sdkVersion}`;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Update name to avoid conflicts
|
|
103
|
+
pkg.name = "cortex-quickstart";
|
|
104
|
+
await fs.writeFile(packageJsonPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Create .env.local for the quickstart app
|
|
108
|
+
*/
|
|
109
|
+
async function createQuickstartEnv(quickstartPath, convexUrl, openaiApiKey, graphConfig) {
|
|
110
|
+
const envPath = path.join(quickstartPath, ".env.local");
|
|
111
|
+
let envContent = `# Cortex Memory Quickstart Environment
|
|
112
|
+
# Generated by cortex init
|
|
113
|
+
|
|
114
|
+
# Convex deployment URL
|
|
115
|
+
CONVEX_URL=${convexUrl}
|
|
116
|
+
NEXT_PUBLIC_CONVEX_URL=${convexUrl}
|
|
117
|
+
|
|
118
|
+
`;
|
|
119
|
+
if (openaiApiKey) {
|
|
120
|
+
envContent += `# OpenAI API key for embeddings and LLM
|
|
121
|
+
OPENAI_API_KEY=${openaiApiKey}
|
|
122
|
+
|
|
123
|
+
`;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
envContent += `# OpenAI API key (required for chat functionality)
|
|
127
|
+
# Get your key at: https://platform.openai.com/api-keys
|
|
128
|
+
# OPENAI_API_KEY=sk-...
|
|
129
|
+
|
|
130
|
+
`;
|
|
131
|
+
}
|
|
132
|
+
envContent += `# Enable fact extraction (extracts structured facts from conversations)
|
|
133
|
+
CORTEX_FACT_EXTRACTION=true
|
|
134
|
+
|
|
135
|
+
`;
|
|
136
|
+
// Graph sync configuration
|
|
137
|
+
if (graphConfig?.enabled && graphConfig.uri) {
|
|
138
|
+
envContent += `# Graph memory sync (enabled during init)
|
|
139
|
+
CORTEX_GRAPH_SYNC=true
|
|
140
|
+
|
|
141
|
+
# Graph database connection
|
|
142
|
+
NEO4J_URI=${graphConfig.uri}
|
|
143
|
+
NEO4J_USERNAME=${graphConfig.username || "neo4j"}
|
|
144
|
+
NEO4J_PASSWORD=${graphConfig.password || ""}
|
|
145
|
+
`;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
envContent += `# Optional: Enable graph sync (requires Neo4j or Memgraph)
|
|
149
|
+
# CORTEX_GRAPH_SYNC=true
|
|
150
|
+
# NEO4J_URI=bolt://localhost:7687
|
|
151
|
+
# NEO4J_USERNAME=neo4j
|
|
152
|
+
# NEO4J_PASSWORD=your-password
|
|
153
|
+
`;
|
|
154
|
+
}
|
|
155
|
+
await fs.writeFile(envPath, envContent);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Copy quickstart's Convex query files to the main convex folder
|
|
159
|
+
*
|
|
160
|
+
* The quickstart has read-only query files for the demo UI.
|
|
161
|
+
* These are additive and don't conflict with the SDK's backend files.
|
|
162
|
+
*/
|
|
163
|
+
async function copyConvexQueryFiles(quickstartPath, projectPath) {
|
|
164
|
+
const quickstartConvexPath = path.join(quickstartPath, "convex");
|
|
165
|
+
const projectConvexPath = path.join(projectPath, "convex");
|
|
166
|
+
if (!fs.existsSync(quickstartConvexPath)) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// Files to copy (query files for demo UI)
|
|
170
|
+
const queryFiles = ["health.ts"];
|
|
171
|
+
for (const file of queryFiles) {
|
|
172
|
+
const srcFile = path.join(quickstartConvexPath, file);
|
|
173
|
+
const destFile = path.join(projectConvexPath, file);
|
|
174
|
+
if (fs.existsSync(srcFile) && !fs.existsSync(destFile)) {
|
|
175
|
+
await fs.copyFile(srcFile, destFile);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// For files that exist in both (memories.ts, facts.ts, etc.),
|
|
179
|
+
// the quickstart queries have different function names so we could append them.
|
|
180
|
+
// For now, we'll skip merging to avoid complexity - the quickstart can use
|
|
181
|
+
// the SDK's existing query functions or its own internal queries.
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Add quickstart script to root package.json
|
|
185
|
+
*/
|
|
186
|
+
async function addQuickstartScript(projectPath) {
|
|
187
|
+
const packageJsonPath = path.join(projectPath, "package.json");
|
|
188
|
+
// Read and write atomically to avoid race conditions
|
|
189
|
+
// If the file doesn't exist, readFile will throw and we'll catch it
|
|
190
|
+
let content;
|
|
191
|
+
try {
|
|
192
|
+
content = await fs.readFile(packageJsonPath, "utf-8");
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
const error = err;
|
|
196
|
+
if (error.code === "ENOENT") {
|
|
197
|
+
return; // File doesn't exist, nothing to update
|
|
198
|
+
}
|
|
199
|
+
throw err;
|
|
200
|
+
}
|
|
201
|
+
const pkg = JSON.parse(content);
|
|
202
|
+
pkg.scripts = pkg.scripts || {};
|
|
203
|
+
// Add quickstart script if not present
|
|
204
|
+
if (!pkg.scripts.quickstart) {
|
|
205
|
+
pkg.scripts.quickstart = "cd quickstart && npm run dev";
|
|
206
|
+
}
|
|
207
|
+
await fs.writeFile(packageJsonPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Install the Vercel AI quickstart demo app
|
|
211
|
+
*
|
|
212
|
+
* @param projectPath - Absolute path to the user's project
|
|
213
|
+
* @param sdkVersion - Version of @cortexmemory/sdk to use
|
|
214
|
+
* @param convexUrl - Convex deployment URL
|
|
215
|
+
* @param openaiApiKey - Optional OpenAI API key
|
|
216
|
+
* @param graphConfig - Optional graph database configuration
|
|
217
|
+
* @returns AppConfig for the installed app (includes projectPath for starting from anywhere)
|
|
218
|
+
*/
|
|
219
|
+
export async function installVercelAIQuickstart(projectPath, sdkVersion, convexUrl, openaiApiKey, graphConfig) {
|
|
220
|
+
// Ensure we have an absolute path
|
|
221
|
+
const absoluteProjectPath = path.resolve(projectPath);
|
|
222
|
+
const quickstartPath = path.join(absoluteProjectPath, "quickstart");
|
|
223
|
+
// Find template
|
|
224
|
+
const templatePath = findTemplatePath();
|
|
225
|
+
if (!templatePath) {
|
|
226
|
+
throw new Error("Vercel AI quickstart template not found. " +
|
|
227
|
+
"Please ensure @cortexmemory/cli is properly installed.");
|
|
228
|
+
}
|
|
229
|
+
console.log(pc.cyan("\n Installing Vercel AI quickstart..."));
|
|
230
|
+
// Copy template files
|
|
231
|
+
const copySpinner = ora("Copying quickstart files...").start();
|
|
232
|
+
await copyDir(templatePath, quickstartPath);
|
|
233
|
+
copySpinner.succeed("Quickstart files copied");
|
|
234
|
+
// Update package.json with npm package versions
|
|
235
|
+
const updateSpinner = ora("Configuring package.json...").start();
|
|
236
|
+
await updatePackageJson(quickstartPath, sdkVersion);
|
|
237
|
+
updateSpinner.succeed("Package.json configured");
|
|
238
|
+
// Create .env.local (including graph config if enabled)
|
|
239
|
+
await createQuickstartEnv(quickstartPath, convexUrl, openaiApiKey, graphConfig);
|
|
240
|
+
console.log(pc.dim(" Created quickstart/.env.local"));
|
|
241
|
+
// Copy Convex query files to main convex folder
|
|
242
|
+
await copyConvexQueryFiles(quickstartPath, projectPath);
|
|
243
|
+
// Add quickstart script to root package.json
|
|
244
|
+
await addQuickstartScript(projectPath);
|
|
245
|
+
console.log(pc.dim(" Added 'quickstart' script to package.json"));
|
|
246
|
+
// Install dependencies
|
|
247
|
+
// Use --legacy-peer-deps to handle potential version mismatches between
|
|
248
|
+
// the quickstart template (ai@^6.x) and older published provider versions
|
|
249
|
+
const installSpinner = ora("Installing quickstart dependencies...").start();
|
|
250
|
+
try {
|
|
251
|
+
const result = await execCommand("npm", ["install", "--legacy-peer-deps"], {
|
|
252
|
+
cwd: quickstartPath,
|
|
253
|
+
quiet: true,
|
|
254
|
+
});
|
|
255
|
+
if (result.code !== 0) {
|
|
256
|
+
installSpinner.fail("Failed to install dependencies");
|
|
257
|
+
console.error(pc.red(result.stderr));
|
|
258
|
+
throw new Error("npm install failed in quickstart folder");
|
|
259
|
+
}
|
|
260
|
+
installSpinner.succeed("Quickstart dependencies installed");
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
installSpinner.fail("Failed to install dependencies");
|
|
264
|
+
throw error;
|
|
265
|
+
}
|
|
266
|
+
console.log(pc.green("\n ✓ Vercel AI quickstart installed"));
|
|
267
|
+
console.log(pc.dim(" Location: ./quickstart"));
|
|
268
|
+
console.log(pc.dim(" Run: npm run quickstart"));
|
|
269
|
+
// Return app config with absolute projectPath for starting from anywhere
|
|
270
|
+
return {
|
|
271
|
+
type: "vercel-ai-quickstart",
|
|
272
|
+
path: "quickstart",
|
|
273
|
+
projectPath: absoluteProjectPath,
|
|
274
|
+
enabled: true,
|
|
275
|
+
port: QUICKSTART_PORT,
|
|
276
|
+
startCommand: "npm run dev",
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get the PID file path for an app
|
|
281
|
+
*
|
|
282
|
+
* @param appName - App name (used as identifier)
|
|
283
|
+
* @param projectPath - Project root path
|
|
284
|
+
* @returns Path to the PID file
|
|
285
|
+
*/
|
|
286
|
+
export function getAppPidFilePath(appName, projectPath) {
|
|
287
|
+
// Sanitize app name for use in filename
|
|
288
|
+
const safeName = appName.replace(/[^a-zA-Z0-9-_]/g, "-");
|
|
289
|
+
return path.join(projectPath, `.cortex-app-${safeName}.pid`);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Start a template app in the background
|
|
293
|
+
*
|
|
294
|
+
* @param appName - Display name for the app
|
|
295
|
+
* @param app - App configuration (includes projectPath)
|
|
296
|
+
*/
|
|
297
|
+
export async function startApp(appName, app) {
|
|
298
|
+
// Use app.projectPath (absolute) combined with app.path (relative)
|
|
299
|
+
const appPath = path.join(app.projectPath, app.path);
|
|
300
|
+
if (!fs.existsSync(appPath)) {
|
|
301
|
+
console.log(pc.yellow(` App "${appName}" not found at ${appPath}`));
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
const command = app.startCommand || "npm run dev";
|
|
305
|
+
const [cmd, ...args] = command.split(" ");
|
|
306
|
+
console.log(pc.dim(` Starting ${appName} on port ${app.port || 3000}...`));
|
|
307
|
+
// Create log file for the background process
|
|
308
|
+
const logFile = path.join(app.projectPath, `.cortex-app-${appName}.log`);
|
|
309
|
+
const logFd = fs.openSync(logFile, "a");
|
|
310
|
+
// Use spawn to start in background
|
|
311
|
+
const { spawn } = await import("child_process");
|
|
312
|
+
const child = spawn(cmd, args, {
|
|
313
|
+
cwd: appPath,
|
|
314
|
+
env: {
|
|
315
|
+
...process.env,
|
|
316
|
+
PORT: String(app.port || 3000),
|
|
317
|
+
},
|
|
318
|
+
detached: true,
|
|
319
|
+
stdio: ["ignore", logFd, logFd],
|
|
320
|
+
});
|
|
321
|
+
// Close the file descriptor in parent process (child keeps it open)
|
|
322
|
+
fs.closeSync(logFd);
|
|
323
|
+
child.unref();
|
|
324
|
+
// Save PID for later management (stop command)
|
|
325
|
+
const pidFile = getAppPidFilePath(appName, app.projectPath);
|
|
326
|
+
await fs.writeFile(pidFile, String(child.pid));
|
|
327
|
+
console.log(pc.green(` ✓ ${appName} started at http://localhost:${app.port || 3000}`));
|
|
328
|
+
console.log(pc.dim(` PID: ${child.pid}`));
|
|
329
|
+
console.log(pc.dim(` Log: ${path.basename(logFile)}`));
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Stop a running app by its PID file
|
|
333
|
+
*
|
|
334
|
+
* @param appName - App name (used to find PID file)
|
|
335
|
+
* @param projectPath - Project root path
|
|
336
|
+
* @returns True if the app was stopped, false if it wasn't running
|
|
337
|
+
*/
|
|
338
|
+
export async function stopApp(appName, projectPath) {
|
|
339
|
+
const pidFile = getAppPidFilePath(appName, projectPath);
|
|
340
|
+
try {
|
|
341
|
+
const pid = await fs.readFile(pidFile, "utf-8");
|
|
342
|
+
const pidNum = parseInt(pid.trim());
|
|
343
|
+
if (isNaN(pidNum)) {
|
|
344
|
+
await fs.remove(pidFile);
|
|
345
|
+
return false;
|
|
346
|
+
}
|
|
347
|
+
try {
|
|
348
|
+
process.kill(pidNum, "SIGTERM");
|
|
349
|
+
// Clean up PID file
|
|
350
|
+
await fs.remove(pidFile);
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
catch (e) {
|
|
354
|
+
const err = e;
|
|
355
|
+
if (err.code === "ESRCH") {
|
|
356
|
+
// Process already dead, clean up PID file
|
|
357
|
+
await fs.remove(pidFile);
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
throw e;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
catch (e) {
|
|
364
|
+
const err = e;
|
|
365
|
+
if (err.code === "ENOENT") {
|
|
366
|
+
// No PID file exists
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
throw e;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Check if an app is running
|
|
374
|
+
*
|
|
375
|
+
* @param appName - App name (used to find PID file)
|
|
376
|
+
* @param projectPath - Project root path
|
|
377
|
+
* @returns Object with running status and PID if running
|
|
378
|
+
*/
|
|
379
|
+
export async function isAppRunning(appName, projectPath) {
|
|
380
|
+
const pidFile = getAppPidFilePath(appName, projectPath);
|
|
381
|
+
try {
|
|
382
|
+
const pid = await fs.readFile(pidFile, "utf-8");
|
|
383
|
+
const pidNum = parseInt(pid.trim());
|
|
384
|
+
if (isNaN(pidNum)) {
|
|
385
|
+
await fs.remove(pidFile);
|
|
386
|
+
return { running: false };
|
|
387
|
+
}
|
|
388
|
+
try {
|
|
389
|
+
// Signal 0 checks if process exists without killing it
|
|
390
|
+
process.kill(pidNum, 0);
|
|
391
|
+
return { running: true, pid: pidNum };
|
|
392
|
+
}
|
|
393
|
+
catch {
|
|
394
|
+
// Process not running, clean up stale PID file
|
|
395
|
+
await fs.remove(pidFile);
|
|
396
|
+
return { running: false };
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
return { running: false };
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Find all app PID files in a project directory
|
|
405
|
+
*
|
|
406
|
+
* @param projectPath - Project root path
|
|
407
|
+
* @returns Array of app names that have PID files
|
|
408
|
+
*/
|
|
409
|
+
export async function findAppPidFiles(projectPath) {
|
|
410
|
+
const files = await fs.readdir(projectPath);
|
|
411
|
+
const pidFiles = files.filter((f) => f.startsWith(".cortex-app-") && f.endsWith(".pid"));
|
|
412
|
+
return pidFiles.map((pidFile) => {
|
|
413
|
+
// Extract app name from ".cortex-app-{name}.pid"
|
|
414
|
+
const name = pidFile.replace(/^\.cortex-app-/, "").replace(/\.pid$/, "");
|
|
415
|
+
return { name, pidFile: path.join(projectPath, pidFile) };
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Find process listening on a specific port
|
|
420
|
+
*
|
|
421
|
+
* @param port - Port number to check
|
|
422
|
+
* @returns PID of the process or null if none found
|
|
423
|
+
*/
|
|
424
|
+
export async function findProcessByPort(port) {
|
|
425
|
+
try {
|
|
426
|
+
const { execSync } = await import("child_process");
|
|
427
|
+
// Use lsof on macOS/Linux to find process by port
|
|
428
|
+
const result = execSync(`lsof -i :${port} -t 2>/dev/null`, {
|
|
429
|
+
encoding: "utf-8",
|
|
430
|
+
}).trim();
|
|
431
|
+
if (result) {
|
|
432
|
+
const pid = parseInt(result.split("\n")[0], 10);
|
|
433
|
+
return isNaN(pid) ? null : pid;
|
|
434
|
+
}
|
|
435
|
+
return null;
|
|
436
|
+
}
|
|
437
|
+
catch {
|
|
438
|
+
// lsof returns non-zero if no process found
|
|
439
|
+
return null;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Stop a process by port number
|
|
444
|
+
*
|
|
445
|
+
* @param port - Port number
|
|
446
|
+
* @param signal - Signal to send (default: SIGTERM)
|
|
447
|
+
* @returns True if process was stopped, false otherwise
|
|
448
|
+
*/
|
|
449
|
+
export async function stopProcessByPort(port, signal = "SIGTERM") {
|
|
450
|
+
const pid = await findProcessByPort(port);
|
|
451
|
+
if (!pid) {
|
|
452
|
+
return false;
|
|
453
|
+
}
|
|
454
|
+
try {
|
|
455
|
+
process.kill(pid, signal);
|
|
456
|
+
return true;
|
|
457
|
+
}
|
|
458
|
+
catch {
|
|
459
|
+
return false;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=quickstart-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickstart-setup.js","sourceRoot":"","sources":["../../../src/utils/init/quickstart-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-sync.d.ts","sourceRoot":"","sources":["../../src/utils/schema-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"schema-sync.d.ts","sourceRoot":"","sources":["../../src/utils/schema-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA4FD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IACR,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wCAAwC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACA,OAAO,CAAC,gBAAgB,CAAC,CA+E3B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,EACxB,KAAK,CAAC,EAAE,OAAO,GACd,IAAI,CAwCN;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CASD"}
|
|
@@ -12,32 +12,32 @@
|
|
|
12
12
|
* This will use the schema files from that directory's convex-dev folder instead
|
|
13
13
|
* of the installed @cortexmemory/sdk package.
|
|
14
14
|
*/
|
|
15
|
-
import { existsSync, readFileSync } from "fs";
|
|
15
|
+
import { existsSync, readFileSync, readdirSync } from "fs";
|
|
16
16
|
import { copyFile, mkdir } from "fs/promises";
|
|
17
17
|
import { createHash } from "crypto";
|
|
18
18
|
import { join, dirname } from "path";
|
|
19
19
|
import pc from "picocolors";
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
21
|
+
* Discover all syncable files from the SDK's convex-dev folder
|
|
22
|
+
* Includes all .ts files and tsconfig.json, excludes _generated/ directory
|
|
23
23
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
24
|
+
function discoverSchemaFiles(sdkConvexPath) {
|
|
25
|
+
try {
|
|
26
|
+
const entries = readdirSync(sdkConvexPath, { withFileTypes: true });
|
|
27
|
+
return entries
|
|
28
|
+
.filter((entry) => {
|
|
29
|
+
// Skip directories (like _generated/)
|
|
30
|
+
if (entry.isDirectory())
|
|
31
|
+
return false;
|
|
32
|
+
// Include .ts files and tsconfig.json
|
|
33
|
+
return entry.name.endsWith(".ts") || entry.name === "tsconfig.json";
|
|
34
|
+
})
|
|
35
|
+
.map((entry) => entry.name);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
41
|
/**
|
|
42
42
|
* Find the @cortexmemory/sdk package
|
|
43
43
|
*
|
|
@@ -132,6 +132,12 @@ export async function syncConvexSchema(projectPath, options) {
|
|
|
132
132
|
}
|
|
133
133
|
result.sdkConvexPath = sdkConvexPath;
|
|
134
134
|
result.sdkVersion = getSdkVersion(sdkPath);
|
|
135
|
+
// Discover all syncable files from SDK
|
|
136
|
+
const schemaFiles = discoverSchemaFiles(sdkConvexPath);
|
|
137
|
+
if (schemaFiles.length === 0) {
|
|
138
|
+
result.error = `No schema files found in ${sdkConvexPath}`;
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
135
141
|
// Ensure project's convex folder exists
|
|
136
142
|
if (!existsSync(result.projectConvexPath)) {
|
|
137
143
|
if (!options?.dryRun) {
|
|
@@ -139,7 +145,7 @@ export async function syncConvexSchema(projectPath, options) {
|
|
|
139
145
|
}
|
|
140
146
|
}
|
|
141
147
|
// Compare and sync each file
|
|
142
|
-
for (const fileName of
|
|
148
|
+
for (const fileName of schemaFiles) {
|
|
143
149
|
const sdkFilePath = join(sdkConvexPath, fileName);
|
|
144
150
|
const projectFilePath = join(result.projectConvexPath, fileName);
|
|
145
151
|
// Skip if SDK doesn't have this file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-sync.js","sourceRoot":"","sources":["../../src/utils/schema-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-sync.js","sourceRoot":"","sources":["../../src/utils/schema-sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cortexmemory/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.1",
|
|
4
4
|
"description": "CLI tool for managing Cortex Memory deployments, performing administrative tasks, and streamlining development workflows",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"README.md"
|
|
15
15
|
],
|
|
16
16
|
"scripts": {
|
|
17
|
-
"
|
|
17
|
+
"prebuild": "node scripts/sync-quickstart-template.js",
|
|
18
|
+
"build": "npm run prebuild && tsc && chmod +x dist/index.js",
|
|
18
19
|
"dev": "tsc --watch",
|
|
19
20
|
"lint": "eslint . --report-unused-disable-directives",
|
|
20
21
|
"test": "node --experimental-vm-modules $(npm root)/.bin/jest",
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
2
|
+
# Required Configuration
|
|
3
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
4
|
+
|
|
5
|
+
# Your Convex deployment URL
|
|
6
|
+
# Get this from: https://dashboard.convex.dev
|
|
7
|
+
CONVEX_URL=https://your-project.convex.cloud
|
|
8
|
+
|
|
9
|
+
# OpenAI API Key for LLM and embeddings
|
|
10
|
+
# Get this from: https://platform.openai.com/api-keys
|
|
11
|
+
OPENAI_API_KEY=sk-...
|
|
12
|
+
|
|
13
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
14
|
+
# Memory Space Configuration
|
|
15
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
16
|
+
|
|
17
|
+
# Default memory space for the demo
|
|
18
|
+
MEMORY_SPACE_ID=quickstart-demo
|
|
19
|
+
|
|
20
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
21
|
+
# Optional: Fact Extraction (SDK v0.18.0+)
|
|
22
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
23
|
+
|
|
24
|
+
# Enable automatic LLM-powered fact extraction
|
|
25
|
+
CORTEX_FACT_EXTRACTION=true
|
|
26
|
+
|
|
27
|
+
# Model for fact extraction (default: gpt-4o-mini)
|
|
28
|
+
CORTEX_FACT_EXTRACTION_MODEL=gpt-4o-mini
|
|
29
|
+
|
|
30
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
31
|
+
# Optional: Graph Database (SDK v0.19.0+)
|
|
32
|
+
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
33
|
+
|
|
34
|
+
# Enable automatic graph sync
|
|
35
|
+
# CORTEX_GRAPH_SYNC=true
|
|
36
|
+
|
|
37
|
+
# Neo4j connection (choose one)
|
|
38
|
+
# NEO4J_URI=bolt://localhost:7687
|
|
39
|
+
# NEO4J_USERNAME=neo4j
|
|
40
|
+
# NEO4J_PASSWORD=your-password
|
|
41
|
+
|
|
42
|
+
# Or Memgraph connection
|
|
43
|
+
# MEMGRAPH_URI=bolt://localhost:7687
|
|
44
|
+
# MEMGRAPH_USERNAME=
|
|
45
|
+
# MEMGRAPH_PASSWORD=
|