@creator-notes/cli 0.3.2 → 0.5.1

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "creator-notes-cli",
3
- "version": "0.2.7",
3
+ "version": "0.5.1",
4
4
  "description": "CreatorNotes CLI — create notes, build canvases, search knowledge from the terminal",
5
5
  "author": {
6
6
  "name": "CreatorNotes",
package/SKILL.md CHANGED
@@ -173,6 +173,36 @@ cn memory facts [--source <conversation|notes>]
173
173
  cn memory entities [--source <conversation|notes>]
174
174
  ```
175
175
 
176
+ ### Theme (`cn theme`)
177
+
178
+ Personal UI theme preference (synced to your account, applies on next browser reload — does NOT live-update an open tab).
179
+
180
+ ```bash
181
+ # List built-in presets — current one is marked with *
182
+ cn theme list
183
+
184
+ # Show the active theme + any per-token color overrides
185
+ cn theme get
186
+
187
+ # Switch to a built-in preset
188
+ cn theme set <id> # e.g. dracula, nord, catppuccin-mocha, sage, light, dark
189
+
190
+ # Override a single color (switches the theme to "custom" automatically)
191
+ cn theme set-color <token> <hex> # e.g. cn theme set-color primary "#ff00aa"
192
+
193
+ # Drop all custom overrides and return to the base preset
194
+ cn theme reset
195
+ ```
196
+
197
+ **Editable tokens** (anything else is rejected with 422):
198
+ `background`, `card`, `popover`, `muted`, `border`, `sidebar-background`,
199
+ `primary`, `primary-foreground`, `ring`, `accent-teal`,
200
+ `foreground`, `muted-foreground`, `prose-body`, `prose-heading`,
201
+ `code-background`, `code-foreground`, `blockquote-border`,
202
+ `destructive`, `success`, `warning`, `info`.
203
+
204
+ `set-color` merges into existing overrides — call it repeatedly to build up a custom palette. `reset` returns to the preset that was the base of your custom theme (or `dark` if you started from scratch).
205
+
176
206
  ### Config
177
207
  ```bash
178
208
  cn config get-server
package/dist/cn.js CHANGED
@@ -17,6 +17,7 @@ import { registerMemoryCommands } from "./commands/memory.js";
17
17
  import { registerFilesCommands } from "./commands/files.js";
18
18
  import { registerMcpCommands } from "./commands/mcp.js";
19
19
  import { registerInitCommand } from "./commands/init.js";
20
+ import { registerThemeCommands } from "./commands/theme.js";
20
21
  import { loadConfig, getServerConfig } from "./lib/auth-store.js";
21
22
  const program = new Command();
22
23
  program
@@ -42,6 +43,7 @@ registerTypesCommands(program);
42
43
  registerMemoryCommands(program);
43
44
  registerFilesCommands(program);
44
45
  registerMcpCommands(program);
46
+ registerThemeCommands(program);
45
47
  // Default action: show help + first-run hint when invoked with no arguments
46
48
  program.action(() => {
47
49
  const config = loadConfig();
package/dist/cn.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cn.js","sourceRoot":"","sources":["../src/cn.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,4EAA4E,CAAC;KACzF,OAAO,CAAC,WAAW,CAAC;KACpB,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC;KACnC,MAAM,CAAC,aAAa,EAAE,2BAA2B,CAAC;KAClD,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,CAAC;KAC9D,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;AAEnD,8BAA8B;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACnC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,6BAA6B,CAAC,OAAO,CAAC,CAAC;AACvC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,4EAA4E;AAC5E,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACzD,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cn.js","sourceRoot":"","sources":["../src/cn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerThemeCommands(program: Command): void;
3
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/commands/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0M5D"}
@@ -0,0 +1,180 @@
1
+ import { ApiClient } from "../lib/api-client.js";
2
+ import { resolveBaseConfig } from "../lib/config.js";
3
+ import { AuthError, ValidationError, handleError } from "../lib/errors.js";
4
+ import { outputJson, outputTable } from "../lib/output.js";
5
+ import { PRESETS, PRESET_IDS, EDITABLE_TOKEN_NAMES, EDITABLE_TOKEN_NAME_SET, hslTripleToHex, parseHex, } from "../lib/themes.js";
6
+ function requireAuthedConfig(program) {
7
+ const cfg = resolveBaseConfig(program.opts());
8
+ if (!cfg.token)
9
+ throw new AuthError();
10
+ return cfg;
11
+ }
12
+ export function registerThemeCommands(program) {
13
+ const theme = program
14
+ .command("theme")
15
+ .description("Manage your theme preset and per-token custom colors");
16
+ theme
17
+ .command("list")
18
+ .description("List available theme presets")
19
+ .action(async () => {
20
+ const cfg = requireAuthedConfig(program);
21
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
22
+ try {
23
+ const current = await api.get("/api/theme");
24
+ if (cfg.json) {
25
+ outputJson({
26
+ current: current.themeId,
27
+ customBaseId: current.customBaseId,
28
+ presets: PRESETS.map((p) => ({
29
+ id: p.id,
30
+ name: p.name,
31
+ isDark: p.isDark,
32
+ description: p.description,
33
+ })),
34
+ });
35
+ return;
36
+ }
37
+ const rows = PRESETS.map((p) => [
38
+ current.themeId === p.id ? "*" : "",
39
+ p.id,
40
+ p.name,
41
+ p.isDark ? "dark" : "light",
42
+ p.description,
43
+ ]);
44
+ outputTable(["", "ID", "NAME", "MODE", "DESCRIPTION"], rows);
45
+ if (current.themeId === "custom") {
46
+ console.log(`\nActive: custom (based on ${current.customBaseId}, ${Object.keys(current.customColors).length} overrides)`);
47
+ }
48
+ }
49
+ catch (error) {
50
+ handleError(error, cfg.json);
51
+ }
52
+ });
53
+ theme
54
+ .command("get")
55
+ .description("Show the active theme and any custom color overrides")
56
+ .action(async () => {
57
+ const cfg = requireAuthedConfig(program);
58
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
59
+ try {
60
+ const data = await api.get("/api/theme");
61
+ if (cfg.json) {
62
+ outputJson(data);
63
+ return;
64
+ }
65
+ console.log(`themeId: ${data.themeId}`);
66
+ console.log(`mode: ${data.isDark ? "dark" : "light"}`);
67
+ if (data.themeId === "custom") {
68
+ console.log(`customBaseId: ${data.customBaseId}`);
69
+ }
70
+ const overrides = Object.entries(data.customColors);
71
+ if (overrides.length === 0) {
72
+ console.log("custom colors: (none)");
73
+ }
74
+ else {
75
+ console.log("custom colors:");
76
+ const rows = overrides.map(([token, hsl]) => [
77
+ token,
78
+ hsl,
79
+ hslTripleToHex(hsl),
80
+ ]);
81
+ outputTable(["TOKEN", "HSL", "HEX"], rows);
82
+ }
83
+ }
84
+ catch (error) {
85
+ handleError(error, cfg.json);
86
+ }
87
+ });
88
+ theme
89
+ .command("set")
90
+ .description("Switch to a built-in theme preset")
91
+ .argument("<id>", "Preset ID (run `cn theme list` to see all)")
92
+ .action(async (id) => {
93
+ const cfg = requireAuthedConfig(program);
94
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
95
+ if (id === "custom") {
96
+ throw new ValidationError("`cn theme set custom` is not supported. Use `cn theme set-color <token> <hex>` to enter custom mode (it seeds the base palette atomically).");
97
+ }
98
+ if (!PRESET_IDS.has(id)) {
99
+ throw new ValidationError(`Unknown theme id: ${id}. Run \`cn theme list\` to see available presets.`);
100
+ }
101
+ try {
102
+ const data = await api.put("/api/theme", { themeId: id });
103
+ if (cfg.json) {
104
+ outputJson(data);
105
+ }
106
+ else {
107
+ console.log(`Theme set to ${data.themeId} (${data.isDark ? "dark" : "light"}).`);
108
+ console.log("Reload an open browser tab to see the change.");
109
+ }
110
+ }
111
+ catch (error) {
112
+ handleError(error, cfg.json);
113
+ }
114
+ });
115
+ theme
116
+ .command("set-color")
117
+ .description("Override a single token color (switches theme to 'custom')")
118
+ .argument("<token>", "Editable token name (e.g. primary, background)")
119
+ .argument("<hex>", "Hex color (e.g. #ff00aa or ff00aa)")
120
+ .action(async (token, hex) => {
121
+ const cfg = requireAuthedConfig(program);
122
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
123
+ if (!EDITABLE_TOKEN_NAME_SET.has(token)) {
124
+ throw new ValidationError(`Token "${token}" is not editable. Editable tokens: ${EDITABLE_TOKEN_NAMES.join(", ")}`);
125
+ }
126
+ if (parseHex(hex) === null) {
127
+ throw new ValidationError(`Invalid hex color: ${hex}. Use #rrggbb or #rgb.`);
128
+ }
129
+ try {
130
+ // Use PATCH so the server merges this single token into the
131
+ // existing HSL palette without round-tripping unmodified tokens
132
+ // through hex (which would lose precision on each call).
133
+ // We still need the current themeId to seed customBaseId on the
134
+ // first transition into custom — once we're already custom, the
135
+ // server preserves the existing base.
136
+ const current = await api.get("/api/theme");
137
+ const customBaseId = current.themeId === "custom" ? undefined : current.themeId;
138
+ const data = await api.patch("/api/theme/colors", {
139
+ customColors: { [token]: hex },
140
+ ...(customBaseId ? { customBaseId } : {}),
141
+ });
142
+ if (cfg.json) {
143
+ outputJson(data);
144
+ }
145
+ else {
146
+ const storedHsl = data.customColors[token];
147
+ const storedHex = storedHsl ? hslTripleToHex(storedHsl) : hex;
148
+ console.log(`Set ${token} = ${storedHex}.`);
149
+ console.log(`Theme is now custom (based on ${data.customBaseId}).`);
150
+ console.log("Reload an open browser tab to see the change.");
151
+ }
152
+ }
153
+ catch (error) {
154
+ handleError(error, cfg.json);
155
+ }
156
+ });
157
+ theme
158
+ .command("reset")
159
+ .description("Drop all custom color overrides and return to the base preset")
160
+ .action(async () => {
161
+ const cfg = requireAuthedConfig(program);
162
+ const api = new ApiClient(cfg.serverUrl, cfg.token);
163
+ try {
164
+ const current = await api.get("/api/theme");
165
+ const targetId = current.themeId === "custom" ? current.customBaseId : current.themeId;
166
+ const data = await api.put("/api/theme", { themeId: targetId });
167
+ if (cfg.json) {
168
+ outputJson(data);
169
+ }
170
+ else {
171
+ console.log(`Theme reset to ${data.themeId}.`);
172
+ console.log("Reload an open browser tab to see the change.");
173
+ }
174
+ }
175
+ catch (error) {
176
+ handleError(error, cfg.json);
177
+ }
178
+ });
179
+ }
180
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/commands/theme.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ export declare class ApiClient {
12
12
  get<T = unknown>(path: string, params?: Record<string, string | undefined>): Promise<T>;
13
13
  post<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T>;
14
14
  postFormData<T = unknown>(path: string, buildFormData: () => FormData): Promise<T>;
15
+ put<T = unknown>(path: string, body?: Record<string, unknown>): Promise<T>;
15
16
  patch<T = unknown>(path: string, body?: Record<string, unknown>, params?: Record<string, string | undefined>): Promise<T>;
16
17
  delete<T = unknown>(path: string): Promise<T>;
17
18
  private parseJsonSafe;
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAaA,qBAAa,SAAS;IAElB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;gBADL,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM;IAGvB,OAAO,CAAC,OAAO;IAQf;;;;OAIG;YACW,cAAc;IA4CtB,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,YAAY,CAAC,CAAC,GAAG,OAAO,EAC5B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,QAAQ,GAC5B,OAAO,CAAC,CAAC,CAAC;IAuBP,KAAK,CAAC,CAAC,GAAG,OAAO,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC,CAAC,CAAC;IAqBP,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAerC,aAAa;CAI5B"}
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAaA,qBAAa,SAAS;IAElB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;gBADL,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM;IAGvB,OAAO,CAAC,OAAO;IAQf;;;;OAIG;YACW,cAAc;IA4CtB,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,YAAY,CAAC,CAAC,GAAG,OAAO,EAC5B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,QAAQ,GAC5B,OAAO,CAAC,CAAC,CAAC;IAuBP,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,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,EAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,OAAO,CAAC,CAAC,CAAC;IAqBP,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;YAerC,aAAa;CAI5B"}
@@ -77,7 +77,7 @@ export class ApiClient {
77
77
  const body = await res.json().catch(() => ({}));
78
78
  throw new ApiError(res.status, body);
79
79
  }
80
- return res.json();
80
+ return this.parseJsonSafe(res);
81
81
  }
82
82
  async post(path, body) {
83
83
  const url = new URL(path, this.serverUrl);
@@ -90,7 +90,7 @@ export class ApiClient {
90
90
  const respBody = await res.json().catch(() => ({}));
91
91
  throw new ApiError(res.status, respBody);
92
92
  }
93
- return res.json();
93
+ return this.parseJsonSafe(res);
94
94
  }
95
95
  async postFormData(path, buildFormData) {
96
96
  const url = new URL(path, this.serverUrl);
@@ -111,6 +111,19 @@ export class ApiClient {
111
111
  }
112
112
  return res.json();
113
113
  }
114
+ async put(path, body) {
115
+ const url = new URL(path, this.serverUrl);
116
+ const res = await this.fetchWithRetry(url.toString(), {
117
+ method: "PUT",
118
+ headers: this.headers(),
119
+ body: body ? JSON.stringify(body) : undefined,
120
+ });
121
+ if (!res.ok) {
122
+ const respBody = await res.json().catch(() => ({}));
123
+ throw new ApiError(res.status, respBody);
124
+ }
125
+ return this.parseJsonSafe(res);
126
+ }
114
127
  async patch(path, body, params) {
115
128
  const url = new URL(path, this.serverUrl);
116
129
  if (params) {
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * CLI-side mirror of theme metadata + color helpers.
3
+ *
4
+ * The CLI publishes as a standalone package, so it can't import from
5
+ * the Next.js project's `lib/themes/`. Keep this in sync with:
6
+ * - lib/themes/presets.ts (PRESETS, EDITABLE_TOKEN_NAMES)
7
+ * - lib/themes/color.ts (parseHex, hslTripleToHex)
8
+ *
9
+ * Server-side validation in /api/theme uses the canonical sources, so
10
+ * this file is for local UX only — the server is the contract.
11
+ */
12
+ export interface PresetMeta {
13
+ id: string;
14
+ name: string;
15
+ isDark: boolean;
16
+ description: string;
17
+ }
18
+ export declare const PRESETS: PresetMeta[];
19
+ /** Tokens the visual editor / `cn theme set-color` is allowed to override. */
20
+ export declare const EDITABLE_TOKEN_NAMES: string[];
21
+ export declare const EDITABLE_TOKEN_NAME_SET: ReadonlySet<string>;
22
+ /** All known preset ids — kept in sync with lib/themes/presets.ts PRESET_IDS. */
23
+ export declare const PRESET_IDS: ReadonlySet<string>;
24
+ export declare function parseHex(hex: string): [number, number, number] | null;
25
+ export declare function hslTripleToHex(triple: string): string;
26
+ //# sourceMappingURL=themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/lib/themes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,OAAO,EAAE,UAAU,EAU/B,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAWxC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAAiC,CAAC;AAE1F,iFAAiF;AACjF,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,MAAM,CAAqC,CAAC;AAKjF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAUrE;AAyBD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMrD"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * CLI-side mirror of theme metadata + color helpers.
3
+ *
4
+ * The CLI publishes as a standalone package, so it can't import from
5
+ * the Next.js project's `lib/themes/`. Keep this in sync with:
6
+ * - lib/themes/presets.ts (PRESETS, EDITABLE_TOKEN_NAMES)
7
+ * - lib/themes/color.ts (parseHex, hslTripleToHex)
8
+ *
9
+ * Server-side validation in /api/theme uses the canonical sources, so
10
+ * this file is for local UX only — the server is the contract.
11
+ */
12
+ export const PRESETS = [
13
+ { id: "dark", name: "Tia", isDark: true, description: "Default dark with magenta accent." },
14
+ { id: "sage", name: "Sage", isDark: false, description: "Muted greenish-grey, easy on the eyes." },
15
+ { id: "light", name: "Light", isDark: false, description: "Clean classic light." },
16
+ { id: "catppuccin-mocha", name: "Catppuccin Mocha", isDark: true, description: "Soothing pastel dark from the Catppuccin family." },
17
+ { id: "catppuccin-latte", name: "Catppuccin Latte", isDark: false, description: "Soothing pastel light from the Catppuccin family." },
18
+ { id: "dracula", name: "Dracula", isDark: true, description: "Iconic high-contrast dark with purple accent." },
19
+ { id: "solarized-dark", name: "Solarized Dark", isDark: true, description: "Ethan Schoonover's classic teal-on-navy palette." },
20
+ { id: "nord", name: "Nord", isDark: true, description: "Arctic, north-bluish dark with frosted accents." },
21
+ { id: "rose-pine", name: "Rosé Pine", isDark: true, description: "Soho-vibes for the pastel-loving developer." },
22
+ ];
23
+ /** Tokens the visual editor / `cn theme set-color` is allowed to override. */
24
+ export const EDITABLE_TOKEN_NAMES = [
25
+ // Backgrounds
26
+ "background", "card", "popover", "muted", "border", "sidebar-background",
27
+ // Accent colors
28
+ "primary", "primary-foreground", "ring", "accent-teal",
29
+ // Text
30
+ "foreground", "muted-foreground", "prose-body", "prose-heading",
31
+ // Code & quotes
32
+ "code-background", "code-foreground", "blockquote-border",
33
+ // Status
34
+ "destructive", "success", "warning", "info",
35
+ ];
36
+ export const EDITABLE_TOKEN_NAME_SET = new Set(EDITABLE_TOKEN_NAMES);
37
+ /** All known preset ids — kept in sync with lib/themes/presets.ts PRESET_IDS. */
38
+ export const PRESET_IDS = new Set(PRESETS.map((p) => p.id));
39
+ const HEX3 = /^#?([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])$/;
40
+ const HEX6 = /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/;
41
+ export function parseHex(hex) {
42
+ const m6 = HEX6.exec(hex);
43
+ if (m6)
44
+ return [parseInt(m6[1], 16), parseInt(m6[2], 16), parseInt(m6[3], 16)];
45
+ const m3 = HEX3.exec(hex);
46
+ if (m3)
47
+ return [
48
+ parseInt(m3[1] + m3[1], 16),
49
+ parseInt(m3[2] + m3[2], 16),
50
+ parseInt(m3[3] + m3[3], 16),
51
+ ];
52
+ return null;
53
+ }
54
+ const HSL_RE = /^\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)%\s+(-?\d+(?:\.\d+)?)%\s*$/;
55
+ function hslToRgb(h, s, l) {
56
+ const sNorm = Math.max(0, Math.min(100, s)) / 100;
57
+ const lNorm = Math.max(0, Math.min(100, l)) / 100;
58
+ const c = (1 - Math.abs(2 * lNorm - 1)) * sNorm;
59
+ const hp = (((h % 360) + 360) % 360) / 60;
60
+ const x = c * (1 - Math.abs((hp % 2) - 1));
61
+ let r1 = 0, g1 = 0, b1 = 0;
62
+ if (hp >= 0 && hp < 1)
63
+ [r1, g1, b1] = [c, x, 0];
64
+ else if (hp >= 1 && hp < 2)
65
+ [r1, g1, b1] = [x, c, 0];
66
+ else if (hp >= 2 && hp < 3)
67
+ [r1, g1, b1] = [0, c, x];
68
+ else if (hp >= 3 && hp < 4)
69
+ [r1, g1, b1] = [0, x, c];
70
+ else if (hp >= 4 && hp < 5)
71
+ [r1, g1, b1] = [x, 0, c];
72
+ else
73
+ [r1, g1, b1] = [c, 0, x];
74
+ const m = lNorm - c / 2;
75
+ return [
76
+ Math.round((r1 + m) * 255),
77
+ Math.round((g1 + m) * 255),
78
+ Math.round((b1 + m) * 255),
79
+ ];
80
+ }
81
+ export function hslTripleToHex(triple) {
82
+ const m = HSL_RE.exec(triple);
83
+ if (!m)
84
+ return "#000000";
85
+ const [r, g, b] = hslToRgb(Number(m[1]), Number(m[2]), Number(m[3]));
86
+ const toHex = (n) => n.toString(16).padStart(2, "0");
87
+ return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
88
+ }
89
+ //# sourceMappingURL=themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/lib/themes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@creator-notes/cli",
3
- "version": "0.3.2",
3
+ "version": "0.5.1",
4
4
  "description": "CLI for CreatorNotes — create notes, build canvases, search knowledge from the terminal",
5
5
  "type": "module",
6
6
  "bin": {
@@ -208,6 +208,36 @@ cn mcp setup # Claude Desktop
208
208
  cn mcp setup-codex # OpenAI Codex
209
209
  ```
210
210
 
211
+ ### Theme (`cn theme`)
212
+
213
+ Personal UI theme preference (synced to your account, applies on next browser reload — does NOT live-update an open tab).
214
+
215
+ ```bash
216
+ # List built-in presets — current one is marked with *
217
+ cn theme list
218
+
219
+ # Show the active theme + any per-token color overrides
220
+ cn theme get
221
+
222
+ # Switch to a built-in preset
223
+ cn theme set <id> # e.g. dracula, nord, catppuccin-mocha, sage, light, dark
224
+
225
+ # Override a single color (switches the theme to "custom" automatically)
226
+ cn theme set-color <token> <hex> # e.g. cn theme set-color primary "#ff00aa"
227
+
228
+ # Drop all custom overrides and return to the base preset
229
+ cn theme reset
230
+ ```
231
+
232
+ **Editable tokens** (anything else is rejected with 422):
233
+ `background`, `card`, `popover`, `muted`, `border`, `sidebar-background`,
234
+ `primary`, `primary-foreground`, `ring`, `accent-teal`,
235
+ `foreground`, `muted-foreground`, `prose-body`, `prose-heading`,
236
+ `code-background`, `code-foreground`, `blockquote-border`,
237
+ `destructive`, `success`, `warning`, `info`.
238
+
239
+ `set-color` merges into existing overrides — call it repeatedly to build up a custom palette. `reset` returns to the preset that was the base of your custom theme (or `dark` if you started from scratch).
240
+
211
241
  ### Config
212
242
  ```bash
213
243
  cn config get-server