studiograph 1.1.3 → 1.2.0-beta.2
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/README.md +2 -8
- package/dist/agent/orchestrator.js +56 -11
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/prompts/system.md +28 -10
- package/dist/agent/skill-loader.d.ts +48 -0
- package/dist/agent/skill-loader.js +166 -0
- package/dist/agent/skill-loader.js.map +1 -0
- package/dist/agent/skills/{bundled/enrich-entities.md → enrich-entities.md} +12 -0
- package/dist/agent/skills/entity-schema.md +502 -0
- package/dist/agent/skills/obsidian-source-setup.md +246 -0
- package/dist/agent/skills/sync-configuration.md +144 -0
- package/dist/agent/skills/sync-setup.md +68 -0
- package/dist/agent/tools/connector-tools.d.ts +37 -0
- package/dist/agent/tools/connector-tools.js +132 -0
- package/dist/agent/tools/connector-tools.js.map +1 -0
- package/dist/agent/tools/fs-tools.d.ts +39 -0
- package/dist/agent/tools/fs-tools.js +106 -0
- package/dist/agent/tools/fs-tools.js.map +1 -0
- package/dist/agent/tools/graph-tools.d.ts +11 -1
- package/dist/agent/tools/graph-tools.js +90 -29
- package/dist/agent/tools/graph-tools.js.map +1 -1
- package/dist/agent/tools/load-skill.d.ts +1 -1
- package/dist/agent/tools/load-skill.js +1 -1
- package/dist/agent/tools/load-skill.js.map +1 -1
- package/dist/agent/tools/sync-tools.d.ts +25 -0
- package/dist/agent/tools/sync-tools.js +691 -0
- package/dist/agent/tools/sync-tools.js.map +1 -0
- package/dist/auth/github.d.ts +11 -8
- package/dist/auth/github.js +56 -75
- package/dist/auth/github.js.map +1 -1
- package/dist/cli/colors.d.ts +54 -0
- package/dist/cli/colors.js +133 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +1 -1
- package/dist/cli/commands/auth.js +26 -10
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/clone.d.ts +9 -0
- package/dist/cli/commands/clone.js +167 -0
- package/dist/cli/commands/clone.js.map +1 -0
- package/dist/cli/commands/commit.d.ts +8 -0
- package/dist/cli/commands/commit.js +43 -0
- package/dist/cli/commands/commit.js.map +1 -0
- package/dist/cli/commands/connector.js +10 -2
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.d.ts +4 -6
- package/dist/cli/commands/deploy.js +262 -112
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/enrich.d.ts +11 -0
- package/dist/cli/commands/enrich.js +135 -0
- package/dist/cli/commands/enrich.js.map +1 -0
- package/dist/cli/commands/graphrag.d.ts +12 -0
- package/dist/cli/commands/graphrag.js +122 -0
- package/dist/cli/commands/graphrag.js.map +1 -0
- package/dist/cli/commands/init.js +21 -203
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/join.js +23 -3
- package/dist/cli/commands/join.js.map +1 -1
- package/dist/cli/commands/orphans.d.ts +8 -0
- package/dist/cli/commands/orphans.js +125 -0
- package/dist/cli/commands/orphans.js.map +1 -0
- package/dist/cli/commands/provision.js +11 -7
- package/dist/cli/commands/provision.js.map +1 -1
- package/dist/cli/commands/r2.js +8 -2
- package/dist/cli/commands/r2.js.map +1 -1
- package/dist/cli/commands/reset.d.ts +12 -0
- package/dist/cli/commands/reset.js +137 -0
- package/dist/cli/commands/reset.js.map +1 -0
- package/dist/cli/commands/review.d.ts +19 -0
- package/dist/cli/commands/review.js +128 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/source.d.ts +16 -0
- package/dist/cli/commands/source.js +159 -0
- package/dist/cli/commands/source.js.map +1 -0
- package/dist/cli/commands/start.js +285 -55
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/sync-entities.d.ts +13 -0
- package/dist/cli/commands/sync-entities.js +242 -0
- package/dist/cli/commands/sync-entities.js.map +1 -0
- package/dist/cli/commands/sync.js +36 -5
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/index.js +31 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/scaffolding.d.ts +2 -1
- package/dist/cli/scaffolding.js +36 -22
- package/dist/cli/scaffolding.js.map +1 -1
- package/dist/cli/setup-wizard.d.ts +30 -0
- package/dist/cli/setup-wizard.js +244 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/sync-review-interactive.d.ts +31 -0
- package/dist/cli/sync-review-interactive.js +393 -0
- package/dist/cli/sync-review-interactive.js.map +1 -0
- package/dist/cli/theme.d.ts +31 -0
- package/dist/cli/theme.js +116 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/core/graph.d.ts +4 -8
- package/dist/core/graph.js +145 -96
- package/dist/core/graph.js.map +1 -1
- package/dist/core/migration-runner.d.ts +4 -1
- package/dist/core/migration-runner.js +14 -3
- package/dist/core/migration-runner.js.map +1 -1
- package/dist/core/types.d.ts +0 -3
- package/dist/core/types.js +0 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/user-config.d.ts +6 -0
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/workspace.d.ts +13 -5
- package/dist/core/workspace.js +110 -33
- package/dist/core/workspace.js.map +1 -1
- package/dist/mcp/connector-manager.d.ts +7 -3
- package/dist/mcp/connector-manager.js +61 -16
- package/dist/mcp/connector-manager.js.map +1 -1
- package/dist/mcp/connectors/asana.d.ts +2 -0
- package/dist/mcp/connectors/asana.js +20 -0
- package/dist/mcp/connectors/asana.js.map +1 -0
- package/dist/mcp/connectors/definitions.d.ts +3 -1
- package/dist/mcp/connectors/definitions.js +19 -127
- package/dist/mcp/connectors/definitions.js.map +1 -1
- package/dist/mcp/connectors/figma.d.ts +5 -0
- package/dist/mcp/connectors/figma.js +21 -0
- package/dist/mcp/connectors/figma.js.map +1 -0
- package/dist/mcp/connectors/gdrive.d.ts +2 -0
- package/dist/mcp/connectors/gdrive.js +20 -0
- package/dist/mcp/connectors/gdrive.js.map +1 -0
- package/dist/mcp/connectors/granola.d.ts +2 -0
- package/dist/mcp/connectors/granola.js +12 -0
- package/dist/mcp/connectors/granola.js.map +1 -0
- package/dist/mcp/connectors/linear.d.ts +2 -0
- package/dist/mcp/connectors/linear.js +19 -0
- package/dist/mcp/connectors/linear.js.map +1 -0
- package/dist/mcp/connectors/obsidian.d.ts +2 -0
- package/dist/mcp/connectors/obsidian.js +19 -0
- package/dist/mcp/connectors/obsidian.js.map +1 -0
- package/dist/mcp/connectors/pipedrive.d.ts +2 -0
- package/dist/mcp/connectors/pipedrive.js +20 -0
- package/dist/mcp/connectors/pipedrive.js.map +1 -0
- package/dist/mcp/connectors/slack.d.ts +2 -0
- package/dist/mcp/connectors/slack.js +21 -0
- package/dist/mcp/connectors/slack.js.map +1 -0
- package/dist/mcp/oauth-provider.d.ts +41 -0
- package/dist/mcp/oauth-provider.js +160 -0
- package/dist/mcp/oauth-provider.js.map +1 -0
- package/dist/server/index.js +14 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/plugin-loader.d.ts +7 -0
- package/dist/server/plugin-loader.js +54 -2
- package/dist/server/plugin-loader.js.map +1 -1
- package/dist/services/github-provisioner.d.ts +8 -3
- package/dist/services/github-provisioner.js +35 -8
- package/dist/services/github-provisioner.js.map +1 -1
- package/dist/services/lint-service.js +8 -1
- package/dist/services/lint-service.js.map +1 -1
- package/dist/services/markdown.js +3 -3
- package/dist/services/markdown.js.map +1 -1
- package/dist/services/memory-service.d.ts +1 -1
- package/dist/services/memory-service.js +2 -3
- package/dist/services/memory-service.js.map +1 -1
- package/dist/services/orphan-service.d.ts +31 -0
- package/dist/services/orphan-service.js +100 -0
- package/dist/services/orphan-service.js.map +1 -0
- package/dist/services/sync/commit.d.ts +58 -0
- package/dist/services/sync/commit.js +354 -0
- package/dist/services/sync/commit.js.map +1 -0
- package/dist/services/sync/context-index.d.ts +69 -0
- package/dist/services/sync/context-index.js +280 -0
- package/dist/services/sync/context-index.js.map +1 -0
- package/dist/services/sync/derive.d.ts +34 -0
- package/dist/services/sync/derive.js +164 -0
- package/dist/services/sync/derive.js.map +1 -0
- package/dist/services/sync/enrichment-state.d.ts +31 -0
- package/dist/services/sync/enrichment-state.js +63 -0
- package/dist/services/sync/enrichment-state.js.map +1 -0
- package/dist/services/sync/enrichment.d.ts +25 -0
- package/dist/services/sync/enrichment.js +121 -0
- package/dist/services/sync/enrichment.js.map +1 -0
- package/dist/services/sync/frontmatter-extractor.d.ts +40 -0
- package/dist/services/sync/frontmatter-extractor.js +273 -0
- package/dist/services/sync/frontmatter-extractor.js.map +1 -0
- package/dist/services/sync/graph-match-state.d.ts +33 -0
- package/dist/services/sync/graph-match-state.js +61 -0
- package/dist/services/sync/graph-match-state.js.map +1 -0
- package/dist/services/sync/graph-match.d.ts +53 -0
- package/dist/services/sync/graph-match.js +316 -0
- package/dist/services/sync/graph-match.js.map +1 -0
- package/dist/services/sync/graphrag-client.d.ts +43 -0
- package/dist/services/sync/graphrag-client.js +94 -0
- package/dist/services/sync/graphrag-client.js.map +1 -0
- package/dist/services/sync/graphrag-config.d.ts +16 -0
- package/dist/services/sync/graphrag-config.js +39 -0
- package/dist/services/sync/graphrag-config.js.map +1 -0
- package/dist/services/sync/graphrag-context.d.ts +14 -0
- package/dist/services/sync/graphrag-context.js +109 -0
- package/dist/services/sync/graphrag-context.js.map +1 -0
- package/dist/services/sync/graphrag-indexer.d.ts +30 -0
- package/dist/services/sync/graphrag-indexer.js +358 -0
- package/dist/services/sync/graphrag-indexer.js.map +1 -0
- package/dist/services/sync/llm.d.ts +32 -0
- package/dist/services/sync/llm.js +115 -0
- package/dist/services/sync/llm.js.map +1 -0
- package/dist/services/sync/mcp-client.d.ts +59 -0
- package/dist/services/sync/mcp-client.js +285 -0
- package/dist/services/sync/mcp-client.js.map +1 -0
- package/dist/services/sync/model-factory.d.ts +10 -0
- package/dist/services/sync/model-factory.js +24 -0
- package/dist/services/sync/model-factory.js.map +1 -0
- package/dist/services/sync/name-quality.d.ts +31 -0
- package/dist/services/sync/name-quality.js +60 -0
- package/dist/services/sync/name-quality.js.map +1 -0
- package/dist/services/sync/output-schemas.d.ts +92 -0
- package/dist/services/sync/output-schemas.js +43 -0
- package/dist/services/sync/output-schemas.js.map +1 -0
- package/dist/services/sync/prompts.d.ts +19 -0
- package/dist/services/sync/prompts.js +128 -0
- package/dist/services/sync/prompts.js.map +1 -0
- package/dist/services/sync/reconciler.d.ts +48 -0
- package/dist/services/sync/reconciler.js +295 -0
- package/dist/services/sync/reconciler.js.map +1 -0
- package/dist/services/sync/source-config.d.ts +45 -0
- package/dist/services/sync/source-config.js +208 -0
- package/dist/services/sync/source-config.js.map +1 -0
- package/dist/services/sync/source-definitions/asana.d.ts +15 -0
- package/dist/services/sync/source-definitions/asana.js +48 -0
- package/dist/services/sync/source-definitions/asana.js.map +1 -0
- package/dist/services/sync/source-definitions/definitions.d.ts +21 -0
- package/dist/services/sync/source-definitions/definitions.js +26 -0
- package/dist/services/sync/source-definitions/definitions.js.map +1 -0
- package/dist/services/sync/source-definitions/gdrive.d.ts +16 -0
- package/dist/services/sync/source-definitions/gdrive.js +68 -0
- package/dist/services/sync/source-definitions/gdrive.js.map +1 -0
- package/dist/services/sync/source-definitions/granola.d.ts +2 -0
- package/dist/services/sync/source-definitions/granola.js +28 -0
- package/dist/services/sync/source-definitions/granola.js.map +1 -0
- package/dist/services/sync/source-definitions/linear.d.ts +2 -0
- package/dist/services/sync/source-definitions/linear.js +60 -0
- package/dist/services/sync/source-definitions/linear.js.map +1 -0
- package/dist/services/sync/source-definitions/obsidian.d.ts +2 -0
- package/dist/services/sync/source-definitions/obsidian.js +55 -0
- package/dist/services/sync/source-definitions/obsidian.js.map +1 -0
- package/dist/services/sync/source-definitions/pipedrive.d.ts +2 -0
- package/dist/services/sync/source-definitions/pipedrive.js +52 -0
- package/dist/services/sync/source-definitions/pipedrive.js.map +1 -0
- package/dist/services/sync/staging.d.ts +53 -0
- package/dist/services/sync/staging.js +131 -0
- package/dist/services/sync/staging.js.map +1 -0
- package/dist/services/sync/structured-extractor.d.ts +49 -0
- package/dist/services/sync/structured-extractor.js +344 -0
- package/dist/services/sync/structured-extractor.js.map +1 -0
- package/dist/services/sync/sync-runner.d.ts +32 -0
- package/dist/services/sync/sync-runner.js +195 -0
- package/dist/services/sync/sync-runner.js.map +1 -0
- package/dist/services/sync/sync-state.d.ts +43 -0
- package/dist/services/sync/sync-state.js +154 -0
- package/dist/services/sync/sync-state.js.map +1 -0
- package/dist/services/sync/types.d.ts +203 -0
- package/dist/services/sync/types.js +8 -0
- package/dist/services/sync/types.js.map +1 -0
- package/dist/services/sync/unstructured-extractor.d.ts +29 -0
- package/dist/services/sync/unstructured-extractor.js +197 -0
- package/dist/services/sync/unstructured-extractor.js.map +1 -0
- package/dist/services/vector-service.d.ts +11 -0
- package/dist/services/vector-service.js +42 -0
- package/dist/services/vector-service.js.map +1 -1
- package/dist/utils/git.d.ts +26 -4
- package/dist/utils/git.js +55 -7
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/merge-resolver.d.ts +34 -0
- package/dist/utils/merge-resolver.js +201 -0
- package/dist/utils/merge-resolver.js.map +1 -0
- package/dist/utils/preflight.d.ts +2 -1
- package/dist/utils/preflight.js +8 -1
- package/dist/utils/preflight.js.map +1 -1
- package/dist/utils/workspace-config.d.ts +8 -0
- package/dist/utils/workspace-config.js +22 -0
- package/dist/utils/workspace-config.js.map +1 -0
- package/package.json +16 -7
- /package/dist/agent/skills/{bundled/gather-context.md → gather-context.md} +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared setup wizard helpers for join/clone commands.
|
|
3
|
+
*
|
|
4
|
+
* Reusable interactive prompts for:
|
|
5
|
+
* - GitHub PAT authentication
|
|
6
|
+
* - LLM provider configuration
|
|
7
|
+
* - Connector configuration for sync sources
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Prompt for GitHub PAT if not authenticated.
|
|
11
|
+
* Returns the stored auth (existing or newly created).
|
|
12
|
+
*/
|
|
13
|
+
export declare function promptGitHubAuthIfNeeded(): Promise<{
|
|
14
|
+
token: string;
|
|
15
|
+
user: {
|
|
16
|
+
login: string;
|
|
17
|
+
name: string;
|
|
18
|
+
email: string;
|
|
19
|
+
};
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Prompt for LLM provider setup if not configured.
|
|
23
|
+
* Checks user config and env vars. Skips if already set.
|
|
24
|
+
*/
|
|
25
|
+
export declare function promptLLMSetupIfNeeded(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Detect sync sources in the workspace and prompt for missing connectors.
|
|
28
|
+
* Only prompts for connectors that have a known definition.
|
|
29
|
+
*/
|
|
30
|
+
export declare function promptConnectorSetup(workspacePath: string): Promise<number>;
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared setup wizard helpers for join/clone commands.
|
|
3
|
+
*
|
|
4
|
+
* Reusable interactive prompts for:
|
|
5
|
+
* - GitHub PAT authentication
|
|
6
|
+
* - LLM provider configuration
|
|
7
|
+
* - Connector configuration for sync sources
|
|
8
|
+
*/
|
|
9
|
+
import { confirm, select, password, note, log, isCancel } from '@clack/prompts';
|
|
10
|
+
import { loadToken, promptForPAT, storeToken, getGitHubUser } from '../auth/github.js';
|
|
11
|
+
import { loadUserConfig, saveUserConfig } from '../core/user-config.js';
|
|
12
|
+
import { ConnectorManager } from '../mcp/connector-manager.js';
|
|
13
|
+
import { CONNECTOR_DEFINITIONS } from '../mcp/connectors/definitions.js';
|
|
14
|
+
import { SourceConfigManager } from '../services/sync/source-config.js';
|
|
15
|
+
import { text } from '@clack/prompts';
|
|
16
|
+
const MODEL_PROVIDERS = {
|
|
17
|
+
anthropic: {
|
|
18
|
+
name: 'Anthropic (Claude)',
|
|
19
|
+
models: [
|
|
20
|
+
{ id: 'claude-sonnet-4-5-20250929', name: 'Claude Sonnet 4.5', hint: 'Recommended' },
|
|
21
|
+
{ id: 'claude-opus-4-6', name: 'Claude Opus 4.6', hint: 'Most capable' },
|
|
22
|
+
{ id: 'claude-3-5-haiku-20241022', name: 'Claude 3.5 Haiku', hint: 'Fastest' },
|
|
23
|
+
],
|
|
24
|
+
envVar: 'ANTHROPIC_API_KEY',
|
|
25
|
+
},
|
|
26
|
+
openai: {
|
|
27
|
+
name: 'OpenAI (GPT)',
|
|
28
|
+
models: [
|
|
29
|
+
{ id: 'gpt-4o', name: 'GPT-4o', hint: 'Recommended' },
|
|
30
|
+
{ id: 'gpt-4o-mini', name: 'GPT-4o Mini', hint: 'Faster and cheaper' },
|
|
31
|
+
],
|
|
32
|
+
envVar: 'OPENAI_API_KEY',
|
|
33
|
+
},
|
|
34
|
+
google: {
|
|
35
|
+
name: 'Google (Gemini)',
|
|
36
|
+
models: [
|
|
37
|
+
{ id: 'gemini-2.0-flash-exp', name: 'Gemini 2.0 Flash', hint: 'Latest' },
|
|
38
|
+
{ id: 'gemini-1.5-pro', name: 'Gemini 1.5 Pro', hint: 'Most capable' },
|
|
39
|
+
],
|
|
40
|
+
envVar: 'GOOGLE_API_KEY',
|
|
41
|
+
},
|
|
42
|
+
xai: {
|
|
43
|
+
name: 'xAI (Grok)',
|
|
44
|
+
models: [
|
|
45
|
+
{ id: 'grok-2-1212', name: 'Grok 2', hint: 'Latest' },
|
|
46
|
+
],
|
|
47
|
+
envVar: 'XAI_API_KEY',
|
|
48
|
+
},
|
|
49
|
+
groq: {
|
|
50
|
+
name: 'Groq (Fast Inference)',
|
|
51
|
+
models: [
|
|
52
|
+
{ id: 'llama-3.3-70b-versatile', name: 'Llama 3.3 70B', hint: 'Very fast' },
|
|
53
|
+
],
|
|
54
|
+
envVar: 'GROQ_API_KEY',
|
|
55
|
+
},
|
|
56
|
+
openrouter: {
|
|
57
|
+
name: 'OpenRouter',
|
|
58
|
+
models: [
|
|
59
|
+
{ id: 'anthropic/claude-opus-4-6', name: 'Claude Opus 4.6', hint: 'Via OpenRouter' },
|
|
60
|
+
{ id: 'openai/gpt-4o', name: 'GPT-4o', hint: 'Via OpenRouter' },
|
|
61
|
+
],
|
|
62
|
+
envVar: 'OPENROUTER_API_KEY',
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Prompt for GitHub PAT if not authenticated.
|
|
67
|
+
* Returns the stored auth (existing or newly created).
|
|
68
|
+
*/
|
|
69
|
+
export async function promptGitHubAuthIfNeeded() {
|
|
70
|
+
const stored = loadToken();
|
|
71
|
+
if (stored) {
|
|
72
|
+
if (stored.user.login === '_env') {
|
|
73
|
+
log.success('GitHub auth configured (via environment variable)');
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
log.success(`GitHub auth configured (${stored.user.login})`);
|
|
77
|
+
}
|
|
78
|
+
return stored;
|
|
79
|
+
}
|
|
80
|
+
log.info('No GitHub token found. Let\'s set one up.');
|
|
81
|
+
const token = await promptForPAT();
|
|
82
|
+
const user = await getGitHubUser(token);
|
|
83
|
+
storeToken(token, user);
|
|
84
|
+
log.success(`Authenticated as ${user.login}`);
|
|
85
|
+
return { token, user };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Prompt for LLM provider setup if not configured.
|
|
89
|
+
* Checks user config and env vars. Skips if already set.
|
|
90
|
+
*/
|
|
91
|
+
export async function promptLLMSetupIfNeeded() {
|
|
92
|
+
const userConfig = loadUserConfig();
|
|
93
|
+
// Check if already configured via user config
|
|
94
|
+
if (userConfig.api_key) {
|
|
95
|
+
const providerName = userConfig.model_provider
|
|
96
|
+
? MODEL_PROVIDERS[userConfig.model_provider]?.name ?? userConfig.model_provider
|
|
97
|
+
: 'configured';
|
|
98
|
+
log.success(`AI model configured (${providerName})`);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Check common env vars
|
|
102
|
+
const envProviders = [
|
|
103
|
+
{ key: 'ANTHROPIC_API_KEY', name: 'Anthropic' },
|
|
104
|
+
{ key: 'OPENAI_API_KEY', name: 'OpenAI' },
|
|
105
|
+
{ key: 'GOOGLE_API_KEY', name: 'Google' },
|
|
106
|
+
{ key: 'XAI_API_KEY', name: 'xAI' },
|
|
107
|
+
{ key: 'GROQ_API_KEY', name: 'Groq' },
|
|
108
|
+
{ key: 'OPENROUTER_API_KEY', name: 'OpenRouter' },
|
|
109
|
+
];
|
|
110
|
+
for (const { key, name } of envProviders) {
|
|
111
|
+
if (process.env[key]) {
|
|
112
|
+
log.success(`AI model configured (${name} via ${key})`);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Prompt for setup
|
|
117
|
+
const wantSetup = await confirm({
|
|
118
|
+
message: 'Set up an AI model? (required for `studiograph start`)',
|
|
119
|
+
initialValue: true,
|
|
120
|
+
});
|
|
121
|
+
if (!wantSetup || typeof wantSetup === 'symbol') {
|
|
122
|
+
log.info('Skipped. Run `studiograph config` later to set up.');
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const providerChoice = await select({
|
|
126
|
+
message: 'Select AI provider:',
|
|
127
|
+
options: Object.entries(MODEL_PROVIDERS).map(([key, provider]) => ({
|
|
128
|
+
value: key,
|
|
129
|
+
label: provider.name,
|
|
130
|
+
})),
|
|
131
|
+
});
|
|
132
|
+
if (typeof providerChoice === 'symbol') {
|
|
133
|
+
log.info('Skipped. Run `studiograph config` later to set up.');
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const provider = MODEL_PROVIDERS[providerChoice];
|
|
137
|
+
const modelChoice = await select({
|
|
138
|
+
message: `Select ${provider.name} model:`,
|
|
139
|
+
options: provider.models.map(m => ({
|
|
140
|
+
value: m.id,
|
|
141
|
+
label: m.name,
|
|
142
|
+
hint: m.hint,
|
|
143
|
+
})),
|
|
144
|
+
});
|
|
145
|
+
if (typeof modelChoice === 'symbol') {
|
|
146
|
+
log.info('Skipped. Run `studiograph config` later to set up.');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const apiKeyInput = await password({
|
|
150
|
+
message: `Enter your ${provider.name} API key:`,
|
|
151
|
+
validate: (value) => {
|
|
152
|
+
if (!value || value.trim().length < 10)
|
|
153
|
+
return 'API key seems too short';
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
if (isCancel(apiKeyInput)) {
|
|
157
|
+
log.info('Skipped. Run `studiograph config` later to set up.');
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
userConfig.model_provider = providerChoice;
|
|
161
|
+
userConfig.model_id = modelChoice;
|
|
162
|
+
userConfig.api_key = apiKeyInput.trim();
|
|
163
|
+
saveUserConfig(userConfig);
|
|
164
|
+
log.success(`AI model configured: ${provider.name} — ${modelChoice}`);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Detect sync sources in the workspace and prompt for missing connectors.
|
|
168
|
+
* Only prompts for connectors that have a known definition.
|
|
169
|
+
*/
|
|
170
|
+
export async function promptConnectorSetup(workspacePath) {
|
|
171
|
+
const sourceManager = new SourceConfigManager(workspacePath);
|
|
172
|
+
const sources = sourceManager.getAll();
|
|
173
|
+
if (sources.length === 0) {
|
|
174
|
+
return 0;
|
|
175
|
+
}
|
|
176
|
+
// Find unique connector names referenced by enabled sources
|
|
177
|
+
const referencedConnectors = [...new Set(sources.filter(s => s.enabled).map(s => s.connector))];
|
|
178
|
+
const existingConnectors = ConnectorManager.loadConfigs();
|
|
179
|
+
const existingNames = new Set(existingConnectors.map(c => c.name));
|
|
180
|
+
const missingConnectors = referencedConnectors.filter(name => !existingNames.has(name));
|
|
181
|
+
if (missingConnectors.length === 0) {
|
|
182
|
+
log.success(`All ${referencedConnectors.length} sync connector(s) already configured`);
|
|
183
|
+
return 0;
|
|
184
|
+
}
|
|
185
|
+
log.info(`This workspace syncs from ${sources.length} source(s). ${missingConnectors.length} connector(s) need setup.`);
|
|
186
|
+
let configured = 0;
|
|
187
|
+
for (const connectorName of missingConnectors) {
|
|
188
|
+
const def = CONNECTOR_DEFINITIONS[connectorName];
|
|
189
|
+
if (!def) {
|
|
190
|
+
log.warn(`Connector "${connectorName}" has no built-in definition. Set up manually: studiograph connector add ${connectorName}`);
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
const wantSetup = await confirm({
|
|
194
|
+
message: `Set up ${def.label} connector?`,
|
|
195
|
+
initialValue: true,
|
|
196
|
+
});
|
|
197
|
+
if (!wantSetup || typeof wantSetup === 'symbol') {
|
|
198
|
+
log.info(`Skipped. Run \`studiograph connector add ${connectorName}\` later.`);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (def.docsUrl) {
|
|
202
|
+
note(def.docsUrl, `${def.label} docs`);
|
|
203
|
+
}
|
|
204
|
+
const config = {
|
|
205
|
+
name: def.name,
|
|
206
|
+
description: def.description,
|
|
207
|
+
type: def.type,
|
|
208
|
+
...(def.type === 'stdio'
|
|
209
|
+
? { command: def.command, args: def.args }
|
|
210
|
+
: { url: def.url }),
|
|
211
|
+
};
|
|
212
|
+
let cancelled = false;
|
|
213
|
+
for (const field of def.credentialFields) {
|
|
214
|
+
const promptOpts = {
|
|
215
|
+
message: field.label,
|
|
216
|
+
placeholder: field.placeholder,
|
|
217
|
+
validate: field.required
|
|
218
|
+
? (v) => (!v?.trim() ? `${field.label} is required` : undefined)
|
|
219
|
+
: undefined,
|
|
220
|
+
};
|
|
221
|
+
const value = field.secret ? await password(promptOpts) : await text(promptOpts);
|
|
222
|
+
if (isCancel(value)) {
|
|
223
|
+
log.info(`Skipped. Run \`studiograph connector add ${connectorName}\` later.`);
|
|
224
|
+
cancelled = true;
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
const key = field.key;
|
|
228
|
+
if (key.startsWith('env.')) {
|
|
229
|
+
const envKey = key.slice(4);
|
|
230
|
+
config.env = { ...(config.env ?? {}), [envKey]: value };
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
config[key] = value;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (!cancelled) {
|
|
237
|
+
ConnectorManager.saveConfig(config);
|
|
238
|
+
log.success(`${def.label} connector saved`);
|
|
239
|
+
configured++;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return configured;
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=setup-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../../src/cli/setup-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,MAAM,eAAe,GAAG;IACtB,SAAS,EAAE;QACT,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,4BAA4B,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,aAAa,EAAE;YACpF,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE;YACxE,EAAE,EAAE,EAAE,2BAA2B,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;SAC/E;QACD,MAAM,EAAE,mBAAmB;KAC5B;IACD,MAAM,EAAE;QACN,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE;YACrD,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE;SACvE;QACD,MAAM,EAAE,gBAAgB;KACzB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE;YACxE,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE;SACvE;QACD,MAAM,EAAE,gBAAgB;KACzB;IACD,GAAG,EAAE;QACH,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;SACtD;QACD,MAAM,EAAE,aAAa;KACtB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,uBAAuB;QAC7B,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,yBAAyB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE;SAC5E;QACD,MAAM,EAAE,cAAc;KACvB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,2BAA2B,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,gBAAgB,EAAE;YACpF,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE;SAChE;QACD,MAAM,EAAE,oBAAoB;KAC7B;CACO,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YACjC,GAAG,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,2BAA2B,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,YAAY,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxB,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IAEpC,8CAA8C;IAC9C,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc;YAC5C,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,cAA8C,CAAC,EAAE,IAAI,IAAI,UAAU,CAAC,cAAc;YAC/G,CAAC,CAAC,YAAY,CAAC;QACjB,GAAG,CAAC,OAAO,CAAC,wBAAwB,YAAY,GAAG,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,MAAM,YAAY,GAAG;QACnB,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE;QAC/C,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzC,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE;QACnC,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE;QACrC,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,YAAY,EAAE;KAClD,CAAC;IAEF,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,YAAY,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,OAAO,CAAC,wBAAwB,IAAI,QAAQ,GAAG,GAAG,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;QAC9B,OAAO,EAAE,wDAAwD;QACjE,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC;QAClC,OAAO,EAAE,qBAAqB;QAC9B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,QAAQ,CAAC,IAAI;SACrB,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,cAA8C,CAAC,CAAC;IAEjF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC;QAC/B,OAAO,EAAE,UAAU,QAAQ,CAAC,IAAI,SAAS;QACzC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjC,KAAK,EAAE,CAAC,CAAC,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,IAAI;YACb,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC;QACjC,OAAO,EAAE,cAAc,QAAQ,CAAC,IAAI,WAAW;QAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE;gBAAE,OAAO,yBAAyB,CAAC;QAC3E,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IAED,UAAU,CAAC,cAAc,GAAG,cAAwB,CAAC;IACrD,UAAU,CAAC,QAAQ,GAAG,WAAqB,CAAC;IAC5C,UAAU,CAAC,OAAO,GAAI,WAAsB,CAAC,IAAI,EAAE,CAAC;IACpD,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3B,GAAG,CAAC,OAAO,CAAC,wBAAwB,QAAQ,CAAC,IAAI,MAAM,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,aAAqB;IAC9D,MAAM,aAAa,GAAG,IAAI,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;IAEvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4DAA4D;IAC5D,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnE,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAExF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,OAAO,CAAC,OAAO,oBAAoB,CAAC,MAAM,uCAAuC,CAAC,CAAC;QACvF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,6BAA6B,OAAO,CAAC,MAAM,eAAe,iBAAiB,CAAC,MAAM,2BAA2B,CAAC,CAAC;IAExH,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,KAAK,MAAM,aAAa,IAAI,iBAAiB,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,CAAC,IAAI,CAAC,cAAc,aAAa,4EAA4E,aAAa,EAAE,CAAC,CAAC;YACjI,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;YAC9B,OAAO,EAAE,UAAU,GAAG,CAAC,KAAK,aAAa;YACzC,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAChD,GAAG,CAAC,IAAI,CAAC,4CAA4C,aAAa,WAAW,CAAC,CAAC;YAC/E,SAAS;QACX,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,MAAM,GAAoB;YAC9B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO;gBACtB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;gBAC1C,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;SACtB,CAAC;QAEF,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG;gBACjB,OAAO,EAAE,KAAK,CAAC,KAAK;gBACpB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACtB,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;oBACxE,CAAC,CAAC,SAAS;aACd,CAAC;YAEF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;YAEjF,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,GAAG,CAAC,IAAI,CAAC,4CAA4C,aAAa,WAAW,CAAC,CAAC;gBAC/E,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;YAED,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;YACtB,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAe,EAAE,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACL,MAA6C,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACpC,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,kBAAkB,CAAC,CAAC;YAC5C,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive review UI for `studiograph sync review`.
|
|
3
|
+
*
|
|
4
|
+
* Uses @clack/prompts for file selection and action menus,
|
|
5
|
+
* and sync-colors for colored diff output.
|
|
6
|
+
*/
|
|
7
|
+
export interface ChangedFile {
|
|
8
|
+
path: string;
|
|
9
|
+
relativePath: string;
|
|
10
|
+
repoName: string;
|
|
11
|
+
repoPath: string;
|
|
12
|
+
entityType: string;
|
|
13
|
+
entityId: string;
|
|
14
|
+
status: 'A' | 'M' | 'D';
|
|
15
|
+
}
|
|
16
|
+
export interface ReviewContext {
|
|
17
|
+
workspacePath: string;
|
|
18
|
+
repos: Array<{
|
|
19
|
+
name: string;
|
|
20
|
+
path: string;
|
|
21
|
+
}>;
|
|
22
|
+
committed: boolean;
|
|
23
|
+
}
|
|
24
|
+
export type DiffMode = 'uncommitted' | 'committed' | 'none';
|
|
25
|
+
export declare function detectDiffMode(workspacePath: string, repos: Array<{
|
|
26
|
+
name: string;
|
|
27
|
+
path: string;
|
|
28
|
+
}>): DiffMode;
|
|
29
|
+
export declare function collectChangedFiles(ctx: ReviewContext): ChangedFile[];
|
|
30
|
+
export declare function getFileDiff(file: ChangedFile, committed: boolean): string;
|
|
31
|
+
export declare function runInteractiveReview(ctx: ReviewContext): Promise<void>;
|