@edeng23/pines 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +37 -0
  3. package/dist/cli.js +83 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/client/ansi.js +37 -0
  6. package/dist/client/ansi.js.map +1 -0
  7. package/dist/client/app.js +1868 -0
  8. package/dist/client/app.js.map +1 -0
  9. package/dist/client/boot.js +221 -0
  10. package/dist/client/boot.js.map +1 -0
  11. package/dist/client/commands.js +133 -0
  12. package/dist/client/commands.js.map +1 -0
  13. package/dist/client/daemon-client.js +99 -0
  14. package/dist/client/daemon-client.js.map +1 -0
  15. package/dist/client/forest/camera.js +88 -0
  16. package/dist/client/forest/camera.js.map +1 -0
  17. package/dist/client/forest/canvas.js +175 -0
  18. package/dist/client/forest/canvas.js.map +1 -0
  19. package/dist/client/forest/sidebar.js +182 -0
  20. package/dist/client/forest/sidebar.js.map +1 -0
  21. package/dist/client/forest/status.js +39 -0
  22. package/dist/client/forest/status.js.map +1 -0
  23. package/dist/client/forest/style.js +70 -0
  24. package/dist/client/forest/style.js.map +1 -0
  25. package/dist/client/forest/styles.js +429 -0
  26. package/dist/client/forest/styles.js.map +1 -0
  27. package/dist/client/forest/view.js +181 -0
  28. package/dist/client/forest/view.js.map +1 -0
  29. package/dist/client/forest/wordmark.js +26 -0
  30. package/dist/client/forest/wordmark.js.map +1 -0
  31. package/dist/client/input.js +89 -0
  32. package/dist/client/input.js.map +1 -0
  33. package/dist/client/theme.js +27 -0
  34. package/dist/client/theme.js.map +1 -0
  35. package/dist/client/tree/asciitree.js +277 -0
  36. package/dist/client/tree/asciitree.js.map +1 -0
  37. package/dist/client/tree/convmap.js +260 -0
  38. package/dist/client/tree/convmap.js.map +1 -0
  39. package/dist/client/tree/lanegraph.js +260 -0
  40. package/dist/client/tree/lanegraph.js.map +1 -0
  41. package/dist/client/tree/merge.js +161 -0
  42. package/dist/client/tree/merge.js.map +1 -0
  43. package/dist/client/tree/sessionview.js +163 -0
  44. package/dist/client/tree/sessionview.js.map +1 -0
  45. package/dist/client/tree/view.js +238 -0
  46. package/dist/client/tree/view.js.map +1 -0
  47. package/dist/client/uistate.js +45 -0
  48. package/dist/client/uistate.js.map +1 -0
  49. package/dist/daemon/agents.js +102 -0
  50. package/dist/daemon/agents.js.map +1 -0
  51. package/dist/daemon/branch.js +149 -0
  52. package/dist/daemon/branch.js.map +1 -0
  53. package/dist/daemon/embed-worker.js +74 -0
  54. package/dist/daemon/embed-worker.js.map +1 -0
  55. package/dist/daemon/essence.js +194 -0
  56. package/dist/daemon/essence.js.map +1 -0
  57. package/dist/daemon/extbridge.js +138 -0
  58. package/dist/daemon/extbridge.js.map +1 -0
  59. package/dist/daemon/lifecycle.js +134 -0
  60. package/dist/daemon/lifecycle.js.map +1 -0
  61. package/dist/daemon/pty-compat.js +53 -0
  62. package/dist/daemon/pty-compat.js.map +1 -0
  63. package/dist/daemon/semantic.js +337 -0
  64. package/dist/daemon/semantic.js.map +1 -0
  65. package/dist/daemon/server.js +808 -0
  66. package/dist/daemon/server.js.map +1 -0
  67. package/dist/daemon/supervisor.js +311 -0
  68. package/dist/daemon/supervisor.js.map +1 -0
  69. package/dist/extension/pines-extension.js +191 -0
  70. package/dist/extension/pines-extension.js.map +1 -0
  71. package/dist/layout/lexical.js +104 -0
  72. package/dist/layout/lexical.js.map +1 -0
  73. package/dist/layout/pca.js +91 -0
  74. package/dist/layout/pca.js.map +1 -0
  75. package/dist/layout/relax.js +47 -0
  76. package/dist/layout/relax.js.map +1 -0
  77. package/dist/session/ingest.js +95 -0
  78. package/dist/session/ingest.js.map +1 -0
  79. package/dist/session/parser.js +254 -0
  80. package/dist/session/parser.js.map +1 -0
  81. package/dist/shared/config.js +30 -0
  82. package/dist/shared/config.js.map +1 -0
  83. package/dist/shared/paths.js +47 -0
  84. package/dist/shared/paths.js.map +1 -0
  85. package/dist/shared/protocol.js +9 -0
  86. package/dist/shared/protocol.js.map +1 -0
  87. package/dist/shared/types.js +3 -0
  88. package/dist/shared/types.js.map +1 -0
  89. package/dist/shared/wire.js +51 -0
  90. package/dist/shared/wire.js.map +1 -0
  91. package/dist/store/db.js +203 -0
  92. package/dist/store/db.js.map +1 -0
  93. package/dist/store/watcher.js +69 -0
  94. package/dist/store/watcher.js.map +1 -0
  95. package/package.json +80 -0
  96. package/scripts/fix-node-pty.mjs +34 -0
  97. package/src/extension/pines-extension.ts +192 -0
  98. package/src/store/schema.sql +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/client/forest/view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The pines wordmark: a three-row block-letter mark, colored like the
3
+ * canopy — pale where the light hits the top, deep at the base. One
4
+ * definition shared by the sidebar header and the boot splash so the brand
5
+ * never drifts.
6
+ */
7
+ export const WORDMARK = [
8
+ "█▀▄ ▀█▀ █▄ █ █▀▀ ▄▀▀",
9
+ "█▀▀ █ █ ▀█ █▀▀ ▀▀▄",
10
+ "█ ▄█▄ █ █ ▀▀▀ ▄▄▀",
11
+ ];
12
+ export const WORDMARK_W = WORDMARK[0].length;
13
+ /** Canopy gradient, top row → bottom row. */
14
+ export const WORDMARK_SGR = [
15
+ "1;38;5;108",
16
+ "1;38;5;71",
17
+ "1;38;5;65",
18
+ ];
19
+ /** The three foliage rows + trunk of the mascot pine, with their colors. */
20
+ export const MASCOT = [
21
+ [" ▲", "38;5;108"],
22
+ [" ▟█▙", "38;5;71"],
23
+ ["▟███▙", "38;5;65"],
24
+ [" ╹", "38;5;95"],
25
+ ];
26
+ //# sourceMappingURL=wordmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wordmark.js","sourceRoot":"","sources":["../../../src/client/forest/wordmark.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAsC;IACzD,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;CACvB,CAAC;AACF,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAE7C,6CAA6C;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAsC;IAC7D,YAAY;IACZ,WAAW;IACX,WAAW;CACZ,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,MAAM,GAA6C;IAC9D,CAAC,KAAK,EAAE,UAAU,CAAC;IACnB,CAAC,MAAM,EAAE,SAAS,CAAC;IACnB,CAAC,OAAO,EAAE,SAAS,CAAC;IACpB,CAAC,KAAK,EAAE,SAAS,CAAC;CACnB,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Raw stdin router: extracts SGR mouse sequences (CSI < b;x;y M/m) from the
3
+ * byte stream and emits logical keys. Terminals may coalesce multiple
4
+ * keystrokes into one data event, so callers must not receive "Ctrl+t f" as
5
+ * one opaque chunk.
6
+ *
7
+ * We own the stdin loop (pi-tui has no mouse support at all); mouse reporting
8
+ * is enabled only in forest/tree views, never while attached to a pi.
9
+ */
10
+ import { EventEmitter } from "node:events";
11
+ const MOUSE_RE = /^\x1b\[<(\d+);(\d+);(\d+)([Mm])/;
12
+ const CSI_KEY_RE = /^\x1b(?:\[[0-?]*[ -/]*[@-~]|O.)/;
13
+ export class InputRouter extends EventEmitter {
14
+ buf = "";
15
+ feed(chunk) {
16
+ this.buf += chunk.toString("utf8");
17
+ this.drain();
18
+ }
19
+ drain() {
20
+ while (this.buf.length > 0) {
21
+ if (this.buf.startsWith("\x1b[<")) {
22
+ const m = MOUSE_RE.exec(this.buf);
23
+ if (m) {
24
+ this.buf = this.buf.slice(m[0].length);
25
+ this.emit("mouse", decodeSgr(Number(m[1]), Number(m[2]), Number(m[3]), m[4] === "M"));
26
+ continue;
27
+ }
28
+ // Partial mouse sequence: wait for more bytes (bounded).
29
+ if (this.buf.length < 24 && /^\x1b\[<[\d;]*$/.test(this.buf)) {
30
+ return;
31
+ }
32
+ }
33
+ if (this.buf.startsWith("\x1b")) {
34
+ const key = CSI_KEY_RE.exec(this.buf)?.[0];
35
+ if (key) {
36
+ this.buf = this.buf.slice(key.length);
37
+ this.emit("key", key);
38
+ continue;
39
+ }
40
+ // Preserve a CSI/SS3 sequence split across stdin data events.
41
+ if (this.buf.length < 64 &&
42
+ (/^\x1b\[[0-?]*[ -/]*$/.test(this.buf) || this.buf === "\x1bO")) {
43
+ return;
44
+ }
45
+ }
46
+ const codePoint = this.buf.codePointAt(0);
47
+ const key = String.fromCodePoint(codePoint);
48
+ this.buf = this.buf.slice(key.length);
49
+ this.emit("key", key);
50
+ }
51
+ }
52
+ }
53
+ function decodeSgr(b, x1, y1, press) {
54
+ const shift = (b & 4) !== 0;
55
+ const alt = (b & 8) !== 0;
56
+ const ctrl = (b & 16) !== 0;
57
+ const motion = (b & 32) !== 0;
58
+ const x = x1 - 1;
59
+ const y = y1 - 1;
60
+ if (b >= 64) {
61
+ return {
62
+ kind: (b & 1) === 0 ? "wheel-up" : "wheel-down",
63
+ button: 0,
64
+ x,
65
+ y,
66
+ shift,
67
+ alt,
68
+ ctrl,
69
+ };
70
+ }
71
+ const raw = b & 3;
72
+ const button = (raw === 3 ? 0 : raw);
73
+ if (motion) {
74
+ // raw 3 with motion = pointer move with no button held.
75
+ return { kind: raw === 3 ? "move" : "drag", button, x, y, shift, alt, ctrl };
76
+ }
77
+ return { kind: press ? "press" : "release", button, x, y, shift, alt, ctrl };
78
+ }
79
+ export const MOUSE_ENABLE = "\x1b[?1002h\x1b[?1006h";
80
+ export const MOUSE_DISABLE = "\x1b[?1006l\x1b[?1002l";
81
+ /** Match Pi's enhanced input mode while attached, without changing its stack. */
82
+ export const GUEST_INPUT_ENABLE = "\x1b[>4;0m\x1b[=7u\x1b[?2004h";
83
+ /** Restore normal shell/Pines input after leaving Pi. */
84
+ export const GUEST_INPUT_DISABLE = "\x1b[?2004l\x1b[=0u\x1b[>4;0m";
85
+ export const ALT_SCREEN_ENTER = "\x1b[?1049h\x1b[?25l";
86
+ export const ALT_SCREEN_LEAVE = "\x1b[?25h\x1b[?1049l";
87
+ export const SYNC_BEGIN = "\x1b[?2026h";
88
+ export const SYNC_END = "\x1b[?2026l";
89
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/client/input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Grayscale tiers as explicit 256-color grays.
3
+ *
4
+ * SGR 90 (bright black) is whatever the user's theme says it is — on many
5
+ * popular dark themes that's nearly the background color, which made elision
6
+ * rows, gutter dots, and sidebar metadata unreadable. Fixed xterm-256 grays
7
+ * render consistently everywhere (we already rely on 256 color for the teal
8
+ * attention dot).
9
+ */
10
+ /** Secondary text: elisions, headers, ages, hints, placeholders. */
11
+ export const MUTED = "38;5;248";
12
+ /** Structure: rails, lineage edges, divider, boring node dots. Darker than
13
+ * MUTED so content reads above structure, but never below visibility. */
14
+ export const FAINT = "38;5;243";
15
+ /**
16
+ * Decoration only: graph paper, contour rings. Below FAINT so structure still
17
+ * reads above it, but not so far below that it disappears — 238 was tuned on
18
+ * a light terminal and sank into the background on a dark one.
19
+ */
20
+ export const GRID = "38;5;240";
21
+ /** Foliage. Mid-green so it holds up on light and dark grounds alike; the
22
+ * status colors stay reserved for state, so a tree can look like a tree
23
+ * without claiming to be a status. */
24
+ export const LEAF = "38;5;71";
25
+ /** Bare wood: a session with no process behind it has no needles left. */
26
+ export const BARK = "38;5;101";
27
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/client/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oEAAoE;AACpE,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;AAEhC;yEACyE;AACzE,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC;AAE/B;;sCAEsC;AACtC,MAAM,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC;AAE9B,0EAA0E;AAC1E,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC"}
@@ -0,0 +1,277 @@
1
+ import { spliceCustom } from "./lanegraph.js";
2
+ import { humanAge } from "../forest/sidebar.js";
3
+ const MIN_RUN = 2;
4
+ /** Non-active branches needing more rows than this fold under scale rules. */
5
+ const FOLD_MIN_ROWS = 3;
6
+ function isUserish(n) {
7
+ return n.kind === "user" || n.kind === "compaction" || n.kind === "branch_summary";
8
+ }
9
+ function subtreeHasKeep(ctx, id) {
10
+ if (ctx.keep.has(id))
11
+ return true;
12
+ for (const c of ctx.children.get(id) ?? [])
13
+ if (subtreeHasKeep(ctx, c))
14
+ return true;
15
+ return false;
16
+ }
17
+ function subtreeIds(ctx, id) {
18
+ const out = [];
19
+ const visit = (n) => {
20
+ out.push(n);
21
+ for (const c of ctx.children.get(n) ?? [])
22
+ visit(c);
23
+ };
24
+ visit(id);
25
+ return out;
26
+ }
27
+ /** Rough naive-row count of a branch (fold decisions only). */
28
+ function estimateRows(ctx, id) {
29
+ let rows = 0;
30
+ let run = 0;
31
+ const flush = () => {
32
+ rows += run >= MIN_RUN ? 1 : run;
33
+ run = 0;
34
+ };
35
+ const visit = (n) => {
36
+ const node = ctx.detail.nodes[n];
37
+ const kids = ctx.children.get(n) ?? [];
38
+ if (isUserish(node) || node.label || n === ctx.leafId || ctx.keep.has(n) || kids.length > 1) {
39
+ flush();
40
+ rows += 1;
41
+ }
42
+ else
43
+ run += 1;
44
+ if (kids.length === 0)
45
+ flush();
46
+ for (const k of kids)
47
+ visit(k);
48
+ };
49
+ visit(id);
50
+ return rows;
51
+ }
52
+ function emitFold(ctx, id, prefix) {
53
+ const ids = subtreeIds(ctx, id);
54
+ const head = ctx.detail.nodes[id];
55
+ let lastTs = "";
56
+ for (const n of ids) {
57
+ const ts = ctx.detail.nodes[n]?.timestamp ?? "";
58
+ if (ts > lastTs)
59
+ lastTs = ts;
60
+ }
61
+ const ageMs = lastTs ? Date.parse(lastTs) : NaN;
62
+ ctx.rows.push({
63
+ kind: "fold",
64
+ prefix,
65
+ foldId: id,
66
+ foldExcerpt: head.excerpt || head.kind,
67
+ foldMsgs: ids.length,
68
+ foldAge: Number.isFinite(ageMs) ? humanAge(ageMs, ctx.now) : "",
69
+ foldIds: ids,
70
+ onActive: false,
71
+ isLeaf: false,
72
+ });
73
+ ctx.folded = true;
74
+ }
75
+ /**
76
+ * Emit one branch starting at `id`. `guides` = accumulated ancestor prefix;
77
+ * `connector` decorates the branch's first row; `cont` replaces it afterward.
78
+ */
79
+ function walk(ctx, id, guides, connector, cont) {
80
+ let first = true;
81
+ let inReply = false; // inside a user turn's reply stanza
82
+ let replyFirst = false; // next stanza row carries the └─
83
+ const run = [];
84
+ /** Branches collected along the current exchange, fanned at its end. */
85
+ const pending = [];
86
+ /** Prefix for the next emitted row; consumes connector and stanza └─. */
87
+ const nextPrefix = (stanzaRow) => {
88
+ let p = guides + (first ? connector : cont);
89
+ first = false;
90
+ if (stanzaRow && inReply) {
91
+ if (replyFirst) {
92
+ replyFirst = false;
93
+ p += "└─ ";
94
+ }
95
+ else {
96
+ p += " ";
97
+ }
98
+ }
99
+ return p;
100
+ };
101
+ const flushRun = () => {
102
+ if (run.length === 0)
103
+ return;
104
+ const runId = run[0];
105
+ const onActive = ctx.active.has(runId);
106
+ if (run.length >= MIN_RUN && !ctx.expandedRuns.has(runId)) {
107
+ const toolCount = run.filter((n) => ctx.detail.nodes[n]?.kind === "tool").length;
108
+ ctx.rows.push({
109
+ kind: "elision",
110
+ prefix: nextPrefix(true),
111
+ runId,
112
+ count: run.length,
113
+ ids: [...run],
114
+ toolCount,
115
+ onActive,
116
+ isLeaf: false,
117
+ });
118
+ }
119
+ else {
120
+ for (const n of run) {
121
+ ctx.rows.push({
122
+ kind: "node",
123
+ prefix: nextPrefix(true),
124
+ nodeId: n,
125
+ node: ctx.detail.nodes[n],
126
+ onActive: ctx.active.has(n),
127
+ isLeaf: n === ctx.leafId,
128
+ });
129
+ }
130
+ }
131
+ run.length = 0;
132
+ };
133
+ const emit = (n, stanzaRow) => {
134
+ ctx.rows.push({
135
+ kind: "node",
136
+ prefix: nextPrefix(stanzaRow),
137
+ nodeId: n,
138
+ node: ctx.detail.nodes[n],
139
+ onActive: ctx.active.has(n),
140
+ isLeaf: n === ctx.leafId,
141
+ });
142
+ };
143
+ let cur = id;
144
+ while (cur) {
145
+ const node = ctx.detail.nodes[cur];
146
+ const kids = ctx.children.get(cur) ?? [];
147
+ const significant = isUserish(node) || node.label || cur === ctx.leafId || ctx.keep.has(cur) || kids.length > 1;
148
+ if (significant) {
149
+ flushRun();
150
+ if (isUserish(node)) {
151
+ inReply = false; // user turns return to the branch margin
152
+ emit(cur, false);
153
+ inReply = true;
154
+ replyFirst = true;
155
+ }
156
+ else {
157
+ emit(cur, true);
158
+ }
159
+ }
160
+ else {
161
+ run.push(cur);
162
+ }
163
+ // The unit of branching is the EXCHANGE, not the node. The answer chain
164
+ // (tools + replies) continues the stanza; branches collected anywhere
165
+ // along it — off the question or off its replies — fan together AFTER
166
+ // the exchange. The split never happens "into" an answer.
167
+ // The first-created answer continues the stanza; a re-answer is a
168
+ // branch like any other (stable — attaching to it must not swap what
169
+ // reads as "the" answer).
170
+ const conts = kids.filter((k) => !isUserish(ctx.detail.nodes[k]));
171
+ const next = conts[0];
172
+ for (const k of kids)
173
+ if (k !== next)
174
+ pending.push(k);
175
+ if (next) {
176
+ cur = next;
177
+ continue;
178
+ }
179
+ flushRun();
180
+ if (pending.length === 0)
181
+ return;
182
+ if (pending.length === 1) {
183
+ // A single continuation is just the conversation flowing on — no fan,
184
+ // no staircase; user turns return to the margin as always.
185
+ cur = pending[0];
186
+ pending.length = 0;
187
+ continue;
188
+ }
189
+ const branches = [...pending];
190
+ pending.length = 0;
191
+ const childGuides = guides + cont + (inReply ? " " : "");
192
+ const activeChild = branches.find((k) => ctx.active.has(k));
193
+ const rest = branches.filter((k) => k !== activeChild);
194
+ if (ctx.foldMode && activeChild) {
195
+ // Scale rule: the active path stays pinned at its margin — only the
196
+ // side branches indent (all with ├─, since the main line continues
197
+ // below them). Big branches fold to a single summary row.
198
+ for (const child of rest) {
199
+ if (!ctx.unfolded.has(child) &&
200
+ !subtreeHasKeep(ctx, child) &&
201
+ estimateRows(ctx, child) > FOLD_MIN_ROWS) {
202
+ emitFold(ctx, child, childGuides + "├─ ");
203
+ }
204
+ else {
205
+ walk(ctx, child, childGuides, "├─ ", "│ ");
206
+ }
207
+ }
208
+ cur = activeChild;
209
+ inReply = false;
210
+ continue;
211
+ }
212
+ branches.forEach((child, i) => {
213
+ const last = i === branches.length - 1;
214
+ const conn = last ? "└─ " : "├─ ";
215
+ const contChild = last ? " " : "│ ";
216
+ if (ctx.foldMode &&
217
+ !ctx.unfolded.has(child) &&
218
+ !subtreeHasKeep(ctx, child) &&
219
+ estimateRows(ctx, child) > FOLD_MIN_ROWS) {
220
+ emitFold(ctx, child, childGuides + conn);
221
+ }
222
+ else {
223
+ walk(ctx, child, childGuides, conn, contChild);
224
+ }
225
+ });
226
+ return;
227
+ }
228
+ }
229
+ export function buildAsciiTree(detail, opts = {}) {
230
+ const { children, roots, leafId } = spliceCustom(detail);
231
+ const active = new Set();
232
+ for (let cur = leafId; cur;) {
233
+ active.add(cur);
234
+ cur = detail.nodes[cur]?.parentId ?? null;
235
+ }
236
+ const build = (foldMode) => {
237
+ const ctx = {
238
+ detail,
239
+ children,
240
+ active,
241
+ keep: opts.keep ?? new Set(),
242
+ leafId,
243
+ expandedRuns: opts.expandedRuns ?? new Set(),
244
+ unfolded: opts.unfolded ?? new Set(),
245
+ foldMode,
246
+ now: opts.now ?? Date.now(),
247
+ rows: [],
248
+ folded: false,
249
+ };
250
+ for (const r of roots)
251
+ walk(ctx, r, "", "", "");
252
+ return ctx;
253
+ };
254
+ // Naive first; engage scale rules only when the tree outgrows the viewport.
255
+ let ctx = build(false);
256
+ const vh = opts.viewportH ?? 0;
257
+ if (vh > 0 && ctx.rows.length > vh)
258
+ ctx = build(true);
259
+ return { rows: ctx.rows, leafId, folded: ctx.folded };
260
+ }
261
+ /** Row index for a node id (cursor placement, search jumps). */
262
+ export function aRowIndexOf(tree, nodeId) {
263
+ if (!nodeId)
264
+ return -1;
265
+ return tree.rows.findIndex((r) => r.nodeId === nodeId);
266
+ }
267
+ /** The elision run or folded branch hiding `nodeId`, if any. */
268
+ export function aContainerOf(tree, nodeId) {
269
+ for (const r of tree.rows) {
270
+ if (r.kind === "elision" && r.ids?.includes(nodeId))
271
+ return { kind: "run", id: r.runId };
272
+ if (r.kind === "fold" && r.foldIds?.includes(nodeId))
273
+ return { kind: "fold", id: r.foldId };
274
+ }
275
+ return undefined;
276
+ }
277
+ //# sourceMappingURL=asciitree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asciitree.js","sourceRoot":"","sources":["../../../src/client/tree/asciitree.ts"],"names":[],"mappings":"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"}