backpack-ontology 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,20 +1,16 @@
1
- # Backpack
1
+ # Backpack Ontology
2
2
 
3
- A persistent ontology engine for Claude Code. Gives your AI a structured, searchable knowledge graph it can build up over time — via MCP.
3
+ A persistent knowledge graph engine for Claude Code, delivered as an MCP server. Backpack gives AI agents structured, searchable memory that persists across sessions.
4
4
 
5
- The key design principle is **progressive discovery**: Backpack never dumps an entire knowledge graph into your context window. Instead, Claude browses the graph layer by layer — listing ontologies, inspecting node types, drilling into specific nodes, and traversing relationships — only pulling in what it needs.
6
-
7
- ## Quick Start
8
-
9
- ### Install
5
+ ## Installation
10
6
 
11
7
  ```bash
12
8
  npm install -g backpack-ontology
13
9
  ```
14
10
 
15
- ### Connect to Claude Code
11
+ ## Setup
16
12
 
17
- Add to your project's `.mcp.json`:
13
+ Add Backpack to your Claude Code project (`.mcp.json`):
18
14
 
19
15
  ```json
20
16
  {
@@ -27,51 +23,42 @@ Add to your project's `.mcp.json`:
27
23
  }
28
24
  ```
29
25
 
30
- Or add globally:
26
+ Or register it globally:
31
27
 
32
28
  ```bash
33
29
  claude mcp add backpack -- npx backpack-ontology
34
30
  ```
35
31
 
36
- Restart Claude Code. That's it.
37
-
38
- ### Use It
39
-
40
- Tell Claude to put something in the backpack:
41
-
42
- > "Create an ontology about our codebase architecture"
43
-
44
- > "Put a cooking ontology in the backpack with recipes and ingredients"
45
-
46
- > "Search the backpack for anything related to authentication"
47
-
48
- Claude will use the backpack tools to create ontologies, add nodes and edges, search, and traverse the knowledge graph — all without flooding your context window.
32
+ Restart Claude Code to activate.
49
33
 
50
- ## How It Works
34
+ ## Usage
51
35
 
52
- Backpack stores knowledge as **typed graphs**: nodes (entities) connected by edges (relationships).
36
+ Backpack organizes knowledge as typed graphs nodes (entities) connected by edges (relationships). There are no enforced schemas. The LLM decides what structure fits the domain.
53
37
 
54
38
  ```
55
39
  [Ingredient: garlic] --USED_IN--> [Recipe: Aglio e Olio]
56
- [Ingredient: olive oil] --USED_IN--> [Recipe: Aglio e Olio]
57
- [Recipe: Aglio e Olio] --CUISINE--> [Cuisine: Italian]
40
+ [Module: auth] --DEPENDS_ON--> [Module: database]
58
41
  ```
59
42
 
60
- There are no enforced schemas. Node types and property keys are freeform — the LLM decides what structure makes sense for the domain. Progressive discovery derives structure from actual data: "what types exist?" scans real nodes, not a predefined schema.
43
+ Tell Claude what to store:
44
+
45
+ > "Create an ontology about our codebase architecture"
46
+
47
+ > "Search the backpack for anything related to authentication"
48
+
49
+ > "Add the deployment pipeline to the infrastructure ontology"
61
50
 
62
51
  ### Progressive Discovery
63
52
 
64
- Tools are organized in layers, from broad to specific:
53
+ Tools are organized in layers so the context window stays clean. Claude starts broad and drills down — only pulling in what it needs.
65
54
 
66
- | Layer | Tools | What You Get |
67
- |-------|-------|-------------|
55
+ | Layer | Tools | Returns |
56
+ |-------|-------|---------|
68
57
  | **Discover** | `backpack_list`, `backpack_create`, `backpack_describe` | Ontology names, descriptions, type counts |
69
58
  | **Browse** | `backpack_list_nodes`, `backpack_node_types`, `backpack_search` | Paginated node summaries (id, type, label) |
70
59
  | **Inspect** | `backpack_get_node`, `backpack_get_neighbors` | Full node data, graph traversal |
71
60
  | **Mutate** | `backpack_add_node`, `backpack_update_node`, `backpack_add_edge`, ... | Create and modify data |
72
61
 
73
- Claude starts at the top and drills down. A `backpack_list` call returns a few lines. A `backpack_get_node` returns one node. The context window stays clean.
74
-
75
62
  ## Tools Reference
76
63
 
77
64
  ### Discovery
@@ -81,7 +68,7 @@ Claude starts at the top and drills down. A `backpack_list` call returns a few l
81
68
  | `backpack_list` | List all ontologies with names, descriptions, and summary counts |
82
69
  | `backpack_create` | Create a new empty ontology |
83
70
  | `backpack_delete` | Permanently delete an ontology and all its data |
84
- | `backpack_describe` | Get ontology structure: node types, edge types, counts (no instance data) |
71
+ | `backpack_describe` | Inspect ontology structure: node types, edge types, counts |
85
72
 
86
73
  ### Browsing
87
74
 
@@ -95,140 +82,122 @@ Claude starts at the top and drills down. A `backpack_list` call returns a few l
95
82
 
96
83
  | Tool | Description |
97
84
  |------|-------------|
98
- | `backpack_get_node` | Full node with all properties + connected edge summaries |
85
+ | `backpack_get_node` | Full node with all properties and connected edge summaries |
99
86
  | `backpack_get_neighbors` | BFS graph traversal from a node (max depth 3) |
100
87
 
101
88
  ### Mutation
102
89
 
103
90
  | Tool | Description |
104
91
  |------|-------------|
105
- | `backpack_add_node` | Add a node with freeform type and properties |
92
+ | `backpack_add_node` | Add a node with a freeform type and properties |
106
93
  | `backpack_update_node` | Merge new properties into an existing node |
107
94
  | `backpack_remove_node` | Remove a node and cascade-delete its edges |
108
95
  | `backpack_add_edge` | Create a typed relationship between two nodes |
109
96
  | `backpack_remove_edge` | Remove a relationship |
110
- | `backpack_import_nodes` | Bulk-add multiple nodes at once |
97
+ | `backpack_import_nodes` | Bulk-add multiple nodes in a single operation |
111
98
 
112
- ## Data Storage
99
+ ## Programmatic API
113
100
 
114
- Backpack follows the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/latest/):
101
+ The core engine has no MCP dependency and can be used as a library:
115
102
 
116
- ```
117
- ~/.config/backpack/ # Configuration
118
- └── config.json # Optional config overrides
119
-
120
- ~/.local/share/backpack/ # Data
121
- └── ontologies/
122
- ├── cooking/
123
- │ └── ontology.json # One file per ontology
124
- └── codebase-arch/
125
- └── ontology.json
126
- ```
103
+ ```typescript
104
+ import { Backpack, JsonFileBackend } from "backpack-ontology";
127
105
 
128
- Ontology files are human-readable JSON. You can inspect, edit, back up, or version-control them directly.
106
+ const backpack = new Backpack(new JsonFileBackend());
107
+ await backpack.initialize();
129
108
 
130
- ### Environment Variables
109
+ await backpack.createOntology("my-graph", "A knowledge graph");
110
+ const node = await backpack.addNode("my-graph", "Person", { name: "Alice" });
111
+ await backpack.addEdge("my-graph", "KNOWS", node.id, otherNodeId);
131
112
 
132
- | Variable | Effect |
133
- |----------|--------|
134
- | `XDG_CONFIG_HOME` | Override config location (default: `~/.config`) |
135
- | `XDG_DATA_HOME` | Override data location (default: `~/.local/share`) |
136
- | `BACKPACK_DIR` | Override everything — config goes to `$BACKPACK_DIR/config`, data to `$BACKPACK_DIR/data` |
113
+ // Search across all node properties (case-insensitive)
114
+ const results = await backpack.searchNodes("my-graph", "alice");
137
115
 
138
- ### Config File
116
+ // BFS traversal from a node (depth 1–3)
117
+ const neighbors = await backpack.getNeighbors("my-graph", node.id, undefined, "both", 2);
118
+ ```
139
119
 
140
- `~/.config/backpack/config.json` (optional):
120
+ ### Pluggable Storage
141
121
 
142
- ```json
143
- {
144
- "dataDir": "/custom/path/to/ontologies"
122
+ The `StorageBackend` interface allows custom persistence implementations:
123
+
124
+ ```typescript
125
+ import { Backpack, StorageBackend } from "backpack-ontology";
126
+
127
+ class SqliteBackend implements StorageBackend {
128
+ // initialize, listOntologies, loadOntology, saveOntology,
129
+ // createOntology, deleteOntology, ontologyExists
145
130
  }
131
+
132
+ const backpack = new Backpack(new SqliteBackend());
146
133
  ```
147
134
 
148
- ## Architecture
135
+ ## Data Storage
149
136
 
150
- Backpack has clean separation of concerns:
137
+ Backpack follows the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/latest/):
151
138
 
152
139
  ```
153
- ┌─────────────────────────────────────────┐
154
- │ MCP Layer (src/mcp/) │ Thin adapter — registers tools,
155
- 16 tools organized by discovery layer │ delegates to Backpack API
156
- ├─────────────────────────────────────────┤
157
- │ Backpack API (src/core/backpack.ts) │ Business logic — composes
158
- │ The single entry point for all ops │ Graph + StorageBackend
159
- ├─────────────┬───────────────────────────┤
160
- │ Graph │ StorageBackend │
161
- │ In-memory │ (pluggable interface) │
162
- │ operations │ │ │
163
- │ │ JsonFileBackend │ Default: JSON on disk
164
- │ │ (future: SQLite) │
165
- │ │ (future: Remote API) │
166
- └─────────────┴───────────────────────────┘
140
+ ~/.local/share/backpack/ontologies/
141
+ ├── cooking/
142
+ └── ontology.json
143
+ └── codebase-arch/
144
+ └── ontology.json
167
145
  ```
168
146
 
169
- The core engine (`src/core/`) has zero knowledge of MCP. You can use it programmatically:
147
+ Ontology files are human-readable JSON. They can be inspected, edited, backed up, or version-controlled directly.
170
148
 
171
- ```typescript
172
- import { Backpack, JsonFileBackend } from "backpack-ontology";
149
+ | Variable | Effect |
150
+ |----------|--------|
151
+ | `XDG_DATA_HOME` | Override data location (default: `~/.local/share`) |
152
+ | `XDG_CONFIG_HOME` | Override config location (default: `~/.config`) |
153
+ | `BACKPACK_DIR` | Override both — config at `$BACKPACK_DIR/config`, data at `$BACKPACK_DIR/data` |
173
154
 
174
- const backpack = new Backpack(new JsonFileBackend());
175
- await backpack.initialize();
155
+ ## Telemetry
176
156
 
177
- await backpack.createOntology("my-graph", "A knowledge graph");
178
- await backpack.addNode("my-graph", "Person", { name: "Alice" });
179
- ```
157
+ Backpack collects anonymous usage telemetry to improve the product. No personal data, ontology content, or tool arguments are ever collected.
180
158
 
181
- ### Pluggable Storage
159
+ **What is collected:**
160
+ - Tool call counts (which tools are used, not what data is passed)
161
+ - Session duration
162
+ - Aggregate ontology statistics (total node/edge counts, not names or content)
163
+ - Runtime environment (Node.js version, OS, platform)
182
164
 
183
- The `StorageBackend` interface lets you swap storage without touching any other code:
165
+ **What is never collected:**
166
+ - Ontology names, descriptions, or content
167
+ - Node or edge properties
168
+ - File paths or user identifiers
169
+ - Tool arguments or query strings
184
170
 
185
- ```typescript
186
- import { Backpack, StorageBackend } from "backpack-ontology";
171
+ **To opt out**, use any of the following:
187
172
 
188
- class MyCustomBackend implements StorageBackend {
189
- // Implement: initialize, listOntologies, loadOntology,
190
- // saveOntology, createOntology, deleteOntology, ontologyExists
191
- }
173
+ ```bash
174
+ # Environment variable (standard)
175
+ export DO_NOT_TRACK=1
192
176
 
193
- const backpack = new Backpack(new MyCustomBackend());
177
+ # Backpack-specific environment variable
178
+ export BACKPACK_TELEMETRY_DISABLED=1
194
179
  ```
195
180
 
196
- ## Development
181
+ Or add to `~/.config/backpack/config.json`:
197
182
 
198
- ```bash
199
- git clone https://github.com/noahirzinger/backpack.git
200
- cd backpack
201
- npm install
202
- npm run build # Compile TypeScript
203
- npm test # Run all tests (40 tests)
204
- npm run dev # Run MCP server in dev mode (via tsx)
183
+ ```json
184
+ {
185
+ "telemetry": false
186
+ }
205
187
  ```
206
188
 
207
- ### Project Structure
189
+ ## Visualization
208
190
 
209
- ```
210
- src/
211
- ├── core/ # Pure engine — no MCP
212
- │ ├── types.ts # All interfaces (Node, Edge, StorageBackend, etc.)
213
- │ ├── graph.ts # In-memory graph operations
214
- │ ├── backpack.ts # Public API composing Graph + Storage
215
- │ ├── paths.ts # XDG directory resolution
216
- │ ├── config.ts # Config loading
217
- │ └── ids.ts # Prefixed nanoid generation
218
- ├── storage/
219
- │ └── json-file-backend.ts # Default storage: JSON files on disk
220
- ├── mcp/
221
- │ ├── server.ts # MCP server factory
222
- │ └── tools/ # Tool registrations (ontology, node, edge, bulk)
223
- ├── index.ts # Library exports
224
- └── bin/
225
- └── backpack.ts # CLI entry point
226
- ```
191
+ Use [backpack-viewer](https://www.npmjs.com/package/backpack-viewer) to visualize ontologies in a web-based graph explorer with force-directed layout and live reload.
192
+
193
+ ## Support
194
+
195
+ For questions, feedback, or sponsorship inquiries: **support@backpackontology.com**
227
196
 
228
197
  ## License
229
198
 
230
- [Apache 2.0](./LICENSE) — use it freely, build on it, contribute back.
199
+ Licensed under the [Apache License, Version 2.0](./LICENSE).
231
200
 
232
201
  ## Contributing
233
202
 
234
- Issues and PRs welcome. If you build something cool with Backpack, let us know.
203
+ Issues and pull requests are welcome on [GitHub](https://github.com/noahirzinger/backpack-ontology).
@@ -3,6 +3,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
3
3
  import { createMcpServer } from "../mcp/server.js";
4
4
  import { JsonFileBackend } from "../storage/json-file-backend.js";
5
5
  import { loadConfig } from "../core/config.js";
6
+ import { shutdown as shutdownTelemetry } from "../core/telemetry.js";
6
7
  async function main() {
7
8
  const config = await loadConfig();
8
9
  // Config dataDir overrides the default XDG path
@@ -13,6 +14,13 @@ async function main() {
13
14
  // Log to stderr because stdout is reserved for the MCP protocol
14
15
  console.error("Backpack MCP server running on stdio");
15
16
  }
17
+ // Graceful shutdown — flush telemetry before exit
18
+ async function gracefulShutdown() {
19
+ await shutdownTelemetry();
20
+ process.exit(0);
21
+ }
22
+ process.on("SIGINT", gracefulShutdown);
23
+ process.on("SIGTERM", gracefulShutdown);
16
24
  main().catch((error) => {
17
25
  console.error("Fatal error:", error);
18
26
  process.exit(1);
@@ -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,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,gDAAgD;IAChD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,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,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,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAErE,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,gDAAgD;IAChD,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC9C,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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":""}
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env node
2
+ import * as fs from "node:fs/promises";
3
+ import * as path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ /** Check if a hook rule array already contains a backpack-originated rule. */
6
+ function hasBackpackRule(rules) {
7
+ return rules.some((r) => r.hooks?.some((h) => (h.prompt && h.prompt.includes("Backpack")) ||
8
+ (h.command && h.command.includes("backpack"))) ?? false);
9
+ }
10
+ async function main() {
11
+ const projectDir = process.cwd();
12
+ const claudeDir = path.join(projectDir, ".claude");
13
+ const settingsPath = path.join(claudeDir, "settings.json");
14
+ // Load the hooks configuration shipped with backpack-ontology
15
+ const thisFile = fileURLToPath(import.meta.url);
16
+ const packageRoot = path.resolve(path.dirname(thisFile), "..", "..");
17
+ const hooksJsonPath = path.join(packageRoot, "hooks", "hooks.json");
18
+ let hooksConfig;
19
+ try {
20
+ const raw = await fs.readFile(hooksJsonPath, "utf-8");
21
+ hooksConfig = JSON.parse(raw);
22
+ }
23
+ catch {
24
+ console.error("Error: could not read hooks configuration from backpack-ontology package.");
25
+ console.error(`Expected at: ${hooksJsonPath}`);
26
+ process.exit(1);
27
+ }
28
+ // Ensure .claude directory exists
29
+ await fs.mkdir(claudeDir, { recursive: true });
30
+ // Read existing settings or start fresh
31
+ let settings = {};
32
+ try {
33
+ const raw = await fs.readFile(settingsPath, "utf-8");
34
+ settings = JSON.parse(raw);
35
+ }
36
+ catch {
37
+ // File doesn't exist or isn't valid JSON — start fresh
38
+ }
39
+ // Merge hooks — backpack hooks are added alongside any existing hooks
40
+ if (!settings.hooks) {
41
+ settings.hooks = {};
42
+ }
43
+ const existingHooks = settings.hooks;
44
+ const newHooks = (hooksConfig.hooks ?? {});
45
+ let alreadyConfigured = false;
46
+ for (const [event, rules] of Object.entries(newHooks)) {
47
+ if (!existingHooks[event]) {
48
+ existingHooks[event] = rules;
49
+ }
50
+ else {
51
+ const existing = existingHooks[event];
52
+ if (Array.isArray(existing) && hasBackpackRule(existing)) {
53
+ // Backpack hooks already present for this event — skip to avoid duplicates
54
+ alreadyConfigured = true;
55
+ continue;
56
+ }
57
+ // Append backpack hook rules to existing event rules
58
+ if (Array.isArray(existing) && Array.isArray(rules)) {
59
+ existingHooks[event] = [...existing, ...rules];
60
+ }
61
+ else {
62
+ existingHooks[event] = rules;
63
+ }
64
+ }
65
+ }
66
+ if (alreadyConfigured) {
67
+ console.log("");
68
+ console.log(" Backpack hooks are already configured in: " + settingsPath);
69
+ console.log(" No changes made. To reconfigure, remove the existing backpack hooks first.");
70
+ console.log("");
71
+ return;
72
+ }
73
+ settings.hooks = existingHooks;
74
+ // Write settings
75
+ await fs.writeFile(settingsPath, JSON.stringify(settings, null, 2) + "\n", "utf-8");
76
+ console.log("");
77
+ console.log(" Backpack hooks configured successfully!");
78
+ console.log("");
79
+ console.log(" Enabled in: " + settingsPath);
80
+ console.log("");
81
+ console.log(" What's enabled:");
82
+ console.log(" - Auto-capture: a background agent reviews your Claude conversations");
83
+ console.log(" and automatically builds knowledge graphs from meaningful discussions.");
84
+ console.log(" - Viewer suggestions: after ontology updates, you'll be reminded to");
85
+ console.log(" visualize your knowledge graph with `npx backpack-viewer`.");
86
+ console.log("");
87
+ console.log(" To disable, remove the backpack hooks from .claude/settings.json");
88
+ console.log("");
89
+ }
90
+ main().catch((error) => {
91
+ console.error("Error:", error.message ?? error);
92
+ process.exit(1);
93
+ });
94
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Anonymous usage telemetry for Backpack.
3
+ *
4
+ * Collects tool call counts, session duration, and aggregate ontology stats.
5
+ * No personal data, ontology content, or tool arguments are ever collected.
6
+ *
7
+ * Opt out:
8
+ * - Set DO_NOT_TRACK=1
9
+ * - Set BACKPACK_TELEMETRY_DISABLED=1
10
+ * - Add {"telemetry": false} to ~/.config/backpack/config.json
11
+ */
12
+ import type { Backpack } from "./backpack.js";
13
+ /** Initialize telemetry. Call once at server startup. */
14
+ export declare function initTelemetry(backpack?: Backpack): Promise<void>;
15
+ /** Track a tool call. Synchronous — never throws, never blocks. */
16
+ export declare function trackEvent(event: string, properties?: Record<string, unknown>): void;
17
+ /** Flush the event queue to the ingest endpoint. */
18
+ export declare function flush(): Promise<void>;
19
+ /** Gather final stats and flush. Call on server shutdown. */
20
+ export declare function shutdown(): Promise<void>;
21
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/core/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAgH9C,yDAAyD;AACzD,wBAAsB,aAAa,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BtE;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACvC,IAAI,CAQN;AAED,oDAAoD;AACpD,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB3C;AAED,6DAA6D;AAC7D,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAsC9C"}
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Anonymous usage telemetry for Backpack.
3
+ *
4
+ * Collects tool call counts, session duration, and aggregate ontology stats.
5
+ * No personal data, ontology content, or tool arguments are ever collected.
6
+ *
7
+ * Opt out:
8
+ * - Set DO_NOT_TRACK=1
9
+ * - Set BACKPACK_TELEMETRY_DISABLED=1
10
+ * - Add {"telemetry": false} to ~/.config/backpack/config.json
11
+ */
12
+ import * as crypto from "node:crypto";
13
+ import * as fs from "node:fs/promises";
14
+ import * as os from "node:os";
15
+ import * as path from "node:path";
16
+ import { configDir } from "./paths.js";
17
+ const ENDPOINT = process.env.BACKPACK_TELEMETRY_URL ?? "https://diagnostics.backpackontology.com/api/telemetry";
18
+ const FLUSH_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
19
+ const VERSION = "0.1.3";
20
+ // Module-level state
21
+ const sessionId = crypto.randomUUID();
22
+ const sessionStartTime = Date.now();
23
+ let machineId = null;
24
+ let eventQueue = [];
25
+ let toolCallCount = 0;
26
+ let flushTimer = null;
27
+ let disabled = null;
28
+ let backpackRef = null;
29
+ let initialized = false;
30
+ async function isDisabled() {
31
+ if (disabled !== null)
32
+ return disabled;
33
+ if (process.env.DO_NOT_TRACK === "1") {
34
+ disabled = true;
35
+ return true;
36
+ }
37
+ if (process.env.BACKPACK_TELEMETRY_DISABLED === "1") {
38
+ disabled = true;
39
+ return true;
40
+ }
41
+ try {
42
+ const configPath = path.join(configDir(), "config.json");
43
+ const raw = await fs.readFile(configPath, "utf-8");
44
+ const config = JSON.parse(raw);
45
+ if (config.telemetry === false) {
46
+ disabled = true;
47
+ return true;
48
+ }
49
+ }
50
+ catch {
51
+ // Config file doesn't exist or is invalid — telemetry stays enabled
52
+ }
53
+ disabled = false;
54
+ return false;
55
+ }
56
+ async function getMachineId() {
57
+ if (machineId)
58
+ return machineId;
59
+ const idPath = path.join(configDir(), "machine-id");
60
+ let isNew = false;
61
+ try {
62
+ machineId = (await fs.readFile(idPath, "utf-8")).trim();
63
+ }
64
+ catch {
65
+ // File doesn't exist — generate a new ID
66
+ const hash = crypto
67
+ .createHash("sha256")
68
+ .update(os.hostname() + os.platform())
69
+ .digest("hex")
70
+ .slice(0, 16);
71
+ await fs.mkdir(configDir(), { recursive: true });
72
+ await fs.writeFile(idPath, hash, "utf-8");
73
+ machineId = hash;
74
+ isNew = true;
75
+ }
76
+ if (isNew) {
77
+ showFirstRunNotice();
78
+ }
79
+ return machineId;
80
+ }
81
+ function showFirstRunNotice() {
82
+ console.error([
83
+ "",
84
+ "Backpack collects anonymous usage telemetry to improve the product.",
85
+ "Only tool names, session duration, and aggregate stats are collected.",
86
+ "No personal data, ontology content, or tool arguments are sent.",
87
+ "",
88
+ "To opt out:",
89
+ " export BACKPACK_TELEMETRY_DISABLED=1",
90
+ ' or add {"telemetry": false} to ~/.config/backpack/config.json',
91
+ "",
92
+ ].join("\n"));
93
+ }
94
+ function enqueue(event, properties) {
95
+ if (!machineId)
96
+ return;
97
+ eventQueue.push({
98
+ event,
99
+ machineId,
100
+ sessionId,
101
+ timestamp: new Date().toISOString(),
102
+ properties,
103
+ });
104
+ }
105
+ /** Initialize telemetry. Call once at server startup. */
106
+ export async function initTelemetry(backpack) {
107
+ try {
108
+ if (await isDisabled())
109
+ return;
110
+ backpackRef = backpack ?? null;
111
+ await getMachineId();
112
+ initialized = true;
113
+ enqueue("session_start", {
114
+ nodeVersion: process.version,
115
+ os: os.platform(),
116
+ arch: os.arch(),
117
+ backpackVersion: VERSION,
118
+ });
119
+ // Flush immediately so session_start is sent right away
120
+ flush().catch(() => { });
121
+ flushTimer = setInterval(() => {
122
+ flush().catch(() => { });
123
+ }, FLUSH_INTERVAL_MS);
124
+ flushTimer.unref();
125
+ process.on("beforeExit", () => {
126
+ shutdown().catch(() => { });
127
+ });
128
+ }
129
+ catch {
130
+ // Telemetry init failed — continue silently
131
+ }
132
+ }
133
+ /** Track a tool call. Synchronous — never throws, never blocks. */
134
+ export function trackEvent(event, properties = {}) {
135
+ try {
136
+ if (disabled || !initialized)
137
+ return;
138
+ if (event === "tool_call")
139
+ toolCallCount++;
140
+ enqueue(event, properties);
141
+ }
142
+ catch {
143
+ // Silently ignore
144
+ }
145
+ }
146
+ /** Flush the event queue to the ingest endpoint. */
147
+ export async function flush() {
148
+ try {
149
+ if (eventQueue.length === 0)
150
+ return;
151
+ const batch = eventQueue;
152
+ eventQueue = [];
153
+ await fetch(ENDPOINT, {
154
+ method: "POST",
155
+ headers: { "Content-Type": "application/json" },
156
+ body: JSON.stringify({ events: batch }),
157
+ signal: AbortSignal.timeout(5000),
158
+ });
159
+ }
160
+ catch {
161
+ // Failed to send — drop the batch
162
+ }
163
+ }
164
+ /** Gather final stats and flush. Call on server shutdown. */
165
+ export async function shutdown() {
166
+ try {
167
+ if (disabled || !initialized)
168
+ return;
169
+ if (flushTimer) {
170
+ clearInterval(flushTimer);
171
+ flushTimer = null;
172
+ }
173
+ // Gather aggregate ontology stats
174
+ if (backpackRef) {
175
+ try {
176
+ const ontologies = await backpackRef.listOntologies();
177
+ let totalNodes = 0;
178
+ let totalEdges = 0;
179
+ for (const o of ontologies) {
180
+ totalNodes += o.nodeCount;
181
+ totalEdges += o.edgeCount;
182
+ }
183
+ enqueue("ontology_stats", {
184
+ ontologyCount: ontologies.length,
185
+ totalNodes,
186
+ totalEdges,
187
+ });
188
+ }
189
+ catch {
190
+ // Can't gather stats — skip
191
+ }
192
+ }
193
+ enqueue("session_end", {
194
+ durationMs: Date.now() - sessionStartTime,
195
+ toolCalls: toolCallCount,
196
+ });
197
+ await flush();
198
+ }
199
+ catch {
200
+ // Silently ignore
201
+ }
202
+ }
203
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/core/telemetry.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,5 +5,6 @@ export { loadConfig } from "./core/config.js";
5
5
  export type { BackpackConfig } from "./core/config.js";
6
6
  export type { Node, Edge, OntologyData, OntologyMetadata, OntologySummary, NodeSummary, EdgeSummary, NodeTypeInfo, EdgeTypeInfo, ListNodesResult, GetNodeResult, NeighborResult, NeighborEntry, StorageBackend, } from "./core/types.js";
7
7
  export { JsonFileBackend } from "./storage/json-file-backend.js";
8
+ export { initTelemetry, trackEvent, shutdown as shutdownTelemetry } from "./core/telemetry.js";
8
9
  export { createMcpServer } from "./mcp/server.js";
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,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;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EACV,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,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;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EACV,IAAI,EACJ,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG/F,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,8 @@ export { configDir, dataDir, configFile } from "./core/paths.js";
6
6
  export { loadConfig } from "./core/config.js";
7
7
  // Storage backends
8
8
  export { JsonFileBackend } from "./storage/json-file-backend.js";
9
+ // Telemetry
10
+ export { initTelemetry, trackEvent, shutdown as shutdownTelemetry } from "./core/telemetry.js";
9
11
  // MCP server factory
10
12
  export { createMcpServer } from "./mcp/server.js";
11
13
  //# 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;AAmB9C,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,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;AAmB9C,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOvD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,SAAS,CAAC,CAiBpB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAQvD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,SAAS,CAAC,CA+BpB"}
@@ -1,6 +1,7 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { Backpack } from "../core/backpack.js";
3
3
  import { JsonFileBackend } from "../storage/json-file-backend.js";
4
+ import { initTelemetry } from "../core/telemetry.js";
4
5
  import { registerOntologyTools } from "./tools/ontology-tools.js";
5
6
  import { registerNodeTools } from "./tools/node-tools.js";
6
7
  import { registerEdgeTools } from "./tools/edge-tools.js";
@@ -15,9 +16,22 @@ export async function createMcpServer(storage) {
15
16
  const backend = storage ?? new JsonFileBackend();
16
17
  const backpack = new Backpack(backend);
17
18
  await backpack.initialize();
19
+ // Initialize telemetry (non-blocking, fails silently)
20
+ try {
21
+ await initTelemetry(backpack);
22
+ }
23
+ catch { /* noop */ }
18
24
  const server = new McpServer({
19
25
  name: "backpack",
20
- version: "0.1.0",
26
+ version: "0.2.0",
27
+ }, {
28
+ instructions: `Backpack is a persistent knowledge graph that remembers what matters across conversations.
29
+
30
+ When you learn something meaningful — a business relationship, a technical decision, a process, a domain concept — consider adding it to backpack. Use backpack_list to see what ontologies exist and backpack_describe to understand their structure before adding to them. Create a new ontology when the topic is distinct from existing ones.
31
+
32
+ After updating an ontology, let the user know they can visualize their knowledge graph by running: npx backpack-viewer (opens http://localhost:5173)
33
+
34
+ Be selective — not every conversation needs to be captured. Focus on knowledge with lasting value: relationships, decisions, architecture, processes, domain concepts, conventions.`,
21
35
  });
22
36
  // Register all tool groups
23
37
  registerOntologyTools(server, backpack);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAwB;IAExB,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI,eAAe,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAE5B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEpC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAwB;IAExB,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI,eAAe,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAE5B,sDAAsD;IACtD,IAAI,CAAC;QAAC,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;;;;;;oLAMgK;KAC/K,CACF,CAAC;IAEF,2BAA2B;IAC3B,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEpC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bulk-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/bulk-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CAgDN"}
1
+ {"version":3,"file":"bulk-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/bulk-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CAiDN"}
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { trackEvent } from "../../core/telemetry.js";
2
3
  export function registerBulkTools(server, backpack) {
3
4
  server.registerTool("backpack_import_nodes", {
4
5
  title: "Import Nodes",
@@ -17,6 +18,7 @@ export function registerBulkTools(server, backpack) {
17
18
  }, async ({ ontology, nodes }) => {
18
19
  try {
19
20
  const result = await backpack.importNodes(ontology, nodes);
21
+ trackEvent("tool_call", { tool: "backpack_import_nodes" });
20
22
  return {
21
23
  content: [
22
24
  {
@@ -1 +1 @@
1
- {"version":3,"file":"bulk-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/bulk-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,QAAkB;IAElB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,wFAAwF;QAC1F,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACrD,KAAK,EAAE,CAAC;iBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACtC,UAAU,EAAE,CAAC;qBACV,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;qBAC/B,QAAQ,CAAC,8BAA8B,CAAC;aAC5C,CAAC,CACH;iBACA,QAAQ,CAAC,0BAA0B,CAAC;SACxC;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CACvC,QAAQ,EACR,KAGE,CACH,CAAC;YACF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,YAAY,MAAM,CAAC,KAAK,mBAAmB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBAC9E;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"bulk-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/bulk-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,QAAkB;IAElB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,wFAAwF;QAC1F,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACrD,KAAK,EAAE,CAAC;iBACL,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;gBACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACtC,UAAU,EAAE,CAAC;qBACV,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;qBAC/B,QAAQ,CAAC,8BAA8B,CAAC;aAC5C,CAAC,CACH;iBACA,QAAQ,CAAC,0BAA0B,CAAC;SACxC;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CACvC,QAAQ,EACR,KAGE,CACH,CAAC;YACF,UAAU,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAC3D,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,YAAY,MAAM,CAAC,KAAK,mBAAmB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBAC9E;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"edge-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/edge-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CAkIN"}
1
+ {"version":3,"file":"edge-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/edge-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CAqIN"}
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { trackEvent } from "../../core/telemetry.js";
2
3
  export function registerEdgeTools(server, backpack) {
3
4
  server.registerTool("backpack_add_edge", {
4
5
  title: "Add Edge",
@@ -18,6 +19,7 @@ export function registerEdgeTools(server, backpack) {
18
19
  }, async ({ ontology, type, sourceId, targetId, properties }) => {
19
20
  try {
20
21
  const edge = await backpack.addEdge(ontology, type, sourceId, targetId, properties ?? {});
22
+ trackEvent("tool_call", { tool: "backpack_add_edge" });
21
23
  return {
22
24
  content: [
23
25
  { type: "text", text: JSON.stringify(edge, null, 2) },
@@ -44,6 +46,7 @@ export function registerEdgeTools(server, backpack) {
44
46
  }, async ({ ontology, edgeId }) => {
45
47
  try {
46
48
  await backpack.removeEdge(ontology, edgeId);
49
+ trackEvent("tool_call", { tool: "backpack_remove_edge" });
47
50
  return {
48
51
  content: [
49
52
  { type: "text", text: `Removed edge ${edgeId}.` },
@@ -85,6 +88,7 @@ export function registerEdgeTools(server, backpack) {
85
88
  }, async ({ ontology, nodeId, edgeType, direction, depth }) => {
86
89
  try {
87
90
  const result = await backpack.getNeighbors(ontology, nodeId, edgeType, direction, depth);
91
+ trackEvent("tool_call", { tool: "backpack_get_neighbors" });
88
92
  return {
89
93
  content: [
90
94
  { type: "text", text: JSON.stringify(result, null, 2) },
@@ -1 +1 @@
1
- {"version":3,"file":"edge-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/edge-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edge-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/edge-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"node-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/node-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CAsQN"}
1
+ {"version":3,"file":"node-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/node-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CA6QN"}
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { trackEvent } from "../../core/telemetry.js";
2
3
  export function registerNodeTools(server, backpack) {
3
4
  server.registerTool("backpack_node_types", {
4
5
  title: "List Node Types",
@@ -10,6 +11,7 @@ export function registerNodeTools(server, backpack) {
10
11
  }, async ({ ontology }) => {
11
12
  try {
12
13
  const types = await backpack.getNodeTypes(ontology);
14
+ trackEvent("tool_call", { tool: "backpack_node_types" });
13
15
  return {
14
16
  content: [
15
17
  { type: "text", text: JSON.stringify(types, null, 2) },
@@ -51,6 +53,7 @@ export function registerNodeTools(server, backpack) {
51
53
  }, async ({ ontology, type, limit, offset }) => {
52
54
  try {
53
55
  const result = await backpack.listNodes(ontology, type, limit, offset);
56
+ trackEvent("tool_call", { tool: "backpack_list_nodes" });
54
57
  return {
55
58
  content: [
56
59
  { type: "text", text: JSON.stringify(result, null, 2) },
@@ -81,6 +84,7 @@ export function registerNodeTools(server, backpack) {
81
84
  }, async ({ ontology, query, type }) => {
82
85
  try {
83
86
  const results = await backpack.searchNodes(ontology, query, type);
87
+ trackEvent("tool_call", { tool: "backpack_search" });
84
88
  return {
85
89
  content: [
86
90
  {
@@ -112,6 +116,7 @@ export function registerNodeTools(server, backpack) {
112
116
  }, async ({ ontology, nodeId }) => {
113
117
  try {
114
118
  const result = await backpack.getNode(ontology, nodeId);
119
+ trackEvent("tool_call", { tool: "backpack_get_node" });
115
120
  return {
116
121
  content: [
117
122
  { type: "text", text: JSON.stringify(result, null, 2) },
@@ -142,6 +147,7 @@ export function registerNodeTools(server, backpack) {
142
147
  }, async ({ ontology, type, properties }) => {
143
148
  try {
144
149
  const node = await backpack.addNode(ontology, type, properties);
150
+ trackEvent("tool_call", { tool: "backpack_add_node" });
145
151
  return {
146
152
  content: [
147
153
  { type: "text", text: JSON.stringify(node, null, 2) },
@@ -170,6 +176,7 @@ export function registerNodeTools(server, backpack) {
170
176
  }, async ({ ontology, nodeId, properties }) => {
171
177
  try {
172
178
  const node = await backpack.updateNode(ontology, nodeId, properties);
179
+ trackEvent("tool_call", { tool: "backpack_update_node" });
173
180
  return {
174
181
  content: [
175
182
  { type: "text", text: JSON.stringify(node, null, 2) },
@@ -196,6 +203,7 @@ export function registerNodeTools(server, backpack) {
196
203
  }, async ({ ontology, nodeId }) => {
197
204
  try {
198
205
  const result = await backpack.removeNode(ontology, nodeId);
206
+ trackEvent("tool_call", { tool: "backpack_remove_node" });
199
207
  return {
200
208
  content: [
201
209
  {
@@ -1 +1 @@
1
- {"version":3,"file":"node-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/node-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,QAAkB;IAElB,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,4HAA4H;QAC9H,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;SACtD;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACpD,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBAChE;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,6IAA6I;QAC/I,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACrD,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,yCAAyC,CAAC;YACtD,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,kCAAkC,CAAC;YAC/C,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,WAAW,EAAE;iBACb,OAAO,CAAC,CAAC,CAAC;iBACV,QAAQ,CAAC,uCAAuC,CAAC;SACrD;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBACjE;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,8GAA8G;QAChH,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACrD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAChD,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,gCAAgC,CAAC;SAC9C;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAClE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EACF,OAAO,CAAC,MAAM,KAAK,CAAC;4BAClB,CAAC,CAAC,sBAAsB,KAAK,UAAU;4BACvC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;qBACvC;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,0FAA0F;QAC5F,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;SAC1D;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBACjE;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,UAAU;QACjB,WAAW,EACT,iHAAiH;QACnH,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACrD,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,CACP,8DAA8D,CAC/D;YACH,UAAU,EAAE,CAAC;iBACV,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC/B,QAAQ,CACP,+EAA+E,CAChF;SACJ;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CACjC,QAAQ,EACR,IAAI,EACJ,UAAqC,CACtC,CAAC;YACF,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBAC/D;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,0JAA0J;QAC5J,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACvD,UAAU,EAAE,CAAC;iBACV,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC/B,QAAQ,CAAC,mCAAmC,CAAC;SACjD;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,CACpC,QAAQ,EACR,MAAM,EACN,UAAqC,CACtC,CAAC;YACF,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBAC/D;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,6DAA6D;QAC/D,WAAW,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;QACtC,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACrD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACxD;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3D,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,gBAAgB,MAAM,QAAQ,MAAM,CAAC,YAAY,qBAAqB;qBAC7E;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAW,GAAa,CAAC,OAAO,EAAE,EAAE;iBACpE;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"node-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/node-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ontology-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/ontology-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CAgIN"}
1
+ {"version":3,"file":"ontology-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/ontology-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGvD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CAoIN"}
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { trackEvent } from "../../core/telemetry.js";
2
3
  export function registerOntologyTools(server, backpack) {
3
4
  server.registerTool("backpack_list", {
4
5
  title: "List Ontologies",
@@ -6,6 +7,7 @@ export function registerOntologyTools(server, backpack) {
6
7
  annotations: { readOnlyHint: true },
7
8
  }, async () => {
8
9
  const ontologies = await backpack.listOntologies();
10
+ trackEvent("tool_call", { tool: "backpack_list" });
9
11
  return {
10
12
  content: [
11
13
  {
@@ -31,6 +33,7 @@ export function registerOntologyTools(server, backpack) {
31
33
  }, async ({ name, description }) => {
32
34
  try {
33
35
  const metadata = await backpack.createOntology(name, description);
36
+ trackEvent("tool_call", { tool: "backpack_create" });
34
37
  return {
35
38
  content: [
36
39
  {
@@ -59,6 +62,7 @@ export function registerOntologyTools(server, backpack) {
59
62
  }, async ({ ontology }) => {
60
63
  try {
61
64
  await backpack.deleteOntology(ontology);
65
+ trackEvent("tool_call", { tool: "backpack_delete" });
62
66
  return {
63
67
  content: [
64
68
  {
@@ -87,6 +91,7 @@ export function registerOntologyTools(server, backpack) {
87
91
  }, async ({ ontology }) => {
88
92
  try {
89
93
  const info = await backpack.describeOntology(ontology);
94
+ trackEvent("tool_call", { tool: "backpack_describe" });
90
95
  return {
91
96
  content: [
92
97
  { type: "text", text: JSON.stringify(info, null, 2) },
@@ -1 +1 @@
1
- {"version":3,"file":"ontology-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/ontology-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ontology-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/ontology-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ You are a knowledge-capture agent for Backpack, a knowledge graph system. Your job is to review the conversation that just happened and decide whether meaningful knowledge should be preserved in an ontology.
2
+
3
+ ## Instructions
4
+
5
+ 1. **Review the conversation transcript** — understand what was discussed, decided, or worked on.
6
+
7
+ 2. **Decide if anything is worth capturing.** Look for:
8
+ - **Business knowledge**: client details, vendor info, pricing, partnerships, workflows
9
+ - **Technical knowledge**: architecture, APIs, data flows, integrations, design decisions
10
+ - **Domain knowledge**: industry concepts, terminology, regulations, best practices
11
+ - **Operational knowledge**: decisions made, problems solved, processes established, conventions agreed upon
12
+ - **Relationships**: how people, systems, concepts, or processes connect to each other
13
+
14
+ 3. **Skip trivial interactions.** Do NOT capture:
15
+ - Simple Q&A with no lasting value
16
+ - Debugging sessions that led nowhere
17
+ - Casual conversation or greetings
18
+ - Knowledge that was already captured in a previous pass
19
+ - Temporary state or in-progress work that will change
20
+
21
+ 4. **If there IS something worth capturing:**
22
+ a. Call `backpack_list` to see existing ontologies
23
+ b. Call `backpack_describe` on relevant ontologies to check what's already there
24
+ c. Decide: update an existing ontology (if the topic fits) or create a new one (if the topic is distinct)
25
+ d. Use `backpack_import_nodes` for efficient bulk node creation
26
+ e. Use `backpack_add_edge` to create relationships between nodes
27
+ f. Use clear, descriptive node types and edge types that make the graph readable
28
+
29
+ 5. **If there is NOTHING worth capturing**, simply stop. Do not force it.
30
+
31
+ 6. **After making updates**, briefly tell the user what was added to their knowledge graph and suggest they can visualize it:
32
+ > "Your backpack knowledge graph was updated with [brief summary]. View it by running `npx backpack-viewer` and opening http://localhost:5173"
33
+
34
+ ## Guidelines for good ontology entries
35
+
36
+ - **Node types** should be clear nouns: `Person`, `Company`, `API`, `Decision`, `Process`, `Concept`, `Tool`, `Service`, `Regulation`, etc.
37
+ - **Edge types** should be clear relationships: `WORKS_WITH`, `DEPENDS_ON`, `DECIDED_TO`, `MANAGES`, `IMPLEMENTS`, `RELATES_TO`, etc.
38
+ - **Properties** should include enough context to be useful later: names, descriptions, dates, reasons, status.
39
+ - **Be selective but thorough** — capture the important things well rather than everything poorly.
40
+ - **Prefer updating existing nodes** over creating duplicates. Check if a concept already exists before adding it.
@@ -0,0 +1,29 @@
1
+ {
2
+ "hooks": {
3
+ "Stop": [
4
+ {
5
+ "matcher": "",
6
+ "hooks": [
7
+ {
8
+ "type": "agent",
9
+ "prompt": "You are a knowledge-capture agent for Backpack, a knowledge graph system. Review the conversation that just happened and decide whether meaningful knowledge should be preserved in an ontology.\n\n## What to capture\n- Business knowledge: client details, vendor info, pricing, partnerships, workflows\n- Technical knowledge: architecture, APIs, data flows, integrations, design decisions\n- Domain knowledge: industry concepts, terminology, regulations, best practices\n- Operational knowledge: decisions made, problems solved, processes established, conventions\n- Relationships: how people, systems, concepts, or processes connect\n\n## What to skip\n- Simple Q&A with no lasting value\n- Debugging that led nowhere\n- Casual conversation or greetings\n- Knowledge already captured in a previous pass\n- Temporary or in-progress state\n\n## If there IS something worth capturing\n1. Call `backpack_list` to see existing ontologies\n2. Call `backpack_describe` on relevant ones to check existing content\n3. Decide: update an existing ontology (if topic fits) or create a new one (if distinct)\n4. Use `backpack_import_nodes` for bulk node creation\n5. Use `backpack_add_edge` to create relationships\n6. Use clear node types (Person, Company, API, Decision, Process, Concept, Tool, Service) and edge types (WORKS_WITH, DEPENDS_ON, DECIDED_TO, MANAGES, IMPLEMENTS, RELATES_TO)\n\n## If NOTHING is worth capturing, just stop.\n\n## After updates, tell the user:\n\"Your backpack knowledge graph was updated with [brief summary]. View it by running `npx backpack-viewer` (http://localhost:5173)\"",
10
+ "timeout": 120,
11
+ "async": true
12
+ }
13
+ ]
14
+ }
15
+ ],
16
+ "PostToolUse": [
17
+ {
18
+ "matcher": "backpack_create|backpack_add_node|backpack_update_node|backpack_import_nodes|backpack_add_edge",
19
+ "hooks": [
20
+ {
21
+ "type": "command",
22
+ "command": "echo 'The user'\"'\"'s backpack ontology was just updated. Let the user know they can visualize their knowledge graph by running: npx backpack-viewer (opens http://localhost:5173)'",
23
+ "timeout": 5
24
+ }
25
+ ]
26
+ }
27
+ ]
28
+ }
29
+ }
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+ # PostToolUse hook: suggest the viewer after backpack write operations.
3
+ # Output is injected into Claude's context as additional information.
4
+ echo 'The user'\''s backpack ontology was just updated. Let the user know they can visualize their knowledge graph by running: npx backpack-viewer (opens http://localhost:5173)'
package/package.json CHANGED
@@ -1,24 +1,29 @@
1
1
  {
2
2
  "name": "backpack-ontology",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "A persistent ontology engine for Claude Code via MCP — progressive discovery of structured knowledge graphs",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Noah Irzinger",
7
7
  "type": "module",
8
8
  "bin": {
9
- "backpack": "./dist/bin/backpack.js"
9
+ "backpack": "./dist/bin/backpack.js",
10
+ "backpack-init": "./dist/bin/init.js"
10
11
  },
11
12
  "main": "./dist/index.js",
12
13
  "types": "./dist/index.d.ts",
13
14
  "files": [
14
- "dist"
15
+ "dist",
16
+ "hooks"
15
17
  ],
16
18
  "scripts": {
17
19
  "build": "tsc",
18
20
  "dev": "tsx src/bin/backpack.ts",
19
21
  "test": "vitest run",
20
22
  "test:watch": "vitest",
21
- "prepublishOnly": "npm run build"
23
+ "prepublishOnly": "npm run build",
24
+ "release:patch": "npm version patch && git push && git push --tags",
25
+ "release:minor": "npm version minor && git push && git push --tags",
26
+ "release:major": "npm version major && git push && git push --tags"
22
27
  },
23
28
  "dependencies": {
24
29
  "@modelcontextprotocol/sdk": "^1.27.0",