@creator-notes/cli 0.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.
Files changed (89) hide show
  1. package/dist/cn.d.ts +3 -0
  2. package/dist/cn.d.ts.map +1 -0
  3. package/dist/cn.js +38 -0
  4. package/dist/cn.js.map +1 -0
  5. package/dist/commands/auth.d.ts +3 -0
  6. package/dist/commands/auth.d.ts.map +1 -0
  7. package/dist/commands/auth.js +184 -0
  8. package/dist/commands/auth.js.map +1 -0
  9. package/dist/commands/canvas.d.ts +3 -0
  10. package/dist/commands/canvas.d.ts.map +1 -0
  11. package/dist/commands/canvas.js +721 -0
  12. package/dist/commands/canvas.js.map +1 -0
  13. package/dist/commands/config.d.ts +3 -0
  14. package/dist/commands/config.d.ts.map +1 -0
  15. package/dist/commands/config.js +47 -0
  16. package/dist/commands/config.js.map +1 -0
  17. package/dist/commands/mcp.d.ts +3 -0
  18. package/dist/commands/mcp.d.ts.map +1 -0
  19. package/dist/commands/mcp.js +59 -0
  20. package/dist/commands/mcp.js.map +1 -0
  21. package/dist/commands/memory.d.ts +3 -0
  22. package/dist/commands/memory.d.ts.map +1 -0
  23. package/dist/commands/memory.js +145 -0
  24. package/dist/commands/memory.js.map +1 -0
  25. package/dist/commands/notes.d.ts +3 -0
  26. package/dist/commands/notes.d.ts.map +1 -0
  27. package/dist/commands/notes.js +508 -0
  28. package/dist/commands/notes.js.map +1 -0
  29. package/dist/commands/relationships.d.ts +3 -0
  30. package/dist/commands/relationships.d.ts.map +1 -0
  31. package/dist/commands/relationships.js +47 -0
  32. package/dist/commands/relationships.js.map +1 -0
  33. package/dist/commands/search.d.ts +3 -0
  34. package/dist/commands/search.d.ts.map +1 -0
  35. package/dist/commands/search.js +52 -0
  36. package/dist/commands/search.js.map +1 -0
  37. package/dist/commands/timeline.d.ts +3 -0
  38. package/dist/commands/timeline.d.ts.map +1 -0
  39. package/dist/commands/timeline.js +92 -0
  40. package/dist/commands/timeline.js.map +1 -0
  41. package/dist/commands/types.d.ts +3 -0
  42. package/dist/commands/types.d.ts.map +1 -0
  43. package/dist/commands/types.js +124 -0
  44. package/dist/commands/types.js.map +1 -0
  45. package/dist/commands/versions.d.ts +3 -0
  46. package/dist/commands/versions.d.ts.map +1 -0
  47. package/dist/commands/versions.js +104 -0
  48. package/dist/commands/versions.js.map +1 -0
  49. package/dist/commands/workspace.d.ts +3 -0
  50. package/dist/commands/workspace.d.ts.map +1 -0
  51. package/dist/commands/workspace.js +116 -0
  52. package/dist/commands/workspace.js.map +1 -0
  53. package/dist/lib/api-client.d.ts +12 -0
  54. package/dist/lib/api-client.d.ts.map +1 -0
  55. package/dist/lib/api-client.js +76 -0
  56. package/dist/lib/api-client.js.map +1 -0
  57. package/dist/lib/auth-store.d.ts +18 -0
  58. package/dist/lib/auth-store.d.ts.map +1 -0
  59. package/dist/lib/auth-store.js +54 -0
  60. package/dist/lib/auth-store.js.map +1 -0
  61. package/dist/lib/config.d.ts +26 -0
  62. package/dist/lib/config.d.ts.map +1 -0
  63. package/dist/lib/config.js +54 -0
  64. package/dist/lib/config.js.map +1 -0
  65. package/dist/lib/errors.d.ts +20 -0
  66. package/dist/lib/errors.d.ts.map +1 -0
  67. package/dist/lib/errors.js +54 -0
  68. package/dist/lib/errors.js.map +1 -0
  69. package/dist/lib/markdown-to-tiptap.d.ts +17 -0
  70. package/dist/lib/markdown-to-tiptap.d.ts.map +1 -0
  71. package/dist/lib/markdown-to-tiptap.js +228 -0
  72. package/dist/lib/markdown-to-tiptap.js.map +1 -0
  73. package/dist/lib/output.d.ts +22 -0
  74. package/dist/lib/output.d.ts.map +1 -0
  75. package/dist/lib/output.js +56 -0
  76. package/dist/lib/output.js.map +1 -0
  77. package/dist/lib/resolve-note.d.ts +7 -0
  78. package/dist/lib/resolve-note.d.ts.map +1 -0
  79. package/dist/lib/resolve-note.js +22 -0
  80. package/dist/lib/resolve-note.js.map +1 -0
  81. package/dist/lib/stdin.d.ts +5 -0
  82. package/dist/lib/stdin.d.ts.map +1 -0
  83. package/dist/lib/stdin.js +11 -0
  84. package/dist/lib/stdin.js.map +1 -0
  85. package/dist/mcp-server.d.ts +3 -0
  86. package/dist/mcp-server.d.ts.map +1 -0
  87. package/dist/mcp-server.js +508 -0
  88. package/dist/mcp-server.js.map +1 -0
  89. package/package.json +42 -0
@@ -0,0 +1,508 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { select } from "@inquirer/prompts";
3
+ import { ApiClient } from "../lib/api-client.js";
4
+ import { resolveConfig } from "../lib/config.js";
5
+ import { handleError, ValidationError } from "../lib/errors.js";
6
+ import { outputJson, outputTable, outputQuiet, timeAgo, truncate } from "../lib/output.js";
7
+ import { resolveNoteId } from "../lib/resolve-note.js";
8
+ import { readStdin } from "../lib/stdin.js";
9
+ export function registerNotesCommands(program) {
10
+ const notes = program
11
+ .command("notes")
12
+ .alias("n")
13
+ .description("Manage notes");
14
+ notes
15
+ .command("list")
16
+ .description("List notes in the current workspace")
17
+ .option("--search <query>", "Full-text search")
18
+ .option("--type <type>", "Filter by note type")
19
+ .option("--tags <tags>", "Filter by tags (comma-separated)")
20
+ .option("--pinned", "Only show pinned notes")
21
+ .option("--limit <n>", "Maximum number of results", "20")
22
+ .action(async (opts) => {
23
+ const cfg = resolveConfig(program.opts());
24
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
25
+ try {
26
+ const params = {
27
+ workspaceId: cfg.workspaceId,
28
+ search: opts.search,
29
+ types: opts.type,
30
+ tags: opts.tags,
31
+ onlyPinned: opts.pinned ? "true" : undefined,
32
+ excludeDrafts: "true",
33
+ excludeContent: "true",
34
+ };
35
+ const notesList = await api.get("/api/notes", params);
36
+ if (cfg.json) {
37
+ outputJson(notesList);
38
+ return;
39
+ }
40
+ await displayNotesList(Array.isArray(notesList) ? notesList : [], parseInt(opts.limit, 10), cfg, api, "notes found — select to view:");
41
+ }
42
+ catch (error) {
43
+ handleError(error, cfg.json);
44
+ }
45
+ });
46
+ notes
47
+ .command("get")
48
+ .description("Get a note by display ID or Convex ID")
49
+ .argument("<id>", "Note display ID (e.g., MEETING-12) or Convex ID")
50
+ .option("--all-versions", "Include all versions")
51
+ .action(async (id, opts) => {
52
+ const cfg = resolveConfig(program.opts());
53
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
54
+ try {
55
+ const params = {
56
+ workspaceId: cfg.workspaceId,
57
+ includeVersions: opts.allVersions ? "true" : undefined,
58
+ };
59
+ // Look up by exact_id (display ID or Convex ID)
60
+ const notesList = await api.get(`/api/notes`, {
61
+ ...params,
62
+ exact_id: id,
63
+ });
64
+ const note = Array.isArray(notesList) ? notesList[0] : null;
65
+ if (!note) {
66
+ console.error(`Note not found: ${id}`);
67
+ process.exit(1);
68
+ }
69
+ if (cfg.json) {
70
+ outputJson(note);
71
+ }
72
+ else {
73
+ printNote(note);
74
+ }
75
+ }
76
+ catch (error) {
77
+ handleError(error, cfg.json);
78
+ }
79
+ });
80
+ notes
81
+ .command("create")
82
+ .description("Create a new note")
83
+ .option("--type <type>", "Note type (e.g., Meeting, PRD, Idea)", "Note")
84
+ .option("--markdown <md>", "Note content as markdown (first heading or paragraph becomes the title)")
85
+ .option("--markdown-file <path>", "Read markdown content from file")
86
+ .option("--markdown-stdin", "Read markdown content from stdin")
87
+ .option("--content-file <path>", "Read TipTap JSON content from file")
88
+ .option("--content-stdin", "Read TipTap JSON content from stdin")
89
+ .option("--tags <tags>", "Tags (comma-separated)")
90
+ .option("--draft", "Create as draft")
91
+ .action(async (opts) => {
92
+ const cfg = resolveConfig(program.opts());
93
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
94
+ try {
95
+ let content = undefined;
96
+ if (opts.markdownFile) {
97
+ content = readFileSync(opts.markdownFile, "utf-8");
98
+ }
99
+ else if (opts.markdownStdin) {
100
+ content = await readStdin();
101
+ }
102
+ else if (opts.contentFile) {
103
+ const raw = readFileSync(opts.contentFile, "utf-8");
104
+ content = JSON.parse(raw);
105
+ }
106
+ else if (opts.contentStdin) {
107
+ content = JSON.parse(await readStdin());
108
+ }
109
+ else if (opts.markdown) {
110
+ content = opts.markdown; // Server converts markdown to TipTap JSON
111
+ }
112
+ if (!content) {
113
+ console.error("Content is required. Use --markdown, --markdown-file, --content-file, or --content-stdin");
114
+ process.exit(1);
115
+ }
116
+ const body = {
117
+ workspaceId: cfg.workspaceId,
118
+ type: opts.type,
119
+ content,
120
+ tags: opts.tags ? opts.tags.split(",").map((t) => t.trim()) : undefined,
121
+ isDraft: opts.draft || false,
122
+ };
123
+ const data = await api.post("/api/notes", body);
124
+ const note = data.note;
125
+ if (cfg.quiet) {
126
+ outputQuiet(String(note?.displayId || note?.id || ""));
127
+ return;
128
+ }
129
+ if (cfg.json) {
130
+ outputJson(data);
131
+ }
132
+ else {
133
+ console.log(`Created note: ${note?.displayId || note?.id}`);
134
+ if (note?.title)
135
+ console.log(`Title: ${note.title}`);
136
+ }
137
+ }
138
+ catch (error) {
139
+ handleError(error, cfg.json);
140
+ }
141
+ });
142
+ notes
143
+ .command("update")
144
+ .description("Update a note's metadata")
145
+ .argument("<id>", "Note display ID or Convex ID")
146
+ .option("--type <type>", "New note type")
147
+ .option("--tags <tags>", "New tags (comma-separated)")
148
+ .option("--archive", "Archive the note")
149
+ .option("--unarchive", "Unarchive the note")
150
+ .option("--pin", "Pin the note")
151
+ .option("--unpin", "Unpin the note")
152
+ .action(async (id, opts) => {
153
+ const cfg = resolveConfig(program.opts());
154
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
155
+ try {
156
+ // Resolve note ID — first try as display ID
157
+ const noteId = await resolveNoteId(api, cfg.workspaceId, id);
158
+ const body = {};
159
+ if (opts.type)
160
+ body.type = opts.type;
161
+ if (opts.tags)
162
+ body.tags = opts.tags.split(",").map((t) => t.trim());
163
+ if (opts.archive)
164
+ body.isArchived = true;
165
+ if (opts.unarchive)
166
+ body.isArchived = false;
167
+ if (opts.pin)
168
+ body.isPinned = true;
169
+ if (opts.unpin)
170
+ body.isPinned = false;
171
+ const data = await api.patch(`/api/notes/${noteId}`, body);
172
+ if (cfg.json) {
173
+ outputJson(data);
174
+ }
175
+ else {
176
+ console.log(`Updated note ${id}`);
177
+ }
178
+ }
179
+ catch (error) {
180
+ handleError(error, cfg.json);
181
+ }
182
+ });
183
+ notes
184
+ .command("delete")
185
+ .description("Delete (archive) a note")
186
+ .argument("<id>", "Note display ID or Convex ID")
187
+ .action(async (id) => {
188
+ const cfg = resolveConfig(program.opts());
189
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
190
+ try {
191
+ const noteId = await resolveNoteId(api, cfg.workspaceId, id);
192
+ const data = await api.delete(`/api/notes/${noteId}`);
193
+ if (cfg.json) {
194
+ outputJson(data);
195
+ }
196
+ else {
197
+ console.log(`Deleted note ${id}`);
198
+ }
199
+ }
200
+ catch (error) {
201
+ handleError(error, cfg.json);
202
+ }
203
+ });
204
+ notes
205
+ .command("bulk-archive")
206
+ .description("Archive or unarchive multiple notes in one operation")
207
+ .requiredOption("--ids <json>", "JSON array of note display IDs or Convex IDs, e.g. '[\"MEETING-1\",\"PRD-3\"]'")
208
+ .option("--unarchive", "Unarchive instead of archive")
209
+ .action(async (opts) => {
210
+ const cfg = resolveConfig(program.opts());
211
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
212
+ try {
213
+ let ids;
214
+ try {
215
+ ids = JSON.parse(opts.ids);
216
+ }
217
+ catch {
218
+ throw new ValidationError("--ids must be valid JSON array, e.g. '[\"MEETING-1\",\"PRD-3\"]'");
219
+ }
220
+ if (!Array.isArray(ids) || ids.length === 0) {
221
+ throw new ValidationError("--ids must be a non-empty JSON array of strings");
222
+ }
223
+ // Resolve display IDs to Convex IDs
224
+ const noteIds = await Promise.all(ids.map((id) => resolveNoteId(api, cfg.workspaceId, String(id))));
225
+ const isArchived = !opts.unarchive;
226
+ const data = await api.post("/api/notes/bulk", {
227
+ action: "bulkArchive",
228
+ noteIds,
229
+ isArchived,
230
+ });
231
+ if (cfg.json) {
232
+ outputJson(data);
233
+ }
234
+ else {
235
+ const results = (data.results || []);
236
+ const verb = isArchived ? "Archived" : "Unarchived";
237
+ const successStatus = isArchived ? "archived" : "unarchived";
238
+ const succeeded = results.filter((r) => r.status === successStatus).length;
239
+ const failed = results.filter((r) => r.status === "error").length;
240
+ console.log(`${verb} ${succeeded} notes${failed > 0 ? ` (${failed} failed)` : ""}`);
241
+ }
242
+ }
243
+ catch (error) {
244
+ handleError(error, cfg.json);
245
+ }
246
+ });
247
+ notes
248
+ .command("bulk-create")
249
+ .description("Create multiple interlinked notes in a single transaction")
250
+ .requiredOption("--notes <json>", "JSON array of {key, type, markdownFile} or {key, type, markdown}")
251
+ .action(async (opts) => {
252
+ const cfg = resolveConfig(program.opts());
253
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
254
+ try {
255
+ let items;
256
+ try {
257
+ items = JSON.parse(opts.notes);
258
+ }
259
+ catch {
260
+ throw new ValidationError("--notes must be valid JSON array");
261
+ }
262
+ if (!Array.isArray(items) || items.length === 0) {
263
+ throw new ValidationError("--notes must be a non-empty JSON array");
264
+ }
265
+ // Resolve markdownFile paths to content
266
+ const notes = items.map((item, i) => {
267
+ if (!item.key)
268
+ throw new ValidationError(`Item ${i}: key is required`);
269
+ if (!item.type)
270
+ throw new ValidationError(`Item ${i}: type is required`);
271
+ let markdown = item.markdown;
272
+ if (item.markdownFile) {
273
+ markdown = readFileSync(item.markdownFile, "utf-8");
274
+ }
275
+ if (!markdown) {
276
+ throw new ValidationError(`Item ${i} (${item.key}): markdown or markdownFile is required`);
277
+ }
278
+ return {
279
+ key: item.key,
280
+ type: item.type,
281
+ markdown,
282
+ tags: item.tags,
283
+ };
284
+ });
285
+ const data = await api.post("/api/notes/bulk", {
286
+ action: "bulkCreate",
287
+ workspaceId: cfg.workspaceId,
288
+ notes,
289
+ });
290
+ if (cfg.quiet) {
291
+ const results = (data.results || []);
292
+ results.forEach((r) => outputQuiet(String(r.displayId || r.noteId || "")));
293
+ return;
294
+ }
295
+ if (cfg.json) {
296
+ outputJson(data);
297
+ }
298
+ else {
299
+ const results = (data.results || []);
300
+ const relCount = data.relationshipsCreated || 0;
301
+ console.log(`Created ${results.length} notes (${relCount} relationships)`);
302
+ for (const r of results) {
303
+ console.log(` ${r.displayId}: ${r.title || "(untitled)"}`);
304
+ }
305
+ }
306
+ }
307
+ catch (error) {
308
+ handleError(error, cfg.json);
309
+ }
310
+ });
311
+ notes
312
+ .command("search")
313
+ .description("Search notes by text")
314
+ .argument("<query>", "Search query")
315
+ .option("--type <type>", "Filter by note type")
316
+ .option("--limit <n>", "Maximum results", "10")
317
+ .action(async (query, opts) => {
318
+ const cfg = resolveConfig(program.opts());
319
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
320
+ try {
321
+ const notesList = await api.get("/api/notes", {
322
+ workspaceId: cfg.workspaceId,
323
+ search: query,
324
+ types: opts.type,
325
+ excludeContent: "true",
326
+ });
327
+ if (cfg.json) {
328
+ outputJson(notesList);
329
+ return;
330
+ }
331
+ await displayNotesList(Array.isArray(notesList) ? notesList : [], parseInt(opts.limit, 10), cfg, api, "results — select to view:");
332
+ }
333
+ catch (error) {
334
+ handleError(error, cfg.json);
335
+ }
336
+ });
337
+ }
338
+ /**
339
+ * Display a list of notes with interactive selection or plain table.
340
+ */
341
+ async function displayNotesList(notesList, limit, cfg, api, message) {
342
+ const sliced = Array.isArray(notesList) ? notesList.slice(0, limit) : [];
343
+ if (sliced.length === 0) {
344
+ console.log("No notes found.");
345
+ return;
346
+ }
347
+ if (process.stdout.isTTY) {
348
+ const chosenIndex = await select({
349
+ message: `${sliced.length} ${message}`,
350
+ choices: sliced.map((n, i) => ({
351
+ name: `${String(n.displayId || "").padEnd(14)} ${truncate(String(n.title || "(untitled)"), 52).padEnd(54)} ${n.updatedAt ? timeAgo(n.updatedAt) : ""}`,
352
+ value: i,
353
+ })),
354
+ loop: true,
355
+ });
356
+ const selected = sliced[chosenIndex];
357
+ const displayId = String(selected.displayId || "");
358
+ if (displayId) {
359
+ await viewNoteInteractive(api, cfg.workspaceId, displayId);
360
+ }
361
+ return;
362
+ }
363
+ const rows = sliced.map((n) => [
364
+ String(n.displayId || ""),
365
+ truncate(String(n.title || "(untitled)"), 50),
366
+ n.updatedAt ? timeAgo(n.updatedAt) : "",
367
+ ]);
368
+ outputTable(["ID", "TITLE", "UPDATED"], rows);
369
+ }
370
+ /**
371
+ * Interactive note viewer: fetch note, then let user choose TLDR or Full Content.
372
+ * TLDR is pre-selected so double-enter from list goes straight to summary.
373
+ */
374
+ async function viewNoteInteractive(api, workspaceId, displayId) {
375
+ const noteData = await fetchNoteData(api, workspaceId, displayId);
376
+ if (!noteData) {
377
+ console.log("Could not fetch note.");
378
+ return;
379
+ }
380
+ const { note, latestVersion } = noteData;
381
+ // Print note header
382
+ console.log(`\n${note.displayId || note._id || note.id}`);
383
+ console.log(`Title: ${note.title || "(untitled)"}`);
384
+ console.log(`Type: ${note.type || "Note"}`);
385
+ if (note.tags && Array.isArray(note.tags) && note.tags.length > 0) {
386
+ console.log(`Tags: ${note.tags.join(", ")}`);
387
+ }
388
+ if (note.updatedAt) {
389
+ console.log(`Updated: ${timeAgo(note.updatedAt)}`);
390
+ }
391
+ const hasSummary = latestVersion?.searchContent || latestVersion?.summary;
392
+ const hasContent = latestVersion?.content;
393
+ if (!hasSummary && !hasContent) {
394
+ console.log("\n(no content)");
395
+ return;
396
+ }
397
+ const viewMode = await select({
398
+ message: "View:",
399
+ choices: [
400
+ { name: "TLDR", value: "tldr" },
401
+ { name: "Full Content", value: "full" },
402
+ ],
403
+ });
404
+ if (viewMode === "tldr") {
405
+ if (latestVersion?.summary) {
406
+ console.log(`\n${latestVersion.summary}`);
407
+ }
408
+ else if (hasContent) {
409
+ // No AI summary — show first ~8 lines as preview
410
+ const text = extractPlainText(hasContent);
411
+ const lines = text.split("\n").filter(Boolean);
412
+ console.log(`\n${lines.slice(0, 8).join("\n")}${lines.length > 8 ? "\n\n..." : ""}`);
413
+ }
414
+ else {
415
+ console.log("\n(no summary available)");
416
+ }
417
+ }
418
+ else {
419
+ if (hasContent) {
420
+ console.log(`\n${extractPlainText(hasContent)}`);
421
+ }
422
+ }
423
+ }
424
+ /**
425
+ * Fetch note data (metadata + latest version) by display ID.
426
+ */
427
+ async function fetchNoteData(api, workspaceId, displayId) {
428
+ try {
429
+ const notesList = await api.get("/api/notes", {
430
+ workspaceId,
431
+ exact_id: displayId,
432
+ });
433
+ const note = (Array.isArray(notesList) ? notesList : []).find((n) => n.displayId === displayId) || (Array.isArray(notesList) ? notesList[0] : null);
434
+ if (!note)
435
+ return null;
436
+ return {
437
+ note,
438
+ latestVersion: note.latestVersion || null,
439
+ };
440
+ }
441
+ catch {
442
+ return null;
443
+ }
444
+ }
445
+ function printNote(note, version) {
446
+ console.log(`\n${note.displayId || note._id || note.id}`);
447
+ console.log(`Title: ${note.title || "(untitled)"}`);
448
+ console.log(`Type: ${note.type || "Note"}`);
449
+ if (note.tags && Array.isArray(note.tags) && note.tags.length > 0) {
450
+ console.log(`Tags: ${note.tags.join(", ")}`);
451
+ }
452
+ if (note.isPinned)
453
+ console.log("Pinned: yes");
454
+ if (note.isArchived)
455
+ console.log("Archived: yes");
456
+ if (note.updatedAt) {
457
+ console.log(`Updated: ${timeAgo(note.updatedAt)}`);
458
+ }
459
+ // Print content from version or inline
460
+ const contentSource = version?.content || note.latestVersion?.content || note.content;
461
+ if (contentSource) {
462
+ const text = extractPlainText(contentSource);
463
+ if (text) {
464
+ console.log(`\n${text}`);
465
+ }
466
+ }
467
+ else {
468
+ const searchContent = note.latestVersion?.searchContent || version?.searchContent;
469
+ if (searchContent) {
470
+ console.log(`\n${searchContent}`);
471
+ }
472
+ }
473
+ }
474
+ /**
475
+ * Extract plain text from TipTap JSON content for display.
476
+ */
477
+ function extractPlainText(content) {
478
+ if (!content || typeof content !== "object")
479
+ return "";
480
+ const doc = content;
481
+ if (doc.type === "text" && doc.text)
482
+ return doc.text;
483
+ if (!Array.isArray(doc.content))
484
+ return "";
485
+ return doc.content
486
+ .map((node) => {
487
+ if (node.type === "text")
488
+ return node.text || "";
489
+ if (node.type === "heading" || node.type === "paragraph") {
490
+ return extractPlainText(node);
491
+ }
492
+ if (node.type === "bulletList" || node.type === "orderedList") {
493
+ return (node.content || [])
494
+ .map((li) => ` - ${extractPlainText(li)}`)
495
+ .join("\n");
496
+ }
497
+ if (node.type === "listItem") {
498
+ return extractPlainText(node);
499
+ }
500
+ if (node.type === "blockquote") {
501
+ return `> ${extractPlainText(node)}`;
502
+ }
503
+ return extractPlainText(node);
504
+ })
505
+ .filter(Boolean)
506
+ .join("\n");
507
+ }
508
+ //# sourceMappingURL=notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes.js","sourceRoot":"","sources":["../../src/commands/notes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerRelationshipsCommands(program: Command): void;
3
+ //# sourceMappingURL=relationships.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationships.d.ts","sourceRoot":"","sources":["../../src/commands/relationships.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkDpE"}
@@ -0,0 +1,47 @@
1
+ import { ApiClient } from "../lib/api-client.js";
2
+ import { resolveConfig } from "../lib/config.js";
3
+ import { handleError } from "../lib/errors.js";
4
+ import { outputJson, outputTable, truncate } from "../lib/output.js";
5
+ export function registerRelationshipsCommands(program) {
6
+ const rel = program
7
+ .command("relationships")
8
+ .alias("rel")
9
+ .description("Manage note relationships");
10
+ rel
11
+ .command("list")
12
+ .description("List relationships in the workspace")
13
+ .option("--note <displayId>", "Filter by note display ID")
14
+ .action(async (opts) => {
15
+ const cfg = resolveConfig(program.opts());
16
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
17
+ try {
18
+ const params = {
19
+ workspaceId: cfg.workspaceId,
20
+ };
21
+ if (opts.note) {
22
+ params.displayId = opts.note;
23
+ }
24
+ const data = await api.get("/api/relationships", params);
25
+ const list = data.relationships || data;
26
+ if (cfg.json) {
27
+ outputJson(list);
28
+ return;
29
+ }
30
+ const items = Array.isArray(list) ? list : [];
31
+ if (items.length === 0) {
32
+ console.log("No relationships found.");
33
+ return;
34
+ }
35
+ const rows = items.map((r) => [
36
+ truncate(String(r.sourceDisplayId || r.sourceNoteId || ""), 15),
37
+ String(r.relationshipType || r.type || "->"),
38
+ truncate(String(r.targetDisplayId || r.targetNoteId || ""), 15),
39
+ ]);
40
+ outputTable(["SOURCE", "TYPE", "TARGET"], rows);
41
+ }
42
+ catch (error) {
43
+ handleError(error, cfg.json);
44
+ }
45
+ });
46
+ }
47
+ //# sourceMappingURL=relationships.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationships.js","sourceRoot":"","sources":["../../src/commands/relationships.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAErE,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,MAAM,GAAG,GAAG,OAAO;SAChB,OAAO,CAAC,eAAe,CAAC;SACxB,KAAK,CAAC,KAAK,CAAC;SACZ,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAE5C,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;SACzD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAEpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAuC;gBACjD,WAAW,EAAE,GAAG,CAAC,WAAW;aAC7B,CAAC;YAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;YAC/B,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAEvB,oBAAoB,EAAE,MAAM,CAAC,CAAC;YAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;YAExC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,UAAU,CAAC,IAAI,CAAC,CAAC;gBACjB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAA0B,EAAE,EAAE,CAAC;gBACrD,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/D,MAAM,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;gBAC5C,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;aAChE,CAAC,CAAC;YACH,WAAW,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerSearchCommands(program: Command): void;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqD7D"}
@@ -0,0 +1,52 @@
1
+ import { ApiClient } from "../lib/api-client.js";
2
+ import { resolveConfig } from "../lib/config.js";
3
+ import { handleError } from "../lib/errors.js";
4
+ import { outputJson, outputTable, truncate } from "../lib/output.js";
5
+ export function registerSearchCommands(program) {
6
+ const search = program
7
+ .command("search")
8
+ .alias("s")
9
+ .description("Search notes");
10
+ search
11
+ .command("semantic")
12
+ .description("Semantic (vector) search across notes")
13
+ .argument("<query>", "Search query")
14
+ .option("--limit <n>", "Maximum results", "10")
15
+ .option("--canvas <canvasId>", "Scope search to notes on a canvas")
16
+ .action(async (query, opts) => {
17
+ const cfg = resolveConfig(program.opts());
18
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
19
+ try {
20
+ const data = await api.post("/api/semantic-search", {
21
+ query,
22
+ workspaceId: cfg.workspaceId,
23
+ limit: parseInt(opts.limit, 10),
24
+ ...(opts.canvas ? { canvasId: opts.canvas } : {}),
25
+ });
26
+ const results = data.results || data;
27
+ if (cfg.json) {
28
+ outputJson(results);
29
+ return;
30
+ }
31
+ const items = Array.isArray(results) ? results : [];
32
+ if (items.length === 0) {
33
+ console.log("No results found.");
34
+ return;
35
+ }
36
+ const rows = items.map((r) => {
37
+ const note = (r.note || r);
38
+ const score = r.score !== undefined ? Number(r.score).toFixed(2) : "";
39
+ return [
40
+ String(note.displayId || r.displayId || ""),
41
+ truncate(String(note.title || r.title || "(untitled)"), 40),
42
+ score,
43
+ ];
44
+ });
45
+ outputTable(["ID", "TITLE", "SCORE"], rows);
46
+ }
47
+ catch (error) {
48
+ handleError(error, cfg.json);
49
+ }
50
+ });
51
+ }
52
+ //# sourceMappingURL=search.js.map