backpack-ontology 0.7.7 → 0.7.8

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.
@@ -1,4 +1,19 @@
1
1
  #!/usr/bin/env node
2
+ //
3
+ // backpack-sync — Sync Protocol v0.1 CLI for backpack-ontology.
4
+ //
5
+ // Subcommands:
6
+ // register <name> [--color #...] [--tags a,b] Register backpack with relay
7
+ // push [<name>] Push local → relay
8
+ // pull [<name>] Pull relay → local
9
+ // sync [<name>] Bidirectional (pull then push)
10
+ // status [<name>] Show pending changes
11
+ // unregister [<name>] Drop sync state and remote record
12
+ // legacy Run the previous one-shot uploader
13
+ //
14
+ // If <name> is omitted, defaults to the active backpack from
15
+ // backpacks-registry. Authentication: BACKPACK_APP_TOKEN env var (preferred
16
+ // for CI/scripting), otherwise OAuth via .mcp.json discovery (same as legacy).
2
17
  import * as crypto from "node:crypto";
3
18
  import * as fs from "node:fs/promises";
4
19
  import * as path from "node:path";
@@ -7,17 +22,14 @@ import { BackpackAppBackend } from "../storage/backpack-app-backend.js";
7
22
  import { OAuthClient } from "../auth/oauth.js";
8
23
  import { loadConfig } from "../core/config.js";
9
24
  import { DocumentStore } from "../core/document-store.js";
10
- import { getKBMounts } from "../core/backpacks-registry.js";
11
- import { getActiveBackpack } from "../core/backpacks-registry.js";
25
+ import { getActiveBackpack, getBackpack, getKBMounts, colorForPath, } from "../core/backpacks-registry.js";
26
+ import { SyncClient } from "../sync/sync-client.js";
27
+ import { SyncRelayClient } from "../sync/sync-relay.js";
12
28
  const DEFAULTS = {
13
29
  url: "https://app.backpackontology.com",
14
30
  clientId: "YOUR_ENTRA_CLIENT_ID_HERE",
15
31
  issuerUrl: "https://YOUR_TENANT.ciamlogin.com/YOUR_TENANT_ID/v2.0",
16
32
  };
17
- /**
18
- * Try to read backpack-app config from .mcp.json in the current directory
19
- * or parent directories. This lets sync reuse the same auth as the MCP server.
20
- */
21
33
  async function discoverMcpConfig() {
22
34
  let dir = process.cwd();
23
35
  for (let i = 0; i < 10; i++) {
@@ -25,16 +37,13 @@ async function discoverMcpConfig() {
25
37
  try {
26
38
  const raw = await fs.readFile(mcpPath, "utf-8");
27
39
  const config = JSON.parse(raw);
28
- // Look for any backpack-app server config
29
40
  for (const [name, server] of Object.entries(config.mcpServers ?? {})) {
30
41
  if (name.startsWith("backpack-app") && server.env) {
31
- // Apply TLS override if configured (for local dev with self-signed certs)
32
42
  if (server.env.NODE_TLS_REJECT_UNAUTHORIZED) {
33
- process.env.NODE_TLS_REJECT_UNAUTHORIZED =
34
- server.env.NODE_TLS_REJECT_UNAUTHORIZED;
43
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = server.env.NODE_TLS_REJECT_UNAUTHORIZED;
35
44
  }
36
45
  return {
37
- url: server.env.BACKPACK_APP_URL,
46
+ apiUrl: server.env.BACKPACK_APP_URL,
38
47
  clientId: server.env.BACKPACK_APP_CLIENT_ID,
39
48
  issuerUrl: server.env.BACKPACK_APP_ISSUER_URL,
40
49
  token: server.env.BACKPACK_APP_TOKEN,
@@ -43,55 +52,177 @@ async function discoverMcpConfig() {
43
52
  }
44
53
  }
45
54
  catch {
46
- // No .mcp.json here, try parent
55
+ // ignore
47
56
  }
48
57
  const parent = path.dirname(dir);
49
58
  if (parent === dir)
50
59
  break;
51
60
  dir = parent;
52
61
  }
53
- return null;
62
+ return {};
54
63
  }
55
- async function main() {
56
- // Auto-discover config from .mcp.json if no env vars are set
64
+ async function buildAuth() {
57
65
  const discovered = await discoverMcpConfig();
58
- const apiUrl = process.env.BACKPACK_APP_URL ||
59
- discovered?.url ||
60
- DEFAULTS.url;
61
- const clientId = process.env.BACKPACK_APP_CLIENT_ID ||
62
- discovered?.clientId ||
63
- DEFAULTS.clientId;
64
- const issuerUrl = process.env.BACKPACK_APP_ISSUER_URL ||
65
- discovered?.issuerUrl ||
66
- DEFAULTS.issuerUrl;
67
- const staticToken = process.env.BACKPACK_APP_TOKEN ||
68
- discovered?.token;
69
- console.log("");
70
- console.log(" Backpack Sync — upload local ontologies to Backpack App");
71
- console.log(` Target: ${apiUrl}`);
72
- console.log("");
73
- // Set up local backend
74
- const config = await loadConfig();
75
- const local = new JsonFileBackend(config.dataDir);
76
- await local.initialize();
77
- // Set up remote backend + token provider for KB sync
78
- let remote;
79
- let getToken;
66
+ const apiUrl = process.env.BACKPACK_APP_URL || discovered.apiUrl || DEFAULTS.url;
67
+ const clientId = process.env.BACKPACK_APP_CLIENT_ID || discovered.clientId || DEFAULTS.clientId;
68
+ const issuerUrl = process.env.BACKPACK_APP_ISSUER_URL || discovered.issuerUrl || DEFAULTS.issuerUrl;
69
+ const staticToken = process.env.BACKPACK_APP_TOKEN || discovered.token;
70
+ let tokenProvider;
80
71
  if (staticToken) {
81
- remote = new BackpackAppBackend(apiUrl, staticToken);
82
- getToken = async () => staticToken;
72
+ tokenProvider = async () => staticToken;
83
73
  }
84
74
  else {
85
- const cacheKey = crypto
86
- .createHash("sha256")
87
- .update(apiUrl)
88
- .digest("hex")
89
- .slice(0, 12);
75
+ const cacheKey = crypto.createHash("sha256").update(apiUrl).digest("hex").slice(0, 12);
90
76
  const oauth = new OAuthClient(clientId, issuerUrl, cacheKey);
91
- remote = new BackpackAppBackend(apiUrl, () => oauth.getAccessToken());
92
- getToken = () => oauth.getAccessToken();
77
+ tokenProvider = () => oauth.getAccessToken();
78
+ }
79
+ return { apiUrl, clientId, issuerUrl, staticToken, tokenProvider };
80
+ }
81
+ async function buildClient(name) {
82
+ const auth = await buildAuth();
83
+ const entry = name ? await getBackpack(name) : await getActiveBackpack();
84
+ if (!entry) {
85
+ throw new Error(`backpack not found: ${name ?? "<active>"}`);
86
+ }
87
+ const relay = new SyncRelayClient({ baseUrl: auth.apiUrl, token: auth.tokenProvider });
88
+ const client = new SyncClient({ backpackPath: entry.path, relay });
89
+ return { client, backpackPath: entry.path, backpackName: entry.name, apiUrl: auth.apiUrl };
90
+ }
91
+ // ---------- subcommands ----------
92
+ function parseFlags(args) {
93
+ const positional = [];
94
+ const flags = {};
95
+ for (let i = 0; i < args.length; i++) {
96
+ const a = args[i];
97
+ if (a.startsWith("--")) {
98
+ const eq = a.indexOf("=");
99
+ if (eq > 0) {
100
+ flags[a.slice(2, eq)] = a.slice(eq + 1);
101
+ }
102
+ else {
103
+ flags[a.slice(2)] = args[++i] ?? "";
104
+ }
105
+ }
106
+ else {
107
+ positional.push(a);
108
+ }
109
+ }
110
+ return { positional, flags };
111
+ }
112
+ async function cmdRegister(args) {
113
+ const { positional, flags } = parseFlags(args);
114
+ if (positional.length === 0) {
115
+ throw new Error("usage: backpack-sync register <name> [--color #hex] [--tags a,b]");
116
+ }
117
+ const name = positional[0];
118
+ const { client, backpackPath, apiUrl } = await buildClient(name);
119
+ const color = flags.color ?? colorForPath(backpackPath);
120
+ const tags = flags.tags ? flags.tags.split(",").map((s) => s.trim()).filter(Boolean) : [];
121
+ const state = await client.register({ name, color, tags });
122
+ console.log("");
123
+ console.log(` Registered "${name}" with ${apiUrl}`);
124
+ console.log(` Backpack ID: ${state.backpack_id}`);
125
+ console.log(` Run \`backpack-sync push ${name}\` to upload artifacts.`);
126
+ console.log("");
127
+ }
128
+ function describeResult(name, result) {
129
+ console.log(` Backpack: ${name}`);
130
+ if (result.pushed.length)
131
+ console.log(` Pushed: ${result.pushed.length}`);
132
+ if (result.pulled.length)
133
+ console.log(` Pulled: ${result.pulled.length}`);
134
+ if (result.deleted_remote.length)
135
+ console.log(` Deleted (cloud): ${result.deleted_remote.length}`);
136
+ if (result.deleted_local.length)
137
+ console.log(` Deleted (local): ${result.deleted_local.length}`);
138
+ if (result.conflicts.length) {
139
+ console.log(` Conflicts: ${result.conflicts.length}`);
140
+ for (const c of result.conflicts) {
141
+ console.log(` - ${c.artifact_id} → ${c.conflict_path}`);
142
+ }
143
+ }
144
+ if (result.errors.length) {
145
+ console.log(` Errors: ${result.errors.length}`);
146
+ for (const e of result.errors) {
147
+ console.log(` - ${e.artifact_id ?? "(none)"}: ${e.message}`);
148
+ }
149
+ }
150
+ if (result.pushed.length === 0 &&
151
+ result.pulled.length === 0 &&
152
+ result.deleted_remote.length === 0 &&
153
+ result.deleted_local.length === 0 &&
154
+ result.conflicts.length === 0 &&
155
+ result.errors.length === 0) {
156
+ console.log(" Already in sync.");
157
+ }
158
+ }
159
+ async function cmdPush(args) {
160
+ const { positional } = parseFlags(args);
161
+ const { client, backpackName } = await buildClient(positional[0]);
162
+ const result = await client.push();
163
+ describeResult(backpackName, result);
164
+ }
165
+ async function cmdPull(args) {
166
+ const { positional } = parseFlags(args);
167
+ const { client, backpackName } = await buildClient(positional[0]);
168
+ const result = await client.pull();
169
+ describeResult(backpackName, result);
170
+ }
171
+ async function cmdSync(args) {
172
+ const { positional } = parseFlags(args);
173
+ const { client, backpackName } = await buildClient(positional[0]);
174
+ const result = await client.sync();
175
+ describeResult(backpackName, result);
176
+ }
177
+ async function cmdStatus(args) {
178
+ const { positional } = parseFlags(args);
179
+ const { client, backpackName } = await buildClient(positional[0]);
180
+ const status = await client.status();
181
+ console.log("");
182
+ console.log(` Backpack: ${backpackName}`);
183
+ if (!status.registered) {
184
+ console.log(" Not registered. Run `backpack-sync register <name>` to enable sync.");
185
+ console.log("");
186
+ return;
187
+ }
188
+ console.log(` Registered: ${status.state?.backpack_id}`);
189
+ console.log(` Last sync: ${status.state?.last_sync_at ?? "never"}`);
190
+ console.log(` Up to date: ${status.upToDate}`);
191
+ console.log(` Local only: ${status.localOnly.length}`);
192
+ if (status.localOnly.length) {
193
+ for (const id of status.localOnly)
194
+ console.log(` + ${id}`);
195
+ }
196
+ console.log(` Remote only: ${status.remoteOnly.length}`);
197
+ if (status.remoteOnly.length) {
198
+ for (const id of status.remoteOnly)
199
+ console.log(` - ${id}`);
93
200
  }
94
- // List local ontologies
201
+ console.log(` Diverged: ${status.diverged.length}`);
202
+ if (status.diverged.length) {
203
+ for (const id of status.diverged)
204
+ console.log(` ! ${id}`);
205
+ }
206
+ console.log("");
207
+ }
208
+ async function cmdUnregister(args) {
209
+ const { positional } = parseFlags(args);
210
+ const { client, backpackName } = await buildClient(positional[0]);
211
+ await client.unregister();
212
+ console.log(` Unregistered ${backpackName} (sync state cleared, remote record deleted if present).`);
213
+ }
214
+ // ---------- legacy one-shot uploader (preserved for backward compat) ----------
215
+ async function cmdLegacy() {
216
+ const auth = await buildAuth();
217
+ console.log("");
218
+ console.log(" Backpack Sync (legacy mode) — upload local ontologies to Backpack App");
219
+ console.log(` Target: ${auth.apiUrl}`);
220
+ console.log("");
221
+ const config = await loadConfig();
222
+ const local = new JsonFileBackend(config.dataDir);
223
+ await local.initialize();
224
+ const tokenProvider = auth.tokenProvider;
225
+ const remote = new BackpackAppBackend(auth.apiUrl, tokenProvider);
95
226
  const localOntologies = await local.listOntologies();
96
227
  if (localOntologies.length === 0) {
97
228
  console.log(" No local ontologies found. Nothing to sync.");
@@ -103,14 +234,13 @@ async function main() {
103
234
  console.log(` - ${o.name} (${o.nodeCount} nodes, ${o.edgeCount} edges)`);
104
235
  }
105
236
  console.log("");
106
- // Check which already exist remotely
107
237
  let remoteNames;
108
238
  try {
109
239
  const remoteOntologies = await remote.listOntologies();
110
240
  remoteNames = new Set(remoteOntologies.map((o) => o.name));
111
241
  }
112
242
  catch (err) {
113
- console.error(` Failed to connect to Backpack App at ${apiUrl}:`, err.message);
243
+ console.error(` Failed to connect to Backpack App at ${auth.apiUrl}:`, err.message);
114
244
  process.exit(1);
115
245
  }
116
246
  let created = 0;
@@ -139,7 +269,7 @@ async function main() {
139
269
  }
140
270
  console.log("");
141
271
  console.log(` Done. ${created} created, ${updated} updated, ${skipped} failed.`);
142
- // --- Sync KB documents ---
272
+ // Sync KB documents from active backpack default mount
143
273
  let docsSynced = 0;
144
274
  try {
145
275
  const activeEntry = await getActiveBackpack();
@@ -152,14 +282,10 @@ async function main() {
152
282
  for (const summary of result.documents) {
153
283
  try {
154
284
  const doc = await docStore.read(summary.id);
155
- // Upload document as a graph-associated resource via the app API
156
- const token = await getToken();
157
- const resp = await fetch(`${apiUrl}/api/kb/documents/${encodeURIComponent(doc.id)}`, {
285
+ const token = await tokenProvider();
286
+ const resp = await fetch(`${auth.apiUrl}/api/kb/documents/${encodeURIComponent(doc.id)}`, {
158
287
  method: "PUT",
159
- headers: {
160
- "Content-Type": "application/json",
161
- Authorization: `Bearer ${token}`,
162
- },
288
+ headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}` },
163
289
  body: JSON.stringify(doc),
164
290
  });
165
291
  if (resp.ok) {
@@ -177,18 +303,70 @@ async function main() {
177
303
  }
178
304
  }
179
305
  catch {
180
- // No KB configured — skip
181
- }
182
- if (created + updated > 0 || docsSynced > 0) {
183
- console.log("");
184
- console.log(` Your ontologies${docsSynced > 0 ? ` and ${docsSynced} KB document(s)` : ""} are now in Backpack App.`);
185
- console.log(" To switch to cloud mode, update your .mcp.json to use backpack-app");
186
- console.log(" instead of backpack.");
306
+ // No KB configured
187
307
  }
188
308
  console.log("");
189
309
  }
310
+ // ---------- entry ----------
311
+ function printHelp() {
312
+ console.log("");
313
+ console.log(" backpack-sync — bidirectional sync for Backpack");
314
+ console.log("");
315
+ console.log(" USAGE:");
316
+ console.log(" backpack-sync register <name> [--color #hex] [--tags a,b]");
317
+ console.log(" backpack-sync push [<name>]");
318
+ console.log(" backpack-sync pull [<name>]");
319
+ console.log(" backpack-sync sync [<name>] (bidirectional, default if no subcommand)");
320
+ console.log(" backpack-sync status [<name>]");
321
+ console.log(" backpack-sync unregister [<name>]");
322
+ console.log(" backpack-sync legacy (one-shot publish, original behavior)");
323
+ console.log("");
324
+ console.log(" AUTH:");
325
+ console.log(" BACKPACK_APP_TOKEN=... Static bearer token");
326
+ console.log(" BACKPACK_APP_URL=... Override relay URL");
327
+ console.log(" Otherwise OAuth via .mcp.json discovery (same as MCP server)");
328
+ console.log("");
329
+ }
330
+ async function main() {
331
+ const argv = process.argv.slice(2);
332
+ const sub = argv[0];
333
+ const rest = argv.slice(1);
334
+ if (!sub || sub === "--help" || sub === "-h" || sub === "help") {
335
+ printHelp();
336
+ return;
337
+ }
338
+ switch (sub) {
339
+ case "register":
340
+ await cmdRegister(rest);
341
+ return;
342
+ case "push":
343
+ await cmdPush(rest);
344
+ return;
345
+ case "pull":
346
+ await cmdPull(rest);
347
+ return;
348
+ case "sync":
349
+ await cmdSync(rest);
350
+ return;
351
+ case "status":
352
+ await cmdStatus(rest);
353
+ return;
354
+ case "unregister":
355
+ await cmdUnregister(rest);
356
+ return;
357
+ case "legacy":
358
+ await cmdLegacy();
359
+ return;
360
+ default:
361
+ // Backward compatibility: if invoked with no subcommand-style arg
362
+ // (e.g. someone passes a backpack name directly), treat as legacy.
363
+ console.error(`unknown subcommand: ${sub}`);
364
+ printHelp();
365
+ process.exit(2);
366
+ }
367
+ }
190
368
  main().catch((error) => {
191
- console.error("Error:", error.message ?? error);
369
+ console.error("Error:", error?.message ?? error);
192
370
  process.exit(1);
193
371
  });
194
372
  //# sourceMappingURL=backpack-sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backpack-sync.js","sourceRoot":"","sources":["../../src/bin/backpack-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backpack-sync.js","sourceRoot":"","sources":["../../src/bin/backpack-sync.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { createMcpServer } from "../mcp/server.js";
4
4
  import { loadConfig } from "../core/config.js";
5
5
  import { removeBackpackHooks } from "../core/hooks.js";
6
6
  import { shutdown as shutdownTelemetry } from "../core/telemetry.js";
7
+ import { runStartupSync } from "../sync/auto-sync.js";
7
8
  async function main() {
8
9
  const config = await loadConfig();
9
10
  // Clean up any hooks installed by older versions (silent, non-blocking)
@@ -13,6 +14,12 @@ async function main() {
13
14
  await server.connect(transport);
14
15
  // Log to stderr because stdout is reserved for the MCP protocol
15
16
  console.error("Backpack MCP server running on stdio");
17
+ // Background pull for any sync-registered backpacks. Fire-and-forget;
18
+ // errors go to stderr and never block server startup. Set
19
+ // BACKPACK_SYNC_AUTOPULL=0 to opt out.
20
+ if (process.env.BACKPACK_SYNC_AUTOPULL !== "0") {
21
+ runStartupSync();
22
+ }
16
23
  }
17
24
  // Graceful shutdown — flush telemetry before exit
18
25
  async function gracefulShutdown() {
@@ -1 +1 @@
1
- {"version":3,"file":"backpack.js","sourceRoot":"","sources":["../../src/bin/backpack.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAErE,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,wEAAwE;IACxE,mBAAmB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,gEAAgE;IAChE,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACxD,CAAC;AAED,kDAAkD;AAClD,KAAK,UAAU,gBAAgB;IAC7B,MAAM,iBAAiB,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACvC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAExC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"backpack.js","sourceRoot":"","sources":["../../src/bin/backpack.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,wEAAwE;IACxE,mBAAmB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,gEAAgE;IAChE,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAEtD,sEAAsE;IACtE,0DAA0D;IAC1D,uCAAuC;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,GAAG,EAAE,CAAC;QAC/C,cAAc,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,kDAAkD;AAClD,KAAK,UAAU,gBAAgB;IAC7B,MAAM,iBAAiB,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACvC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAExC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -28,4 +28,6 @@ export { createEnvelope, parseEnvelope, generateKeyPair, encrypt, decrypt, encod
28
28
  export type { EnvelopeHeader, Envelope, KeyPair, ShareResult, RelayConfig, } from "./sharing/index.js";
29
29
  export { createMcpServer } from "./mcp/server.js";
30
30
  export type { BackpackServerConfig, BackpackLocalConfig, BackpackAppConfig } from "./mcp/server.js";
31
+ export { SyncClient, SyncRelayClient, SyncVersionConflictError, ARTIFACT_KIND_GRAPH, ARTIFACT_KIND_KB_DOC, SYNC_PROTOCOL_VERSION, hashContent as hashSyncContent, parseArtifactId, readSyncState, writeSyncState, deleteSyncState, isStateInitialized, runStartupSync, } from "./sync/index.js";
32
+ export type { SyncClientOptions, RegisterOptions, SyncRelayClientOptions, TokenProvider, ArtifactKind, ArtifactSyncState, BackpackSyncState, ConflictRecord, GraphArtifactContent, KBDocArtifactContent, SyncArtifact, SyncArtifactSummary, SyncBackpack, SyncError, SyncManifest, SyncRunResult, } from "./sync/index.js";
31
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -30,4 +30,6 @@ export { estimateTokens, estimateGraphTokens, computeSavings, formatSavingsFoote
30
30
  export { createEnvelope, parseEnvelope, generateKeyPair, encrypt, decrypt, encodeKeyForFragment, decodeKeyFromFragment, downloadFromRelay, getShareMeta, } from "./sharing/index.js";
31
31
  // MCP server factory
32
32
  export { createMcpServer } from "./mcp/server.js";
33
+ // Sync Protocol v0.1
34
+ export { SyncClient, SyncRelayClient, SyncVersionConflictError, ARTIFACT_KIND_GRAPH, ARTIFACT_KIND_KB_DOC, SYNC_PROTOCOL_VERSION, hashContent as hashSyncContent, parseArtifactId, readSyncState, writeSyncState, deleteSyncState, isStateInitialized, runStartupSync, } from "./sync/index.js";
33
35
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO;AACP,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkB9C,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,GACd,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,8EAA8E;AAC9E,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,iDAAiD;AACjD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAGtC,kCAAkC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAUzD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,gCAAgC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAYrD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,uEAAuE;AACvE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEtG,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAElH,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpH,0DAA0D;AAC1D,OAAO,EACL,cAAc,EACd,aAAa,EACb,eAAe,EACf,OAAO,EACP,OAAO,EACP,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAS5B,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO;AACP,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkB9C,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,GACd,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,8EAA8E;AAC9E,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,iDAAiD;AACjD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAGtC,kCAAkC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAUzD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,gCAAgC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAYrD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,uEAAuE;AACvE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEpF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEtG,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAElH,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpH,0DAA0D;AAC1D,OAAO,EACL,cAAc,EACd,aAAa,EACb,eAAe,EACf,OAAO,EACP,OAAO,EACP,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAS5B,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,qBAAqB;AACrB,OAAO,EACL,UAAU,EACV,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,IAAI,eAAe,EAC9B,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface AutoSyncOptions {
2
+ /** Suppress all output (used in tests). */
3
+ silent?: boolean;
4
+ }
5
+ /**
6
+ * Trigger a pull for every registered backpack that has sync state.
7
+ * Returns immediately; the actual sync runs in the background.
8
+ */
9
+ export declare function runStartupSync(opts?: AutoSyncOptions): void;
10
+ //# sourceMappingURL=auto-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-sync.d.ts","sourceRoot":"","sources":["../../src/sync/auto-sync.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,eAAoB,GAAG,IAAI,CAM/D"}
@@ -0,0 +1,81 @@
1
+ // Auto-sync hooks for the local MCP server.
2
+ //
3
+ // Runs in the background on MCP server startup: for each registered backpack
4
+ // that has sync state on disk, run a `pull` so the user picks up any changes
5
+ // that landed via cloud MCP / phone / web while the local MCP wasn't running.
6
+ //
7
+ // All errors are logged to stderr (stdout is reserved for the MCP protocol)
8
+ // and never block server startup.
9
+ import * as crypto from "node:crypto";
10
+ import { listBackpacks } from "../core/backpacks-registry.js";
11
+ import { OAuthClient } from "../auth/oauth.js";
12
+ import { SyncClient } from "./sync-client.js";
13
+ import { SyncRelayClient } from "./sync-relay.js";
14
+ import { readSyncState } from "./sync-state.js";
15
+ /**
16
+ * Trigger a pull for every registered backpack that has sync state.
17
+ * Returns immediately; the actual sync runs in the background.
18
+ */
19
+ export function runStartupSync(opts = {}) {
20
+ void runStartupSyncAsync(opts).catch((err) => {
21
+ if (!opts.silent) {
22
+ process.stderr.write(`auto-sync: top-level error — ${err.message}\n`);
23
+ }
24
+ });
25
+ }
26
+ async function runStartupSyncAsync(opts) {
27
+ let backpacks;
28
+ try {
29
+ backpacks = await listBackpacks();
30
+ }
31
+ catch (err) {
32
+ if (!opts.silent) {
33
+ process.stderr.write(`auto-sync: could not list backpacks — ${err.message}\n`);
34
+ }
35
+ return;
36
+ }
37
+ for (const entry of backpacks) {
38
+ const state = await readSyncState(entry.path).catch(() => null);
39
+ if (!state || !state.relay_url || !state.backpack_id)
40
+ continue;
41
+ const tokenProvider = await buildTokenProvider(state.relay_url);
42
+ if (!tokenProvider) {
43
+ if (!opts.silent) {
44
+ process.stderr.write(`auto-sync: ${entry.name} has sync state but no auth available — skipping\n`);
45
+ }
46
+ continue;
47
+ }
48
+ const relay = new SyncRelayClient({ baseUrl: state.relay_url, token: tokenProvider });
49
+ const client = new SyncClient({ backpackPath: entry.path, relay });
50
+ try {
51
+ const result = await client.pull();
52
+ if (!opts.silent) {
53
+ const summary = result.pulled.length === 0 && result.deleted_local.length === 0 && result.errors.length === 0
54
+ ? "in sync"
55
+ : `pulled ${result.pulled.length}, deleted ${result.deleted_local.length}, errors ${result.errors.length}`;
56
+ process.stderr.write(`auto-sync: ${entry.name} — ${summary}\n`);
57
+ }
58
+ }
59
+ catch (err) {
60
+ if (!opts.silent) {
61
+ process.stderr.write(`auto-sync: ${entry.name} — ${err.message}\n`);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ async function buildTokenProvider(relayUrl) {
67
+ // Static bearer token from env (CI / scripted setups)
68
+ if (process.env.BACKPACK_APP_TOKEN) {
69
+ const tok = process.env.BACKPACK_APP_TOKEN;
70
+ return () => Promise.resolve(tok);
71
+ }
72
+ // OAuth via .mcp.json (same path the MCP server already uses)
73
+ const clientId = process.env.BACKPACK_APP_CLIENT_ID;
74
+ const issuerUrl = process.env.BACKPACK_APP_ISSUER_URL;
75
+ if (!clientId || !issuerUrl)
76
+ return null;
77
+ const cacheKey = crypto.createHash("sha256").update(relayUrl).digest("hex").slice(0, 12);
78
+ const oauth = new OAuthClient(clientId, issuerUrl, cacheKey);
79
+ return () => oauth.getAccessToken();
80
+ }
81
+ //# sourceMappingURL=auto-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-sync.js","sourceRoot":"","sources":["../../src/sync/auto-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { SyncClient, hashContent, parseArtifactId } from "./sync-client.js";
2
+ export type { SyncClientOptions, RegisterOptions } from "./sync-client.js";
3
+ export { SyncRelayClient } from "./sync-relay.js";
4
+ export type { SyncRelayClientOptions, TokenProvider } from "./sync-relay.js";
5
+ export { ARTIFACT_KIND_GRAPH, ARTIFACT_KIND_KB_DOC, SYNC_PROTOCOL_VERSION, SyncVersionConflictError, } from "./types.js";
6
+ export type { ArtifactKind, ArtifactSyncState, BackpackSyncState, ConflictRecord, GraphArtifactContent, KBDocArtifactContent, SyncArtifact, SyncArtifactSummary, SyncBackpack, SyncError, SyncManifest, SyncRunResult, } from "./types.js";
7
+ export { readSyncState, writeSyncState, deleteSyncState, isStateInitialized, emptyArtifactState, } from "./sync-state.js";
8
+ export { runStartupSync } from "./auto-sync.js";
9
+ export type { AutoSyncOptions } from "./auto-sync.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5E,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // Public entry point for the sync module.
2
+ export { SyncClient, hashContent, parseArtifactId } from "./sync-client.js";
3
+ export { SyncRelayClient } from "./sync-relay.js";
4
+ export { ARTIFACT_KIND_GRAPH, ARTIFACT_KIND_KB_DOC, SYNC_PROTOCOL_VERSION, SyncVersionConflictError, } from "./types.js";
5
+ export { readSyncState, writeSyncState, deleteSyncState, isStateInitialized, emptyArtifactState, } from "./sync-state.js";
6
+ export { runStartupSync } from "./auto-sync.js";
7
+ //# sourceMappingURL=index.js.map