@thingd/cli 0.77.0 → 0.77.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/commands/cloud.d.ts +3 -0
  2. package/dist/commands/cloud.d.ts.map +1 -0
  3. package/dist/commands/cloud.js +669 -0
  4. package/dist/commands/mcp-connect.d.ts +3 -0
  5. package/dist/commands/mcp-connect.d.ts.map +1 -0
  6. package/dist/commands/mcp-connect.js +154 -0
  7. package/dist/commands/sync.d.ts +3 -0
  8. package/dist/commands/sync.d.ts.map +1 -0
  9. package/dist/commands/sync.js +197 -0
  10. package/dist/dashboard/public/assets/favicon-CgGFvG_0.svg +4 -0
  11. package/dist/dashboard/public/assets/index-C6PkDB7y.css +1 -0
  12. package/dist/dashboard/public/assets/index-DrpfyClj.js +4 -0
  13. package/dist/dashboard/public/index.html +19 -0
  14. package/dist/dashboard/server.d.ts +6 -0
  15. package/dist/dashboard/server.d.ts.map +1 -0
  16. package/dist/dashboard/server.js +684 -0
  17. package/dist/data-movement.d.ts +6 -0
  18. package/dist/data-movement.d.ts.map +1 -0
  19. package/dist/data-movement.js +475 -0
  20. package/dist/doctor.d.ts +3 -0
  21. package/dist/doctor.d.ts.map +1 -0
  22. package/dist/doctor.js +108 -0
  23. package/dist/index.d.ts +48 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +1446 -0
  26. package/dist/install.d.ts +3 -0
  27. package/dist/install.d.ts.map +1 -0
  28. package/dist/install.js +229 -0
  29. package/dist/interactive.d.ts +2 -0
  30. package/dist/interactive.d.ts.map +1 -0
  31. package/dist/interactive.js +3039 -0
  32. package/dist/lib/cloud-api.d.ts +143 -0
  33. package/dist/lib/cloud-api.d.ts.map +1 -0
  34. package/dist/lib/cloud-api.js +207 -0
  35. package/dist/lib/cloud-config.d.ts +33 -0
  36. package/dist/lib/cloud-config.d.ts.map +1 -0
  37. package/dist/lib/cloud-config.js +42 -0
  38. package/dist/lib/mcp-config-writer.d.ts +26 -0
  39. package/dist/lib/mcp-config-writer.d.ts.map +1 -0
  40. package/dist/lib/mcp-config-writer.js +86 -0
  41. package/dist/lib/sync-config.d.ts +22 -0
  42. package/dist/lib/sync-config.d.ts.map +1 -0
  43. package/dist/lib/sync-config.js +25 -0
  44. package/dist/logo.d.ts +3 -0
  45. package/dist/logo.d.ts.map +1 -0
  46. package/dist/logo.js +8 -0
  47. package/dist/mcp/cluster.d.ts +69 -0
  48. package/dist/mcp/cluster.d.ts.map +1 -0
  49. package/dist/mcp/cluster.js +304 -0
  50. package/dist/mcp/config.d.ts +14 -0
  51. package/dist/mcp/config.d.ts.map +1 -0
  52. package/dist/mcp/config.js +67 -0
  53. package/dist/mcp/http.d.ts +35 -0
  54. package/dist/mcp/http.d.ts.map +1 -0
  55. package/dist/mcp/http.js +957 -0
  56. package/dist/mcp/index.d.ts +5 -0
  57. package/dist/mcp/index.d.ts.map +1 -0
  58. package/dist/mcp/index.js +3 -0
  59. package/dist/mcp-http.d.ts +3 -0
  60. package/dist/mcp-http.d.ts.map +1 -0
  61. package/dist/mcp-http.js +42 -0
  62. package/dist/mcp.d.ts +3 -0
  63. package/dist/mcp.d.ts.map +1 -0
  64. package/dist/mcp.js +28 -0
  65. package/dist/paths.d.ts +4 -0
  66. package/dist/paths.d.ts.map +1 -0
  67. package/dist/paths.js +14 -0
  68. package/package.json +2 -2
@@ -0,0 +1,5 @@
1
+ export { appendMcpAuditEvent, createThingdMcpServer, jsonResult, parseCollectionAllowlist, parsePayloadSizeLimit, type RegisterThingdToolsOptions, readMcpHardeningOptionsFromEnv, registerThingdTools, resolveThingdMcpAuditOptions, type ThingdMcpAuditMetadata, type ThingdMcpAuditOptions, type ThingdMcpHardeningOptions, type ThingdMcpServerOptions, } from "@thingd/sdk";
2
+ export type { ResolvedThingdClusterOptions, ThingdClusterDiscovery, ThingdClusterMode, ThingdClusterOptions, ThingdClusterStatus, } from "./cluster.js";
3
+ export type { RunningThingdHttpServer, ThingdHttpServerOptions } from "./http.js";
4
+ export { startThingdHttpServer } from "./http.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,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"}
@@ -0,0 +1,3 @@
1
+ // Re-export core MCP logic from the SDK
2
+ export { appendMcpAuditEvent, createThingdMcpServer, jsonResult, parseCollectionAllowlist, parsePayloadSizeLimit, readMcpHardeningOptionsFromEnv, registerThingdTools, resolveThingdMcpAuditOptions, } from "@thingd/sdk";
3
+ export { startThingdHttpServer } from "./http.js";
@@ -0,0 +1,3 @@
1
+ import type { CliContext } from "./index.js";
2
+ export declare function runMcpHttp(context: CliContext): Promise<void>;
3
+ //# sourceMappingURL=mcp-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-http.d.ts","sourceRoot":"","sources":["../src/mcp-http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM7C,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CnE"}
@@ -0,0 +1,42 @@
1
+ import { readMcpHardeningOptionsFromEnv } from "@thingd/sdk";
2
+ import { readClusterOptionsFromEnv } from "./mcp/cluster.js";
3
+ import { parsePort, parseThingdDriver, readMcpAuditOptionsFromEnv } from "./mcp/config.js";
4
+ import { startThingdHttpServer } from "./mcp/http.js";
5
+ import { defaultThingdDbPath, ensureThingdDir } from "./paths.js";
6
+ export async function runMcpHttp(context) {
7
+ const parsed = context.parsed;
8
+ // Resolve port, host, allowUnauthenticated, etc. from flags or env
9
+ const portStr = parsed.flags.get("port")?.at(-1) ?? context.env.THINGD_PORT;
10
+ const host = parsed.flags.get("host")?.at(-1) ?? context.env.THINGD_HOST ?? "127.0.0.1";
11
+ const path = parsed.flags.get("path")?.at(-1) ?? context.env.THINGD_PATH ?? defaultThingdDbPath();
12
+ const driverStr = parsed.flags.get("driver")?.at(-1) ?? context.env.THINGD_DRIVER;
13
+ const authToken = parsed.flags.get("auth-token")?.at(-1) ?? context.env.THINGD_AUTH_TOKEN;
14
+ const allowUnauthenticated = parsed.booleans.has("allow-unauthenticated") || parsed.flags.has("allow-unauthenticated");
15
+ const port = parsePort(portStr, 8757);
16
+ const driver = parseThingdDriver(driverStr);
17
+ if (path === defaultThingdDbPath()) {
18
+ ensureThingdDir();
19
+ }
20
+ if (!authToken) {
21
+ console.error("thingd-mcp HTTP runtime is starting without THINGD_AUTH_TOKEN.");
22
+ }
23
+ const runtime = await startThingdHttpServer({
24
+ path,
25
+ driver,
26
+ host,
27
+ port,
28
+ authToken,
29
+ allowUnauthenticated,
30
+ audit: readMcpAuditOptionsFromEnv(context.env),
31
+ cluster: readClusterOptionsFromEnv(context.env),
32
+ hardening: readMcpHardeningOptionsFromEnv(context.env),
33
+ });
34
+ console.error(`thingd MCP HTTP runtime listening at ${runtime.mcpUrl}`);
35
+ for (const signal of ["SIGINT", "SIGTERM"]) {
36
+ process.once(signal, () => {
37
+ void runtime.close().finally(() => process.exit(0));
38
+ });
39
+ }
40
+ // Keep the process alive
41
+ return new Promise(() => { });
42
+ }
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { type CliContext } from "./index.js";
2
+ export declare function runMcp(context: CliContext): Promise<void>;
3
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAA6B,MAAM,YAAY,CAAC;AAGxE,wBAAsB,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B/D"}
package/dist/mcp.js ADDED
@@ -0,0 +1,28 @@
1
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
2
+ import { createThingdMcpServer, readMcpHardeningOptionsFromEnv } from "@thingd/sdk";
3
+ import { resolveConnection, withDb } from "./index.js";
4
+ import { readMcpAuditOptionsFromEnv } from "./mcp/config.js";
5
+ export async function runMcp(context) {
6
+ const sub = context.parsed.tokens[1];
7
+ if (sub === "connect") {
8
+ const { runMcpConnect } = await import("./commands/mcp-connect.js");
9
+ await runMcpConnect(context);
10
+ return;
11
+ }
12
+ const connection = resolveConnection(context);
13
+ await withDb(context, async (db) => {
14
+ const server = createThingdMcpServer(db, {
15
+ audit: readMcpAuditOptionsFromEnv(context.env),
16
+ hardening: readMcpHardeningOptionsFromEnv(context.env),
17
+ });
18
+ const transport = new StdioServerTransport();
19
+ context.stderr.write(`\nthingd stdio MCP server started successfully.\n`);
20
+ context.stderr.write(` ✓ Database: ${connection.path}\n`);
21
+ context.stderr.write(` ✓ Driver: ${connection.driver ?? "memory"}\n`);
22
+ context.stderr.write(` ✓ Transport: Stdio (listening silently on stdin)\n\n`);
23
+ await server.connect(transport);
24
+ // Keep the process alive and the database connection open
25
+ // so the MCP server can continue to receive messages over stdio.
26
+ return new Promise(() => { });
27
+ });
28
+ }
@@ -0,0 +1,4 @@
1
+ export declare function defaultThingdDir(): string;
2
+ export declare function defaultThingdDbPath(): string;
3
+ export declare function ensureThingdDir(): void;
4
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAOA,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
package/dist/paths.js ADDED
@@ -0,0 +1,14 @@
1
+ import { mkdirSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ const THINGD_DIR_NAME = ".thingd";
5
+ const THINGD_DB_NAME = "data.db";
6
+ export function defaultThingdDir() {
7
+ return join(homedir(), THINGD_DIR_NAME);
8
+ }
9
+ export function defaultThingdDbPath() {
10
+ return join(defaultThingdDir(), THINGD_DB_NAME);
11
+ }
12
+ export function ensureThingdDir() {
13
+ mkdirSync(defaultThingdDir(), { recursive: true });
14
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thingd/cli",
3
- "version": "0.77.0",
3
+ "version": "0.77.3",
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
  "homepage": "https://engine.thingd.cloud",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@modelcontextprotocol/sdk": "^1.30.0",
45
- "@thingd/sdk": "workspace:^",
45
+ "@thingd/sdk": "^0.77.3",
46
46
  "cli-table3": "^0.6.5",
47
47
  "picocolors": "^1.1.1",
48
48
  "zod": "^4.4.3"