studiograph 1.1.1 → 1.1.3
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/LICENSE +191 -0
- package/README.md +307 -10
- package/dist/agent/orchestrator.d.ts +17 -9
- package/dist/agent/orchestrator.js +95 -95
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/system.md +168 -0
- package/dist/agent/skills/bundled/enrich-entities.md +124 -0
- package/dist/agent/skills/bundled/gather-context.md +46 -0
- package/dist/agent/skills/skill-loader.d.ts +48 -0
- package/dist/agent/skills/skill-loader.js +166 -0
- package/dist/agent/skills/skill-loader.js.map +1 -0
- package/dist/agent/tools/graph-tools.d.ts +20 -2
- package/dist/agent/tools/graph-tools.js +64 -8
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/load-skill.d.ts +42 -0
- package/dist/agent/tools/load-skill.js +45 -0
- package/dist/agent/tools/load-skill.js.map +1 -0
- package/dist/agent/tools/tool-loader.d.ts +25 -0
- package/dist/agent/tools/tool-loader.js +73 -0
- package/dist/agent/tools/tool-loader.js.map +1 -0
- package/dist/cli/commands/app.d.ts +7 -0
- package/dist/cli/commands/app.js +167 -0
- package/dist/cli/commands/app.js.map +1 -0
- package/dist/cli/commands/config.d.ts +13 -0
- package/dist/cli/commands/config.js +276 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/connector.d.ts +33 -0
- package/dist/cli/commands/connector.js +170 -0
- package/dist/cli/commands/connector.js.map +1 -0
- package/dist/cli/commands/deploy.d.ts +11 -0
- package/dist/cli/commands/deploy.js +153 -0
- package/dist/cli/commands/deploy.js.map +1 -0
- package/dist/cli/commands/index.d.ts +15 -0
- package/dist/cli/commands/index.js +117 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.js +110 -28
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/join.js +67 -22
- package/dist/cli/commands/join.js.map +1 -1
- package/dist/cli/commands/lint.d.ts +8 -0
- package/dist/cli/commands/lint.js +70 -0
- package/dist/cli/commands/lint.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +27 -0
- package/dist/cli/commands/mcp.js +56 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/provision.d.ts +8 -0
- package/dist/cli/commands/provision.js +112 -0
- package/dist/cli/commands/provision.js.map +1 -0
- package/dist/cli/commands/r2.d.ts +2 -0
- package/dist/cli/commands/r2.js +186 -4
- package/dist/cli/commands/r2.js.map +1 -1
- package/dist/cli/commands/serve.js +47 -2
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/start.js +210 -71
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/sync.js +4 -4
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/update.d.ts +8 -0
- package/dist/cli/commands/update.js +155 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.js +83 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/scaffolding.d.ts +9 -0
- package/dist/cli/scaffolding.js +288 -0
- package/dist/cli/scaffolding.js.map +1 -0
- package/dist/core/graph.d.ts +12 -1
- package/dist/core/graph.js +147 -78
- package/dist/core/graph.js.map +1 -1
- package/dist/core/migration-runner.d.ts +39 -0
- package/dist/core/migration-runner.js +221 -0
- package/dist/core/migration-runner.js.map +1 -0
- package/dist/core/migration-types.d.ts +101 -0
- package/dist/core/migration-types.js +21 -0
- package/dist/core/migration-types.js.map +1 -0
- package/dist/core/migrations/20260219-formalize-memory-location.d.ts +2 -0
- package/dist/core/migrations/20260219-formalize-memory-location.js +35 -0
- package/dist/core/migrations/20260219-formalize-memory-location.js.map +1 -0
- package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +12 -0
- package/dist/core/migrations/20260220-add-workspace-metadata.js +65 -0
- package/dist/core/migrations/20260220-add-workspace-metadata.js.map +1 -0
- package/dist/core/migrations/20260220-add-workspace-readme.d.ts +11 -0
- package/dist/core/migrations/20260220-add-workspace-readme.js +82 -0
- package/dist/core/migrations/20260220-add-workspace-readme.js.map +1 -0
- package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +9 -0
- package/dist/core/migrations/20260220-migrate-yaml-to-json.js +64 -0
- package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +1 -0
- package/dist/core/migrations/index.d.ts +11 -0
- package/dist/core/migrations/index.js +23 -0
- package/dist/core/migrations/index.js.map +1 -0
- package/dist/core/schema-registry.d.ts +36 -0
- package/dist/core/schema-registry.js +161 -0
- package/dist/core/schema-registry.js.map +1 -0
- package/dist/core/types.d.ts +242 -0
- package/dist/core/types.js +21 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +10 -0
- package/dist/core/user-config.js +8 -0
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/validation.d.ts +973 -32
- package/dist/core/validation.js +163 -4
- package/dist/core/validation.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +26 -2
- package/dist/core/workspace-manager.js +113 -15
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/core/workspace.d.ts +8 -7
- package/dist/core/workspace.js +25 -13
- package/dist/core/workspace.js.map +1 -1
- package/dist/mcp/connector-manager.d.ts +61 -0
- package/dist/mcp/connector-manager.js +178 -0
- package/dist/mcp/connector-manager.js.map +1 -0
- package/dist/mcp/connectors/definitions.d.ts +43 -0
- package/dist/mcp/connectors/definitions.js +140 -0
- package/dist/mcp/connectors/definitions.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -0
- package/dist/mcp/server.js +28 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +14 -0
- package/dist/mcp/tools.js +172 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/server/index.js +17 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/plugin-loader.d.ts +8 -0
- package/dist/server/plugin-loader.js +14 -0
- package/dist/server/plugin-loader.js.map +1 -1
- package/dist/server/routes/graph-api.js +1 -1
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/webhook.js +33 -0
- package/dist/server/routes/webhook.js.map +1 -1
- package/dist/services/github-provisioner.d.ts +1 -0
- package/dist/services/github-provisioner.js +11 -0
- package/dist/services/github-provisioner.js.map +1 -1
- package/dist/services/lint-service.d.ts +27 -0
- package/dist/services/lint-service.js +76 -0
- package/dist/services/lint-service.js.map +1 -0
- package/dist/services/markdown.d.ts +9 -0
- package/dist/services/markdown.js +23 -2
- package/dist/services/markdown.js.map +1 -1
- package/dist/services/memory-service.d.ts +1 -2
- package/dist/services/memory-service.js +6 -4
- package/dist/services/memory-service.js.map +1 -1
- package/dist/services/vector-service.d.ts +77 -0
- package/dist/services/vector-service.js +280 -0
- package/dist/services/vector-service.js.map +1 -0
- package/dist/utils/version-checker.d.ts +23 -0
- package/dist/utils/version-checker.js +116 -0
- package/dist/utils/version-checker.js.map +1 -0
- package/package.json +10 -6
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph app command
|
|
3
|
+
*
|
|
4
|
+
* Manages Studiograph app plugins — install, and in future: list, remove.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { intro, outro, spinner, confirm, log } from '@clack/prompts';
|
|
8
|
+
import { existsSync, mkdirSync, cpSync, readFileSync, writeFileSync, readdirSync } from 'fs';
|
|
9
|
+
import { join, resolve } from 'path';
|
|
10
|
+
import { execSync } from 'child_process';
|
|
11
|
+
import { Workspace } from '../../core/workspace.js';
|
|
12
|
+
export const appCommand = new Command('app')
|
|
13
|
+
.description('Manage Studiograph app plugins');
|
|
14
|
+
appCommand
|
|
15
|
+
.command('install <source>')
|
|
16
|
+
.description('Install an app plugin from a local directory')
|
|
17
|
+
.option('--no-commit', 'Skip git commit after installing')
|
|
18
|
+
.option('--push', 'Push to remote after committing')
|
|
19
|
+
.action(async (source, options) => {
|
|
20
|
+
intro('Install App Plugin');
|
|
21
|
+
// Detect workspace from cwd
|
|
22
|
+
const workspacePath = process.cwd();
|
|
23
|
+
const workspace = new Workspace(workspacePath);
|
|
24
|
+
if (!workspace.isWorkspace()) {
|
|
25
|
+
outro('❌ Not a Studiograph workspace. Run from your workspace directory.');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const sourceDir = resolve(source);
|
|
30
|
+
const manifestPath = join(sourceDir, 'app.json');
|
|
31
|
+
if (!existsSync(manifestPath)) {
|
|
32
|
+
outro(`❌ No app.json found in ${sourceDir}`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
let manifest;
|
|
37
|
+
try {
|
|
38
|
+
manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
outro(`❌ Could not parse app.json in ${sourceDir}`);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (!manifest.name || !manifest.plugin || !manifest.mountPath) {
|
|
46
|
+
outro('❌ app.json is missing required fields: name, plugin, mountPath');
|
|
47
|
+
process.exit(1);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Step 1: Build (if declared)
|
|
51
|
+
if (manifest.build) {
|
|
52
|
+
const buildSpinner = spinner();
|
|
53
|
+
buildSpinner.start(`Building ${manifest.name}...`);
|
|
54
|
+
try {
|
|
55
|
+
execSync(manifest.build, { cwd: sourceDir, stdio: 'pipe' });
|
|
56
|
+
buildSpinner.stop(`Built ${manifest.name}`);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
buildSpinner.stop('Build failed');
|
|
60
|
+
const stderr = err?.stderr?.toString() ?? '';
|
|
61
|
+
outro(`❌ Build command failed: ${manifest.build}\n${stderr}`);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Step 2: Copy files to .studiograph/apps/<name>/
|
|
67
|
+
const studiographDir = join(workspacePath, '.studiograph');
|
|
68
|
+
const destDir = join(studiographDir, 'apps', manifest.name);
|
|
69
|
+
mkdirSync(destDir, { recursive: true });
|
|
70
|
+
const installSpinner = spinner();
|
|
71
|
+
installSpinner.start(`Installing ${manifest.name}...`);
|
|
72
|
+
const installed = [];
|
|
73
|
+
// app.json
|
|
74
|
+
cpSync(manifestPath, join(destDir, 'app.json'));
|
|
75
|
+
installed.push('app.json');
|
|
76
|
+
// plugin file (normalise ./prefix)
|
|
77
|
+
const pluginRelPath = manifest.plugin.replace(/^\.\//, '');
|
|
78
|
+
const pluginSrc = join(sourceDir, pluginRelPath);
|
|
79
|
+
if (existsSync(pluginSrc)) {
|
|
80
|
+
cpSync(pluginSrc, join(destDir, 'plugin.js'));
|
|
81
|
+
installed.push('plugin.js');
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
installSpinner.stop('');
|
|
85
|
+
outro(`❌ Plugin file not found: ${pluginSrc}`);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// entity-types.json (optional)
|
|
90
|
+
if (manifest.entityTypes) {
|
|
91
|
+
const etSrc = join(sourceDir, manifest.entityTypes.replace(/^\.\//, ''));
|
|
92
|
+
if (existsSync(etSrc)) {
|
|
93
|
+
cpSync(etSrc, join(destDir, 'entity-types.json'));
|
|
94
|
+
installed.push('entity-types.json');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// skills/ (optional)
|
|
98
|
+
const skillsSrc = join(sourceDir, 'skills');
|
|
99
|
+
if (existsSync(skillsSrc)) {
|
|
100
|
+
cpSync(skillsSrc, join(destDir, 'skills'), { recursive: true });
|
|
101
|
+
const count = readdirSync(skillsSrc).length;
|
|
102
|
+
installed.push(`skills/ (${count} entries)`);
|
|
103
|
+
}
|
|
104
|
+
// tools/ (optional)
|
|
105
|
+
const toolsSrc = join(sourceDir, 'tools');
|
|
106
|
+
if (existsSync(toolsSrc)) {
|
|
107
|
+
cpSync(toolsSrc, join(destDir, 'tools'), { recursive: true });
|
|
108
|
+
const count = readdirSync(toolsSrc).length;
|
|
109
|
+
installed.push(`tools/ (${count} entries)`);
|
|
110
|
+
}
|
|
111
|
+
// theme/ — resolve source dir from themeDir field or ./theme/
|
|
112
|
+
const themeSrcDir = manifest.themeDir
|
|
113
|
+
? join(sourceDir, manifest.themeDir.replace(/^\.\//, ''))
|
|
114
|
+
: join(sourceDir, 'theme');
|
|
115
|
+
if (existsSync(themeSrcDir)) {
|
|
116
|
+
const themeDest = join(destDir, 'theme');
|
|
117
|
+
const tokensDestPath = join(themeDest, 'tokens.json');
|
|
118
|
+
const existingTokens = existsSync(tokensDestPath)
|
|
119
|
+
? readFileSync(tokensDestPath, 'utf-8')
|
|
120
|
+
: null;
|
|
121
|
+
cpSync(themeSrcDir, themeDest, { recursive: true });
|
|
122
|
+
// Restore tokens.json if it existed — never overwrite customised tokens
|
|
123
|
+
if (existingTokens !== null) {
|
|
124
|
+
writeFileSync(tokensDestPath, existingTokens);
|
|
125
|
+
log.info('tokens.json preserved (not overwritten)');
|
|
126
|
+
}
|
|
127
|
+
installed.push('theme/');
|
|
128
|
+
}
|
|
129
|
+
const versionLabel = manifest.version ? ` v${manifest.version}` : '';
|
|
130
|
+
installSpinner.stop(`Installed ${manifest.name}${versionLabel}`);
|
|
131
|
+
for (const item of installed) {
|
|
132
|
+
log.info(` ✓ ${item}`);
|
|
133
|
+
}
|
|
134
|
+
// Step 3: Git commit in .studiograph/
|
|
135
|
+
if (options.commit !== false) {
|
|
136
|
+
const commitSpinner = spinner();
|
|
137
|
+
commitSpinner.start('Committing to config repo...');
|
|
138
|
+
try {
|
|
139
|
+
execSync(`git -C "${studiographDir}" add "apps/${manifest.name}/"`, { stdio: 'pipe' });
|
|
140
|
+
const commitMsg = `install ${manifest.name}${versionLabel}`;
|
|
141
|
+
execSync(`git -C "${studiographDir}" commit -m "${commitMsg}"`, { stdio: 'pipe' });
|
|
142
|
+
commitSpinner.stop('Committed to config repo');
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
commitSpinner.stop('Nothing to commit (already up to date)');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Step 4: Push
|
|
149
|
+
let shouldPush = options.push ?? false;
|
|
150
|
+
if (!shouldPush && options.commit !== false) {
|
|
151
|
+
const answer = await confirm({ message: 'Push to remote?' });
|
|
152
|
+
shouldPush = answer === true;
|
|
153
|
+
}
|
|
154
|
+
if (shouldPush) {
|
|
155
|
+
const pushSpinner = spinner();
|
|
156
|
+
pushSpinner.start('Pushing...');
|
|
157
|
+
try {
|
|
158
|
+
execSync(`git -C "${studiographDir}" push`, { stdio: 'pipe' });
|
|
159
|
+
pushSpinner.stop('Pushed');
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
pushSpinner.stop('Push failed — run git push manually in .studiograph/');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
outro(`✨ ${manifest.name} installed. Restart studiograph serve to apply.`);
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/cli/commands/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph config command
|
|
3
|
+
*
|
|
4
|
+
* Interactive configuration management for ~/.studiograph/user.json.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* studiograph config # Interactive menu
|
|
8
|
+
* studiograph config set model_provider anthropic # Direct set
|
|
9
|
+
* studiograph config get model_provider # Direct get
|
|
10
|
+
* studiograph config list # Show all config
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
export declare const configCommand: Command;
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph config command
|
|
3
|
+
*
|
|
4
|
+
* Interactive configuration management for ~/.studiograph/user.json.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* studiograph config # Interactive menu
|
|
8
|
+
* studiograph config set model_provider anthropic # Direct set
|
|
9
|
+
* studiograph config get model_provider # Direct get
|
|
10
|
+
* studiograph config list # Show all config
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
import { loadUserConfig, saveUserConfig } from '../../core/user-config.js';
|
|
14
|
+
import { intro, outro, select, text, spinner } from '@clack/prompts';
|
|
15
|
+
const ALLOWED_KEYS = new Set([
|
|
16
|
+
'model_provider',
|
|
17
|
+
'model_id',
|
|
18
|
+
'api_key',
|
|
19
|
+
'voyage_api_key',
|
|
20
|
+
'vector_db_path',
|
|
21
|
+
]);
|
|
22
|
+
const VALID_PROVIDERS = new Set([
|
|
23
|
+
'anthropic',
|
|
24
|
+
'openai',
|
|
25
|
+
'google',
|
|
26
|
+
'xai',
|
|
27
|
+
'groq',
|
|
28
|
+
'openrouter',
|
|
29
|
+
]);
|
|
30
|
+
// Model provider configurations (same as start.ts)
|
|
31
|
+
const MODEL_PROVIDERS = {
|
|
32
|
+
anthropic: {
|
|
33
|
+
name: 'Anthropic (Claude)',
|
|
34
|
+
models: [
|
|
35
|
+
{ id: 'claude-opus-4-6', name: 'Claude Opus 4.6', hint: 'Most capable' },
|
|
36
|
+
{ id: 'claude-sonnet-4-5-20250929', name: 'Claude Sonnet 4.5', hint: 'Recommended' },
|
|
37
|
+
{ id: 'claude-3-7-sonnet-20250219', name: 'Claude 3.7 Sonnet', hint: 'Faster' },
|
|
38
|
+
{ id: 'claude-3-5-haiku-20241022', name: 'Claude 3.5 Haiku', hint: 'Fastest' },
|
|
39
|
+
],
|
|
40
|
+
envVar: 'ANTHROPIC_API_KEY',
|
|
41
|
+
},
|
|
42
|
+
openai: {
|
|
43
|
+
name: 'OpenAI (GPT)',
|
|
44
|
+
models: [
|
|
45
|
+
{ id: 'gpt-4o', name: 'GPT-4o', hint: 'Recommended' },
|
|
46
|
+
{ id: 'gpt-4o-mini', name: 'GPT-4o Mini', hint: 'Faster and cheaper' },
|
|
47
|
+
{ id: 'gpt-4-turbo', name: 'GPT-4 Turbo', hint: 'Previous generation' },
|
|
48
|
+
],
|
|
49
|
+
envVar: 'OPENAI_API_KEY',
|
|
50
|
+
},
|
|
51
|
+
google: {
|
|
52
|
+
name: 'Google (Gemini)',
|
|
53
|
+
models: [
|
|
54
|
+
{ id: 'gemini-2.0-flash-exp', name: 'Gemini 2.0 Flash', hint: 'Latest experimental' },
|
|
55
|
+
{ id: 'gemini-1.5-pro', name: 'Gemini 1.5 Pro', hint: 'Most capable' },
|
|
56
|
+
{ id: 'gemini-1.5-flash', name: 'Gemini 1.5 Flash', hint: 'Fast' },
|
|
57
|
+
],
|
|
58
|
+
envVar: 'GOOGLE_API_KEY',
|
|
59
|
+
},
|
|
60
|
+
xai: {
|
|
61
|
+
name: 'xAI (Grok)',
|
|
62
|
+
models: [
|
|
63
|
+
{ id: 'grok-2-1212', name: 'Grok 2', hint: 'Latest' },
|
|
64
|
+
{ id: 'grok-2-vision-1212', name: 'Grok 2 Vision', hint: 'With vision' },
|
|
65
|
+
],
|
|
66
|
+
envVar: 'XAI_API_KEY',
|
|
67
|
+
},
|
|
68
|
+
groq: {
|
|
69
|
+
name: 'Groq (Fast Inference)',
|
|
70
|
+
models: [
|
|
71
|
+
{ id: 'llama-3.3-70b-versatile', name: 'Llama 3.3 70B', hint: 'Very fast' },
|
|
72
|
+
{ id: 'mixtral-8x7b-32768', name: 'Mixtral 8x7B', hint: 'Fast and capable' },
|
|
73
|
+
],
|
|
74
|
+
envVar: 'GROQ_API_KEY',
|
|
75
|
+
},
|
|
76
|
+
openrouter: {
|
|
77
|
+
name: 'OpenRouter',
|
|
78
|
+
models: [
|
|
79
|
+
{ id: 'anthropic/claude-opus-4-6', name: 'Claude Opus 4.6', hint: 'Via OpenRouter' },
|
|
80
|
+
{ id: 'openai/gpt-4o', name: 'GPT-4o', hint: 'Via OpenRouter' },
|
|
81
|
+
{ id: 'meta-llama/llama-3.3-70b-instruct', name: 'Llama 3.3 70B', hint: 'Open source' },
|
|
82
|
+
],
|
|
83
|
+
envVar: 'OPENROUTER_API_KEY',
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
export const configCommand = new Command('config')
|
|
87
|
+
.description('Manage user configuration (interactive or direct commands)')
|
|
88
|
+
.action(async () => {
|
|
89
|
+
// Interactive mode when called without subcommands
|
|
90
|
+
await runInteractiveConfig();
|
|
91
|
+
});
|
|
92
|
+
configCommand
|
|
93
|
+
.command('set <key> <value>')
|
|
94
|
+
.description('Set a config value in ~/.studiograph/user.json')
|
|
95
|
+
.action((key, value) => {
|
|
96
|
+
if (!ALLOWED_KEYS.has(key)) {
|
|
97
|
+
console.error(`❌ Unknown config key: ${key}`);
|
|
98
|
+
console.error(` Supported keys: ${[...ALLOWED_KEYS].join(', ')}`);
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
if (key === 'model_provider' && !VALID_PROVIDERS.has(value)) {
|
|
102
|
+
console.error(`❌ Invalid provider: ${value}`);
|
|
103
|
+
console.error(` Supported providers: ${[...VALID_PROVIDERS].join(', ')}`);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
const config = loadUserConfig();
|
|
107
|
+
config[key] = value;
|
|
108
|
+
saveUserConfig(config);
|
|
109
|
+
console.log(`✓ Set ${key}`);
|
|
110
|
+
});
|
|
111
|
+
configCommand
|
|
112
|
+
.command('get <key>')
|
|
113
|
+
.description('Get a config value from ~/.studiograph/user.json')
|
|
114
|
+
.action((key) => {
|
|
115
|
+
const config = loadUserConfig();
|
|
116
|
+
const value = config[key];
|
|
117
|
+
if (value === undefined) {
|
|
118
|
+
console.log(`(not set)`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.log(value);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
configCommand
|
|
125
|
+
.command('list')
|
|
126
|
+
.description('Show all user configuration')
|
|
127
|
+
.action(() => {
|
|
128
|
+
const config = loadUserConfig();
|
|
129
|
+
console.log('\nUser Configuration (~/.studiograph/user.json):\n');
|
|
130
|
+
if (config.model_provider) {
|
|
131
|
+
console.log(`Model Provider: ${config.model_provider}`);
|
|
132
|
+
}
|
|
133
|
+
if (config.model_id) {
|
|
134
|
+
console.log(`Model ID: ${config.model_id}`);
|
|
135
|
+
}
|
|
136
|
+
if (config.api_key) {
|
|
137
|
+
console.log(`API Key: ${config.api_key.slice(0, 12)}...`);
|
|
138
|
+
}
|
|
139
|
+
if (config.voyage_api_key) {
|
|
140
|
+
console.log(`Voyage API Key: ${config.voyage_api_key.slice(0, 12)}...`);
|
|
141
|
+
}
|
|
142
|
+
if (config.vector_db_path) {
|
|
143
|
+
console.log(`Vector DB Path: ${config.vector_db_path}`);
|
|
144
|
+
}
|
|
145
|
+
if (!config.model_provider && !config.voyage_api_key && !config.vector_db_path) {
|
|
146
|
+
console.log('(no configuration set)');
|
|
147
|
+
}
|
|
148
|
+
console.log('');
|
|
149
|
+
});
|
|
150
|
+
async function runInteractiveConfig() {
|
|
151
|
+
intro('Configuration');
|
|
152
|
+
const config = loadUserConfig();
|
|
153
|
+
const category = await select({
|
|
154
|
+
message: 'What would you like to configure?',
|
|
155
|
+
options: [
|
|
156
|
+
{ value: 'model', label: 'AI Model & API Key', hint: 'Change provider, model, or credentials' },
|
|
157
|
+
{ value: 'vector', label: 'Vector Search', hint: 'Voyage API key and vector DB path' },
|
|
158
|
+
{ value: 'view', label: 'View Current Config', hint: 'Show all settings' },
|
|
159
|
+
{ value: 'exit', label: 'Exit', hint: '' },
|
|
160
|
+
],
|
|
161
|
+
});
|
|
162
|
+
if (typeof category === 'symbol' || category === 'exit') {
|
|
163
|
+
outro('Cancelled');
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (category === 'view') {
|
|
167
|
+
console.log('\n');
|
|
168
|
+
if (config.model_provider) {
|
|
169
|
+
const provider = MODEL_PROVIDERS[config.model_provider];
|
|
170
|
+
console.log(`AI Model: ${provider?.name || config.model_provider}`);
|
|
171
|
+
console.log(`Model ID: ${config.model_id || '(not set)'}`);
|
|
172
|
+
console.log(`API Key: ${config.api_key ? config.api_key.slice(0, 12) + '...' : '(not set)'}`);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
console.log(`AI Model: (not set)`);
|
|
176
|
+
}
|
|
177
|
+
console.log('');
|
|
178
|
+
console.log(`Voyage API Key: ${config.voyage_api_key ? config.voyage_api_key.slice(0, 12) + '...' : '(not set)'}`);
|
|
179
|
+
console.log(`Vector DB Path: ${config.vector_db_path || '(not set)'}`);
|
|
180
|
+
console.log('');
|
|
181
|
+
outro('Configuration displayed');
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (category === 'model') {
|
|
185
|
+
// Model configuration
|
|
186
|
+
const providerChoice = await select({
|
|
187
|
+
message: 'Select AI provider:',
|
|
188
|
+
options: Object.entries(MODEL_PROVIDERS).map(([key, provider]) => ({
|
|
189
|
+
value: key,
|
|
190
|
+
label: provider.name,
|
|
191
|
+
})),
|
|
192
|
+
});
|
|
193
|
+
if (typeof providerChoice === 'symbol') {
|
|
194
|
+
outro('Cancelled');
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const provider = MODEL_PROVIDERS[providerChoice];
|
|
198
|
+
const modelChoice = await select({
|
|
199
|
+
message: `Select ${provider.name} model:`,
|
|
200
|
+
options: provider.models.map(m => ({
|
|
201
|
+
value: m.id,
|
|
202
|
+
label: m.name,
|
|
203
|
+
hint: m.hint,
|
|
204
|
+
})),
|
|
205
|
+
});
|
|
206
|
+
if (typeof modelChoice === 'symbol') {
|
|
207
|
+
outro('Cancelled');
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const apiKeyInput = await text({
|
|
211
|
+
message: `Enter your ${provider.name} API key:`,
|
|
212
|
+
placeholder: `${provider.envVar}`,
|
|
213
|
+
validate: (value) => {
|
|
214
|
+
if (!value || value.length < 10)
|
|
215
|
+
return 'API key seems too short';
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
if (typeof apiKeyInput !== 'string') {
|
|
219
|
+
outro('Cancelled');
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
const s = spinner();
|
|
223
|
+
s.start('Saving configuration...');
|
|
224
|
+
config.model_provider = providerChoice;
|
|
225
|
+
config.model_id = modelChoice;
|
|
226
|
+
config.api_key = apiKeyInput;
|
|
227
|
+
saveUserConfig(config);
|
|
228
|
+
s.stop('Configuration saved ✓');
|
|
229
|
+
outro(`Model configured: ${provider.name} - ${modelChoice}`);
|
|
230
|
+
}
|
|
231
|
+
else if (category === 'vector') {
|
|
232
|
+
// Vector search configuration
|
|
233
|
+
const vectorOption = await select({
|
|
234
|
+
message: 'Configure:',
|
|
235
|
+
options: [
|
|
236
|
+
{ value: 'voyage_key', label: 'Voyage API Key', hint: 'For semantic search embeddings' },
|
|
237
|
+
{ value: 'vector_path', label: 'Vector DB Path', hint: 'LanceDB storage location' },
|
|
238
|
+
],
|
|
239
|
+
});
|
|
240
|
+
if (typeof vectorOption === 'symbol') {
|
|
241
|
+
outro('Cancelled');
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (vectorOption === 'voyage_key') {
|
|
245
|
+
const keyInput = await text({
|
|
246
|
+
message: 'Enter your Voyage AI API key:',
|
|
247
|
+
placeholder: 'pa-...',
|
|
248
|
+
validate: (value) => {
|
|
249
|
+
if (!value || value.length < 10)
|
|
250
|
+
return 'API key seems too short';
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
if (typeof keyInput !== 'string') {
|
|
254
|
+
outro('Cancelled');
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
config.voyage_api_key = keyInput;
|
|
258
|
+
saveUserConfig(config);
|
|
259
|
+
outro('Voyage API key saved ✓');
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
const pathInput = await text({
|
|
263
|
+
message: 'Enter vector DB path:',
|
|
264
|
+
placeholder: '~/.studiograph/vector',
|
|
265
|
+
});
|
|
266
|
+
if (typeof pathInput !== 'string') {
|
|
267
|
+
outro('Cancelled');
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
config.vector_db_path = pathInput;
|
|
271
|
+
saveUserConfig(config);
|
|
272
|
+
outro('Vector DB path saved ✓');
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph connector
|
|
3
|
+
*
|
|
4
|
+
* Manage MCP connectors — integrations with third-party MCP servers
|
|
5
|
+
* (Linear, Granola, Slack, etc.) that the Studiograph agent can query on demand.
|
|
6
|
+
*
|
|
7
|
+
* Connector configs are stored at ~/.studiograph/connectors/<name>.json
|
|
8
|
+
* (mode 0600 — tokens never leave your machine).
|
|
9
|
+
*
|
|
10
|
+
* Interactive setup (known connectors):
|
|
11
|
+
* studiograph connector add slack
|
|
12
|
+
* studiograph connector add linear
|
|
13
|
+
*
|
|
14
|
+
* Manual setup (any connector):
|
|
15
|
+
* studiograph connector add linear \
|
|
16
|
+
* --url https://mcp.linear.app/mcp \
|
|
17
|
+
* --token lin_api_xxxx \
|
|
18
|
+
* --description "Linear project management"
|
|
19
|
+
*
|
|
20
|
+
* studiograph connector add granola \
|
|
21
|
+
* --command node \
|
|
22
|
+
* --args "/Users/you/mcp-servers/granola-mcp/dist/index.js" \
|
|
23
|
+
* --description "Granola meeting notes"
|
|
24
|
+
*
|
|
25
|
+
* studiograph connector list
|
|
26
|
+
* studiograph connector remove linear
|
|
27
|
+
*
|
|
28
|
+
* Once added, the connector's tools are available to the agent as
|
|
29
|
+
* <name>__<tool> (e.g. "linear__search_issues", "granola__search_granola_notes").
|
|
30
|
+
* The agent discovers them automatically on the next `studiograph start`.
|
|
31
|
+
*/
|
|
32
|
+
import { Command } from 'commander';
|
|
33
|
+
export declare const connectorCommand: Command;
|