@profullstack/readm3 0.3.0 → 0.5.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-cli.js","sourceRoot":"","sources":["../src/cloud-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface CloudConfig {
2
+ url: string;
3
+ api?: string;
4
+ token?: string;
5
+ }
6
+ export declare function cloudConfig(tokenOverride?: string): CloudConfig;
7
+ export declare function saveCloudConfig(config: CloudConfig): void;
8
+ export declare function clearCloudConfig(): void;
9
+ export declare function cloudRequest<T = unknown>(path: string, method?: string, body?: unknown, config?: CloudConfig): Promise<T>;
10
+ export declare function cloudAction<T = unknown>(operation: string, args?: Record<string, unknown>, config?: CloudConfig): Promise<T>;
11
+ export declare function sharedLocation(value: string): {
12
+ token: string;
13
+ config: CloudConfig;
14
+ };
15
+ //# sourceMappingURL=cloud-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-client.d.ts","sourceRoot":"","sources":["../src/cloud-client.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,wBAAgB,WAAW,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,WAAW,CAiB/D;AACD,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,QAElD;AACD,wBAAgB,gBAAgB,SAG/B;AACD,wBAAsB,YAAY,CAAC,CAAC,GAAG,OAAO,EAC5C,IAAI,EAAE,MAAM,EACZ,MAAM,SAAQ,EACd,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,cAAgB,GACrB,OAAO,CAAC,CAAC,CAAC,CAcZ;AACD,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,MAAM,cAAgB,GACrB,OAAO,CAAC,CAAC,CAAC,CAMZ;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;CACrB,CAMA"}
@@ -0,0 +1,57 @@
1
+ import { readFileSync, existsSync, unlinkSync, } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { apiUrl, configDir, writeConfig } from "./account.js";
4
+ export function cloudConfig(tokenOverride) {
5
+ let saved = {};
6
+ try {
7
+ saved = JSON.parse(readFileSync(join(configDir(), "cloud.json"), "utf8"));
8
+ }
9
+ catch {
10
+ /* Environment-only use is supported. */
11
+ }
12
+ const url = (process.env.READM3_URL ||
13
+ saved.url ||
14
+ "https://readm3.com").replace(/\/$/, "");
15
+ const api = apiUrl(process.env.READM3_API_URL || (process.env.READM3_URL ? `${url}/api/v1` : saved.api || `${url}/api/v1`));
16
+ const parsed = new URL(api);
17
+ if (saved.token && !tokenOverride && !process.env.READM3_TOKEN && (saved.api || saved.url) && api !== apiUrl(saved.api || `${saved.url}/api/v1`))
18
+ throw new Error("The server changed. Sign in to this server first.");
19
+ return { url: parsed.origin, api, token: tokenOverride || process.env.READM3_TOKEN || saved.token };
20
+ }
21
+ export function saveCloudConfig(config) {
22
+ writeConfig("cloud.json", config);
23
+ }
24
+ export function clearCloudConfig() {
25
+ const path = join(configDir(), "cloud.json");
26
+ if (existsSync(path))
27
+ unlinkSync(path);
28
+ }
29
+ export async function cloudRequest(path, method = "GET", body, config = cloudConfig()) {
30
+ const response = await fetch(`${config.api || `${config.url}/api/v1`}/${path}`, {
31
+ method,
32
+ headers: {
33
+ ...(config.token ? { authorization: `Bearer ${config.token}` } : {}),
34
+ ...(body === undefined ? {} : { "content-type": "application/json" }),
35
+ },
36
+ body: body === undefined ? undefined : JSON.stringify(body),
37
+ signal: AbortSignal.timeout(30000),
38
+ redirect: "error",
39
+ });
40
+ const value = (await response.json());
41
+ if (!response.ok)
42
+ throw new Error(value.error || `HTTP ${response.status}`);
43
+ return value;
44
+ }
45
+ export async function cloudAction(operation, args = {}, config = cloudConfig()) {
46
+ if (!config.token)
47
+ throw new Error("Sign in at readm3.com/admin, create an API token, and run readm3 login --token-stdin (or set READM3_TOKEN).");
48
+ return cloudRequest("actions", "POST", { operation, args }, config);
49
+ }
50
+ export function sharedLocation(value) {
51
+ const url = new URL(value);
52
+ const match = url.pathname.match(/^\/s\/([\w-]{43})$/);
53
+ if (!match || !["https:", "http:"].includes(url.protocol))
54
+ throw new Error("Use a readm3 shared document URL.");
55
+ return { token: match[1], config: { url: url.origin } };
56
+ }
57
+ //# sourceMappingURL=cloud-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-client.js","sourceRoot":"","sources":["../src/cloud-client.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function runMcp(): Promise<void>;
2
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAmQA,wBAAsB,MAAM,kBAyD3B"}
package/dist/mcp.js ADDED
@@ -0,0 +1,312 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
4
+ import { cloudAction, cloudRequest, sharedLocation } from "./cloud-client.js";
5
+ const string = { type: "string" };
6
+ const role = { type: "string", enum: ["view", "edit"] };
7
+ const definitions = [
8
+ ["settings_get", "Read the verified account's latest settings and Markdown workspace snapshot, including its revision.", {}, []],
9
+ ["settings_save", "Save settings.json and workspace.json. Use the revision from settings_get, or 0 for a first save. Stale saves are rejected.", {
10
+ snapshot: { type: "object", properties: { version: { type: "integer", const: 1 }, files: { type: "object", description: "Only settings.json and workspace.json, each containing a JSON string in its content property." } }, required: ["version", "files"] },
11
+ ifRevision: { type: "integer", minimum: 0 },
12
+ }, ["snapshot", "ifRevision"]],
13
+ ["settings_revisions", "List the verified account's last ten sync revisions.", {}, []],
14
+ ["account_me", "Show the authenticated readm3 user.", {}, []],
15
+ ["organizations_list", "List organizations you belong to.", {}, []],
16
+ [
17
+ "organizations_create",
18
+ "Create an organization owned by you.",
19
+ { name: string },
20
+ ["name"],
21
+ ],
22
+ [
23
+ "organizations_update",
24
+ "Rename an organization. Organization owner only.",
25
+ { orgId: string, name: string },
26
+ ["orgId", "name"],
27
+ ],
28
+ [
29
+ "organizations_delete",
30
+ "Delete an empty organization. Organization owner only.",
31
+ { orgId: string },
32
+ ["orgId"],
33
+ ],
34
+ ["members_list", "List organization members.", { orgId: string }, ["orgId"]],
35
+ [
36
+ "members_update",
37
+ "Change membership role. Organization owner only.",
38
+ {
39
+ orgId: string,
40
+ userId: string,
41
+ role: { type: "string", enum: ["member", "owner"] },
42
+ },
43
+ ["orgId", "userId", "role"],
44
+ ],
45
+ [
46
+ "members_remove",
47
+ "Remove organization membership. Organization owner only.",
48
+ { orgId: string, userId: string },
49
+ ["orgId", "userId"],
50
+ ],
51
+ [
52
+ "invitations_create",
53
+ "Create a one-use organization invitation link valid for seven days. No email is sent.",
54
+ {
55
+ orgId: string,
56
+ role: { type: "string", enum: ["member", "owner"] },
57
+ teamId: string,
58
+ },
59
+ ["orgId"],
60
+ ],
61
+ [
62
+ "invitations_list",
63
+ "List pending organization invitations.",
64
+ { orgId: string },
65
+ ["orgId"],
66
+ ],
67
+ [
68
+ "invitations_accept",
69
+ "Accept an organization invitation using its token.",
70
+ { token: string },
71
+ ["token"],
72
+ ],
73
+ [
74
+ "invitations_revoke",
75
+ "Revoke an organization invitation.",
76
+ { invitationId: string },
77
+ ["invitationId"],
78
+ ],
79
+ ["teams_list", "List organization teams.", { orgId: string }, ["orgId"]],
80
+ [
81
+ "teams_create",
82
+ "Create an organization team. Organization owner only.",
83
+ { orgId: string, name: string },
84
+ ["orgId", "name"],
85
+ ],
86
+ [
87
+ "teams_update",
88
+ "Rename a team. Organization owner only.",
89
+ { teamId: string, name: string },
90
+ ["teamId", "name"],
91
+ ],
92
+ [
93
+ "teams_delete",
94
+ "Delete an empty team. Organization owner only.",
95
+ { teamId: string },
96
+ ["teamId"],
97
+ ],
98
+ ["team_members_list", "List team members.", { teamId: string }, ["teamId"]],
99
+ [
100
+ "team_members_add",
101
+ "Add an organization member to a team.",
102
+ { teamId: string, userId: string },
103
+ ["teamId", "userId"],
104
+ ],
105
+ [
106
+ "team_members_remove",
107
+ "Remove a team member.",
108
+ { teamId: string, userId: string },
109
+ ["teamId", "userId"],
110
+ ],
111
+ [
112
+ "documents_list",
113
+ "List readable documents. Super admins can list all users' documents.",
114
+ {
115
+ orgId: string,
116
+ search: string,
117
+ limit: { type: "integer", minimum: 1, maximum: 1000 },
118
+ offset: { type: "integer", minimum: 0 },
119
+ },
120
+ [],
121
+ ],
122
+ [
123
+ "documents_create",
124
+ "Create a private Markdown document owned by you.",
125
+ {
126
+ orgId: string,
127
+ title: string,
128
+ source: string,
129
+ teamId: string,
130
+ access: { type: "string", enum: ["private", "view", "edit"] },
131
+ },
132
+ ["orgId", "title", "source"],
133
+ ],
134
+ [
135
+ "documents_get",
136
+ "Read a document and its current version. Reading is the default.",
137
+ { documentId: string },
138
+ ["documentId"],
139
+ ],
140
+ [
141
+ "documents_update",
142
+ "Save a new immutable Markdown version. Requires edit access and the current baseVersion; stale saves are rejected.",
143
+ {
144
+ documentId: string,
145
+ source: string,
146
+ title: string,
147
+ baseVersion: string,
148
+ teamId: { type: ["string", "null"] },
149
+ access: { type: "string", enum: ["private", "view", "edit"] },
150
+ },
151
+ ["documentId", "baseVersion"],
152
+ ],
153
+ [
154
+ "documents_delete",
155
+ "Permanently delete a document, its versions, and all links. File owner or super admin only.",
156
+ { documentId: string },
157
+ ["documentId"],
158
+ ],
159
+ [
160
+ "documents_transfer",
161
+ "Transfer document ownership to another username. Owner or super admin only.",
162
+ { documentId: string, username: string },
163
+ ["documentId", "username"],
164
+ ],
165
+ [
166
+ "versions_list",
167
+ "List version IDs, authors, dates, and SHA-256 checksums. Owner or super admin only.",
168
+ { documentId: string },
169
+ ["documentId"],
170
+ ],
171
+ [
172
+ "versions_get",
173
+ "Read an immutable version. Owner or super admin only.",
174
+ { documentId: string, versionId: string },
175
+ ["documentId", "versionId"],
176
+ ],
177
+ [
178
+ "versions_restore",
179
+ "Restore a prior version as a new save. Owner or super admin only.",
180
+ { documentId: string, versionId: string, baseVersion: string },
181
+ ["documentId", "versionId", "baseVersion"],
182
+ ],
183
+ [
184
+ "shares_create",
185
+ "Create a bearer link granting view (default) or edit access. Owners only. Pinned versions are view-only.",
186
+ {
187
+ documentId: string,
188
+ role,
189
+ versionId: string,
190
+ label: string,
191
+ expiresAt: string,
192
+ },
193
+ ["documentId"],
194
+ ],
195
+ [
196
+ "shares_list",
197
+ "List link metadata without revealing secret tokens. Owners only.",
198
+ { documentId: string },
199
+ ["documentId"],
200
+ ],
201
+ [
202
+ "shares_revoke",
203
+ "Revoke a share link immediately. Owners only.",
204
+ { documentId: string, shareId: string },
205
+ ["documentId", "shareId"],
206
+ ],
207
+ [
208
+ "permissions_list",
209
+ "List named collaborators. Owners only.",
210
+ { documentId: string },
211
+ ["documentId"],
212
+ ],
213
+ [
214
+ "permissions_set",
215
+ "Grant or change a named user's view/edit access. Owners only.",
216
+ { documentId: string, username: string, role },
217
+ ["documentId", "username", "role"],
218
+ ],
219
+ [
220
+ "permissions_remove",
221
+ "Remove a named collaborator. Owners only.",
222
+ { documentId: string, userId: string },
223
+ ["documentId", "userId"],
224
+ ],
225
+ [
226
+ "tokens_list",
227
+ "List your personal API tokens (secrets are never returned).",
228
+ {},
229
+ [],
230
+ ],
231
+ [
232
+ "tokens_create",
233
+ "Create a personal API token with your account's permissions, valid for 90 days. Returned once; keep secret.",
234
+ { label: string },
235
+ [],
236
+ ],
237
+ [
238
+ "tokens_revoke",
239
+ "Revoke one of your personal API tokens.",
240
+ { tokenId: string },
241
+ ["tokenId"],
242
+ ],
243
+ ["admin_users", "List all users. Super administrator only.", {}, []],
244
+ [
245
+ "shared_get",
246
+ "Read a Markdown document from a readm3 capability URL.",
247
+ { url: string },
248
+ ["url"],
249
+ ],
250
+ [
251
+ "shared_update",
252
+ "Save through an edit link. View links cannot write. Requires current baseVersion.",
253
+ { url: string, source: string, baseVersion: string },
254
+ ["url", "source", "baseVersion"],
255
+ ],
256
+ ];
257
+ export async function runMcp() {
258
+ const server = new Server({ name: "readm3", version: "0.5.0" }, { capabilities: { tools: {} } });
259
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
260
+ tools: definitions.map(([name, description, properties, required]) => ({
261
+ name,
262
+ description,
263
+ inputSchema: {
264
+ type: "object",
265
+ properties,
266
+ required,
267
+ additionalProperties: false,
268
+ },
269
+ annotations: {
270
+ readOnlyHint: /_(list|get|me|users|revisions)$/.test(name),
271
+ destructiveHint: /_(delete|remove|revoke|transfer)$/.test(name),
272
+ openWorldHint: true,
273
+ },
274
+ })),
275
+ }));
276
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
277
+ const name = request.params.name;
278
+ const args = request.params.arguments ?? {};
279
+ try {
280
+ if (!definitions.some(([operation]) => operation === name))
281
+ throw new Error("Unknown tool.");
282
+ let result;
283
+ if (name.startsWith("settings_")) {
284
+ if (name === "settings_save" && (!Number.isSafeInteger(args.ifRevision) || Number(args.ifRevision) < 0 || !args.snapshot))
285
+ throw new Error("snapshot and a nonnegative ifRevision are required.");
286
+ result = await cloudRequest(name === "settings_revisions" ? "settings/revisions" : "settings", name === "settings_save" ? "PUT" : "GET", name === "settings_save" ? { snapshot: args.snapshot, ifRevision: args.ifRevision } : undefined);
287
+ }
288
+ else if (name.startsWith("shared_")) {
289
+ const { token, config } = sharedLocation(String(args.url));
290
+ result = await cloudRequest(`shared/${token}`, name === "shared_update" ? "PATCH" : "GET", name === "shared_update"
291
+ ? { source: args.source, baseVersion: args.baseVersion }
292
+ : undefined, config);
293
+ }
294
+ else
295
+ result = await cloudAction(name, args);
296
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
297
+ }
298
+ catch (error) {
299
+ return {
300
+ isError: true,
301
+ content: [
302
+ {
303
+ type: "text",
304
+ text: error instanceof Error ? error.message : "Request failed.",
305
+ },
306
+ ],
307
+ };
308
+ }
309
+ });
310
+ await server.connect(new StdioServerTransport());
311
+ }
312
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type SyncContext } from "@profullstack/synconfig";
2
+ export declare function syncContext(rootDir?: string): Promise<SyncContext>;
3
+ export declare function saveSettings(ctx: SyncContext, options?: {
4
+ force?: boolean;
5
+ }): Promise<import("@profullstack/synconfig").SaveResult>;
6
+ export declare function loadSettings(ctx: SyncContext, options?: {
7
+ force?: boolean;
8
+ dryRun?: boolean;
9
+ }): Promise<import("@profullstack/synconfig").LoadResult>;
10
+ export declare function syncStatus(ctx: SyncContext): Promise<import("@profullstack/synconfig").StatusResult>;
11
+ export declare function localSettings(root?: string): {
12
+ theme?: string;
13
+ flavor?: import("./flavors.ts").Flavor;
14
+ };
15
+ //# sourceMappingURL=settings-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-sync.d.ts","sourceRoot":"","sources":["../src/settings-sync.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8E,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAYvI,wBAAsB,WAAW,CAAC,OAAO,SAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAgB7E;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,yDASrF;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,yDAavG;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,WAAW,2DAIhD;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAc;YAKN,MAAM;aAAW,OAAO,cAAc,EAAE,MAAM;EACvF"}
@@ -0,0 +1,79 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, lstatSync, readFileSync } from "node:fs";
3
+ import { hostname } from "node:os";
4
+ import { join } from "node:path";
5
+ import { collectSnapshot, createClient, digestFiles, load, loadMarker, save, status } from "@profullstack/synconfig";
6
+ import { configDir, credentials } from "./account.js";
7
+ import { SYNC_FILES, SYNC_POLICY, validateSyncFiles } from "./sync-schema.js";
8
+ function checkLocalFiles(ctx) {
9
+ for (const name of [...SYNC_FILES, ctx.markerName || "sync.json"]) {
10
+ const path = join(ctx.rootDir, name);
11
+ try {
12
+ if (!lstatSync(path).isFile())
13
+ throw new Error(`Sync needs a regular file: ${name}`);
14
+ }
15
+ catch (error) {
16
+ if (error.code !== "ENOENT")
17
+ throw error;
18
+ }
19
+ }
20
+ }
21
+ export async function syncContext(rootDir = configDir()) {
22
+ const account = await credentials(rootDir);
23
+ const identity = createHash("sha256").update(`${account.api}\0${account.user.id}`).digest("hex");
24
+ const client = createClient({ baseUrl: account.api, path: "/settings", token: account.token, fetchImpl: ((input, init) => fetch(input, { ...init, redirect: "error" })) });
25
+ return { rootDir, policy: SYNC_POLICY, api: `${account.api}#${account.user.id}`, markerName: `sync-${identity}.json`, host: hostname(), app: "readm3 0.5.0", client: {
26
+ ...client,
27
+ async get() {
28
+ const latest = await client.get();
29
+ if (latest) {
30
+ validateSyncFiles(latest.snapshot.files);
31
+ if (digestFiles(latest.snapshot.files) !== latest.digest)
32
+ throw new Error("Snapshot digest does not match its contents.");
33
+ }
34
+ return latest;
35
+ },
36
+ put: (snapshot, revision) => client.put(snapshot, revision),
37
+ } };
38
+ }
39
+ export async function saveSettings(ctx, options = {}) {
40
+ checkLocalFiles(ctx);
41
+ const { snapshot, skipped } = collectSnapshot(ctx.rootDir, ctx.policy, { host: ctx.host, app: ctx.app });
42
+ if (skipped.length)
43
+ throw new Error(`Cannot save an incomplete snapshot: ${skipped.map((entry) => entry.path).join(", ")}`);
44
+ validateSyncFiles(snapshot.files);
45
+ // synconfig uses null for a missing marker. readm3 requires an explicit force
46
+ // to replace an account copy the current device has never loaded.
47
+ const guarded = { ...ctx, client: { ...ctx.client, put: (body, revision) => ctx.client.put(body, options.force ? null : revision ?? 0) } };
48
+ return save(guarded, options);
49
+ }
50
+ export async function loadSettings(ctx, options = {}) {
51
+ checkLocalFiles(ctx);
52
+ const latest = await ctx.client.get();
53
+ ctx = { ...ctx, client: { ...ctx.client, get: async () => latest } };
54
+ const plan = await load(ctx, { dryRun: true });
55
+ if (options.dryRun)
56
+ return plan;
57
+ // A first load also needs protection: the package has no baseline to detect
58
+ // local edits yet. Force still creates the package's numbered backups.
59
+ if (!loadMarker(ctx.rootDir, ctx.markerName) && !options.force) {
60
+ const existing = plan.plan.filter((item) => item.status === "changed");
61
+ if (existing.length)
62
+ return { ...plan, status: "local_changes", drifted: existing.map((item) => item.path) };
63
+ }
64
+ return load(ctx, options);
65
+ }
66
+ export async function syncStatus(ctx) {
67
+ // Do not let the package's status helper hide an authentication/network error.
68
+ const latest = await ctx.client.get();
69
+ return status({ ...ctx, client: { ...ctx.client, get: async () => latest } });
70
+ }
71
+ export function localSettings(root = configDir()) {
72
+ const path = join(root, "settings.json");
73
+ if (!existsSync(path))
74
+ return {};
75
+ const content = readFileSync(path, "utf8");
76
+ validateSyncFiles({ "settings.json": { content } });
77
+ return JSON.parse(content);
78
+ }
79
+ //# sourceMappingURL=settings-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-sync.js","sourceRoot":"","sources":["../src/settings-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const ACCOUNT_USAGE = "Account and sync commands\n readm3 whoami Show the verified account\n readm3 settings [--theme NAME] [--flavor NAME]\n readm3 save [file-or-directory] [--force]\n readm3 load [output-directory] [--dry-run] [--force]\n readm3 sync [status | save | load | revisions]\n\nSave includes settings.json and the last imported workspace.json only.\nGiving save a path imports its Markdown files. Load optionally writes them to\nan output directory, backing up replaced files. --force explicitly resolves a\nconflict. Credentials are stored separately and never synced.\nREADM3_API_URL, READM3_TOKEN and READM3_CONFIG_DIR override local defaults.\n";
2
+ export declare function accountCommand(argv: string[]): Promise<boolean>;
3
+ //# sourceMappingURL=sync-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-cli.d.ts","sourceRoot":"","sources":["../src/sync-cli.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,aAAa,gqBAYzB,CAAC;AAyCF,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA+DrE"}