@popoverinstall/cli 0.6.1 → 0.7.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.
package/CHANGELOG.md CHANGED
@@ -15,6 +15,33 @@ already here:
15
15
  Every version that ships needs an entry — an update with nothing to print says nothing at
16
16
  all, which reads as though the update did not happen.
17
17
 
18
+ ## 0.7.1
19
+
20
+ ### Features
21
+
22
+ - `popover changelog` says what the last update changed, whenever you want to know rather than
23
+ only in the second the update prints it. Press `1` and the whole history opens in a pane you
24
+ scroll inside — bounded to part of the window, and erased when you leave it, so reading back
25
+ through eight releases does not push everything else out of your terminal. `popover changelog
26
+ --all` goes straight there, and prints plainly when piped into something else.
27
+ - popover has its own domain: a fresh `popover login` now connects to www.popover.to instead of
28
+ the old vercel.app address. Nothing changes for a machine already logged in — the origin it
29
+ connected through is kept in its credentials and still preferred — and the old hostname keeps
30
+ resolving, so installs of earlier releases carry on working.
31
+
32
+ ## 0.7.0
33
+
34
+ ### Features
35
+
36
+ - Claude Code now notices your teammates without being asked. An agent used to learn that
37
+ popover existed only once you typed `/popover:team`, which meant the moment most worth using
38
+ it for — you are about to edit a file somebody else's agent is already in — went past
39
+ unremarked. A session in a repo where a teammate is working now begins with the roster in
40
+ hand, says so before it collides with them, and can ask their agent why something is the way
41
+ it is when the repo itself does not record it. It will say when it is about to ask, and ask
42
+ you first before sending anyone a heads-up: an ask spends a teammate's tokens on their own
43
+ machine, while a heads-up spends their attention.
44
+
18
45
  ## 0.6.1
19
46
 
20
47
  ### Fixes
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `popover changelog` — what the last update changed, and the back catalogue behind it.
3
+ *
4
+ * `update` prints the notes for what it just installed and that is the only time they are
5
+ * ever shown; miss the scroll-by, or have the update fail before it gets there, and there is
6
+ * no way back to them. This is that way back.
7
+ *
8
+ * The two views are deliberately different in kind. The newest release prints normally and
9
+ * stays in the scrollback, because it is short and it is the answer to the question actually
10
+ * being asked. The full history opens in a pane that erases itself (see pager.ts) — a couple
11
+ * of hundred lines of releases you have already read is not something to leave behind in a
12
+ * terminal you are working in.
13
+ *
14
+ * Both views come out of the same `parseChangelog` / `renderReleaseNotes` pair that `update`
15
+ * uses, so there is one parser and one renderer for release notes, not two that can drift.
16
+ */
17
+ export declare function changelog(argv: string[]): Promise<number>;
18
+ //# sourceMappingURL=changelog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog.d.ts","sourceRoot":"","sources":["../src/changelog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiDH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAmC/D"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * `popover changelog` — what the last update changed, and the back catalogue behind it.
3
+ *
4
+ * `update` prints the notes for what it just installed and that is the only time they are
5
+ * ever shown; miss the scroll-by, or have the update fail before it gets there, and there is
6
+ * no way back to them. This is that way back.
7
+ *
8
+ * The two views are deliberately different in kind. The newest release prints normally and
9
+ * stays in the scrollback, because it is short and it is the answer to the question actually
10
+ * being asked. The full history opens in a pane that erases itself (see pager.ts) — a couple
11
+ * of hundred lines of releases you have already read is not something to leave behind in a
12
+ * terminal you are working in.
13
+ *
14
+ * Both views come out of the same `parseChangelog` / `renderReleaseNotes` pair that `update`
15
+ * uses, so there is one parser and one renderer for release notes, not two that can drift.
16
+ */
17
+ import { readFileSync } from "node:fs";
18
+ import { parseChangelog, renderReleaseNotes } from "@popoverinstall/shared";
19
+ import { keyReader, regionTextWidth, scrollRegion } from "./pager.js";
20
+ import { box, glyph, style } from "./theme.js";
21
+ import { bad, dim } from "./ui.js";
22
+ const SOURCE_URL = "https://github.com/many-ideations/popover/blob/main/CHANGELOG.md";
23
+ /**
24
+ * Where the notes live, in order of preference.
25
+ *
26
+ * The first is the copy `prepack` stages into the package (scripts/stage-plugin.mjs) and
27
+ * npm installs beside us — the same file `printReleaseNotes` reads, so what prints describes
28
+ * the build actually on disk rather than whatever the registry currently advertises.
29
+ *
30
+ * The second is the repo root, which is what a dev checkout has: nothing has run `prepack`
31
+ * there, so the staged copy does not exist yet.
32
+ */
33
+ const CANDIDATES = ["../CHANGELOG.md", "../../../CHANGELOG.md"];
34
+ function readChangelog() {
35
+ for (const candidate of CANDIDATES) {
36
+ try {
37
+ return readFileSync(new URL(candidate, import.meta.url), "utf8");
38
+ }
39
+ catch {
40
+ /* try the next one */
41
+ }
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * Release notes as lines that sit at the frame's own left margin.
47
+ *
48
+ * `renderReleaseNotes` indents everything two spaces, for printing straight to a terminal
49
+ * where nothing else provides a margin. Both views here are already inside a frame that
50
+ * provides one, so that indent is taken back off — left on, a version heading would sit four
51
+ * columns in and the whole block would read as nested inside its own box.
52
+ *
53
+ * The two columns are handed back to the wrap width, so the text still fills the frame.
54
+ */
55
+ function notes(releases, width) {
56
+ return renderReleaseNotes(releases, width + 2)
57
+ .split("\n")
58
+ .map((line) => (line.startsWith(" ") ? line.slice(2) : line));
59
+ }
60
+ export async function changelog(argv) {
61
+ const all = argv.includes("--all");
62
+ const markdown = readChangelog();
63
+ if (markdown === null) {
64
+ bad("No changelog shipped with this install.");
65
+ dim(`Read it online instead: ${SOURCE_URL}`);
66
+ return 1;
67
+ }
68
+ const releases = parseChangelog(markdown);
69
+ if (releases.length === 0) {
70
+ bad("The changelog shipped with this install has no releases in it.");
71
+ dim(`Read it online instead: ${SOURCE_URL}`);
72
+ return 1;
73
+ }
74
+ // Wrapped to the pane's text width for both views, so a line that fits the box also fits
75
+ // the region and neither has to be re-flowed when you switch between them.
76
+ const width = regionTextWidth();
77
+ const history = () => notes(releases, width);
78
+ if (all) {
79
+ await scrollRegion({ title: "Changelog", lines: history() });
80
+ return 0;
81
+ }
82
+ const latest = releases[0];
83
+ box({ title: "What's new", lines: notes([latest], width), minWidth: width });
84
+ // One release in the file is the whole file. Offering to open it as history would be
85
+ // offering to show the same thing again.
86
+ if (releases.length === 1)
87
+ return 0;
88
+ return menu(history);
89
+ }
90
+ /**
91
+ * The menu under the notes, and the loop it drives.
92
+ *
93
+ * The prompt is erased before the pane opens and reprinted after it closes, so the pane
94
+ * appears in the space the menu occupied rather than below it — the reader's eye stays where
95
+ * it was, and the screen does not creep downwards each time they look at the history.
96
+ */
97
+ async function menu(history) {
98
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
99
+ console.log("");
100
+ dim("Full history: popover changelog --all");
101
+ return 0;
102
+ }
103
+ const prompt = ` ${style.white("1")}${style.dim(" Full changelog")}` +
104
+ `${style.dim(` ${glyph.dot} `)}${style.white("q")}${style.dim(" Done")}`;
105
+ const keys = keyReader();
106
+ try {
107
+ for (;;) {
108
+ console.log("");
109
+ console.log(prompt);
110
+ const key = await keys.next();
111
+ // Up over the prompt and the blank line above it, clearing both, so whatever comes
112
+ // next starts where they were.
113
+ process.stdout.write("\x1b[2A\x1b[J");
114
+ if (key !== "1")
115
+ return 0;
116
+ // Handed over rather than held: raw mode is already set up, and the pane needs the
117
+ // same keys this loop is reading.
118
+ await scrollRegion({ title: "Changelog", lines: history(), keys });
119
+ }
120
+ }
121
+ finally {
122
+ keys.close();
123
+ console.log("");
124
+ }
125
+ }
126
+ //# sourceMappingURL=changelog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog.js","sourceRoot":"","sources":["../src/changelog.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA8BA;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,MAEb,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA+BA;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,MAEb,CAAC"}
package/dist/index.js CHANGED
@@ -5,6 +5,7 @@ import os from "node:os";
5
5
  import path from "node:path";
6
6
  import { promisify } from "node:util";
7
7
  import { PACKAGE_NAME, clearCredentials, daemonEntryPointerPath, daemonLogPath, defaultApiUrl, installCommand, loadCredentials, parseChangelog, popoverHome, releasesInstalled, renderReleaseNotes, } from "@popoverinstall/shared";
8
+ import { changelog } from "./changelog.js";
8
9
  import { resolveDaemonEntry } from "./daemon-entry.js";
9
10
  import { doctor } from "./doctor.js";
10
11
  import { askDaemon, daemonIsRunning } from "./ipc-client.js";
@@ -41,6 +42,8 @@ async function main() {
41
42
  return 0;
42
43
  case "update":
43
44
  return update();
45
+ case "changelog":
46
+ return changelog(rest);
44
47
  case "status":
45
48
  return status();
46
49
  case "doctor":
@@ -140,6 +143,7 @@ ${next ? `\n${next}` : ""}
140
143
  ${c.bold("popover setup")} [--force] Re-register the Claude Code plugin
141
144
  ${c.bold("popover welcome")} Set up and log in — the whole of a first run
142
145
  ${c.bold("popover update")} Upgrade to the newest version and restart the daemon
146
+ ${c.bold("popover changelog")} [--all] What the last update changed
143
147
  ${c.bold("popover status")} Show this machine's sessions and connection
144
148
  ${c.bold("popover team")} Print the team roster
145
149
  ${c.bold("popover fork")} <create|open|launch|list|revoke>
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"next-steps.d.ts","sourceRoot":"","sources":["../src/next-steps.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;GAIG;AACH,eAAO,MAAM,KAAK,YAAY,CAAC;AAC/B,eAAO,MAAM,OAAO,6CAA6C,CAAC;AAClE,eAAO,MAAM,iBAAiB,2EAC4C,CAAC;AAoB3E,wBAAgB,SAAS,IAAI,IAAI,CA4ChC"}
1
+ {"version":3,"file":"next-steps.d.ts","sourceRoot":"","sources":["../src/next-steps.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;GAIG;AACH,eAAO,MAAM,KAAK,YAAY,CAAC;AAC/B,eAAO,MAAM,OAAO,6CAA6C,CAAC;AAClE,eAAO,MAAM,iBAAiB,2EAC4C,CAAC;AAwB3E,wBAAgB,SAAS,IAAI,IAAI,CA4ChC"}
@@ -18,19 +18,23 @@ export const TAGLINE_SECONDARY = "Let your team's AI agents communicate and coll
18
18
  /**
19
19
  * Things the agent can genuinely do, phrased the way someone would actually type them.
20
20
  *
21
- * Checked against what the plugin actually exposes — two tools, `team_list` and `team_ask`
22
- * rather than invented to sound capable. Suggesting anything else here would be the CLI
23
- * teaching people a command that fails: the agent can see which teammates are active in this
24
- * repo, and it can put one question to a teammate's agent, which a read-only copy answers.
25
- * That is the whole surface.
21
+ * Checked against what the plugin actually exposes — three tools, `team_list`, `team_ask`
22
+ * and `team_tell` — rather than invented to sound capable. Suggesting anything else here
23
+ * would be the CLI teaching people a command that fails.
26
24
  *
27
- * One per tool, then one that uses both which is the pattern worth teaching, since asking
28
- * without listing first means guessing at a handle.
25
+ * One per tool, in that order, because it is also the order you use them in: the roster is
26
+ * where a name comes from, and the other two are the two things you can do with one. Naming
27
+ * teammates rather than handles like `B1` is deliberate — `target` takes either, and a
28
+ * handle printed here is one the reader does not have yet.
29
+ *
30
+ * Three different opening verbs, and no "Ask Popover" prefix: the heading above these
31
+ * already says whose job this is, and every character spent on the prefix is a character
32
+ * closer to wrapping in an 80-column terminal.
29
33
  */
30
34
  const ASK_EXAMPLES = [
31
- `Ask ${BRAND} who on my team is working in this repo right now.`,
32
- `Ask ${BRAND} to ask G1 why they ruled out Redis for the roster cache.`,
33
- `Ask ${BRAND} who knows this service, then ask their agent how retries work.`,
35
+ "Who else is working in this repo right now, and on what?",
36
+ "Ask Greg what they already tried on the flaky auth test.",
37
+ "Tell Jenny that I'm rewriting globals.css right now.",
34
38
  ];
35
39
  export function nextSteps() {
36
40
  // Wrapped to the window, like the welcome box, and before styling — `wrap` counts
@@ -1 +1 @@
1
- {"version":3,"file":"next-steps.js","sourceRoot":"","sources":["../src/next-steps.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,0CAA0C,CAAC;AAClE,MAAM,CAAC,MAAM,iBAAiB,GAC5B,wEAAwE,CAAC;AAE3E;;;;;;;;;;;GAWG;AACH,MAAM,YAAY,GAAG;IACnB,OAAO,KAAK,oDAAoD;IAChE,OAAO,KAAK,2DAA2D;IACvE,OAAO,KAAK,iEAAiE;CAC9E,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,kFAAkF;IAClF,4DAA4D;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9D,KAAK,EAAE,CAAC;IACR,GAAG,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,0BAA0B,CAAC;QAChD,KAAK,EAAE;YACL,EAAE;YACF,GAAG,IAAI,CAAC,GAAG,KAAK,+CAA+C,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACtF,GAAG,IAAI,CAAC,4DAA4D,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAC1F,EAAE;SACH;QACD,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,KAAK,EAAE,CAAC;IACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;IAC7F,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;IAEpF,KAAK,EAAE,CAAC;IACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC;;;;;;WAMG;QACH,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/B,2FAA2F;QAC3F,iEAAiE;QACjE,KAAK,MAAM,IAAI,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,EAAE,CAAC;IACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC/D,KAAK,EAAE,CAAC;IACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,6CAA6C;AAC7C,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"next-steps.js","sourceRoot":"","sources":["../src/next-steps.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,0CAA0C,CAAC;AAClE,MAAM,CAAC,MAAM,iBAAiB,GAC5B,wEAAwE,CAAC;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,YAAY,GAAG;IACnB,0DAA0D;IAC1D,0DAA0D;IAC1D,sDAAsD;CACvD,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,kFAAkF;IAClF,4DAA4D;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9D,KAAK,EAAE,CAAC;IACR,GAAG,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,0BAA0B,CAAC;QAChD,KAAK,EAAE;YACL,EAAE;YACF,GAAG,IAAI,CAAC,GAAG,KAAK,+CAA+C,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACtF,GAAG,IAAI,CAAC,4DAA4D,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAC1F,EAAE;SACH;QACD,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,KAAK,EAAE,CAAC;IACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;IAC7F,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;IAEpF,KAAK,EAAE,CAAC;IACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC;;;;;;WAMG;QACH,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/B,2FAA2F;QAC3F,iEAAiE;QACjE,KAAK,MAAM,IAAI,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,EAAE,CAAC;IACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC/D,KAAK,EAAE,CAAC;IACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,6CAA6C;AAC7C,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * A bounded scroll region, drawn inline in the terminal.
3
+ *
4
+ * The alternative — the alternate screen buffer, `\x1b[?1049h`, what `less` uses — was
5
+ * deliberately not taken. It blanks the whole window and hands it back untouched on exit,
6
+ * which is tidy but wrong for this: it takes the entire terminal, and everything printed
7
+ * before it disappears while you read. What is wanted here is a *pane* inside the session,
8
+ * with the notes above it still on screen.
9
+ *
10
+ * So the region is drawn like any other output, then redrawn over itself: move the cursor up
11
+ * by the number of lines last written, and print them all again. Two invariants keep that
12
+ * from smearing, and both are load-bearing:
13
+ *
14
+ * 1. **No line may ever wrap.** A line one column too wide occupies two terminal rows, and
15
+ * every subsequent cursor-up is off by one for the rest of the session. Everything is cut
16
+ * to the frame width by `fit()` before it goes out.
17
+ * 2. **The block must fit on screen with a row to spare.** Writing the block scrolls the
18
+ * terminal when the cursor is already at the bottom, which is fine — the cursor stays the
19
+ * same distance below the block either way — but only while the block's first line is
20
+ * still on screen to move back up to. Hence the `rows - 5` in `geometry()`.
21
+ *
22
+ * The height is capped well under the window (see `geometry`) rather than filling it: a pane
23
+ * that reaches the top edge is indistinguishable from the alternate screen, which is the
24
+ * thing this is not.
25
+ */
26
+ export interface Viewport {
27
+ /** Exactly `height` rows, short content padded with blanks. */
28
+ rows: string[];
29
+ /** The offset actually used, after clamping. Callers store this back. */
30
+ offset: number;
31
+ atTop: boolean;
32
+ atBottom: boolean;
33
+ /** `"21–38 of 214"`, or empty when it all fits and there is nothing to scroll. */
34
+ position: string;
35
+ }
36
+ /**
37
+ * The slice of `lines` visible at `offset`, clamped to what exists.
38
+ *
39
+ * Padded out to exactly `height` rows, which is what stops the frame from changing size on
40
+ * the last page — a bottom rule that walks up the screen as you scroll reads as a glitch.
41
+ *
42
+ * Pure, and the only part of this file that is: everything below talks to a terminal, and
43
+ * this is where the arithmetic that can actually be wrong lives.
44
+ */
45
+ export declare function viewport(lines: string[], offset: number, height: number): Viewport;
46
+ /**
47
+ * One decoded keypress at a time, with raw mode held open for the life of the reader.
48
+ *
49
+ * Generalised from the single-keypress read in `welcome.ts`, which stays as it is — its
50
+ * enter-means-yes reading of the keys is particular to that one question. What is shared is
51
+ * the mechanism underneath: raw mode, because a pager cannot ask for Enter after every arrow,
52
+ * and because readline would take the cursor with it.
53
+ *
54
+ * Keys are queued rather than read on demand. Holding an arrow down delivers several escape
55
+ * sequences in a single chunk, and a reader that took the first and dropped the rest would
56
+ * scroll one line per chunk however long the key was held.
57
+ */
58
+ export interface KeyReader {
59
+ next(): Promise<string>;
60
+ close(): void;
61
+ }
62
+ export declare function keyReader(): KeyReader;
63
+ export interface RegionOptions {
64
+ /** Sits inline on the top rule, as in `box()`. */
65
+ title: string;
66
+ /** Content, one line per row. Wrap it to `regionTextWidth()` before calling. */
67
+ lines: string[];
68
+ /**
69
+ * An already-open reader to take keys from, for a caller that is itself reading keys.
70
+ *
71
+ * Opening a second one over the top of it would leave two `data` listeners racing for the
72
+ * same bytes, and closing it here would drop the caller's raw mode on the way out. A reader
73
+ * passed in is borrowed: used, and left open.
74
+ */
75
+ keys?: KeyReader;
76
+ }
77
+ /** The width callers should wrap their content to, so it lands inside the frame uncut. */
78
+ export declare function regionTextWidth(): number;
79
+ /**
80
+ * Show `lines` in a scrollable pane, and return once the reader leaves it.
81
+ *
82
+ * The pane is erased on the way out. That is the point of it: the whole changelog goes past
83
+ * your eyes without any of it going into the scrollback, so what stays behind is only what
84
+ * was there before.
85
+ */
86
+ export declare function scrollRegion({ title, lines, keys: borrowed }: RegionOptions): Promise<void>;
87
+ //# sourceMappingURL=pager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pager.d.ts","sourceRoot":"","sources":["../src/pager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAkBH,MAAM,WAAW,QAAQ;IACvB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAgBlF;AAID;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,SAAS,IAAI,SAAS,CA8CrC;AAyHD,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,0FAA0F;AAC1F,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+GjG"}
package/dist/pager.js ADDED
@@ -0,0 +1,364 @@
1
+ /**
2
+ * A bounded scroll region, drawn inline in the terminal.
3
+ *
4
+ * The alternative — the alternate screen buffer, `\x1b[?1049h`, what `less` uses — was
5
+ * deliberately not taken. It blanks the whole window and hands it back untouched on exit,
6
+ * which is tidy but wrong for this: it takes the entire terminal, and everything printed
7
+ * before it disappears while you read. What is wanted here is a *pane* inside the session,
8
+ * with the notes above it still on screen.
9
+ *
10
+ * So the region is drawn like any other output, then redrawn over itself: move the cursor up
11
+ * by the number of lines last written, and print them all again. Two invariants keep that
12
+ * from smearing, and both are load-bearing:
13
+ *
14
+ * 1. **No line may ever wrap.** A line one column too wide occupies two terminal rows, and
15
+ * every subsequent cursor-up is off by one for the rest of the session. Everything is cut
16
+ * to the frame width by `fit()` before it goes out.
17
+ * 2. **The block must fit on screen with a row to spare.** Writing the block scrolls the
18
+ * terminal when the cursor is already at the bottom, which is fine — the cursor stays the
19
+ * same distance below the block either way — but only while the block's first line is
20
+ * still on screen to move back up to. Hence the `rows - 5` in `geometry()`.
21
+ *
22
+ * The height is capped well under the window (see `geometry`) rather than filling it: a pane
23
+ * that reaches the top edge is indistinguishable from the alternate screen, which is the
24
+ * thing this is not.
25
+ */
26
+ import { glyph, style, unicodeEnabled } from "./theme.js";
27
+ const write = (s) => process.stdout.write(s);
28
+ /**
29
+ * Room the frame takes from the text: a trunk and a two-space margin on each side.
30
+ *
31
+ * The margin is symmetric because `box()` in theme.ts is symmetric, and the two are shown one
32
+ * above the other — the pane opens directly under a box of the same content. A pane whose
33
+ * text ran two columns wider would read as a different width even with its borders aligned.
34
+ */
35
+ const CHROME = 6;
36
+ /** Rows of frame around the content: the titled rule, the position rule, and the key hints. */
37
+ const FRAME_ROWS = 3;
38
+ /**
39
+ * The slice of `lines` visible at `offset`, clamped to what exists.
40
+ *
41
+ * Padded out to exactly `height` rows, which is what stops the frame from changing size on
42
+ * the last page — a bottom rule that walks up the screen as you scroll reads as a glitch.
43
+ *
44
+ * Pure, and the only part of this file that is: everything below talks to a terminal, and
45
+ * this is where the arithmetic that can actually be wrong lives.
46
+ */
47
+ export function viewport(lines, offset, height) {
48
+ const size = Math.max(1, Math.trunc(height));
49
+ const max = Math.max(0, lines.length - size);
50
+ const at = Math.min(Math.max(0, Number.isFinite(offset) ? Math.trunc(offset) : 0), max);
51
+ const rows = lines.slice(at, at + size);
52
+ while (rows.length < size)
53
+ rows.push("");
54
+ const last = Math.min(lines.length, at + size);
55
+ return {
56
+ rows,
57
+ offset: at,
58
+ atTop: at === 0,
59
+ atBottom: at === max,
60
+ position: lines.length > size ? `${at + 1}–${last} of ${lines.length}` : "",
61
+ };
62
+ }
63
+ export function keyReader() {
64
+ const stdin = process.stdin;
65
+ const wasRaw = stdin.isRaw;
66
+ const queue = [];
67
+ let waiting = null;
68
+ let closed = false;
69
+ const push = (key) => {
70
+ if (waiting) {
71
+ const resolve = waiting;
72
+ waiting = null;
73
+ resolve(key);
74
+ }
75
+ else {
76
+ queue.push(key);
77
+ }
78
+ };
79
+ const onData = (chunk) => {
80
+ for (const key of tokenize(chunk))
81
+ push(key);
82
+ };
83
+ // A closed stdin has to settle anything still waiting, or the caller hangs forever.
84
+ const onEnd = () => push("quit");
85
+ stdin.setRawMode?.(true);
86
+ stdin.setEncoding("utf8");
87
+ stdin.resume();
88
+ stdin.on("data", onData);
89
+ stdin.on("end", onEnd);
90
+ return {
91
+ next: () => new Promise((resolve) => {
92
+ const queued = queue.shift();
93
+ if (queued !== undefined)
94
+ resolve(queued);
95
+ else if (closed)
96
+ resolve("quit");
97
+ else
98
+ waiting = resolve;
99
+ }),
100
+ close: () => {
101
+ if (closed)
102
+ return;
103
+ closed = true;
104
+ stdin.removeListener("data", onData);
105
+ stdin.removeListener("end", onEnd);
106
+ stdin.setRawMode?.(wasRaw ?? false);
107
+ stdin.pause();
108
+ },
109
+ };
110
+ }
111
+ /**
112
+ * Split a chunk into keys.
113
+ *
114
+ * An escape sequence has to be consumed whole — `\x1b[B` is one keypress, not Escape followed
115
+ * by a bracket and a B. A bare `\x1b` with nothing after it is the Escape key itself.
116
+ */
117
+ function tokenize(chunk) {
118
+ const keys = [];
119
+ let i = 0;
120
+ while (i < chunk.length) {
121
+ if (chunk[i] === "\x1b") {
122
+ // CSI (`\x1b[…`) and SS3 (`\x1bO…`, what an arrow sends in application cursor mode).
123
+ const match = /^\x1b(\[|O)[0-9;]*[A-Za-z~]/.exec(chunk.slice(i));
124
+ if (match) {
125
+ keys.push(decode(match[0]));
126
+ i += match[0].length;
127
+ continue;
128
+ }
129
+ keys.push("escape");
130
+ i += 1;
131
+ continue;
132
+ }
133
+ keys.push(decode(chunk[i]));
134
+ i += 1;
135
+ }
136
+ return keys;
137
+ }
138
+ /** An escape sequence or single character as a name. Anything unrecognised passes through. */
139
+ function decode(seq) {
140
+ switch (seq) {
141
+ case "\x1b[A":
142
+ case "\x1bOA":
143
+ return "up";
144
+ case "\x1b[B":
145
+ case "\x1bOB":
146
+ return "down";
147
+ case "\x1b[5~":
148
+ return "pgup";
149
+ case "\x1b[6~":
150
+ return "pgdn";
151
+ case "\x1b[H":
152
+ case "\x1bOH":
153
+ case "\x1b[1~":
154
+ case "\x1b[7~":
155
+ return "home";
156
+ case "\x1b[F":
157
+ case "\x1bOF":
158
+ case "\x1b[4~":
159
+ case "\x1b[8~":
160
+ return "end";
161
+ case "\r":
162
+ case "\n":
163
+ return "enter";
164
+ case " ":
165
+ return "space";
166
+ // In raw mode these arrive as bytes rather than as signals, so they are ours to handle.
167
+ case "\x03":
168
+ case "\x04":
169
+ return "quit";
170
+ default:
171
+ return seq;
172
+ }
173
+ }
174
+ /**
175
+ * How big the pane can be in this window, read fresh on every render so a resize is absorbed.
176
+ *
177
+ * `rows - 5` is the hard ceiling — see the invariants at the top of this file. Under that sits
178
+ * a proportional cap, so the pane stays a pane: on a tall window it settles at 18 rows rather
179
+ * than growing to fill the screen, and on a short one it takes a bit over half.
180
+ */
181
+ function geometry() {
182
+ // `||` rather than `??`: a terminal that has not been sized yet reports 0 rather than
183
+ // undefined — a pty opened by `script`, a multiplexer mid-attach — and a zero taken
184
+ // literally collapses the pane to nothing and drops the whole changelog into the
185
+ // scrollback. Unknown and unsized both mean "assume something ordinary".
186
+ const rows = process.stdout.rows || 24;
187
+ const columns = process.stdout.columns || 80;
188
+ const height = Math.min(18, Math.floor(rows * 0.6), rows - 5);
189
+ const frame = Math.max(40, Math.min(columns - 1, 88));
190
+ return { height, inner: frame - 2, text: frame - CHROME };
191
+ }
192
+ /** Cut to `max` columns. Plain text only — it counts characters, so style afterwards. */
193
+ function fit(text, max) {
194
+ if (text.length <= max)
195
+ return text;
196
+ return text.slice(0, Math.max(0, max - 1)) + (unicodeEnabled ? "…" : ">");
197
+ }
198
+ /**
199
+ * Pick out the two headings `renderReleaseNotes` emits, by the indent it emits them at: a
200
+ * version sits at two spaces, a section name at four, and a bullet at six.
201
+ *
202
+ * Coupled to that layout on purpose, and harmlessly — a change there costs the emphasis, not
203
+ * the pane, because anything that fails to match renders as ordinary text.
204
+ */
205
+ function decorate(text) {
206
+ if (/^ {2}\d+\.\d+\.\d+/.test(text))
207
+ return style.bold(text);
208
+ if (/^ {4}\S/.test(text))
209
+ return style.heading(text);
210
+ return text;
211
+ }
212
+ /** The width callers should wrap their content to, so it lands inside the frame uncut. */
213
+ export function regionTextWidth() {
214
+ return geometry().text;
215
+ }
216
+ /**
217
+ * Show `lines` in a scrollable pane, and return once the reader leaves it.
218
+ *
219
+ * The pane is erased on the way out. That is the point of it: the whole changelog goes past
220
+ * your eyes without any of it going into the scrollback, so what stays behind is only what
221
+ * was there before.
222
+ */
223
+ export async function scrollRegion({ title, lines, keys: borrowed }) {
224
+ const { height: available } = geometry();
225
+ // Nothing to drive it with, or no room to draw it in. Piping to `less` or `grep` lands
226
+ // here, and so does a window too short for a pane to be worth the name — in both cases the
227
+ // text is what was wanted, and the frame was never the point.
228
+ if (!process.stdin.isTTY || !process.stdout.isTTY || available < 4) {
229
+ for (const line of lines)
230
+ console.log(line);
231
+ return;
232
+ }
233
+ const keys = borrowed ?? keyReader();
234
+ let offset = 0;
235
+ let drawn = 0;
236
+ // Never taller than its content. The padding in `viewport` is there to hold the frame still
237
+ // while scrolling; with nothing to scroll it would just be a box of blank rows.
238
+ const paneHeight = (geo) => Math.min(geo.height, Math.max(1, lines.length));
239
+ const render = () => {
240
+ const geo = geometry();
241
+ const view = viewport(lines, offset, paneHeight(geo));
242
+ offset = view.offset;
243
+ const out = [
244
+ rule(title, geo.inner),
245
+ ...view.rows.map((row) => content(row, geo)),
246
+ footer(view.position, geo.inner),
247
+ hint(view),
248
+ ];
249
+ // Up to the top of what was drawn last time, then over it. `\x1b[K` on each line clears
250
+ // whatever the previous frame left to the right of the new one — cheaper than clearing
251
+ // the block first, and without the flicker that would cause on every keypress.
252
+ if (drawn > 0)
253
+ write(`\x1b[${drawn}A`);
254
+ write(out.map((line) => `\x1b[K${line}\n`).join(""));
255
+ // A window narrowed mid-scroll draws a shorter frame than the one it replaces, leaving
256
+ // the tail of the old one stranded below. The cursor is directly under the new block, so
257
+ // clearing to the end of the screen takes exactly that and nothing else.
258
+ if (drawn > out.length)
259
+ write("\x1b[J");
260
+ drawn = out.length;
261
+ };
262
+ write("\x1b[?25l"); // the cursor has nowhere useful to sit in a pane, and strobes if left
263
+ try {
264
+ render();
265
+ const resize = () => render();
266
+ process.stdout.on("resize", resize);
267
+ try {
268
+ for (;;) {
269
+ const key = await keys.next();
270
+ const geo = geometry();
271
+ const height = paneHeight(geo);
272
+ // A page keeps one line of overlap, so the eye has something to land on.
273
+ const page = Math.max(1, height - 1);
274
+ const before = offset;
275
+ switch (key) {
276
+ case "up":
277
+ case "k":
278
+ offset -= 1;
279
+ break;
280
+ case "down":
281
+ case "j":
282
+ offset += 1;
283
+ break;
284
+ case "pgup":
285
+ case "b":
286
+ offset -= page;
287
+ break;
288
+ case "pgdn":
289
+ case "space":
290
+ case "f":
291
+ offset += page;
292
+ break;
293
+ case "home":
294
+ case "g":
295
+ offset = 0;
296
+ break;
297
+ case "end":
298
+ case "G":
299
+ offset = lines.length;
300
+ break;
301
+ case "q":
302
+ case "escape":
303
+ case "enter":
304
+ case "quit":
305
+ return;
306
+ default:
307
+ continue;
308
+ }
309
+ // `viewport` clamps, so a key that cannot move anything repaints nothing. Without
310
+ // this, holding an arrow at either end redraws the same frame hundreds of times.
311
+ if (viewport(lines, offset, height).offset === before) {
312
+ offset = before;
313
+ continue;
314
+ }
315
+ render();
316
+ }
317
+ }
318
+ finally {
319
+ process.stdout.removeListener("resize", resize);
320
+ }
321
+ }
322
+ finally {
323
+ if (!borrowed)
324
+ keys.close();
325
+ // Erase the pane, then put the cursor back. `\x1b[J` clears to the end of the screen,
326
+ // which is exactly the block and nothing above it.
327
+ if (drawn > 0)
328
+ write(`\x1b[${drawn}A\x1b[J`);
329
+ write("\x1b[?25h");
330
+ }
331
+ }
332
+ /** The top rule, with the title inline on it — the same shape `box()` draws. */
333
+ function rule(title, inner) {
334
+ const dashes = Math.max(1, inner - title.length - 3);
335
+ return (`${style.green(glyph.step)} ${style.bold(title)} ` +
336
+ style.dim(glyph.dash.repeat(dashes) + glyph.boxTopRight));
337
+ }
338
+ /** One content row, padded to the frame so the right-hand trunk stays in its column. */
339
+ function content(text, geo) {
340
+ const plain = fit(text, geo.text);
341
+ const gap = " ".repeat(Math.max(0, geo.inner - 2 - plain.length));
342
+ return `${style.dim(glyph.trunk)} ${decorate(plain)}${gap}${style.dim(glyph.trunk)}`;
343
+ }
344
+ /** The bottom rule, carrying the position — the one number that says there is more below. */
345
+ function footer(position, inner) {
346
+ const label = position ? ` ${position} ` : "";
347
+ const tail = 3;
348
+ const lead = Math.max(1, inner - label.length - tail);
349
+ return style.dim(glyph.boxBottomLeft +
350
+ glyph.dash.repeat(lead) +
351
+ label +
352
+ glyph.dash.repeat(tail) +
353
+ glyph.boxBottomRight);
354
+ }
355
+ /** The keys, under the pane — only the ones that would actually do something. */
356
+ function hint(view) {
357
+ const arrows = unicodeEnabled ? "↑↓" : "up/down";
358
+ // Everything on screen at once: offering to scroll it would be offering nothing.
359
+ const parts = view.atTop && view.atBottom
360
+ ? ["q back"]
361
+ : [`${arrows} scroll`, "space page", "g/G top/bottom", "q back"];
362
+ return style.dim(` ${parts.join(` ${glyph.dot} `)}`);
363
+ }
364
+ //# sourceMappingURL=pager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pager.js","sourceRoot":"","sources":["../src/pager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,MAAM,GAAG,CAAC,CAAC;AAEjB,+FAA+F;AAC/F,MAAM,UAAU,GAAG,CAAC,CAAC;AAarB;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAe,EAAE,MAAc,EAAE,MAAc;IACtE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAExF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,EAAE,KAAK,GAAG;QACpB,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;KAC5E,CAAC;AACJ,CAAC;AAqBD,MAAM,UAAU,SAAS;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAmC,IAAI,CAAC;IACnD,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QAC3B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,OAAO,CAAC;YACxB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;QAC/B,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,CAAC;IACF,oFAAoF;IACpF,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,KAAK,CAAC,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEvB,OAAO;QACL,IAAI,EAAE,GAAG,EAAE,CACT,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,CAAC,MAAM,CAAC,CAAC;iBACrC,IAAI,MAAM;gBAAE,OAAO,CAAC,MAAM,CAAC,CAAC;;gBAC5B,OAAO,GAAG,OAAO,CAAC;QACzB,CAAC,CAAC;QACJ,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACrC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACnC,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;YACpC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACxB,qFAAqF;YACrF,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;gBAC7B,CAAC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC,IAAI,CAAC,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;QAC7B,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8FAA8F;AAC9F,SAAS,MAAM,CAAC,GAAW;IACzB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC;QACf,KAAK,IAAI,CAAC;QACV,KAAK,IAAI;YACP,OAAO,OAAO,CAAC;QACjB,KAAK,GAAG;YACN,OAAO,OAAO,CAAC;QACjB,wFAAwF;QACxF,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,GAAG,CAAC;IACf,CAAC;AACH,CAAC;AAaD;;;;;;GAMG;AACH,SAAS,QAAQ;IACf,sFAAsF;IACtF,oFAAoF;IACpF,iFAAiF;IACjF,yEAAyE;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAE7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;AAC5D,CAAC;AAED,yFAAyF;AACzF,SAAS,GAAG,CAAC,IAAY,EAAE,GAAW;IACpC,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;GAMG;AACH,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAmBD,0FAA0F;AAC1F,MAAM,UAAU,eAAe;IAC7B,OAAO,QAAQ,EAAE,CAAC,IAAI,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAiB;IAChF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEzC,uFAAuF;IACvF,2FAA2F;IAC3F,8DAA8D;IAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACnE,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;IACrC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,4FAA4F;IAC5F,gFAAgF;IAChF,MAAM,UAAU,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtF,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAErB,MAAM,GAAG,GAAG;YACV,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;YACtB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC;SACX,CAAC;QAEF,wFAAwF;QACxF,uFAAuF;QACvF,+EAA+E;QAC/E,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC;QACvC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,uFAAuF;QACvF,yFAAyF;QACzF,yEAAyE;QACzE,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM;YAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,CAAC,CAAC;IAEF,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,sEAAsE;IAC1F,IAAI,CAAC;QACH,MAAM,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEpC,IAAI,CAAC;YACH,SAAS,CAAC;gBACR,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC/B,yEAAyE;gBACzE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAG,MAAM,CAAC;gBAEtB,QAAQ,GAAG,EAAE,CAAC;oBACZ,KAAK,IAAI,CAAC;oBACV,KAAK,GAAG;wBACN,MAAM,IAAI,CAAC,CAAC;wBACZ,MAAM;oBACR,KAAK,MAAM,CAAC;oBACZ,KAAK,GAAG;wBACN,MAAM,IAAI,CAAC,CAAC;wBACZ,MAAM;oBACR,KAAK,MAAM,CAAC;oBACZ,KAAK,GAAG;wBACN,MAAM,IAAI,IAAI,CAAC;wBACf,MAAM;oBACR,KAAK,MAAM,CAAC;oBACZ,KAAK,OAAO,CAAC;oBACb,KAAK,GAAG;wBACN,MAAM,IAAI,IAAI,CAAC;wBACf,MAAM;oBACR,KAAK,MAAM,CAAC;oBACZ,KAAK,GAAG;wBACN,MAAM,GAAG,CAAC,CAAC;wBACX,MAAM;oBACR,KAAK,KAAK,CAAC;oBACX,KAAK,GAAG;wBACN,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;wBACtB,MAAM;oBACR,KAAK,GAAG,CAAC;oBACT,KAAK,QAAQ,CAAC;oBACd,KAAK,OAAO,CAAC;oBACb,KAAK,MAAM;wBACT,OAAO;oBACT;wBACE,SAAS;gBACb,CAAC;gBAED,kFAAkF;gBAClF,iFAAiF;gBACjF,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtD,MAAM,GAAG,MAAM,CAAC;oBAChB,SAAS;gBACX,CAAC;gBACD,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,sFAAsF;QACtF,mDAAmD;QACnD,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;QAC7C,KAAK,CAAC,WAAW,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,IAAI,CAAC,KAAa,EAAE,KAAa;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,CACL,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;QACnD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,SAAS,OAAO,CAAC,IAAY,EAAE,GAAa;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,6FAA6F;AAC7F,SAAS,MAAM,CAAC,QAAgB,EAAE,KAAa;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,GAAG,CACd,KAAK,CAAC,aAAa;QACjB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACvB,KAAK;QACL,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACvB,KAAK,CAAC,cAAc,CACvB,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,IAAI,CAAC,IAAc;IAC1B,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,iFAAiF;IACjF,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ;QACzB,CAAC,CAAC,CAAC,QAAQ,CAAC;QACZ,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAC7D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,gEAAgE;AAChE,eAAO,MAAM,aAAa,QAAY,CAAC;AAsPvC,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,GAAE,YAAiB,GAAG,MAAM,EAAE,GAAG,IAAI,CAqBnE"}
1
+ {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,gEAAgE;AAChE,eAAO,MAAM,aAAa,QAAY,CAAC;AA8PvC,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,IAAI,GAAE,YAAiB,GAAG,MAAM,EAAE,GAAG,IAAI,CAqBnE"}
package/dist/scene.js CHANGED
@@ -34,16 +34,24 @@ export const SCENE_COLUMNS = WIDTH + 3;
34
34
  * character, which cannot be half a cell tall.
35
35
  *
36
36
  * Mirrored from the reference so it opens back towards the aardvark.
37
+ *
38
+ * The horns are then drawn by hand rather than left where the coverage pass put them.
39
+ *
40
+ * Anti-aliasing a circle gives every row exactly the width its arc has, which stops the top and
41
+ * bottom rows short and leaves the moon reading as a disc with a notch. Carried out to the left
42
+ * and lengthened, they wrap around the opening instead, and the shape reads as a C. Their leading
43
+ * stipple is column 0 on all four of the rows that have one — the two horns and the two beside
44
+ * them — because a soft edge that steps in and out looks like a mistake rather than a curve.
37
45
  */
38
46
  // prettier-ignore
39
47
  const MOON = [
40
- "...dMMMMMMd...",
41
- "..d...ddMMMMM.",
48
+ "dMMMMMMMMMMMd.",
49
+ "d.....ddMMMMM.",
42
50
  ".........MMMMM",
43
51
  ".........dMMMM",
44
52
  ".........MMMMM",
45
- "..d...ddMMMMM.",
46
- "...dMMMMMMd...",
53
+ "d.....ddMMMMM.",
54
+ "dMMMMMMMMMMMd.",
47
55
  ];
48
56
  /**
49
57
  * Disc and eight rays, on the moon's footprint so the sky does not reflow at dawn.
package/dist/scene.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@popoverinstall/cli",
3
- "version": "0.6.1",
3
+ "version": "0.7.1",
4
4
  "description": "See your teammates' active Claude Code agents and ask them questions.",
5
5
  "keywords": [
6
6
  "claude",
@@ -41,7 +41,7 @@
41
41
  "prepack": "node ../../scripts/stage-plugin.mjs && tsc -b"
42
42
  },
43
43
  "dependencies": {
44
- "@popoverinstall/daemon": "0.6.1",
45
- "@popoverinstall/shared": "0.6.1"
44
+ "@popoverinstall/daemon": "0.7.1",
45
+ "@popoverinstall/shared": "0.7.1"
46
46
  }
47
47
  }
@@ -3,7 +3,7 @@
3
3
  "name": "popover",
4
4
  "displayName": "Popover",
5
5
  "description": "See your teammates' active Claude Code agents and ask them questions. A read-only fork answers from the agent's full context without interrupting your teammate.",
6
- "version": "0.6.1",
6
+ "version": "0.7.1",
7
7
  "author": {
8
8
  "name": "Quolabs"
9
9
  },
@@ -29,6 +29,12 @@
29
29
  "command": "node",
30
30
  "args": ["${CLAUDE_PLUGIN_ROOT}/scripts/deliver-messages.mjs"],
31
31
  "timeout": 5
32
+ },
33
+ {
34
+ "type": "command",
35
+ "command": "node",
36
+ "args": ["${CLAUDE_PLUGIN_ROOT}/scripts/announce-roster.mjs"],
37
+ "timeout": 5
32
38
  }
33
39
  ]
34
40
  }
@@ -0,0 +1,127 @@
1
+ #!/usr/bin/env node
2
+ // Announces which teammate agents are here, once per change in the cast.
3
+ //
4
+ // The skill file tells an agent that popover exists. This tells it who is present *right
5
+ // now* — the part doctrine cannot reliably produce. An agent acts on a fact sitting in its
6
+ // context long before it remembers to go looking for one, and the case that pays for this
7
+ // hook is the cheap one: it is about to edit a file a teammate's agent is already in, and
8
+ // the roster line is what makes the overlap visible before the edit rather than at merge.
9
+ //
10
+ // Registered synchronously on UserPromptSubmit, because that is the one event whose stdout
11
+ // is injected into the model's context. That makes this the second hook here allowed to
12
+ // print — see the header of deliver-messages.mjs — and it inherits every constraint that
13
+ // one documents: it runs before every prompt, so it must be fast and must fail open.
14
+ //
15
+ // It announces on change rather than on every prompt. A line repeated ahead of all fifty
16
+ // prompts in a session stops being information and becomes wallpaper: the model habituates,
17
+ // the user pays for it every turn, and the one turn where it mattered looks like the other
18
+ // forty-nine. So the cast last announced is remembered on disk and nothing is printed until
19
+ // it differs.
20
+
21
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
22
+ import path from "node:path";
23
+ import { callerSessionId, popoverHome, request } from "./_ipc.mjs";
24
+
25
+ // A fork answering a teammate's question must not be handed this. Its output goes back to
26
+ // whoever asked, and the cast of the machine it happens to run on is not theirs.
27
+ if (process.env.CLAUDE_CODE_ENTRYPOINT === "popover-fork") process.exit(0);
28
+
29
+ const sessionId = callerSessionId();
30
+
31
+ try {
32
+ // No stdin read at all. deliver-messages.mjs spends 150ms on the payload because a missed
33
+ // tell is a real loss; here the environment variable is enough, and 150ms would be a
34
+ // sixth of the whole budget.
35
+ if (!sessionId) process.exit(0);
36
+
37
+ // `refresh: false` is what makes the tight timeout survivable — this reads whatever the
38
+ // daemon already has, so it costs one socket round trip and no network. A hook sitting
39
+ // between a keystroke and the model must never be the thing that calls the cloud.
40
+ const reply = await request(
41
+ { t: "roster", id: "hook", refresh: false, fromSessionId: sessionId },
42
+ { timeoutMs: 250 },
43
+ );
44
+
45
+ // Daemon down, or signed out. Silence is right: the skill tells an agent how to read a
46
+ // daemon-down error when it actually reaches for a tool, and guessing here would put a
47
+ // wrong explanation in front of the model instead.
48
+ if (reply?.t !== "roster.ok") process.exit(0);
49
+
50
+ const peers = reply.entries.filter(
51
+ (e) => !e.isSelf && e.reachable && e.status !== "offline",
52
+ );
53
+ if (peers.length === 0) process.exit(0); // Working alone, which is most of the time.
54
+
55
+ // The cast, not what the cast is doing. Keying on activity would re-announce every time a
56
+ // teammate moved from one file to the next, which is printing on every prompt again.
57
+ const signature = peers
58
+ .map((e) => e.handle)
59
+ .sort()
60
+ .join(",");
61
+ if (signature === lastAnnounced(sessionId)) process.exit(0);
62
+
63
+ process.stdout.write(`${render(peers)}\n`);
64
+ remember(sessionId, signature);
65
+ } catch {
66
+ // Fail open, always. Whatever went wrong, the user's prompt must still go through.
67
+ }
68
+
69
+ process.exit(0);
70
+
71
+ /**
72
+ * One line the model can act on, and one sentence saying what it is for.
73
+ *
74
+ * Activity leads, owner follows. What a teammate's agent is touching is the part that
75
+ * collides with what this one is about to do, and the whole value of announcing is that the
76
+ * overlap is noticed before the edit.
77
+ *
78
+ * The closing sentence is not padding. Without it the model reads a bare roster as news
79
+ * worth repeating and opens with "2 teammates are online!" ahead of an unrelated question —
80
+ * which is how a useful signal gets itself turned off.
81
+ */
82
+ function render(peers) {
83
+ const who = peers
84
+ .map((e) => {
85
+ const doing = e.activity?.verb
86
+ ? `${e.activity.verb}${e.activity.target ? ` ${e.activity.target}` : ""}, `
87
+ : "";
88
+ return `${e.handle} (${doing}${e.ownerName})`;
89
+ })
90
+ .join(", ");
91
+
92
+ return (
93
+ `[popover] Teammate agents now active in this repo: ${who}. ` +
94
+ `Before editing a file one of them is already in, say so rather than colliding with it. ` +
95
+ `If something here turns on a decision or a reason this repo does not record, you can ` +
96
+ `ask one with popover's team_ask tool. Do not mention this notice to the user unless it ` +
97
+ `turns out to be relevant.`
98
+ );
99
+ }
100
+
101
+ // Per-session, so a new session hears the cast once even when it has not changed since the
102
+ // last one ended.
103
+ //
104
+ // Loose end: nothing prunes these. They are a few dozen bytes each and a session id is a
105
+ // uuid, so a heavy user accretes a directory of them over months. Either sweep entries older
106
+ // than a day from here, or fold the state into what the daemon already keeps per session and
107
+ // drop the files — the daemon knows when a session ends and this script does not.
108
+ function stateFile(id) {
109
+ return path.join(popoverHome(), "announced", `${id}.txt`);
110
+ }
111
+
112
+ function lastAnnounced(id) {
113
+ try {
114
+ return readFileSync(stateFile(id), "utf8").trim();
115
+ } catch {
116
+ return "";
117
+ }
118
+ }
119
+
120
+ function remember(id, signature) {
121
+ try {
122
+ mkdirSync(path.join(popoverHome(), "announced"), { recursive: true });
123
+ writeFileSync(stateFile(id), signature, "utf8");
124
+ } catch {
125
+ // An unwritable state file means announcing again next prompt. Annoying, not broken.
126
+ }
127
+ }
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  // Delivers tells into a live session.
3
3
  //
4
- // This is the one hook in the plugin that writes to stdout on purpose. Every other one is
5
- // registered `async: true` and forbidden from printing, because for UserPromptSubmit stdout
6
- // is injected into the model's context — see the header of emit-event.mjs. That is precisely
7
- // the channel a tell needs, so this hook is synchronous and its output is the message.
4
+ // One of the two hooks in the plugin that write to stdout on purpose announce-roster.mjs
5
+ // is the other. Every one of the rest is registered `async: true` and forbidden from
6
+ // printing, because for UserPromptSubmit stdout is injected into the model's context — see
7
+ // the header of emit-event.mjs. That is precisely the channel a tell needs, so this hook is
8
+ // synchronous and its output is the message.
8
9
  //
9
10
  // Which makes it the riskiest script here, and it is written accordingly:
10
11
  //
@@ -0,0 +1,145 @@
1
+ ---
2
+ name: popover
3
+ description: Reach a teammate's Claude Code agent working in this same repo. Use when a question is about what a colleague decided, already ruled out, or is changing right now — why the code is the way it is when the repo does not say, whether work you are about to start is already in flight, or why something you did not touch is broken. Also covers handing this whole conversation to a teammate as a fork.
4
+ ---
5
+
6
+ # popover
7
+
8
+ Your teammates are running their own Claude Code sessions in this repo. Each one has
9
+ accumulated context you do not have: the alternatives they rejected, the constraint that
10
+ forced an awkward shape, what they changed twenty minutes ago and have not pushed. popover
11
+ lets you reach those agents.
12
+
13
+ The reason this skill exists is that the moment to use popover rarely announces itself. The
14
+ user asks why something is the way it is, and the honest answer is that the repo does not
15
+ record it — but a colleague's agent worked it out this morning. Nobody will type
16
+ `/popover:team` for you. Noticing is your job.
17
+
18
+ ## The three tools
19
+
20
+ They arrive as deferred MCP tools, so you have their names but not their schemas. Load them
21
+ before use:
22
+
23
+ ```
24
+ ToolSearch("select:mcp__plugin_popover_popover__team_list,mcp__plugin_popover_popover__team_ask,mcp__plugin_popover_popover__team_tell")
25
+ ```
26
+
27
+ Their own descriptions are detailed and authoritative on arguments and limits — read them
28
+ once loaded rather than guessing. In short:
29
+
30
+ - **`team_list`** — who is active in this repo, what they are doing, and each one's short
31
+ handle (`B1`). Takes nothing. Read-only and cheap.
32
+ - **`team_ask`** — one question to one agent, and you wait for the answer. A read-only copy
33
+ of their session answers from its full context. Their live session is not interrupted and
34
+ cannot be changed by it. Takes up to ~90s by default.
35
+ - **`team_tell`** — a one- or two-sentence heads-up delivered into a teammate's live session
36
+ before its next prompt. Nothing comes back, and their user is notified that you sent it.
37
+
38
+ ## When to reach for it on your own
39
+
40
+ Check the roster and consider an ask when:
41
+
42
+ - **The user asks *why*** — why a library was chosen, why a function is shaped oddly, why an
43
+ obvious approach was not taken — **and the repo does not answer it.** Read the code, the
44
+ comments, `git log`, `git blame`, and `CLAUDE.md` first. If the reasoning is not written
45
+ down anywhere, that is precisely the case popover was built for: it exists only in
46
+ somebody's session.
47
+ - **You are about to start something that may already be underway** — a rename spanning many
48
+ files, a dependency bump, a refactor of a shared module. One `team_list` costs almost
49
+ nothing and can save the user an afternoon of conflicted work.
50
+ - **You are blocked by something you did not break** — a migration that appears unapplied, a
51
+ failing build on untouched code, an endpoint that disagrees with its own types. Ask the
52
+ person whose agent is in that area before you debug their in-flight change as if it were a
53
+ bug.
54
+ - **You are about to edit a file a teammate's agent is working in right now.** The roster
55
+ often says what each agent is doing. Prefer a `tell` here — it is a collision, not a
56
+ question.
57
+ - **The user names a colleague.** "Did Bob get the webhook working?", "what is Sarah doing to
58
+ globals.css" — that is a direct signal, and you do not need to be asked twice.
59
+
60
+ Say what you are doing and why before you ask, in a line. The user should never be surprised
61
+ that you spent a teammate's tokens.
62
+
63
+ ## When not to
64
+
65
+ - **When the repo can answer.** Reading is free and instant; an ask runs on someone else's
66
+ machine at their expense. Exhaust local evidence first, always.
67
+ - **For curiosity or completeness.** Do not ask because a second opinion would be tidy. Ask
68
+ because you are stuck and they are not.
69
+ - **More than one agent per question.** Never fan out across the roster to see who answers
70
+ best. Pick the one that fits; if none obviously does, show the user the roster instead.
71
+ - **To hand off work.** A `tell` is information, not a directive — the receiving agent is
72
+ explicitly told to treat it that way — and an ask talks to a read-only copy that cannot act.
73
+ Neither one delegates. If the user wants a colleague to *do* something, say plainly that
74
+ popover does not do that, and let them message the human.
75
+ - **For anything outside this repo.** Only agents in the same repository are visible or
76
+ reachable. An empty roster means nobody else is working *here* — not that the team is idle.
77
+ Phrase it that way, or you will imply something false about your user's colleagues.
78
+
79
+ ## The cost asymmetry, which governs consent
80
+
81
+ Three tools, three different things being spent:
82
+
83
+ | | Costs | Ask the user first? |
84
+ | --- | --- | --- |
85
+ | `team_list` | Nothing meaningful | No — just do it |
86
+ | `team_ask` | The teammate's tokens and compute, on their machine. Interrupts nobody. | No, but say you are doing it |
87
+ | `team_tell` | A colleague's **attention**. It lands in their live session and notifies them. | **Yes, every time** |
88
+
89
+ `team_tell` is the only thing in popover that reaches a running agent. Treat it as something
90
+ the user should have deliberately meant to do, and confirm before sending. It is also rate
91
+ limited to 10 messages an hour to any one agent, which is a hint about its intended frequency.
92
+
93
+ If it is genuinely ambiguous whether to ask or tell, ask. It interrupts nobody.
94
+
95
+ ## Writing an ask worth the money
96
+
97
+ The answering agent has none of your conversation. It cannot see the file you are looking at
98
+ or the error you just read. So make the question stand alone:
99
+
100
+ - Expand every pronoun and vague reference. "that bug" → "the token refresh bug in the auth
101
+ service".
102
+ - Name files by path, and say what you are trying to do, not only what you want to know.
103
+ - Ask one well-formed question, not three exploratory ones. You get one round trip for the
104
+ price.
105
+
106
+ A poor ask — *"why is it done this way?"* — comes back useless and you have spent a
107
+ colleague's tokens to learn nothing. A good one — *"`apps/web/src/lib/auth-redirect.ts`
108
+ derives the origin from the request Host header, with a comment saying
109
+ `NEXT_PUBLIC_APP_URL` still points at the old Vercel domain. Is that variable going to be
110
+ corrected, or is reading Host the intended long-term approach?"* — comes back with the
111
+ reasoning, because that is knowledge about shared state that lives in a person's head rather
112
+ than in the repo.
113
+
114
+ Never invent a handle. Use only what `team_list` returned, and note that a handle from
115
+ earlier in this conversation may have gone out of scope since. If the tool says it does not
116
+ match, relay that instead of trying a different agent.
117
+
118
+ ## Forks are a different thing
119
+
120
+ A fork hands over **this entire conversation**, frozen, and the recipient continues it in
121
+ their own session. Nothing comes back. That includes the contents of every file read into the
122
+ context, so it is a far larger disclosure than an ask, and it is only ever something the user
123
+ asks for in as many words — never something you suggest doing on their behalf and then do.
124
+
125
+ When the user wants an *answer* rather than to hand over the whole conversation, an ask is the
126
+ cheaper and more private thing. Offer it.
127
+
128
+ ## When it does not work
129
+
130
+ The tools return errors as text; relay them rather than retrying with different arguments.
131
+
132
+ - **"the popover daemon is not running"** — teammate agents are unreachable from this machine.
133
+ `popover daemon start`, or `popover doctor` to diagnose. Do not treat it as an empty roster.
134
+ - **Empty roster** — print what the tool returned verbatim; it knows whether the answer is
135
+ "nobody is working here" or something else. Do not paraphrase it into "your team is idle".
136
+ - **Handle does not match** — relay it. Do not guess at another agent.
137
+ - **Ask times out** — say so. Their machine may be busy or the session may have ended. Do not
138
+ silently re-ask.
139
+
140
+ ## The user-facing commands
141
+
142
+ `/popover:team` and `/popover:fork` carry the full flows for when the user drives this
143
+ explicitly, including how to present a roster and how to take delivery of a fork. Do not
144
+ restate their steps here or work around them — when the user invokes a command, follow it.
145
+ This skill is for the case where nobody invoked anything and you noticed the moment yourself.