@hortus/cli 0.0.0-stage → 1.0.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 (50) hide show
  1. package/dist/api.d.ts +53 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +15 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/app.d.ts +9 -0
  6. package/dist/app.d.ts.map +1 -0
  7. package/dist/app.js +93 -0
  8. package/dist/app.js.map +1 -0
  9. package/dist/cli.d.ts +66 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +235 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/command-menu.d.ts +33 -0
  14. package/dist/command-menu.d.ts.map +1 -0
  15. package/dist/command-menu.js +135 -0
  16. package/dist/command-menu.js.map +1 -0
  17. package/dist/commands.d.ts +36 -0
  18. package/dist/commands.d.ts.map +1 -0
  19. package/dist/commands.js +73 -0
  20. package/dist/commands.js.map +1 -0
  21. package/dist/entry.d.ts +35 -0
  22. package/dist/entry.d.ts.map +1 -0
  23. package/dist/entry.js +96 -0
  24. package/dist/entry.js.map +1 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +58 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/markdown.d.ts +20 -0
  30. package/dist/markdown.d.ts.map +1 -0
  31. package/dist/markdown.js +233 -0
  32. package/dist/markdown.js.map +1 -0
  33. package/dist/prompt-input.d.ts +14 -0
  34. package/dist/prompt-input.d.ts.map +1 -0
  35. package/dist/prompt-input.js +139 -0
  36. package/dist/prompt-input.js.map +1 -0
  37. package/dist/session-picker.d.ts +9 -0
  38. package/dist/session-picker.d.ts.map +1 -0
  39. package/dist/session-picker.js +47 -0
  40. package/dist/session-picker.js.map +1 -0
  41. package/dist/status-bar.d.ts +3 -0
  42. package/dist/status-bar.d.ts.map +1 -0
  43. package/dist/status-bar.js +12 -0
  44. package/dist/status-bar.js.map +1 -0
  45. package/dist/transcript.d.ts +30 -0
  46. package/dist/transcript.d.ts.map +1 -0
  47. package/dist/transcript.js +164 -0
  48. package/dist/transcript.js.map +1 -0
  49. package/package.json +37 -3
  50. package/README.md +0 -3
@@ -0,0 +1,164 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { stdout } from "node:process";
3
+ import { Box, Text, useBoxMetrics, useInput, useStdin } from "ink";
4
+ import { useEffect, useMemo, useRef, useState } from "react";
5
+ import stringWidth from "string-width";
6
+ import { styles, theme } from "./entry.js";
7
+ import { cutCols, markdown, sliceCols, wrap } from "./markdown.js";
8
+ // rows per entry, reused while its kind, text and the width are unchanged (tool entries are mutated in place)
9
+ const cache = new WeakMap();
10
+ function entryRows(e, width) {
11
+ const hit = cache.get(e);
12
+ if (hit && hit.kind === e.kind && hit.text === e.text && hit.width === width)
13
+ return hit.rows;
14
+ const rows = [];
15
+ const block = e.kind.startsWith("tool");
16
+ // a block's header is its first non-blank line
17
+ const split = e.text.split("\n");
18
+ const head = block ? split.findIndex(Boolean) : -1;
19
+ // ponytail: spots edit diffs by the header formatTool writes; carry the tool name on Entry if that gets ambiguous
20
+ const diff = block && split[head]?.startsWith("edit ");
21
+ const color = (t, l) => l === head
22
+ ? theme.text
23
+ : diff && t.startsWith("+ ")
24
+ ? theme.green
25
+ : diff && t.startsWith("- ")
26
+ ? theme.red
27
+ : theme.muted;
28
+ const lines = e.kind === "assistant"
29
+ ? markdown(e.text, width)
30
+ : split.map((t, l) => [{ text: t, color: block ? color(t, l) : undefined }]);
31
+ lines.forEach((spans, l) => {
32
+ let col = 0;
33
+ wrap(spans.map((s) => s.text).join(""), Math.max(1, width)).forEach((text, i) => {
34
+ const w = stringWidth(text);
35
+ rows.push({ kind: e.kind, text, spans: cutCols(spans, col, col + w), cont: i > 0, bold: l === head });
36
+ col += w;
37
+ });
38
+ });
39
+ cache.set(e, { kind: e.kind, text: e.text, width, rows });
40
+ return rows;
41
+ }
42
+ export function toRows(entries, width) {
43
+ const rows = [];
44
+ for (const e of entries) {
45
+ // a blank row between user input, thinking, output and tool blocks
46
+ if (rows.length && e.kind !== "info" && e.kind !== "error")
47
+ rows.push({ kind: "info", text: "", spans: [], cont: false });
48
+ for (const r of entryRows(e, width))
49
+ rows.push(r);
50
+ }
51
+ return rows;
52
+ }
53
+ const show = (spans) => spans.map(({ text, ...style }, i) => (_jsx(Text, { ...style, children: text }, i)));
54
+ const order = (a, b) => (a.row < b.row || (a.row === b.row && a.col <= b.col) ? [a, b] : [b, a]);
55
+ /** Columns [from, to) of `row` covered by the selection, or undefined. */
56
+ function selectedCols(sel, row) {
57
+ if (!sel)
58
+ return;
59
+ const [s, e] = order(sel.a, sel.b);
60
+ if (row < s.row || row > e.row)
61
+ return;
62
+ return [row === s.row ? s.col : 0, row === e.row ? e.col + 1 : Number.POSITIVE_INFINITY];
63
+ }
64
+ export function selectionText(rows, a, b) {
65
+ const [s, e] = order(a, b);
66
+ let out = "";
67
+ for (let r = s.row; r <= e.row; r++) {
68
+ const row = rows[r];
69
+ if (!row)
70
+ continue;
71
+ if (r > s.row && !row.cont)
72
+ out += "\n";
73
+ out += sliceCols(row.text, r === s.row ? s.col : 0, r === e.row ? e.col + 1 : Number.POSITIVE_INFINITY);
74
+ }
75
+ return out;
76
+ }
77
+ // SGR mouse report: ESC [ < button ; x ; y (M = press/drag, m = release)
78
+ const MOUSE = /\[<(\d+);(\d+);(\d+)([Mm])/g;
79
+ /**
80
+ * Fullscreen transcript: own scrolling (wheel, PgUp/PgDn) and own selection, since the app captures the mouse.
81
+ * Drag selects, release copies via OSC 52. Wheel events below the pane go to `onWheelBelow`.
82
+ */
83
+ export function Transcript({ entries, onWheelBelow, onCopy, }) {
84
+ const pane = useRef(null);
85
+ const { width, height } = useBoxMetrics(pane);
86
+ const rows = useMemo(() => toRows(entries, width), [entries, width]);
87
+ const maxTop = Math.max(0, rows.length - height);
88
+ // undefined = follow the bottom; a number pins the top row so new output doesn't move the view
89
+ const [pinned, setPinned] = useState();
90
+ const top = Math.min(pinned ?? maxTop, maxTop);
91
+ const [sel, setSel] = useState();
92
+ // a resize re-wraps every row, so old selection coordinates mean nothing
93
+ // biome-ignore lint/correctness/useExhaustiveDependencies: reset on width change only
94
+ useEffect(() => setSel(undefined), [width]);
95
+ const scrollBy = (delta) => setPinned((p) => {
96
+ const next = Math.max(0, (p ?? maxTop) + delta);
97
+ return next >= maxTop ? undefined : next;
98
+ });
99
+ useInput((_, key) => {
100
+ if (key.pageUp)
101
+ scrollBy(-Math.max(1, Math.floor(height / 2)));
102
+ else if (key.pageDown)
103
+ scrollBy(Math.max(1, Math.floor(height / 2)));
104
+ });
105
+ // Ink drops mouse reports before useInput, so read the raw chunks it pulls from stdin.
106
+ // Handlers read the latest render's values through a ref instead of re-subscribing every render.
107
+ const latest = useRef({ rows, top, height, sel, scrollBy, onWheelBelow, onCopy });
108
+ latest.current = { rows, top, height, sel, scrollBy, onWheelBelow, onCopy };
109
+ const { stdin } = useStdin();
110
+ useEffect(() => {
111
+ const onData = (chunk) => {
112
+ for (const [, b, x, y, kind] of String(chunk).matchAll(MOUSE)) {
113
+ const { rows, top, height, sel, scrollBy, onWheelBelow, onCopy } = latest.current;
114
+ const button = Number(b) & ~(4 | 8 | 16); // drop shift/alt/ctrl bits
115
+ const screenRow = Number(y) - 1; // the pane starts at the top-left of the alternate screen
116
+ const point = () => ({
117
+ row: Math.max(0, Math.min(rows.length - 1, top + Math.max(0, Math.min(height - 1, screenRow)))),
118
+ col: Number(x) - 1,
119
+ });
120
+ if (button === 64 || button === 65) {
121
+ const delta = button === 64 ? -3 : 3;
122
+ if (screenRow < height)
123
+ scrollBy(delta);
124
+ else
125
+ onWheelBelow(-delta);
126
+ }
127
+ else if (button === 0 && kind === "M") {
128
+ // press starts a new selection (only inside the pane)
129
+ setSel(screenRow < height ? { a: point(), b: point(), dragged: false } : undefined);
130
+ }
131
+ else if (button === 32 && kind === "M" && sel) {
132
+ // drag past the edges scrolls; ponytail: only while the mouse moves, add a timer for hold-to-scroll
133
+ if (screenRow < 0)
134
+ scrollBy(-1);
135
+ else if (screenRow >= height)
136
+ scrollBy(1);
137
+ setSel({ ...sel, b: point(), dragged: true });
138
+ }
139
+ else if (kind === "m" && sel) {
140
+ if (!sel.dragged)
141
+ setSel(undefined);
142
+ else {
143
+ const text = selectionText(rows, sel.a, sel.b);
144
+ // OSC 52: ask the terminal to put the text on the system clipboard
145
+ stdout.write(`\x1b]52;c;${Buffer.from(text).toString("base64")}\x07`);
146
+ onCopy(text.length);
147
+ }
148
+ }
149
+ }
150
+ };
151
+ stdin.on("data", onData);
152
+ return () => {
153
+ stdin.off("data", onData);
154
+ };
155
+ }, [stdin]);
156
+ return (_jsx(Box, { ref: pane, flexGrow: 1, flexBasis: 0, flexDirection: "column", overflow: "hidden", children: rows.slice(top, top + height).map((row, i) => {
157
+ const style = styles[row.kind];
158
+ const cols = selectedCols(sel, top + i);
159
+ // fill the rest of the row so a block's background spans the pane
160
+ const fill = style.backgroundColor ? " ".repeat(Math.max(0, width - stringWidth(row.text))) : "";
161
+ return (_jsxs(Text, { wrap: "truncate", bold: row.bold, ...style, children: [cols ? (_jsxs(_Fragment, { children: [show(cutCols(row.spans, 0, cols[0])), _jsx(Text, { inverse: true, children: sliceCols(row.text, cols[0], cols[1]) ? show(cutCols(row.spans, ...cols)) : " " }), show(cutCols(row.spans, cols[1], Number.POSITIVE_INFINITY))] })) : row.text ? (show(row.spans)) : (" "), fill] }, i));
162
+ }) }));
163
+ }
164
+ //# sourceMappingURL=transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,40 @@
1
1
  {
2
2
  "name": "@hortus/cli",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": {
7
+ "types": "./dist/api.d.ts",
8
+ "default": "./dist/api.js"
9
+ }
10
+ },
11
+ "engines": {
12
+ "node": ">=22.15"
13
+ },
14
+ "dependencies": {
15
+ "@hortus/core": "1.0.0",
16
+ "ink": "^8.0.0",
17
+ "react": "^19.3.0",
18
+ "string-width": "^8.3.0",
19
+ "zustand": "^5.0.16"
20
+ },
21
+ "devDependencies": {
22
+ "@types/react": "^19.3.0"
23
+ },
24
+ "license": "MIT",
25
+ "files": [
26
+ "dist",
27
+ "!dist/**/*.test.*"
28
+ ],
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/Toshimichi0915/hortus.git",
32
+ "directory": "packages/cli"
33
+ },
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "bin": {
38
+ "hortus": "dist/index.js"
39
+ }
6
40
  }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.