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.
Files changed (147) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +307 -10
  3. package/dist/agent/orchestrator.d.ts +17 -9
  4. package/dist/agent/orchestrator.js +95 -95
  5. package/dist/agent/orchestrator.js.map +1 -1
  6. package/dist/agent/prompts/system.md +168 -0
  7. package/dist/agent/skills/bundled/enrich-entities.md +124 -0
  8. package/dist/agent/skills/bundled/gather-context.md +46 -0
  9. package/dist/agent/skills/skill-loader.d.ts +48 -0
  10. package/dist/agent/skills/skill-loader.js +166 -0
  11. package/dist/agent/skills/skill-loader.js.map +1 -0
  12. package/dist/agent/tools/graph-tools.d.ts +20 -2
  13. package/dist/agent/tools/graph-tools.js +64 -8
  14. package/dist/agent/tools/graph-tools.js.map +1 -1
  15. package/dist/agent/tools/load-skill.d.ts +42 -0
  16. package/dist/agent/tools/load-skill.js +45 -0
  17. package/dist/agent/tools/load-skill.js.map +1 -0
  18. package/dist/agent/tools/tool-loader.d.ts +25 -0
  19. package/dist/agent/tools/tool-loader.js +73 -0
  20. package/dist/agent/tools/tool-loader.js.map +1 -0
  21. package/dist/cli/commands/app.d.ts +7 -0
  22. package/dist/cli/commands/app.js +167 -0
  23. package/dist/cli/commands/app.js.map +1 -0
  24. package/dist/cli/commands/config.d.ts +13 -0
  25. package/dist/cli/commands/config.js +276 -0
  26. package/dist/cli/commands/config.js.map +1 -0
  27. package/dist/cli/commands/connector.d.ts +33 -0
  28. package/dist/cli/commands/connector.js +170 -0
  29. package/dist/cli/commands/connector.js.map +1 -0
  30. package/dist/cli/commands/deploy.d.ts +11 -0
  31. package/dist/cli/commands/deploy.js +153 -0
  32. package/dist/cli/commands/deploy.js.map +1 -0
  33. package/dist/cli/commands/index.d.ts +15 -0
  34. package/dist/cli/commands/index.js +117 -0
  35. package/dist/cli/commands/index.js.map +1 -0
  36. package/dist/cli/commands/init.js +110 -28
  37. package/dist/cli/commands/init.js.map +1 -1
  38. package/dist/cli/commands/join.js +67 -22
  39. package/dist/cli/commands/join.js.map +1 -1
  40. package/dist/cli/commands/lint.d.ts +8 -0
  41. package/dist/cli/commands/lint.js +70 -0
  42. package/dist/cli/commands/lint.js.map +1 -0
  43. package/dist/cli/commands/mcp.d.ts +27 -0
  44. package/dist/cli/commands/mcp.js +56 -0
  45. package/dist/cli/commands/mcp.js.map +1 -0
  46. package/dist/cli/commands/provision.d.ts +8 -0
  47. package/dist/cli/commands/provision.js +112 -0
  48. package/dist/cli/commands/provision.js.map +1 -0
  49. package/dist/cli/commands/r2.d.ts +2 -0
  50. package/dist/cli/commands/r2.js +186 -4
  51. package/dist/cli/commands/r2.js.map +1 -1
  52. package/dist/cli/commands/serve.js +47 -2
  53. package/dist/cli/commands/serve.js.map +1 -1
  54. package/dist/cli/commands/start.js +210 -71
  55. package/dist/cli/commands/start.js.map +1 -1
  56. package/dist/cli/commands/sync.js +4 -4
  57. package/dist/cli/commands/sync.js.map +1 -1
  58. package/dist/cli/commands/update.d.ts +8 -0
  59. package/dist/cli/commands/update.js +155 -0
  60. package/dist/cli/commands/update.js.map +1 -0
  61. package/dist/cli/index.js +83 -3
  62. package/dist/cli/index.js.map +1 -1
  63. package/dist/cli/scaffolding.d.ts +9 -0
  64. package/dist/cli/scaffolding.js +288 -0
  65. package/dist/cli/scaffolding.js.map +1 -0
  66. package/dist/core/graph.d.ts +12 -1
  67. package/dist/core/graph.js +147 -78
  68. package/dist/core/graph.js.map +1 -1
  69. package/dist/core/migration-runner.d.ts +39 -0
  70. package/dist/core/migration-runner.js +221 -0
  71. package/dist/core/migration-runner.js.map +1 -0
  72. package/dist/core/migration-types.d.ts +101 -0
  73. package/dist/core/migration-types.js +21 -0
  74. package/dist/core/migration-types.js.map +1 -0
  75. package/dist/core/migrations/20260219-formalize-memory-location.d.ts +2 -0
  76. package/dist/core/migrations/20260219-formalize-memory-location.js +35 -0
  77. package/dist/core/migrations/20260219-formalize-memory-location.js.map +1 -0
  78. package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +12 -0
  79. package/dist/core/migrations/20260220-add-workspace-metadata.js +65 -0
  80. package/dist/core/migrations/20260220-add-workspace-metadata.js.map +1 -0
  81. package/dist/core/migrations/20260220-add-workspace-readme.d.ts +11 -0
  82. package/dist/core/migrations/20260220-add-workspace-readme.js +82 -0
  83. package/dist/core/migrations/20260220-add-workspace-readme.js.map +1 -0
  84. package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +9 -0
  85. package/dist/core/migrations/20260220-migrate-yaml-to-json.js +64 -0
  86. package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +1 -0
  87. package/dist/core/migrations/index.d.ts +11 -0
  88. package/dist/core/migrations/index.js +23 -0
  89. package/dist/core/migrations/index.js.map +1 -0
  90. package/dist/core/schema-registry.d.ts +36 -0
  91. package/dist/core/schema-registry.js +161 -0
  92. package/dist/core/schema-registry.js.map +1 -0
  93. package/dist/core/types.d.ts +242 -0
  94. package/dist/core/types.js +21 -0
  95. package/dist/core/types.js.map +1 -1
  96. package/dist/core/user-config.d.ts +10 -0
  97. package/dist/core/user-config.js +8 -0
  98. package/dist/core/user-config.js.map +1 -1
  99. package/dist/core/validation.d.ts +973 -32
  100. package/dist/core/validation.js +163 -4
  101. package/dist/core/validation.js.map +1 -1
  102. package/dist/core/workspace-manager.d.ts +26 -2
  103. package/dist/core/workspace-manager.js +113 -15
  104. package/dist/core/workspace-manager.js.map +1 -1
  105. package/dist/core/workspace.d.ts +8 -7
  106. package/dist/core/workspace.js +25 -13
  107. package/dist/core/workspace.js.map +1 -1
  108. package/dist/mcp/connector-manager.d.ts +61 -0
  109. package/dist/mcp/connector-manager.js +178 -0
  110. package/dist/mcp/connector-manager.js.map +1 -0
  111. package/dist/mcp/connectors/definitions.d.ts +43 -0
  112. package/dist/mcp/connectors/definitions.js +140 -0
  113. package/dist/mcp/connectors/definitions.js.map +1 -0
  114. package/dist/mcp/server.d.ts +11 -0
  115. package/dist/mcp/server.js +28 -0
  116. package/dist/mcp/server.js.map +1 -0
  117. package/dist/mcp/tools.d.ts +14 -0
  118. package/dist/mcp/tools.js +172 -0
  119. package/dist/mcp/tools.js.map +1 -0
  120. package/dist/server/index.js +17 -4
  121. package/dist/server/index.js.map +1 -1
  122. package/dist/server/plugin-loader.d.ts +8 -0
  123. package/dist/server/plugin-loader.js +14 -0
  124. package/dist/server/plugin-loader.js.map +1 -1
  125. package/dist/server/routes/graph-api.js +1 -1
  126. package/dist/server/routes/graph-api.js.map +1 -1
  127. package/dist/server/routes/webhook.js +33 -0
  128. package/dist/server/routes/webhook.js.map +1 -1
  129. package/dist/services/github-provisioner.d.ts +1 -0
  130. package/dist/services/github-provisioner.js +11 -0
  131. package/dist/services/github-provisioner.js.map +1 -1
  132. package/dist/services/lint-service.d.ts +27 -0
  133. package/dist/services/lint-service.js +76 -0
  134. package/dist/services/lint-service.js.map +1 -0
  135. package/dist/services/markdown.d.ts +9 -0
  136. package/dist/services/markdown.js +23 -2
  137. package/dist/services/markdown.js.map +1 -1
  138. package/dist/services/memory-service.d.ts +1 -2
  139. package/dist/services/memory-service.js +6 -4
  140. package/dist/services/memory-service.js.map +1 -1
  141. package/dist/services/vector-service.d.ts +77 -0
  142. package/dist/services/vector-service.js +280 -0
  143. package/dist/services/vector-service.js.map +1 -0
  144. package/dist/utils/version-checker.d.ts +23 -0
  145. package/dist/utils/version-checker.js +116 -0
  146. package/dist/utils/version-checker.js.map +1 -0
  147. 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;