@livestore/cli 0.4.0-dev.9 → 0.5.0-dev.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/.tsbuildinfo +1 -0
- package/dist/__tests__/fixtures/mock-config.d.ts +63 -0
- package/dist/__tests__/fixtures/mock-config.d.ts.map +1 -0
- package/dist/__tests__/fixtures/mock-config.js +94 -0
- package/dist/__tests__/fixtures/mock-config.js.map +1 -0
- package/dist/__tests__/sync-operations.test.d.ts +2 -0
- package/dist/__tests__/sync-operations.test.d.ts.map +1 -0
- package/dist/__tests__/sync-operations.test.js +167 -0
- package/dist/__tests__/sync-operations.test.js.map +1 -0
- package/dist/bin.js +6 -5
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts +2 -9
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/__fixtures__/mcp-protocol-server.d.ts +2 -0
- package/dist/commands/__fixtures__/mcp-protocol-server.d.ts.map +1 -0
- package/dist/commands/__fixtures__/mcp-protocol-server.js +10 -0
- package/dist/commands/__fixtures__/mcp-protocol-server.js.map +1 -0
- package/dist/commands/import-export.d.ts +20 -0
- package/dist/commands/import-export.d.ts.map +1 -0
- package/dist/commands/import-export.js +135 -0
- package/dist/commands/import-export.js.map +1 -0
- package/dist/commands/mcp-coach.d.ts +21 -12
- package/dist/commands/mcp-coach.d.ts.map +1 -1
- package/dist/commands/mcp-coach.js +49 -53
- package/dist/commands/mcp-coach.js.map +1 -1
- package/dist/commands/mcp-protocols.d.ts +7 -0
- package/dist/commands/mcp-protocols.d.ts.map +1 -0
- package/dist/commands/mcp-protocols.js +12 -0
- package/dist/commands/mcp-protocols.js.map +1 -0
- package/dist/commands/mcp-protocols.test.d.ts +2 -0
- package/dist/commands/mcp-protocols.test.d.ts.map +1 -0
- package/dist/commands/mcp-protocols.test.js +60 -0
- package/dist/commands/mcp-protocols.test.js.map +1 -0
- package/dist/commands/mcp-stdio.test.d.ts +2 -0
- package/dist/commands/mcp-stdio.test.d.ts.map +1 -0
- package/dist/commands/mcp-stdio.test.js +79 -0
- package/dist/commands/mcp-stdio.test.js.map +1 -0
- package/dist/commands/mcp-tool-handlers.d.ts +6 -0
- package/dist/commands/mcp-tool-handlers.d.ts.map +1 -0
- package/dist/commands/{mcp-tools.js → mcp-tool-handlers.js} +80 -45
- package/dist/commands/mcp-tool-handlers.js.map +1 -0
- package/dist/commands/mcp-tools-defs.d.ts +134 -0
- package/dist/commands/mcp-tools-defs.d.ts.map +1 -0
- package/dist/commands/mcp-tools-defs.js +285 -0
- package/dist/commands/mcp-tools-defs.js.map +1 -0
- package/dist/commands/mcp-tools-defs.test.d.ts +2 -0
- package/dist/commands/mcp-tools-defs.test.d.ts.map +1 -0
- package/dist/commands/mcp-tools-defs.test.js +11 -0
- package/dist/commands/mcp-tools-defs.test.js.map +1 -0
- package/dist/commands/mcp.d.ts +1 -3
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +7 -5
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/new-project.d.ts +22 -23
- package/dist/commands/new-project.d.ts.map +1 -1
- package/dist/commands/new-project.js +85 -44
- package/dist/commands/new-project.js.map +1 -1
- package/dist/mcp-content/architecture.d.ts +1 -1
- package/dist/mcp-content/architecture.d.ts.map +1 -1
- package/dist/mcp-content/architecture.js +3 -3
- package/dist/mcp-content/features.d.ts +1 -1
- package/dist/mcp-content/features.d.ts.map +1 -1
- package/dist/mcp-content/features.js +1 -1
- package/dist/mcp-content/getting-started.d.ts +1 -1
- package/dist/mcp-content/getting-started.d.ts.map +1 -1
- package/dist/mcp-content/getting-started.js +37 -37
- package/dist/mcp-content/overview.d.ts +1 -1
- package/dist/mcp-content/overview.d.ts.map +1 -1
- package/dist/mcp-content/overview.js +6 -6
- package/dist/mcp-content/schemas/blog.d.ts +1 -1
- package/dist/mcp-content/schemas/blog.d.ts.map +1 -1
- package/dist/mcp-content/schemas/blog.js +25 -25
- package/dist/mcp-content/schemas/ecommerce.d.ts +1 -1
- package/dist/mcp-content/schemas/ecommerce.d.ts.map +1 -1
- package/dist/mcp-content/schemas/ecommerce.js +67 -67
- package/dist/mcp-content/schemas/social.d.ts +1 -1
- package/dist/mcp-content/schemas/social.d.ts.map +1 -1
- package/dist/mcp-content/schemas/social.js +48 -48
- package/dist/mcp-content/schemas/todo.d.ts +1 -1
- package/dist/mcp-content/schemas/todo.d.ts.map +1 -1
- package/dist/mcp-content/schemas/todo.js +35 -35
- package/dist/mcp-runtime/runtime.d.ts +48 -0
- package/dist/mcp-runtime/runtime.d.ts.map +1 -0
- package/dist/mcp-runtime/runtime.js +107 -0
- package/dist/mcp-runtime/runtime.js.map +1 -0
- package/dist/module-loader.d.ts +22 -0
- package/dist/module-loader.d.ts.map +1 -0
- package/dist/module-loader.js +75 -0
- package/dist/module-loader.js.map +1 -0
- package/dist/package-manager.d.ts +38 -0
- package/dist/package-manager.d.ts.map +1 -0
- package/dist/package-manager.js +33 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/package-manager.test.d.ts +2 -0
- package/dist/package-manager.test.d.ts.map +1 -0
- package/dist/package-manager.test.js +57 -0
- package/dist/package-manager.test.js.map +1 -0
- package/dist/sync-operations.d.ts +115 -0
- package/dist/sync-operations.d.ts.map +1 -0
- package/dist/sync-operations.js +178 -0
- package/dist/sync-operations.js.map +1 -0
- package/package.json +57 -15
- package/src/__tests__/fixtures/mock-config.ts +112 -0
- package/src/__tests__/sync-operations.test.ts +218 -0
- package/src/bin.ts +8 -6
- package/src/cli.ts +5 -6
- package/src/commands/__fixtures__/mcp-protocol-server.ts +12 -0
- package/src/commands/import-export.ts +283 -0
- package/src/commands/mcp-coach.ts +76 -75
- package/src/commands/mcp-protocols.test.ts +76 -0
- package/src/commands/mcp-protocols.ts +12 -0
- package/src/commands/mcp-stdio.test.ts +93 -0
- package/src/commands/{mcp-tools.ts → mcp-tool-handlers.ts} +100 -61
- package/src/commands/mcp-tools-defs.test.ts +13 -0
- package/src/commands/mcp-tools-defs.ts +320 -0
- package/src/commands/mcp.ts +10 -6
- package/src/commands/new-project.ts +124 -57
- package/src/mcp-content/architecture.ts +3 -3
- package/src/mcp-content/features.ts +1 -1
- package/src/mcp-content/getting-started.ts +37 -37
- package/src/mcp-content/overview.ts +6 -6
- package/src/mcp-content/schemas/blog.ts +25 -25
- package/src/mcp-content/schemas/ecommerce.ts +67 -67
- package/src/mcp-content/schemas/social.ts +48 -48
- package/src/mcp-content/schemas/todo.ts +35 -35
- package/src/mcp-runtime/runtime.ts +147 -0
- package/src/module-loader.ts +94 -0
- package/src/package-manager.test.ts +66 -0
- package/src/package-manager.ts +44 -0
- package/src/sync-operations.ts +360 -0
- package/dist/commands/mcp-tools.d.ts +0 -58
- package/dist/commands/mcp-tools.d.ts.map +0 -1
- package/dist/commands/mcp-tools.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-export.js","sourceRoot":"","sources":["../../src/commands/import-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,28 @@
|
|
|
1
|
-
import { AiError,
|
|
1
|
+
import { AiError, Tool } from 'effect/unstable/ai';
|
|
2
|
+
import { Effect, Schema } from '@livestore/utils/effect';
|
|
2
3
|
export declare const coachTool: Tool.Tool<"livestore_coach", {
|
|
3
4
|
readonly parameters: Schema.Struct<{
|
|
4
|
-
code: Schema.
|
|
5
|
-
codeType: Schema.optional<Schema.
|
|
5
|
+
readonly code: Schema.String;
|
|
6
|
+
readonly codeType: Schema.optional<Schema.String>;
|
|
6
7
|
}>;
|
|
7
8
|
readonly success: Schema.Struct<{
|
|
8
|
-
feedback: Schema.
|
|
9
|
-
score: Schema.optional<Schema.
|
|
10
|
-
suggestions: Schema
|
|
9
|
+
readonly feedback: Schema.String;
|
|
10
|
+
readonly score: Schema.optional<Schema.Number>;
|
|
11
|
+
readonly suggestions: Schema.$Array<Schema.String>;
|
|
11
12
|
}>;
|
|
12
|
-
readonly failure:
|
|
13
|
+
readonly failure: typeof AiError.AiError;
|
|
14
|
+
readonly failureMode: "error";
|
|
13
15
|
}, never>;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
type CoachToolHandlerInput = {
|
|
17
|
+
readonly code: string;
|
|
18
|
+
readonly codeType?: string | undefined;
|
|
19
|
+
};
|
|
20
|
+
type CoachToolResult = {
|
|
21
|
+
readonly feedback: string;
|
|
22
|
+
readonly score: number | undefined;
|
|
23
|
+
readonly suggestions: string[];
|
|
24
|
+
};
|
|
25
|
+
/** Coach tool handler that uses OpenAI for analysis */
|
|
26
|
+
export declare const coachToolHandler: (input: CoachToolHandlerInput) => Effect.Effect<CoachToolResult, AiError.AiError>;
|
|
27
|
+
export {};
|
|
19
28
|
//# sourceMappingURL=mcp-coach.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-coach.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-coach.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-coach.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-coach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAyB,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAGzE,OAAO,EAAU,MAAM,EAA0B,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGxF,eAAO,MAAM,SAAS;;;;;;;;;;;;SA+BpB,CAAA;AAQF,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACvC,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAC/B,CAAA;AAED,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAyE3G,CAAA"}
|
|
@@ -1,45 +1,42 @@
|
|
|
1
|
+
import { AiError, LanguageModel, Prompt, Tool } from 'effect/unstable/ai';
|
|
1
2
|
import { OpenAiClient, OpenAiLanguageModel } from '@effect/ai-openai';
|
|
2
|
-
import {
|
|
3
|
+
import { Config, Effect, FetchHttpClient, Layer, Schema } from '@livestore/utils/effect';
|
|
3
4
|
// Define the coach tool that analyzes LiveStore usage
|
|
4
5
|
export const coachTool = Tool.make('livestore_coach', {
|
|
5
6
|
description: 'Analyze LiveStore code (schemas, queries, mutations, etc.) and provide AI-powered feedback on best practices, performance, and improvements.',
|
|
6
|
-
parameters: {
|
|
7
|
-
code: Schema.String.
|
|
7
|
+
parameters: Schema.Struct({
|
|
8
|
+
code: Schema.String.annotate({
|
|
8
9
|
description: 'The LiveStore code to analyze (TypeScript/JavaScript)',
|
|
9
10
|
}),
|
|
10
|
-
codeType: Schema.optional(Schema.String.
|
|
11
|
+
codeType: Schema.optional(Schema.String.annotate({
|
|
11
12
|
description: "Type of code being analyzed: 'schema', 'query', 'mutation', 'component', or 'general'",
|
|
12
13
|
})),
|
|
13
|
-
},
|
|
14
|
+
}),
|
|
14
15
|
success: Schema.Struct({
|
|
15
|
-
feedback: Schema.String.
|
|
16
|
+
feedback: Schema.String.annotate({
|
|
16
17
|
description: 'AI-generated feedback and recommendations for the code',
|
|
17
18
|
}),
|
|
18
|
-
score: Schema.optional(Schema.Number.
|
|
19
|
+
score: Schema.optional(Schema.Number.annotate({
|
|
19
20
|
description: 'Code quality score from 1-10 (optional)',
|
|
20
21
|
})),
|
|
21
|
-
suggestions: Schema.Array(Schema.String.
|
|
22
|
+
suggestions: Schema.Array(Schema.String.annotate({
|
|
22
23
|
description: 'Specific actionable suggestions for improvement',
|
|
23
|
-
})).
|
|
24
|
+
})).annotate({
|
|
24
25
|
description: 'List of specific improvement suggestions',
|
|
25
26
|
}),
|
|
26
27
|
}),
|
|
27
28
|
failure: AiError.AiError,
|
|
28
29
|
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const prompt = Prompt.makeMessage('user', {
|
|
40
|
-
content: [
|
|
41
|
-
Prompt.makePart('text', {
|
|
42
|
-
text: `${codeTypeContext}Please review the following code and provide helpful feedback focusing on:
|
|
30
|
+
/** Composed layer: HttpClient → OpenAiClient → LanguageModel */
|
|
31
|
+
const LanguageModelLayer = OpenAiLanguageModel.layer({ model: 'gpt-4o-mini' }).pipe(Layer.provide(OpenAiClient.layerConfig({ apiKey: Config.redacted('OPENAI_API_KEY') })), Layer.provide(FetchHttpClient.layer));
|
|
32
|
+
/** Coach tool handler that uses OpenAI for analysis */
|
|
33
|
+
export const coachToolHandler = Effect.fn('mcp-coach-handler')(({ code, codeType }) => {
|
|
34
|
+
const effect = Effect.gen(function* () {
|
|
35
|
+
const codeTypeContext = codeType !== undefined ? `This is ${codeType} code using LiveStore. ` : 'This is LiveStore code. ';
|
|
36
|
+
const prompt = Prompt.makeMessage('user', {
|
|
37
|
+
content: [
|
|
38
|
+
Prompt.makePart('text', {
|
|
39
|
+
text: `${codeTypeContext}Please review the following code and provide helpful feedback focusing on:
|
|
43
40
|
|
|
44
41
|
1. LiveStore best practices and conventions
|
|
45
42
|
2. Schema design and relationships (if applicable)
|
|
@@ -61,35 +58,34 @@ Please provide:
|
|
|
61
58
|
4. Any potential issues or concerns
|
|
62
59
|
|
|
63
60
|
Format your response as constructive feedback that helps developers improve their LiveStore usage.`,
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
}),
|
|
62
|
+
],
|
|
63
|
+
});
|
|
64
|
+
const systemPrompt = Prompt.makeMessage('system', {
|
|
65
|
+
content: `You are an expert LiveStore developer and code reviewer. Provide constructive, specific, and actionable feedback on LiveStore code. Focus on best practices, performance, and maintainability.`,
|
|
66
|
+
});
|
|
67
|
+
const llm = yield* LanguageModel.LanguageModel;
|
|
68
|
+
const completion = yield* llm.generateText({ prompt: Prompt.fromMessages([systemPrompt, prompt]) });
|
|
69
|
+
const feedback = completion.text ?? 'Unable to generate feedback';
|
|
70
|
+
const suggestions = feedback
|
|
71
|
+
.split('\n')
|
|
72
|
+
.filter((line) => line.trim().startsWith('-') ||
|
|
73
|
+
line.trim().startsWith('*') ||
|
|
74
|
+
line.trim().startsWith('•') ||
|
|
75
|
+
line.toLowerCase().includes('recommend') ||
|
|
76
|
+
line.toLowerCase().includes('consider') ||
|
|
77
|
+
line.toLowerCase().includes('improve'))
|
|
78
|
+
.map((line) => line.replace(/^[-*•]\s*/, '').trim())
|
|
79
|
+
.filter((suggestion) => suggestion.length > 10)
|
|
80
|
+
.slice(0, 5);
|
|
81
|
+
const scoreMatch = feedback.match(/(?:score|rating|quality).*?(\d+(?:\.\d+)?)/i);
|
|
82
|
+
const score = scoreMatch !== null ? Number.parseFloat(scoreMatch[1] ?? '0') : undefined;
|
|
83
|
+
return {
|
|
84
|
+
feedback,
|
|
85
|
+
score: score !== undefined && score >= 1 && score <= 10 ? score : undefined,
|
|
86
|
+
suggestions,
|
|
87
|
+
};
|
|
66
88
|
});
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
});
|
|
70
|
-
// Get OpenAI client and call the API
|
|
71
|
-
const llm = yield* LanguageModel.LanguageModel;
|
|
72
|
-
const completion = yield* llm.generateText({ prompt: Prompt.fromMessages([systemPrompt, prompt]) });
|
|
73
|
-
const feedback = completion.text ?? 'Unable to generate feedback';
|
|
74
|
-
// Extract suggestions from the feedback (simple approach)
|
|
75
|
-
const suggestions = feedback
|
|
76
|
-
.split('\n')
|
|
77
|
-
.filter((line) => line.trim().startsWith('-') ||
|
|
78
|
-
line.trim().startsWith('*') ||
|
|
79
|
-
line.trim().startsWith('•') ||
|
|
80
|
-
line.toLowerCase().includes('recommend') ||
|
|
81
|
-
line.toLowerCase().includes('consider') ||
|
|
82
|
-
line.toLowerCase().includes('improve'))
|
|
83
|
-
.map((line) => line.replace(/^[-*•]\s*/, '').trim())
|
|
84
|
-
.filter((suggestion) => suggestion.length > 10)
|
|
85
|
-
.slice(0, 5); // Limit to 5 suggestions
|
|
86
|
-
// Try to extract a score (simple regex approach)
|
|
87
|
-
const scoreMatch = feedback.match(/(?:score|rating|quality).*?(\d+(?:\.\d+)?)/i);
|
|
88
|
-
const score = scoreMatch ? Number.parseFloat(scoreMatch[1] ?? '0') : undefined;
|
|
89
|
-
return {
|
|
90
|
-
feedback,
|
|
91
|
-
score: score && score >= 1 && score <= 10 ? score : undefined,
|
|
92
|
-
suggestions,
|
|
93
|
-
};
|
|
94
|
-
}, Effect.provide(Layer.provideMerge(OpenAiModel, OpenAiClientLayer)), Effect.provide(FetchHttpClient.layer), Effect.catchTag('ConfigError', (e) => Effect.die(e)));
|
|
89
|
+
return effect.pipe(Effect.provide(LanguageModelLayer), Effect.catchTag('ConfigError', (e) => Effect.die(e)));
|
|
90
|
+
});
|
|
95
91
|
//# sourceMappingURL=mcp-coach.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-coach.js","sourceRoot":"","sources":["../../src/commands/mcp-coach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp-coach.js","sourceRoot":"","sources":["../../src/commands/mcp-coach.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { McpProtocol } from 'effect/unstable/ai';
|
|
2
|
+
/**
|
|
3
|
+
* MCP stdio selects an exact offered version when available and otherwise
|
|
4
|
+
* falls back to the first adapter, so keep every supported adapter newest-first.
|
|
5
|
+
*/
|
|
6
|
+
export declare const supportedMcpProtocols: readonly [McpProtocol.ProtocolAdapter<"2025-11-25">, McpProtocol.ProtocolAdapter<"2025-06-18">, McpProtocol.ProtocolAdapter<"2025-03-26">, McpProtocol.ProtocolAdapter<"2024-11-05">];
|
|
7
|
+
//# sourceMappingURL=mcp-protocols.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-protocols.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-protocols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,uLAKxB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { McpProtocol } from 'effect/unstable/ai';
|
|
2
|
+
/**
|
|
3
|
+
* MCP stdio selects an exact offered version when available and otherwise
|
|
4
|
+
* falls back to the first adapter, so keep every supported adapter newest-first.
|
|
5
|
+
*/
|
|
6
|
+
export const supportedMcpProtocols = [
|
|
7
|
+
McpProtocol.v2025_11_25,
|
|
8
|
+
McpProtocol.v2025_06_18,
|
|
9
|
+
McpProtocol.v2025_03_26,
|
|
10
|
+
McpProtocol.v2024_11_05,
|
|
11
|
+
];
|
|
12
|
+
//# sourceMappingURL=mcp-protocols.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-protocols.js","sourceRoot":"","sources":["../../src/commands/mcp-protocols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW,CAAC,WAAW;IACvB,WAAW,CAAC,WAAW;IACvB,WAAW,CAAC,WAAW;IACvB,WAAW,CAAC,WAAW;CACf,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-protocols.test.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-protocols.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
3
|
+
import { supportedMcpProtocols } from "./mcp-protocols.js";
|
|
4
|
+
const protocolVersions = ['2025-11-25', '2025-06-18', '2025-03-26', '2024-11-05'];
|
|
5
|
+
Vitest.describe('supportedMcpProtocols', () => {
|
|
6
|
+
Vitest.it('keeps the fallback protocol newest-first', () => {
|
|
7
|
+
Vitest.expect(supportedMcpProtocols.map((protocol) => protocol.protocolVersion)).toEqual(protocolVersions);
|
|
8
|
+
});
|
|
9
|
+
Vitest.it.each(protocolVersions)('negotiates an exact %s stdio initialize offer', async (protocolVersion) => {
|
|
10
|
+
const response = await initialize(protocolVersion);
|
|
11
|
+
Vitest.expect(response.result?.protocolVersion).toBe(protocolVersion);
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
const initialize = (protocolVersion) => new Promise((resolve, reject) => {
|
|
15
|
+
const child = spawn('bun', [new URL('./__fixtures__/mcp-protocol-server.ts', import.meta.url).pathname], {
|
|
16
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
17
|
+
});
|
|
18
|
+
let stdout = '';
|
|
19
|
+
let stderr = '';
|
|
20
|
+
const timeout = setTimeout(() => {
|
|
21
|
+
child.kill('SIGTERM');
|
|
22
|
+
reject(new Error(`MCP initialize timed out. stdout=${stdout} stderr=${stderr}`));
|
|
23
|
+
}, 5_000);
|
|
24
|
+
child.stdout.setEncoding('utf8');
|
|
25
|
+
child.stderr.setEncoding('utf8');
|
|
26
|
+
child.stdout.on('data', (chunk) => {
|
|
27
|
+
stdout += chunk;
|
|
28
|
+
if (stdout.endsWith('\n') === false)
|
|
29
|
+
return;
|
|
30
|
+
try {
|
|
31
|
+
const response = JSON.parse(stdout.trim());
|
|
32
|
+
clearTimeout(timeout);
|
|
33
|
+
child.kill('SIGTERM');
|
|
34
|
+
resolve(response);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
clearTimeout(timeout);
|
|
38
|
+
child.kill('SIGTERM');
|
|
39
|
+
reject(error);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
child.stderr.on('data', (chunk) => {
|
|
43
|
+
stderr += chunk;
|
|
44
|
+
});
|
|
45
|
+
child.on('error', (error) => {
|
|
46
|
+
clearTimeout(timeout);
|
|
47
|
+
reject(error);
|
|
48
|
+
});
|
|
49
|
+
child.stdin.write(`${JSON.stringify({
|
|
50
|
+
jsonrpc: '2.0',
|
|
51
|
+
id: 1,
|
|
52
|
+
method: 'initialize',
|
|
53
|
+
params: {
|
|
54
|
+
protocolVersion,
|
|
55
|
+
capabilities: {},
|
|
56
|
+
clientInfo: { name: 'livestore-mcp-protocol-test', version: '0.0.0' },
|
|
57
|
+
},
|
|
58
|
+
})}\n`);
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=mcp-protocols.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-protocols.test.js","sourceRoot":"","sources":["../../src/commands/mcp-protocols.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAU,CAAA;AAE1F,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IAC5C,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC5G,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,+CAA+C,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE;QAC1G,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,eAAe,CAAC,CAAA;QAElD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,MAAM,UAAU,GAAG,CAAC,eAAkD,EAAE,EAAE,CACxE,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,GAAG,CAAC,uCAAuC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE;QACvG,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC,CAAA;IACF,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;QAC9B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACrB,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,MAAM,WAAW,MAAM,EAAE,CAAC,CAAC,CAAA;IAClF,CAAC,EAAE,KAAK,CAAC,CAAA;IAET,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAChC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAChC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACxC,MAAM,IAAI,KAAK,CAAA;QACf,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK;YAAE,OAAM;QAE3C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAuB,CAAA;YAChE,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrB,OAAO,CAAC,QAAQ,CAAC,CAAA;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrB,MAAM,CAAC,KAAK,CAAC,CAAA;QACf,CAAC;IACH,CAAC,CAAC,CAAA;IACF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACxC,MAAM,IAAI,KAAK,CAAA;IACjB,CAAC,CAAC,CAAA;IACF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1B,YAAY,CAAC,OAAO,CAAC,CAAA;QACrB,MAAM,CAAC,KAAK,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;IACF,KAAK,CAAC,KAAK,CAAC,KAAK,CACf,GAAG,IAAI,CAAC,SAAS,CAAC;QAChB,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,CAAC;QACL,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE;YACN,eAAe;YACf,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,OAAO,EAAE;SACtE;KACF,CAAC,IAAI,CACP,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-stdio.test.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-stdio.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
3
|
+
Vitest.describe('mcp server stdio', () => {
|
|
4
|
+
Vitest.it('reserves stdout for JSON-RPC messages', async () => {
|
|
5
|
+
const response = await initialize();
|
|
6
|
+
Vitest.expect(response.result?.protocolVersion).toBe('2025-06-18');
|
|
7
|
+
});
|
|
8
|
+
});
|
|
9
|
+
/** Exercises the real CLI entrypoint so root-level warnings and logs cannot corrupt MCP framing. */
|
|
10
|
+
const initialize = () => new Promise((resolve, reject) => {
|
|
11
|
+
const child = spawn('bun', [new URL('../bin.ts', import.meta.url).pathname, 'mcp', 'server'], {
|
|
12
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
13
|
+
});
|
|
14
|
+
let stdoutBuffer = '';
|
|
15
|
+
let stderr = '';
|
|
16
|
+
let settled = false;
|
|
17
|
+
const finish = (result) => {
|
|
18
|
+
if (settled === true)
|
|
19
|
+
return;
|
|
20
|
+
settled = true;
|
|
21
|
+
clearTimeout(timeout);
|
|
22
|
+
child.kill('SIGTERM');
|
|
23
|
+
if ('error' in result)
|
|
24
|
+
reject(result.error);
|
|
25
|
+
else
|
|
26
|
+
resolve(result.response);
|
|
27
|
+
};
|
|
28
|
+
const timeout = setTimeout(() => {
|
|
29
|
+
finish({ error: new Error(`MCP initialize timed out. stdout=${stdoutBuffer} stderr=${stderr}`) });
|
|
30
|
+
}, 5_000);
|
|
31
|
+
child.stdout.setEncoding('utf8');
|
|
32
|
+
child.stderr.setEncoding('utf8');
|
|
33
|
+
child.stdout.on('data', (chunk) => {
|
|
34
|
+
stdoutBuffer += chunk;
|
|
35
|
+
const lines = stdoutBuffer.split('\n');
|
|
36
|
+
stdoutBuffer = lines.pop() ?? '';
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
if (line.length === 0)
|
|
39
|
+
continue;
|
|
40
|
+
try {
|
|
41
|
+
const message = JSON.parse(line);
|
|
42
|
+
if (message.jsonrpc !== '2.0') {
|
|
43
|
+
finish({ error: new Error(`MCP stdout contained a non-JSON-RPC message: ${line}`) });
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (message.id === 1) {
|
|
47
|
+
finish({ response: message });
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
finish({ error: new Error(`MCP stdout contained invalid JSON: ${line}`, { cause: error }) });
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
child.stderr.on('data', (chunk) => {
|
|
58
|
+
stderr += chunk;
|
|
59
|
+
});
|
|
60
|
+
child.on('error', (error) => {
|
|
61
|
+
finish({ error });
|
|
62
|
+
});
|
|
63
|
+
child.on('exit', (code) => {
|
|
64
|
+
if (settled === false) {
|
|
65
|
+
finish({ error: new Error(`MCP server exited before initialize completed (code ${code}). stderr=${stderr}`) });
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
child.stdin.write(`${JSON.stringify({
|
|
69
|
+
jsonrpc: '2.0',
|
|
70
|
+
id: 1,
|
|
71
|
+
method: 'initialize',
|
|
72
|
+
params: {
|
|
73
|
+
protocolVersion: '2025-06-18',
|
|
74
|
+
capabilities: {},
|
|
75
|
+
clientInfo: { name: 'livestore-mcp-stdio-test', version: '0.0.0' },
|
|
76
|
+
},
|
|
77
|
+
})}\n`);
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=mcp-stdio.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-stdio.test.js","sourceRoot":"","sources":["../../src/commands/mcp-stdio.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Toolkit } from 'effect/unstable/ai';
|
|
2
|
+
import { livestoreToolkit } from './mcp-tools-defs.ts';
|
|
3
|
+
type LivestoreToolHandlers = Toolkit.HandlersFrom<Toolkit.Tools<typeof livestoreToolkit>>;
|
|
4
|
+
export declare const toolHandlers: LivestoreToolHandlers;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=mcp-tool-handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tool-handlers.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-tool-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAYjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAKtD,KAAK,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAA;AAEzF,eAAO,MAAM,YAAY,EAAE,qBA4LzB,CAAA"}
|
|
@@ -1,47 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {} from 'effect/unstable/ai';
|
|
2
|
+
import { Effect, FetchHttpClient, Layer } from '@livestore/utils/effect';
|
|
3
|
+
import { PlatformNode } from '@livestore/utils/node';
|
|
2
4
|
import { blogSchemaContent } from "../mcp-content/schemas/blog.js";
|
|
3
5
|
import { ecommerceSchemaContent } from "../mcp-content/schemas/ecommerce.js";
|
|
4
6
|
import { socialSchemaContent } from "../mcp-content/schemas/social.js";
|
|
5
7
|
import { todoSchemaContent } from "../mcp-content/schemas/todo.js";
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
description: "Schema type: 'todo', 'blog', 'social', 'ecommerce', or 'custom'",
|
|
13
|
-
}),
|
|
14
|
-
customDescription: Schema.optional(Schema.String.annotations({
|
|
15
|
-
description: "For custom schemas: describe your data model needs (e.g., 'user management system with roles and permissions')",
|
|
16
|
-
})),
|
|
17
|
-
},
|
|
18
|
-
success: Schema.Struct({
|
|
19
|
-
schemaCode: Schema.String.annotations({
|
|
20
|
-
description: 'The generated LiveStore schema TypeScript code',
|
|
21
|
-
}),
|
|
22
|
-
explanation: Schema.String.annotations({
|
|
23
|
-
description: 'Brief explanation of the schema structure',
|
|
24
|
-
}),
|
|
25
|
-
}),
|
|
26
|
-
}), Tool.make('livestore_get_example_schema', {
|
|
27
|
-
description: 'Get a complete example LiveStore schema with TypeScript code. Returns ready-to-use schema definitions for common application types.',
|
|
28
|
-
parameters: {
|
|
29
|
-
type: Schema.String.annotations({
|
|
30
|
-
description: "Example type: 'todo', 'blog', 'social', or 'ecommerce'",
|
|
31
|
-
}),
|
|
32
|
-
},
|
|
33
|
-
success: Schema.Struct({
|
|
34
|
-
schemaCode: Schema.String.annotations({
|
|
35
|
-
description: 'The complete LiveStore schema code',
|
|
36
|
-
}),
|
|
37
|
-
description: Schema.String.annotations({
|
|
38
|
-
description: 'Description of what this schema models',
|
|
39
|
-
}),
|
|
40
|
-
}),
|
|
41
|
-
})
|
|
42
|
-
.annotate(Tool.Readonly, true)
|
|
43
|
-
.annotate(Tool.Destructive, false));
|
|
44
|
-
// Tool handlers using Tim Smart's pattern
|
|
8
|
+
import * as Runtime from "../mcp-runtime/runtime.js";
|
|
9
|
+
import * as SyncOps from "../sync-operations.js";
|
|
10
|
+
import { coachToolHandler } from "./mcp-coach.js";
|
|
11
|
+
import { livestoreToolkit } from "./mcp-tools-defs.js";
|
|
12
|
+
/** Layer providing FileSystem and HttpClient for sync operations */
|
|
13
|
+
const SyncOpsLayer = Layer.mergeAll(PlatformNode.NodeFileSystem.layer, FetchHttpClient.layer);
|
|
45
14
|
export const toolHandlers = livestoreToolkit.of({
|
|
46
15
|
livestore_coach: coachToolHandler,
|
|
47
16
|
livestore_generate_schema: Effect.fnUntraced(function* ({ schemaType, customDescription }) {
|
|
@@ -65,7 +34,7 @@ export const toolHandlers = livestoreToolkit.of({
|
|
|
65
34
|
explanation = 'E-commerce schema with products, categories, orders, and inventory';
|
|
66
35
|
break;
|
|
67
36
|
case 'custom': {
|
|
68
|
-
if (
|
|
37
|
+
if (customDescription == null) {
|
|
69
38
|
schemaCode = `// Custom schema requested but no description provided
|
|
70
39
|
import { Schema } from '@livestore/livestore'
|
|
71
40
|
|
|
@@ -83,11 +52,11 @@ export const schema = Schema.create({
|
|
|
83
52
|
break;
|
|
84
53
|
}
|
|
85
54
|
// Generate a basic custom schema based on description
|
|
86
|
-
const tableName = customDescription.toLowerCase().includes('user')
|
|
55
|
+
const tableName = customDescription.toLowerCase().includes('user') === true
|
|
87
56
|
? 'users'
|
|
88
|
-
: customDescription.toLowerCase().includes('product')
|
|
57
|
+
: customDescription.toLowerCase().includes('product') === true
|
|
89
58
|
? 'products'
|
|
90
|
-
: customDescription.toLowerCase().includes('post')
|
|
59
|
+
: customDescription.toLowerCase().includes('post') === true
|
|
91
60
|
? 'posts'
|
|
92
61
|
: 'items';
|
|
93
62
|
schemaCode = `// Custom schema based on: ${customDescription}
|
|
@@ -144,5 +113,71 @@ export const schema = Schema.create({
|
|
|
144
113
|
}
|
|
145
114
|
return { schemaCode, description };
|
|
146
115
|
}),
|
|
116
|
+
// Connect the single in-process LiveStore instance from user module
|
|
117
|
+
livestore_instance_connect: Effect.fnUntraced(function* ({ configPath, storeId, clientId, sessionId }) {
|
|
118
|
+
const store = yield* Runtime.init({
|
|
119
|
+
configPath,
|
|
120
|
+
storeId,
|
|
121
|
+
...(clientId !== undefined ? { clientId } : {}),
|
|
122
|
+
...(sessionId !== undefined ? { sessionId } : {}),
|
|
123
|
+
}).pipe(Effect.orDie);
|
|
124
|
+
const eventNames = Array.from(store.schema.eventsDefsMap.keys());
|
|
125
|
+
const tableNames = Array.from(store.schema.state.sqlite.tables.keys());
|
|
126
|
+
return {
|
|
127
|
+
storeId: store.storeId,
|
|
128
|
+
clientId: store.clientId,
|
|
129
|
+
sessionId: store.sessionId,
|
|
130
|
+
schemaInfo: {
|
|
131
|
+
tableNames,
|
|
132
|
+
eventNames,
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}),
|
|
136
|
+
// Execute a raw SQL query against the local client DB
|
|
137
|
+
livestore_instance_query: Effect.fnUntraced(function* ({ sql, bindValues }) {
|
|
138
|
+
return yield* Runtime.query({ sql, bindValues });
|
|
139
|
+
}),
|
|
140
|
+
// Validate and commit events
|
|
141
|
+
livestore_instance_commit_events: Effect.fnUntraced(function* ({ events }) {
|
|
142
|
+
return yield* Runtime.commit({ events });
|
|
143
|
+
}),
|
|
144
|
+
// Status
|
|
145
|
+
livestore_instance_status: Effect.fnUntraced(function* () {
|
|
146
|
+
return yield* Runtime.status;
|
|
147
|
+
}),
|
|
148
|
+
// Disconnect
|
|
149
|
+
livestore_instance_disconnect: Effect.fnUntraced(function* () {
|
|
150
|
+
return yield* Runtime.disconnect;
|
|
151
|
+
}),
|
|
152
|
+
// Sync export - pull all events from sync backend
|
|
153
|
+
livestore_sync_export: Effect.fnUntraced(function* ({ configPath, storeId, clientId }) {
|
|
154
|
+
const result = yield* SyncOps.pullEventsFromSyncBackend({
|
|
155
|
+
configPath,
|
|
156
|
+
storeId,
|
|
157
|
+
clientId: clientId ?? 'mcp-export',
|
|
158
|
+
}).pipe(Effect.scoped, Effect.provide(SyncOpsLayer), Effect.orDie);
|
|
159
|
+
return {
|
|
160
|
+
storeId: result.storeId,
|
|
161
|
+
eventCount: result.eventCount,
|
|
162
|
+
exportedAt: result.exportedAt,
|
|
163
|
+
data: result.data,
|
|
164
|
+
};
|
|
165
|
+
}),
|
|
166
|
+
// Sync import - push events to sync backend
|
|
167
|
+
livestore_sync_import: Effect.fnUntraced(function* ({ configPath, storeId, clientId, data, force, dryRun }) {
|
|
168
|
+
const result = yield* SyncOps.pushEventsToSyncBackend({
|
|
169
|
+
configPath,
|
|
170
|
+
storeId,
|
|
171
|
+
clientId: clientId ?? 'mcp-import',
|
|
172
|
+
data,
|
|
173
|
+
force: force ?? false,
|
|
174
|
+
dryRun: dryRun ?? false,
|
|
175
|
+
}).pipe(Effect.scoped, Effect.provide(SyncOpsLayer), Effect.orDie);
|
|
176
|
+
return {
|
|
177
|
+
storeId: result.storeId,
|
|
178
|
+
eventCount: result.eventCount,
|
|
179
|
+
dryRun: result.dryRun,
|
|
180
|
+
};
|
|
181
|
+
}),
|
|
147
182
|
});
|
|
148
|
-
//# sourceMappingURL=mcp-
|
|
183
|
+
//# sourceMappingURL=mcp-tool-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tool-handlers.js","sourceRoot":"","sources":["../../src/commands/mcp-tool-handlers.ts"],"names":[],"mappings":"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"}
|