backpack-ontology 0.2.24 → 0.3.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.
Files changed (109) hide show
  1. package/README.md +153 -3
  2. package/dist/bin/backpack-benchmark.d.ts +3 -0
  3. package/dist/bin/backpack-benchmark.d.ts.map +1 -0
  4. package/dist/bin/backpack-benchmark.js +213 -0
  5. package/dist/bin/backpack-benchmark.js.map +1 -0
  6. package/dist/bin/backpack.js +3 -3
  7. package/dist/bin/backpack.js.map +1 -1
  8. package/dist/bin/init.js +8 -11
  9. package/dist/bin/init.js.map +1 -1
  10. package/dist/core/backpack.d.ts +78 -2
  11. package/dist/core/backpack.d.ts.map +1 -1
  12. package/dist/core/backpack.js +226 -3
  13. package/dist/core/backpack.js.map +1 -1
  14. package/dist/core/draft.d.ts +42 -0
  15. package/dist/core/draft.d.ts.map +1 -0
  16. package/dist/core/draft.js +232 -0
  17. package/dist/core/draft.js.map +1 -0
  18. package/dist/core/events.d.ts +114 -0
  19. package/dist/core/events.d.ts.map +1 -0
  20. package/dist/core/events.js +375 -0
  21. package/dist/core/events.js.map +1 -0
  22. package/dist/core/graph.d.ts +3 -1
  23. package/dist/core/graph.d.ts.map +1 -1
  24. package/dist/core/graph.js +50 -0
  25. package/dist/core/graph.js.map +1 -1
  26. package/dist/core/hooks.d.ts +11 -3
  27. package/dist/core/hooks.d.ts.map +1 -1
  28. package/dist/core/hooks.js +53 -47
  29. package/dist/core/hooks.js.map +1 -1
  30. package/dist/core/normalize.d.ts +28 -0
  31. package/dist/core/normalize.d.ts.map +1 -0
  32. package/dist/core/normalize.js +133 -0
  33. package/dist/core/normalize.js.map +1 -0
  34. package/dist/core/remote-fetch.d.ts +50 -0
  35. package/dist/core/remote-fetch.d.ts.map +1 -0
  36. package/dist/core/remote-fetch.js +338 -0
  37. package/dist/core/remote-fetch.js.map +1 -0
  38. package/dist/core/remote-registry.d.ts +95 -0
  39. package/dist/core/remote-registry.d.ts.map +1 -0
  40. package/dist/core/remote-registry.js +296 -0
  41. package/dist/core/remote-registry.js.map +1 -0
  42. package/dist/core/remote-schema.d.ts +31 -0
  43. package/dist/core/remote-schema.d.ts.map +1 -0
  44. package/dist/core/remote-schema.js +252 -0
  45. package/dist/core/remote-schema.js.map +1 -0
  46. package/dist/core/role-audit.d.ts +20 -0
  47. package/dist/core/role-audit.d.ts.map +1 -0
  48. package/dist/core/role-audit.js +197 -0
  49. package/dist/core/role-audit.js.map +1 -0
  50. package/dist/core/telemetry.d.ts +2 -0
  51. package/dist/core/telemetry.d.ts.map +1 -1
  52. package/dist/core/telemetry.js +27 -0
  53. package/dist/core/telemetry.js.map +1 -1
  54. package/dist/core/token-estimate.d.ts +16 -0
  55. package/dist/core/token-estimate.d.ts.map +1 -0
  56. package/dist/core/token-estimate.js +29 -0
  57. package/dist/core/token-estimate.js.map +1 -0
  58. package/dist/core/types.d.ts +30 -1
  59. package/dist/core/types.d.ts.map +1 -1
  60. package/dist/index.d.ts +9 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +8 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/mcp/server.d.ts.map +1 -1
  65. package/dist/mcp/server.js +11 -0
  66. package/dist/mcp/server.js.map +1 -1
  67. package/dist/mcp/tools/bulk-tools.d.ts.map +1 -1
  68. package/dist/mcp/tools/bulk-tools.js +80 -12
  69. package/dist/mcp/tools/bulk-tools.js.map +1 -1
  70. package/dist/mcp/tools/edge-tools.d.ts.map +1 -1
  71. package/dist/mcp/tools/edge-tools.js +14 -18
  72. package/dist/mcp/tools/edge-tools.js.map +1 -1
  73. package/dist/mcp/tools/error-helpers.d.ts +16 -0
  74. package/dist/mcp/tools/error-helpers.d.ts.map +1 -0
  75. package/dist/mcp/tools/error-helpers.js +34 -0
  76. package/dist/mcp/tools/error-helpers.js.map +1 -0
  77. package/dist/mcp/tools/intelligence-tools.d.ts +4 -0
  78. package/dist/mcp/tools/intelligence-tools.d.ts.map +1 -0
  79. package/dist/mcp/tools/intelligence-tools.js +184 -0
  80. package/dist/mcp/tools/intelligence-tools.js.map +1 -0
  81. package/dist/mcp/tools/node-tools.d.ts.map +1 -1
  82. package/dist/mcp/tools/node-tools.js +43 -40
  83. package/dist/mcp/tools/node-tools.js.map +1 -1
  84. package/dist/mcp/tools/ontology-tools.d.ts.map +1 -1
  85. package/dist/mcp/tools/ontology-tools.js +237 -12
  86. package/dist/mcp/tools/ontology-tools.js.map +1 -1
  87. package/dist/mcp/tools/remote-tools.d.ts +5 -0
  88. package/dist/mcp/tools/remote-tools.d.ts.map +1 -0
  89. package/dist/mcp/tools/remote-tools.js +295 -0
  90. package/dist/mcp/tools/remote-tools.js.map +1 -0
  91. package/dist/mcp/tools/version-tools.d.ts.map +1 -1
  92. package/dist/mcp/tools/version-tools.js +86 -0
  93. package/dist/mcp/tools/version-tools.js.map +1 -1
  94. package/dist/storage/backpack-app-backend.d.ts +1 -1
  95. package/dist/storage/backpack-app-backend.d.ts.map +1 -1
  96. package/dist/storage/backpack-app-backend.js +3 -1
  97. package/dist/storage/backpack-app-backend.js.map +1 -1
  98. package/dist/storage/event-sourced-backend.d.ts +174 -0
  99. package/dist/storage/event-sourced-backend.d.ts.map +1 -0
  100. package/dist/storage/event-sourced-backend.js +840 -0
  101. package/dist/storage/event-sourced-backend.js.map +1 -0
  102. package/dist/storage/json-file-backend.d.ts +1 -54
  103. package/dist/storage/json-file-backend.d.ts.map +1 -1
  104. package/dist/storage/json-file-backend.js +11 -470
  105. package/dist/storage/json-file-backend.js.map +1 -1
  106. package/package.json +3 -3
  107. package/hooks/auto-capture-prompt.md +0 -40
  108. package/hooks/hooks.json +0 -16
  109. package/hooks/suggest-viewer.sh +0 -4
package/README.md CHANGED
@@ -1,10 +1,16 @@
1
1
  # Backpack
2
2
 
3
- **Carry your knowledge forward.** Backpack lets Claude remember what matters: your clients, your processes, your decisions. Knowledge that travels with you.
3
+ **Carry your knowledge forward.**
4
+
5
+ LLMs are incredible at reasoning but have zero memory of your world. Every new conversation starts from scratch — you repeat clients, projects, decisions, and preferences over and over.
6
+
7
+ Backpack fixes that. It gives your AI a persistent, structured knowledge base that carries forward across every session.
8
+
9
+ ![Backpack graph viewer demo](docs/assets/demo.gif)
4
10
 
5
11
  ## What it does
6
12
 
7
- When you're working with Claude and something worth remembering comes up, Backpack saves it as a structured learning graph. Next time you ask, Claude already knows.
13
+ Tell your AI something once, and it remembers next conversation, next week, next month.
8
14
 
9
15
  ```
10
16
  You: "We just signed Acme Corp, they're on the Enterprise tier, main contact is Sarah Chen"
@@ -20,6 +26,22 @@ Claude: "Acme Corp is on the Enterprise tier, main contact is Sarah Chen..."
20
26
 
21
27
  No copy-pasting. No re-explaining. Your knowledge carries forward.
22
28
 
29
+ ## The graph viewer
30
+
31
+ An interactive canvas where you can actually see and explore your knowledge base.
32
+
33
+ ![Backpack explore demo](docs/assets/explore.gif)
34
+
35
+ - Force-directed layout with live updates as you add knowledge
36
+ - Click nodes to explore relationships, properties, and connections
37
+ - Focus mode to zoom into a subgraph, walk mode to trace paths between ideas
38
+ - Type hulls group related things visually
39
+ - Vim-style keyboard navigation, undo/redo, search
40
+
41
+ This is where human understanding meets AI-generated knowledge — turning structured data into something you can see, navigate, and build on.
42
+
43
+ [Backpack Viewer repo](https://github.com/NoahIrzinger/backpack-viewer)
44
+
23
45
  ## Get started
24
46
 
25
47
  ### Recommended: Backpack App (free cloud account)
@@ -42,6 +64,112 @@ claude mcp add backpack-local -s user -- npx backpack-ontology@latest
42
64
 
43
65
  You can always move to Backpack App later by telling Claude "sync my backpack to the cloud".
44
66
 
67
+ ### Works with other AI tools
68
+
69
+ Backpack works with any tool that supports MCP. Here's how to set it up:
70
+
71
+ <details>
72
+ <summary><strong>Cursor</strong></summary>
73
+
74
+ Add to `~/.cursor/mcp.json` (or `.cursor/mcp.json` in your project):
75
+
76
+ ```json
77
+ {
78
+ "mcpServers": {
79
+ "backpack": {
80
+ "command": "npx",
81
+ "args": ["backpack-ontology@latest"]
82
+ }
83
+ }
84
+ }
85
+ ```
86
+
87
+ Or configure through Cursor Settings > MCP.
88
+ </details>
89
+
90
+ <details>
91
+ <summary><strong>Windsurf</strong></summary>
92
+
93
+ Add to `~/.codeium/windsurf/mcp_config.json`:
94
+
95
+ ```json
96
+ {
97
+ "mcpServers": {
98
+ "backpack": {
99
+ "command": "npx",
100
+ "args": ["backpack-ontology@latest"]
101
+ }
102
+ }
103
+ }
104
+ ```
105
+ </details>
106
+
107
+ <details>
108
+ <summary><strong>OpenAI Codex CLI</strong></summary>
109
+
110
+ ```bash
111
+ codex mcp add backpack -- npx backpack-ontology@latest
112
+ ```
113
+
114
+ Or add to `~/.codex/config.toml`:
115
+
116
+ ```toml
117
+ [mcp_servers.backpack]
118
+ command = "npx"
119
+ args = ["backpack-ontology@latest"]
120
+ ```
121
+ </details>
122
+
123
+ <details>
124
+ <summary><strong>Cline (VS Code)</strong></summary>
125
+
126
+ Click the MCP Servers icon in Cline's top bar, then add:
127
+
128
+ ```json
129
+ {
130
+ "mcpServers": {
131
+ "backpack": {
132
+ "command": "npx",
133
+ "args": ["backpack-ontology@latest"]
134
+ }
135
+ }
136
+ }
137
+ ```
138
+ </details>
139
+
140
+ <details>
141
+ <summary><strong>Continue.dev</strong></summary>
142
+
143
+ Add to `~/.continue/config.yaml`:
144
+
145
+ ```yaml
146
+ mcpServers:
147
+ - name: backpack
148
+ command: npx
149
+ args:
150
+ - "backpack-ontology@latest"
151
+ ```
152
+ </details>
153
+
154
+ <details>
155
+ <summary><strong>Zed</strong></summary>
156
+
157
+ Add to `~/.config/zed/settings.json`:
158
+
159
+ ```json
160
+ {
161
+ "context_servers": {
162
+ "backpack": {
163
+ "command": "npx",
164
+ "args": ["backpack-ontology@latest"]
165
+ }
166
+ }
167
+ }
168
+ ```
169
+
170
+ Note: Zed uses `context_servers`, not `mcpServers`.
171
+ </details>
172
+
45
173
  ### Switching from Backpack Local to Backpack App
46
174
 
47
175
  Already using Backpack Local and want to move to the cloud? One command uploads everything:
@@ -92,6 +220,28 @@ Claude will open the graph visualizer so you can explore your knowledge visually
92
220
 
93
221
  You have one backpack. It goes everywhere with you. Inside it, you organize knowledge into **learning graphs**, each covering a different topic (clients, processes, compliance, etc.). Within each graph, information is stored as things connected by relationships. You don't need to think about the structure. Claude handles it automatically.
94
222
 
223
+ ## Token efficiency
224
+
225
+ Backpack uses progressive disclosure — it never loads the full graph into context. Each tool returns only what's needed.
226
+
227
+ Here's what a typical interaction looks like against a real 81-node graph (~12,000 tokens if loaded raw):
228
+
229
+ | What the AI does | Tokens returned | % of full graph |
230
+ |---|---|---|
231
+ | Describe structure | ~2,478 | 20% |
232
+ | Search for a topic (17 results) | ~429 | 3% |
233
+ | Get one node's full details | ~154 | 1% |
234
+
235
+ A describe → search → get_node interaction uses **~3,000 tokens** instead of ~12,000. For smaller graphs (13 nodes, ~1,700 tokens), the savings are smaller because the metadata is a larger fraction of total data.
236
+
237
+ Results vary by graph size and operation. Node lookups and searches consistently use under 5% of the full graph. Describe uses 20–67% depending on graph size. Run the benchmark on your own graphs:
238
+
239
+ ```bash
240
+ npx -p backpack-ontology@latest backpack-benchmark
241
+ ```
242
+
243
+ Across sessions, the real value is that the graph exists at all. It's built once and queried forever — every future conversation uses structured lookups instead of re-explaining context from scratch.
244
+
95
245
  ## Data and privacy
96
246
 
97
247
  **Backpack Local**: your data is stored as readable JSON files on your computer at `~/.local/share/backpack/ontologies/`. You can inspect, edit, back up, or version-control these files directly.
@@ -110,7 +260,7 @@ You have one backpack. It goes everywhere with you. Inside it, you organize know
110
260
  | `claude mcp add backpack-app ... --transport sse` | Connect to Backpack App cloud MCP |
111
261
  | `npx -p backpack-ontology@latest backpack-sync` | Upload local learning graphs to Backpack App |
112
262
  | `npx backpack-viewer` | Open the graph visualizer (http://localhost:5173) |
113
- | `npx -p backpack-ontology@latest backpack-init` | Reinstall auto-capture hooks if removed |
263
+ | `npx -p backpack-ontology@latest backpack-init` | Remove any leftover Backpack hooks from `.claude/settings.json` |
114
264
 
115
265
  ### Tools
116
266
 
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=backpack-benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backpack-benchmark.d.ts","sourceRoot":"","sources":["../../src/bin/backpack-benchmark.ts"],"names":[],"mappings":""}
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env node
2
+ import { Backpack } from "../core/backpack.js";
3
+ import { JsonFileBackend } from "../storage/json-file-backend.js";
4
+ import { estimateTokens } from "../core/token-estimate.js";
5
+ function pct(response, full) {
6
+ if (full <= 0)
7
+ return 0;
8
+ return Math.round((1 - response / full) * 100);
9
+ }
10
+ function median(nums) {
11
+ const sorted = [...nums].sort((a, b) => a - b);
12
+ const mid = Math.floor(sorted.length / 2);
13
+ return sorted.length % 2 ? sorted[mid] : Math.round((sorted[mid - 1] + sorted[mid]) / 2);
14
+ }
15
+ function mean(nums) {
16
+ return Math.round(nums.reduce((a, b) => a + b, 0) / nums.length);
17
+ }
18
+ function tok(response) {
19
+ return estimateTokens(JSON.stringify(JSON.parse(response), null, 2));
20
+ }
21
+ function pad(s, n, align = "left") {
22
+ return align === "right" ? s.padStart(n) : s.padEnd(n);
23
+ }
24
+ /** Pick a search term from the graph — first word of first node's first string property. */
25
+ function pickSearchTerm(backpackApi, data) {
26
+ for (const node of data.nodes) {
27
+ for (const val of Object.values(node.properties)) {
28
+ if (typeof val === "string" && val.length > 2) {
29
+ const word = val.split(/\s+/)[0].toLowerCase().replace(/[^a-z0-9]/g, "");
30
+ if (word.length >= 3)
31
+ return word;
32
+ }
33
+ }
34
+ }
35
+ return data.nodes[0]?.type?.toLowerCase() ?? "test";
36
+ }
37
+ /** Pick the median-connectivity node. */
38
+ function pickMedianNode(data) {
39
+ const edgeCounts = new Map();
40
+ for (const n of data.nodes)
41
+ edgeCounts.set(n.id, 0);
42
+ for (const e of data.edges) {
43
+ edgeCounts.set(e.sourceId, (edgeCounts.get(e.sourceId) ?? 0) + 1);
44
+ edgeCounts.set(e.targetId, (edgeCounts.get(e.targetId) ?? 0) + 1);
45
+ }
46
+ const sorted = [...edgeCounts.entries()].sort((a, b) => a[1] - b[1]);
47
+ return sorted[Math.floor(sorted.length / 2)][0];
48
+ }
49
+ async function run() {
50
+ const bp = new Backpack(new JsonFileBackend());
51
+ await bp.initialize();
52
+ const summaries = await bp.listOntologies();
53
+ const results = [];
54
+ let skipped = 0;
55
+ for (const summary of summaries) {
56
+ if (summary.nodeCount === 0) {
57
+ skipped++;
58
+ continue;
59
+ }
60
+ const name = summary.name;
61
+ process.stderr.write(` benchmarking ${name}...\n`);
62
+ try {
63
+ const graphTokens = await bp.getGraphTokens(name);
64
+ // Load raw data for search term and node selection
65
+ const graph = await bp.getGraph(name);
66
+ const data = graph.data;
67
+ // describe
68
+ const desc = await bp.describeOntology(name);
69
+ const descTokens = estimateTokens(JSON.stringify(desc, null, 2));
70
+ // node_types
71
+ const types = await bp.getNodeTypes(name);
72
+ const typesTokens = estimateTokens(JSON.stringify(types, null, 2));
73
+ // list_nodes (page of 20)
74
+ const list = await bp.listNodes(name, undefined, 20, 0);
75
+ const listTokens = estimateTokens(JSON.stringify(list, null, 2));
76
+ // search
77
+ const searchTerm = pickSearchTerm(bp, data);
78
+ const searchResults = await bp.searchNodes(name, searchTerm);
79
+ const searchTokens = estimateTokens(JSON.stringify(searchResults, null, 2));
80
+ // get_node (median connectivity node)
81
+ const nodeId = pickMedianNode(data);
82
+ const nodeResult = await bp.getNode(name, nodeId);
83
+ const nodeTokens = estimateTokens(JSON.stringify(nodeResult, null, 2));
84
+ // get_neighbors
85
+ const neighbors = await bp.getNeighbors(name, nodeId, undefined, "both", 1);
86
+ const neighborsTokens = estimateTokens(JSON.stringify(neighbors, null, 2));
87
+ results.push({
88
+ name,
89
+ nodes: summary.nodeCount,
90
+ edges: summary.edgeCount,
91
+ fullTokens: graphTokens,
92
+ describe: descTokens,
93
+ search: searchTokens,
94
+ searchResults: searchResults.length,
95
+ getNode: nodeTokens,
96
+ getNeighbors: neighborsTokens,
97
+ listNodes: listTokens,
98
+ nodeTypes: typesTokens,
99
+ });
100
+ }
101
+ catch (err) {
102
+ process.stderr.write(` skipped ${name}: ${err.message}\n`);
103
+ skipped++;
104
+ }
105
+ }
106
+ // Sort by node count
107
+ results.sort((a, b) => a.nodes - b.nodes);
108
+ console.log("");
109
+ console.log("Backpack Token Efficiency Benchmark");
110
+ console.log("====================================");
111
+ console.log(`Graphs: ${results.length} (skipped ${skipped} empty)`);
112
+ console.log("");
113
+ // --- Per-graph token counts ---
114
+ console.log("Per-graph token counts:");
115
+ const nameW = Math.max(12, ...results.map((r) => r.name.length)) + 2;
116
+ const hdr1 = [
117
+ pad("Graph", nameW),
118
+ pad("Nodes", 7, "right"),
119
+ pad("Edges", 7, "right"),
120
+ pad("Full", 8, "right"),
121
+ pad("describe", 10, "right"),
122
+ pad("search", 10, "right"),
123
+ pad("get_node", 10, "right"),
124
+ pad("neighbors", 11, "right"),
125
+ pad("list_20", 9, "right"),
126
+ pad("types", 8, "right"),
127
+ ].join(" ");
128
+ console.log(hdr1);
129
+ console.log("-".repeat(hdr1.length));
130
+ for (const r of results) {
131
+ console.log([
132
+ pad(r.name, nameW),
133
+ pad(String(r.nodes), 7, "right"),
134
+ pad(String(r.edges), 7, "right"),
135
+ pad(r.fullTokens.toLocaleString(), 8, "right"),
136
+ pad(r.describe.toLocaleString(), 10, "right"),
137
+ pad(`${r.search.toLocaleString()} (${r.searchResults})`, 10, "right"),
138
+ pad(r.getNode.toLocaleString(), 10, "right"),
139
+ pad(r.getNeighbors.toLocaleString(), 11, "right"),
140
+ pad(r.listNodes.toLocaleString(), 9, "right"),
141
+ pad(r.nodeTypes.toLocaleString(), 8, "right"),
142
+ ].join(" "));
143
+ }
144
+ console.log("");
145
+ // --- Per-graph reduction percentages ---
146
+ console.log("Token reduction vs. full graph:");
147
+ const hdr2 = [
148
+ pad("Graph", nameW),
149
+ pad("describe", 10, "right"),
150
+ pad("search", 8, "right"),
151
+ pad("get_node", 10, "right"),
152
+ pad("neighbors", 11, "right"),
153
+ pad("list_20", 9, "right"),
154
+ pad("types", 7, "right"),
155
+ ].join(" ");
156
+ console.log(hdr2);
157
+ console.log("-".repeat(hdr2.length));
158
+ for (const r of results) {
159
+ console.log([
160
+ pad(r.name, nameW),
161
+ pad(pct(r.describe, r.fullTokens) + "%", 10, "right"),
162
+ pad(pct(r.search, r.fullTokens) + "%", 8, "right"),
163
+ pad(pct(r.getNode, r.fullTokens) + "%", 10, "right"),
164
+ pad(pct(r.getNeighbors, r.fullTokens) + "%", 11, "right"),
165
+ pad(pct(r.listNodes, r.fullTokens) + "%", 9, "right"),
166
+ pad(pct(r.nodeTypes, r.fullTokens) + "%", 7, "right"),
167
+ ].join(" "));
168
+ }
169
+ console.log("");
170
+ // --- Aggregate stats ---
171
+ const ops = [
172
+ { name: "describe", values: results.map((r) => pct(r.describe, r.fullTokens)) },
173
+ { name: "search", values: results.map((r) => pct(r.search, r.fullTokens)) },
174
+ { name: "get_node", values: results.map((r) => pct(r.getNode, r.fullTokens)) },
175
+ { name: "neighbors", values: results.map((r) => pct(r.getNeighbors, r.fullTokens)) },
176
+ { name: "list_20", values: results.map((r) => pct(r.listNodes, r.fullTokens)) },
177
+ { name: "node_types", values: results.map((r) => pct(r.nodeTypes, r.fullTokens)) },
178
+ ];
179
+ console.log(`Aggregate (across ${results.length} graphs):`);
180
+ const hdr3 = [
181
+ pad("Operation", 12),
182
+ pad("Min", 5, "right"),
183
+ pad("Max", 5, "right"),
184
+ pad("Median", 8, "right"),
185
+ pad("Mean", 6, "right"),
186
+ ].join(" ");
187
+ console.log(hdr3);
188
+ console.log("-".repeat(hdr3.length));
189
+ for (const op of ops) {
190
+ const sorted = [...op.values].sort((a, b) => a - b);
191
+ console.log([
192
+ pad(op.name, 12),
193
+ pad(Math.min(...op.values) + "%", 5, "right"),
194
+ pad(Math.max(...op.values) + "%", 5, "right"),
195
+ pad(median(op.values) + "%", 8, "right"),
196
+ pad(mean(op.values) + "%", 6, "right"),
197
+ ].join(" "));
198
+ }
199
+ console.log("");
200
+ // --- Typical interaction ---
201
+ const typicalReductions = results.map((r) => {
202
+ const interaction = r.describe + r.search + r.getNode;
203
+ return pct(interaction, r.fullTokens);
204
+ });
205
+ console.log("Typical interaction (describe + search + get_node):");
206
+ console.log(` Median reduction: ${median(typicalReductions)}% | Range: ${Math.min(...typicalReductions)}%–${Math.max(...typicalReductions)}%`);
207
+ console.log("");
208
+ }
209
+ run().catch((err) => {
210
+ console.error("Benchmark failed:", err.message);
211
+ process.exit(1);
212
+ });
213
+ //# sourceMappingURL=backpack-benchmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backpack-benchmark.js","sourceRoot":"","sources":["../../src/bin/backpack-benchmark.ts"],"names":[],"mappings":"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"}
@@ -2,12 +2,12 @@
2
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
3
  import { createMcpServer } from "../mcp/server.js";
4
4
  import { loadConfig } from "../core/config.js";
5
- import { ensureHooksInstalled } from "../core/hooks.js";
5
+ import { removeBackpackHooks } from "../core/hooks.js";
6
6
  import { shutdown as shutdownTelemetry } from "../core/telemetry.js";
7
7
  async function main() {
8
8
  const config = await loadConfig();
9
- // Install hooks on first run (silent, non-blocking)
10
- ensureHooksInstalled().catch(() => { });
9
+ // Clean up any hooks installed by older versions (silent, non-blocking)
10
+ removeBackpackHooks().catch(() => { });
11
11
  const server = await createMcpServer({ mode: "local", dataDir: config.dataDir });
12
12
  const transport = new StdioServerTransport();
13
13
  await server.connect(transport);
@@ -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,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAErE,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,oDAAoD;IACpD,oBAAoB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEvC,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;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"}
package/dist/bin/init.js CHANGED
@@ -1,20 +1,17 @@
1
1
  #!/usr/bin/env node
2
- import { ensureHooksInstalled } from "../core/hooks.js";
2
+ import { removeBackpackHooks } from "../core/hooks.js";
3
3
  /**
4
- * `backpack-init` — manually install Backpack hooks.
5
- *
6
- * Note: Hooks are now installed automatically when the MCP server starts.
7
- * This command exists for users who want to explicitly reinstall or verify.
4
+ * `backpack-init` — clean up any Backpack hooks left in .claude/settings.json
5
+ * by older versions. Auto-installation of hooks is no longer supported; this
6
+ * command exists so users can explicitly run the cleanup without restarting
7
+ * their MCP server.
8
8
  */
9
9
  async function main() {
10
- await ensureHooksInstalled();
10
+ await removeBackpackHooks();
11
11
  console.log("");
12
- console.log(" Backpack hooks are installed.");
12
+ console.log(" Backpack hook cleanup complete.");
13
13
  console.log("");
14
- console.log(" What's enabled:");
15
- console.log(" - Update notifications: confirms when your backpack is updated.");
16
- console.log("");
17
- console.log(" To disable, remove the backpack hooks from .claude/settings.json");
14
+ console.log(" Backpack no longer installs hooks into .claude/settings.json.");
18
15
  console.log("");
19
16
  }
20
17
  main().catch((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;;GAKG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,oBAAoB,EAAE,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;;GAKG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,mBAAmB,EAAE,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,4 +1,7 @@
1
- import type { StorageBackend, Node, Edge, LearningGraphMetadata, LearningGraphSummary, NodeSummary, NodeTypeInfo, EdgeTypeInfo, ListNodesResult, GetNodeResult, NeighborResult, GraphStats, GraphAudit } from "./types.js";
1
+ import type { StorageBackend, Node, Edge, LearningGraphData, LearningGraphMetadata, LearningGraphSummary, NodeSummary, NodeTypeInfo, EdgeTypeInfo, ListNodesResult, GetNodeResult, NeighborResult, GraphStats, GraphAudit, GraphDegreeTable } from "./types.js";
2
+ import { type RoleAuditResult } from "./role-audit.js";
3
+ import { type DraftResult, type ProposedNode, type ProposedEdge } from "./draft.js";
4
+ import { planSummary, type NormalizationPlan } from "./normalize.js";
2
5
  /**
3
6
  * The main Backpack API. Composes a StorageBackend with the Graph engine.
4
7
  *
@@ -13,16 +16,44 @@ import type { StorageBackend, Node, Edge, LearningGraphMetadata, LearningGraphSu
13
16
  export declare class Backpack {
14
17
  private storage;
15
18
  private graphs;
19
+ private versions;
20
+ private tokenCache;
16
21
  constructor(storage: StorageBackend);
17
22
  initialize(): Promise<void>;
18
23
  /** Get or load a Graph for an ontology. Caches in memory. */
19
24
  private getGraph;
20
- /** Save the current state of an ontology back to storage. */
25
+ private getVersionIfSupported;
26
+ /**
27
+ * Save the current state of an ontology back to storage. Passes the
28
+ * version recorded at load time so the storage backend can detect
29
+ * concurrent modifications and reject the write. On conflict, the
30
+ * cache is invalidated and the underlying ConcurrencyError propagates.
31
+ */
21
32
  private persist;
33
+ /**
34
+ * Read the current lock heartbeat for a graph, if the storage backend
35
+ * supports it. Returns null when no fresh lock is held.
36
+ */
37
+ getLockInfo(name: string): Promise<unknown | null>;
22
38
  getTermsContext(ontologyName: string): Promise<string | null>;
23
39
  listOntologies(): Promise<LearningGraphSummary[]>;
40
+ ontologyExists(name: string): Promise<boolean>;
41
+ loadOntology(name: string): Promise<LearningGraphData>;
24
42
  createOntology(name: string, description: string): Promise<LearningGraphMetadata>;
25
43
  deleteOntology(name: string): Promise<void>;
44
+ /**
45
+ * Create a new ontology from a full LearningGraphData payload, preserving
46
+ * node and edge IDs. Used by remote graph import (where we want the local
47
+ * copy to have the same IDs as the source) and any other situation where
48
+ * a complete graph is constructed externally.
49
+ *
50
+ * Throws if an ontology with this name already exists.
51
+ */
52
+ createOntologyFromData(name: string, data: LearningGraphData): Promise<void>;
53
+ extractSubgraph(sourceName: string, nodeIds: string[], newName: string, description?: string): Promise<{
54
+ nodeCount: number;
55
+ edgeCount: number;
56
+ }>;
26
57
  renameOntology(oldName: string, newName: string): Promise<void>;
27
58
  describeOntology(name: string): Promise<{
28
59
  metadata: LearningGraphMetadata;
@@ -58,7 +89,43 @@ export declare class Backpack {
58
89
  edgeCount: number;
59
90
  edgeIds: string[];
60
91
  }>;
92
+ /**
93
+ * Validate a proposed batch of nodes and edges against the current
94
+ * graph state. Returns warnings (non-fatal — type drift, duplicates,
95
+ * three-role rule violations) and errors (fatal — broken edges,
96
+ * invalid property shapes).
97
+ *
98
+ * Pure check: does NOT modify the graph. Used by `backpack_import_nodes`
99
+ * for the always-on validation pass and by `dryRun` mode for explicit
100
+ * propose-only invocations.
101
+ */
102
+ validateImport(ontologyName: string, nodes: ProposedNode[], edges?: ProposedEdge[]): Promise<DraftResult>;
103
+ getGraphTokens(name: string): Promise<number>;
61
104
  auditOntology(name: string): Promise<GraphAudit>;
105
+ /**
106
+ * Plan a normalization pass: detect type drift clusters and pick
107
+ * the dominant variant in each. Returns the plan without applying it.
108
+ */
109
+ planNormalization(name: string): Promise<NormalizationPlan>;
110
+ /**
111
+ * Apply a normalization plan to the graph: rename non-canonical
112
+ * node and edge types to their canonical variants. Uses the existing
113
+ * persist path, which emits retype events under the hood.
114
+ *
115
+ * Returns the plan that was applied plus a summary of counts.
116
+ */
117
+ applyNormalization(name: string): Promise<{
118
+ plan: NormalizationPlan;
119
+ summary: ReturnType<typeof planSummary>;
120
+ }>;
121
+ /**
122
+ * Three-role-rule audit. Scans the graph for nodes that look like
123
+ * procedural content (should be a skill) or briefing content (should
124
+ * be in CLAUDE.md). Heuristic-based; conservative on purpose to avoid
125
+ * false positives.
126
+ */
127
+ auditRoles(name: string): Promise<RoleAuditResult>;
128
+ getDegreeTable(name: string): Promise<GraphDegreeTable>;
62
129
  connectEdges(ontologyName: string, edges: Array<{
63
130
  type: string;
64
131
  sourceId: string;
@@ -75,6 +142,15 @@ export declare class Backpack {
75
142
  createSnapshot(name: string, label?: string): Promise<number>;
76
143
  listSnapshots(name: string): Promise<any>;
77
144
  rollback(name: string, version: number): Promise<void>;
145
+ saveSnippet(name: string, snippet: {
146
+ label: string;
147
+ description?: string;
148
+ nodeIds: string[];
149
+ edgeIds: string[];
150
+ }): Promise<string>;
151
+ listSnippets(name: string): Promise<any>;
152
+ loadSnippet(name: string, snippetId: string): Promise<any>;
153
+ deleteSnippet(name: string, snippetId: string): Promise<void>;
78
154
  diffWithSnapshot(name: string, version: number): Promise<{
79
155
  nodesAdded: {
80
156
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"backpack.d.ts","sourceRoot":"","sources":["../../src/core/backpack.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,IAAI,EACJ,IAAI,EAEJ,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,UAAU,EACV,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;GAUG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAiC;gBAEnC,OAAO,EAAE,cAAc;IAI7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,6DAA6D;YAC/C,QAAQ;IAUtB,6DAA6D;YAC/C,OAAO;IASf,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAS7D,cAAc,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAIjD,cAAc,CAClB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC;IAO3B,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/D,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5C,QAAQ,EAAE,qBAAqB,CAAC;QAChC,SAAS,EAAE,YAAY,EAAE,CAAC;QAC1B,SAAS,EAAE,YAAY,EAAE,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,UAAU,CAAC;KACnB,CAAC;IAcI,SAAS,CACb,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC;IAKrB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAK3D,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,EAAE,CAAC;IAKnB,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKrE,OAAO,CACX,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC;IAOV,UAAU,CACd,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC;IAOV,UAAU,CACd,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAS9B,OAAO,CACX,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACvC,OAAO,CAAC,IAAI,CAAC;IAOV,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/D,YAAY,CAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,EAC5C,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC;IAOpB,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,EACnE,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;QACxB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,CAAC,GACD,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAY5E,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKhD,YAAY,CAChB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GACvG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAStC,YAAY,CAAC,IAAI,EAAE,MAAM;IAKzB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAKlE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAO7C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAO7C,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,aAAa,CAAC,IAAI,EAAE,MAAM;IAK1B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAMtC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;CAqBrD"}
1
+ {"version":3,"file":"backpack.d.ts","sourceRoot":"","sources":["../../src/core/backpack.ts"],"names":[],"mappings":"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"}