@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.
- package/dist/cn.d.ts +3 -0
- package/dist/cn.d.ts.map +1 -0
- package/dist/cn.js +38 -0
- package/dist/cn.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +184 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/canvas.d.ts +3 -0
- package/dist/commands/canvas.d.ts.map +1 -0
- package/dist/commands/canvas.js +721 -0
- package/dist/commands/canvas.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +47 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +59 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/memory.d.ts +3 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +145 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/notes.d.ts +3 -0
- package/dist/commands/notes.d.ts.map +1 -0
- package/dist/commands/notes.js +508 -0
- package/dist/commands/notes.js.map +1 -0
- package/dist/commands/relationships.d.ts +3 -0
- package/dist/commands/relationships.d.ts.map +1 -0
- package/dist/commands/relationships.js +47 -0
- package/dist/commands/relationships.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +52 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/timeline.d.ts +3 -0
- package/dist/commands/timeline.d.ts.map +1 -0
- package/dist/commands/timeline.js +92 -0
- package/dist/commands/timeline.js.map +1 -0
- package/dist/commands/types.d.ts +3 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +124 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/versions.d.ts +3 -0
- package/dist/commands/versions.d.ts.map +1 -0
- package/dist/commands/versions.js +104 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/commands/workspace.d.ts +3 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +116 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/lib/api-client.d.ts +12 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +76 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth-store.d.ts +18 -0
- package/dist/lib/auth-store.d.ts.map +1 -0
- package/dist/lib/auth-store.js +54 -0
- package/dist/lib/auth-store.js.map +1 -0
- package/dist/lib/config.d.ts +26 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +54 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/errors.d.ts +20 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +54 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/markdown-to-tiptap.d.ts +17 -0
- package/dist/lib/markdown-to-tiptap.d.ts.map +1 -0
- package/dist/lib/markdown-to-tiptap.js +228 -0
- package/dist/lib/markdown-to-tiptap.js.map +1 -0
- package/dist/lib/output.d.ts +22 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +56 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/resolve-note.d.ts +7 -0
- package/dist/lib/resolve-note.d.ts.map +1 -0
- package/dist/lib/resolve-note.js +22 -0
- package/dist/lib/resolve-note.js.map +1 -0
- package/dist/lib/stdin.d.ts +5 -0
- package/dist/lib/stdin.d.ts.map +1 -0
- package/dist/lib/stdin.js +11 -0
- package/dist/lib/stdin.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +508 -0
- package/dist/mcp-server.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../../src/commands/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoEpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE/D"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { ApiClient } from "../lib/api-client.js";
|
|
2
|
+
import { resolveConfig } from "../lib/config.js";
|
|
3
|
+
import { handleError, ValidationError } from "../lib/errors.js";
|
|
4
|
+
import { outputJson, outputTable, timeAgo, truncate } from "../lib/output.js";
|
|
5
|
+
const DURATION_UNITS = {
|
|
6
|
+
m: 60_000,
|
|
7
|
+
h: 3_600_000,
|
|
8
|
+
d: 86_400_000,
|
|
9
|
+
w: 604_800_000,
|
|
10
|
+
};
|
|
11
|
+
function parseDateInput(input) {
|
|
12
|
+
// Relative shorthand: 7d, 3h, 30m, 2w
|
|
13
|
+
const rel = input.match(/^(\d+)([mhdw])$/);
|
|
14
|
+
if (rel) {
|
|
15
|
+
const amount = parseInt(rel[1], 10);
|
|
16
|
+
const unit = rel[2];
|
|
17
|
+
return Date.now() - amount * DURATION_UNITS[unit];
|
|
18
|
+
}
|
|
19
|
+
// Unix ms timestamp
|
|
20
|
+
if (/^\d{10,13}$/.test(input)) {
|
|
21
|
+
const n = parseInt(input, 10);
|
|
22
|
+
return input.length <= 10 ? n * 1000 : n;
|
|
23
|
+
}
|
|
24
|
+
// Reject short ambiguous strings (e.g. "7" parses as Jan 7 2001)
|
|
25
|
+
if (input.length < 6) {
|
|
26
|
+
throw new ValidationError(`Invalid date: "${input}". Use relative (7d, 2w), ISO date (2026-03-21), or unix ms.`);
|
|
27
|
+
}
|
|
28
|
+
// ISO / calendar date
|
|
29
|
+
const ms = new Date(input).getTime();
|
|
30
|
+
if (isNaN(ms)) {
|
|
31
|
+
throw new ValidationError(`Invalid date: "${input}". Use relative (7d, 2w), ISO date (2026-03-21), or unix ms.`);
|
|
32
|
+
}
|
|
33
|
+
return ms;
|
|
34
|
+
}
|
|
35
|
+
export function registerTimelineCommands(program) {
|
|
36
|
+
program
|
|
37
|
+
.command("timeline")
|
|
38
|
+
.alias("tl")
|
|
39
|
+
.description("Show recent changes across notes")
|
|
40
|
+
.option("--since <when>", "Start of range (e.g. 7d, 2w, 2026-03-21)", "7d")
|
|
41
|
+
.option("--until <when>", "End of range (default: now)")
|
|
42
|
+
.option("--type <noteType>", "Filter by note type (comma-separated, e.g. Meeting,Decision)")
|
|
43
|
+
.option("--note <filter>", "Filter by note ID or title substring")
|
|
44
|
+
.option("--limit <n>", "Max results (1-100)", "50")
|
|
45
|
+
.action(async (opts) => {
|
|
46
|
+
const cfg = resolveConfig(program.opts());
|
|
47
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
48
|
+
try {
|
|
49
|
+
const sinceMs = parseDateInput(opts.since);
|
|
50
|
+
const untilMs = opts.until ? parseDateInput(opts.until) : undefined;
|
|
51
|
+
const limit = Math.max(1, Math.min(100, parseInt(opts.limit, 10) || 50));
|
|
52
|
+
const params = {
|
|
53
|
+
workspaceId: cfg.workspaceId,
|
|
54
|
+
afterTimestamp: String(sinceMs),
|
|
55
|
+
beforeTimestamp: untilMs ? String(untilMs) : undefined,
|
|
56
|
+
limit: String(limit),
|
|
57
|
+
noteTypes: opts.type,
|
|
58
|
+
noteFilter: opts.note,
|
|
59
|
+
};
|
|
60
|
+
const data = await api.get("/api/timeline", params);
|
|
61
|
+
if (cfg.json) {
|
|
62
|
+
outputJson(data);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (cfg.quiet) {
|
|
66
|
+
for (const item of data.items) {
|
|
67
|
+
console.log(item.versionId);
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (data.items.length === 0) {
|
|
72
|
+
console.log("No changes found in the specified time range.");
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const rows = data.items.map((item) => [
|
|
76
|
+
item.note.displayId,
|
|
77
|
+
`v${item.versionNumber}`,
|
|
78
|
+
truncate(item.changeDescription || "(no description)", 50),
|
|
79
|
+
timeAgo(item.createdAtRaw),
|
|
80
|
+
]);
|
|
81
|
+
outputTable(["NOTE", "V#", "CHANGE", "WHEN"], rows);
|
|
82
|
+
const typeSummary = Object.entries(data.summary.byType)
|
|
83
|
+
.map(([type, count]) => `${type}: ${count}`)
|
|
84
|
+
.join(", ");
|
|
85
|
+
console.log(`\n${data.summary.totalChanges} changes across ${data.summary.uniqueNotes} notes (${typeSummary})`);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
handleError(error, cfg.json);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/commands/timeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6H5D"}
|
|
@@ -0,0 +1,124 @@
|
|
|
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, outputQuiet } from "../lib/output.js";
|
|
5
|
+
export function registerTypesCommands(program) {
|
|
6
|
+
const types = program
|
|
7
|
+
.command("types")
|
|
8
|
+
.alias("t")
|
|
9
|
+
.description("Manage note types (supertags)");
|
|
10
|
+
types
|
|
11
|
+
.command("list")
|
|
12
|
+
.description("List note types in the current workspace")
|
|
13
|
+
.action(async () => {
|
|
14
|
+
const cfg = resolveConfig(program.opts());
|
|
15
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
16
|
+
try {
|
|
17
|
+
const data = await api.get("/api/supertags", {
|
|
18
|
+
workspaceId: cfg.workspaceId,
|
|
19
|
+
});
|
|
20
|
+
const list = Array.isArray(data) ? data : [];
|
|
21
|
+
if (cfg.json) {
|
|
22
|
+
outputJson(list);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (list.length === 0) {
|
|
26
|
+
console.log("No types found.");
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const rows = list.map((s) => [
|
|
30
|
+
String(s.name || ""),
|
|
31
|
+
String(s.prefix || ""),
|
|
32
|
+
s.displayName !== s.name ? String(s.displayName || "") : "",
|
|
33
|
+
s.color ? String(s.color) : "",
|
|
34
|
+
s.isBuiltIn ? "yes" : "",
|
|
35
|
+
]);
|
|
36
|
+
outputTable(["NAME", "PREFIX", "DISPLAY NAME", "COLOR", "BUILT-IN"], rows);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
handleError(error, cfg.json);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
types
|
|
43
|
+
.command("create")
|
|
44
|
+
.description("Create a new note type")
|
|
45
|
+
.argument("<name>", "Type name (no spaces, e.g., PainPoint, UserStory)")
|
|
46
|
+
.option("--display-name <name>", "Display name (can have spaces)")
|
|
47
|
+
.option("--prefix <prefix>", "ID prefix (uppercase, e.g., PP, US)")
|
|
48
|
+
.option("--description <desc>", "Description")
|
|
49
|
+
.option("--color <color>", "Color hex code (e.g., #FF5733)")
|
|
50
|
+
.action(async (name, opts) => {
|
|
51
|
+
const cfg = resolveConfig(program.opts());
|
|
52
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
53
|
+
// Validate no spaces in name
|
|
54
|
+
if (/\s/.test(name)) {
|
|
55
|
+
console.error(`Error: Type name cannot contain spaces. Use PascalCase (e.g., "PainPoint" instead of "Pain Point").`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const data = await api.post("/api/supertags", {
|
|
60
|
+
workspaceId: cfg.workspaceId,
|
|
61
|
+
name,
|
|
62
|
+
displayName: opts.displayName,
|
|
63
|
+
prefix: opts.prefix,
|
|
64
|
+
description: opts.description,
|
|
65
|
+
color: opts.color,
|
|
66
|
+
});
|
|
67
|
+
if (cfg.quiet) {
|
|
68
|
+
outputQuiet(String(data.id || ""));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (cfg.json) {
|
|
72
|
+
outputJson(data);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
const displayName = opts.displayName ? ` (${opts.displayName})` : "";
|
|
76
|
+
console.log(`Created type: ${name}${displayName}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
handleError(error, cfg.json);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
types
|
|
84
|
+
.command("update")
|
|
85
|
+
.description("Update a note type")
|
|
86
|
+
.argument("<name>", "Type name to update")
|
|
87
|
+
.option("--display-name <name>", "New display name")
|
|
88
|
+
.option("--prefix <prefix>", "New ID prefix (uppercase)")
|
|
89
|
+
.option("--description <desc>", "New description")
|
|
90
|
+
.option("--color <color>", "Color hex code (e.g., #FF5733)")
|
|
91
|
+
.action(async (name, opts) => {
|
|
92
|
+
const cfg = resolveConfig(program.opts());
|
|
93
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
94
|
+
try {
|
|
95
|
+
const body = {
|
|
96
|
+
workspaceId: cfg.workspaceId,
|
|
97
|
+
name,
|
|
98
|
+
};
|
|
99
|
+
if (opts.displayName)
|
|
100
|
+
body.displayName = opts.displayName;
|
|
101
|
+
if (opts.prefix)
|
|
102
|
+
body.prefix = opts.prefix;
|
|
103
|
+
if (opts.description)
|
|
104
|
+
body.description = opts.description;
|
|
105
|
+
if (opts.color)
|
|
106
|
+
body.color = opts.color;
|
|
107
|
+
if (Object.keys(body).length === 2) {
|
|
108
|
+
console.error("Error: No update flags provided. Use --display-name, --prefix, --description, or --color.");
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
const data = await api.patch("/api/supertags", body);
|
|
112
|
+
if (cfg.json) {
|
|
113
|
+
outputJson(data);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
console.log(`Updated type: ${name}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
handleError(error, cfg.json);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/commands/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../src/commands/versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwG/D"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { ApiClient } from "../lib/api-client.js";
|
|
3
|
+
import { resolveConfig } from "../lib/config.js";
|
|
4
|
+
import { handleError } from "../lib/errors.js";
|
|
5
|
+
import { outputJson, outputTable, timeAgo } from "../lib/output.js";
|
|
6
|
+
import { resolveNoteId } from "../lib/resolve-note.js";
|
|
7
|
+
import { readStdin } from "../lib/stdin.js";
|
|
8
|
+
export function registerVersionsCommands(program) {
|
|
9
|
+
const versions = program
|
|
10
|
+
.command("versions")
|
|
11
|
+
.alias("v")
|
|
12
|
+
.description("Manage note versions");
|
|
13
|
+
versions
|
|
14
|
+
.command("list")
|
|
15
|
+
.description("List versions of a note")
|
|
16
|
+
.argument("<noteId>", "Note display ID or Convex ID")
|
|
17
|
+
.action(async (noteId) => {
|
|
18
|
+
const cfg = resolveConfig(program.opts());
|
|
19
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
20
|
+
try {
|
|
21
|
+
// Get note with versions
|
|
22
|
+
const notesList = await api.get(`/api/notes`, {
|
|
23
|
+
workspaceId: cfg.workspaceId,
|
|
24
|
+
exact_id: noteId,
|
|
25
|
+
includeVersions: "true",
|
|
26
|
+
});
|
|
27
|
+
const note = Array.isArray(notesList) ? notesList[0] : null;
|
|
28
|
+
if (!note) {
|
|
29
|
+
console.error(`Note not found: ${noteId}`);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
const versionsList = (note.versions || []);
|
|
33
|
+
if (cfg.json) {
|
|
34
|
+
outputJson(versionsList);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (versionsList.length === 0) {
|
|
38
|
+
console.log("No versions found.");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const rows = versionsList.map((v) => [
|
|
42
|
+
String(v.versionNumber || ""),
|
|
43
|
+
v.isLatest ? "*" : "",
|
|
44
|
+
String(v.changeDescription || ""),
|
|
45
|
+
v.createdAt ? timeAgo(v.createdAt) : "",
|
|
46
|
+
]);
|
|
47
|
+
outputTable(["VERSION", "LATEST", "DESCRIPTION", "CREATED"], rows);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
handleError(error, cfg.json);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
versions
|
|
54
|
+
.command("create")
|
|
55
|
+
.description("Create a new version of a note")
|
|
56
|
+
.argument("<noteId>", "Note display ID or Convex ID")
|
|
57
|
+
.option("--markdown <md>", "Content as markdown")
|
|
58
|
+
.option("--markdown-file <path>", "Read markdown content from file")
|
|
59
|
+
.option("--markdown-stdin", "Read markdown content from stdin")
|
|
60
|
+
.option("--content-file <path>", "Read TipTap JSON from file")
|
|
61
|
+
.option("--content-stdin", "Read TipTap JSON from stdin")
|
|
62
|
+
.requiredOption("--description <text>", "Change description (required)")
|
|
63
|
+
.action(async (noteId, opts) => {
|
|
64
|
+
const cfg = resolveConfig(program.opts());
|
|
65
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
66
|
+
try {
|
|
67
|
+
let content = undefined;
|
|
68
|
+
if (opts.markdownFile) {
|
|
69
|
+
content = readFileSync(opts.markdownFile, "utf-8");
|
|
70
|
+
}
|
|
71
|
+
else if (opts.markdownStdin) {
|
|
72
|
+
content = await readStdin();
|
|
73
|
+
}
|
|
74
|
+
else if (opts.contentFile) {
|
|
75
|
+
content = JSON.parse(readFileSync(opts.contentFile, "utf-8"));
|
|
76
|
+
}
|
|
77
|
+
else if (opts.contentStdin) {
|
|
78
|
+
content = JSON.parse(await readStdin());
|
|
79
|
+
}
|
|
80
|
+
else if (opts.markdown) {
|
|
81
|
+
content = opts.markdown; // Server converts markdown to TipTap JSON
|
|
82
|
+
}
|
|
83
|
+
if (!content) {
|
|
84
|
+
throw new Error("Content is required. Use --markdown, --markdown-file, --content-file, or --content-stdin");
|
|
85
|
+
}
|
|
86
|
+
// Resolve note ID if it's a display ID
|
|
87
|
+
const resolvedId = await resolveNoteId(api, cfg.workspaceId, noteId);
|
|
88
|
+
const data = await api.post(`/api/notes/${resolvedId}/versions`, {
|
|
89
|
+
content,
|
|
90
|
+
description: opts.description,
|
|
91
|
+
});
|
|
92
|
+
if (cfg.json) {
|
|
93
|
+
outputJson(data);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.log(`Created version ${data.versionNumber || "new"} for ${noteId}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
handleError(error, cfg.json);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/commands/versions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6GhE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { select } from "@inquirer/prompts";
|
|
2
|
+
import { ApiClient } from "../lib/api-client.js";
|
|
3
|
+
import { resolveBaseConfig } from "../lib/config.js";
|
|
4
|
+
import { loadConfig, setWorkspaceId } from "../lib/auth-store.js";
|
|
5
|
+
import { handleError, AuthError } from "../lib/errors.js";
|
|
6
|
+
import { outputJson, outputTable } from "../lib/output.js";
|
|
7
|
+
export function registerWorkspaceCommands(program) {
|
|
8
|
+
const ws = program
|
|
9
|
+
.command("workspace")
|
|
10
|
+
.alias("ws")
|
|
11
|
+
.description("Manage workspaces");
|
|
12
|
+
ws
|
|
13
|
+
.command("list")
|
|
14
|
+
.description("List your workspaces")
|
|
15
|
+
.action(async () => {
|
|
16
|
+
const opts = program.opts();
|
|
17
|
+
const cfg = resolveBaseConfig(opts);
|
|
18
|
+
if (!cfg.token)
|
|
19
|
+
throw new AuthError();
|
|
20
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
21
|
+
try {
|
|
22
|
+
const data = await api.get("/api/workspaces");
|
|
23
|
+
const workspaces = data.workspaces || data;
|
|
24
|
+
if (cfg.json) {
|
|
25
|
+
outputJson(workspaces);
|
|
26
|
+
}
|
|
27
|
+
else if (process.stdout.isTTY) {
|
|
28
|
+
const list = Array.isArray(workspaces) ? workspaces : [];
|
|
29
|
+
if (list.length === 0) {
|
|
30
|
+
console.log("No workspaces found.");
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const chosen = await select({
|
|
34
|
+
message: "Select a workspace to activate:",
|
|
35
|
+
choices: list.map((w) => ({
|
|
36
|
+
name: `${String(w.name || "(unnamed)")}${(w._id || w.id) === cfg.workspaceId ? " (active)" : ""}`,
|
|
37
|
+
value: String(w._id || w.id || ""),
|
|
38
|
+
})),
|
|
39
|
+
});
|
|
40
|
+
const config = loadConfig();
|
|
41
|
+
setWorkspaceId(config, cfg.serverUrl, chosen);
|
|
42
|
+
const name = list.find((w) => String(w._id || w.id) === chosen)?.name;
|
|
43
|
+
console.log(`Active workspace set to ${name || chosen}`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
const rows = (Array.isArray(workspaces) ? workspaces : []).map((w) => [
|
|
47
|
+
String(w._id || w.id || ""),
|
|
48
|
+
String(w.name || ""),
|
|
49
|
+
(w._id || w.id) === cfg.workspaceId ? "(active)" : "",
|
|
50
|
+
]);
|
|
51
|
+
outputTable(["ID", "NAME", ""], rows);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
handleError(error, cfg.json);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
ws
|
|
59
|
+
.command("select")
|
|
60
|
+
.description("Set the active workspace")
|
|
61
|
+
.argument("<id>", "Workspace ID")
|
|
62
|
+
.action(async (id) => {
|
|
63
|
+
const opts = program.opts();
|
|
64
|
+
const cfg = resolveBaseConfig(opts);
|
|
65
|
+
try {
|
|
66
|
+
const config = loadConfig();
|
|
67
|
+
setWorkspaceId(config, cfg.serverUrl, id);
|
|
68
|
+
if (cfg.json) {
|
|
69
|
+
outputJson({ workspaceId: id });
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
console.log(`Active workspace set to ${id}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
handleError(error, cfg.json);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
ws
|
|
80
|
+
.command("current")
|
|
81
|
+
.description("Show the active workspace")
|
|
82
|
+
.action(async () => {
|
|
83
|
+
const opts = program.opts();
|
|
84
|
+
const cfg = resolveBaseConfig(opts);
|
|
85
|
+
try {
|
|
86
|
+
if (!cfg.workspaceId) {
|
|
87
|
+
if (cfg.json) {
|
|
88
|
+
outputJson({ workspaceId: null });
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.log("No workspace selected. Run `cn workspace select <id>`");
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (!cfg.token)
|
|
96
|
+
throw new AuthError();
|
|
97
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
98
|
+
const data = await api.get(`/api/workspaces/${cfg.workspaceId}`);
|
|
99
|
+
const workspace = data.workspace || data;
|
|
100
|
+
if (cfg.json) {
|
|
101
|
+
outputJson(data);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
console.log(`Workspace: ${workspace.name || "Unknown"}`);
|
|
105
|
+
console.log(`ID: ${cfg.workspaceId}`);
|
|
106
|
+
if (workspace.userPermission) {
|
|
107
|
+
console.log(`Role: ${workspace.userPermission}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
handleError(error, cfg.json);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class ApiClient {
|
|
2
|
+
private serverUrl;
|
|
3
|
+
private token;
|
|
4
|
+
constructor(serverUrl: string, token: string);
|
|
5
|
+
private headers;
|
|
6
|
+
get<T = unknown>(path: string, params?: Record<string, string | undefined>): Promise<T>;
|
|
7
|
+
post<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T>;
|
|
8
|
+
patch<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T>;
|
|
9
|
+
delete<T = unknown>(path: string): Promise<T>;
|
|
10
|
+
private parseJsonSafe;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAS;IAElB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;gBADL,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM;IAGvB,OAAO,CAAC,OAAO;IAOT,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC,CAAC,CAAC;IAqBP,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC;IAgBP,KAAK,CAAC,CAAC,GAAG,OAAO,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC;IAgBP,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAerC,aAAa;CAI5B"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { ApiError } from "./errors.js";
|
|
2
|
+
export class ApiClient {
|
|
3
|
+
serverUrl;
|
|
4
|
+
token;
|
|
5
|
+
constructor(serverUrl, token) {
|
|
6
|
+
this.serverUrl = serverUrl;
|
|
7
|
+
this.token = token;
|
|
8
|
+
}
|
|
9
|
+
headers() {
|
|
10
|
+
return {
|
|
11
|
+
Authorization: `Bearer ${this.token}`,
|
|
12
|
+
"Content-Type": "application/json",
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
async get(path, params) {
|
|
16
|
+
const url = new URL(path, this.serverUrl);
|
|
17
|
+
if (params) {
|
|
18
|
+
for (const [k, v] of Object.entries(params)) {
|
|
19
|
+
if (v !== undefined)
|
|
20
|
+
url.searchParams.set(k, v);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const res = await fetch(url.toString(), {
|
|
24
|
+
method: "GET",
|
|
25
|
+
headers: this.headers(),
|
|
26
|
+
});
|
|
27
|
+
if (!res.ok) {
|
|
28
|
+
const body = await res.json().catch(() => ({}));
|
|
29
|
+
throw new ApiError(res.status, body);
|
|
30
|
+
}
|
|
31
|
+
return res.json();
|
|
32
|
+
}
|
|
33
|
+
async post(path, body) {
|
|
34
|
+
const url = new URL(path, this.serverUrl);
|
|
35
|
+
const res = await fetch(url.toString(), {
|
|
36
|
+
method: "POST",
|
|
37
|
+
headers: this.headers(),
|
|
38
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
39
|
+
});
|
|
40
|
+
if (!res.ok) {
|
|
41
|
+
const respBody = await res.json().catch(() => ({}));
|
|
42
|
+
throw new ApiError(res.status, respBody);
|
|
43
|
+
}
|
|
44
|
+
return res.json();
|
|
45
|
+
}
|
|
46
|
+
async patch(path, body) {
|
|
47
|
+
const url = new URL(path, this.serverUrl);
|
|
48
|
+
const res = await fetch(url.toString(), {
|
|
49
|
+
method: "PATCH",
|
|
50
|
+
headers: this.headers(),
|
|
51
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
52
|
+
});
|
|
53
|
+
if (!res.ok) {
|
|
54
|
+
const respBody = await res.json().catch(() => ({}));
|
|
55
|
+
throw new ApiError(res.status, respBody);
|
|
56
|
+
}
|
|
57
|
+
return this.parseJsonSafe(res);
|
|
58
|
+
}
|
|
59
|
+
async delete(path) {
|
|
60
|
+
const url = new URL(path, this.serverUrl);
|
|
61
|
+
const res = await fetch(url.toString(), {
|
|
62
|
+
method: "DELETE",
|
|
63
|
+
headers: this.headers(),
|
|
64
|
+
});
|
|
65
|
+
if (!res.ok) {
|
|
66
|
+
const body = await res.json().catch(() => ({}));
|
|
67
|
+
throw new ApiError(res.status, body);
|
|
68
|
+
}
|
|
69
|
+
return this.parseJsonSafe(res);
|
|
70
|
+
}
|
|
71
|
+
async parseJsonSafe(res) {
|
|
72
|
+
const text = await res.text();
|
|
73
|
+
return (text ? JSON.parse(text) : {});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,OAAO,SAAS;IAEV;IACA;IAFV,YACU,SAAiB,EACjB,KAAa;QADb,cAAS,GAAT,SAAS,CAAQ;QACjB,UAAK,GAAL,KAAK,CAAQ;IACpB,CAAC;IAEI,OAAO;QACb,OAAO;YACL,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;YACrC,cAAc,EAAE,kBAAkB;SACnC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CACP,IAAY,EACZ,MAA2C;QAE3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,KAAK,SAAS;oBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACtC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CACR,IAAY,EACZ,IAA8B;QAE9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YACvB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAK,CACT,IAAY,EACZ,IAA8B;QAE9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACtC,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YACvB,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAI,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAc,IAAY;QACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACtC,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChD,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAI,GAAG,CAAC,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,aAAa,CAAI,GAAa;QAC1C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAM,CAAC;IAC7C,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface ServerConfig {
|
|
2
|
+
token: string;
|
|
3
|
+
email: string;
|
|
4
|
+
workspaceId?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CliConfig {
|
|
7
|
+
version: 1;
|
|
8
|
+
servers: Record<string, ServerConfig>;
|
|
9
|
+
currentServer: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function loadConfig(): CliConfig;
|
|
12
|
+
export declare function saveConfig(config: CliConfig): void;
|
|
13
|
+
export declare function getServerConfig(config: CliConfig, server?: string): ServerConfig | null;
|
|
14
|
+
export declare function setServerConfig(config: CliConfig, serverUrl: string, serverConfig: ServerConfig): void;
|
|
15
|
+
export declare function removeServerConfig(config: CliConfig, serverUrl: string): void;
|
|
16
|
+
export declare function setCurrentServer(config: CliConfig, serverUrl: string): void;
|
|
17
|
+
export declare function setWorkspaceId(config: CliConfig, serverUrl: string, workspaceId: string): void;
|
|
18
|
+
//# sourceMappingURL=auth-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../../src/lib/auth-store.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;CACvB;AAaD,wBAAgB,UAAU,IAAI,SAAS,CAOtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAQlD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGvF;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,GACzB,IAAI,CAGN;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAG7E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAG3E;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,IAAI,CAMN"}
|