@heyditto/cli 0.1.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,8 +1,11 @@
1
1
  #!/usr/bin/env node
2
+ import { spawn } from "node:child_process";
3
+ import { createInterface } from "node:readline/promises";
2
4
  import { parseArgs } from "node:util";
3
5
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
4
6
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
5
- import { apiBaseURL, apiKey, mcpServerURL, newKeyURL, packageName, packageVersion, } from "./config.js";
7
+ import { apiBaseURL, authFilePath, mcpServerURL, newKeyURL, packageName, packageVersion, resolveApiKey, } from "./config.js";
8
+ import { clearStoredKey, writeStoredKey } from "./store.js";
6
9
  function usage() {
7
10
  return `${packageName} ${packageVersion}
8
11
 
@@ -13,19 +16,31 @@ Usage:
13
16
  ditto subjects <query> [--top-k <n>]
14
17
  ditto memories <subject-id>...
15
18
  ditto network <pair-id> [--limit <n>]
16
- ditto status
17
- ditto config
18
- ditto help
19
+
20
+ Auth:
21
+ ditto login [<key>] [--paste] [--stdin] Save an API key to ${authFilePath()}
22
+ ditto logout Delete the saved key
23
+ ditto status Show endpoint, key source, live tools
24
+ ditto config Print MCP client config snippet
25
+
26
+ Other:
27
+ ditto help Show this message
19
28
 
20
29
  Environment:
21
- DITTO_API_KEY Required. Get one at ${newKeyURL()}.
30
+ DITTO_API_KEY Optional override (takes precedence over the saved key).
31
+ Get one at ${newKeyURL()}.
22
32
  DITTO_API_BASE Optional. Defaults to https://api.heyditto.ai.
33
+ DITTO_CONFIG_DIR Optional. Defaults to $XDG_CONFIG_HOME/heyditto/cli or
34
+ ~/.config/heyditto/cli.
23
35
  `;
24
36
  }
25
37
  async function getClient() {
26
- const key = apiKey();
38
+ const { key, source } = await resolveApiKey();
27
39
  if (!key) {
28
- process.stderr.write(`error: DITTO_API_KEY is not set.\nGet a key at ${newKeyURL()}, then export DITTO_API_KEY=ditto_mcp_…\n`);
40
+ process.stderr.write(`error: no Ditto API key configured.\n\n` +
41
+ ` 1. Get a key at ${newKeyURL()}\n` +
42
+ ` 2. Save it with: ditto login <key>\n` +
43
+ ` (or export DITTO_API_KEY=ditto_mcp_…)\n`);
29
44
  process.exit(1);
30
45
  }
31
46
  const client = new Client({ name: packageName, version: packageVersion });
@@ -34,7 +49,14 @@ async function getClient() {
34
49
  headers: { Authorization: `Bearer ${key}` },
35
50
  },
36
51
  });
37
- await client.connect(transport);
52
+ try {
53
+ await client.connect(transport);
54
+ }
55
+ catch (err) {
56
+ process.stderr.write(`error: failed to connect to ${mcpServerURL()} (key source: ${source}).\n` +
57
+ `${err instanceof Error ? err.message : String(err)}\n`);
58
+ process.exit(1);
59
+ }
38
60
  return client;
39
61
  }
40
62
  async function callAndPrint(name, args) {
@@ -58,6 +80,80 @@ function requirePositionals(positionals, minimum, label) {
58
80
  throw new Error(`${label}: expected at least ${minimum} argument(s), got ${positionals.length}`);
59
81
  }
60
82
  }
83
+ async function readKeyFromStdin() {
84
+ return new Promise((resolve, reject) => {
85
+ let buf = "";
86
+ process.stdin.setEncoding("utf-8");
87
+ process.stdin.on("data", (chunk) => (buf += chunk));
88
+ process.stdin.on("end", () => resolve(buf));
89
+ process.stdin.on("error", reject);
90
+ });
91
+ }
92
+ async function promptForKey(message) {
93
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
94
+ try {
95
+ return await rl.question(message);
96
+ }
97
+ finally {
98
+ rl.close();
99
+ }
100
+ }
101
+ function openInBrowser(url) {
102
+ const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "cmd" : "xdg-open";
103
+ const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
104
+ const child = spawn(cmd, args, { stdio: "ignore", detached: true });
105
+ child.on("error", () => {
106
+ /* swallow — best-effort */
107
+ });
108
+ child.unref();
109
+ }
110
+ async function cmdLogin(rest) {
111
+ const { values, positionals } = parseArgs({
112
+ args: rest,
113
+ options: {
114
+ paste: { type: "boolean", default: false },
115
+ stdin: { type: "boolean", default: false },
116
+ },
117
+ allowPositionals: true,
118
+ });
119
+ let key = positionals[0]?.trim();
120
+ if (!key && values.stdin) {
121
+ key = (await readKeyFromStdin()).trim();
122
+ }
123
+ else if (!key) {
124
+ if (values.paste) {
125
+ process.stderr.write(`Opening ${newKeyURL()} in your browser…\n`);
126
+ openInBrowser(newKeyURL());
127
+ }
128
+ if (!process.stdin.isTTY) {
129
+ throw new Error(`no key provided and stdin is not a TTY. Pass the key as an argument or pipe it via --stdin.`);
130
+ }
131
+ key = (await promptForKey(`Paste your Ditto API key (from ${newKeyURL()}): `)).trim();
132
+ }
133
+ if (!key)
134
+ throw new Error("no key provided");
135
+ if (!key.startsWith("ditto_mcp_")) {
136
+ process.stderr.write(`warning: key does not start with "ditto_mcp_" — proceeding anyway\n`);
137
+ }
138
+ await writeStoredKey(key);
139
+ process.stdout.write(`Saved key to ${authFilePath()}\n`);
140
+ if (process.env.DITTO_API_KEY) {
141
+ process.stderr.write(`note: DITTO_API_KEY is set in your environment and will override the saved key for this session.\n`);
142
+ }
143
+ process.stdout.write(`Run 'ditto status' to verify.\n`);
144
+ }
145
+ async function cmdLogout() {
146
+ const removed = await clearStoredKey();
147
+ if (removed) {
148
+ process.stdout.write(`Removed ${authFilePath()}\n`);
149
+ }
150
+ else {
151
+ process.stdout.write(`No saved key found at ${authFilePath()}\n`);
152
+ }
153
+ if (process.env.DITTO_API_KEY) {
154
+ process.stderr.write(`note: DITTO_API_KEY is still set in your environment and will continue to be used.\n`);
155
+ }
156
+ }
61
157
  async function cmdSave(rest) {
62
158
  const { values, positionals } = parseArgs({
63
159
  args: rest,
@@ -75,29 +171,19 @@ async function cmdSave(rest) {
75
171
  });
76
172
  }
77
173
  async function cmdSearch(rest) {
78
- const { positionals } = parseArgs({
79
- args: rest,
80
- options: {},
81
- allowPositionals: true,
82
- });
174
+ const { positionals } = parseArgs({ args: rest, options: {}, allowPositionals: true });
83
175
  requirePositionals(positionals, 1, "search");
84
176
  await callAndPrint("search_memories", { queries: positionals });
85
177
  }
86
178
  async function cmdFetch(rest) {
87
- const { positionals } = parseArgs({
88
- args: rest,
89
- options: {},
90
- allowPositionals: true,
91
- });
179
+ const { positionals } = parseArgs({ args: rest, options: {}, allowPositionals: true });
92
180
  requirePositionals(positionals, 1, "fetch");
93
181
  await callAndPrint("fetch_memories", { pairIds: positionals });
94
182
  }
95
183
  async function cmdSubjects(rest) {
96
184
  const { values, positionals } = parseArgs({
97
185
  args: rest,
98
- options: {
99
- "top-k": { type: "string" },
100
- },
186
+ options: { "top-k": { type: "string" } },
101
187
  allowPositionals: true,
102
188
  });
103
189
  requirePositionals(positionals, 1, "subjects");
@@ -111,20 +197,14 @@ async function cmdSubjects(rest) {
111
197
  await callAndPrint("search_subjects", args);
112
198
  }
113
199
  async function cmdMemories(rest) {
114
- const { positionals } = parseArgs({
115
- args: rest,
116
- options: {},
117
- allowPositionals: true,
118
- });
200
+ const { positionals } = parseArgs({ args: rest, options: {}, allowPositionals: true });
119
201
  requirePositionals(positionals, 1, "memories");
120
202
  await callAndPrint("search_memories_in_subjects", { subjectIds: positionals });
121
203
  }
122
204
  async function cmdNetwork(rest) {
123
205
  const { values, positionals } = parseArgs({
124
206
  args: rest,
125
- options: {
126
- limit: { type: "string" },
127
- },
207
+ options: { limit: { type: "string" } },
128
208
  allowPositionals: true,
129
209
  });
130
210
  requirePositionals(positionals, 1, "network");
@@ -138,14 +218,14 @@ async function cmdNetwork(rest) {
138
218
  await callAndPrint("get_memory_network", args);
139
219
  }
140
220
  async function cmdStatus() {
141
- const key = apiKey();
221
+ const { key, source } = await resolveApiKey();
142
222
  const lines = [
143
223
  `${packageName} ${packageVersion}`,
144
224
  `endpoint: ${mcpServerURL()}`,
145
- `api key: ${key ? "set" : "MISSING (export DITTO_API_KEY)"}`,
225
+ `api key: ${key ? "set" : "MISSING"} (source: ${source})`,
146
226
  ];
147
227
  if (!key) {
148
- lines.push(`new key: ${newKeyURL()}`);
228
+ lines.push(``, `Get a key at ${newKeyURL()} and run 'ditto login <key>'.`);
149
229
  process.stdout.write(`${lines.join("\n")}\n`);
150
230
  process.exitCode = 1;
151
231
  return;
@@ -171,15 +251,10 @@ function cmdConfig() {
171
251
  mcpServers: {
172
252
  ditto: {
173
253
  url: mcpServerURL(),
174
- headers: {
175
- Authorization: "Bearer ${DITTO_API_KEY}",
176
- },
254
+ headers: { Authorization: "Bearer ${DITTO_API_KEY}" },
177
255
  },
178
256
  },
179
- notes: {
180
- apiBase: apiBaseURL(),
181
- newKey: newKeyURL(),
182
- },
257
+ notes: { apiBase: apiBaseURL(), newKey: newKeyURL() },
183
258
  };
184
259
  process.stdout.write(`${JSON.stringify(config, null, 2)}\n`);
185
260
  }
@@ -206,6 +281,12 @@ async function main() {
206
281
  case "network":
207
282
  await cmdNetwork(rest);
208
283
  return;
284
+ case "login":
285
+ await cmdLogin(rest);
286
+ return;
287
+ case "logout":
288
+ await cmdLogout();
289
+ return;
209
290
  case "status":
210
291
  await cmdStatus();
211
292
  return;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,6 +1,13 @@
1
1
  export declare const packageName = "@heyditto/cli";
2
- export declare const packageVersion = "0.1.0";
2
+ export declare const packageVersion = "1.0.0";
3
3
  export declare function apiBaseURL(): string;
4
4
  export declare function mcpServerURL(): string;
5
- export declare function apiKey(): string | undefined;
5
+ export declare function configDir(): string;
6
+ export declare function authFilePath(): string;
6
7
  export declare function newKeyURL(): string;
8
+ export type ApiKeySource = "env" | "config" | "none";
9
+ export interface ResolvedKey {
10
+ key?: string;
11
+ source: ApiKeySource;
12
+ }
13
+ export declare function resolveApiKey(): Promise<ResolvedKey>;
package/dist/config.js CHANGED
@@ -1,15 +1,33 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ import { readStoredKey } from "./store.js";
1
4
  export const packageName = "@heyditto/cli";
2
- export const packageVersion = "0.1.0";
5
+ export const packageVersion = "1.0.0";
3
6
  export function apiBaseURL() {
4
7
  return (process.env.DITTO_API_BASE || "https://api.heyditto.ai").replace(/\/+$/, "");
5
8
  }
6
9
  export function mcpServerURL() {
7
10
  return `${apiBaseURL()}/mcp`;
8
11
  }
9
- export function apiKey() {
10
- return process.env.DITTO_API_KEY;
12
+ export function configDir() {
13
+ if (process.env.DITTO_CONFIG_DIR)
14
+ return process.env.DITTO_CONFIG_DIR;
15
+ const base = process.env.XDG_CONFIG_HOME || path.join(os.homedir(), ".config");
16
+ return path.join(base, "heyditto", "cli");
17
+ }
18
+ export function authFilePath() {
19
+ return path.join(configDir(), "config.json");
11
20
  }
12
21
  export function newKeyURL() {
13
22
  return "https://app.heyditto.ai/mcp/newkey";
14
23
  }
24
+ export async function resolveApiKey() {
25
+ const envKey = process.env.DITTO_API_KEY?.trim();
26
+ if (envKey)
27
+ return { key: envKey, source: "env" };
28
+ const stored = await readStoredKey();
29
+ if (stored)
30
+ return { key: stored, source: "config" };
31
+ return { source: "none" };
32
+ }
15
33
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,yBAAyB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,GAAG,UAAU,EAAE,MAAM,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,oCAAoC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;AAC3C,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,yBAAyB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,GAAG,UAAU,EAAE,MAAM,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC/E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,oCAAoC,CAAC;AAC9C,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,MAAM;QAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,IAAI,MAAM;QAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function readStoredKey(): Promise<string | undefined>;
2
+ export declare function writeStoredKey(key: string): Promise<void>;
3
+ export declare function clearStoredKey(): Promise<boolean>;
package/dist/store.js ADDED
@@ -0,0 +1,38 @@
1
+ import { chmod, mkdir, readFile, rm, writeFile } from "node:fs/promises";
2
+ import { dirname } from "node:path";
3
+ import { authFilePath } from "./config.js";
4
+ export async function readStoredKey() {
5
+ try {
6
+ const raw = await readFile(authFilePath(), "utf-8");
7
+ const parsed = JSON.parse(raw);
8
+ const key = parsed.apiKey?.trim();
9
+ return key && key.length > 0 ? key : undefined;
10
+ }
11
+ catch (err) {
12
+ if (err.code === "ENOENT")
13
+ return undefined;
14
+ throw err;
15
+ }
16
+ }
17
+ export async function writeStoredKey(key) {
18
+ const cleaned = key.trim();
19
+ if (!cleaned)
20
+ throw new Error("refusing to store empty api key");
21
+ const path = authFilePath();
22
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
23
+ await writeFile(path, `${JSON.stringify({ apiKey: cleaned }, null, 2)}\n`, { mode: 0o600 });
24
+ // chmod again so existing files inherit 0o600 even if writeFile reused mode.
25
+ await chmod(path, 0o600);
26
+ }
27
+ export async function clearStoredKey() {
28
+ try {
29
+ await rm(authFilePath());
30
+ return true;
31
+ }
32
+ catch (err) {
33
+ if (err.code === "ENOENT")
34
+ return false;
35
+ throw err;
36
+ }
37
+ }
38
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAClC,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACvE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5F,6EAA6E;IAC7E,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACnE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heyditto/cli",
3
- "version": "0.1.0",
3
+ "version": "1.1.0",
4
4
  "description": "Ditto Memory CLI — save, search, fetch, and traverse the Ditto memory graph from the shell.",
5
5
  "type": "module",
6
6
  "bin": {