@este.systems/dsc 1.2.1 → 1.4.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/CHANGELOG.md +21 -2
- package/README.md +12 -2
- package/dist/agent.js +68 -39
- package/dist/agent.js.map +1 -1
- package/dist/api.js +17 -0
- package/dist/api.js.map +1 -1
- package/dist/context.js +131 -0
- package/dist/context.js.map +1 -0
- package/dist/slash_dispatch.js +140 -2
- package/dist/slash_dispatch.js.map +1 -1
- package/dist/store.js +2 -0
- package/dist/store.js.map +1 -1
- package/dist/tools.js +16 -2
- package/dist/tools.js.map +1 -1
- package/dist/tui/App.js +2 -1
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/Markdown.js +168 -1
- package/dist/tui/Markdown.js.map +1 -1
- package/dist/tui/PlanLine.js +16 -0
- package/dist/tui/PlanLine.js.map +1 -0
- package/dist/tui/StatusBar.js +46 -13
- package/dist/tui/StatusBar.js.map +1 -1
- package/dist/tui.js +151 -14
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
package/dist/tui/Markdown.js
CHANGED
|
@@ -1,6 +1,64 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from "react";
|
|
3
3
|
import { Box, Text } from "ink";
|
|
4
|
+
// Minimal markdown → ink Text-tree renderer. Handles the subset that's
|
|
5
|
+
// actually common in assistant output: headings, paragraphs, inline code,
|
|
6
|
+
// fenced code blocks, **bold**, *italic*, `code`, [link](url), `- ` lists,
|
|
7
|
+
// `> ` blockquotes. Anything not recognized falls through as plain text,
|
|
8
|
+
// so worst-case the user just sees the literal source — never an error.
|
|
9
|
+
//
|
|
10
|
+
// We intentionally don't pull in `marked` or similar — those produce HTML
|
|
11
|
+
// or ANSI strings, neither of which ink's Text component renders. A small
|
|
12
|
+
// purpose-built parser also lets us memoize per-source so streaming
|
|
13
|
+
// re-renders skip the parse when source hasn't changed.
|
|
14
|
+
// ── Syntax highlighting tables ──────────────────────────────────────────
|
|
15
|
+
// Compact keyword strings (split to Set at module-load time) + comment
|
|
16
|
+
// styles. Unrecognised languages fall through to flat cyan.
|
|
17
|
+
const KW_RAW = {
|
|
18
|
+
ts: "const let var function return if else for while do class interface type enum namespace module import export from default async await try catch throw new extends implements typeof instanceof in of as keyof infer is true false null undefined void never any unknown string number boolean symbol bigint readonly abstract static public private protected break continue switch case yield",
|
|
19
|
+
py: "def class return if elif else for while try except finally with as import from raise yield lambda pass break continue and or not in is True False None async await global nonlocal assert del",
|
|
20
|
+
sh: "if then else elif fi for while do done in case esac function return local export alias unset source echo exit break continue eval exec shift read declare",
|
|
21
|
+
rs: "fn let mut const return if else for while loop match impl struct enum trait type use mod pub crate self super where as in ref move async await true false Some None Ok Err unsafe extern static dyn box",
|
|
22
|
+
go: "func return if else for range var const type struct interface map chan go select case default defer package import true false nil break continue fallthrough switch make new append len cap close delete panic recover",
|
|
23
|
+
java: "class interface enum extends implements package import public private protected static final abstract synchronized volatile transient native return if else for while do switch case default break continue throw try catch finally new this super true false null void int long float double boolean char byte short String",
|
|
24
|
+
c: "if else for while do switch case default break continue return goto struct union enum typedef sizeof static extern const volatile register auto signed unsigned int char float double void long short true false NULL",
|
|
25
|
+
sql: "SELECT FROM WHERE JOIN LEFT RIGHT INNER OUTER ON AND OR NOT IN LIKE BETWEEN IS NULL AS ORDER BY GROUP HAVING LIMIT OFFSET INSERT INTO VALUES UPDATE SET DELETE CREATE TABLE ALTER DROP INDEX VIEW UNION ALL DISTINCT CASE WHEN THEN ELSE END EXISTS COUNT SUM AVG MIN MAX ASC DESC PRIMARY KEY FOREIGN REFERENCES CASCADE DEFAULT UNIQUE CONSTRAINT",
|
|
26
|
+
};
|
|
27
|
+
const KW = {};
|
|
28
|
+
for (const [lang, s] of Object.entries(KW_RAW)) {
|
|
29
|
+
KW[lang] = new Set(s.split(/\s+/));
|
|
30
|
+
}
|
|
31
|
+
const COMMENT = {
|
|
32
|
+
ts: { lc: "//", bc: ["/*", "*/"] },
|
|
33
|
+
py: { lc: "#" },
|
|
34
|
+
sh: { lc: "#" },
|
|
35
|
+
rs: { lc: "//", bc: ["/*", "*/"] },
|
|
36
|
+
go: { lc: "//", bc: ["/*", "*/"] },
|
|
37
|
+
java: { lc: "//", bc: ["/*", "*/"] },
|
|
38
|
+
c: { lc: "//", bc: ["/*", "*/"] },
|
|
39
|
+
sql: { lc: "--", bc: ["/*", "*/"] },
|
|
40
|
+
yaml: { lc: "#" },
|
|
41
|
+
css: { bc: ["/*", "*/"] },
|
|
42
|
+
};
|
|
43
|
+
const LANG_ALIAS = {
|
|
44
|
+
js: "ts", jsx: "ts", tsx: "ts", mjs: "ts", cjs: "ts",
|
|
45
|
+
bash: "sh", zsh: "sh",
|
|
46
|
+
cpp: "c", cc: "c", cxx: "c", hpp: "c", h: "c",
|
|
47
|
+
rb: "py", python: "py",
|
|
48
|
+
rust: "rs",
|
|
49
|
+
yml: "yaml",
|
|
50
|
+
scss: "css", less: "css",
|
|
51
|
+
kt: "java", kotlin: "java",
|
|
52
|
+
dockerfile: "sh", toml: "sh",
|
|
53
|
+
};
|
|
54
|
+
function resolveLang(lang) {
|
|
55
|
+
const l = lang.toLowerCase();
|
|
56
|
+
const base = LANG_ALIAS[l] ?? l;
|
|
57
|
+
return KW[base] || COMMENT[base] ? base : null;
|
|
58
|
+
}
|
|
59
|
+
export function hasSyntax(lang) {
|
|
60
|
+
return resolveLang(lang) !== null;
|
|
61
|
+
}
|
|
4
62
|
// React.memo on `source`: when the parent re-renders (e.g. every chunk
|
|
5
63
|
// of a streaming turn) but the source we're handed hasn't changed, skip
|
|
6
64
|
// the parse + ink tree rebuild entirely. The streaming pipeline relies
|
|
@@ -122,7 +180,10 @@ function Block({ block }) {
|
|
|
122
180
|
return (_jsx(Box, { children: _jsxs(Text, { bold: true, color: color, children: ["#".repeat(block.level), " ", block.text] }) }));
|
|
123
181
|
}
|
|
124
182
|
if (block.kind === "code") {
|
|
125
|
-
|
|
183
|
+
const langOk = hasSyntax(block.lang);
|
|
184
|
+
return (_jsxs(Box, { flexDirection: "column", marginY: 0, children: [block.lang ? (_jsxs(Text, { dimColor: true, children: ["```", block.lang] })) : (_jsx(Text, { dimColor: true, children: "```" })), langOk
|
|
185
|
+
? block.lines.map((l, i) => (_jsxs(Text, { children: [" ", highlightLine(l, resolveLang(block.lang))] }, i)))
|
|
186
|
+
: block.lines.map((l, i) => (_jsxs(Text, { color: "cyan", children: [" ", l] }, i))), _jsx(Text, { dimColor: true, children: "```" })] }));
|
|
126
187
|
}
|
|
127
188
|
if (block.kind === "quote") {
|
|
128
189
|
return (_jsx(Box, { flexDirection: "column", children: block.lines.map((l, i) => (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "\u2502 " }), _jsx(Text, { dimColor: true, italic: true, children: _jsx(Inline, { source: l }) })] }, i))) }));
|
|
@@ -164,6 +225,112 @@ function Block({ block }) {
|
|
|
164
225
|
}
|
|
165
226
|
return (_jsx(Box, { children: _jsx(Text, { children: _jsx(Inline, { source: block.text }) }) }));
|
|
166
227
|
}
|
|
228
|
+
// ── Syntax highlighting ─────────────────────────────────────────────────
|
|
229
|
+
/** Scan `line` and return styled spans for the given language's tokens.
|
|
230
|
+
* Unrecognised languages never reach here (caller checks hasSyntax first).
|
|
231
|
+
* Uses a single left-to-right pass with a plain-text buffer: keywords
|
|
232
|
+
* (blue bold), numbers (yellow), strings (green), comments (dim italic). */
|
|
233
|
+
function highlightLine(line, lang) {
|
|
234
|
+
const kw = KW[lang];
|
|
235
|
+
const cmt = COMMENT[lang] ?? {};
|
|
236
|
+
const lc = cmt.lc;
|
|
237
|
+
const [bo, bc] = cmt.bc ?? [];
|
|
238
|
+
const out = [];
|
|
239
|
+
let plain = "";
|
|
240
|
+
const flush = () => { if (plain) {
|
|
241
|
+
out.push(plain);
|
|
242
|
+
plain = "";
|
|
243
|
+
} };
|
|
244
|
+
let i = 0;
|
|
245
|
+
while (i < line.length) {
|
|
246
|
+
// Line comment — consume rest of line
|
|
247
|
+
if (lc && line.startsWith(lc, i)) {
|
|
248
|
+
flush();
|
|
249
|
+
out.push(_jsx(Text, { dimColor: true, italic: true, children: line.slice(i) }, out.length));
|
|
250
|
+
return out;
|
|
251
|
+
}
|
|
252
|
+
// Block comment
|
|
253
|
+
if (bo && bc && line.startsWith(bo, i)) {
|
|
254
|
+
const end = line.indexOf(bc, i + bo.length);
|
|
255
|
+
if (end !== -1) {
|
|
256
|
+
flush();
|
|
257
|
+
out.push(_jsx(Text, { dimColor: true, italic: true, children: line.slice(i, end + bc.length) }, out.length));
|
|
258
|
+
i = end + bc.length;
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// String: "..." or '...'
|
|
263
|
+
if (line[i] === '"' || line[i] === "'") {
|
|
264
|
+
const end = findQuoteEnd(line, i, line[i]);
|
|
265
|
+
if (end !== -1) {
|
|
266
|
+
flush();
|
|
267
|
+
out.push(_jsx(Text, { color: "green", children: line.slice(i, end + 1) }, out.length));
|
|
268
|
+
i = end + 1;
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Template literal: `...`
|
|
273
|
+
if (line[i] === '`') {
|
|
274
|
+
let j = i + 1;
|
|
275
|
+
while (j < line.length) {
|
|
276
|
+
if (line[j] === '\\') {
|
|
277
|
+
j += 2;
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
if (line[j] === '`')
|
|
281
|
+
break;
|
|
282
|
+
j++;
|
|
283
|
+
}
|
|
284
|
+
if (j < line.length) {
|
|
285
|
+
flush();
|
|
286
|
+
out.push(_jsx(Text, { color: "green", children: line.slice(i, j + 1) }, out.length));
|
|
287
|
+
i = j + 1;
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Number (must start on a word boundary — not mid-identifier like foo123)
|
|
292
|
+
if (i === 0 || !/\w/.test(line[i - 1])) {
|
|
293
|
+
const m = line.slice(i).match(/^(0[xX][0-9a-fA-F]+|0[bB][01]+|0[oO][0-7]+|\d+\.?\d*(?:[eE][+-]?\d+)?)/);
|
|
294
|
+
if (m) {
|
|
295
|
+
flush();
|
|
296
|
+
out.push(_jsx(Text, { color: "yellow", children: m[0] }, out.length));
|
|
297
|
+
i += m[0].length;
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Keyword (must start on a word boundary)
|
|
302
|
+
if (kw && (i === 0 || !/\w/.test(line[i - 1]))) {
|
|
303
|
+
const m = line.slice(i).match(/^[a-zA-Z_]\w*/);
|
|
304
|
+
if (m && kw.has(m[0])) {
|
|
305
|
+
flush();
|
|
306
|
+
out.push(_jsx(Text, { color: "blue", bold: true, children: m[0] }, out.length));
|
|
307
|
+
i += m[0].length;
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// Plain character
|
|
312
|
+
plain += line[i];
|
|
313
|
+
i++;
|
|
314
|
+
}
|
|
315
|
+
flush();
|
|
316
|
+
return out;
|
|
317
|
+
}
|
|
318
|
+
/** Find the closing quote for a string starting at `start` with `quote`,
|
|
319
|
+
* skipping backslash-escaped characters. Returns -1 if unclosed. */
|
|
320
|
+
function findQuoteEnd(line, start, quote) {
|
|
321
|
+
let j = start + 1;
|
|
322
|
+
while (j < line.length) {
|
|
323
|
+
if (line[j] === '\\') {
|
|
324
|
+
j += 2;
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
if (line[j] === quote)
|
|
328
|
+
return j;
|
|
329
|
+
j++;
|
|
330
|
+
}
|
|
331
|
+
return -1;
|
|
332
|
+
}
|
|
333
|
+
// ── Inline markdown parser ──────────────────────────────────────────────
|
|
167
334
|
// Inline span parser: scans the string left-to-right and emits styled spans
|
|
168
335
|
// for **bold**, *italic*, `code`, [text](url). The unambiguous markers are
|
|
169
336
|
// chosen for predictability — markdown's full inline grammar is famously
|
package/dist/tui/Markdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/tui/Markdown.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/tui/Markdown.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { useStore } from "./useStore.js";
|
|
4
|
+
/** Compact one-line plan progress indicator shown above the prompt.
|
|
5
|
+
* Renders nothing when there's no active plan. */
|
|
6
|
+
export function PlanLine() {
|
|
7
|
+
const plan = useStore((s) => s.plan);
|
|
8
|
+
if (!plan)
|
|
9
|
+
return null;
|
|
10
|
+
const done = plan.tasks.filter((t) => t.done).length;
|
|
11
|
+
const total = plan.tasks.length;
|
|
12
|
+
const pct = total > 0 ? Math.round((done / total) * 100) : 0;
|
|
13
|
+
const bar = plan.tasks.map((t) => (t.done ? "✓" : "◌")).join("");
|
|
14
|
+
return (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "plan: " }), _jsx(Text, { children: plan.title }), _jsxs(Text, { dimColor: true, children: [" [", bar, "] ", done, "/", total, " (", pct, "%)"] })] }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=PlanLine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlanLine.js","sourceRoot":"","sources":["../../src/tui/PlanLine.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;mDACmD;AACnD,MAAM,UAAU,QAAQ;IACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEjE,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,QAAQ,6BAAc,EAC5B,KAAC,IAAI,cAAE,IAAI,CAAC,KAAK,GAAQ,EACzB,MAAC,IAAI,IAAC,QAAQ,0BAAK,GAAG,QAAI,IAAI,OAAG,KAAK,QAAI,GAAG,UAAU,IACnD,CACP,CAAC;AACJ,CAAC"}
|
package/dist/tui/StatusBar.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState } from "react";
|
|
3
3
|
import { Box, Text, useStdout } from "ink";
|
|
4
4
|
import { useStore } from "./useStore.js";
|
|
5
|
+
import { modelSpec } from "../api.js";
|
|
5
6
|
// Braille-block spinner — same shape Ora/cli-spinners use. Each entry is a
|
|
6
7
|
// single column wide so it doesn't shift the status-bar layout per tick.
|
|
7
8
|
const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
@@ -42,27 +43,59 @@ export function StatusBar() {
|
|
|
42
43
|
const cache = s.cacheHitTokens > 0 || s.cacheMissTokens > 0
|
|
43
44
|
? ` (h:${formatCount(s.cacheHitTokens)} m:${formatCount(s.cacheMissTokens)})`
|
|
44
45
|
: "";
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
const ctxWindow = modelSpec(s.model).contextWindow;
|
|
47
|
+
const ctxPct = ctxWindow ? Math.round((s.contextTokens / ctxWindow) * 100) : null;
|
|
48
|
+
const ctxLabel = ctxWindow && ctxPct !== null
|
|
49
|
+
? `ctx:${formatCount(s.contextTokens)}/${formatCount(ctxWindow)} (${ctxPct}%)`
|
|
50
|
+
: `ctx:${formatCount(s.contextTokens)}`;
|
|
51
|
+
// Color the ctx label when approaching the context window: yellow at 80%,
|
|
52
|
+
// red at 95%. The inverse background swaps fg/bg; these colors stay legible.
|
|
53
|
+
const ctxColor = ctxPct !== null && ctxPct >= 95 ? "red"
|
|
54
|
+
: ctxPct !== null && ctxPct >= 80 ? "yellow"
|
|
55
|
+
: undefined;
|
|
56
|
+
const leftBeforeCtx = `${s.model}${flags} · ${s.cost.toFixed(4)} ` +
|
|
57
|
+
`▲${formatCount(s.inTokens)}${cache} ▼${formatCount(s.outTokens)} `;
|
|
58
|
+
const afterCtx = s.queueDepth > 0 ? ` queued:${s.queueDepth}` : "";
|
|
59
|
+
const fullLeft = leftBeforeCtx + ctxLabel + afterCtx;
|
|
49
60
|
const rightBody = s.busy
|
|
50
61
|
? s.task
|
|
51
62
|
? s.task
|
|
52
63
|
: "thinking"
|
|
53
64
|
: formatDuration(s.sessionSeconds);
|
|
54
|
-
// Spinner sits just before the right-side text when busy, taking one
|
|
55
|
-
// column. Padding math uses the visible length so the bar stays width-
|
|
56
|
-
// exact regardless of which spinner frame is current.
|
|
57
65
|
const right = spinner ? `${spinner} ${rightBody}` : rightBody;
|
|
58
|
-
// Pad left + right to fill terminal width
|
|
59
|
-
// spans edge-to-edge without wrapping. The rendered line is framed by a
|
|
60
|
-
// single leading + trailing space, so subtract 2 from `width` to leave
|
|
61
|
-
// room for them.
|
|
66
|
+
// Pad left + right to fill terminal width. Framed by leading + trailing space.
|
|
62
67
|
const inner = Math.max(0, width - 2);
|
|
63
68
|
const rightLen = right.length;
|
|
69
|
+
if (ctxColor) {
|
|
70
|
+
// When ctx is at warning level, render it as a colored span inside the
|
|
71
|
+
// inverse bar. We recompute clipping so the ctx portion stays visible.
|
|
72
|
+
const leftMax = Math.max(0, inner - rightLen - 1);
|
|
73
|
+
let beforeClipped = leftBeforeCtx;
|
|
74
|
+
let ctxClipped = ctxLabel;
|
|
75
|
+
let afterClipped = afterCtx;
|
|
76
|
+
if (fullLeft.length > leftMax) {
|
|
77
|
+
// Clip the left side, keeping ctx as intact as possible
|
|
78
|
+
const overflow = fullLeft.length - leftMax;
|
|
79
|
+
if (overflow >= leftBeforeCtx.length) {
|
|
80
|
+
beforeClipped = leftBeforeCtx.slice(0, Math.max(0, leftBeforeCtx.length - overflow - 1)) + "…";
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
beforeClipped = leftBeforeCtx.slice(0, Math.max(0, leftBeforeCtx.length - overflow));
|
|
84
|
+
}
|
|
85
|
+
const remaining = leftMax - beforeClipped.length;
|
|
86
|
+
if (remaining < ctxLabel.length) {
|
|
87
|
+
ctxClipped = ctxLabel.slice(0, Math.max(0, remaining - 1)) + "…";
|
|
88
|
+
}
|
|
89
|
+
if (ctxClipped.length + beforeClipped.length < leftMax && afterCtx) {
|
|
90
|
+
afterClipped = afterCtx.slice(0, leftMax - beforeClipped.length - ctxClipped.length);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const padLen = Math.max(1, inner - beforeClipped.length - ctxClipped.length - afterClipped.length - rightLen);
|
|
94
|
+
return (_jsx(Box, { children: _jsxs(Text, { inverse: true, children: [" ", beforeClipped, _jsx(Text, { color: ctxColor, children: ctxClipped }), afterClipped, " ".repeat(padLen), right, " "] }) }));
|
|
95
|
+
}
|
|
96
|
+
// No ctx warning — single-string render as before.
|
|
64
97
|
const leftMax = Math.max(0, inner - rightLen - 1);
|
|
65
|
-
const leftClipped =
|
|
98
|
+
const leftClipped = fullLeft.length > leftMax ? fullLeft.slice(0, Math.max(0, leftMax - 1)) + "…" : fullLeft;
|
|
66
99
|
const padCount = Math.max(1, inner - leftClipped.length - rightLen);
|
|
67
100
|
const line = ` ${leftClipped}${" ".repeat(padCount)}${right} `;
|
|
68
101
|
return (_jsx(Box, { children: _jsx(Text, { inverse: true, children: line }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../src/tui/StatusBar.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../src/tui/StatusBar.tsx"],"names":[],"mappings":"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"}
|
package/dist/tui.js
CHANGED
|
@@ -12,29 +12,49 @@ import * as approval from "./approval.js";
|
|
|
12
12
|
import * as replHistory from "./repl_history.js";
|
|
13
13
|
import { promises as fsp } from "node:fs";
|
|
14
14
|
import { homedir } from "node:os";
|
|
15
|
+
import { spawn } from "node:child_process";
|
|
15
16
|
import * as path from "node:path";
|
|
16
17
|
import { compactSession } from "./compact.js";
|
|
17
18
|
import { formatVersionInfo } from "./version.js";
|
|
18
19
|
import { openEditor } from "./editor.js";
|
|
19
20
|
import { checkForUpdate } from "./update.js";
|
|
20
21
|
import { dispatchSlash } from "./slash_dispatch.js";
|
|
22
|
+
import { ProjectContext } from "./context.js";
|
|
23
|
+
/** Parse a numbered task list from the agent's response. Returns empty array
|
|
24
|
+
* if no clear plan structure was found. */
|
|
25
|
+
function parsePlanTasks(text) {
|
|
26
|
+
const tasks = [];
|
|
27
|
+
for (const line of text.split("\n")) {
|
|
28
|
+
const m = line.match(/^\s*(\d+)[.)]\s+(.+)/);
|
|
29
|
+
if (m) {
|
|
30
|
+
tasks.push({ id: parseInt(m[1], 10), text: m[2].trim(), done: false });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Only accept if the tasks are sequential (1, 2, 3, ...) — guards against
|
|
34
|
+
// the agent casually writing "1. something" mid-paragraph.
|
|
35
|
+
if (tasks.length < 2)
|
|
36
|
+
return [];
|
|
37
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
38
|
+
if (tasks[i].id !== i + 1)
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
return tasks;
|
|
42
|
+
}
|
|
21
43
|
// Auto-compact threshold (token-count of estimated context). Default
|
|
22
44
|
// 50K — well below the 1M model limit, but tuned to keep per-turn input
|
|
23
45
|
// cost from creeping. Override via DSC_AUTO_COMPACT_AT; set to "0" /
|
|
24
|
-
// "off" / "false" to disable.
|
|
25
|
-
//
|
|
26
|
-
// (DSC_AUTO_COMPACT) and defaulted to 0, silently disabling
|
|
27
|
-
// auto-compact for everyone since 0.2.0.
|
|
46
|
+
// "off" / "false" to disable. Default 20K — tuned to keep per-turn
|
|
47
|
+
// input cost reasonable without losing too much context to summaries.
|
|
28
48
|
const AUTO_COMPACT_AT_TOKENS = (() => {
|
|
29
49
|
const raw = process.env.DSC_AUTO_COMPACT_AT;
|
|
30
50
|
if (!raw)
|
|
31
|
-
return
|
|
51
|
+
return 20_000;
|
|
32
52
|
if (raw === "0" || raw === "off" || raw === "false")
|
|
33
53
|
return 0;
|
|
34
54
|
const n = parseInt(raw, 10);
|
|
35
|
-
return Number.isFinite(n) && n > 0 ? n :
|
|
55
|
+
return Number.isFinite(n) && n > 0 ? n : 20_000;
|
|
36
56
|
})();
|
|
37
|
-
const AUTO_COMPACT_KEEP = Number(process.env.DSC_AUTO_COMPACT_KEEP ?? "
|
|
57
|
+
const AUTO_COMPACT_KEEP = Number(process.env.DSC_AUTO_COMPACT_KEEP ?? "8") || 8;
|
|
38
58
|
class CliError extends Error {
|
|
39
59
|
}
|
|
40
60
|
// Full arg parsing for the TUI entry — this is the only entry point now
|
|
@@ -174,6 +194,11 @@ async function main() {
|
|
|
174
194
|
const mcpDispatch = (name, args) => callMCPTool(mcpConnections, name, args, {
|
|
175
195
|
sessionApprovals: toolCtx.sessionApprovals,
|
|
176
196
|
});
|
|
197
|
+
// Project-context index: chunks AGENTS.md, README.md, etc. and
|
|
198
|
+
// injects relevant paragraphs before each agent turn. Re-indexed
|
|
199
|
+
// when the session resets (/clear, /resume).
|
|
200
|
+
const projectCtx = new ProjectContext();
|
|
201
|
+
await projectCtx.build(cwd);
|
|
177
202
|
// Coalescing save (same shape as REPL).
|
|
178
203
|
let savePromise = null;
|
|
179
204
|
let savePending = false;
|
|
@@ -398,6 +423,16 @@ async function main() {
|
|
|
398
423
|
return;
|
|
399
424
|
}
|
|
400
425
|
}
|
|
426
|
+
// Inject relevant project context from indexed files (AGENTS.md,
|
|
427
|
+
// README.md, and recently-touched files). The history shows the
|
|
428
|
+
// original user text; the model sees context-enriched.
|
|
429
|
+
const ctxSnippets = projectCtx.search(userText);
|
|
430
|
+
const enhancedText = ctxSnippets.length > 0
|
|
431
|
+
? "Relevant project context:\n\n" +
|
|
432
|
+
ctxSnippets.join("\n\n") +
|
|
433
|
+
"\n\n---\nUser: " +
|
|
434
|
+
userText
|
|
435
|
+
: userText;
|
|
401
436
|
// Push the user message into history immediately so it's visible before
|
|
402
437
|
// the model responds.
|
|
403
438
|
setState((s) => ({
|
|
@@ -407,7 +442,7 @@ async function main() {
|
|
|
407
442
|
],
|
|
408
443
|
busy: true,
|
|
409
444
|
}));
|
|
410
|
-
messages.push({ role: "user", content:
|
|
445
|
+
messages.push({ role: "user", content: enhancedText });
|
|
411
446
|
pendingAbort = new AbortController();
|
|
412
447
|
try {
|
|
413
448
|
await runAgent({
|
|
@@ -448,6 +483,10 @@ async function main() {
|
|
|
448
483
|
setState({ busy: false, task: null });
|
|
449
484
|
}
|
|
450
485
|
await persist();
|
|
486
|
+
// Index any files the agent touched this turn for future context queries.
|
|
487
|
+
for (const f of toolCtx.filesTouched) {
|
|
488
|
+
await projectCtx.addFile(cwd, f);
|
|
489
|
+
}
|
|
451
490
|
};
|
|
452
491
|
// Drain queued prompts after each turn so back-to-back submissions run in
|
|
453
492
|
// order without overlapping turns.
|
|
@@ -461,6 +500,20 @@ async function main() {
|
|
|
461
500
|
const next = promptQueue.shift();
|
|
462
501
|
syncStatus();
|
|
463
502
|
await runTurn(next);
|
|
503
|
+
// If the user requested a plan, try to parse the last assistant message
|
|
504
|
+
const pt = getState().planRequestTitle;
|
|
505
|
+
if (pt) {
|
|
506
|
+
const last = [...messages].reverse().find((m) => m.role === "assistant" && typeof m.content === "string");
|
|
507
|
+
if (last && typeof last.content === "string") {
|
|
508
|
+
const tasks = parsePlanTasks(last.content);
|
|
509
|
+
if (tasks.length > 0) {
|
|
510
|
+
setState({ plan: { title: pt, tasks }, planRequestTitle: null });
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
setState({ planRequestTitle: null });
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
464
517
|
if (AUTO_COMPACT_AT_TOKENS > 0) {
|
|
465
518
|
const ctx = estimateContextTokens(messages);
|
|
466
519
|
if (ctx > AUTO_COMPACT_AT_TOKENS) {
|
|
@@ -590,12 +643,13 @@ async function main() {
|
|
|
590
643
|
tool_call_id: m.tool_call_id,
|
|
591
644
|
});
|
|
592
645
|
}
|
|
593
|
-
setState({ history: restored, current: null, model });
|
|
646
|
+
setState({ history: restored, current: null, model, plan: null });
|
|
594
647
|
}
|
|
595
648
|
else {
|
|
596
|
-
setState({ history: [], current: null, model });
|
|
649
|
+
setState({ history: [], current: null, model, plan: null });
|
|
597
650
|
}
|
|
598
651
|
syncStatus();
|
|
652
|
+
void projectCtx.build(cwd); // re-index on session reset
|
|
599
653
|
},
|
|
600
654
|
runEditor: (initial) => {
|
|
601
655
|
// ink owns the terminal — unmount before spawning $EDITOR so the editor
|
|
@@ -612,11 +666,91 @@ async function main() {
|
|
|
612
666
|
clearInterval(timerId);
|
|
613
667
|
process.exit(0);
|
|
614
668
|
},
|
|
669
|
+
getPlan: () => getState().plan,
|
|
670
|
+
setPlan: (p) => setState({ plan: p }),
|
|
671
|
+
runBashCommand: (command) => new Promise((resolve) => {
|
|
672
|
+
const child = spawn(command, [], {
|
|
673
|
+
cwd,
|
|
674
|
+
shell: true,
|
|
675
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
676
|
+
windowsHide: true,
|
|
677
|
+
});
|
|
678
|
+
let out = "";
|
|
679
|
+
child.stdout.on("data", (d) => (out += d.toString()));
|
|
680
|
+
child.stderr.on("data", (d) => (out += d.toString()));
|
|
681
|
+
child.on("close", () => {
|
|
682
|
+
const MAX = 16_000;
|
|
683
|
+
resolve(out.length > MAX
|
|
684
|
+
? out.slice(0, MAX) + `\n…(truncated, ${out.length - MAX} more chars)`
|
|
685
|
+
: out);
|
|
686
|
+
});
|
|
687
|
+
child.on("error", (e) => resolve(`error: ${e.message}`));
|
|
688
|
+
}),
|
|
615
689
|
};
|
|
616
690
|
// Returns true if the input was a recognized slash command and got handled
|
|
617
691
|
// (or rejected) — caller should not forward it to the agent. Returns false
|
|
618
692
|
// for non-slash input and unknown commands (caller decides what to do).
|
|
619
693
|
const handleSlash = (line) => dispatchSlash(line, slashContext);
|
|
694
|
+
/** Scan `text` for `@path` (and `@path:line` / `@path:start-end`) references,
|
|
695
|
+
* read each file, and prepend their contents to the prompt. References that
|
|
696
|
+
* don't resolve to readable files are replaced with a one-line error note.
|
|
697
|
+
* Returns the original text if no `@`-references were found. */
|
|
698
|
+
const resolveAtFiles = async (text) => {
|
|
699
|
+
const re = /(?:^|\s)@(\S+)/g;
|
|
700
|
+
const refs = [];
|
|
701
|
+
for (const m of text.matchAll(re)) {
|
|
702
|
+
const raw = m[1];
|
|
703
|
+
const lm = raw.match(/^(.+?):(\d+)(?:-(\d+))?$/);
|
|
704
|
+
if (lm) {
|
|
705
|
+
refs.push({ raw, path: lm[1], start: Number(lm[2]), end: lm[3] ? Number(lm[3]) : undefined });
|
|
706
|
+
}
|
|
707
|
+
else {
|
|
708
|
+
refs.push({ raw, path: raw });
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
if (refs.length === 0)
|
|
712
|
+
return text;
|
|
713
|
+
const blocks = [];
|
|
714
|
+
for (const ref of refs) {
|
|
715
|
+
try {
|
|
716
|
+
const abs = path.resolve(cwd, ref.path);
|
|
717
|
+
const s = await fsp.stat(abs);
|
|
718
|
+
if (s.isDirectory()) {
|
|
719
|
+
blocks.push(`(skipped ${ref.path} — directory)`);
|
|
720
|
+
continue;
|
|
721
|
+
}
|
|
722
|
+
let content = await fsp.readFile(abs, "utf-8");
|
|
723
|
+
const totalLines = content.split("\n").length;
|
|
724
|
+
if (ref.start) {
|
|
725
|
+
const lines = content.split("\n");
|
|
726
|
+
if (ref.end) {
|
|
727
|
+
content = lines.slice(ref.start - 1, ref.end).join("\n");
|
|
728
|
+
}
|
|
729
|
+
else {
|
|
730
|
+
content = lines.slice(ref.start - 1).join("\n");
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
const MAX = 50_000;
|
|
734
|
+
if (content.length > MAX) {
|
|
735
|
+
content = content.slice(0, MAX) + `\n…(truncated, ${content.length - MAX} more chars)`;
|
|
736
|
+
}
|
|
737
|
+
const range = ref.start ? ` lines ${ref.start}${ref.end ? `-${ref.end}` : "+"}` : "";
|
|
738
|
+
blocks.push(`File ${ref.path} (${totalLines} lines${range}):\n${content}`);
|
|
739
|
+
}
|
|
740
|
+
catch {
|
|
741
|
+
blocks.push(`(could not read ${ref.path})`);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
if (blocks.length === 0)
|
|
745
|
+
return text;
|
|
746
|
+
// Strip @references from the original text
|
|
747
|
+
let clean = text;
|
|
748
|
+
for (const ref of refs) {
|
|
749
|
+
clean = clean.replace(new RegExp(`@${ref.raw.replace(/[.*+?^${}()|[\]\\]/g, "\\ const handleSubmit = (text: string) => {")}`, "g"), "");
|
|
750
|
+
}
|
|
751
|
+
clean = clean.trim().replace(/\s+/g, " ");
|
|
752
|
+
return blocks.join("\n\n") + "\n\n" + (clean ? `User: ${clean}` : "");
|
|
753
|
+
};
|
|
620
754
|
const handleSubmit = (text) => {
|
|
621
755
|
// Persist every submitted line — slash commands included, since
|
|
622
756
|
// recalling "/resume 3" via arrow-up is useful.
|
|
@@ -638,9 +772,11 @@ async function main() {
|
|
|
638
772
|
void handleSlash(text);
|
|
639
773
|
return;
|
|
640
774
|
}
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
775
|
+
void resolveAtFiles(text).then((resolved) => {
|
|
776
|
+
promptQueue.push(resolved);
|
|
777
|
+
syncStatus();
|
|
778
|
+
void drain();
|
|
779
|
+
});
|
|
644
780
|
};
|
|
645
781
|
const handleAbort = () => {
|
|
646
782
|
if (pendingAbort && !pendingAbort.signal.aborted) {
|
|
@@ -657,7 +793,8 @@ async function main() {
|
|
|
657
793
|
if (migratedFromOneShot) {
|
|
658
794
|
process.stderr.write(`migrated config: copied ${migratedFromOneShot} → ${configPath()}\n`);
|
|
659
795
|
}
|
|
660
|
-
|
|
796
|
+
const resolvedOneShot = await resolveAtFiles(cli.prompt);
|
|
797
|
+
messages.push({ role: "user", content: resolvedOneShot });
|
|
661
798
|
pendingAbort = new AbortController();
|
|
662
799
|
try {
|
|
663
800
|
await runAgent({
|