@splicr/mcp-server 0.1.0 → 0.2.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.
- package/dist/auth.d.ts +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +30 -36
- package/dist/auth.js.map +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +162 -20
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +0 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -22
- package/dist/config.js.map +1 -1
- package/dist/lib/api-client.d.ts +54 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +56 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/embedding.d.ts +3 -0
- package/dist/lib/embedding.d.ts.map +1 -0
- package/dist/lib/embedding.js +44 -0
- package/dist/lib/embedding.js.map +1 -0
- package/dist/lib/project-detector.d.ts.map +1 -1
- package/dist/lib/project-detector.js +122 -38
- package/dist/lib/project-detector.js.map +1 -1
- package/dist/tools/get-project-context.d.ts.map +1 -1
- package/dist/tools/get-project-context.js +13 -26
- package/dist/tools/get-project-context.js.map +1 -1
- package/dist/tools/get-recent-insights.d.ts.map +1 -1
- package/dist/tools/get-recent-insights.js +7 -28
- package/dist/tools/get-recent-insights.js.map +1 -1
- package/dist/tools/retry-failed.d.ts.map +1 -1
- package/dist/tools/retry-failed.js +5 -41
- package/dist/tools/retry-failed.js.map +1 -1
- package/dist/tools/save-from-agent.d.ts +1 -1
- package/dist/tools/save-from-agent.d.ts.map +1 -1
- package/dist/tools/save-from-agent.js +16 -58
- package/dist/tools/save-from-agent.js.map +1 -1
- package/dist/tools/search-knowledge.d.ts.map +1 -1
- package/dist/tools/search-knowledge.js +10 -96
- package/dist/tools/search-knowledge.js.map +1 -1
- package/package.json +1 -4
package/dist/auth.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export declare function loadAuth(): Promise<{
|
|
|
8
8
|
userId: string;
|
|
9
9
|
}>;
|
|
10
10
|
/**
|
|
11
|
-
* Interactive login flow — prompts for email + password.
|
|
11
|
+
* Interactive login flow — prompts for email + password, authenticates via API server.
|
|
12
12
|
*/
|
|
13
13
|
export declare function login(): Promise<void>;
|
|
14
14
|
/**
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AA0DA;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBvG;AAED;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAqC3C;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,OAAO,CAEjC"}
|
package/dist/auth.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
2
2
|
import { homedir } from 'os';
|
|
3
3
|
import { join } from 'path';
|
|
4
|
-
|
|
5
|
-
import { loadConfig } from './config.js';
|
|
4
|
+
const API_URL = 'https://api-production-d889.up.railway.app';
|
|
6
5
|
// Check ~/.splicr first, fall back to ~/.cortex for backward compat
|
|
7
6
|
const SPLICR_AUTH = join(homedir(), '.splicr', 'auth.json');
|
|
8
7
|
const CORTEX_AUTH = join(homedir(), '.cortex', 'auth.json');
|
|
@@ -26,23 +25,20 @@ function writeAuthFile(auth) {
|
|
|
26
25
|
writeFileSync(AUTH_FILE, JSON.stringify(auth, null, 2));
|
|
27
26
|
}
|
|
28
27
|
async function refreshToken(auth) {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
const client = createClient(config.supabaseUrl, anonKey);
|
|
35
|
-
const { data, error } = await client.auth.refreshSession({
|
|
36
|
-
refresh_token: auth.refresh_token,
|
|
28
|
+
const res = await fetch(`${API_URL}/auth/refresh`, {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: { 'Content-Type': 'application/json' },
|
|
31
|
+
body: JSON.stringify({ refresh_token: auth.refresh_token }),
|
|
37
32
|
});
|
|
38
|
-
if (
|
|
39
|
-
throw new Error('Session expired. Run `splicr login` to re-authenticate.');
|
|
33
|
+
if (!res.ok) {
|
|
34
|
+
throw new Error('Session expired. Run `npx @splicr/mcp-server login` to re-authenticate.');
|
|
40
35
|
}
|
|
36
|
+
const body = await res.json();
|
|
41
37
|
const newAuth = {
|
|
42
|
-
access_token: data.
|
|
43
|
-
refresh_token: data.
|
|
44
|
-
expires_at: data.
|
|
45
|
-
user_id:
|
|
38
|
+
access_token: body.data.access_token,
|
|
39
|
+
refresh_token: body.data.refresh_token,
|
|
40
|
+
expires_at: body.data.expires_at ?? Math.floor(Date.now() / 1000) + 3600,
|
|
41
|
+
user_id: auth.user_id,
|
|
46
42
|
};
|
|
47
43
|
writeAuthFile(newAuth);
|
|
48
44
|
return newAuth;
|
|
@@ -54,7 +50,7 @@ async function refreshToken(auth) {
|
|
|
54
50
|
export async function loadAuth() {
|
|
55
51
|
const auth = readAuthFile();
|
|
56
52
|
if (!auth) {
|
|
57
|
-
throw new Error('Not authenticated. Run `splicr login` to sign in.');
|
|
53
|
+
throw new Error('Not authenticated. Run `npx @splicr/mcp-server login` to sign in.');
|
|
58
54
|
}
|
|
59
55
|
const now = Math.floor(Date.now() / 1000);
|
|
60
56
|
const fiveMinutes = 300;
|
|
@@ -71,36 +67,34 @@ export async function loadAuth() {
|
|
|
71
67
|
return { accessToken: auth.access_token, refreshToken: auth.refresh_token, userId: auth.user_id };
|
|
72
68
|
}
|
|
73
69
|
/**
|
|
74
|
-
* Interactive login flow — prompts for email + password.
|
|
70
|
+
* Interactive login flow — prompts for email + password, authenticates via API server.
|
|
75
71
|
*/
|
|
76
72
|
export async function login() {
|
|
77
73
|
const readline = await import('readline');
|
|
78
74
|
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
79
75
|
const ask = (q) => new Promise(resolve => rl.question(q, resolve));
|
|
80
76
|
try {
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (error || !data.session) {
|
|
92
|
-
console.error(`Login failed: ${error?.message ?? 'Unknown error'}`);
|
|
77
|
+
const email = await ask(' Email: ');
|
|
78
|
+
const password = await ask(' Password: ');
|
|
79
|
+
const res = await fetch(`${API_URL}/auth/login`, {
|
|
80
|
+
method: 'POST',
|
|
81
|
+
headers: { 'Content-Type': 'application/json' },
|
|
82
|
+
body: JSON.stringify({ email, password }),
|
|
83
|
+
});
|
|
84
|
+
const body = await res.json();
|
|
85
|
+
if (!res.ok) {
|
|
86
|
+
console.error(`\n Login failed: ${body.error || 'Unknown error'}`);
|
|
93
87
|
process.exit(1);
|
|
94
88
|
}
|
|
95
89
|
const auth = {
|
|
96
|
-
access_token: data.
|
|
97
|
-
refresh_token: data.
|
|
98
|
-
expires_at: data.
|
|
99
|
-
user_id: data.user.id,
|
|
90
|
+
access_token: body.data.access_token,
|
|
91
|
+
refresh_token: body.data.refresh_token,
|
|
92
|
+
expires_at: body.data.expires_at ?? Math.floor(Date.now() / 1000) + 3600,
|
|
93
|
+
user_id: body.data.user.id,
|
|
100
94
|
};
|
|
101
95
|
writeAuthFile(auth);
|
|
102
|
-
console.error(
|
|
103
|
-
console.error(`Credentials saved to ${AUTH_FILE}`);
|
|
96
|
+
console.error(`\n Authenticated as ${email}`);
|
|
97
|
+
console.error(` Credentials saved to ${AUTH_FILE}`);
|
|
104
98
|
}
|
|
105
99
|
finally {
|
|
106
100
|
rl.close();
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Unified entry point for the Splicr MCP server.
|
|
4
4
|
*
|
|
5
|
-
* - No args → starts the MCP stdio server (
|
|
6
|
-
* - "setup" → one-time setup: login + configure
|
|
5
|
+
* - No args → starts the MCP stdio server (coding agents run this)
|
|
6
|
+
* - "setup" → one-time setup: login + auto-configure all detected agents
|
|
7
7
|
* - "login" → re-authenticate
|
|
8
8
|
* - "help" → print usage
|
|
9
9
|
*/
|
package/dist/cli.js
CHANGED
|
@@ -2,12 +2,129 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Unified entry point for the Splicr MCP server.
|
|
4
4
|
*
|
|
5
|
-
* - No args → starts the MCP stdio server (
|
|
6
|
-
* - "setup" → one-time setup: login + configure
|
|
5
|
+
* - No args → starts the MCP stdio server (coding agents run this)
|
|
6
|
+
* - "setup" → one-time setup: login + auto-configure all detected agents
|
|
7
7
|
* - "login" → re-authenticate
|
|
8
8
|
* - "help" → print usage
|
|
9
9
|
*/
|
|
10
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
11
|
+
import { homedir } from 'os';
|
|
12
|
+
import { join } from 'path';
|
|
10
13
|
const command = process.argv[2];
|
|
14
|
+
const MCP_CONFIG = {
|
|
15
|
+
command: 'npx',
|
|
16
|
+
args: ['-y', '@splicr/mcp-server'],
|
|
17
|
+
};
|
|
18
|
+
function getAgents() {
|
|
19
|
+
const home = homedir();
|
|
20
|
+
const isWindows = process.platform === 'win32';
|
|
21
|
+
const appData = process.env.APPDATA || join(home, 'AppData', 'Roaming');
|
|
22
|
+
return [
|
|
23
|
+
// Claude Code — uses CLI
|
|
24
|
+
{
|
|
25
|
+
name: 'Claude Code',
|
|
26
|
+
configPath: '',
|
|
27
|
+
cliSetup: 'claude mcp add splicr -- npx -y @splicr/mcp-server',
|
|
28
|
+
serversKey: 'mcpServers',
|
|
29
|
+
},
|
|
30
|
+
// OpenAI Codex — uses CLI (TOML config at ~/.codex/config.toml)
|
|
31
|
+
{
|
|
32
|
+
name: 'Codex',
|
|
33
|
+
configPath: '',
|
|
34
|
+
cliSetup: 'codex mcp add splicr -- npx -y @splicr/mcp-server',
|
|
35
|
+
serversKey: 'mcp_servers',
|
|
36
|
+
},
|
|
37
|
+
// Cursor — global MCP config
|
|
38
|
+
{
|
|
39
|
+
name: 'Cursor',
|
|
40
|
+
configPath: isWindows
|
|
41
|
+
? join(appData, 'Cursor', 'User', 'globalStorage', 'cursor.mcp', 'mcp.json')
|
|
42
|
+
: join(home, '.cursor', 'mcp.json'),
|
|
43
|
+
serversKey: 'mcpServers',
|
|
44
|
+
},
|
|
45
|
+
// Cline (VS Code extension)
|
|
46
|
+
{
|
|
47
|
+
name: 'Cline',
|
|
48
|
+
configPath: isWindows
|
|
49
|
+
? join(appData, 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json')
|
|
50
|
+
: join(home, '.vscode', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json'),
|
|
51
|
+
serversKey: 'mcpServers',
|
|
52
|
+
},
|
|
53
|
+
// Antigravity (Google)
|
|
54
|
+
{
|
|
55
|
+
name: 'Antigravity',
|
|
56
|
+
configPath: join(home, '.gemini', 'antigravity', 'mcp_config.json'),
|
|
57
|
+
serversKey: 'mcpServers',
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
function detectInstalledAgents() {
|
|
62
|
+
const agents = getAgents();
|
|
63
|
+
const installed = [];
|
|
64
|
+
for (const agent of agents) {
|
|
65
|
+
if (agent.cliSetup) {
|
|
66
|
+
// Check if CLI exists
|
|
67
|
+
try {
|
|
68
|
+
const { execSync } = require('child_process');
|
|
69
|
+
execSync(`${agent.cliSetup.split(' ')[0]} --version`, { stdio: 'ignore' });
|
|
70
|
+
installed.push(agent);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// CLI not found
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (agent.configPath) {
|
|
77
|
+
// Check if config file or parent directory exists (agent is installed)
|
|
78
|
+
const dir = join(agent.configPath, '..');
|
|
79
|
+
if (existsSync(dir) || existsSync(agent.configPath)) {
|
|
80
|
+
installed.push(agent);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return installed;
|
|
85
|
+
}
|
|
86
|
+
function configureAgent(agent) {
|
|
87
|
+
if (agent.cliSetup) {
|
|
88
|
+
try {
|
|
89
|
+
const { execSync } = require('child_process');
|
|
90
|
+
execSync(agent.cliSetup, { stdio: 'inherit' });
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// JSON file config
|
|
98
|
+
try {
|
|
99
|
+
let config = {};
|
|
100
|
+
if (existsSync(agent.configPath)) {
|
|
101
|
+
try {
|
|
102
|
+
config = JSON.parse(readFileSync(agent.configPath, 'utf-8'));
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
config = {};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (!config[agent.serversKey]) {
|
|
109
|
+
config[agent.serversKey] = {};
|
|
110
|
+
}
|
|
111
|
+
// Check if already configured
|
|
112
|
+
if (config[agent.serversKey].splicr) {
|
|
113
|
+
return true; // Already there
|
|
114
|
+
}
|
|
115
|
+
config[agent.serversKey].splicr = MCP_CONFIG;
|
|
116
|
+
// Ensure directory exists
|
|
117
|
+
const dir = join(agent.configPath, '..');
|
|
118
|
+
if (!existsSync(dir)) {
|
|
119
|
+
mkdirSync(dir, { recursive: true });
|
|
120
|
+
}
|
|
121
|
+
writeFileSync(agent.configPath, JSON.stringify(config, null, 2));
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
11
128
|
async function main() {
|
|
12
129
|
switch (command) {
|
|
13
130
|
case 'setup':
|
|
@@ -24,7 +141,6 @@ async function main() {
|
|
|
24
141
|
printHelp();
|
|
25
142
|
break;
|
|
26
143
|
case undefined:
|
|
27
|
-
// No args → start MCP server (this is what Claude Code calls)
|
|
28
144
|
await import('./index.js');
|
|
29
145
|
break;
|
|
30
146
|
default:
|
|
@@ -35,46 +151,72 @@ async function main() {
|
|
|
35
151
|
}
|
|
36
152
|
async function setup() {
|
|
37
153
|
const { login } = await import('./auth.js');
|
|
38
|
-
const { execSync } = await import('child_process');
|
|
39
154
|
console.error('\n Splicr — route what you read to what you\'re building\n');
|
|
40
155
|
// Step 1: Login
|
|
41
156
|
console.error(' Step 1/2: Authenticate\n');
|
|
42
157
|
await login();
|
|
43
|
-
// Step 2:
|
|
44
|
-
console.error('\n Step 2/2: Configure
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
158
|
+
// Step 2: Detect and configure coding agents
|
|
159
|
+
console.error('\n Step 2/2: Configure coding agents\n');
|
|
160
|
+
const detected = detectInstalledAgents();
|
|
161
|
+
if (detected.length === 0) {
|
|
162
|
+
console.error(' No coding agents detected. Add Splicr manually to your agent\'s MCP config:\n');
|
|
163
|
+
printManualConfig();
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
console.error(` Found ${detected.length} agent(s):\n`);
|
|
167
|
+
let configured = 0;
|
|
168
|
+
for (const agent of detected) {
|
|
169
|
+
process.stderr.write(` • ${agent.name}... `);
|
|
170
|
+
if (configureAgent(agent)) {
|
|
171
|
+
console.error('✓ configured');
|
|
172
|
+
configured++;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
console.error('✗ failed (configure manually)');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (configured > 0) {
|
|
179
|
+
console.error(`\n Done! Splicr is connected to ${configured} agent(s).`);
|
|
180
|
+
console.error(' Start a new session in any agent to use it.');
|
|
50
181
|
console.error(' Save articles from your phone or browser — they\'ll show up when you code.\n');
|
|
51
182
|
}
|
|
52
|
-
|
|
53
|
-
console.error(' Could not auto-configure
|
|
54
|
-
|
|
55
|
-
console.error(' Or add to your MCP settings JSON:\n');
|
|
56
|
-
console.error(' "splicr": { "command": "npx", "args": ["-y", "@splicr/mcp-server"] }\n');
|
|
183
|
+
else {
|
|
184
|
+
console.error('\n Could not auto-configure any agents. Add manually:\n');
|
|
185
|
+
printManualConfig();
|
|
57
186
|
}
|
|
58
187
|
}
|
|
188
|
+
function printManualConfig() {
|
|
189
|
+
console.error(' Add this to your agent\'s MCP settings:\n');
|
|
190
|
+
console.error(' {');
|
|
191
|
+
console.error(' "mcpServers": {');
|
|
192
|
+
console.error(' "splicr": {');
|
|
193
|
+
console.error(' "command": "npx",');
|
|
194
|
+
console.error(' "args": ["-y", "@splicr/mcp-server"]');
|
|
195
|
+
console.error(' }');
|
|
196
|
+
console.error(' }');
|
|
197
|
+
console.error(' }\n');
|
|
198
|
+
}
|
|
59
199
|
function printHelp() {
|
|
60
200
|
console.error(`
|
|
61
201
|
Splicr MCP Server — route what you read to what you're building
|
|
62
202
|
|
|
63
203
|
Usage:
|
|
64
|
-
npx @splicr/mcp-server setup One-time setup: login + configure
|
|
204
|
+
npx @splicr/mcp-server setup One-time setup: login + auto-configure agents
|
|
65
205
|
npx @splicr/mcp-server login Authenticate with your Splicr account
|
|
66
|
-
npx @splicr/mcp-server Start MCP server (used by
|
|
206
|
+
npx @splicr/mcp-server Start MCP server (used by coding agents)
|
|
207
|
+
|
|
208
|
+
Supported agents (auto-detected):
|
|
209
|
+
Claude Code, Codex, Cursor, Cline, Antigravity
|
|
67
210
|
|
|
68
211
|
Quick start:
|
|
69
212
|
1. Sign up at splicr.dev
|
|
70
213
|
2. Run: npx @splicr/mcp-server setup
|
|
71
214
|
3. Start saving articles from your phone or browser
|
|
72
|
-
4. Open
|
|
215
|
+
4. Open any coding agent — your saves show up when relevant
|
|
73
216
|
`);
|
|
74
217
|
}
|
|
75
218
|
main().catch(err => {
|
|
76
219
|
console.error(`Error: ${err.message}`);
|
|
77
220
|
process.exit(1);
|
|
78
221
|
});
|
|
79
|
-
export {};
|
|
80
222
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QAER,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAC5C,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,SAAS,EAAE,CAAC;YACZ,MAAM;QAER,KAAK,SAAS;YACZ,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAYF,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAExE,OAAO;QACL,yBAAyB;QACzB;YACE,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,oDAAoD;YAC9D,UAAU,EAAE,YAAY;SACzB;QACD,gEAAgE;QAChE;YACE,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,mDAAmD;YAC7D,UAAU,EAAE,aAAa;SAC1B;QACD,6BAA6B;QAC7B;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,SAAS;gBACnB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,CAAC;gBAC5E,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC;YACrC,UAAU,EAAE,YAAY;SACzB;QACD,4BAA4B;QAC5B;YACE,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,SAAS;gBACnB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,wBAAwB,EAAE,UAAU,EAAE,yBAAyB,CAAC;gBACjH,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,wBAAwB,EAAE,UAAU,EAAE,yBAAyB,CAAC;YAC3G,UAAU,EAAE,YAAY;SACzB;QACD,uBAAuB;QACvB;YACE,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,CAAC;YACnE,UAAU,EAAE,YAAY;SACzB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAY,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,sBAAsB;YACtB,IAAI,CAAC;gBACH,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;gBAC9C,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC3E,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,gBAAgB;YAClB,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YAC5B,uEAAuE;YACvE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YACzC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,KAAY;IAClC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;YAC9C,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC;QACH,IAAI,MAAM,GAAQ,EAAE,CAAC;QAErB,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QAChC,CAAC;QAED,8BAA8B;QAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,CAAC,gBAAgB;QAC/B,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;QAE7C,0BAA0B;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QAER,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAC5C,MAAM,KAAK,EAAE,CAAC;YACd,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,SAAS,EAAE,CAAC;YACZ,MAAM;QAER,KAAK,SAAS;YACZ,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YAC3B,MAAM;QAER;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;YAC/C,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,KAAK;IAClB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAE5C,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAE7E,gBAAgB;IAChB,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC5C,MAAM,KAAK,EAAE,CAAC;IAEd,6CAA6C;IAC7C,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAEzD,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;IAEzC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;QACjG,iBAAiB,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,WAAW,QAAQ,CAAC,MAAM,cAAc,CAAC,CAAC;IAExD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC;QAC9C,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9B,UAAU,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,oCAAoC,UAAU,YAAY,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC;IAClG,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,iBAAiB,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC7D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACnC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC3C,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;CAgBf,CAAC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,UAAU,IAAI,YAAY,CAuBzC"}
|
package/dist/config.js
CHANGED
|
@@ -2,33 +2,25 @@ import { readFileSync, existsSync } from 'fs';
|
|
|
2
2
|
import { homedir } from 'os';
|
|
3
3
|
import { join } from 'path';
|
|
4
4
|
export function loadConfig() {
|
|
5
|
-
// Priority: env
|
|
6
|
-
if (process.env.
|
|
7
|
-
return {
|
|
8
|
-
supabaseUrl: process.env.SUPABASE_URL,
|
|
9
|
-
supabaseServiceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,
|
|
10
|
-
supabaseAnonKey: process.env.SUPABASE_ANON_KEY || '',
|
|
11
|
-
geminiApiKey: process.env.GEMINI_API_KEY || '',
|
|
12
|
-
userId: process.env.SPLICR_USER_ID || process.env.CORTEX_USER_ID || '',
|
|
13
|
-
apiServerUrl: process.env.SPLICR_API_URL || process.env.CORTEX_API_URL || 'https://api-production-d889.up.railway.app',
|
|
14
|
-
};
|
|
5
|
+
// Priority: env var > config file > default
|
|
6
|
+
if (process.env.SPLICR_API_URL) {
|
|
7
|
+
return { apiServerUrl: process.env.SPLICR_API_URL };
|
|
15
8
|
}
|
|
16
|
-
// Check ~/.splicr
|
|
9
|
+
// Check ~/.splicr/config.json for dev overrides
|
|
17
10
|
let configPath = join(homedir(), '.splicr', 'config.json');
|
|
18
11
|
if (!existsSync(configPath)) {
|
|
19
12
|
configPath = join(homedir(), '.cortex', 'config.json');
|
|
20
13
|
}
|
|
21
|
-
if (
|
|
22
|
-
|
|
14
|
+
if (existsSync(configPath)) {
|
|
15
|
+
try {
|
|
16
|
+
const raw = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
17
|
+
if (raw.api_server_url) {
|
|
18
|
+
return { apiServerUrl: raw.api_server_url };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch { /* ignore parse errors */ }
|
|
23
22
|
}
|
|
24
|
-
|
|
25
|
-
return {
|
|
26
|
-
supabaseUrl: raw.supabase_url || raw.api_url,
|
|
27
|
-
supabaseServiceRoleKey: raw.supabase_service_role_key || raw.api_key,
|
|
28
|
-
supabaseAnonKey: raw.supabase_anon_key || '',
|
|
29
|
-
geminiApiKey: raw.gemini_api_key || '',
|
|
30
|
-
userId: raw.user_id,
|
|
31
|
-
apiServerUrl: raw.api_server_url || 'http://localhost:3000',
|
|
32
|
-
};
|
|
23
|
+
// Default — production API
|
|
24
|
+
return { apiServerUrl: 'https://api-production-d889.up.railway.app' };
|
|
33
25
|
}
|
|
34
26
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,MAAM,UAAU,UAAU;IACxB,4CAA4C;IAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;IACtD,CAAC;IAED,gDAAgD;IAChD,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1D,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;gBACvB,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC;YAC9C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;IACvC,CAAC;IAED,2BAA2B;IAC3B,OAAO,EAAE,YAAY,EAAE,4CAA4C,EAAE,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
declare const API_URL: string;
|
|
2
|
+
export declare function searchKnowledge(params: {
|
|
3
|
+
query: string;
|
|
4
|
+
project_name?: string;
|
|
5
|
+
limit?: number;
|
|
6
|
+
}): Promise<any[]>;
|
|
7
|
+
export declare function getProjectContext(params: {
|
|
8
|
+
project_name?: string;
|
|
9
|
+
project_id?: string;
|
|
10
|
+
limit?: number;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
results: any[];
|
|
13
|
+
project_name?: string;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function getRecentInsights(params: {
|
|
16
|
+
days?: number;
|
|
17
|
+
limit?: number;
|
|
18
|
+
}): Promise<{
|
|
19
|
+
captures: any[];
|
|
20
|
+
failed_count: number;
|
|
21
|
+
}>;
|
|
22
|
+
export declare function saveFromAgent(params: {
|
|
23
|
+
content: string;
|
|
24
|
+
title: string;
|
|
25
|
+
project_name?: string;
|
|
26
|
+
tags?: string[];
|
|
27
|
+
}): Promise<{
|
|
28
|
+
id: string;
|
|
29
|
+
title: string;
|
|
30
|
+
project_name?: string;
|
|
31
|
+
duplicate: boolean;
|
|
32
|
+
}>;
|
|
33
|
+
export declare function resolveProject(params: {
|
|
34
|
+
local_path?: string;
|
|
35
|
+
git_remote_url?: string;
|
|
36
|
+
dir_name?: string;
|
|
37
|
+
auto_register?: {
|
|
38
|
+
name: string;
|
|
39
|
+
description: string;
|
|
40
|
+
tech_stack: string[];
|
|
41
|
+
local_path: string;
|
|
42
|
+
github_repo_url?: string;
|
|
43
|
+
};
|
|
44
|
+
}): Promise<{
|
|
45
|
+
id: string;
|
|
46
|
+
name: string;
|
|
47
|
+
confidence: string;
|
|
48
|
+
} | null>;
|
|
49
|
+
export declare function retryFailed(): Promise<{
|
|
50
|
+
retried: number;
|
|
51
|
+
message: string;
|
|
52
|
+
}>;
|
|
53
|
+
export { API_URL };
|
|
54
|
+
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,OAAO,QAA6E,CAAC;AAmC3F,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAGjB;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAErD;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAKrD;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAEpF;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAEnE;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAEjF;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { loadAuth } from '../auth.js';
|
|
2
|
+
const API_URL = process.env.SPLICR_API_URL || 'https://api-production-d889.up.railway.app';
|
|
3
|
+
async function apiRequest(method, path, body) {
|
|
4
|
+
const auth = await loadAuth();
|
|
5
|
+
const opts = {
|
|
6
|
+
method,
|
|
7
|
+
headers: {
|
|
8
|
+
'Authorization': `Bearer ${auth.accessToken}`,
|
|
9
|
+
'Content-Type': 'application/json',
|
|
10
|
+
},
|
|
11
|
+
signal: AbortSignal.timeout(25000),
|
|
12
|
+
};
|
|
13
|
+
if (body && method !== 'GET') {
|
|
14
|
+
opts.body = JSON.stringify(body);
|
|
15
|
+
}
|
|
16
|
+
const res = await fetch(`${API_URL}${path}`, opts);
|
|
17
|
+
if (!res.ok) {
|
|
18
|
+
let errorMsg;
|
|
19
|
+
try {
|
|
20
|
+
const errBody = await res.json();
|
|
21
|
+
errorMsg = errBody.error || `HTTP ${res.status}`;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
errorMsg = `HTTP ${res.status}`;
|
|
25
|
+
}
|
|
26
|
+
throw new Error(errorMsg);
|
|
27
|
+
}
|
|
28
|
+
const json = await res.json();
|
|
29
|
+
return json.data;
|
|
30
|
+
}
|
|
31
|
+
export async function searchKnowledge(params) {
|
|
32
|
+
const data = await apiRequest('POST', '/mcp/search', params);
|
|
33
|
+
return data.results ?? [];
|
|
34
|
+
}
|
|
35
|
+
export async function getProjectContext(params) {
|
|
36
|
+
return await apiRequest('POST', '/mcp/project-context', params);
|
|
37
|
+
}
|
|
38
|
+
export async function getRecentInsights(params) {
|
|
39
|
+
const qs = new URLSearchParams();
|
|
40
|
+
if (params.days)
|
|
41
|
+
qs.set('days', String(params.days));
|
|
42
|
+
if (params.limit)
|
|
43
|
+
qs.set('limit', String(params.limit));
|
|
44
|
+
return await apiRequest('GET', `/mcp/recent?${qs.toString()}`);
|
|
45
|
+
}
|
|
46
|
+
export async function saveFromAgent(params) {
|
|
47
|
+
return await apiRequest('POST', '/mcp/save', params);
|
|
48
|
+
}
|
|
49
|
+
export async function resolveProject(params) {
|
|
50
|
+
return await apiRequest('POST', '/mcp/resolve-project', params);
|
|
51
|
+
}
|
|
52
|
+
export async function retryFailed() {
|
|
53
|
+
return await apiRequest('POST', '/captures/retry-failed', {});
|
|
54
|
+
}
|
|
55
|
+
export { API_URL };
|
|
56
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,4CAA4C,CAAC;AAE3F,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,IAAY,EAAE,IAAU;IAChE,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE9B,MAAM,IAAI,GAAgB;QACxB,MAAM;QACN,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,IAAI,CAAC,WAAW,EAAE;YAC7C,cAAc,EAAE,kBAAkB;SACnC;QACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;KACnC,CAAC;IAEF,IAAI,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAEnD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;YACxC,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAIrC;IACC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAIvC;IACC,OAAO,MAAM,UAAU,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAGvC;IACC,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI;QAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,KAAK;QAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,OAAO,MAAM,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAKnC;IACC,OAAO,MAAM,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAWpC;IACC,OAAO,MAAM,UAAU,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,OAAO,MAAM,UAAU,CAAC,MAAM,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../src/lib/embedding.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwCvE"}
|