backpack-ontology 0.1.3 → 0.1.4
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 +87 -124
- package/dist/bin/backpack.js +8 -0
- package/dist/bin/backpack.js.map +1 -1
- package/dist/core/telemetry.d.ts +21 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +203 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +6 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/bulk-tools.d.ts.map +1 -1
- package/dist/mcp/tools/bulk-tools.js +2 -0
- package/dist/mcp/tools/bulk-tools.js.map +1 -1
- package/dist/mcp/tools/edge-tools.d.ts.map +1 -1
- package/dist/mcp/tools/edge-tools.js +4 -0
- package/dist/mcp/tools/edge-tools.js.map +1 -1
- package/dist/mcp/tools/node-tools.d.ts.map +1 -1
- package/dist/mcp/tools/node-tools.js +8 -0
- package/dist/mcp/tools/node-tools.js.map +1 -1
- package/dist/mcp/tools/ontology-tools.d.ts.map +1 -1
- package/dist/mcp/tools/ontology-tools.js +5 -0
- package/dist/mcp/tools/ontology-tools.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
|
-
# Backpack
|
|
1
|
+
# Backpack Ontology
|
|
2
2
|
|
|
3
|
-
A persistent
|
|
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
|
-
|
|
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
|
-
|
|
11
|
+
## Setup
|
|
16
12
|
|
|
17
|
-
Add to your project
|
|
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
|
|
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
|
|
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
|
-
##
|
|
34
|
+
## Usage
|
|
51
35
|
|
|
52
|
-
Backpack
|
|
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
|
-
[
|
|
57
|
-
[Recipe: Aglio e Olio] --CUISINE--> [Cuisine: Italian]
|
|
40
|
+
[Module: auth] --DEPENDS_ON--> [Module: database]
|
|
58
41
|
```
|
|
59
42
|
|
|
60
|
-
|
|
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
|
|
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 |
|
|
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` |
|
|
71
|
+
| `backpack_describe` | Inspect ontology structure: node types, edge types, counts |
|
|
85
72
|
|
|
86
73
|
### Browsing
|
|
87
74
|
|
|
@@ -95,140 +82,116 @@ 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
|
|
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
|
|
97
|
+
| `backpack_import_nodes` | Bulk-add multiple nodes in a single operation |
|
|
111
98
|
|
|
112
|
-
##
|
|
99
|
+
## Programmatic API
|
|
113
100
|
|
|
114
|
-
|
|
101
|
+
The core engine has no MCP dependency and can be used as a library:
|
|
115
102
|
|
|
116
|
-
```
|
|
117
|
-
|
|
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
|
-
|
|
106
|
+
const backpack = new Backpack(new JsonFileBackend());
|
|
107
|
+
await backpack.initialize();
|
|
129
108
|
|
|
130
|
-
|
|
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);
|
|
112
|
+
```
|
|
131
113
|
|
|
132
|
-
|
|
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` |
|
|
114
|
+
### Pluggable Storage
|
|
137
115
|
|
|
138
|
-
|
|
116
|
+
The `StorageBackend` interface allows custom persistence implementations:
|
|
139
117
|
|
|
140
|
-
|
|
118
|
+
```typescript
|
|
119
|
+
import { Backpack, StorageBackend } from "backpack-ontology";
|
|
141
120
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
121
|
+
class SqliteBackend implements StorageBackend {
|
|
122
|
+
// initialize, listOntologies, loadOntology, saveOntology,
|
|
123
|
+
// createOntology, deleteOntology, ontologyExists
|
|
145
124
|
}
|
|
125
|
+
|
|
126
|
+
const backpack = new Backpack(new SqliteBackend());
|
|
146
127
|
```
|
|
147
128
|
|
|
148
|
-
##
|
|
129
|
+
## Data Storage
|
|
149
130
|
|
|
150
|
-
Backpack
|
|
131
|
+
Backpack follows the [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/latest/):
|
|
151
132
|
|
|
152
133
|
```
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
│
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
└─────────────┴───────────────────────────┘
|
|
134
|
+
~/.local/share/backpack/ontologies/
|
|
135
|
+
├── cooking/
|
|
136
|
+
│ └── ontology.json
|
|
137
|
+
└── codebase-arch/
|
|
138
|
+
└── ontology.json
|
|
167
139
|
```
|
|
168
140
|
|
|
169
|
-
|
|
141
|
+
Ontology files are human-readable JSON. They can be inspected, edited, backed up, or version-controlled directly.
|
|
170
142
|
|
|
171
|
-
|
|
172
|
-
|
|
143
|
+
| Variable | Effect |
|
|
144
|
+
|----------|--------|
|
|
145
|
+
| `XDG_DATA_HOME` | Override data location (default: `~/.local/share`) |
|
|
146
|
+
| `XDG_CONFIG_HOME` | Override config location (default: `~/.config`) |
|
|
147
|
+
| `BACKPACK_DIR` | Override both — config at `$BACKPACK_DIR/config`, data at `$BACKPACK_DIR/data` |
|
|
173
148
|
|
|
174
|
-
|
|
175
|
-
await backpack.initialize();
|
|
149
|
+
## Telemetry
|
|
176
150
|
|
|
177
|
-
|
|
178
|
-
await backpack.addNode("my-graph", "Person", { name: "Alice" });
|
|
179
|
-
```
|
|
151
|
+
Backpack collects anonymous usage telemetry to improve the product. No personal data, ontology content, or tool arguments are ever collected.
|
|
180
152
|
|
|
181
|
-
|
|
153
|
+
**What is collected:**
|
|
154
|
+
- Tool call counts (which tools are used, not what data is passed)
|
|
155
|
+
- Session duration
|
|
156
|
+
- Aggregate ontology statistics (total node/edge counts, not names or content)
|
|
157
|
+
- Runtime environment (Node.js version, OS, platform)
|
|
182
158
|
|
|
183
|
-
|
|
159
|
+
**What is never collected:**
|
|
160
|
+
- Ontology names, descriptions, or content
|
|
161
|
+
- Node or edge properties
|
|
162
|
+
- File paths or user identifiers
|
|
163
|
+
- Tool arguments or query strings
|
|
184
164
|
|
|
185
|
-
|
|
186
|
-
import { Backpack, StorageBackend } from "backpack-ontology";
|
|
165
|
+
**To opt out**, use any of the following:
|
|
187
166
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
167
|
+
```bash
|
|
168
|
+
# Environment variable (standard)
|
|
169
|
+
export DO_NOT_TRACK=1
|
|
192
170
|
|
|
193
|
-
|
|
171
|
+
# Backpack-specific environment variable
|
|
172
|
+
export BACKPACK_TELEMETRY_DISABLED=1
|
|
194
173
|
```
|
|
195
174
|
|
|
196
|
-
|
|
175
|
+
Or add to `~/.config/backpack/config.json`:
|
|
197
176
|
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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)
|
|
177
|
+
```json
|
|
178
|
+
{
|
|
179
|
+
"telemetry": false
|
|
180
|
+
}
|
|
205
181
|
```
|
|
206
182
|
|
|
207
|
-
|
|
183
|
+
## Visualization
|
|
208
184
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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
|
-
```
|
|
185
|
+
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.
|
|
186
|
+
|
|
187
|
+
## Support
|
|
188
|
+
|
|
189
|
+
For questions, feedback, or sponsorship inquiries: **support@backpackontology.com**
|
|
227
190
|
|
|
228
191
|
## License
|
|
229
192
|
|
|
230
|
-
[Apache 2.0](./LICENSE)
|
|
193
|
+
Licensed under the [Apache License, Version 2.0](./LICENSE).
|
|
231
194
|
|
|
232
195
|
## Contributing
|
|
233
196
|
|
|
234
|
-
Issues and
|
|
197
|
+
Issues and pull requests are welcome on [GitHub](https://github.com/noahirzinger/backpack-ontology).
|
package/dist/bin/backpack.js
CHANGED
|
@@ -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);
|
package/dist/bin/backpack.js.map
CHANGED
|
@@ -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;
|
|
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,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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -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;
|
|
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,CAoBpB"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -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,6 +16,11 @@ 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
26
|
version: "0.1.0",
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -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,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 +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;
|
|
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;
|
|
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;
|
|
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":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
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;
|
|
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;
|
|
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;
|
|
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":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"ontology-tools.js","sourceRoot":"","sources":["../../../src/mcp/tools/ontology-tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "backpack-ontology",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
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",
|
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
"dev": "tsx src/bin/backpack.ts",
|
|
19
19
|
"test": "vitest run",
|
|
20
20
|
"test:watch": "vitest",
|
|
21
|
-
"prepublishOnly": "npm run build"
|
|
21
|
+
"prepublishOnly": "npm run build",
|
|
22
|
+
"release:patch": "npm version patch && git push && git push --tags",
|
|
23
|
+
"release:minor": "npm version minor && git push && git push --tags",
|
|
24
|
+
"release:major": "npm version major && git push && git push --tags"
|
|
22
25
|
},
|
|
23
26
|
"dependencies": {
|
|
24
27
|
"@modelcontextprotocol/sdk": "^1.27.0",
|