@creator-notes/cnotes 0.71.0 → 0.73.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/.claude-plugin/plugin.json +1 -1
- package/README.md +8 -0
- package/dist/commands/canvas-milestone.d.ts +12 -0
- package/dist/commands/canvas-milestone.d.ts.map +1 -0
- package/dist/commands/canvas-milestone.js +165 -0
- package/dist/commands/canvas-milestone.js.map +1 -0
- package/dist/commands/canvas.d.ts.map +1 -1
- package/dist/commands/canvas.js +2 -0
- package/dist/commands/canvas.js.map +1 -1
- package/dist/commands/notes.d.ts.map +1 -1
- package/dist/commands/notes.js +26 -2
- package/dist/commands/notes.js.map +1 -1
- package/dist/lib/canvas-paths.d.ts +4 -0
- package/dist/lib/canvas-paths.d.ts.map +1 -1
- package/dist/lib/canvas-paths.js +9 -0
- package/dist/lib/canvas-paths.js.map +1 -1
- package/dist/lib/milestone-message.d.ts +26 -0
- package/dist/lib/milestone-message.d.ts.map +1 -0
- package/dist/lib/milestone-message.js +65 -0
- package/dist/lib/milestone-message.js.map +1 -0
- package/dist/mcp-server.js +4 -0
- package/dist/mcp-server.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +1 -0
- package/dist/program.js.map +1 -1
- package/package.json +1 -1
- package/skills/attention-planner/SKILL.md +31 -9
- package/skills/attention-planner/references/attention-type.md +9 -0
- package/skills/attention-planner/references/card-shapes.md +66 -4
- package/skills/attention-planner/references/evidence-ledger.md +4 -0
- package/skills/attention-planner/references/orientation-canvas.md +6 -0
- package/skills/cnotes/SKILL.md +17 -1
package/README.md
CHANGED
|
@@ -36,6 +36,7 @@ cnotes search semantic "onboarding flow"
|
|
|
36
36
|
| `cnotes versions list\|create` | `cnotes v` | Note version history |
|
|
37
37
|
| `cnotes canvas list\|get\|create\|delete` | `cnotes c` | Manage canvases |
|
|
38
38
|
| `cnotes canvas place` | | Declarative layout — server packs items with no overlap |
|
|
39
|
+
| `cnotes canvas milestone create\|list\|show` | | Save and read canvas milestones (git-style message; attaches to the active operations run) |
|
|
39
40
|
| `cnotes canvas add-node\|add-text\|add-list\|add-link` | | Add a single node at explicit `--x`/`--y` (`add-richtext` is a deprecated alias of `add-text`) |
|
|
40
41
|
| `cnotes canvas bulk-add\|bulk-move` | | Bulk canvas operations — requires explicit coordinates |
|
|
41
42
|
| `cnotes canvas bulk-remove` | | Take nodes/edges off a canvas (the notes themselves are untouched) |
|
|
@@ -152,6 +153,13 @@ cnotes canvas read <canvasId>
|
|
|
152
153
|
# editing, or to confirm a previous agent run actually applied.
|
|
153
154
|
cnotes canvas activity <canvasId> [--limit 50]
|
|
154
155
|
|
|
156
|
+
# Save a milestone. First line is the headline, the rest is the body.
|
|
157
|
+
# Verb-first wording is guidance, not a check. The message is stored as
|
|
158
|
+
# written. An active operations run is stamped onto the milestone.
|
|
159
|
+
cnotes canvas milestone create <canvasId> --message "Opened pricing question: charge for agents or the workspace?"
|
|
160
|
+
cnotes canvas milestone list <canvasId>
|
|
161
|
+
cnotes canvas milestone show <milestoneId>
|
|
162
|
+
|
|
155
163
|
# Place items with a declarative layout (preferred — no x/y math)
|
|
156
164
|
cnotes canvas place <canvasId> --spec ./layout.json
|
|
157
165
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* `cnotes canvas milestone`: save and read the same canvas milestones the
|
|
4
|
+
* web UI writes (`canvasSnapshots` kind "milestone", via createMilestone).
|
|
5
|
+
*
|
|
6
|
+
* The message is one git-style field: first line is the timeline headline,
|
|
7
|
+
* the rest is the body. Verb-first wording is help text, not a validator.
|
|
8
|
+
* Writes ride the active operations run through X-Agent-Run-Id, the same
|
|
9
|
+
* header every other CLI write sends.
|
|
10
|
+
*/
|
|
11
|
+
export declare function registerCanvasMilestoneCommands(canvas: Command, program: Command): void;
|
|
12
|
+
//# sourceMappingURL=canvas-milestone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-milestone.d.ts","sourceRoot":"","sources":["../../src/commands/canvas-milestone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA4KvF"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { ApiClient } from "../lib/api-client.js";
|
|
2
|
+
import { milestonesCollectionPath, milestoneShowPath } from "../lib/canvas-paths.js";
|
|
3
|
+
import { resolveConfig } from "../lib/config.js";
|
|
4
|
+
import { handleError } from "../lib/errors.js";
|
|
5
|
+
import { readMilestoneMessage } from "../lib/milestone-message.js";
|
|
6
|
+
import { outputJson, outputQuiet, outputTable, timeAgo, truncate } from "../lib/output.js";
|
|
7
|
+
/**
|
|
8
|
+
* `cnotes canvas milestone`: save and read the same canvas milestones the
|
|
9
|
+
* web UI writes (`canvasSnapshots` kind "milestone", via createMilestone).
|
|
10
|
+
*
|
|
11
|
+
* The message is one git-style field: first line is the timeline headline,
|
|
12
|
+
* the rest is the body. Verb-first wording is help text, not a validator.
|
|
13
|
+
* Writes ride the active operations run through X-Agent-Run-Id, the same
|
|
14
|
+
* header every other CLI write sends.
|
|
15
|
+
*/
|
|
16
|
+
export function registerCanvasMilestoneCommands(canvas, program) {
|
|
17
|
+
const milestone = canvas
|
|
18
|
+
.command("milestone")
|
|
19
|
+
.description("Save and read canvas milestones. A milestone is a named snapshot of the canvas, like a git tag. " +
|
|
20
|
+
"The message is one field: the first line is the headline shown on the timeline, and the rest is the body. " +
|
|
21
|
+
"Write the headline verb-first (a meaningful verb, the specific object, and the twist). " +
|
|
22
|
+
"That shape is guidance, not a check. See https://creatornotes.app/blog/timeline-as-navigation");
|
|
23
|
+
milestone
|
|
24
|
+
.command("create")
|
|
25
|
+
.description("Save a milestone for the canvas's current state. Does nothing when there are no unsaved changes. " +
|
|
26
|
+
"The message you pass is stored as you wrote it and is not replaced by an AI summary.")
|
|
27
|
+
.argument("<canvasId>", "Canvas ID or CANVAS-<n> display id")
|
|
28
|
+
.option("-m, --message <text>", "Checkpoint message. First line is the headline; the rest is the body.")
|
|
29
|
+
.option("-F, --message-file <path>", "Read the checkpoint message from a file")
|
|
30
|
+
.addHelpText("after", `
|
|
31
|
+
The headline is a scan-first label, not a summary of the canvas. Lead with a
|
|
32
|
+
verb: "Opened pricing question: charge for agents or the shared workspace?"
|
|
33
|
+
A one-line message is enough. Add a blank line and a body when the reason
|
|
34
|
+
matters later. The command does not reject other wording.
|
|
35
|
+
|
|
36
|
+
If an operations run is active (cnotes operations begin, or canvas agent-run),
|
|
37
|
+
the save attaches to it and is recorded as that run's actor, not as a human
|
|
38
|
+
edit in the web UI.
|
|
39
|
+
|
|
40
|
+
Examples:
|
|
41
|
+
$ cnotes canvas milestone create <canvasId> --message "Opened pricing question: charge for agents or the workspace?"
|
|
42
|
+
$ cnotes canvas milestone create <canvasId> --message-file ./milestone.txt
|
|
43
|
+
$ echo "Locked the launch board" | cnotes canvas milestone create <canvasId>
|
|
44
|
+
`)
|
|
45
|
+
.action(async (canvasId, opts) => {
|
|
46
|
+
const cfg = resolveConfig(program.opts());
|
|
47
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
48
|
+
try {
|
|
49
|
+
const message = await readMilestoneMessage({
|
|
50
|
+
message: opts.message,
|
|
51
|
+
messageFile: opts.messageFile,
|
|
52
|
+
stdinIsTTY: Boolean(process.stdin.isTTY),
|
|
53
|
+
});
|
|
54
|
+
const data = await api.post(milestonesCollectionPath(canvasId, cfg.workspaceId), { description: message.description });
|
|
55
|
+
if (data.noChanges === true) {
|
|
56
|
+
if (cfg.json) {
|
|
57
|
+
outputJson({ noChanges: true, canvasId });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
console.log("No pending canvas changes. Milestone not saved.");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (cfg.quiet) {
|
|
64
|
+
outputQuiet(String(data.id ?? ""));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (cfg.json) {
|
|
68
|
+
outputJson(data);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
console.log(`Saved milestone v${data.snapshotNumber}`);
|
|
72
|
+
console.log(` ${data.headline}`);
|
|
73
|
+
if (typeof data.body === "string" && data.body) {
|
|
74
|
+
console.log("");
|
|
75
|
+
for (const line of data.body.split("\n"))
|
|
76
|
+
console.log(` ${line}`);
|
|
77
|
+
}
|
|
78
|
+
console.log(` id: ${data.id}`);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
handleError(error, cfg.json);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
milestone
|
|
85
|
+
.command("list")
|
|
86
|
+
.description("List milestones for a canvas, newest first. Auto-checkpoints are not included.")
|
|
87
|
+
.argument("<canvasId>", "Canvas ID or CANVAS-<n> display id")
|
|
88
|
+
.option("--limit <n>", "Max milestones (default 50, max 200)", "50")
|
|
89
|
+
.addHelpText("after", `
|
|
90
|
+
Examples:
|
|
91
|
+
$ cnotes canvas milestone list <canvasId>
|
|
92
|
+
$ cnotes canvas milestone list <canvasId> --json
|
|
93
|
+
`)
|
|
94
|
+
.action(async (canvasId, opts) => {
|
|
95
|
+
const cfg = resolveConfig(program.opts());
|
|
96
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
97
|
+
try {
|
|
98
|
+
const parsed = Number.parseInt(opts.limit ?? "50", 10);
|
|
99
|
+
const limit = Number.isFinite(parsed) ? parsed : 50;
|
|
100
|
+
const data = await api.get(milestonesCollectionPath(canvasId, cfg.workspaceId, limit));
|
|
101
|
+
const rows = data.milestones ?? [];
|
|
102
|
+
if (cfg.quiet) {
|
|
103
|
+
outputQuiet(rows.map((row) => String(row.id ?? "")).join("\n"));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (cfg.json) {
|
|
107
|
+
outputJson(data);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (rows.length === 0) {
|
|
111
|
+
console.log("No milestones yet.");
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
outputTable(["WHEN", "V", "WHO", "HEADLINE"], rows.map((row) => [
|
|
115
|
+
timeAgo(row.createdAt),
|
|
116
|
+
`v${row.snapshotNumber}`,
|
|
117
|
+
String(row.createdBySource ?? "human"),
|
|
118
|
+
truncate(String(row.headline ?? "(no description)"), 60),
|
|
119
|
+
]));
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
handleError(error, cfg.json);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
milestone
|
|
126
|
+
.command("show")
|
|
127
|
+
.description("Show one milestone, including the full checkpoint message.")
|
|
128
|
+
.argument("<milestoneId>", "Milestone id (the id printed by milestone create or list)")
|
|
129
|
+
.addHelpText("after", `
|
|
130
|
+
Examples:
|
|
131
|
+
$ cnotes canvas milestone show <milestoneId>
|
|
132
|
+
$ cnotes canvas milestone show <milestoneId> --json
|
|
133
|
+
`)
|
|
134
|
+
.action(async (milestoneId) => {
|
|
135
|
+
const cfg = resolveConfig(program.opts());
|
|
136
|
+
const api = new ApiClient(cfg.serverUrl, cfg.token);
|
|
137
|
+
try {
|
|
138
|
+
const data = await api.get(milestoneShowPath(milestoneId, cfg.workspaceId));
|
|
139
|
+
const row = data.milestone;
|
|
140
|
+
if (cfg.quiet) {
|
|
141
|
+
outputQuiet(String(row.id ?? milestoneId));
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (cfg.json) {
|
|
145
|
+
outputJson(data);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
console.log(`v${row.snapshotNumber} · ${row.createdBySource ?? "human"} · ${timeAgo(row.createdAt)}`);
|
|
149
|
+
console.log(String(row.headline ?? "(no description)"));
|
|
150
|
+
if (typeof row.body === "string" && row.body) {
|
|
151
|
+
console.log("");
|
|
152
|
+
console.log(row.body);
|
|
153
|
+
}
|
|
154
|
+
const counts = `+${row.addedCount ?? 0} added ~${row.modifiedCount ?? 0} modified -${row.removedCount ?? 0} removed`;
|
|
155
|
+
console.log("");
|
|
156
|
+
console.log(counts);
|
|
157
|
+
console.log(`id: ${row.id}`);
|
|
158
|
+
console.log(`canvas: ${row.canvasId}`);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
handleError(error, cfg.json);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=canvas-milestone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-milestone.js","sourceRoot":"","sources":["../../src/commands/canvas-milestone.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../src/commands/canvas.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../src/commands/canvas.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAiK5C,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmxF7D"}
|
package/dist/commands/canvas.js
CHANGED
|
@@ -12,6 +12,7 @@ import { resolveAgentSession } from "../lib/claude-session.js";
|
|
|
12
12
|
import { WARN, dim } from "../lib/style.js";
|
|
13
13
|
import { canvasUrl, canvasLinkForRef } from "../lib/urls.js";
|
|
14
14
|
import { canvasActionPath, commentsListPath, parseCommentStatus, } from "../lib/canvas-paths.js";
|
|
15
|
+
import { registerCanvasMilestoneCommands } from "./canvas-milestone.js";
|
|
15
16
|
/**
|
|
16
17
|
* A list item is a *collection of member notes* with a short markdown description
|
|
17
18
|
* that frames them — not a place to dump prose. When a description carries several
|
|
@@ -435,6 +436,7 @@ Examples:
|
|
|
435
436
|
handleError(error, cfg.json);
|
|
436
437
|
}
|
|
437
438
|
});
|
|
439
|
+
registerCanvasMilestoneCommands(canvas, program);
|
|
438
440
|
canvas
|
|
439
441
|
.command("read")
|
|
440
442
|
.description("Read every note on a canvas as one concatenated markdown document, " +
|