@stackmemoryai/stackmemory 0.3.19 → 0.3.20
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/cli/commands/login.js +126 -30
- package/dist/cli/commands/login.js.map +3 -3
- package/package.json +2 -1
|
@@ -3,45 +3,141 @@ import chalk from "chalk";
|
|
|
3
3
|
import { homedir } from "os";
|
|
4
4
|
import { join } from "path";
|
|
5
5
|
import { existsSync, mkdirSync, writeFileSync, readFileSync } from "fs";
|
|
6
|
+
import open from "open";
|
|
6
7
|
function registerLoginCommand(program) {
|
|
7
|
-
program.command("login").description("Login to hosted StackMemory (
|
|
8
|
+
program.command("login").description("Login to hosted StackMemory service").option("--api-url <url>", "Custom API URL", "https://api.stackmemory.ai").option("--email <email>", "Email address for login").option("--password <password>", "Password (not recommended in CLI)").action(async (options) => {
|
|
8
9
|
const cfgDir = join(homedir(), ".stackmemory");
|
|
9
10
|
if (!existsSync(cfgDir)) mkdirSync(cfgDir, { recursive: true });
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
console.log(chalk.cyan("\u{1F510} StackMemory Hosted Service Login\n"));
|
|
12
|
+
const credentials = await inquirer.prompt([
|
|
13
|
+
{
|
|
14
|
+
type: "input",
|
|
15
|
+
name: "email",
|
|
16
|
+
message: "Email:",
|
|
17
|
+
default: options.email,
|
|
18
|
+
validate: (input) => {
|
|
19
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
20
|
+
return emailRegex.test(input) ? true : "Please enter a valid email";
|
|
21
|
+
}
|
|
22
|
+
},
|
|
20
23
|
{
|
|
21
24
|
type: "password",
|
|
22
|
-
name: "
|
|
23
|
-
message: "
|
|
24
|
-
|
|
25
|
+
name: "password",
|
|
26
|
+
message: "Password:",
|
|
27
|
+
default: options.password,
|
|
28
|
+
mask: "*",
|
|
29
|
+
validate: (input) => input.length >= 6 ? true : "Password must be at least 6 characters"
|
|
25
30
|
}
|
|
26
31
|
]);
|
|
27
|
-
|
|
28
|
-
let cfg = {};
|
|
29
|
-
try {
|
|
30
|
-
if (existsSync(cfgPath)) cfg = JSON.parse(readFileSync(cfgPath, "utf-8"));
|
|
31
|
-
} catch {
|
|
32
|
-
}
|
|
33
|
-
cfg.database = { ...cfg.database || {}, mode: "hosted", url: databaseUrl };
|
|
34
|
-
writeFileSync(cfgPath, JSON.stringify(cfg, null, 2));
|
|
35
|
-
console.log(chalk.green("\u2713 Hosted database configured in ~/.stackmemory/config.json"));
|
|
32
|
+
console.log(chalk.gray("\nAuthenticating with StackMemory API..."));
|
|
36
33
|
try {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
34
|
+
const apiUrl = options.apiUrl || process.env.STACKMEMORY_API_URL || "https://api.stackmemory.ai";
|
|
35
|
+
const response = await fetch(`${apiUrl}/auth/login`, {
|
|
36
|
+
method: "POST",
|
|
37
|
+
headers: {
|
|
38
|
+
"Content-Type": "application/json",
|
|
39
|
+
"User-Agent": "StackMemory-CLI/0.3.19"
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify({
|
|
42
|
+
email: credentials.email,
|
|
43
|
+
password: credentials.password
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
const data = await response.json();
|
|
47
|
+
if (!response.ok || !data.success) {
|
|
48
|
+
if (response.status === 404) {
|
|
49
|
+
console.log(chalk.yellow("\n\u26A0\uFE0F Hosted API not available. Would you like to:"));
|
|
50
|
+
const { choice } = await inquirer.prompt([
|
|
51
|
+
{
|
|
52
|
+
type: "list",
|
|
53
|
+
name: "choice",
|
|
54
|
+
message: "Select an option:",
|
|
55
|
+
choices: [
|
|
56
|
+
{ name: "Open signup page in browser", value: "signup" },
|
|
57
|
+
{ name: "Configure database URL manually", value: "manual" },
|
|
58
|
+
{ name: "Use local database", value: "local" },
|
|
59
|
+
{ name: "Cancel", value: "cancel" }
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
]);
|
|
63
|
+
if (choice === "signup") {
|
|
64
|
+
await open("https://stackmemory.ai/signup");
|
|
65
|
+
console.log(chalk.cyan("Opening signup page in browser..."));
|
|
66
|
+
return;
|
|
67
|
+
} else if (choice === "manual") {
|
|
68
|
+
const { databaseUrl } = await inquirer.prompt([
|
|
69
|
+
{
|
|
70
|
+
type: "password",
|
|
71
|
+
name: "databaseUrl",
|
|
72
|
+
message: "Enter your DATABASE_URL (postgres://...):",
|
|
73
|
+
validate: (input) => input.startsWith("postgres://") || input.startsWith("postgresql://") ? true : "Must start with postgres:// or postgresql://"
|
|
74
|
+
}
|
|
75
|
+
]);
|
|
76
|
+
const cfgPath2 = join(cfgDir, "config.json");
|
|
77
|
+
let cfg2 = {};
|
|
78
|
+
try {
|
|
79
|
+
if (existsSync(cfgPath2)) cfg2 = JSON.parse(readFileSync(cfgPath2, "utf-8"));
|
|
80
|
+
} catch {
|
|
81
|
+
}
|
|
82
|
+
cfg2.database = { mode: "hosted", url: databaseUrl };
|
|
83
|
+
cfg2.auth = { email: credentials.email };
|
|
84
|
+
writeFileSync(cfgPath2, JSON.stringify(cfg2, null, 2));
|
|
85
|
+
console.log(chalk.green("\u2713 Database configured successfully"));
|
|
86
|
+
return;
|
|
87
|
+
} else if (choice === "local") {
|
|
88
|
+
const cfgPath2 = join(cfgDir, "config.json");
|
|
89
|
+
let cfg2 = {};
|
|
90
|
+
try {
|
|
91
|
+
if (existsSync(cfgPath2)) cfg2 = JSON.parse(readFileSync(cfgPath2, "utf-8"));
|
|
92
|
+
} catch {
|
|
93
|
+
}
|
|
94
|
+
cfg2.database = { mode: "local" };
|
|
95
|
+
writeFileSync(cfgPath2, JSON.stringify(cfg2, null, 2));
|
|
96
|
+
console.log(chalk.green("\u2713 Switched to local database mode"));
|
|
97
|
+
return;
|
|
98
|
+
} else {
|
|
99
|
+
console.log(chalk.gray("Login cancelled"));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
throw new Error(data.error || "Authentication failed");
|
|
104
|
+
}
|
|
105
|
+
const cfgPath = join(cfgDir, "config.json");
|
|
106
|
+
let cfg = {};
|
|
107
|
+
try {
|
|
108
|
+
if (existsSync(cfgPath)) cfg = JSON.parse(readFileSync(cfgPath, "utf-8"));
|
|
109
|
+
} catch {
|
|
110
|
+
}
|
|
111
|
+
cfg.auth = {
|
|
112
|
+
apiKey: data.apiKey,
|
|
113
|
+
apiUrl,
|
|
114
|
+
email: credentials.email
|
|
115
|
+
};
|
|
116
|
+
if (data.databaseUrl) {
|
|
117
|
+
cfg.database = {
|
|
118
|
+
mode: "hosted",
|
|
119
|
+
url: data.databaseUrl
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
writeFileSync(cfgPath, JSON.stringify(cfg, null, 2));
|
|
123
|
+
const envFile = join(cfgDir, "stackmemory.env");
|
|
124
|
+
const envContent = `# StackMemory Authentication
|
|
125
|
+
STACKMEMORY_API_KEY=${data.apiKey}
|
|
126
|
+
STACKMEMORY_API_URL=${apiUrl}
|
|
127
|
+
${data.databaseUrl ? `DATABASE_URL=${data.databaseUrl}` : ""}
|
|
128
|
+
`;
|
|
129
|
+
writeFileSync(envFile, envContent);
|
|
130
|
+
console.log(chalk.green("\n\u2705 Successfully logged in to StackMemory"));
|
|
131
|
+
console.log(chalk.green(`\u2713 Configuration saved to ~/.stackmemory/config.json`));
|
|
132
|
+
console.log(chalk.gray("\nYou can now use:"));
|
|
133
|
+
console.log(chalk.cyan(" stackmemory sync ") + chalk.gray("- Sync your context to the cloud"));
|
|
134
|
+
console.log(chalk.cyan(" stackmemory db status") + chalk.gray("- Check database connection"));
|
|
135
|
+
console.log(chalk.cyan(" stackmemory context ") + chalk.gray("- Manage your contexts"));
|
|
136
|
+
} catch (error) {
|
|
137
|
+
console.error(chalk.red("\n\u274C Login failed:"), error.message);
|
|
138
|
+
console.log(chalk.yellow("\nTip: Visit https://stackmemory.ai/signup to create an account"));
|
|
139
|
+
process.exit(1);
|
|
43
140
|
}
|
|
44
|
-
console.log(chalk.gray("Tip: export DATABASE_URL before starting the server."));
|
|
45
141
|
});
|
|
46
142
|
}
|
|
47
143
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/commands/login.ts"],
|
|
4
|
-
"sourcesContent": ["import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport { homedir } from 'os';\nimport { join } from 'path';\nimport { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';\n\ninterface ConfigShape {\n version?: string;\n setupCompleted?: string;\n features?: any;\n paths?: any;\n database?: { mode?: 'local' | 'hosted'; url?: string };\n}\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Login to hosted StackMemory (
|
|
5
|
-
"mappings": "AACA,OAAO,cAAc;AACrB,OAAO,WAAW;AAClB,SAAS,eAAe;AACxB,SAAS,YAAY;AACrB,SAAS,YAAY,WAAW,eAAe,oBAAoB;
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport { homedir } from 'os';\nimport { join } from 'path';\nimport { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';\nimport open from 'open';\n\ninterface ConfigShape {\n version?: string;\n setupCompleted?: string;\n features?: any;\n paths?: any;\n database?: { mode?: 'local' | 'hosted'; url?: string };\n auth?: { \n apiKey?: string;\n apiUrl?: string;\n email?: string;\n };\n}\n\ninterface AuthResponse {\n success: boolean;\n apiKey?: string;\n databaseUrl?: string;\n email?: string;\n error?: string;\n}\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Login to hosted StackMemory service')\n .option('--api-url <url>', 'Custom API URL', 'https://api.stackmemory.ai')\n .option('--email <email>', 'Email address for login')\n .option('--password <password>', 'Password (not recommended in CLI)')\n .action(async (options) => {\n const cfgDir = join(homedir(), '.stackmemory');\n if (!existsSync(cfgDir)) mkdirSync(cfgDir, { recursive: true });\n\n console.log(chalk.cyan('\uD83D\uDD10 StackMemory Hosted Service Login\\n'));\n\n // Prompt for credentials\n const credentials = await inquirer.prompt([\n {\n type: 'input',\n name: 'email',\n message: 'Email:',\n default: options.email,\n validate: (input: string) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(input) ? true : 'Please enter a valid email';\n },\n },\n {\n type: 'password',\n name: 'password',\n message: 'Password:',\n default: options.password,\n mask: '*',\n validate: (input: string) => input.length >= 6 ? true : 'Password must be at least 6 characters',\n },\n ]);\n\n console.log(chalk.gray('\\nAuthenticating with StackMemory API...'));\n\n try {\n // Authenticate with the hosted API\n const apiUrl = options.apiUrl || process.env.STACKMEMORY_API_URL || 'https://api.stackmemory.ai';\n const response = await fetch(`${apiUrl}/auth/login`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'StackMemory-CLI/0.3.19',\n },\n body: JSON.stringify({\n email: credentials.email,\n password: credentials.password,\n }),\n });\n\n const data: AuthResponse = await response.json();\n\n if (!response.ok || !data.success) {\n if (response.status === 404) {\n // Fallback to Railway server if hosted API not available\n console.log(chalk.yellow('\\n\u26A0\uFE0F Hosted API not available. Would you like to:'));\n const { choice } = await inquirer.prompt([\n {\n type: 'list',\n name: 'choice',\n message: 'Select an option:',\n choices: [\n { name: 'Open signup page in browser', value: 'signup' },\n { name: 'Configure database URL manually', value: 'manual' },\n { name: 'Use local database', value: 'local' },\n { name: 'Cancel', value: 'cancel' },\n ],\n },\n ]);\n\n if (choice === 'signup') {\n await open('https://stackmemory.ai/signup');\n console.log(chalk.cyan('Opening signup page in browser...'));\n return;\n } else if (choice === 'manual') {\n const { databaseUrl } = await inquirer.prompt([\n {\n type: 'password',\n name: 'databaseUrl',\n message: 'Enter your DATABASE_URL (postgres://...):',\n validate: (input: string) =>\n input.startsWith('postgres://') || input.startsWith('postgresql://')\n ? true\n : 'Must start with postgres:// or postgresql://',\n },\n ]);\n\n // Save manual configuration\n const cfgPath = join(cfgDir, 'config.json');\n let cfg: ConfigShape = {};\n try {\n if (existsSync(cfgPath)) cfg = JSON.parse(readFileSync(cfgPath, 'utf-8'));\n } catch {}\n \n cfg.database = { mode: 'hosted', url: databaseUrl };\n cfg.auth = { email: credentials.email };\n \n writeFileSync(cfgPath, JSON.stringify(cfg, null, 2));\n console.log(chalk.green('\u2713 Database configured successfully'));\n return;\n } else if (choice === 'local') {\n const cfgPath = join(cfgDir, 'config.json');\n let cfg: ConfigShape = {};\n try {\n if (existsSync(cfgPath)) cfg = JSON.parse(readFileSync(cfgPath, 'utf-8'));\n } catch {}\n \n cfg.database = { mode: 'local' };\n writeFileSync(cfgPath, JSON.stringify(cfg, null, 2));\n console.log(chalk.green('\u2713 Switched to local database mode'));\n return;\n } else {\n console.log(chalk.gray('Login cancelled'));\n return;\n }\n }\n\n throw new Error(data.error || 'Authentication failed');\n }\n\n // Save configuration\n const cfgPath = join(cfgDir, 'config.json');\n let cfg: ConfigShape = {};\n try {\n if (existsSync(cfgPath)) cfg = JSON.parse(readFileSync(cfgPath, 'utf-8'));\n } catch {}\n\n cfg.auth = {\n apiKey: data.apiKey,\n apiUrl: apiUrl,\n email: credentials.email,\n };\n\n if (data.databaseUrl) {\n cfg.database = {\n mode: 'hosted',\n url: data.databaseUrl,\n };\n }\n\n writeFileSync(cfgPath, JSON.stringify(cfg, null, 2));\n \n // Save environment variables\n const envFile = join(cfgDir, 'stackmemory.env');\n const envContent = `# StackMemory Authentication\nSTACKMEMORY_API_KEY=${data.apiKey}\nSTACKMEMORY_API_URL=${apiUrl}\n${data.databaseUrl ? `DATABASE_URL=${data.databaseUrl}` : ''}\n`;\n writeFileSync(envFile, envContent);\n\n console.log(chalk.green('\\n\u2705 Successfully logged in to StackMemory'));\n console.log(chalk.green(`\u2713 Configuration saved to ~/.stackmemory/config.json`));\n console.log(chalk.gray('\\nYou can now use:'));\n console.log(chalk.cyan(' stackmemory sync ') + chalk.gray('- Sync your context to the cloud'));\n console.log(chalk.cyan(' stackmemory db status') + chalk.gray('- Check database connection'));\n console.log(chalk.cyan(' stackmemory context ') + chalk.gray('- Manage your contexts'));\n \n } catch (error: any) {\n console.error(chalk.red('\\n\u274C Login failed:'), error.message);\n console.log(chalk.yellow('\\nTip: Visit https://stackmemory.ai/signup to create an account'));\n process.exit(1);\n }\n });\n}"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["cfgPath", "cfg"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackmemoryai/stackmemory",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.20",
|
|
4
4
|
"description": "Lossless memory runtime for AI coding tools - organizes context as a call stack instead of linear chat logs, with team collaboration and infinite retention",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=20.0.0",
|
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
"@google-cloud/storage": "^7.18.0",
|
|
87
87
|
"@linear/sdk": "^68.1.0",
|
|
88
88
|
"@modelcontextprotocol/sdk": "^0.5.0",
|
|
89
|
+
"@stackmemoryai/stackmemory": "^0.3.19",
|
|
89
90
|
"@types/bcryptjs": "^2.4.6",
|
|
90
91
|
"@types/inquirer": "^9.0.9",
|
|
91
92
|
"@types/pg": "^8.16.0",
|