@thingd/cli 0.31.0 → 0.32.2
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 +40 -220
- package/dist/dashboard/server.js +1 -1
- package/dist/doctor.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/install.js +2 -2
- package/dist/interactive.js +1 -1
- package/dist/mcp/cluster.d.ts +1 -1
- package/dist/mcp/cluster.d.ts.map +1 -1
- package/dist/mcp/config.d.ts +1 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/http.d.ts +1 -1
- package/dist/mcp/http.d.ts.map +1 -1
- package/dist/mcp/http.js +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp-http.js +1 -1
- package/dist/mcp.js +1 -1
- package/package.json +3 -4
- package/dist/dashboard/public/assets/index-B-Y-3-0l.js +0 -2
- package/dist/dashboard/public/assets/index-B5YhpIl3.js +0 -2
- package/dist/dashboard/public/assets/index-BnFclxvN.css +0 -1
- package/dist/dashboard/public/assets/index-BtA9rnyI.js +0 -2
- package/dist/dashboard/public/assets/index-BzLTzidY.js +0 -2
- package/dist/dashboard/public/assets/index-D8yUCdOQ.js +0 -2
- package/dist/dashboard/public/assets/index-fQywB2df.js +0 -2
- package/dist/dashboard/public/assets/index-kZdrdi3K.css +0 -1
- package/dist/dashboard/public/favicon.svg +0 -1
- package/dist/dashboard/public/icons.svg +0 -24
- package/dist/mcp/audit.d.ts +0 -27
- package/dist/mcp/audit.d.ts.map +0 -1
- package/dist/mcp/audit.js +0 -36
- package/dist/mcp/result.d.ts +0 -3
- package/dist/mcp/result.d.ts.map +0 -1
- package/dist/mcp/result.js +0 -10
- package/dist/mcp/server.d.ts +0 -19
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -51
- package/dist/mcp/tools.d.ts +0 -10
- package/dist/mcp/tools.d.ts.map +0 -1
- package/dist/mcp/tools.js +0 -568
- package/dist/rest/helpers.d.ts +0 -17
- package/dist/rest/helpers.d.ts.map +0 -1
- package/dist/rest/helpers.js +0 -55
- package/dist/rest/server.d.ts +0 -4
- package/dist/rest/server.d.ts.map +0 -1
- package/dist/rest/server.js +0 -317
package/README.md
CHANGED
|
@@ -1,238 +1,58 @@
|
|
|
1
|
-
# thingd
|
|
1
|
+
# @thingd/cli
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/thingd-cli)
|
|
3
|
+
[](https://www.npmjs.com/package/@thingd/cli)
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
CLI, interactive TUI dashboard, and MCP server for [thingd](https://github.com/sayanmohsin/thingd) — a fast object-first data engine for applications and AI agents.
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
## Installation
|
|
11
|
-
|
|
12
|
-
### npm (CLI)
|
|
13
|
-
|
|
14
|
-
Install globally via npm to use the `thingd` command anywhere:
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
npm install -g thingd-cli
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
Or run it on the fly using `npx`:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
npx thingd-cli
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### Docker (sidecar runtime)
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
docker pull sayanmohsin/thingd
|
|
30
|
-
docker run -p 8757:8757 sayanmohsin/thingd
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
See the [Docker Hub](https://hub.docker.com/r/sayanmohsin/thingd) page for all tags.
|
|
34
|
-
|
|
35
|
-
## Quick Start: Zero-Config MCP Setup
|
|
36
|
-
|
|
37
|
-
The easiest way to integrate `thingd` with your editors (Claude Desktop and Cursor) is to run the automated setup command:
|
|
7
|
+
## Install
|
|
38
8
|
|
|
39
9
|
```bash
|
|
40
|
-
|
|
10
|
+
npm install -g @thingd/cli
|
|
41
11
|
```
|
|
42
12
|
|
|
43
|
-
|
|
44
|
-
- Auto-detect the absolute path of your active `node` binary and global `thingd` script.
|
|
45
|
-
- Automatically locate or create your persistent local database at `~/.thingd/data.db`.
|
|
46
|
-
- **For Claude Desktop**: Automatically configure the stdio MCP server in your `claude_desktop_config.json` (macOS).
|
|
47
|
-
- **For Cursor**: Print the exact, copy-pasteable JSON block to paste into your Cursor MCP settings.
|
|
48
|
-
|
|
49
|
-
## Two Modes of Operation
|
|
50
|
-
|
|
51
|
-
The CLI is designed to support both human operators and automated scripts through two distinct modes:
|
|
13
|
+
## Usage
|
|
52
14
|
|
|
53
|
-
1. **Interactive Dashboard (TUI)**: Run `thingd` without any arguments to launch a beautiful, interactive terminal UI. Perfect for exploring collections, editing objects, and managing queues manually.
|
|
54
|
-
2. **Non-Interactive CLI**: Run `thingd <command>` for one-off operations. This mode intentionally emits JSON so it is easy to use from shell scripts, CI/CD pipelines, and automated workflows.
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## 1. Interactive Dashboard (TUI)
|
|
59
|
-
|
|
60
|
-
To start the interactive dashboard, simply run:
|
|
61
15
|
```bash
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
### Connection Mode
|
|
66
|
-
Upon launch, you will be prompted to select a connection driver:
|
|
67
|
-
- `Memory`: An ephemeral, in-memory instance (great for quick testing).
|
|
68
|
-
- `Native`: Connects directly to a local SQLite `.db` file (requires a file path).
|
|
69
|
-
- `Cloud`: Connects to a remote ThingD cluster (requires a URL and an optional Bearer Token).
|
|
70
|
-
|
|
71
|
-
### Keyboard Shortcuts
|
|
72
|
-
Once connected, the TUI provides a dual-pane layout: a navigation sidebar on the left and a detailed viewer/editor on the right.
|
|
73
|
-
|
|
74
|
-
| Shortcut | Action |
|
|
75
|
-
|----------|--------|
|
|
76
|
-
| `↑` / `↓` (or `k` / `j`) | Navigate the tree vertically |
|
|
77
|
-
| `←` / `→` (or `h` / `l`) | Expand or collapse folders (Collections, Streams, Queues) |
|
|
78
|
-
| `Enter` | Expand node or open a folder |
|
|
79
|
-
| `c` | **Create** a new Object, Event, or push a Queue job |
|
|
80
|
-
| `e` | **Edit** an Object or retry a Queue job |
|
|
81
|
-
| `d` | **Delete** an Object or Ack/Resolve a Queue job |
|
|
82
|
-
| `/` (or `f`) | **Global Semantic Search** across the database |
|
|
83
|
-
| `i` | **Info**: View Connection Info & Cloud Cluster Status |
|
|
84
|
-
| `r` | **Refresh** data from the database |
|
|
85
|
-
| `s` | **Switch** database connections |
|
|
86
|
-
| `q` | **Quit** |
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## 2. Non-Interactive CLI
|
|
91
|
-
|
|
92
|
-
For scripts and automation, you can bypass the TUI entirely.
|
|
16
|
+
# Start the MCP server (for AI agents — Cursor, Claude Desktop)
|
|
17
|
+
thingd mcp
|
|
93
18
|
|
|
94
|
-
|
|
95
|
-
|
|
19
|
+
# Start the HTTP MCP server + dashboard
|
|
20
|
+
thingd mcp-http
|
|
96
21
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
--auth-token <tok> remote bearer token. Defaults to THINGD_AUTH_TOKEN
|
|
100
|
-
--path <path> local database path. Defaults to THINGD_PATH or ~/.thingd/data.db
|
|
101
|
-
--driver <driver> memory, native, or cloud
|
|
102
|
-
--pretty pretty-print JSON output
|
|
103
|
-
--limit <n> result limit for search and list commands
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Native Driver (SQLite)
|
|
107
|
-
|
|
108
|
-
Use the native SQLite driver for persistent local storage:
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
thingd --path ./my-data.db --driver native
|
|
112
|
-
```
|
|
22
|
+
# Open the TUI dashboard
|
|
23
|
+
thingd dashboard
|
|
113
24
|
|
|
114
|
-
|
|
25
|
+
# Manage objects
|
|
26
|
+
thingd objects list <collection>
|
|
27
|
+
thingd objects get <collection> <id>
|
|
28
|
+
thingd objects put <collection> <id> --data '{"text":"hello"}'
|
|
29
|
+
thingd objects delete <collection> <id>
|
|
30
|
+
thingd objects put-batch <collection> --file <path>
|
|
31
|
+
thingd objects delete-batch <collection> <id1> [id2] ...
|
|
115
32
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
thingd
|
|
120
|
-
```
|
|
33
|
+
# Events
|
|
34
|
+
thingd events append <stream> <type> --text "event data"
|
|
35
|
+
thingd events list [stream]
|
|
121
36
|
|
|
122
|
-
|
|
37
|
+
# Queues
|
|
38
|
+
thingd queues push <queue> --payload '{"key":"value"}'
|
|
39
|
+
thingd queues claim <queue>
|
|
40
|
+
thingd queues ack <queue> <jobId>
|
|
41
|
+
thingd queues nack <queue> <jobId>
|
|
123
42
|
|
|
124
|
-
|
|
43
|
+
# Links
|
|
44
|
+
thingd links create <fromRef> <linkType> <toRef>
|
|
45
|
+
thingd links neighbors <reference>
|
|
125
46
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
thingd
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
thingd mcp --path ./data.db --driver native
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
### MCP Integration
|
|
139
|
-
|
|
140
|
-
The `thingd` CLI has a built-in `mcp` subcommand that exposes an MCP server over `stdio`. This allows Claude Desktop to securely connect to your `thingd` database.
|
|
141
|
-
|
|
142
|
-
**Connecting to a Local Database:**
|
|
143
|
-
To let Claude read and write to a local `thingd.db` file, add this to your `claude_desktop_config.json`:
|
|
144
|
-
|
|
145
|
-
```json
|
|
146
|
-
{
|
|
147
|
-
"mcpServers": {
|
|
148
|
-
"thingd-local": {
|
|
149
|
-
"command": "thingd",
|
|
150
|
-
"args": ["mcp", "--path", "/absolute/path/to/thingd.db", "--driver", "native"]
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
**Bridging Claude to the Cloud:**
|
|
157
|
-
Claude Desktop natively only supports local `stdio` servers. However, `thingd mcp` can act as a bridge! If you provide a `--url`, the CLI will launch locally but seamlessly proxy all of Claude's requests to your remote cluster:
|
|
158
|
-
|
|
159
|
-
```json
|
|
160
|
-
{
|
|
161
|
-
"mcpServers": {
|
|
162
|
-
"thingd-cloud": {
|
|
163
|
-
"command": "thingd",
|
|
164
|
-
"args": ["mcp", "--url", "https://your-thingd-cloud.com/mcp", "--auth-token", "your-secret-token"]
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
**Running as a Streamable HTTP Server:**
|
|
171
|
-
If you want to run `thingd` as a standalone Streamable HTTP MCP server (for example, to connect remote agents or ChatGPT), you can spin it up directly using `mcp-http`:
|
|
172
|
-
|
|
173
|
-
```bash
|
|
174
|
-
thingd mcp-http --path ./thingd.db --driver native --port 8757 --auth-token change-me
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### Command Reference
|
|
178
|
-
|
|
179
|
-
**System & Diagnostics**
|
|
180
|
-
```bash
|
|
181
|
-
thingd doctor # Run Node, native binding, and remote connectivity diagnostics
|
|
182
|
-
thingd metrics # Get total database counts (objects, events, activeJobs, deadJobs)
|
|
183
|
-
thingd status # Check cluster health (requires --url)
|
|
184
|
-
thingd tools # List available MCP tools (requires --url)
|
|
185
|
-
thingd bench rust --smoke # Run Rust SQLite engine smoke benchmarks
|
|
186
|
-
thingd bench rust --count 500 # Run Rust SQLite engine benchmarks with specific run count
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
**Discovery & Collections**
|
|
190
|
-
```bash
|
|
191
|
-
thingd collections list # List all active collections
|
|
192
|
-
thingd streams list # List all active stream names (alias for events streams)
|
|
193
|
-
thingd events streams # List all active event streams
|
|
194
|
-
thingd queues list-all # List all active queue names
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
**Search**
|
|
198
|
-
```bash
|
|
199
|
-
thingd search "my query" [--collection <name>] [--limit <n>]
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
**Objects**
|
|
203
|
-
```bash
|
|
204
|
-
thingd objects list decisions # List all objects inside a collection
|
|
205
|
-
thingd objects put decisions core --text "msg" # Put object with plain text content
|
|
206
|
-
thingd objects put decisions core --data '{"a":1}' # Put object with arbitrary JSON data
|
|
207
|
-
thingd objects get decisions core # Fetch a specific object by ID
|
|
208
|
-
thingd objects delete decisions core # Delete an object by ID
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
**Events**
|
|
212
|
-
```bash
|
|
213
|
-
thingd events append project:thingd decision.made --text "Picked the CLI shape."
|
|
214
|
-
thingd events list project:thingd
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
**Queues**
|
|
218
|
-
```bash
|
|
219
|
-
thingd queues stats embed # View queue statistics (ready, leased, dead jobs)
|
|
220
|
-
thingd queues push embed --payload '{"object":"docs/readme"}'
|
|
221
|
-
thingd queues claim embed
|
|
222
|
-
thingd queues ack embed <jobId>
|
|
223
|
-
thingd queues nack embed <jobId> --error "failed to fetch" --delay-ms 5000
|
|
224
|
-
thingd queues list embed
|
|
225
|
-
thingd queues dead embed
|
|
47
|
+
# Utilities
|
|
48
|
+
thingd search <query>
|
|
49
|
+
thingd status
|
|
50
|
+
thingd doctor
|
|
51
|
+
thingd install
|
|
52
|
+
thingd export --collection <name> --out <path>
|
|
53
|
+
thingd import --collection <name> --in <path>
|
|
54
|
+
thingd snapshot create --out <path>
|
|
55
|
+
thingd snapshot restore --in <path>
|
|
226
56
|
```
|
|
227
57
|
|
|
228
|
-
|
|
229
|
-
```bash
|
|
230
|
-
# Export & Import Data with optional recursive secret/email/key redaction
|
|
231
|
-
thingd export --collection decisions --out decisions.jsonl [--redact]
|
|
232
|
-
thingd export --events [--stream name] --out events.jsonl [--redact custom_secret]
|
|
233
|
-
thingd import --collection decisions_restored --in decisions.jsonl
|
|
234
|
-
|
|
235
|
-
# Snapshot & Restore full database state
|
|
236
|
-
thingd snapshot create --out snapshot.thingd.json
|
|
237
|
-
thingd snapshot restore --in snapshot.thingd.json
|
|
238
|
-
```
|
|
58
|
+
Full reference: [docs/cli-reference.md](https://github.com/sayanmohsin/thingd/blob/main/docs/cli-reference.md)
|
package/dist/dashboard/server.js
CHANGED
|
@@ -2,7 +2,7 @@ import { existsSync, promises as fs, statSync } from "node:fs";
|
|
|
2
2
|
import { createServer } from "node:http";
|
|
3
3
|
import { dirname, extname, join } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { handleRestRequest, ThingD } from "@thingd/
|
|
5
|
+
import { handleRestRequest, ThingD } from "@thingd/sdk";
|
|
6
6
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
7
|
const __dirname = dirname(__filename);
|
|
8
8
|
// Candidate public folders to support both tsx dev and compiled dist packaging
|
package/dist/doctor.js
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAQA,OAAO,EASL,MAAM,EACN,KAAK,YAAY,EAClB,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAQA,OAAO,EASL,MAAM,EACN,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAOrB,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAEjD,KAAK,YAAY,GAAG;IAClB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAsCF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAmEF,wBAAsB,MAAM,CAC1B,IAAI,WAAwB,EAC5B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA6EjB;AAkxBD,wBAAsB,MAAM,CAC1B,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CAcf;AA4BD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,iBAAiB,CA2BxE;AAiDD,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAGlF;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrF;AAyFD,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAEpF;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAElE"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { setTimeout as sleep } from "node:timers/promises";
|
|
|
5
5
|
import { pathToFileURL } from "node:url";
|
|
6
6
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
7
7
|
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
8
|
-
import { ThingD, } from "@thingd/
|
|
8
|
+
import { ThingD, } from "@thingd/sdk";
|
|
9
9
|
import pc from "picocolors";
|
|
10
10
|
import { runInteractiveCli } from "./interactive.js";
|
|
11
11
|
import { logoLine } from "./logo.js";
|
|
@@ -110,8 +110,8 @@ export async function runCli(args = process.argv.slice(2), options = {}) {
|
|
|
110
110
|
const arch = process.arch;
|
|
111
111
|
const candidates = [
|
|
112
112
|
// installed via pnpm/npm as transitive dependency of thingd
|
|
113
|
-
join(cliDir, "node_modules", "thingd
|
|
114
|
-
join(cliDir, "node_modules", "thingd
|
|
113
|
+
join(cliDir, "node_modules", "@thingd/native", "dist", "thingd_native.node"),
|
|
114
|
+
join(cliDir, "node_modules", "@thingd/native", "prebuilds", `${platform}-${arch}`, "thingd_native.node"),
|
|
115
115
|
// workspace sibling (local dev)
|
|
116
116
|
join(cliDir, "..", "thingd-native", "dist", "thingd_native.node"),
|
|
117
117
|
join(cliDir, "..", "thingd-native", "prebuilds", `${platform}-${arch}`, "thingd_native.node"),
|
|
@@ -270,7 +270,7 @@ async function runBench(context) {
|
|
|
270
270
|
"run",
|
|
271
271
|
"--release",
|
|
272
272
|
"-p",
|
|
273
|
-
"thingd
|
|
273
|
+
"thingd",
|
|
274
274
|
"--example",
|
|
275
275
|
"storage_bench",
|
|
276
276
|
"--features",
|
package/dist/install.js
CHANGED
|
@@ -3,7 +3,7 @@ import { homedir, platform } from "node:os";
|
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
4
|
import { createInterface } from "node:readline/promises";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
|
-
import { NativeThingStore } from "@thingd/
|
|
6
|
+
import { NativeThingStore } from "@thingd/sdk";
|
|
7
7
|
import pc from "picocolors";
|
|
8
8
|
import { defaultThingdDbPath, ensureThingdDir } from "./paths.js";
|
|
9
9
|
async function askQuestion(query) {
|
|
@@ -215,7 +215,7 @@ function detectDriver() {
|
|
|
215
215
|
// When installed globally via npm, thingd-native is typically a sibling package.
|
|
216
216
|
const cliDir = join(resolveCliPath(), "..", "..");
|
|
217
217
|
const nativePaths = [
|
|
218
|
-
join(cliDir, "node_modules", "thingd
|
|
218
|
+
join(cliDir, "node_modules", "@thingd/native", "dist", "thingd_native.node"),
|
|
219
219
|
join(cliDir, "..", "thingd-native", "dist", "thingd_native.node"),
|
|
220
220
|
];
|
|
221
221
|
for (const candidate of nativePaths) {
|
package/dist/interactive.js
CHANGED
|
@@ -4,7 +4,7 @@ import * as fs from "node:fs";
|
|
|
4
4
|
import * as os from "node:os";
|
|
5
5
|
import * as path from "node:path";
|
|
6
6
|
import readline from "node:readline";
|
|
7
|
-
import { ThingD } from "@thingd/
|
|
7
|
+
import { ThingD } from "@thingd/sdk";
|
|
8
8
|
import pc from "picocolors";
|
|
9
9
|
import { logoText } from "./logo.js";
|
|
10
10
|
// ── Helpers ──────────────────────────────────────────────────────────
|
package/dist/mcp/cluster.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
-
import type { ThingD } from "@thingd/
|
|
2
|
+
import type { ThingD } from "@thingd/sdk";
|
|
3
3
|
export type ThingdClusterMode = "single" | "leader" | "follower";
|
|
4
4
|
export type ThingdClusterDiscovery = "none" | "static" | "kubernetes";
|
|
5
5
|
export type ThingdClusterOptions = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../src/mcp/cluster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../src/mcp/cluster.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ThingDDriver, ThingdMcpAuditOptions } from "@thingd/
|
|
1
|
+
import type { ThingDDriver, ThingdMcpAuditOptions } from "@thingd/sdk";
|
|
2
2
|
export type ThingDStorageDriver = Exclude<ThingDDriver, "remote">;
|
|
3
3
|
export type HttpRuntimeSafetyOptions = {
|
|
4
4
|
host: string;
|
package/dist/mcp/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAElE,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,GAAG,SAAS,CAU5F;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAY7E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAejF;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,qBAAqB,GAAG,KAAK,CAgB/B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQhF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAU/E"}
|
package/dist/mcp/http.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Server } from "node:http";
|
|
2
|
-
import { type ThingdMcpAuditOptions, type ThingdMcpHardeningOptions } from "@thingd/
|
|
2
|
+
import { type ThingdMcpAuditOptions, type ThingdMcpHardeningOptions } from "@thingd/sdk";
|
|
3
3
|
import { type ThingdClusterOptions } from "./cluster.js";
|
|
4
4
|
import { type ThingDStorageDriver } from "./config.js";
|
|
5
5
|
export type ThingdHttpServerOptions = {
|
package/dist/mcp/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/mcp/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAGjG,OAAO,EAKL,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC/B,MAAM,
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/mcp/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAGjG,OAAO,EAKL,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAML,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEhF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,qBAAqB,GAAG,KAAK,CAAC;IACtC,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAkBF,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,uBAAuB,CAAC,CAqDlC"}
|
package/dist/mcp/http.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createServer } from "node:http";
|
|
2
2
|
import { PassThrough } from "node:stream";
|
|
3
3
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
4
|
-
import { createThingdMcpServer, ThingD, } from "@thingd/
|
|
4
|
+
import { createThingdMcpServer, ThingD, } from "@thingd/sdk";
|
|
5
5
|
import { findNextLeaderCandidate, forwardMcpRequestToLeader, getClusterStatus, resolveClusterOptions, } from "./cluster.js";
|
|
6
6
|
import { ensureHttpRuntimeIsSafe } from "./config.js";
|
|
7
7
|
export async function startThingdHttpServer(options) {
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { appendMcpAuditEvent, createThingdMcpServer, jsonResult, parseCollectionAllowlist, parsePayloadSizeLimit, type RegisterThingdToolsOptions, readMcpHardeningOptionsFromEnv, registerThingdTools, resolveThingdMcpAuditOptions, type ThingdMcpAuditMetadata, type ThingdMcpAuditOptions, type ThingdMcpHardeningOptions, type ThingdMcpServerOptions, } from "@thingd/
|
|
1
|
+
export { appendMcpAuditEvent, createThingdMcpServer, jsonResult, parseCollectionAllowlist, parsePayloadSizeLimit, type RegisterThingdToolsOptions, readMcpHardeningOptionsFromEnv, registerThingdTools, resolveThingdMcpAuditOptions, type ThingdMcpAuditMetadata, type ThingdMcpAuditOptions, type ThingdMcpHardeningOptions, type ThingdMcpServerOptions, } from "@thingd/sdk";
|
|
2
2
|
export type { ResolvedThingdClusterOptions, ThingdClusterDiscovery, ThingdClusterMode, ThingdClusterOptions, ThingdClusterStatus, } from "./cluster.js";
|
|
3
3
|
export type { RunningThingdHttpServer, ThingdHttpServerOptions } from "./http.js";
|
|
4
4
|
export { startThingdHttpServer } from "./http.js";
|
package/dist/mcp/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,UAAU,EACV,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,8BAA8B,EAC9B,mBAAmB,EACnB,4BAA4B,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,UAAU,EACV,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,8BAA8B,EAC9B,mBAAmB,EACnB,4BAA4B,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,4BAA4B,EAC5B,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Re-export core MCP logic from the SDK
|
|
2
|
-
export { appendMcpAuditEvent, createThingdMcpServer, jsonResult, parseCollectionAllowlist, parsePayloadSizeLimit, readMcpHardeningOptionsFromEnv, registerThingdTools, resolveThingdMcpAuditOptions, } from "@thingd/
|
|
2
|
+
export { appendMcpAuditEvent, createThingdMcpServer, jsonResult, parseCollectionAllowlist, parsePayloadSizeLimit, readMcpHardeningOptionsFromEnv, registerThingdTools, resolveThingdMcpAuditOptions, } from "@thingd/sdk";
|
|
3
3
|
export { startThingdHttpServer } from "./http.js";
|
package/dist/mcp-http.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { readMcpHardeningOptionsFromEnv } from "@thingd/
|
|
1
|
+
import { readMcpHardeningOptionsFromEnv } from "@thingd/sdk";
|
|
2
2
|
import { readClusterOptionsFromEnv } from "./mcp/cluster.js";
|
|
3
3
|
import { parsePort, parseThingdDriver, readMcpAuditOptionsFromEnv } from "./mcp/config.js";
|
|
4
4
|
import { startThingdHttpServer } from "./mcp/http.js";
|
package/dist/mcp.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
2
|
-
import { createThingdMcpServer, readMcpHardeningOptionsFromEnv } from "@thingd/
|
|
2
|
+
import { createThingdMcpServer, readMcpHardeningOptionsFromEnv } from "@thingd/sdk";
|
|
3
3
|
import { resolveConnection, withDb } from "./index.js";
|
|
4
4
|
import { readMcpAuditOptionsFromEnv } from "./mcp/config.js";
|
|
5
5
|
export async function runMcp(context) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thingd/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.2",
|
|
4
4
|
"description": "CLI, Interactive TUI Dashboard, and MCP server for thingd — a fast object-first data engine for applications and AI agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "Sayan Mohsin",
|
|
@@ -18,8 +18,7 @@
|
|
|
18
18
|
"local-first"
|
|
19
19
|
],
|
|
20
20
|
"publishConfig": {
|
|
21
|
-
"access": "public"
|
|
22
|
-
"provenance": true
|
|
21
|
+
"access": "public"
|
|
23
22
|
},
|
|
24
23
|
"bin": {
|
|
25
24
|
"thingd": "./dist/index.js"
|
|
@@ -45,7 +44,7 @@
|
|
|
45
44
|
"cli-table3": "^0.6.5",
|
|
46
45
|
"picocolors": "^1.1.1",
|
|
47
46
|
"zod": "^4.4.3",
|
|
48
|
-
"@thingd/
|
|
47
|
+
"@thingd/sdk": "0.32.2"
|
|
49
48
|
},
|
|
50
49
|
"engines": {
|
|
51
50
|
"node": ">=24.0.0"
|