@creator-notes/cnotes 0.25.1 → 0.26.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 (37) hide show
  1. package/dist/commands/auth-keys.d.ts +3 -0
  2. package/dist/commands/auth-keys.d.ts.map +1 -0
  3. package/dist/commands/auth-keys.js +69 -0
  4. package/dist/commands/auth-keys.js.map +1 -0
  5. package/dist/commands/auth.d.ts +1 -0
  6. package/dist/commands/auth.d.ts.map +1 -1
  7. package/dist/commands/auth.js +65 -7
  8. package/dist/commands/auth.js.map +1 -1
  9. package/dist/commands/canvas.d.ts.map +1 -1
  10. package/dist/commands/canvas.js +122 -20
  11. package/dist/commands/canvas.js.map +1 -1
  12. package/dist/commands/files.d.ts.map +1 -1
  13. package/dist/commands/files.js +11 -1
  14. package/dist/commands/files.js.map +1 -1
  15. package/dist/commands/operations.d.ts.map +1 -1
  16. package/dist/commands/operations.js +21 -19
  17. package/dist/commands/operations.js.map +1 -1
  18. package/dist/lib/api-client.d.ts +35 -9
  19. package/dist/lib/api-client.d.ts.map +1 -1
  20. package/dist/lib/api-client.js +60 -24
  21. package/dist/lib/api-client.js.map +1 -1
  22. package/dist/lib/auth-store.d.ts +42 -10
  23. package/dist/lib/auth-store.d.ts.map +1 -1
  24. package/dist/lib/auth-store.js +38 -12
  25. package/dist/lib/auth-store.js.map +1 -1
  26. package/dist/lib/mcp-local-file.d.ts +11 -0
  27. package/dist/lib/mcp-local-file.d.ts.map +1 -0
  28. package/dist/lib/mcp-local-file.js +62 -0
  29. package/dist/lib/mcp-local-file.js.map +1 -0
  30. package/dist/lib/output.d.ts +7 -0
  31. package/dist/lib/output.d.ts.map +1 -1
  32. package/dist/lib/output.js +16 -0
  33. package/dist/lib/output.js.map +1 -1
  34. package/dist/mcp-server.js +7 -1
  35. package/dist/mcp-server.js.map +1 -1
  36. package/package.json +2 -2
  37. package/skills/cnotes/SKILL.md +20 -2
@@ -8,6 +8,43 @@ function isRetryable(status) {
8
8
  function sleep(ms) {
9
9
  return new Promise((resolve) => setTimeout(resolve, ms));
10
10
  }
11
+ /**
12
+ * Resolve the agent-run to attach to writes against `serverUrl`, in precedence
13
+ * order:
14
+ *
15
+ * 1. `CNOTES_AGENT_RUN_ID` env var (explicit override, wins everything).
16
+ * `canvas agent-run wrap` sets this for its subprocess, so a wrapped run
17
+ * correctly beats any outer persisted run.
18
+ * 2. The active run persisted on this server's config, written by
19
+ * `cnotes operations begin` / `cnotes canvas agent-run begin` and cleared
20
+ * by their matching `end`.
21
+ *
22
+ * The run id and its before-snapshot resolve together, from ONE source. They
23
+ * are a pair — the snapshot is the state of the canvas at that run's begin — so
24
+ * mixing them across sources would hand a wrapped run the *outer* run's
25
+ * before-snapshot. The server drops a snapshot that belongs to another canvas,
26
+ * so the run would quietly lose its revert point rather than fail loudly.
27
+ *
28
+ * Exported so the bracketing commands resolve the run the same way the client
29
+ * attaches it — `canvas agent-run end` closing a run the client would not have
30
+ * attached to is exactly the desync that let agent edits record as human ones.
31
+ */
32
+ export function resolveActiveAgentRun(serverUrl) {
33
+ const envRunId = process.env.CNOTES_AGENT_RUN_ID;
34
+ if (envRunId) {
35
+ return {
36
+ agentRunId: envRunId,
37
+ beforeSnapshotId: process.env.CNOTES_AGENT_BEFORE_SNAPSHOT_ID,
38
+ };
39
+ }
40
+ const active = getActiveAgentRunId(loadConfig(), serverUrl);
41
+ if (!active)
42
+ return undefined;
43
+ return {
44
+ agentRunId: active.agentRunId,
45
+ beforeSnapshotId: active.beforeSnapshotId,
46
+ };
47
+ }
11
48
  export class ApiClient {
12
49
  serverUrl;
13
50
  token;
@@ -17,12 +54,7 @@ export class ApiClient {
17
54
  }
18
55
  /**
19
56
  * Build request headers, attaching the active agent-run when one is
20
- * open. Resolution order:
21
- *
22
- * 1. `CNOTES_AGENT_RUN_ID` env var (explicit override, wins everything).
23
- * 2. The `activeAgentRunId` persisted on the current server's config
24
- * (written by `cnotes operations begin`, cleared by `cnotes operations
25
- * end`).
57
+ * open (see {@link resolveActiveAgentRun} for the resolution order).
26
58
  *
27
59
  * The config fallback exists because env vars don't survive across
28
60
  * separate shell processes (or stateless tool calls — e.g. an agent
@@ -32,27 +64,31 @@ export class ApiClient {
32
64
  *
33
65
  * X-Agent-Before-Snapshot-Id carries the begin-checkpoint's snapshot
34
66
  * ID so the first mutation under the run can back-link
35
- * operation.checkpointBeforeId at open time. The server validates the
36
- * snapshot belongs to the target canvas before stamping it.
67
+ * operation.checkpointBeforeId at open time — no header, no revert point.
68
+ * The server validates the snapshot belongs to the target canvas before
69
+ * stamping it, and ignores it entirely without a run id.
37
70
  *
38
71
  * Prompt + rationale are deliberately NOT carried per-request — they
39
72
  * were already persisted on the operation row at begin time, and
40
73
  * resending them on every mutation would create a spoofing surface (a
41
74
  * leaked runId could overwrite stored intent metadata).
75
+ *
76
+ * @internal exposed (not private) so tests can assert the run actually
77
+ * rides on the request — the header being silently absent is the bug.
42
78
  */
43
- headers() {
79
+ buildHeaders() {
44
80
  const base = {
45
81
  Authorization: `Bearer ${this.token}`,
46
82
  "Content-Type": "application/json",
47
83
  "X-Source": "cli",
48
84
  };
49
- const agentRunId = process.env.CNOTES_AGENT_RUN_ID ??
50
- getActiveAgentRunId(loadConfig(), this.serverUrl)?.agentRunId;
51
- if (agentRunId)
52
- base["X-Agent-Run-Id"] = agentRunId;
53
- const beforeId = process.env.CNOTES_AGENT_BEFORE_SNAPSHOT_ID;
54
- if (beforeId)
55
- base["X-Agent-Before-Snapshot-Id"] = beforeId;
85
+ const run = resolveActiveAgentRun(this.serverUrl);
86
+ if (run) {
87
+ base["X-Agent-Run-Id"] = run.agentRunId;
88
+ if (run.beforeSnapshotId) {
89
+ base["X-Agent-Before-Snapshot-Id"] = run.beforeSnapshotId;
90
+ }
91
+ }
56
92
  return base;
57
93
  }
58
94
  /**
@@ -129,7 +165,7 @@ export class ApiClient {
129
165
  }
130
166
  const res = await this.fetchWithRetry(url.toString(), {
131
167
  method: "GET",
132
- headers: this.headers(),
168
+ headers: this.buildHeaders(),
133
169
  });
134
170
  if (!res.ok) {
135
171
  const body = await this.errorBody(res);
@@ -141,7 +177,7 @@ export class ApiClient {
141
177
  const url = new URL(path, this.serverUrl);
142
178
  const res = await this.fetchWithRetry(url.toString(), {
143
179
  method: "POST",
144
- headers: this.headers(),
180
+ headers: this.buildHeaders(),
145
181
  body: body ? JSON.stringify(body) : undefined,
146
182
  });
147
183
  if (!res.ok) {
@@ -173,7 +209,7 @@ export class ApiClient {
173
209
  const url = new URL(path, this.serverUrl);
174
210
  const res = await this.fetchWithRetry(url.toString(), {
175
211
  method: "PUT",
176
- headers: this.headers(),
212
+ headers: this.buildHeaders(),
177
213
  body: body ? JSON.stringify(body) : undefined,
178
214
  });
179
215
  if (!res.ok) {
@@ -192,7 +228,7 @@ export class ApiClient {
192
228
  }
193
229
  const res = await this.fetchWithRetry(url.toString(), {
194
230
  method: "PATCH",
195
- headers: this.headers(),
231
+ headers: this.buildHeaders(),
196
232
  body: body ? JSON.stringify(body) : undefined,
197
233
  });
198
234
  if (!res.ok) {
@@ -205,7 +241,7 @@ export class ApiClient {
205
241
  const url = new URL(path, this.serverUrl);
206
242
  const res = await this.fetchWithRetry(url.toString(), {
207
243
  method: "DELETE",
208
- headers: this.headers(),
244
+ headers: this.buildHeaders(),
209
245
  });
210
246
  if (!res.ok) {
211
247
  const body = await this.errorBody(res);
@@ -228,7 +264,7 @@ export class ApiClient {
228
264
  try {
229
265
  res = await fetch(url.toString(), {
230
266
  method: "GET",
231
- headers: this.headers(),
267
+ headers: this.buildHeaders(),
232
268
  redirect: "manual",
233
269
  });
234
270
  }
@@ -247,7 +283,7 @@ export class ApiClient {
247
283
  if (res.status === 0 || (!location && res.status < 400)) {
248
284
  const followed = await this.fetchWithRetry(url.toString(), {
249
285
  method: "GET",
250
- headers: this.headers(),
286
+ headers: this.buildHeaders(),
251
287
  });
252
288
  if (!followed.ok) {
253
289
  const body = await this.errorBody(followed);
@@ -270,7 +306,7 @@ export class ApiClient {
270
306
  const url = new URL(path, this.serverUrl);
271
307
  const res = await this.fetchWithRetry(url.toString(), {
272
308
  method: "GET",
273
- headers: this.headers(),
309
+ headers: this.buildHeaders(),
274
310
  });
275
311
  if (!res.ok) {
276
312
  const body = await this.errorBody(res);
@@ -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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"}
@@ -4,15 +4,36 @@ export interface ServerConfig {
4
4
  workspaceId?: string;
5
5
  /**
6
6
  * Currently-open agent-run on this server, written by `cnotes operations
7
- * begin` and cleared by `cnotes operations end`. The api-client falls back
8
- * to this when CNOTES_AGENT_RUN_ID env is unset, so cnotes writes across
9
- * separate shell processes (or stateless tool calls) auto-attach to the
10
- * active run. Env wins when set, for explicit overrides.
7
+ * begin` / `cnotes canvas agent-run begin` and cleared by their matching
8
+ * `end`. The api-client falls back to this when CNOTES_AGENT_RUN_ID env is
9
+ * unset, so cnotes writes across separate shell processes (or stateless tool
10
+ * calls) auto-attach to the active run. Env wins when set, for explicit
11
+ * overrides.
12
+ *
13
+ * Both bracketing commands share this one slot on purpose: a request carries
14
+ * exactly one X-Agent-Run-Id, so two concurrent "active" runs would be
15
+ * ambiguous. `begin` refuses when this is already set (unless --force).
11
16
  */
12
17
  activeAgentRunId?: string;
13
18
  /** When activeAgentRunId was opened — used to surface helpful "started
14
19
  * Xm ago" context on the "already-active" warning at begin time. */
15
20
  activeAgentRunStartedAt?: number;
21
+ /**
22
+ * The `auto.before_agent` snapshot captured when a *canvas* agent-run was
23
+ * opened. Rides on every subsequent write as X-Agent-Before-Snapshot-Id so
24
+ * the run's first canvas mutation can back-link `checkpointBeforeId` onto its
25
+ * operation row.
26
+ *
27
+ * Load-bearing, not decorative: the server only back-links this at the first
28
+ * mutation (at begin time the operation row doesn't exist yet), and
29
+ * getRevertContext returns null without it — so a run that never carries this
30
+ * header cannot be reverted. Persisting it beside the run id is what makes
31
+ * "Revert this run" work for callers that don't inherit an env var.
32
+ *
33
+ * Unset for `operations begin` runs: those are workspace-scoped and have no
34
+ * canvas snapshot to carry.
35
+ */
36
+ activeAgentBeforeSnapshotId?: string;
16
37
  }
17
38
  export interface CliConfig {
18
39
  version: 1;
@@ -35,20 +56,31 @@ export declare function setCurrentServer(config: CliConfig, serverUrl: string):
35
56
  export declare function setWorkspaceId(config: CliConfig, serverUrl: string, workspaceId: string): boolean;
36
57
  /**
37
58
  * Mark a given agent-run as the active one for a server. Subsequent cnotes
38
- * writes against this server will carry X-Agent-Run-Id automatically.
59
+ * writes against this server will carry X-Agent-Run-Id automatically —
60
+ * plus X-Agent-Before-Snapshot-Id when `beforeSnapshotId` is given (canvas
61
+ * runs), which is what makes the run revertable.
62
+ *
63
+ * Returns false (a no-op) when there is no stored config entry for `serverUrl`
64
+ * — i.e. the token came from a flag or env var against a server never logged
65
+ * into with `cnotes auth login`, so there is nowhere on disk to record the run.
66
+ * Callers MUST surface this instead of claiming the run is active: silently
67
+ * persisting nothing is exactly how bracketed agent writes end up recorded as
68
+ * unattributed human edits. Same contract as setWorkspaceId above.
39
69
  */
40
- export declare function setActiveAgentRunId(config: CliConfig, serverUrl: string, agentRunId: string, startedAt: number): void;
70
+ export declare function setActiveAgentRunId(config: CliConfig, serverUrl: string, agentRunId: string, startedAt: number, beforeSnapshotId?: string): boolean;
41
71
  /**
42
- * Clear the active agent-run for a server. Called by `cnotes operations end`
43
- * after a successful close, so the next cnotes write reverts to "unattached"
44
- * unless the user opens a new run.
72
+ * Clear the active agent-run for a server. Called by `cnotes operations end` /
73
+ * `cnotes canvas agent-run end` after a successful close, so the next cnotes
74
+ * write reverts to "unattached" unless the user opens a new run.
45
75
  */
46
76
  export declare function clearActiveAgentRunId(config: CliConfig, serverUrl: string): void;
47
77
  /**
48
- * Read the active agent-run for a server (if any).
78
+ * Read the active agent-run for a server (if any). `beforeSnapshotId` is
79
+ * present only for canvas runs (see the field docs on ServerConfig).
49
80
  */
50
81
  export declare function getActiveAgentRunId(config: CliConfig, serverUrl: string): {
51
82
  agentRunId: string;
52
83
  startedAt: number;
84
+ beforeSnapshotId?: string;
53
85
  } | null;
54
86
  //# sourceMappingURL=auth-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../../src/lib/auth-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;yEACqE;IACrE,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;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;AA2CD,wBAAgB,UAAU,IAAI,SAAS,CAmBtC;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;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAQT;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,IAAI,CAON;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GAChB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASlD"}
1
+ {"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../../src/lib/auth-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;yEACqE;IACrE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;;;;;;;;;OAcG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;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;AA8CD,wBAAgB,UAAU,IAAI,SAAS,CAmBtC;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;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAQT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAeT;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAWN;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GAChB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAU7E"}
@@ -2,7 +2,10 @@ import { readFileSync, writeFileSync, mkdirSync, chmodSync, existsSync, renameSy
2
2
  import { join } from "node:path";
3
3
  import { homedir } from "node:os";
4
4
  import { BRAND } from "./brand.js";
5
- const CONFIG_DIR = join(homedir(), BRAND.configDir);
5
+ // CNOTES_CONFIG_DIR redirects the whole config store (used by tests to work
6
+ // against a temp dir instead of the real ~/.cnotes, and handy for sandboxed or
7
+ // multi-profile setups). Unset in normal use, which is the homedir default.
8
+ const CONFIG_DIR = process.env.CNOTES_CONFIG_DIR || join(homedir(), BRAND.configDir);
6
9
  const CONFIG_FILE = join(CONFIG_DIR, "config.json");
7
10
  /**
8
11
  * One-time migration of the pre-rename config dir (`~/.creatornotes`) to the
@@ -98,31 +101,53 @@ export function setWorkspaceId(config, serverUrl, workspaceId) {
98
101
  }
99
102
  /**
100
103
  * Mark a given agent-run as the active one for a server. Subsequent cnotes
101
- * writes against this server will carry X-Agent-Run-Id automatically.
104
+ * writes against this server will carry X-Agent-Run-Id automatically —
105
+ * plus X-Agent-Before-Snapshot-Id when `beforeSnapshotId` is given (canvas
106
+ * runs), which is what makes the run revertable.
107
+ *
108
+ * Returns false (a no-op) when there is no stored config entry for `serverUrl`
109
+ * — i.e. the token came from a flag or env var against a server never logged
110
+ * into with `cnotes auth login`, so there is nowhere on disk to record the run.
111
+ * Callers MUST surface this instead of claiming the run is active: silently
112
+ * persisting nothing is exactly how bracketed agent writes end up recorded as
113
+ * unattributed human edits. Same contract as setWorkspaceId above.
102
114
  */
103
- export function setActiveAgentRunId(config, serverUrl, agentRunId, startedAt) {
115
+ export function setActiveAgentRunId(config, serverUrl, agentRunId, startedAt, beforeSnapshotId) {
104
116
  const sc = config.servers[serverUrl];
105
- if (sc) {
106
- sc.activeAgentRunId = agentRunId;
107
- sc.activeAgentRunStartedAt = startedAt;
108
- saveConfig(config);
117
+ if (!sc)
118
+ return false;
119
+ sc.activeAgentRunId = agentRunId;
120
+ sc.activeAgentRunStartedAt = startedAt;
121
+ // Always write the slot, so a canvas run never inherits the stale
122
+ // before-snapshot of a previous run (which belongs to a different canvas and
123
+ // would be dropped server-side anyway, silently costing revertability).
124
+ if (beforeSnapshotId) {
125
+ sc.activeAgentBeforeSnapshotId = beforeSnapshotId;
109
126
  }
127
+ else {
128
+ delete sc.activeAgentBeforeSnapshotId;
129
+ }
130
+ saveConfig(config);
131
+ return true;
110
132
  }
111
133
  /**
112
- * Clear the active agent-run for a server. Called by `cnotes operations end`
113
- * after a successful close, so the next cnotes write reverts to "unattached"
114
- * unless the user opens a new run.
134
+ * Clear the active agent-run for a server. Called by `cnotes operations end` /
135
+ * `cnotes canvas agent-run end` after a successful close, so the next cnotes
136
+ * write reverts to "unattached" unless the user opens a new run.
115
137
  */
116
138
  export function clearActiveAgentRunId(config, serverUrl) {
117
139
  const sc = config.servers[serverUrl];
118
- if (sc && (sc.activeAgentRunId || sc.activeAgentRunStartedAt)) {
140
+ if (sc &&
141
+ (sc.activeAgentRunId || sc.activeAgentRunStartedAt || sc.activeAgentBeforeSnapshotId)) {
119
142
  delete sc.activeAgentRunId;
120
143
  delete sc.activeAgentRunStartedAt;
144
+ delete sc.activeAgentBeforeSnapshotId;
121
145
  saveConfig(config);
122
146
  }
123
147
  }
124
148
  /**
125
- * Read the active agent-run for a server (if any).
149
+ * Read the active agent-run for a server (if any). `beforeSnapshotId` is
150
+ * present only for canvas runs (see the field docs on ServerConfig).
126
151
  */
127
152
  export function getActiveAgentRunId(config, serverUrl) {
128
153
  const sc = config.servers[serverUrl];
@@ -130,6 +155,7 @@ export function getActiveAgentRunId(config, serverUrl) {
130
155
  return {
131
156
  agentRunId: sc.activeAgentRunId,
132
157
  startedAt: sc.activeAgentRunStartedAt,
158
+ beforeSnapshotId: sc.activeAgentBeforeSnapshotId,
133
159
  };
134
160
  }
135
161
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../src/lib/auth-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../src/lib/auth-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Throws when `absPath` is outside the permitted local-read scope.
3
+ */
4
+ export declare function assertMcpLocalFileReadable(absPath: string): void;
5
+ /**
6
+ * Return canonical effective roots. `/` and the user's home are intentionally
7
+ * excluded as implicit cwd roots: MCP clients commonly start there, which
8
+ * would otherwise make the containment check cover all or nearly all files.
9
+ */
10
+ export declare function getMcpLocalFileRoots(): string[];
11
+ //# sourceMappingURL=mcp-local-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-local-file.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-local-file.ts"],"names":[],"mappings":"AAkCA;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAahE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAU/C"}
@@ -0,0 +1,62 @@
1
+ import { realpathSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import path from "node:path";
4
+ /**
5
+ * Guardrails for MCP `cnotes_files_upload` local reads (SOC2 pen-test MEDIUM-3).
6
+ *
7
+ * By default only files under the process cwd or explicit allowlist dirs may be
8
+ * read. Set CNOTES_MCP_ALLOW_ANY_LOCAL_FILE=1 to disable (not recommended).
9
+ */
10
+ function canonicalPath(value) {
11
+ try {
12
+ return realpathSync(value);
13
+ }
14
+ catch {
15
+ throw new Error(`MCP local-read scope does not exist or is unreadable: "${value}"`);
16
+ }
17
+ }
18
+ function parseAllowedDirs() {
19
+ const raw = process.env.CNOTES_MCP_ALLOWED_DIRS;
20
+ if (!raw)
21
+ return [];
22
+ return raw
23
+ .split(path.delimiter)
24
+ .map((d) => d.trim())
25
+ .filter(Boolean)
26
+ .map((d) => canonicalPath(path.resolve(d)));
27
+ }
28
+ function isUnderRoot(filePath, root) {
29
+ const rel = path.relative(root, filePath);
30
+ return rel === "" || (!rel.startsWith("..") && !path.isAbsolute(rel));
31
+ }
32
+ /**
33
+ * Throws when `absPath` is outside the permitted local-read scope.
34
+ */
35
+ export function assertMcpLocalFileReadable(absPath) {
36
+ if (process.env.CNOTES_MCP_ALLOW_ANY_LOCAL_FILE === "1")
37
+ return;
38
+ const resolved = canonicalPath(path.resolve(absPath));
39
+ const roots = getMcpLocalFileRoots();
40
+ if (roots.some((root) => isUnderRoot(resolved, root)))
41
+ return;
42
+ throw new Error(`Refusing to read "${resolved}" — outside the MCP local-read scope (cwd: ${process.cwd()}). ` +
43
+ `Set CNOTES_MCP_ALLOWED_DIRS to add directories (colon-separated), or ` +
44
+ `CNOTES_MCP_ALLOW_ANY_LOCAL_FILE=1 to disable this guard (not recommended).`);
45
+ }
46
+ /**
47
+ * Return canonical effective roots. `/` and the user's home are intentionally
48
+ * excluded as implicit cwd roots: MCP clients commonly start there, which
49
+ * would otherwise make the containment check cover all or nearly all files.
50
+ */
51
+ export function getMcpLocalFileRoots() {
52
+ if (process.env.CNOTES_MCP_ALLOW_ANY_LOCAL_FILE === "1")
53
+ return [];
54
+ const cwd = canonicalPath(path.resolve(process.cwd()));
55
+ const unsafeImplicitRoots = new Set([
56
+ canonicalPath(path.parse(cwd).root),
57
+ canonicalPath(homedir()),
58
+ ]);
59
+ const implicitRoots = unsafeImplicitRoots.has(cwd) ? [] : [cwd];
60
+ return [...new Set([...implicitRoots, ...parseAllowedDirs()])];
61
+ }
62
+ //# sourceMappingURL=mcp-local-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-local-file.js","sourceRoot":"","sources":["../../src/lib/mcp-local-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;GAKG;AAEH,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0DAA0D,KAAK,GAAG,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG;SACP,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,IAAY;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,IAAI,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG;QAAE,OAAO;IAEhE,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IAErC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAAE,OAAO;IAE9D,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,8CAA8C,OAAO,CAAC,GAAG,EAAE,KAAK;QAC3F,uEAAuE;QACvE,4EAA4E,CAC/E,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IAEnE,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;QAClC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnC,aAAa,CAAC,OAAO,EAAE,CAAC;KACzB,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"}
@@ -22,6 +22,13 @@ export declare function outputTable(headers: string[], rows: string[][]): void;
22
22
  * Format a timestamp as relative time (e.g., "2h ago", "3d ago").
23
23
  */
24
24
  export declare function timeAgo(timestamp: number | string): string;
25
+ /**
26
+ * Like timeAgo, but keeps second-level precision instead of collapsing the
27
+ * first minute to "just now". Used by the agent-run conflict messages, where
28
+ * "started 8s ago" vs "started 3h ago" is the whole signal: it tells you
29
+ * whether you just opened this run in another shell or left one stranded.
30
+ */
31
+ export declare function formatAgo(startedAtMs: number): string;
25
32
  /**
26
33
  * Truncate a string to a max length with ellipsis.
27
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAYvE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAEjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,GACf,IAAI,CAeN;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAa1D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGzD"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAYvE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAEjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,GACf,IAAI,CAeN;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAa1D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGzD"}
@@ -67,6 +67,22 @@ export function timeAgo(timestamp) {
67
67
  return `${minutes}m ago`;
68
68
  return "just now";
69
69
  }
70
+ /**
71
+ * Like timeAgo, but keeps second-level precision instead of collapsing the
72
+ * first minute to "just now". Used by the agent-run conflict messages, where
73
+ * "started 8s ago" vs "started 3h ago" is the whole signal: it tells you
74
+ * whether you just opened this run in another shell or left one stranded.
75
+ */
76
+ export function formatAgo(startedAtMs) {
77
+ const sec = Math.max(0, Math.round((Date.now() - startedAtMs) / 1000));
78
+ if (sec < 60)
79
+ return `${sec}s ago`;
80
+ const min = Math.round(sec / 60);
81
+ if (min < 60)
82
+ return `${min}m ago`;
83
+ const hr = Math.round(min / 60);
84
+ return `${hr}h ago`;
85
+ }
70
86
  /**
71
87
  * Truncate a string to a max length with ellipsis.
72
88
  */
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,7 @@ import { ApiError, CliError, NotFoundError } from "./lib/errors.js";
28
28
  import { resolveNoteId } from "./lib/resolve-note.js";
29
29
  import { readCanvasMarkdown } from "./lib/canvas-read.js";
30
30
  import { buildSchema } from "./lib/build-schema.js";
31
+ import { assertMcpLocalFileReadable, getMcpLocalFileRoots, } from "./lib/mcp-local-file.js";
31
32
  // ---------------------------------------------------------------------------
32
33
  // Environment
33
34
  // ---------------------------------------------------------------------------
@@ -739,7 +740,7 @@ server.tool("cnotes_types_create", "Create a new note type (supertag).", {
739
740
  displayName: z.string().optional().describe("Display name (can have spaces)"),
740
741
  prefix: z.string().optional().describe("ID prefix, uppercase (e.g. PAINPOINT, USERSTORY)"),
741
742
  description: z.string().optional().describe("Description"),
742
- color: z.string().optional().describe("Color hex code (e.g. #FF5733)"),
743
+ color: z.string().optional().describe("Color hex code (6-digit, e.g. #RRGGBB)"),
743
744
  }, async ({ name, displayName, prefix, description, color }) => withErrorHandling(() => api.post("/api/supertags", {
744
745
  workspaceId,
745
746
  name,
@@ -848,6 +849,7 @@ server.tool("cnotes_files_upload", "Upload an image file to the workspace. Retur
848
849
  filePath: z.string().describe("Absolute path to the image file on disk"),
849
850
  }, async ({ filePath }) => withErrorHandling(async () => {
850
851
  const absPath = path.resolve(filePath);
852
+ assertMcpLocalFileReadable(absPath);
851
853
  let stat;
852
854
  try {
853
855
  stat = statSync(absPath);
@@ -888,6 +890,10 @@ server.tool("cnotes_schema", "Describe this workspace in one call: valid note ty
888
890
  async function main() {
889
891
  const transport = new StdioServerTransport();
890
892
  await server.connect(transport);
893
+ const localReadScope = process.env.CNOTES_MCP_ALLOW_ANY_LOCAL_FILE === "1"
894
+ ? "unrestricted (CNOTES_MCP_ALLOW_ANY_LOCAL_FILE=1)"
895
+ : getMcpLocalFileRoots().join(path.delimiter) || "none (set CNOTES_MCP_ALLOWED_DIRS)";
896
+ process.stderr.write(`cnotes-mcp local file scope: ${localReadScope}\n`);
891
897
  process.stderr.write("cnotes-mcp server running on stdio\n");
892
898
  }
893
899
  main().catch((e) => {