@pentoshi/clai 2.0.14 → 2.0.16
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/agent/context-manager.js +40 -3
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/runner.d.ts +4 -0
- package/dist/agent/runner.js +362 -395
- package/dist/agent/runner.js.map +1 -1
- package/dist/commands/providers.js +10 -11
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/search-providers.js +10 -11
- package/dist/commands/search-providers.js.map +1 -1
- package/dist/commands/update.js +1 -1
- package/dist/llm/groq.d.ts +1 -0
- package/dist/llm/groq.js +45 -1
- package/dist/llm/groq.js.map +1 -1
- package/dist/llm/http.js +9 -2
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/provider.js +4 -7
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/router.js +8 -2
- package/dist/llm/router.js.map +1 -1
- package/dist/modes/ask.js +5 -3
- package/dist/modes/ask.js.map +1 -1
- package/dist/prompts/index.d.ts +2 -2
- package/dist/prompts/index.js +6 -3
- package/dist/prompts/index.js.map +1 -1
- package/dist/safety/classifier.js +10 -50
- package/dist/safety/classifier.js.map +1 -1
- package/dist/store/keys.js +50 -18
- package/dist/store/keys.js.map +1 -1
- package/dist/tools/http.d.ts +1 -0
- package/dist/tools/http.js +109 -9
- package/dist/tools/http.js.map +1 -1
- package/dist/tools/jobs.d.ts +4 -0
- package/dist/tools/jobs.js +29 -1
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/registry.js +5 -8
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/web/fetch-core.js +6 -9
- package/dist/tools/web/fetch-core.js.map +1 -1
- package/dist/tools/web/fetch.js +26 -0
- package/dist/tools/web/fetch.js.map +1 -1
- package/dist/tools/web/readable.d.ts +7 -3
- package/dist/tools/web/readable.js +235 -11
- package/dist/tools/web/readable.js.map +1 -1
- package/dist/tools/web/types.d.ts +7 -8
- package/dist/tools/web/types.js +3 -3
- package/dist/tools/web/types.js.map +1 -1
- package/dist/tui/App.js +114 -27
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/components/SecretInputPanel.d.ts +1 -0
- package/dist/tui/components/SecretInputPanel.js +15 -2
- package/dist/tui/components/SecretInputPanel.js.map +1 -1
- package/dist/tui/format-keys.js +16 -15
- package/dist/tui/format-keys.js.map +1 -1
- package/dist/tui/hooks/useAgentRunner.d.ts +1 -2
- package/dist/tui/hooks/useAgentRunner.js +5 -2
- package/dist/tui/hooks/useAgentRunner.js.map +1 -1
- package/dist/tui/render-lines.js +187 -30
- package/dist/tui/render-lines.js.map +1 -1
- package/dist/tui/state.js +10 -19
- package/dist/tui/state.js.map +1 -1
- package/dist/ui/thinking.js +14 -2
- package/dist/ui/thinking.js.map +1 -1
- package/package.json +1 -1
|
@@ -47,28 +47,46 @@ const STRIPPED_SELECTORS = [
|
|
|
47
47
|
* 5. Collapses every run of ASCII/Unicode whitespace (including newlines,
|
|
48
48
|
* tabs, NBSPs) into a single space and trims the result so the agent
|
|
49
49
|
* receives compact prose.
|
|
50
|
+
* 6. Appends a deduplicated "Links" section so the agent can find the
|
|
51
|
+
* correct URL for any link on the page without guessing.
|
|
50
52
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
+
* @param html - Raw HTML string to convert.
|
|
54
|
+
* @param baseUrl - The final page URL (used to resolve relative hrefs).
|
|
55
|
+
* When provided, all href values are resolved to absolute
|
|
56
|
+
* URLs. When omitted, relative hrefs are included as-is.
|
|
53
57
|
*/
|
|
54
|
-
export function toReadableText(html) {
|
|
58
|
+
export function toReadableText(html, baseUrl) {
|
|
55
59
|
if (typeof html !== "string" || html.length === 0)
|
|
56
60
|
return "";
|
|
57
61
|
const $ = cheerio.load(html);
|
|
58
|
-
// 1. Remove non-content elements outright.
|
|
59
62
|
$(STRIPPED_SELECTORS).remove();
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
// contents of `*` so nested comments inside any remaining element
|
|
63
|
-
// are caught.
|
|
64
|
-
$("*")
|
|
63
|
+
$("[aria-hidden='true'], [hidden], template, svg, canvas").remove();
|
|
64
|
+
$('*')
|
|
65
65
|
.contents()
|
|
66
66
|
.filter(function () {
|
|
67
67
|
return this.type === "comment";
|
|
68
68
|
})
|
|
69
69
|
.remove();
|
|
70
|
-
const
|
|
71
|
-
|
|
70
|
+
const title = collapseWhitespace($("title").first().text());
|
|
71
|
+
const description = collapseWhitespace($("meta[name='description']").attr("content") ?? "");
|
|
72
|
+
const root = bestContentRoot($);
|
|
73
|
+
const lines = renderChildren($, root, baseUrl);
|
|
74
|
+
const out = [];
|
|
75
|
+
if (title)
|
|
76
|
+
out.push(`# ${title}`);
|
|
77
|
+
if (description && description !== title)
|
|
78
|
+
out.push(`Summary: ${description}`);
|
|
79
|
+
out.push(...lines);
|
|
80
|
+
// Collect all links on the page and append a deduplicated Links section.
|
|
81
|
+
// This is the canonical source of URLs — the agent must use these rather
|
|
82
|
+
// than constructing or guessing paths.
|
|
83
|
+
const linkSection = collectLinks($, baseUrl);
|
|
84
|
+
if (linkSection.length > 0) {
|
|
85
|
+
out.push("");
|
|
86
|
+
out.push("## Links");
|
|
87
|
+
out.push(...linkSection);
|
|
88
|
+
}
|
|
89
|
+
return normalizeReadableLines(out);
|
|
72
90
|
}
|
|
73
91
|
/**
|
|
74
92
|
* Collapse every contiguous run of whitespace characters into a single
|
|
@@ -86,6 +104,212 @@ function collapseWhitespace(text) {
|
|
|
86
104
|
.replace(/[\s\u00a0\u2000-\u200a\u200b\u200c\u200d\u2028\u2029\ufeff]+/g, " ")
|
|
87
105
|
.trim();
|
|
88
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Resolve an href (possibly relative) against a base URL string.
|
|
109
|
+
* Returns the absolute URL string, or the original href if resolution fails.
|
|
110
|
+
*/
|
|
111
|
+
function resolveHref(href, baseUrl) {
|
|
112
|
+
if (!baseUrl)
|
|
113
|
+
return href;
|
|
114
|
+
try {
|
|
115
|
+
return new URL(href, baseUrl).href;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return href;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Collect all unique, non-anchor-only `<a href>` links from the page and
|
|
123
|
+
* return them as `[text](url)` markdown lines for the Links section.
|
|
124
|
+
* Deduplicates by URL. Fragment-only (#section) links are skipped.
|
|
125
|
+
* Limits to 80 links to avoid flooding the model context.
|
|
126
|
+
*/
|
|
127
|
+
function collectLinks($, baseUrl) {
|
|
128
|
+
const seen = new Set();
|
|
129
|
+
const links = [];
|
|
130
|
+
$("a[href]").each((_, el) => {
|
|
131
|
+
const rawHref = collapseWhitespace($(el).attr("href") ?? "");
|
|
132
|
+
if (!rawHref || rawHref.startsWith("#"))
|
|
133
|
+
return;
|
|
134
|
+
const resolved = resolveHref(rawHref, baseUrl);
|
|
135
|
+
// Skip javascript: and mailto: etc.
|
|
136
|
+
if (/^(javascript|mailto|tel):/i.test(resolved))
|
|
137
|
+
return;
|
|
138
|
+
if (seen.has(resolved))
|
|
139
|
+
return;
|
|
140
|
+
seen.add(resolved);
|
|
141
|
+
const text = collapseWhitespace($(el).text()) || resolved;
|
|
142
|
+
links.push(`- [${text}](${resolved})`);
|
|
143
|
+
if (links.length >= 80)
|
|
144
|
+
return false; // cheerio each — returning false stops iteration
|
|
145
|
+
});
|
|
146
|
+
return links;
|
|
147
|
+
}
|
|
148
|
+
function bestContentRoot($) {
|
|
149
|
+
const candidates = [
|
|
150
|
+
"main",
|
|
151
|
+
"article",
|
|
152
|
+
"[role='main']",
|
|
153
|
+
"#content",
|
|
154
|
+
"#main",
|
|
155
|
+
".content",
|
|
156
|
+
".main",
|
|
157
|
+
"body",
|
|
158
|
+
];
|
|
159
|
+
let best = $("body").first();
|
|
160
|
+
let bestScore = collapseWhitespace(best.text()).length;
|
|
161
|
+
for (const selector of candidates) {
|
|
162
|
+
$(selector).each((_, el) => {
|
|
163
|
+
const node = $(el);
|
|
164
|
+
const score = collapseWhitespace(node.text()).length;
|
|
165
|
+
if (score > bestScore || (score > 200 && selector !== "body")) {
|
|
166
|
+
best = node;
|
|
167
|
+
bestScore = score;
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
if (selector !== "body" && bestScore > 200 && best.is(selector))
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
return best.length ? best : $.root();
|
|
174
|
+
}
|
|
175
|
+
function renderChildren($, node, baseUrl) {
|
|
176
|
+
const lines = [];
|
|
177
|
+
node.contents().each((_, child) => {
|
|
178
|
+
lines.push(...renderNode($, child, baseUrl));
|
|
179
|
+
});
|
|
180
|
+
return lines;
|
|
181
|
+
}
|
|
182
|
+
function renderNode($, node, baseUrl) {
|
|
183
|
+
const wrapped = $(node);
|
|
184
|
+
const raw = wrapped.get(0);
|
|
185
|
+
if (!raw)
|
|
186
|
+
return [];
|
|
187
|
+
if (raw.type === "text") {
|
|
188
|
+
const text = collapseWhitespace(wrapped.text());
|
|
189
|
+
return text ? [text] : [];
|
|
190
|
+
}
|
|
191
|
+
if (raw.type !== "tag")
|
|
192
|
+
return [];
|
|
193
|
+
const tag = (raw.tagName ?? raw.name ?? "").toLowerCase();
|
|
194
|
+
if (!tag || STRIPPED_SELECTORS.split(", ").includes(tag))
|
|
195
|
+
return [];
|
|
196
|
+
if (/^h[1-6]$/.test(tag)) {
|
|
197
|
+
const level = Math.min(Number(tag[1]), 6);
|
|
198
|
+
const text = inlineText($, wrapped, baseUrl);
|
|
199
|
+
return text ? [`${"#".repeat(level)} ${text}`] : [];
|
|
200
|
+
}
|
|
201
|
+
if (tag === "p" || tag === "blockquote") {
|
|
202
|
+
const text = inlineText($, wrapped, baseUrl);
|
|
203
|
+
if (!text)
|
|
204
|
+
return [];
|
|
205
|
+
return [tag === "blockquote" ? `> ${text}` : text];
|
|
206
|
+
}
|
|
207
|
+
if (tag === "br")
|
|
208
|
+
return [""];
|
|
209
|
+
if (tag === "pre") {
|
|
210
|
+
const text = wrapped.text().replace(/\n{3,}/g, "\n\n").trim();
|
|
211
|
+
return text ? ["```", text, "```"] : [];
|
|
212
|
+
}
|
|
213
|
+
if (tag === "code") {
|
|
214
|
+
const text = collapseWhitespace(wrapped.text());
|
|
215
|
+
return text ? [`\`${text}\``] : [];
|
|
216
|
+
}
|
|
217
|
+
if (tag === "ul" || tag === "ol") {
|
|
218
|
+
const ordered = tag === "ol";
|
|
219
|
+
const items = [];
|
|
220
|
+
wrapped.children("li").each((index, li) => {
|
|
221
|
+
const text = inlineText($, $(li), baseUrl);
|
|
222
|
+
if (text)
|
|
223
|
+
items.push(`${ordered ? `${index + 1}.` : "-"} ${text}`);
|
|
224
|
+
});
|
|
225
|
+
return items;
|
|
226
|
+
}
|
|
227
|
+
if (tag === "table")
|
|
228
|
+
return renderTable($, wrapped, baseUrl);
|
|
229
|
+
if (tag === "img") {
|
|
230
|
+
const alt = collapseWhitespace(wrapped.attr("alt") ?? "");
|
|
231
|
+
const src = collapseWhitespace(wrapped.attr("src") ?? "");
|
|
232
|
+
if (!alt && !src)
|
|
233
|
+
return [];
|
|
234
|
+
return [`Image: ${alt || src}${alt && src ? ` (${src})` : ""}`];
|
|
235
|
+
}
|
|
236
|
+
if (tag === "form")
|
|
237
|
+
return renderForm($, wrapped);
|
|
238
|
+
if (tag === "a") {
|
|
239
|
+
const text = inlineText($, wrapped, baseUrl);
|
|
240
|
+
return text ? [text] : [];
|
|
241
|
+
}
|
|
242
|
+
return renderChildren($, wrapped, baseUrl);
|
|
243
|
+
}
|
|
244
|
+
function inlineText($, node, baseUrl) {
|
|
245
|
+
const clone = node.clone();
|
|
246
|
+
clone.find("script, style, noscript, svg, canvas").remove();
|
|
247
|
+
clone.find("a[href]").each((_, el) => {
|
|
248
|
+
const link = $(el);
|
|
249
|
+
const text = collapseWhitespace(link.text());
|
|
250
|
+
const rawHref = collapseWhitespace(link.attr("href") ?? "");
|
|
251
|
+
if (rawHref && !rawHref.startsWith("#")) {
|
|
252
|
+
const href = resolveHref(rawHref, baseUrl);
|
|
253
|
+
if (text)
|
|
254
|
+
link.text(`${text} (${href})`);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
clone.find("img").each((_, el) => {
|
|
258
|
+
const img = $(el);
|
|
259
|
+
const alt = collapseWhitespace(img.attr("alt") ?? "");
|
|
260
|
+
img.replaceWith(alt ? ` Image: ${alt} ` : " ");
|
|
261
|
+
});
|
|
262
|
+
return collapseWhitespace(clone.text());
|
|
263
|
+
}
|
|
264
|
+
function renderTable($, table, baseUrl) {
|
|
265
|
+
const rows = [];
|
|
266
|
+
table.find("tr").each((_, tr) => {
|
|
267
|
+
const cells = [];
|
|
268
|
+
$(tr).children("th,td").each((__, cell) => {
|
|
269
|
+
cells.push(inlineText($, $(cell), baseUrl));
|
|
270
|
+
});
|
|
271
|
+
if (cells.some(Boolean))
|
|
272
|
+
rows.push(cells);
|
|
273
|
+
});
|
|
274
|
+
if (rows.length === 0)
|
|
275
|
+
return [];
|
|
276
|
+
const width = Math.max(...rows.map((row) => row.length));
|
|
277
|
+
const normalized = rows.map((row) => Array.from({ length: width }, (_, i) => row[i] ?? ""));
|
|
278
|
+
const header = normalized[0];
|
|
279
|
+
return [
|
|
280
|
+
`| ${header.join(" | ")} |`,
|
|
281
|
+
`| ${header.map(() => "---").join(" | ")} |`,
|
|
282
|
+
...normalized.slice(1).map((row) => `| ${row.join(" | ")} |`),
|
|
283
|
+
];
|
|
284
|
+
}
|
|
285
|
+
function renderForm($, form) {
|
|
286
|
+
const fields = [];
|
|
287
|
+
form.find("input, textarea, select, button").each((_, el) => {
|
|
288
|
+
const field = $(el);
|
|
289
|
+
const tag = field.get(0).tagName?.toLowerCase() ?? "field";
|
|
290
|
+
const label = collapseWhitespace(field.attr("aria-label") ??
|
|
291
|
+
field.attr("placeholder") ??
|
|
292
|
+
field.attr("name") ??
|
|
293
|
+
field.text() ??
|
|
294
|
+
"");
|
|
295
|
+
fields.push(`${tag}${label ? `: ${label}` : ""}`);
|
|
296
|
+
});
|
|
297
|
+
return fields.length ? [`Form fields: ${fields.join("; ")}`] : [];
|
|
298
|
+
}
|
|
299
|
+
function normalizeReadableLines(lines) {
|
|
300
|
+
const out = [];
|
|
301
|
+
for (const line of lines) {
|
|
302
|
+
const text = collapseWhitespace(line);
|
|
303
|
+
if (!text) {
|
|
304
|
+
if (out.length > 0 && out[out.length - 1] !== "")
|
|
305
|
+
out.push("");
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
if (out[out.length - 1] !== text)
|
|
309
|
+
out.push(text);
|
|
310
|
+
}
|
|
311
|
+
return out.join("\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
312
|
+
}
|
|
89
313
|
// ---------------------------------------------------------------------------
|
|
90
314
|
// Set-Cookie parser
|
|
91
315
|
// ---------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable.js","sourceRoot":"","sources":["../../../src/tools/web/readable.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"readable.js","sourceRoot":"","sources":["../../../src/tools/web/readable.ts"],"names":[],"mappings":"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"}
|
|
@@ -106,11 +106,10 @@ export declare const RESPONSE_MODES: readonly ResponseMode[];
|
|
|
106
106
|
*
|
|
107
107
|
* Defaults applied when an optional argument is omitted:
|
|
108
108
|
* - `maxBytes` → {@link DEFAULT_MAX_BYTES} (Requirement 2.2)
|
|
109
|
-
* - `includeHeaders` → `
|
|
110
|
-
* - `includeTls` → `
|
|
111
|
-
*
|
|
112
|
-
* - `
|
|
113
|
-
* - `includeRedirectChain` → `true` (Requirement 2.18)
|
|
109
|
+
* - `includeHeaders` → `false`
|
|
110
|
+
* - `includeTls` → `false`
|
|
111
|
+
* - `includeTiming` → `false`
|
|
112
|
+
* - `includeRedirectChain` → `false`
|
|
114
113
|
* - `responseMode` → `"readable"` (Requirement 2.19)
|
|
115
114
|
* - `redactSensitive` → `true` (Requirement 2.20)
|
|
116
115
|
*/
|
|
@@ -131,11 +130,11 @@ export declare const MIN_MAX_BYTES = 1024;
|
|
|
131
130
|
/** Inclusive maximum allowed for `WebFetchArgs.maxBytes`. */
|
|
132
131
|
export declare const MAX_MAX_BYTES = 1048576;
|
|
133
132
|
/** Default value applied when `WebFetchArgs.includeHeaders` is omitted. */
|
|
134
|
-
export declare const DEFAULT_INCLUDE_HEADERS =
|
|
133
|
+
export declare const DEFAULT_INCLUDE_HEADERS = false;
|
|
135
134
|
/** Default value applied when `WebFetchArgs.includeTiming` is omitted. */
|
|
136
|
-
export declare const DEFAULT_INCLUDE_TIMING =
|
|
135
|
+
export declare const DEFAULT_INCLUDE_TIMING = false;
|
|
137
136
|
/** Default value applied when `WebFetchArgs.includeRedirectChain` is omitted. */
|
|
138
|
-
export declare const DEFAULT_INCLUDE_REDIRECT_CHAIN =
|
|
137
|
+
export declare const DEFAULT_INCLUDE_REDIRECT_CHAIN = false;
|
|
139
138
|
/** Default value applied when `WebFetchArgs.responseMode` is omitted. */
|
|
140
139
|
export declare const DEFAULT_RESPONSE_MODE: ResponseMode;
|
|
141
140
|
/** Default value applied when `WebFetchArgs.redactSensitive` is omitted. */
|
package/dist/tools/web/types.js
CHANGED
|
@@ -41,11 +41,11 @@ export const MIN_MAX_BYTES = 1024;
|
|
|
41
41
|
/** Inclusive maximum allowed for `WebFetchArgs.maxBytes`. */
|
|
42
42
|
export const MAX_MAX_BYTES = 1_048_576;
|
|
43
43
|
/** Default value applied when `WebFetchArgs.includeHeaders` is omitted. */
|
|
44
|
-
export const DEFAULT_INCLUDE_HEADERS =
|
|
44
|
+
export const DEFAULT_INCLUDE_HEADERS = false;
|
|
45
45
|
/** Default value applied when `WebFetchArgs.includeTiming` is omitted. */
|
|
46
|
-
export const DEFAULT_INCLUDE_TIMING =
|
|
46
|
+
export const DEFAULT_INCLUDE_TIMING = false;
|
|
47
47
|
/** Default value applied when `WebFetchArgs.includeRedirectChain` is omitted. */
|
|
48
|
-
export const DEFAULT_INCLUDE_REDIRECT_CHAIN =
|
|
48
|
+
export const DEFAULT_INCLUDE_REDIRECT_CHAIN = false;
|
|
49
49
|
/** Default value applied when `WebFetchArgs.responseMode` is omitted. */
|
|
50
50
|
export const DEFAULT_RESPONSE_MODE = "readable";
|
|
51
51
|
/** Default value applied when `WebFetchArgs.redactSensitive` is omitted. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/web/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAgC;IAC5D,OAAO;IACP,QAAQ;IACR,YAAY;CACJ,CAAC;AAeX,wEAAwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,gEAAgE;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC,gEAAgE;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAgBpC,iEAAiE;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,iEAAiE;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,mEAAmE;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,mEAAmE;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AA6DvC,sDAAsD;AACtD,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,UAAU;IACV,KAAK;CACG,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/web/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAgC;IAC5D,OAAO;IACP,QAAQ;IACR,YAAY;CACJ,CAAC;AAeX,wEAAwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,gEAAgE;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC,gEAAgE;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAgBpC,iEAAiE;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,iEAAiE;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,mEAAmE;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,mEAAmE;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AA6DvC,sDAAsD;AACtD,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,UAAU;IACV,KAAK;CACG,CAAC;AAyBX,qEAAqE;AACrE,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAElC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAE5C,iFAAiF;AACjF,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,CAAC;AAEpD,yEAAyE;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAiB,UAAU,CAAC;AAE9D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,sEAAsE;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C,iFAAiF;AACjF,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAElD,uEAAuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AAEjD,gEAAgE;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE5C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAElD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC"}
|
package/dist/tui/App.js
CHANGED
|
@@ -41,6 +41,42 @@ import { addScopeTargets, clearScope, loadScope, saveScope, } from "../store/sco
|
|
|
41
41
|
import { formatKeyStatus } from "./format-keys.js";
|
|
42
42
|
import { shouldStoreInPromptHistory } from "./input-history.js";
|
|
43
43
|
import { DISABLE_MOUSE_REPORTING, ENABLE_MOUSE_REPORTING, isMouseReport, mouseWheelDirection, stripMouseReports, } from "./mouse.js";
|
|
44
|
+
function wrapPlainString(text, width) {
|
|
45
|
+
if (text.length === 0) {
|
|
46
|
+
return [{ lineText: "", startIdx: 0, endIdx: 0 }];
|
|
47
|
+
}
|
|
48
|
+
const lines = [];
|
|
49
|
+
const paragraphs = text.split("\n");
|
|
50
|
+
let currentOffset = 0;
|
|
51
|
+
for (let p = 0; p < paragraphs.length; p++) {
|
|
52
|
+
const para = paragraphs[p];
|
|
53
|
+
if (para.length === 0) {
|
|
54
|
+
lines.push({ lineText: "", startIdx: currentOffset, endIdx: currentOffset });
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
let idx = 0;
|
|
58
|
+
while (idx < para.length) {
|
|
59
|
+
let chunk = para.slice(idx, idx + width);
|
|
60
|
+
let wrapLen = chunk.length;
|
|
61
|
+
if (idx + width < para.length) {
|
|
62
|
+
const lastSpace = chunk.lastIndexOf(" ");
|
|
63
|
+
if (lastSpace > 0) {
|
|
64
|
+
wrapLen = lastSpace + 1;
|
|
65
|
+
chunk = para.slice(idx, idx + wrapLen);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
lines.push({
|
|
69
|
+
lineText: chunk,
|
|
70
|
+
startIdx: currentOffset + idx,
|
|
71
|
+
endIdx: currentOffset + idx + wrapLen,
|
|
72
|
+
});
|
|
73
|
+
idx += wrapLen;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
currentOffset += para.length + 1;
|
|
77
|
+
}
|
|
78
|
+
return lines;
|
|
79
|
+
}
|
|
44
80
|
const IMPLEMENT_PROMPT = "I approve the plan. Execute it now in STRICT ORDER. Task 1 (explore) is ALREADY COMPLETE from the planning phase — " +
|
|
45
81
|
"do NOT re-list or re-read the directory. Start with the FIRST pending task that still needs implementation work. " +
|
|
46
82
|
"For each task: call task.update {taskId, state:'in_progress'} → do the real work → VERIFY it succeeded → " +
|
|
@@ -77,6 +113,14 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
77
113
|
const autosaveTimer = useRef(undefined);
|
|
78
114
|
const latestItems = useRef(state.items);
|
|
79
115
|
latestItems.current = state.items;
|
|
116
|
+
const compactAbortRef = useRef(undefined);
|
|
117
|
+
const cancelCompaction = useCallback(() => {
|
|
118
|
+
if (compactAbortRef.current) {
|
|
119
|
+
compactAbortRef.current.abort();
|
|
120
|
+
compactAbortRef.current = undefined;
|
|
121
|
+
}
|
|
122
|
+
setCompacting(false);
|
|
123
|
+
}, []);
|
|
80
124
|
useEffect(() => {
|
|
81
125
|
if (!process.stdout.isTTY)
|
|
82
126
|
return;
|
|
@@ -269,7 +313,8 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
269
313
|
});
|
|
270
314
|
return;
|
|
271
315
|
}
|
|
272
|
-
|
|
316
|
+
const trimmedKey = key.trim();
|
|
317
|
+
if (!getProvider(next).validateKey(trimmedKey)) {
|
|
273
318
|
dispatch({
|
|
274
319
|
type: "notice",
|
|
275
320
|
level: "warn",
|
|
@@ -277,7 +322,7 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
277
322
|
});
|
|
278
323
|
return;
|
|
279
324
|
}
|
|
280
|
-
await setProviderSecret(next,
|
|
325
|
+
await setProviderSecret(next, trimmedKey);
|
|
281
326
|
}
|
|
282
327
|
const nextModel = getProviderModel(next);
|
|
283
328
|
setDefaultProvider(next);
|
|
@@ -409,11 +454,13 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
409
454
|
info("mode → agent");
|
|
410
455
|
return true;
|
|
411
456
|
case "/clear":
|
|
457
|
+
cancelCompaction();
|
|
412
458
|
runner.reset();
|
|
413
459
|
dispatch({ type: "reset" });
|
|
414
460
|
info("context cleared");
|
|
415
461
|
return true;
|
|
416
462
|
case "/new":
|
|
463
|
+
cancelCompaction();
|
|
417
464
|
void (async () => {
|
|
418
465
|
const messages = runner.getMessages();
|
|
419
466
|
if (!noHistory && !getConfig().privateMode && messages.length > 0)
|
|
@@ -424,6 +471,7 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
424
471
|
})();
|
|
425
472
|
return true;
|
|
426
473
|
case "/clean":
|
|
474
|
+
cancelCompaction();
|
|
427
475
|
runner.reset();
|
|
428
476
|
dispatch({ type: "reset" });
|
|
429
477
|
info("fresh session started");
|
|
@@ -603,16 +651,21 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
603
651
|
return true;
|
|
604
652
|
}
|
|
605
653
|
case "/compact": {
|
|
606
|
-
if (runner.isRunning()
|
|
654
|
+
if (runner.isRunning()) {
|
|
607
655
|
warn("wait for the current operation to finish");
|
|
608
656
|
return true;
|
|
609
657
|
}
|
|
658
|
+
cancelCompaction();
|
|
659
|
+
const ac = new AbortController();
|
|
660
|
+
compactAbortRef.current = ac;
|
|
610
661
|
setCompacting(true);
|
|
611
662
|
info("compacting conversation…");
|
|
612
663
|
const fullSession = serializeTranscriptForCompaction(state.items);
|
|
613
664
|
void runner
|
|
614
|
-
.compact(fullSession, 2)
|
|
665
|
+
.compact(fullSession, 2, ac.signal)
|
|
615
666
|
.then((result) => {
|
|
667
|
+
if (ac.signal.aborted)
|
|
668
|
+
return;
|
|
616
669
|
if (result.after === result.before) {
|
|
617
670
|
info("nothing to compact yet — more messages are required");
|
|
618
671
|
}
|
|
@@ -620,13 +673,29 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
620
673
|
const memoMsg = result.messages.find((m) => m.role === "system" &&
|
|
621
674
|
(m.content.startsWith("Session memory") ||
|
|
622
675
|
m.content.startsWith("Earlier turns"))) ?? result.messages.find((m, i) => i > 0 && m.role === "system");
|
|
623
|
-
const summary =
|
|
676
|
+
const summary = !result.summarized && fullSession.trim()
|
|
677
|
+
? `Earlier turns in this session, summarized to fit the context budget. Full local transcript shown for review; the model received a compact fallback memory.\n\n${fullSession}`
|
|
678
|
+
: memoMsg
|
|
679
|
+
? memoMsg.content
|
|
680
|
+
: "Compacted context";
|
|
624
681
|
dispatch({ type: "compacted", summary, keepRecent: 2 });
|
|
625
682
|
info(`compacted ${result.before} → ${result.after} messages · ~${result.beforeTokens.toLocaleString()} → ~${result.afterTokens.toLocaleString()} tokens${result.summarized ? "" : " · local fallback"}`);
|
|
626
683
|
}
|
|
627
684
|
})
|
|
628
|
-
.catch((error) =>
|
|
629
|
-
.
|
|
685
|
+
.catch((error) => {
|
|
686
|
+
if (ac.signal.aborted || (error instanceof Error && error.name === "AbortError")) {
|
|
687
|
+
info("compaction cancelled");
|
|
688
|
+
}
|
|
689
|
+
else {
|
|
690
|
+
warn(`compaction failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
691
|
+
}
|
|
692
|
+
})
|
|
693
|
+
.finally(() => {
|
|
694
|
+
if (compactAbortRef.current === ac) {
|
|
695
|
+
compactAbortRef.current = undefined;
|
|
696
|
+
setCompacting(false);
|
|
697
|
+
}
|
|
698
|
+
});
|
|
630
699
|
return true;
|
|
631
700
|
}
|
|
632
701
|
case "/save":
|
|
@@ -680,6 +749,7 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
680
749
|
warn("session not found");
|
|
681
750
|
return;
|
|
682
751
|
}
|
|
752
|
+
cancelCompaction();
|
|
683
753
|
runner.setMessages(session.messages);
|
|
684
754
|
setOverlay({ kind: "none" });
|
|
685
755
|
dispatch({
|
|
@@ -1290,21 +1360,15 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
1290
1360
|
// screen flash on every keypress/spinner frame.
|
|
1291
1361
|
const usableRows = Math.max(8, rows - 1);
|
|
1292
1362
|
const headerH = 0;
|
|
1293
|
-
const statusH = state.pendingConfirm
|
|
1294
|
-
|
|
1295
|
-
: secretRequest
|
|
1296
|
-
? 7
|
|
1297
|
-
: state.status.running || compacting
|
|
1298
|
-
? 1
|
|
1299
|
-
: 0;
|
|
1300
|
-
const composerH = 3;
|
|
1301
|
-
const chromeH = !secretRequest &&
|
|
1302
|
-
!state.pendingConfirm &&
|
|
1303
|
-
!state.status.running &&
|
|
1304
|
-
!compacting
|
|
1305
|
-
? 1
|
|
1306
|
-
: 0;
|
|
1363
|
+
const statusH = state.pendingConfirm ? 6 : secretRequest ? 7 : 0;
|
|
1364
|
+
const chromeH = !secretRequest && !state.pendingConfirm ? 1 : 0;
|
|
1307
1365
|
const gapH = 1;
|
|
1366
|
+
const inputWidth = Math.max(10, cols - 6);
|
|
1367
|
+
const wrappedInputLines = wrapPlainString(input, inputWidth);
|
|
1368
|
+
const maxAvailableForComposer = Math.max(3, usableRows - headerH - statusH - chromeH - gapH - 8);
|
|
1369
|
+
const maxComposerTextRows = Math.max(1, maxAvailableForComposer - 2);
|
|
1370
|
+
const composerTextH = Math.min(wrappedInputLines.length, maxComposerTextRows);
|
|
1371
|
+
const composerH = composerTextH + 2;
|
|
1308
1372
|
const maxMenuRows = Math.max(3, usableRows - headerH - statusH - composerH - chromeH - gapH - 3);
|
|
1309
1373
|
const menuH = slashMenuOpen
|
|
1310
1374
|
? Math.min(suggestions.length, maxMenuRows)
|
|
@@ -1384,7 +1448,7 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
1384
1448
|
useInput((ch, key) => {
|
|
1385
1449
|
if (modalActive)
|
|
1386
1450
|
return; // overlay/modal owns input
|
|
1387
|
-
const cleanedChunk = stripMouseReports(ch);
|
|
1451
|
+
const cleanedChunk = stripMouseReports(ch).replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
1388
1452
|
if (isMouseReport(ch) && cleanedChunk.length === 0)
|
|
1389
1453
|
return;
|
|
1390
1454
|
// Global shortcuts
|
|
@@ -1461,6 +1525,10 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
1461
1525
|
return;
|
|
1462
1526
|
}
|
|
1463
1527
|
if (key.escape) {
|
|
1528
|
+
if (compacting) {
|
|
1529
|
+
cancelCompaction();
|
|
1530
|
+
return;
|
|
1531
|
+
}
|
|
1464
1532
|
if (state.outputExpanded)
|
|
1465
1533
|
dispatch({ type: "toggle-output" });
|
|
1466
1534
|
else if (runner.isRunning())
|
|
@@ -1616,15 +1684,34 @@ export function App({ version, initialMode, provider: initialProvider, initialMo
|
|
|
1616
1684
|
: file.isDir
|
|
1617
1685
|
? "#67E8F9"
|
|
1618
1686
|
: "#F8FAFC", bold: i === selected, children: [i === selected ? "❯ " : " ", file.isDir ? "▸ " : "· ", file.value] }), _jsx(Text, { dimColor: true, children: file.isDir ? " directory" : " attach file" })] }, file.value)))
|
|
1619
|
-
: null, secretRequest ? (_jsx(SecretInputPanel, { title: secretRequest.title, prompt: secretRequest.prompt, onSubmit: (value) => answerSecret(value), onCancel: () => answerSecret(undefined) })) : state.pendingConfirm ? (_jsx(ConfirmModal, { confirm: state.pendingConfirm, onAnswer: answerConfirm })) :
|
|
1687
|
+
: null, secretRequest ? (_jsx(SecretInputPanel, { title: secretRequest.title, prompt: secretRequest.prompt, onSubmit: (value) => answerSecret(value), onCancel: () => answerSecret(undefined) })) : state.pendingConfirm ? (_jsx(ConfirmModal, { confirm: state.pendingConfirm, onAnswer: answerConfirm })) : null, _jsxs(Box, { borderStyle: "round", borderColor: state.pendingConfirm || secretRequest
|
|
1620
1688
|
? "yellow"
|
|
1621
1689
|
: state.status.running
|
|
1622
1690
|
? "yellow"
|
|
1623
1691
|
: "cyan", paddingX: 1, children: [_jsx(Text, { color: state.status.running ? "yellow" : "cyan", bold: true, children: state.pendingConfirm || secretRequest ? "! " : "❯ " }), secretRequest ? (_jsx(Text, { bold: true, children: "Input locked \u00B7 complete the secure input above" })) : state.pendingConfirm ? (_jsx(Text, { bold: true, children: "Input locked \u00B7 answer the confirmation above with Y or N" })) : input.length === 0 ? (_jsx(Text, { dimColor: true, children: state.status.running
|
|
1624
1692
|
? "type to queue a message…"
|
|
1625
|
-
: "ask anything · / for commands · @file to attach · esc to cancel" })) : (
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1693
|
+
: "ask anything · / for commands · @file to attach · esc to cancel" })) : ((() => {
|
|
1694
|
+
let cursorLineIdx = 0;
|
|
1695
|
+
for (let i = 0; i < wrappedInputLines.length; i++) {
|
|
1696
|
+
const line = wrappedInputLines[i];
|
|
1697
|
+
if (cursor >= line.startIdx && cursor <= line.endIdx) {
|
|
1698
|
+
cursorLineIdx = i;
|
|
1699
|
+
if (cursor === line.startIdx) {
|
|
1700
|
+
break;
|
|
1701
|
+
}
|
|
1702
|
+
}
|
|
1703
|
+
}
|
|
1704
|
+
let startLine = Math.max(0, cursorLineIdx - Math.floor(composerTextH / 2));
|
|
1705
|
+
let endLine = Math.min(wrappedInputLines.length - 1, startLine + composerTextH - 1);
|
|
1706
|
+
startLine = Math.max(0, endLine - composerTextH + 1);
|
|
1707
|
+
const startCharIdx = wrappedInputLines[startLine].startIdx;
|
|
1708
|
+
const endCharIdx = wrappedInputLines[endLine].endIdx;
|
|
1709
|
+
const slicedInput = input.slice(startCharIdx, endCharIdx);
|
|
1710
|
+
const slicedCursor = cursor - startCharIdx;
|
|
1711
|
+
const beforeSliced = slicedInput.slice(0, slicedCursor);
|
|
1712
|
+
const atSliced = slicedInput.slice(slicedCursor, slicedCursor + 1) || " ";
|
|
1713
|
+
const afterSliced = slicedInput.slice(slicedCursor + 1);
|
|
1714
|
+
return (_jsxs(Text, { wrap: "wrap", children: [_jsx(Text, { color: "#F8FAFC", children: beforeSliced }), _jsx(Text, { backgroundColor: "#22D3EE", color: "#020617", bold: true, children: atSliced }), _jsx(Text, { color: "#F8FAFC", children: afterSliced })] }));
|
|
1715
|
+
})())] }), !secretRequest && !state.pendingConfirm ? (_jsxs(Box, { paddingX: 1, justifyContent: "center", children: [state.status.running || compacting ? (_jsxs(_Fragment, { children: [_jsxs(Text, { backgroundColor: "#B45309", color: "#FFFFFF", bold: true, children: [" ", compacting ? "COMPACTING" : "RUNNING", " "] }), _jsx(Text, { children: " " }), _jsxs(Text, { color: "magenta", children: [spinner, " "] }), _jsxs(Text, { color: "yellow", children: [compacting ? "compacting conversation" : (state.status.activity || "working"), state.status.step > 0 ? ` (step ${state.status.step})` : "", ` · ${elapsed}s`] }), _jsx(Text, { children: " " }), _jsxs(Text, { backgroundColor: "#334155", color: "#F8FAFC", children: [" ", "ESC CANCEL", " "] }), state.queued.length > 0 ? (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(Text, { backgroundColor: "#854D0E", color: "#FFFFFF", bold: true, children: ` ${state.queued.length} QUEUED ` })] })) : null] })) : (_jsxs(_Fragment, { children: [_jsxs(Text, { backgroundColor: "#166534", color: "#FFFFFF", bold: true, children: [" ", "READY", " "] }), state.queued.length > 0 ? (_jsx(Text, { backgroundColor: "#854D0E", color: "#FFFFFF", bold: true, children: ` ${state.queued.length} QUEUED ` })) : null, _jsx(Text, { children: " " }), _jsxs(Text, { backgroundColor: "#334155", color: "#F8FAFC", children: [" ", "/ COMMANDS", " "] }), _jsx(Text, { children: " " }), _jsxs(Text, { backgroundColor: "#334155", color: "#F8FAFC", children: [" ", "CTRL+T THINKING", " "] }), _jsx(Text, { children: " " }), _jsxs(Text, { backgroundColor: "#334155", color: "#F8FAFC", children: [" ", "CTRL+O OUTPUT", " "] }), _jsx(Text, { children: " " }), _jsx(Text, { backgroundColor: mouseMode ? "#155E75" : "#334155", color: "#F8FAFC", children: ` MOUSE ${mouseMode ? "ON" : "OFF"} ` })] })), maxOffset > offset ? (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(Text, { backgroundColor: "#854D0E", color: "#FFFFFF", bold: true, children: ` ▲ ${maxOffset - offset} ` })] })) : null, offset > 0 ? (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(Text, { backgroundColor: "#854D0E", color: "#FFFFFF", bold: true, children: ` ▼ ${offset} ` })] })) : null] })) : null] }));
|
|
1629
1716
|
}
|
|
1630
1717
|
//# sourceMappingURL=App.js.map
|