@livestore/cli 0.0.0-snapshot-b38bc9fa61134ae035254562c7155b3f381d5f6c → 0.0.0-snapshot-75de2b24a1fb1df981b56b5d9ec7381ea351e95b
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/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/import-export.d.ts +34 -0
- package/dist/commands/import-export.d.ts.map +1 -0
- package/dist/commands/import-export.js +123 -0
- package/dist/commands/import-export.js.map +1 -0
- package/dist/commands/mcp-tool-handlers.d.ts.map +1 -1
- package/dist/commands/mcp-tool-handlers.js +30 -1
- package/dist/commands/mcp-tool-handlers.js.map +1 -1
- package/dist/commands/mcp-tools-defs.d.ts +30 -0
- package/dist/commands/mcp-tools-defs.d.ts.map +1 -1
- package/dist/commands/mcp-tools-defs.js +85 -3
- package/dist/commands/mcp-tools-defs.js.map +1 -1
- package/dist/sync-operations.d.ts +111 -0
- package/dist/sync-operations.d.ts.map +1 -0
- package/dist/sync-operations.js +230 -0
- package/dist/sync-operations.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
- package/src/cli.ts +2 -1
- package/src/commands/import-export.ts +262 -0
- package/src/commands/mcp-tool-handlers.ts +34 -1
- package/src/commands/mcp-tools-defs.ts +90 -2
- package/src/sync-operations.ts +413 -0
package/dist/cli.d.ts
CHANGED
|
@@ -2,6 +2,20 @@ import { Cli } from '@livestore/utils/node';
|
|
|
2
2
|
export declare const command: Cli.Command.Command<"livestore", import("@effect/platform/HttpClient").HttpClient | Cli.Prompt.Prompt.Environment | import("@effect/platform/CommandExecutor").CommandExecutor, Error | import("@effect/platform/HttpClientError").ResponseError | import("@effect/platform/Error").PlatformError, {
|
|
3
3
|
readonly verbose: boolean;
|
|
4
4
|
readonly subcommand: import("effect/Option").Option<{
|
|
5
|
+
readonly subcommand: import("effect/Option").Option<{
|
|
6
|
+
readonly store: string;
|
|
7
|
+
readonly storeId: string;
|
|
8
|
+
readonly clientId: string;
|
|
9
|
+
readonly output: string;
|
|
10
|
+
} | {
|
|
11
|
+
readonly store: string;
|
|
12
|
+
readonly storeId: string;
|
|
13
|
+
readonly clientId: string;
|
|
14
|
+
readonly force: boolean;
|
|
15
|
+
readonly dryRun: boolean;
|
|
16
|
+
readonly input: string;
|
|
17
|
+
}>;
|
|
18
|
+
} | {
|
|
5
19
|
readonly subcommand: import("effect/Option").Option<{}>;
|
|
6
20
|
} | {
|
|
7
21
|
readonly example: import("effect/Option").Option<string>;
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAK3C,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;EAE0D,CAAA"}
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Cli } from '@livestore/utils/node';
|
|
2
|
+
import { syncCommand } from "./commands/import-export.js";
|
|
2
3
|
import { mcpCommand } from "./commands/mcp.js";
|
|
3
4
|
import { createCommand } from "./commands/new-project.js";
|
|
4
5
|
export const command = Cli.Command.make('livestore', {
|
|
5
6
|
verbose: Cli.Options.boolean('verbose').pipe(Cli.Options.withDefault(false)),
|
|
6
|
-
}).pipe(Cli.Command.withSubcommands([mcpCommand, createCommand]));
|
|
7
|
+
}).pipe(Cli.Command.withSubcommands([mcpCommand, createCommand, syncCommand]));
|
|
7
8
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;IACnD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;CAC7E,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;IACnD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;CAC7E,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { UnknownError } from '@livestore/common';
|
|
2
|
+
import { FileSystem, type HttpClient } from '@livestore/utils/effect';
|
|
3
|
+
import { Cli } from '@livestore/utils/node';
|
|
4
|
+
import * as SyncOps from '../sync-operations.ts';
|
|
5
|
+
export declare const exportCommand: Cli.Command.Command<"export", FileSystem.FileSystem | HttpClient.HttpClient, SyncOps.ConnectionError | SyncOps.ExportError | UnknownError, {
|
|
6
|
+
readonly store: string;
|
|
7
|
+
readonly storeId: string;
|
|
8
|
+
readonly clientId: string;
|
|
9
|
+
readonly output: string;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const importCommand: Cli.Command.Command<"import", FileSystem.FileSystem | HttpClient.HttpClient, SyncOps.ConnectionError | SyncOps.ImportError | UnknownError, {
|
|
12
|
+
readonly store: string;
|
|
13
|
+
readonly storeId: string;
|
|
14
|
+
readonly clientId: string;
|
|
15
|
+
readonly force: boolean;
|
|
16
|
+
readonly dryRun: boolean;
|
|
17
|
+
readonly input: string;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const syncCommand: Cli.Command.Command<"sync", FileSystem.FileSystem | HttpClient.HttpClient, SyncOps.ConnectionError | SyncOps.ExportError | SyncOps.ImportError | UnknownError, {
|
|
20
|
+
readonly subcommand: import("effect/Option").Option<{
|
|
21
|
+
readonly store: string;
|
|
22
|
+
readonly storeId: string;
|
|
23
|
+
readonly clientId: string;
|
|
24
|
+
readonly output: string;
|
|
25
|
+
} | {
|
|
26
|
+
readonly store: string;
|
|
27
|
+
readonly storeId: string;
|
|
28
|
+
readonly clientId: string;
|
|
29
|
+
readonly force: boolean;
|
|
30
|
+
readonly dryRun: boolean;
|
|
31
|
+
readonly input: string;
|
|
32
|
+
}>;
|
|
33
|
+
}>;
|
|
34
|
+
//# sourceMappingURL=import-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-export.d.ts","sourceRoot":"","sources":["../../src/commands/import-export.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAmB,UAAU,EAAE,KAAK,UAAU,EAAc,MAAM,yBAAyB,CAAA;AAClG,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAiJhD,eAAO,MAAM,aAAa;;;;;EA6CzB,CAAA;AAED,eAAO,MAAM,aAAa;;;;;;;EA4DzB,CAAA;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;EAGvB,CAAA"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { Console, Effect, FileSystem } from '@livestore/utils/effect';
|
|
3
|
+
import { Cli } from '@livestore/utils/node';
|
|
4
|
+
import * as SyncOps from "../sync-operations.js";
|
|
5
|
+
/**
|
|
6
|
+
* Export events from the sync backend to a JSON file.
|
|
7
|
+
*/
|
|
8
|
+
const exportEvents = ({ storePath, storeId, clientId, outputPath, }) => Effect.gen(function* () {
|
|
9
|
+
yield* Console.log(`Connecting to sync backend...`);
|
|
10
|
+
const result = yield* SyncOps.pullEventsFromSyncBackend({ storePath, storeId, clientId });
|
|
11
|
+
yield* Console.log(`✓ Connected to sync backend`);
|
|
12
|
+
yield* Console.log(`Pulled ${result.eventCount} events`);
|
|
13
|
+
const fs = yield* FileSystem.FileSystem;
|
|
14
|
+
const absOutputPath = path.isAbsolute(outputPath) ? outputPath : path.resolve(process.cwd(), outputPath);
|
|
15
|
+
yield* fs.writeFileString(absOutputPath, JSON.stringify(result.data, null, 2)).pipe(Effect.mapError((cause) => new SyncOps.ExportError({
|
|
16
|
+
cause,
|
|
17
|
+
note: `Failed to write export file: ${cause}`,
|
|
18
|
+
})));
|
|
19
|
+
yield* Console.log(`Exported ${result.eventCount} events to ${absOutputPath}`);
|
|
20
|
+
}).pipe(Effect.withSpan('cli:export'));
|
|
21
|
+
/**
|
|
22
|
+
* Import events from a JSON file to the sync backend.
|
|
23
|
+
*/
|
|
24
|
+
const importEvents = ({ storePath, storeId, clientId, inputPath, force, dryRun, }) => Effect.gen(function* () {
|
|
25
|
+
const fs = yield* FileSystem.FileSystem;
|
|
26
|
+
const absInputPath = path.isAbsolute(inputPath) ? inputPath : path.resolve(process.cwd(), inputPath);
|
|
27
|
+
const exists = yield* fs.exists(absInputPath).pipe(Effect.mapError((cause) => new SyncOps.ImportError({
|
|
28
|
+
cause,
|
|
29
|
+
note: `Failed to check file existence: ${cause}`,
|
|
30
|
+
})));
|
|
31
|
+
if (!exists) {
|
|
32
|
+
return yield* new SyncOps.ImportError({
|
|
33
|
+
cause: new Error(`File not found: ${absInputPath}`),
|
|
34
|
+
note: `Import file does not exist at ${absInputPath}`,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
yield* Console.log(`Reading import file...`);
|
|
38
|
+
const fileContent = yield* fs.readFileString(absInputPath).pipe(Effect.mapError((cause) => new SyncOps.ImportError({
|
|
39
|
+
cause,
|
|
40
|
+
note: `Failed to read import file: ${cause}`,
|
|
41
|
+
})));
|
|
42
|
+
const parsedContent = yield* Effect.try({
|
|
43
|
+
try: () => JSON.parse(fileContent),
|
|
44
|
+
catch: (error) => new SyncOps.ImportError({
|
|
45
|
+
cause: new Error(`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`),
|
|
46
|
+
note: `Invalid JSON in import file: ${error instanceof Error ? error.message : String(error)}`,
|
|
47
|
+
}),
|
|
48
|
+
});
|
|
49
|
+
/** Validate export file format before proceeding */
|
|
50
|
+
const validation = yield* SyncOps.validateExportData({ data: parsedContent, targetStoreId: storeId });
|
|
51
|
+
if (validation.storeIdMismatch) {
|
|
52
|
+
if (!force) {
|
|
53
|
+
return yield* new SyncOps.ImportError({
|
|
54
|
+
cause: new Error(`Store ID mismatch: file has '${validation.sourceStoreId}', expected '${storeId}'`),
|
|
55
|
+
note: `The export file was created for a different store. Use --force to import anyway.`,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
yield* Console.log(`Store ID mismatch: file has '${validation.sourceStoreId}', importing to '${storeId}' (--force)`);
|
|
59
|
+
}
|
|
60
|
+
yield* Console.log(`Found ${validation.eventCount} events in export file`);
|
|
61
|
+
if (dryRun) {
|
|
62
|
+
yield* Console.log(`Dry run - validating import file...`);
|
|
63
|
+
yield* Console.log(`Dry run complete. ${validation.eventCount} events would be imported.`);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
yield* Console.log(`Connecting to sync backend...`);
|
|
67
|
+
const result = yield* SyncOps.pushEventsToSyncBackend({
|
|
68
|
+
storePath,
|
|
69
|
+
storeId,
|
|
70
|
+
clientId,
|
|
71
|
+
data: parsedContent,
|
|
72
|
+
force,
|
|
73
|
+
dryRun: false,
|
|
74
|
+
});
|
|
75
|
+
yield* Console.log(`✓ Connected to sync backend`);
|
|
76
|
+
yield* Console.log(`Successfully imported ${result.eventCount} events`);
|
|
77
|
+
}).pipe(Effect.withSpan('cli:import'));
|
|
78
|
+
export const exportCommand = Cli.Command.make('export', {
|
|
79
|
+
store: Cli.Options.text('store').pipe(Cli.Options.withAlias('s'), Cli.Options.withDescription('Path to the store module that exports schema and syncBackend')),
|
|
80
|
+
storeId: Cli.Options.text('store-id').pipe(Cli.Options.withAlias('i'), Cli.Options.withDescription('Store identifier')),
|
|
81
|
+
clientId: Cli.Options.text('client-id').pipe(Cli.Options.withDefault('cli-export'), Cli.Options.withDescription('Client identifier for the sync connection')),
|
|
82
|
+
output: Cli.Args.text({ name: 'file' }).pipe(Cli.Args.withDescription('Output JSON file path')),
|
|
83
|
+
}, Effect.fn(function* ({ store, storeId, clientId, output, }) {
|
|
84
|
+
yield* Console.log(`Exporting events from LiveStore...`);
|
|
85
|
+
yield* Console.log(` Store: ${store}`);
|
|
86
|
+
yield* Console.log(` Store ID: ${storeId}`);
|
|
87
|
+
yield* Console.log(` Output: ${output}`);
|
|
88
|
+
yield* Console.log('');
|
|
89
|
+
yield* exportEvents({
|
|
90
|
+
storePath: store,
|
|
91
|
+
storeId,
|
|
92
|
+
clientId,
|
|
93
|
+
outputPath: output,
|
|
94
|
+
}).pipe(Effect.scoped);
|
|
95
|
+
})).pipe(Cli.Command.withDescription('Export all events from the sync backend to a JSON file. Useful for backup and migration.'));
|
|
96
|
+
export const importCommand = Cli.Command.make('import', {
|
|
97
|
+
store: Cli.Options.text('store').pipe(Cli.Options.withAlias('s'), Cli.Options.withDescription('Path to the store module that exports schema and syncBackend')),
|
|
98
|
+
storeId: Cli.Options.text('store-id').pipe(Cli.Options.withAlias('i'), Cli.Options.withDescription('Store identifier')),
|
|
99
|
+
clientId: Cli.Options.text('client-id').pipe(Cli.Options.withDefault('cli-import'), Cli.Options.withDescription('Client identifier for the sync connection')),
|
|
100
|
+
force: Cli.Options.boolean('force').pipe(Cli.Options.withAlias('f'), Cli.Options.withDefault(false), Cli.Options.withDescription('Force import even if store ID does not match')),
|
|
101
|
+
dryRun: Cli.Options.boolean('dry-run').pipe(Cli.Options.withDefault(false), Cli.Options.withDescription('Validate the import file without actually importing')),
|
|
102
|
+
input: Cli.Args.text({ name: 'file' }).pipe(Cli.Args.withDescription('Input JSON file to import')),
|
|
103
|
+
}, Effect.fn(function* ({ store, storeId, clientId, force, dryRun, input, }) {
|
|
104
|
+
yield* Console.log(`Importing events to LiveStore...`);
|
|
105
|
+
yield* Console.log(` Store: ${store}`);
|
|
106
|
+
yield* Console.log(` Store ID: ${storeId}`);
|
|
107
|
+
yield* Console.log(` Input: ${input}`);
|
|
108
|
+
if (force)
|
|
109
|
+
yield* Console.log(` Force: enabled`);
|
|
110
|
+
if (dryRun)
|
|
111
|
+
yield* Console.log(` Dry run: enabled`);
|
|
112
|
+
yield* Console.log('');
|
|
113
|
+
yield* importEvents({
|
|
114
|
+
storePath: store,
|
|
115
|
+
storeId,
|
|
116
|
+
clientId,
|
|
117
|
+
inputPath: input,
|
|
118
|
+
force,
|
|
119
|
+
dryRun,
|
|
120
|
+
}).pipe(Effect.scoped);
|
|
121
|
+
})).pipe(Cli.Command.withDescription('Import events from a JSON file to the sync backend. The sync backend must be empty.'));
|
|
122
|
+
export const syncCommand = Cli.Command.make('sync').pipe(Cli.Command.withSubcommands([exportCommand, importCommand]), Cli.Command.withDescription('Import and export events from the sync backend'));
|
|
123
|
+
//# sourceMappingURL=import-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-export.js","sourceRoot":"","sources":["../../src/commands/import-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-handlers.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-tool-handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-tool-handlers.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-tool-handlers.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,YAAY,EAAE,GAgLzB,CAAA"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { Effect } from '@livestore/utils/effect';
|
|
1
|
+
import { Effect, FetchHttpClient, Layer } from '@livestore/utils/effect';
|
|
2
|
+
import { PlatformNode } from '@livestore/utils/node';
|
|
2
3
|
import { blogSchemaContent } from "../mcp-content/schemas/blog.js";
|
|
3
4
|
import { ecommerceSchemaContent } from "../mcp-content/schemas/ecommerce.js";
|
|
4
5
|
import { socialSchemaContent } from "../mcp-content/schemas/social.js";
|
|
5
6
|
import { todoSchemaContent } from "../mcp-content/schemas/todo.js";
|
|
6
7
|
import * as Runtime from "../mcp-runtime/runtime.js";
|
|
8
|
+
import * as SyncOps from "../sync-operations.js";
|
|
7
9
|
import { coachToolHandler } from "./mcp-coach.js";
|
|
8
10
|
import { livestoreToolkit } from "./mcp-tools-defs.js";
|
|
11
|
+
/** Layer providing FileSystem and HttpClient for sync operations */
|
|
12
|
+
const SyncOpsLayer = Layer.mergeAll(PlatformNode.NodeFileSystem.layer, FetchHttpClient.layer);
|
|
9
13
|
// Tool handlers using Tim Smart's pattern
|
|
10
14
|
export const toolHandlers = livestoreToolkit.of({
|
|
11
15
|
livestore_coach: coachToolHandler,
|
|
@@ -140,5 +144,30 @@ export const schema = Schema.create({
|
|
|
140
144
|
livestore_instance_disconnect: Effect.fnUntraced(function* () {
|
|
141
145
|
return yield* Runtime.disconnect;
|
|
142
146
|
}),
|
|
147
|
+
// Sync export - pull all events from sync backend
|
|
148
|
+
livestore_sync_export: Effect.fnUntraced(function* ({ storePath, storeId, clientId }) {
|
|
149
|
+
const result = yield* SyncOps.pullEventsFromSyncBackend({
|
|
150
|
+
storePath,
|
|
151
|
+
storeId,
|
|
152
|
+
clientId: clientId ?? 'mcp-export',
|
|
153
|
+
}).pipe(Effect.scoped, Effect.provide(SyncOpsLayer), Effect.orDie);
|
|
154
|
+
return {
|
|
155
|
+
storeId: result.storeId,
|
|
156
|
+
eventCount: result.eventCount,
|
|
157
|
+
exportedAt: result.exportedAt,
|
|
158
|
+
data: result.data,
|
|
159
|
+
};
|
|
160
|
+
}),
|
|
161
|
+
// Sync import - push events to sync backend
|
|
162
|
+
livestore_sync_import: Effect.fnUntraced(function* ({ storePath, storeId, clientId, data, force, dryRun }) {
|
|
163
|
+
return yield* SyncOps.pushEventsToSyncBackend({
|
|
164
|
+
storePath,
|
|
165
|
+
storeId,
|
|
166
|
+
clientId: clientId ?? 'mcp-import',
|
|
167
|
+
data,
|
|
168
|
+
force: force ?? false,
|
|
169
|
+
dryRun: dryRun ?? false,
|
|
170
|
+
}).pipe(Effect.scoped, Effect.provide(SyncOpsLayer), Effect.orDie);
|
|
171
|
+
}),
|
|
143
172
|
});
|
|
144
173
|
//# sourceMappingURL=mcp-tool-handlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-handlers.js","sourceRoot":"","sources":["../../src/commands/mcp-tool-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"mcp-tool-handlers.js","sourceRoot":"","sources":["../../src/commands/mcp-tool-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -89,5 +89,35 @@ export declare const livestoreToolkit: Toolkit.Toolkit<{
|
|
|
89
89
|
readonly success: Schema.TaggedStruct<"disconnected", {}>;
|
|
90
90
|
readonly failure: typeof Schema.Never;
|
|
91
91
|
}, never>;
|
|
92
|
+
readonly livestore_sync_export: Tool.Tool<"livestore_sync_export", {
|
|
93
|
+
readonly parameters: Schema.Struct<{
|
|
94
|
+
storePath: Schema.SchemaClass<string, string, never>;
|
|
95
|
+
storeId: Schema.SchemaClass<string, string, never>;
|
|
96
|
+
clientId: Schema.optional<Schema.SchemaClass<string, string, never>>;
|
|
97
|
+
}>;
|
|
98
|
+
readonly success: Schema.Struct<{
|
|
99
|
+
storeId: typeof Schema.String;
|
|
100
|
+
eventCount: typeof Schema.Number;
|
|
101
|
+
exportedAt: typeof Schema.String;
|
|
102
|
+
data: Schema.Schema<Schema.JsonValue, Schema.JsonValue, never>;
|
|
103
|
+
}>;
|
|
104
|
+
readonly failure: typeof Schema.Never;
|
|
105
|
+
}, never>;
|
|
106
|
+
readonly livestore_sync_import: Tool.Tool<"livestore_sync_import", {
|
|
107
|
+
readonly parameters: Schema.Struct<{
|
|
108
|
+
storePath: Schema.SchemaClass<string, string, never>;
|
|
109
|
+
storeId: Schema.SchemaClass<string, string, never>;
|
|
110
|
+
clientId: Schema.optional<Schema.SchemaClass<string, string, never>>;
|
|
111
|
+
data: Schema.Schema<Schema.JsonValue, Schema.JsonValue, never>;
|
|
112
|
+
force: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
|
|
113
|
+
dryRun: Schema.optional<Schema.SchemaClass<boolean, boolean, never>>;
|
|
114
|
+
}>;
|
|
115
|
+
readonly success: Schema.Struct<{
|
|
116
|
+
storeId: typeof Schema.String;
|
|
117
|
+
eventCount: typeof Schema.Number;
|
|
118
|
+
dryRun: typeof Schema.Boolean;
|
|
119
|
+
}>;
|
|
120
|
+
readonly failure: typeof Schema.Never;
|
|
121
|
+
}, never>;
|
|
92
122
|
}>;
|
|
93
123
|
//# sourceMappingURL=mcp-tools-defs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools-defs.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-tools-defs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAG/D,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"mcp-tools-defs.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-tools-defs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAG/D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyT5B,CAAA"}
|
|
@@ -50,13 +50,13 @@ export const syncPayload = { authToken: process.env.LIVESTORE_SYNC_AUTH_TOKEN ??
|
|
|
50
50
|
|
|
51
51
|
Connect parameters:
|
|
52
52
|
{
|
|
53
|
-
"storePath": "
|
|
53
|
+
"storePath": "livestore-cli.config.ts",
|
|
54
54
|
"storeId": "<store-id>"
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
Optional identifiers to group client state on the server:
|
|
58
58
|
{
|
|
59
|
-
"storePath": "
|
|
59
|
+
"storePath": "livestore-cli.config.ts",
|
|
60
60
|
"storeId": "<store-id>",
|
|
61
61
|
"clientId": "<client-id>",
|
|
62
62
|
"sessionId": "<session-id>"
|
|
@@ -192,5 +192,87 @@ Example success:
|
|
|
192
192
|
{ "_tag": "disconnected" }`,
|
|
193
193
|
parameters: {},
|
|
194
194
|
success: Schema.TaggedStruct('disconnected', {}),
|
|
195
|
-
})
|
|
195
|
+
}), Tool.make('livestore_sync_export', {
|
|
196
|
+
description: `Export all events from a sync backend to JSON data.
|
|
197
|
+
|
|
198
|
+
This tool connects directly to the sync backend (without creating a full LiveStore instance) and pulls all events. Useful for backup, migration, and debugging.
|
|
199
|
+
|
|
200
|
+
Module contract (same as livestore_instance_connect):
|
|
201
|
+
\`\`\`ts
|
|
202
|
+
export { schema } from './src/livestore/schema.ts'
|
|
203
|
+
export const syncBackend = makeWsSync({ url: process.env.LIVESTORE_SYNC_URL ?? 'ws://localhost:8787' })
|
|
204
|
+
export const syncPayload = { authToken: process.env.LIVESTORE_SYNC_AUTH_TOKEN }
|
|
205
|
+
\`\`\`
|
|
206
|
+
|
|
207
|
+
Example parameters:
|
|
208
|
+
{
|
|
209
|
+
"storePath": "livestore-cli.config.ts",
|
|
210
|
+
"storeId": "my-store"
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
Returns on success:
|
|
214
|
+
{
|
|
215
|
+
"storeId": "my-store",
|
|
216
|
+
"eventCount": 127,
|
|
217
|
+
"exportedAt": "2024-01-15T10:30:00.000Z",
|
|
218
|
+
"data": { "version": 1, "storeId": "my-store", ... }
|
|
219
|
+
}`,
|
|
220
|
+
parameters: {
|
|
221
|
+
storePath: Schema.String.annotations({
|
|
222
|
+
description: 'Path to a module that exports schema and syncBackend',
|
|
223
|
+
}),
|
|
224
|
+
storeId: Schema.String.annotations({ description: 'Store identifier' }),
|
|
225
|
+
clientId: Schema.optional(Schema.String.annotations({ description: 'Client identifier (default: mcp-export)' })),
|
|
226
|
+
},
|
|
227
|
+
success: Schema.Struct({
|
|
228
|
+
storeId: Schema.String,
|
|
229
|
+
eventCount: Schema.Number,
|
|
230
|
+
exportedAt: Schema.String,
|
|
231
|
+
data: Schema.JsonValue.annotations({ description: 'The export file data (can be saved or passed to import)' }),
|
|
232
|
+
}),
|
|
233
|
+
}).annotate(Tool.Readonly, true), Tool.make('livestore_sync_import', {
|
|
234
|
+
description: `Import events from export data to a sync backend.
|
|
235
|
+
|
|
236
|
+
This tool connects directly to the sync backend and pushes events. The sync backend must be empty.
|
|
237
|
+
|
|
238
|
+
Example parameters:
|
|
239
|
+
{
|
|
240
|
+
"storePath": "livestore-cli.config.ts",
|
|
241
|
+
"storeId": "my-store",
|
|
242
|
+
"data": { "version": 1, "storeId": "my-store", "events": [...] }
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
With options:
|
|
246
|
+
{
|
|
247
|
+
"storePath": "livestore-cli.config.ts",
|
|
248
|
+
"storeId": "my-store",
|
|
249
|
+
"data": { ... },
|
|
250
|
+
"force": true, // Import even if store ID doesn't match
|
|
251
|
+
"dryRun": true // Validate without importing
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
Returns on success:
|
|
255
|
+
{
|
|
256
|
+
"storeId": "my-store",
|
|
257
|
+
"eventCount": 127,
|
|
258
|
+
"dryRun": false
|
|
259
|
+
}`,
|
|
260
|
+
parameters: {
|
|
261
|
+
storePath: Schema.String.annotations({
|
|
262
|
+
description: 'Path to a module that exports schema and syncBackend',
|
|
263
|
+
}),
|
|
264
|
+
storeId: Schema.String.annotations({ description: 'Store identifier' }),
|
|
265
|
+
clientId: Schema.optional(Schema.String.annotations({ description: 'Client identifier (default: mcp-import)' })),
|
|
266
|
+
data: Schema.JsonValue.annotations({
|
|
267
|
+
description: 'The export data to import (from livestore_sync_export or a file)',
|
|
268
|
+
}),
|
|
269
|
+
force: Schema.optional(Schema.Boolean.annotations({ description: 'Force import even if store ID does not match' })),
|
|
270
|
+
dryRun: Schema.optional(Schema.Boolean.annotations({ description: 'Validate without actually importing' })),
|
|
271
|
+
},
|
|
272
|
+
success: Schema.Struct({
|
|
273
|
+
storeId: Schema.String,
|
|
274
|
+
eventCount: Schema.Number,
|
|
275
|
+
dryRun: Schema.Boolean,
|
|
276
|
+
}),
|
|
277
|
+
}).annotate(Tool.Destructive, true));
|
|
196
278
|
//# sourceMappingURL=mcp-tools-defs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools-defs.js","sourceRoot":"","sources":["../../src/commands/mcp-tools-defs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-tools-defs.js","sourceRoot":"","sources":["../../src/commands/mcp-tools-defs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { SyncBackend } from '@livestore/common';
|
|
2
|
+
import { UnknownError } from '@livestore/common';
|
|
3
|
+
import { Effect, FileSystem, type HttpClient, Schema, type Scope } from '@livestore/utils/effect';
|
|
4
|
+
/**
|
|
5
|
+
* Schema for the export file format.
|
|
6
|
+
* Contains metadata about the export and an array of events in global encoded format.
|
|
7
|
+
*/
|
|
8
|
+
export declare const ExportFileSchema: Schema.Struct<{
|
|
9
|
+
/** Format version for future compatibility */
|
|
10
|
+
version: Schema.Literal<[1]>;
|
|
11
|
+
/** Store identifier */
|
|
12
|
+
storeId: typeof Schema.String;
|
|
13
|
+
/** ISO timestamp of when the export was created */
|
|
14
|
+
exportedAt: typeof Schema.String;
|
|
15
|
+
/** Total number of events in the export */
|
|
16
|
+
eventCount: typeof Schema.Number;
|
|
17
|
+
/** Array of events in global encoded format */
|
|
18
|
+
events: Schema.Array$<Schema.Struct<{
|
|
19
|
+
name: typeof Schema.String;
|
|
20
|
+
args: typeof Schema.Any;
|
|
21
|
+
seqNum: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
22
|
+
parentSeqNum: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
23
|
+
clientId: typeof Schema.String;
|
|
24
|
+
sessionId: typeof Schema.String;
|
|
25
|
+
}>>;
|
|
26
|
+
}>;
|
|
27
|
+
export type ExportFile = typeof ExportFileSchema.Type;
|
|
28
|
+
declare const ConnectionError_base: Schema.TaggedErrorClass<ConnectionError, "ConnectionError", {
|
|
29
|
+
readonly _tag: Schema.tag<"ConnectionError">;
|
|
30
|
+
} & {
|
|
31
|
+
cause: typeof Schema.Defect;
|
|
32
|
+
note: typeof Schema.String;
|
|
33
|
+
}>;
|
|
34
|
+
export declare class ConnectionError extends ConnectionError_base {
|
|
35
|
+
}
|
|
36
|
+
declare const ExportError_base: Schema.TaggedErrorClass<ExportError, "ExportError", {
|
|
37
|
+
readonly _tag: Schema.tag<"ExportError">;
|
|
38
|
+
} & {
|
|
39
|
+
cause: typeof Schema.Defect;
|
|
40
|
+
note: typeof Schema.String;
|
|
41
|
+
}>;
|
|
42
|
+
export declare class ExportError extends ExportError_base {
|
|
43
|
+
}
|
|
44
|
+
declare const ImportError_base: Schema.TaggedErrorClass<ImportError, "ImportError", {
|
|
45
|
+
readonly _tag: Schema.tag<"ImportError">;
|
|
46
|
+
} & {
|
|
47
|
+
cause: typeof Schema.Defect;
|
|
48
|
+
note: typeof Schema.String;
|
|
49
|
+
}>;
|
|
50
|
+
export declare class ImportError extends ImportError_base {
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates a sync backend connection from a user module and verifies connectivity.
|
|
54
|
+
* This is a simplified version of the MCP runtime that only creates the sync backend.
|
|
55
|
+
*/
|
|
56
|
+
export declare const makeSyncBackend: ({ storePath, storeId, clientId, }: {
|
|
57
|
+
storePath: string;
|
|
58
|
+
storeId: string;
|
|
59
|
+
clientId: string;
|
|
60
|
+
}) => Effect.Effect<SyncBackend.SyncBackend, UnknownError | ConnectionError, FileSystem.FileSystem | HttpClient.HttpClient | Scope.Scope>;
|
|
61
|
+
export interface ExportResult {
|
|
62
|
+
storeId: string;
|
|
63
|
+
eventCount: number;
|
|
64
|
+
exportedAt: string;
|
|
65
|
+
/** The export data as JSON string (for MCP) or written to file (for CLI) */
|
|
66
|
+
data: ExportFile;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Core export operation - pulls all events from sync backend.
|
|
70
|
+
* Returns the export data structure without writing to file.
|
|
71
|
+
*/
|
|
72
|
+
export declare const pullEventsFromSyncBackend: ({ storePath, storeId, clientId, }: {
|
|
73
|
+
storePath: string;
|
|
74
|
+
storeId: string;
|
|
75
|
+
clientId: string;
|
|
76
|
+
}) => Effect.Effect<ExportResult, ExportError | UnknownError | ConnectionError, FileSystem.FileSystem | HttpClient.HttpClient | Scope.Scope>;
|
|
77
|
+
export interface ImportResult {
|
|
78
|
+
storeId: string;
|
|
79
|
+
eventCount: number;
|
|
80
|
+
/** Whether this was a dry run */
|
|
81
|
+
dryRun: boolean;
|
|
82
|
+
}
|
|
83
|
+
export interface ImportValidationResult {
|
|
84
|
+
storeId: string;
|
|
85
|
+
eventCount: number;
|
|
86
|
+
sourceStoreId: string;
|
|
87
|
+
storeIdMismatch: boolean;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Validates an export file for import.
|
|
91
|
+
* Returns validation info without actually importing.
|
|
92
|
+
*/
|
|
93
|
+
export declare const validateExportData: ({ data, targetStoreId, }: {
|
|
94
|
+
data: unknown;
|
|
95
|
+
targetStoreId: string;
|
|
96
|
+
}) => Effect.Effect<ImportValidationResult, ImportError>;
|
|
97
|
+
/**
|
|
98
|
+
* Core import operation - pushes events to sync backend.
|
|
99
|
+
* Validates that the backend is empty before importing.
|
|
100
|
+
*/
|
|
101
|
+
export declare const pushEventsToSyncBackend: ({ storePath, storeId, clientId, data, force, dryRun, }: {
|
|
102
|
+
storePath: string;
|
|
103
|
+
storeId: string;
|
|
104
|
+
clientId: string;
|
|
105
|
+
/** The export data to import (already parsed) */
|
|
106
|
+
data: unknown;
|
|
107
|
+
force: boolean;
|
|
108
|
+
dryRun: boolean;
|
|
109
|
+
}) => Effect.Effect<ImportResult, ImportError | UnknownError | ConnectionError, FileSystem.FileSystem | HttpClient.HttpClient | Scope.Scope>;
|
|
110
|
+
export {};
|
|
111
|
+
//# sourceMappingURL=sync-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-operations.d.ts","sourceRoot":"","sources":["../src/sync-operations.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAEL,MAAM,EACN,UAAU,EACV,KAAK,UAAU,EAIf,MAAM,EACN,KAAK,KAAK,EAEX,MAAM,yBAAyB,CAAA;AAKhC;;;GAGG;AACH,eAAO,MAAM,gBAAgB;IAC3B,8CAA8C;;IAE9C,uBAAuB;;IAEvB,mDAAmD;;IAEnD,2CAA2C;;IAE3C,+CAA+C;;;;;;;;;EAE/C,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;;;;;;;AAErD,qBAAa,eAAgB,SAAQ,oBAGnC;CAAG;;;;;;;AAEL,qBAAa,WAAY,SAAQ,gBAG/B;CAAG;;;;;;;AAEL,qBAAa,WAAY,SAAQ,gBAG/B;CAAG;AAEL;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,mCAI7B;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,MAAM,CAAC,MAAM,CACf,WAAW,CAAC,WAAW,EACvB,YAAY,GAAG,eAAe,EAC9B,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAyHzD,CAAA;AAEJ,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,4EAA4E;IAC5E,IAAI,EAAE,UAAU,CAAA;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GAAI,mCAIvC;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,MAAM,CAAC,MAAM,CACf,YAAY,EACZ,WAAW,GAAG,YAAY,GAAG,eAAe,EAC5C,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAyChB,CAAA;AAE7C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,iCAAiC;IACjC,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,OAAO,CAAA;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,0BAGhC;IACD,IAAI,EAAE,OAAO,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;CACtB,KAAG,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAkBjD,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,wDAOrC;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,iDAAiD;IACjD,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB,KAAG,MAAM,CAAC,MAAM,CACf,YAAY,EACZ,WAAW,GAAG,YAAY,GAAG,eAAe,EAC5C,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAkFhB,CAAA"}
|