@chances-ai/tui 16.0.0 → 18.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.
- package/dist/app.d.ts +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +2 -2
- package/dist/app.js.map +1 -1
- package/dist/code-view.js +1 -1
- package/dist/code-view.js.map +1 -1
- package/dist/diff-view.js +1 -1
- package/dist/diff-view.js.map +1 -1
- package/dist/help-view.d.ts +46 -0
- package/dist/help-view.d.ts.map +1 -0
- package/dist/help-view.js +52 -0
- package/dist/help-view.js.map +1 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/select.d.ts +5 -0
- package/dist/select.d.ts.map +1 -1
- package/dist/select.js +11 -1
- package/dist/select.js.map +1 -1
- package/dist/theme.d.ts +15 -101
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +18 -109
- package/dist/theme.js.map +1 -1
- package/dist/tool-message.js +1 -1
- package/dist/tool-message.js.map +1 -1
- package/package.json +6 -5
- package/dist/diff-model.d.ts +0 -64
- package/dist/diff-model.d.ts.map +0 -1
- package/dist/diff-model.js +0 -156
- package/dist/diff-model.js.map +0 -1
- package/dist/frame-scheduler.d.ts +0 -44
- package/dist/frame-scheduler.d.ts.map +0 -1
- package/dist/frame-scheduler.js +0 -58
- package/dist/frame-scheduler.js.map +0 -1
- package/dist/highlight-to-segments.d.ts +0 -18
- package/dist/highlight-to-segments.d.ts.map +0 -1
- package/dist/highlight-to-segments.js +0 -224
- package/dist/highlight-to-segments.js.map +0 -1
- package/dist/tool-line.d.ts +0 -33
- package/dist/tool-line.d.ts.map +0 -1
- package/dist/tool-line.js +0 -168
- package/dist/tool-line.js.map +0 -1
- package/dist/view-model.d.ts +0 -226
- package/dist/view-model.d.ts.map +0 -1
- package/dist/view-model.js +0 -488
- package/dist/view-model.js.map +0 -1
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* (5.9 / v14) Terminal syntax highlighting, pi-style: drive highlight.js
|
|
3
|
-
* directly (NOT `cli-highlight`, which drags in `parse5` + `yargs` — codex R1
|
|
4
|
-
* UNVERIFIABLE-2), then map its `<span class="hljs-…">` HTML to flat, themed
|
|
5
|
-
* segments with a tiny stack scanner. Pure `(code, lang) → Segment[]`, so it is
|
|
6
|
-
* fully unit-testable without Ink and degrades to a single plain segment on
|
|
7
|
-
* unknown language / highlighter throw.
|
|
8
|
-
*
|
|
9
|
-
* Only a curated language set is registered (via `highlight.js/lib/core`) to
|
|
10
|
-
* keep the `bun build --compile` binary small.
|
|
11
|
-
*/
|
|
12
|
-
import hljs from "highlight.js/lib/core";
|
|
13
|
-
// -- curated language registration ------------------------------------------
|
|
14
|
-
import bash from "highlight.js/lib/languages/bash";
|
|
15
|
-
import c from "highlight.js/lib/languages/c";
|
|
16
|
-
import cpp from "highlight.js/lib/languages/cpp";
|
|
17
|
-
import css from "highlight.js/lib/languages/css";
|
|
18
|
-
import diff from "highlight.js/lib/languages/diff";
|
|
19
|
-
import dockerfile from "highlight.js/lib/languages/dockerfile";
|
|
20
|
-
import go from "highlight.js/lib/languages/go";
|
|
21
|
-
import java from "highlight.js/lib/languages/java";
|
|
22
|
-
import javascript from "highlight.js/lib/languages/javascript";
|
|
23
|
-
import json from "highlight.js/lib/languages/json";
|
|
24
|
-
import markdown from "highlight.js/lib/languages/markdown";
|
|
25
|
-
import python from "highlight.js/lib/languages/python";
|
|
26
|
-
import ruby from "highlight.js/lib/languages/ruby";
|
|
27
|
-
import rust from "highlight.js/lib/languages/rust";
|
|
28
|
-
import sql from "highlight.js/lib/languages/sql";
|
|
29
|
-
import toml from "highlight.js/lib/languages/ini";
|
|
30
|
-
import typescript from "highlight.js/lib/languages/typescript";
|
|
31
|
-
import xml from "highlight.js/lib/languages/xml";
|
|
32
|
-
import yaml from "highlight.js/lib/languages/yaml";
|
|
33
|
-
let registered = false;
|
|
34
|
-
function ensureRegistered() {
|
|
35
|
-
if (registered)
|
|
36
|
-
return;
|
|
37
|
-
registered = true;
|
|
38
|
-
const langs = {
|
|
39
|
-
bash,
|
|
40
|
-
c,
|
|
41
|
-
cpp,
|
|
42
|
-
css,
|
|
43
|
-
diff,
|
|
44
|
-
dockerfile,
|
|
45
|
-
go,
|
|
46
|
-
java,
|
|
47
|
-
javascript,
|
|
48
|
-
json,
|
|
49
|
-
markdown,
|
|
50
|
-
python,
|
|
51
|
-
ruby,
|
|
52
|
-
rust,
|
|
53
|
-
sql,
|
|
54
|
-
toml,
|
|
55
|
-
typescript,
|
|
56
|
-
xml,
|
|
57
|
-
yaml,
|
|
58
|
-
};
|
|
59
|
-
for (const [name, def] of Object.entries(langs))
|
|
60
|
-
hljs.registerLanguage(name, def);
|
|
61
|
-
}
|
|
62
|
-
/** Common aliases highlight.js's curated set doesn't auto-register for us. */
|
|
63
|
-
const ALIASES = {
|
|
64
|
-
ts: "typescript",
|
|
65
|
-
tsx: "typescript",
|
|
66
|
-
js: "javascript",
|
|
67
|
-
jsx: "javascript",
|
|
68
|
-
mjs: "javascript",
|
|
69
|
-
cjs: "javascript",
|
|
70
|
-
py: "python",
|
|
71
|
-
rb: "ruby",
|
|
72
|
-
rs: "rust",
|
|
73
|
-
sh: "bash",
|
|
74
|
-
shell: "bash",
|
|
75
|
-
zsh: "bash",
|
|
76
|
-
yml: "yaml",
|
|
77
|
-
html: "xml",
|
|
78
|
-
htm: "xml",
|
|
79
|
-
svg: "xml",
|
|
80
|
-
golang: "go",
|
|
81
|
-
"c++": "cpp",
|
|
82
|
-
ini: "toml",
|
|
83
|
-
dockerfile: "dockerfile",
|
|
84
|
-
md: "markdown",
|
|
85
|
-
};
|
|
86
|
-
/** hljs class (without the `hljs-` prefix) → our scope. Unmapped → "plain". */
|
|
87
|
-
function classToScope(cls) {
|
|
88
|
-
// A span class may be multi-token, e.g. "hljs-title function_"; check each.
|
|
89
|
-
const tokens = cls.split(/\s+/);
|
|
90
|
-
for (const raw of tokens) {
|
|
91
|
-
const t = raw.replace(/^hljs-/, "");
|
|
92
|
-
switch (t) {
|
|
93
|
-
case "keyword":
|
|
94
|
-
return "keyword";
|
|
95
|
-
case "string":
|
|
96
|
-
case "regexp":
|
|
97
|
-
case "char":
|
|
98
|
-
case "char.escape":
|
|
99
|
-
case "subst":
|
|
100
|
-
return "string";
|
|
101
|
-
case "comment":
|
|
102
|
-
case "quote":
|
|
103
|
-
return "comment";
|
|
104
|
-
case "number":
|
|
105
|
-
return "number";
|
|
106
|
-
case "title":
|
|
107
|
-
case "built_in":
|
|
108
|
-
return "function";
|
|
109
|
-
case "type":
|
|
110
|
-
case "class":
|
|
111
|
-
case "title.class":
|
|
112
|
-
return "type";
|
|
113
|
-
case "literal":
|
|
114
|
-
return "literal";
|
|
115
|
-
case "attr":
|
|
116
|
-
case "attribute":
|
|
117
|
-
case "property":
|
|
118
|
-
case "selector-tag":
|
|
119
|
-
case "selector-class":
|
|
120
|
-
case "name":
|
|
121
|
-
return "attr";
|
|
122
|
-
default:
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return "plain";
|
|
127
|
-
}
|
|
128
|
-
/** scope → theme color role (used by views to pick the `<Text color>`). */
|
|
129
|
-
export const SCOPE_TO_THEME = {
|
|
130
|
-
plain: undefined,
|
|
131
|
-
keyword: "synKeyword",
|
|
132
|
-
string: "synString",
|
|
133
|
-
comment: "synComment",
|
|
134
|
-
number: "synNumber",
|
|
135
|
-
function: "synFunction",
|
|
136
|
-
type: "synType",
|
|
137
|
-
literal: "synLiteral",
|
|
138
|
-
attr: "synAttr",
|
|
139
|
-
};
|
|
140
|
-
const ENTITIES = {
|
|
141
|
-
"&": "&",
|
|
142
|
-
"<": "<",
|
|
143
|
-
">": ">",
|
|
144
|
-
""": '"',
|
|
145
|
-
"'": "'",
|
|
146
|
-
"'": "'",
|
|
147
|
-
"'": "'",
|
|
148
|
-
};
|
|
149
|
-
function decodeEntities(s) {
|
|
150
|
-
return s.replace(/&(?:amp|lt|gt|quot|apos|#x27|#39);/g, (m) => ENTITIES[m] ?? m);
|
|
151
|
-
}
|
|
152
|
-
/** Resolve a user-supplied language label to a registered grammar, or null. */
|
|
153
|
-
export function resolveLanguage(lang) {
|
|
154
|
-
if (!lang)
|
|
155
|
-
return null;
|
|
156
|
-
ensureRegistered();
|
|
157
|
-
const norm = lang.trim().toLowerCase();
|
|
158
|
-
const aliased = ALIASES[norm] ?? norm;
|
|
159
|
-
return hljs.getLanguage(aliased) ? aliased : null;
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Highlight `code` as `lang` into themed segments. Unknown/absent language or
|
|
163
|
-
* any highlighter error → a single `"plain"` segment with the original code
|
|
164
|
-
* (callers render it as plain text).
|
|
165
|
-
*/
|
|
166
|
-
export function highlightToSegments(code, lang) {
|
|
167
|
-
const resolved = resolveLanguage(lang);
|
|
168
|
-
if (!resolved)
|
|
169
|
-
return [{ text: code, scope: "plain" }];
|
|
170
|
-
let html;
|
|
171
|
-
try {
|
|
172
|
-
html = hljs.highlight(code, { language: resolved, ignoreIllegals: true }).value;
|
|
173
|
-
}
|
|
174
|
-
catch {
|
|
175
|
-
return [{ text: code, scope: "plain" }];
|
|
176
|
-
}
|
|
177
|
-
return scanHtml(html);
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Flatten highlight.js HTML into segments. Maintains a scope stack; the
|
|
181
|
-
* innermost open span wins for the text between tags. Closing more spans than
|
|
182
|
-
* are open (defensive) is ignored.
|
|
183
|
-
*/
|
|
184
|
-
function scanHtml(html) {
|
|
185
|
-
const segs = [];
|
|
186
|
-
const stack = [];
|
|
187
|
-
// The final `(<)` alternative captures a stray `<` that starts neither a
|
|
188
|
-
// recognized span open/close — emitted as literal text so no source char is
|
|
189
|
-
// silently dropped if highlight.js ever produces unexpected markup (codex R2
|
|
190
|
-
// SHOULD-5). highlight.js escapes real `<` in source to `<`, so this only
|
|
191
|
-
// fires defensively.
|
|
192
|
-
const re = /<span class="([^"]*)">|<\/span>|([^<]+)|(<)/g;
|
|
193
|
-
const push = (raw) => {
|
|
194
|
-
const text = decodeEntities(raw);
|
|
195
|
-
if (text.length > 0)
|
|
196
|
-
segs.push({ text, scope: stack[stack.length - 1] ?? "plain" });
|
|
197
|
-
};
|
|
198
|
-
let m = re.exec(html);
|
|
199
|
-
while (m !== null) {
|
|
200
|
-
if (m[1] !== undefined)
|
|
201
|
-
stack.push(classToScope(m[1]));
|
|
202
|
-
else if (m[2] !== undefined)
|
|
203
|
-
push(m[2]);
|
|
204
|
-
else if (m[3] !== undefined)
|
|
205
|
-
push(m[3]); // stray "<"
|
|
206
|
-
else
|
|
207
|
-
stack.pop();
|
|
208
|
-
m = re.exec(html);
|
|
209
|
-
}
|
|
210
|
-
return coalesce(segs);
|
|
211
|
-
}
|
|
212
|
-
/** Merge adjacent same-scope segments so the renderer emits fewer `<Text>`. */
|
|
213
|
-
function coalesce(segs) {
|
|
214
|
-
const out = [];
|
|
215
|
-
for (const s of segs) {
|
|
216
|
-
const last = out[out.length - 1];
|
|
217
|
-
if (last && last.scope === s.scope)
|
|
218
|
-
last.text += s.text;
|
|
219
|
-
else
|
|
220
|
-
out.push({ ...s });
|
|
221
|
-
}
|
|
222
|
-
return out;
|
|
223
|
-
}
|
|
224
|
-
//# sourceMappingURL=highlight-to-segments.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"highlight-to-segments.js","sourceRoot":"","sources":["../src/highlight-to-segments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,IAAI,MAAM,uBAAuB,CAAC;AAGzC,8EAA8E;AAC9E,OAAO,IAAI,MAAM,iCAAiC,CAAC;AACnD,OAAO,CAAC,MAAM,8BAA8B,CAAC;AAC7C,OAAO,GAAG,MAAM,gCAAgC,CAAC;AACjD,OAAO,GAAG,MAAM,gCAAgC,CAAC;AACjD,OAAO,IAAI,MAAM,iCAAiC,CAAC;AACnD,OAAO,UAAU,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC/C,OAAO,IAAI,MAAM,iCAAiC,CAAC;AACnD,OAAO,UAAU,MAAM,uCAAuC,CAAC;AAC/D,OAAO,IAAI,MAAM,iCAAiC,CAAC;AACnD,OAAO,QAAQ,MAAM,qCAAqC,CAAC;AAC3D,OAAO,MAAM,MAAM,mCAAmC,CAAC;AACvD,OAAO,IAAI,MAAM,iCAAiC,CAAC;AACnD,OAAO,IAAI,MAAM,iCAAiC,CAAC;AACnD,OAAO,GAAG,MAAM,gCAAgC,CAAC;AACjD,OAAO,IAAI,MAAM,gCAAgC,CAAC;AAClD,OAAO,UAAU,MAAM,uCAAuC,CAAC;AAC/D,OAAO,GAAG,MAAM,gCAAgC,CAAC;AACjD,OAAO,IAAI,MAAM,iCAAiC,CAAC;AAEnD,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,SAAS,gBAAgB;IACvB,IAAI,UAAU;QAAE,OAAO;IACvB,UAAU,GAAG,IAAI,CAAC;IAClB,MAAM,KAAK,GAAgE;QACzE,IAAI;QACJ,CAAC;QACD,GAAG;QACH,GAAG;QACH,IAAI;QACJ,UAAU;QACV,EAAE;QACF,IAAI;QACJ,UAAU;QACV,IAAI;QACJ,QAAQ;QACR,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,GAAG;QACH,IAAI;QACJ,UAAU;QACV,GAAG;QACH,IAAI;KACL,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACpF,CAAC;AAED,8EAA8E;AAC9E,MAAM,OAAO,GAA2B;IACtC,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,MAAM;IACX,UAAU,EAAE,YAAY;IACxB,EAAE,EAAE,UAAU;CACf,CAAC;AAmBF,+EAA+E;AAC/E,SAAS,YAAY,CAAC,GAAW;IAC/B,4EAA4E;IAC5E,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,CAAC;YACV,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC;YACnB,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM,CAAC;YACZ,KAAK,aAAa,CAAC;YACnB,KAAK,OAAO;gBACV,OAAO,QAAQ,CAAC;YAClB,KAAK,SAAS,CAAC;YACf,KAAK,OAAO;gBACV,OAAO,SAAS,CAAC;YACnB,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC;YAClB,KAAK,OAAO,CAAC;YACb,KAAK,UAAU;gBACb,OAAO,UAAU,CAAC;YACpB,KAAK,MAAM,CAAC;YACZ,KAAK,OAAO,CAAC;YACb,KAAK,aAAa;gBAChB,OAAO,MAAM,CAAC;YAChB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC;YACnB,KAAK,MAAM,CAAC;YACZ,KAAK,WAAW,CAAC;YACjB,KAAK,UAAU,CAAC;YAChB,KAAK,cAAc,CAAC;YACpB,KAAK,gBAAgB,CAAC;YACtB,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC;YAChB;gBACE,SAAS;QACb,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,cAAc,GAA6C;IACtE,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,QAAQ,EAAE,aAAa;IACvB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF,MAAM,QAAQ,GAA2B;IACvC,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;CACd,CAAC;AAEF,SAAS,cAAc,CAAC,CAAS;IAC/B,OAAO,CAAC,CAAC,OAAO,CAAC,qCAAqC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,gBAAgB,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,IAAwB;IACxE,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAEvD,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,yEAAyE;IACzE,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,qBAAqB;IACrB,MAAM,EAAE,GAAG,8CAA8C,CAAC;IAC1D,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC,CAAC;IACF,IAAI,CAAC,GAA2B,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAClD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACnC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY;;YAChD,KAAK,CAAC,GAAG,EAAE,CAAC;QACjB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,IAAe;IAC/B,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC;;YACnD,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/tool-line.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* (5.9 / v14) Pure view-side tool-call label. Renders `⏺ Name(argSummary)` —
|
|
3
|
-
* see `tool-message.tsx`. This is a MINIMAL, NON-AUTHORITATIVE label (codex R1
|
|
4
|
-
* SHOULD-1): it only echoes the call's own args (available on the `tool:call`
|
|
5
|
-
* bus event, which carries no `ToolContext`). It deliberately does NOT claim
|
|
6
|
-
* create-vs-overwrite, byte counts, or diffs — that fidelity comes only from
|
|
7
|
-
* the richer permission summary (`tool:permission`), which the view stashes
|
|
8
|
-
* and renders under the `⎿` branch (see `view-model.ts`).
|
|
9
|
-
*
|
|
10
|
-
* Pure `(name, args) => string`, so it is fully unit-testable without Ink.
|
|
11
|
-
*/
|
|
12
|
-
/** Collapse a leading home-dir to `~`. `home` is injectable for deterministic
|
|
13
|
-
* tests; defaults to the real home directory. Handles both POSIX (`/`) and
|
|
14
|
-
* Windows (`\`) separators after the home prefix (codex R2 NICE-8). */
|
|
15
|
-
export declare function homeRelative(path: string, home?: string): string;
|
|
16
|
-
/** Display name for a tool: builtin names verbatim; `mcp__<server>__<tool>`
|
|
17
|
-
* shown as `<server›>`. Edit/write get a claude-code-style verb. */
|
|
18
|
-
export declare function toolDisplayName(name: string): string;
|
|
19
|
-
/** `mcp__<server>__<tool>` → `{server, tool}`; null for non-MCP or malformed
|
|
20
|
-
* names (empty server — codex R2 NICE-9). A `mcp__<server>` with no `__tool`
|
|
21
|
-
* is allowed (server-level), but an empty server component is rejected. */
|
|
22
|
-
export declare function parseMcpName(name: string): {
|
|
23
|
-
server: string;
|
|
24
|
-
tool: string;
|
|
25
|
-
} | null;
|
|
26
|
-
/**
|
|
27
|
-
* The parenthesized argument summary for the header. Empty string ⇒ the header
|
|
28
|
-
* renders just `⏺ Name` with no parens.
|
|
29
|
-
*/
|
|
30
|
-
export declare function formatToolCall(name: string, args: unknown, opts?: {
|
|
31
|
-
home?: string;
|
|
32
|
-
}): string;
|
|
33
|
-
//# sourceMappingURL=tool-line.d.ts.map
|
package/dist/tool-line.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-line.d.ts","sourceRoot":"","sources":["../src/tool-line.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH;;wEAEwE;AACxE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAO3E;AAQD;qEACqE;AACrE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmCpD;AAED;;4EAE4E;AAC5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAOlF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAsD5F"}
|
package/dist/tool-line.js
DELETED
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* (5.9 / v14) Pure view-side tool-call label. Renders `⏺ Name(argSummary)` —
|
|
3
|
-
* see `tool-message.tsx`. This is a MINIMAL, NON-AUTHORITATIVE label (codex R1
|
|
4
|
-
* SHOULD-1): it only echoes the call's own args (available on the `tool:call`
|
|
5
|
-
* bus event, which carries no `ToolContext`). It deliberately does NOT claim
|
|
6
|
-
* create-vs-overwrite, byte counts, or diffs — that fidelity comes only from
|
|
7
|
-
* the richer permission summary (`tool:permission`), which the view stashes
|
|
8
|
-
* and renders under the `⎿` branch (see `view-model.ts`).
|
|
9
|
-
*
|
|
10
|
-
* Pure `(name, args) => string`, so it is fully unit-testable without Ink.
|
|
11
|
-
*/
|
|
12
|
-
import { homedir } from "node:os";
|
|
13
|
-
/** Read a string property from an unknown JSON args bag, or "" if absent. */
|
|
14
|
-
function s(args, key) {
|
|
15
|
-
if (args && typeof args === "object" && key in args) {
|
|
16
|
-
const v = args[key];
|
|
17
|
-
if (typeof v === "string")
|
|
18
|
-
return v;
|
|
19
|
-
if (typeof v === "number" || typeof v === "boolean")
|
|
20
|
-
return String(v);
|
|
21
|
-
}
|
|
22
|
-
return "";
|
|
23
|
-
}
|
|
24
|
-
/** Collapse a leading home-dir to `~`. `home` is injectable for deterministic
|
|
25
|
-
* tests; defaults to the real home directory. Handles both POSIX (`/`) and
|
|
26
|
-
* Windows (`\`) separators after the home prefix (codex R2 NICE-8). */
|
|
27
|
-
export function homeRelative(path, home = homedir()) {
|
|
28
|
-
if (!path || !home)
|
|
29
|
-
return path;
|
|
30
|
-
if (path === home)
|
|
31
|
-
return "~";
|
|
32
|
-
if (path.startsWith(`${home}/`) || path.startsWith(`${home}\\`)) {
|
|
33
|
-
return `~${path.slice(home.length)}`;
|
|
34
|
-
}
|
|
35
|
-
return path;
|
|
36
|
-
}
|
|
37
|
-
/** Truncate a single-line value for the inline label. */
|
|
38
|
-
function clip(text, max = 60) {
|
|
39
|
-
const oneLine = text.replace(/\s+/g, " ").trim();
|
|
40
|
-
return oneLine.length <= max ? oneLine : `${oneLine.slice(0, max - 1)}…`;
|
|
41
|
-
}
|
|
42
|
-
/** Display name for a tool: builtin names verbatim; `mcp__<server>__<tool>`
|
|
43
|
-
* shown as `<server›>`. Edit/write get a claude-code-style verb. */
|
|
44
|
-
export function toolDisplayName(name) {
|
|
45
|
-
const mcp = parseMcpName(name);
|
|
46
|
-
if (mcp)
|
|
47
|
-
return mcp.server;
|
|
48
|
-
switch (name) {
|
|
49
|
-
case "edit":
|
|
50
|
-
return "Edit";
|
|
51
|
-
case "write":
|
|
52
|
-
return "Write";
|
|
53
|
-
case "read":
|
|
54
|
-
return "Read";
|
|
55
|
-
case "bash":
|
|
56
|
-
return "Bash";
|
|
57
|
-
case "grep":
|
|
58
|
-
return "Grep";
|
|
59
|
-
case "glob":
|
|
60
|
-
return "Glob";
|
|
61
|
-
case "diff":
|
|
62
|
-
return "Diff";
|
|
63
|
-
case "web_fetch":
|
|
64
|
-
return "Fetch";
|
|
65
|
-
case "task":
|
|
66
|
-
return "Task";
|
|
67
|
-
case "lsp":
|
|
68
|
-
return "Lsp";
|
|
69
|
-
case "pty":
|
|
70
|
-
return "Pty";
|
|
71
|
-
case "memory_save":
|
|
72
|
-
return "Memory";
|
|
73
|
-
case "memory_delete":
|
|
74
|
-
return "Memory";
|
|
75
|
-
case "memory_list":
|
|
76
|
-
return "Memory";
|
|
77
|
-
default:
|
|
78
|
-
return name;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/** `mcp__<server>__<tool>` → `{server, tool}`; null for non-MCP or malformed
|
|
82
|
-
* names (empty server — codex R2 NICE-9). A `mcp__<server>` with no `__tool`
|
|
83
|
-
* is allowed (server-level), but an empty server component is rejected. */
|
|
84
|
-
export function parseMcpName(name) {
|
|
85
|
-
if (!name.startsWith("mcp__"))
|
|
86
|
-
return null;
|
|
87
|
-
const rest = name.slice("mcp__".length);
|
|
88
|
-
const sep = rest.indexOf("__");
|
|
89
|
-
const server = sep < 0 ? rest : rest.slice(0, sep);
|
|
90
|
-
if (server.length === 0)
|
|
91
|
-
return null;
|
|
92
|
-
return { server, tool: sep < 0 ? "" : rest.slice(sep + 2) };
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* The parenthesized argument summary for the header. Empty string ⇒ the header
|
|
96
|
-
* renders just `⏺ Name` with no parens.
|
|
97
|
-
*/
|
|
98
|
-
export function formatToolCall(name, args, opts) {
|
|
99
|
-
const home = opts?.home;
|
|
100
|
-
const rel = (p) => homeRelative(p, home ?? homedir());
|
|
101
|
-
const mcp = parseMcpName(name);
|
|
102
|
-
if (mcp)
|
|
103
|
-
return mcp.tool;
|
|
104
|
-
switch (name) {
|
|
105
|
-
case "read":
|
|
106
|
-
case "edit":
|
|
107
|
-
case "write":
|
|
108
|
-
case "diff":
|
|
109
|
-
return clip(rel(s(args, "path")));
|
|
110
|
-
case "bash": {
|
|
111
|
-
const desc = s(args, "description");
|
|
112
|
-
return clip(desc || s(args, "command"));
|
|
113
|
-
}
|
|
114
|
-
case "grep": {
|
|
115
|
-
const pattern = s(args, "pattern");
|
|
116
|
-
const path = s(args, "path");
|
|
117
|
-
return clip(path ? `${pattern} in ${rel(path)}` : pattern);
|
|
118
|
-
}
|
|
119
|
-
case "glob": {
|
|
120
|
-
const pattern = s(args, "pattern");
|
|
121
|
-
const path = s(args, "path");
|
|
122
|
-
return clip(path ? `${pattern} in ${rel(path)}` : pattern);
|
|
123
|
-
}
|
|
124
|
-
case "web_fetch":
|
|
125
|
-
return clip(s(args, "url"));
|
|
126
|
-
case "task": {
|
|
127
|
-
const sub = s(args, "subagent_type");
|
|
128
|
-
const desc = s(args, "description");
|
|
129
|
-
return clip([sub, desc].filter(Boolean).join(": ") || desc || sub);
|
|
130
|
-
}
|
|
131
|
-
case "lsp": {
|
|
132
|
-
const op = s(args, "op");
|
|
133
|
-
const path = s(args, "path");
|
|
134
|
-
const query = s(args, "query");
|
|
135
|
-
const detail = path ? rel(path) : query;
|
|
136
|
-
return clip([op, detail].filter(Boolean).join(" "));
|
|
137
|
-
}
|
|
138
|
-
case "pty": {
|
|
139
|
-
const op = s(args, "op");
|
|
140
|
-
const cmd = s(args, "command");
|
|
141
|
-
return clip([op, cmd].filter(Boolean).join(" "));
|
|
142
|
-
}
|
|
143
|
-
case "memory_save":
|
|
144
|
-
case "memory_delete":
|
|
145
|
-
return clip(s(args, "name"));
|
|
146
|
-
case "memory_list":
|
|
147
|
-
return clip(s(args, "scope"));
|
|
148
|
-
default:
|
|
149
|
-
return compactArgs(args);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
/** Fallback for unknown tools: a compact `key=value` join of scalar args. */
|
|
153
|
-
function compactArgs(args) {
|
|
154
|
-
if (!args || typeof args !== "object")
|
|
155
|
-
return "";
|
|
156
|
-
const parts = [];
|
|
157
|
-
for (const [k, v] of Object.entries(args)) {
|
|
158
|
-
if (v === null || v === undefined)
|
|
159
|
-
continue;
|
|
160
|
-
if (typeof v === "object")
|
|
161
|
-
continue; // skip nested for a one-liner
|
|
162
|
-
parts.push(`${k}=${String(v)}`);
|
|
163
|
-
if (parts.length >= 3)
|
|
164
|
-
break;
|
|
165
|
-
}
|
|
166
|
-
return clip(parts.join(" "));
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=tool-line.js.map
|
package/dist/tool-line.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-line.js","sourceRoot":"","sources":["../src/tool-line.ts"],"names":[],"mappings":"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"}
|