@thingd/cli 0.52.7 → 0.52.9
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/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -3
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +10 -7
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAqErD,wBAAsB,oBAAoB,CACxC,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAqErD,wBAAsB,oBAAoB,CACxC,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAwnB7E"}
|
package/dist/dashboard/server.js
CHANGED
|
@@ -74,6 +74,7 @@ export async function startDashboardServer(connectionOptions, port) {
|
|
|
74
74
|
url: activeOptions.cloud ? activeOptions.path : undefined,
|
|
75
75
|
driver: activeOptions.driver,
|
|
76
76
|
authToken: activeOptions.authToken,
|
|
77
|
+
instanceSlug: activeOptions.instanceSlug,
|
|
77
78
|
});
|
|
78
79
|
// 2. Create HTTP Server
|
|
79
80
|
const server = createServer(async (req, res) => {
|
package/dist/index.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ export type ConnectionOptions = {
|
|
|
29
29
|
driver?: ThingDDriver;
|
|
30
30
|
authToken?: string;
|
|
31
31
|
cloud: boolean;
|
|
32
|
+
/** Cloud instance slug for multi-instance routing. */
|
|
33
|
+
instanceSlug?: string;
|
|
32
34
|
};
|
|
33
35
|
export declare function runCli(args?: string[], options?: RunCliOptions): Promise<number>;
|
|
34
36
|
export declare function withDb(context: CliContext, callback: (db: ThingD) => Promise<void>): Promise<void>;
|
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,EAUL,MAAM,EACN,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAQA,OAAO,EAUL,MAAM,EACN,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AASrB,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,KAAK,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AAE1C,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB,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,KAAK,EAAE,YAAY,CAAC;IACpB,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;IACf,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAwFF,wBAAsB,MAAM,CAC1B,IAAI,WAAwB,EAC5B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,MAAM,CAAC,CA8EjB;AAk6BD,wBAAsB,MAAM,CAC1B,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CAef;AA4BD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,iBAAiB,CA6CxE;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
|
@@ -8,6 +8,7 @@ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/
|
|
|
8
8
|
import { SDK_VERSION, ThingD, } from "@thingd/sdk";
|
|
9
9
|
import pc from "picocolors";
|
|
10
10
|
import { runInteractiveCli } from "./interactive.js";
|
|
11
|
+
import { deriveRestUrl } from "./lib/cloud-api.js";
|
|
11
12
|
import { readCloudConfig, resolveCloudUrl } from "./lib/cloud-config.js";
|
|
12
13
|
import { logoLine } from "./logo.js";
|
|
13
14
|
import { runMcp } from "./mcp.js";
|
|
@@ -904,6 +905,7 @@ export async function withDb(context, callback) {
|
|
|
904
905
|
url: connection.cloud ? connection.path : undefined,
|
|
905
906
|
driver: connection.driver,
|
|
906
907
|
authToken: connection.authToken,
|
|
908
|
+
instanceSlug: connection.instanceSlug,
|
|
907
909
|
});
|
|
908
910
|
try {
|
|
909
911
|
await callback(db);
|
|
@@ -936,7 +938,7 @@ function buildMemoryEvent(parsed, type) {
|
|
|
936
938
|
export function resolveConnection(context) {
|
|
937
939
|
const url = stringFlag(context.parsed, "url") ?? context.env.THINGD_URL;
|
|
938
940
|
const path = url ?? stringFlag(context.parsed, "path") ?? context.env.THINGD_PATH ?? defaultThingdDbPath();
|
|
939
|
-
|
|
941
|
+
let cloud = isCloudPath(path);
|
|
940
942
|
let driver = parseDriver(stringFlag(context.parsed, "driver") ?? context.env.THINGD_DRIVER);
|
|
941
943
|
if (!driver) {
|
|
942
944
|
if (cloud) {
|
|
@@ -949,19 +951,27 @@ export function resolveConnection(context) {
|
|
|
949
951
|
driver = "memory";
|
|
950
952
|
}
|
|
951
953
|
}
|
|
954
|
+
if (driver === "cloud") {
|
|
955
|
+
cloud = true;
|
|
956
|
+
}
|
|
952
957
|
if (!cloud && path === defaultThingdDbPath()) {
|
|
953
958
|
ensureThingdDir();
|
|
954
959
|
}
|
|
955
960
|
// Fall back to saved cloud config when no explicit URL/token is provided
|
|
956
961
|
const cloudCfg = cloud && !url ? readCloudConfig() : null;
|
|
957
|
-
const resolvedAuthToken = stringFlag(context.parsed, "auth-token") ??
|
|
962
|
+
const resolvedAuthToken = stringFlag(context.parsed, "auth-token") ??
|
|
963
|
+
context.env.THINGD_AUTH_TOKEN ??
|
|
964
|
+
cloudCfg?.apiKey ??
|
|
965
|
+
cloudCfg?.token;
|
|
958
966
|
// Prefer instanceUrl (resolved MCP endpoint) over raw cloudCfg.url (API base)
|
|
959
967
|
const resolvedCloudUrl = cloudCfg ? resolveCloudUrl(cloudCfg) : undefined;
|
|
968
|
+
const effectiveCloudUrl = resolvedCloudUrl && driver === "cloud" ? deriveRestUrl(resolvedCloudUrl) : resolvedCloudUrl;
|
|
960
969
|
return {
|
|
961
|
-
path:
|
|
970
|
+
path: effectiveCloudUrl && !url ? effectiveCloudUrl : path,
|
|
962
971
|
driver,
|
|
963
972
|
authToken: resolvedAuthToken,
|
|
964
973
|
cloud,
|
|
974
|
+
instanceSlug: cloudCfg?.instanceSlug,
|
|
965
975
|
};
|
|
966
976
|
}
|
|
967
977
|
function parseArgs(args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../src/interactive.ts"],"names":[],"mappings":"AAwmEA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+DvD"}
|
package/dist/interactive.js
CHANGED
|
@@ -406,12 +406,13 @@ async function fetchResources() {
|
|
|
406
406
|
}
|
|
407
407
|
}
|
|
408
408
|
// ── Connection helpers ───────────────────────────────────────────────
|
|
409
|
-
async function connectToDriver(selectedDriver, resolvedPath, url, token) {
|
|
409
|
+
async function connectToDriver(selectedDriver, resolvedPath, url, token, instanceSlug) {
|
|
410
410
|
db = await ThingD.open({
|
|
411
411
|
path: resolvedPath,
|
|
412
412
|
url,
|
|
413
413
|
driver: selectedDriver,
|
|
414
414
|
authToken: token,
|
|
415
|
+
instanceSlug,
|
|
415
416
|
});
|
|
416
417
|
driver = selectedDriver;
|
|
417
418
|
dbPath = resolvedPath;
|
|
@@ -1724,14 +1725,14 @@ async function handleConnect(node) {
|
|
|
1724
1725
|
cloudCfg.projectSlug = selected.projectSlug;
|
|
1725
1726
|
cloudCfg.instanceSlug = selected.instanceSlug;
|
|
1726
1727
|
writeCloudConfig(cloudCfg);
|
|
1727
|
-
await connectToDriver("cloud", deriveRestUrl(selected.mcpUrl), deriveRestUrl(selected.mcpUrl), cloudCfg.apiKey ?? cloudCfg.token);
|
|
1728
|
+
await connectToDriver("cloud", deriveRestUrl(selected.mcpUrl), deriveRestUrl(selected.mcpUrl), cloudCfg.apiKey ?? cloudCfg.token, selected.instanceSlug);
|
|
1728
1729
|
});
|
|
1729
1730
|
return;
|
|
1730
1731
|
}
|
|
1731
1732
|
// No instances found — try saved URL or show error
|
|
1732
1733
|
if (cloudCfg.instanceUrl) {
|
|
1733
1734
|
const restUrl = deriveRestUrl(cloudCfg.instanceUrl);
|
|
1734
|
-
await connectToDriver("cloud", restUrl, restUrl, cloudCfg.apiKey ?? cloudCfg.token);
|
|
1735
|
+
await connectToDriver("cloud", restUrl, restUrl, cloudCfg.apiKey ?? cloudCfg.token, cloudCfg.instanceSlug);
|
|
1735
1736
|
return;
|
|
1736
1737
|
}
|
|
1737
1738
|
viewerLines = [
|
|
@@ -1744,7 +1745,7 @@ async function handleConnect(node) {
|
|
|
1744
1745
|
catch {
|
|
1745
1746
|
if (cloudCfg.instanceUrl) {
|
|
1746
1747
|
const restUrl = deriveRestUrl(cloudCfg.instanceUrl);
|
|
1747
|
-
await connectToDriver("cloud", restUrl, restUrl, cloudCfg.apiKey ?? cloudCfg.token);
|
|
1748
|
+
await connectToDriver("cloud", restUrl, restUrl, cloudCfg.apiKey ?? cloudCfg.token, cloudCfg.instanceSlug);
|
|
1748
1749
|
return;
|
|
1749
1750
|
}
|
|
1750
1751
|
viewerLines = [
|
|
@@ -1803,6 +1804,7 @@ async function handleConnect(node) {
|
|
|
1803
1804
|
]),
|
|
1804
1805
|
], async (vals) => {
|
|
1805
1806
|
let cloudUrl;
|
|
1807
|
+
let instanceSlugVal;
|
|
1806
1808
|
if (selectedDriver === "cloud") {
|
|
1807
1809
|
if (isCloudWithConfig) {
|
|
1808
1810
|
if (!vals.project || !vals.instance) {
|
|
@@ -1810,13 +1812,14 @@ async function handleConnect(node) {
|
|
|
1810
1812
|
draw();
|
|
1811
1813
|
return;
|
|
1812
1814
|
}
|
|
1815
|
+
instanceSlugVal = vals.instance;
|
|
1813
1816
|
// Construct URL from project + instance slugs
|
|
1814
1817
|
cloudUrl = `${baseUrl}/mcp/${encodeURIComponent(vals.project)}/${encodeURIComponent(vals.instance)}`;
|
|
1815
1818
|
// Save selection to cloud config
|
|
1816
1819
|
const cfg = cloudCfg ?? { token: vals.token, url: baseUrl };
|
|
1817
1820
|
cfg.instanceUrl = cloudUrl;
|
|
1818
1821
|
cfg.projectSlug = vals.project;
|
|
1819
|
-
cfg.instanceSlug =
|
|
1822
|
+
cfg.instanceSlug = instanceSlugVal;
|
|
1820
1823
|
if (vals.token) {
|
|
1821
1824
|
cfg.token = vals.token;
|
|
1822
1825
|
}
|
|
@@ -1834,7 +1837,7 @@ async function handleConnect(node) {
|
|
|
1834
1837
|
// Save manual credentials to cloud config
|
|
1835
1838
|
writeCloudConfig({ token: vals.token || "", url: cloudUrl });
|
|
1836
1839
|
}
|
|
1837
|
-
await connectToDriver(selectedDriver, cloudUrl, cloudUrl, cloudCfg?.apiKey ?? vals.token);
|
|
1840
|
+
await connectToDriver(selectedDriver, cloudUrl, cloudUrl, cloudCfg?.apiKey ?? vals.token, instanceSlugVal);
|
|
1838
1841
|
}
|
|
1839
1842
|
else {
|
|
1840
1843
|
await connectToDriver(selectedDriver, vals.path || "", undefined, undefined);
|
|
@@ -1959,7 +1962,7 @@ export async function runInteractiveCli() {
|
|
|
1959
1962
|
if (cloudUrl) {
|
|
1960
1963
|
try {
|
|
1961
1964
|
const restUrl = deriveRestUrl(cloudUrl);
|
|
1962
|
-
await connectToDriver("cloud", restUrl, restUrl, cloudCfg.apiKey ?? cloudCfg.token);
|
|
1965
|
+
await connectToDriver("cloud", restUrl, restUrl, cloudCfg.apiKey ?? cloudCfg.token, cloudCfg.instanceSlug);
|
|
1963
1966
|
}
|
|
1964
1967
|
catch (err) {
|
|
1965
1968
|
const msg = err instanceof Error ? err.message : String(err);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thingd/cli",
|
|
3
|
-
"version": "0.52.
|
|
3
|
+
"version": "0.52.9",
|
|
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",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"cli-table3": "^0.6.5",
|
|
46
46
|
"picocolors": "^1.1.1",
|
|
47
47
|
"zod": "^4.4.3",
|
|
48
|
-
"@thingd/sdk": "0.52.
|
|
48
|
+
"@thingd/sdk": "0.52.9"
|
|
49
49
|
},
|
|
50
50
|
"engines": {
|
|
51
51
|
"node": ">=24.0.0"
|