@corenel/term 0.3.0 → 0.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/dist/ink/App.d.ts.map +1 -1
- package/dist/ink/ContextOverlay.d.ts +2 -1
- package/dist/ink/ContextOverlay.d.ts.map +1 -1
- package/dist/ink/HelpOverlay.d.ts +9 -2
- package/dist/ink/HelpOverlay.d.ts.map +1 -1
- package/dist/ink/McpOverlay.d.ts +2 -7
- package/dist/ink/McpOverlay.d.ts.map +1 -1
- package/dist/ink/Modal.d.ts +5 -2
- package/dist/ink/Modal.d.ts.map +1 -1
- package/dist/ink/index.js +220 -88
- package/dist/ink/overlayBudget.d.ts +27 -0
- package/dist/ink/overlayBudget.d.ts.map +1 -0
- package/dist/session.d.ts +6 -3
- package/dist/session.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/ink/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ink/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ink/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAoEzC,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB;;;;iDAI6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ;;iBAEa;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;oDAOgD;IAChD,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B;;;;;oDAKgD;IAChD,KAAK,EAAE,OAAO,CAAC;IACf;uDACmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;2EAUuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,4EAA4E;AAC5E,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC,YAAY,CAgIvD"}
|
|
@@ -8,8 +8,9 @@ import { type ContextSnapshot } from '../contextText';
|
|
|
8
8
|
* so a turn that lands while this is open updates the numbers on the very
|
|
9
9
|
* next frame with no re-fetch and no re-open -- unlike the `/mcp` manager,
|
|
10
10
|
* there is nothing here that needs fetching in the first place. */
|
|
11
|
-
export declare function ContextOverlay({ snapshot }: {
|
|
11
|
+
export declare function ContextOverlay({ snapshot, rows }: {
|
|
12
12
|
snapshot: ContextSnapshot;
|
|
13
|
+
rows?: number;
|
|
13
14
|
}): React.ReactElement;
|
|
14
15
|
/** Build the overlay's data straight off live `TuiState` and the two
|
|
15
16
|
* host-supplied static facts -- exported so App.tsx can assemble it without
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextOverlay.d.ts","sourceRoot":"","sources":["../../src/ink/ContextOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ContextOverlay.d.ts","sourceRoot":"","sources":["../../src/ink/ContextOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AASrE;;;;;;mEAMmE;AACnE,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,EAAE,eAAe,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAsBnH;AAED;;yEAEyE;AACzE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAS1H"}
|
|
@@ -7,6 +7,13 @@ import React from 'react';
|
|
|
7
7
|
* Rendered FROM `TERM_COMMANDS` -- the same table `parseCommand` dispatches
|
|
8
8
|
* against, the palette filters, and `formatHelpText` renders as text --
|
|
9
9
|
* rather than from a hand-written constant, so this list cannot fall behind
|
|
10
|
-
* the commands it documents.
|
|
11
|
-
|
|
10
|
+
* the commands it documents.
|
|
11
|
+
*
|
|
12
|
+
* `rows` bounds the command list to what the terminal can actually show (see
|
|
13
|
+
* overlayBudget.ts's module doc) -- a full command table is ~18 rows on its
|
|
14
|
+
* own, comfortably taller than a lot of real terminals once the input box and
|
|
15
|
+
* status row are accounted for. */
|
|
16
|
+
export declare function HelpOverlay({ rows }: {
|
|
17
|
+
rows?: number;
|
|
18
|
+
}): React.ReactElement;
|
|
12
19
|
//# sourceMappingURL=HelpOverlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HelpOverlay.d.ts","sourceRoot":"","sources":["../../src/ink/HelpOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"HelpOverlay.d.ts","sourceRoot":"","sources":["../../src/ink/HelpOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B;;;;;;;;;;;;;mCAamC;AACnC,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAsB3E"}
|
package/dist/ink/McpOverlay.d.ts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { McpManager } from '../state';
|
|
3
|
-
|
|
4
|
-
* `TermSession`'s own `/mcp` dispatch (see mcpText.ts's module comment). It
|
|
5
|
-
* holds no server list, connection state, or login state of its own; every
|
|
6
|
-
* field it renders comes straight off `modal`, which the session owns and
|
|
7
|
-
* refreshes after a mutation, the same way the text `/mcp` commands already
|
|
8
|
-
* do. See ink/index.tsx's `useInput` for what a/x/l/esc/arrows actually run. */
|
|
9
|
-
export declare function McpOverlay({ modal }: {
|
|
3
|
+
export declare function McpOverlay({ modal, rows }: {
|
|
10
4
|
modal: McpManager;
|
|
5
|
+
rows?: number;
|
|
11
6
|
}): React.ReactElement;
|
|
12
7
|
//# sourceMappingURL=McpOverlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpOverlay.d.ts","sourceRoot":"","sources":["../../src/ink/McpOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"McpOverlay.d.ts","sourceRoot":"","sources":["../../src/ink/McpOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAwB3C,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAqFpG"}
|
package/dist/ink/Modal.d.ts
CHANGED
|
@@ -4,8 +4,11 @@ import type { PermissionAsk, UserAsk } from '../state';
|
|
|
4
4
|
* pause a turn waiting on the user. `McpManager` and `HelpView` are NOT this
|
|
5
5
|
* component's job: App.tsx routes those to their own views (McpOverlay.tsx;
|
|
6
6
|
* a help view, Task 10) before this is ever called, so this stays narrowed
|
|
7
|
-
* to the two `Modal` variants it actually knows how to draw.
|
|
8
|
-
|
|
7
|
+
* to the two `Modal` variants it actually knows how to draw. `rows` bounds
|
|
8
|
+
* both the diff preview and the options list to the terminal's actual
|
|
9
|
+
* height (see overlayBudget.ts's module doc). */
|
|
10
|
+
export declare function ModalView({ modal, rows }: {
|
|
9
11
|
modal: PermissionAsk | UserAsk;
|
|
12
|
+
rows?: number;
|
|
10
13
|
}): React.ReactElement;
|
|
11
14
|
//# sourceMappingURL=Modal.d.ts.map
|
package/dist/ink/Modal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/ink/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/ink/Modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AA2GvD;;;;;;iDAMiD;AACjD,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CA2DhH"}
|
package/dist/ink/index.js
CHANGED
|
@@ -175,47 +175,106 @@ function LiveToolRow({ tool }) {
|
|
|
175
175
|
|
|
176
176
|
// src/ink/McpOverlay.tsx
|
|
177
177
|
import { Box as Box2, Text as Text2 } from "ink";
|
|
178
|
+
|
|
179
|
+
// src/ink/overlayBudget.ts
|
|
180
|
+
var RESERVED_CHROME_ROWS = 6;
|
|
181
|
+
function overlayBoxBudget(rows) {
|
|
182
|
+
if (rows === void 0) return Number.MAX_SAFE_INTEGER;
|
|
183
|
+
return Math.max(rows - RESERVED_CHROME_ROWS, 3);
|
|
184
|
+
}
|
|
185
|
+
function capList(items, cap, overflowLabel) {
|
|
186
|
+
const rowCap = Math.max(cap, 0);
|
|
187
|
+
if (items.length <= rowCap) return { shown: items, overflow: null };
|
|
188
|
+
if (rowCap <= 0) return { shown: [], overflow: null };
|
|
189
|
+
const shown = Math.max(rowCap - 1, 0);
|
|
190
|
+
const hidden = items.length - shown;
|
|
191
|
+
return { shown: items.slice(0, shown), overflow: overflowLabel(hidden) };
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// src/ink/McpOverlay.tsx
|
|
178
195
|
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
179
196
|
function statusColor(word) {
|
|
180
197
|
if (word === "connected") return palette.good;
|
|
181
198
|
if (word === "unreachable") return palette.bad;
|
|
182
199
|
return palette.warn;
|
|
183
200
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
201
|
+
var BORDER_ROWS = 2;
|
|
202
|
+
function McpOverlay({ modal, rows }) {
|
|
203
|
+
let content = Math.max(overlayBoxBudget(rows) - BORDER_ROWS, 0);
|
|
204
|
+
const take = (n) => {
|
|
205
|
+
if (content < n) return false;
|
|
206
|
+
content -= n;
|
|
207
|
+
return true;
|
|
208
|
+
};
|
|
209
|
+
if (modal.login) {
|
|
210
|
+
const haveCore = take(1);
|
|
211
|
+
const showEsc = haveCore && modal.login.url !== null && take(1);
|
|
212
|
+
const showMessage = haveCore && modal.login.url !== null && take(1);
|
|
213
|
+
const showHeader2 = take(1);
|
|
214
|
+
const showFooter2 = take(1);
|
|
215
|
+
return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", borderStyle: "round", borderColor: palette.tool, paddingX: 1, children: [
|
|
216
|
+
showHeader2 ? /* @__PURE__ */ jsx2(Text2, { color: palette.tool, bold: true, children: "MCP servers" }) : null,
|
|
217
|
+
haveCore && modal.login.url ? /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
218
|
+
showMessage ? /* @__PURE__ */ jsxs2(Text2, { color: palette.amber, children: [
|
|
219
|
+
"signing in to ",
|
|
220
|
+
modal.login.server,
|
|
221
|
+
" -- open this URL:"
|
|
222
|
+
] }) : null,
|
|
223
|
+
/* @__PURE__ */ jsx2(Text2, { wrap: "truncate-end", children: modal.login.url }),
|
|
224
|
+
showEsc ? /* @__PURE__ */ jsx2(Text2, { color: palette.dim, children: "esc cancels" }) : null
|
|
225
|
+
] }) : haveCore ? /* @__PURE__ */ jsxs2(Text2, { color: palette.amber, wrap: "truncate-end", children: [
|
|
207
226
|
"signing in to ",
|
|
208
227
|
modal.login.server,
|
|
209
|
-
" --
|
|
210
|
-
] }),
|
|
211
|
-
/* @__PURE__ */
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
228
|
+
" -- waiting for a login URL..."
|
|
229
|
+
] }) : null,
|
|
230
|
+
showFooter2 ? /* @__PURE__ */ jsxs2(Text2, { color: palette.dim, children: [
|
|
231
|
+
glyph.active,
|
|
232
|
+
" select ",
|
|
233
|
+
glyph.sep,
|
|
234
|
+
" a add ",
|
|
235
|
+
glyph.sep,
|
|
236
|
+
" x remove ",
|
|
237
|
+
glyph.sep,
|
|
238
|
+
" l login ",
|
|
239
|
+
glyph.sep,
|
|
240
|
+
" r refresh ",
|
|
241
|
+
glyph.sep,
|
|
242
|
+
" esc close"
|
|
243
|
+
] }) : null
|
|
244
|
+
] });
|
|
245
|
+
}
|
|
246
|
+
const showHeader = take(1);
|
|
247
|
+
const emptyRows = modal.servers.length === 0 && take(1);
|
|
248
|
+
const showFooter = take(1);
|
|
249
|
+
const { shown, overflow } = capList(modal.servers, content, (n) => `\u2026 ${n} more server${n === 1 ? "" : "s"}`);
|
|
250
|
+
return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", borderStyle: "round", borderColor: palette.tool, paddingX: 1, children: [
|
|
251
|
+
showHeader ? /* @__PURE__ */ jsx2(Text2, { color: palette.tool, bold: true, children: "MCP servers" }) : null,
|
|
252
|
+
emptyRows ? /* @__PURE__ */ jsx2(Text2, { color: palette.dim, children: "none configured -- press a to add one" }) : /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", children: [
|
|
253
|
+
shown.map((s) => {
|
|
254
|
+
const i = modal.servers.indexOf(s);
|
|
255
|
+
const word = mcpStatusWord(s);
|
|
256
|
+
const isSelected = i === modal.selected;
|
|
257
|
+
return /* @__PURE__ */ jsxs2(Box2, { children: [
|
|
258
|
+
/* @__PURE__ */ jsx2(Text2, { color: palette.ember, children: isSelected ? `${glyph.active} ` : " " }),
|
|
259
|
+
/* @__PURE__ */ jsx2(Text2, { bold: isSelected, wrap: "truncate-end", children: s.name }),
|
|
260
|
+
/* @__PURE__ */ jsx2(Text2, { color: palette.dim, children: " " }),
|
|
261
|
+
/* @__PURE__ */ jsx2(Text2, { color: statusColor(word), children: word }),
|
|
262
|
+
/* @__PURE__ */ jsxs2(Text2, { color: palette.dim, wrap: "truncate-end", children: [
|
|
263
|
+
" ",
|
|
264
|
+
s.toolCount,
|
|
265
|
+
" tool",
|
|
266
|
+
s.toolCount === 1 ? "" : "s",
|
|
267
|
+
", ",
|
|
268
|
+
ageWord(s.fetchedAt, Date.now())
|
|
269
|
+
] })
|
|
270
|
+
] }, s.name);
|
|
271
|
+
}),
|
|
272
|
+
overflow ? /* @__PURE__ */ jsxs2(Text2, { color: palette.dim, children: [
|
|
273
|
+
" ",
|
|
274
|
+
overflow
|
|
275
|
+
] }) : null
|
|
276
|
+
] }),
|
|
277
|
+
showFooter ? /* @__PURE__ */ jsxs2(Text2, { color: palette.dim, children: [
|
|
219
278
|
glyph.active,
|
|
220
279
|
" select ",
|
|
221
280
|
glyph.sep,
|
|
@@ -228,43 +287,58 @@ function McpOverlay({ modal }) {
|
|
|
228
287
|
" r refresh ",
|
|
229
288
|
glyph.sep,
|
|
230
289
|
" esc close"
|
|
231
|
-
] })
|
|
290
|
+
] }) : null
|
|
232
291
|
] });
|
|
233
292
|
}
|
|
234
293
|
|
|
235
294
|
// src/ink/HelpOverlay.tsx
|
|
236
295
|
import { Box as Box3, Text as Text3 } from "ink";
|
|
237
296
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
238
|
-
|
|
297
|
+
var FIXED_CHROME_ROWS = 4;
|
|
298
|
+
function HelpOverlay({ rows }) {
|
|
239
299
|
const width = Math.max(...TERM_COMMANDS.map((c) => `${c.name} ${c.args ?? ""}`.trim().length));
|
|
300
|
+
const bodyBudget = Math.max(overlayBoxBudget(rows) - FIXED_CHROME_ROWS, 0);
|
|
301
|
+
const { shown, overflow } = capList(TERM_COMMANDS, bodyBudget, (n) => `\u2026 ${n} more command${n === 1 ? "" : "s"}`);
|
|
240
302
|
return /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", borderStyle: "round", borderColor: palette.tool, paddingX: 1, children: [
|
|
241
303
|
/* @__PURE__ */ jsx3(Text3, { color: palette.tool, bold: true, children: "Commands" }),
|
|
242
|
-
/* @__PURE__ */
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
/* @__PURE__ */ jsxs3(
|
|
246
|
-
"
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
"
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
304
|
+
/* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", children: [
|
|
305
|
+
shown.map((c) => {
|
|
306
|
+
const usage = `${c.name} ${c.args ?? ""}`.trim();
|
|
307
|
+
return /* @__PURE__ */ jsxs3(Box3, { children: [
|
|
308
|
+
/* @__PURE__ */ jsxs3(Text3, { color: palette.ember, wrap: "truncate-end", children: [
|
|
309
|
+
"/",
|
|
310
|
+
usage.padEnd(width)
|
|
311
|
+
] }),
|
|
312
|
+
/* @__PURE__ */ jsxs3(Text3, { color: palette.dim, wrap: "truncate-end", children: [
|
|
313
|
+
" ",
|
|
314
|
+
c.summary
|
|
315
|
+
] })
|
|
316
|
+
] }, c.name);
|
|
317
|
+
}),
|
|
318
|
+
overflow ? /* @__PURE__ */ jsxs3(Text3, { color: palette.dim, children: [
|
|
319
|
+
" ",
|
|
320
|
+
overflow
|
|
321
|
+
] }) : null
|
|
322
|
+
] }),
|
|
323
|
+
/* @__PURE__ */ jsx3(Text3, { color: palette.dim, children: "esc close" })
|
|
256
324
|
] });
|
|
257
325
|
}
|
|
258
326
|
|
|
259
327
|
// src/ink/ContextOverlay.tsx
|
|
260
328
|
import { Box as Box4, Text as Text4 } from "ink";
|
|
261
329
|
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
262
|
-
|
|
263
|
-
|
|
330
|
+
var FIXED_CHROME_ROWS2 = 4;
|
|
331
|
+
function ContextOverlay({ snapshot, rows }) {
|
|
332
|
+
const lines = formatContext(snapshot).split("\n");
|
|
333
|
+
const bodyBudget = Math.max(overlayBoxBudget(rows) - FIXED_CHROME_ROWS2, 0);
|
|
334
|
+
const { shown, overflow } = capList(lines, bodyBudget, (n) => `\u2026 ${n} more line${n === 1 ? "" : "s"}`);
|
|
264
335
|
return /* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", borderStyle: "round", borderColor: palette.tool, paddingX: 1, children: [
|
|
265
336
|
/* @__PURE__ */ jsx4(Text4, { color: palette.tool, bold: true, children: "Context window" }),
|
|
266
|
-
/* @__PURE__ */
|
|
267
|
-
|
|
337
|
+
/* @__PURE__ */ jsxs4(Box4, { flexDirection: "column", children: [
|
|
338
|
+
shown.map((line, i) => /* @__PURE__ */ jsx4(Text4, { wrap: "truncate-end", children: line === "" ? " " : line }, i)),
|
|
339
|
+
overflow ? /* @__PURE__ */ jsx4(Text4, { color: palette.dim, children: overflow }) : null
|
|
340
|
+
] }),
|
|
341
|
+
/* @__PURE__ */ jsx4(Text4, { color: palette.dim, children: "esc close" })
|
|
268
342
|
] });
|
|
269
343
|
}
|
|
270
344
|
function contextSnapshotFromState(state, contextWindow, toolCount) {
|
|
@@ -281,18 +355,35 @@ function contextSnapshotFromState(state, contextWindow, toolCount) {
|
|
|
281
355
|
// src/ink/Modal.tsx
|
|
282
356
|
import { Box as Box5, Text as Text5 } from "ink";
|
|
283
357
|
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
284
|
-
function
|
|
285
|
-
|
|
286
|
-
const
|
|
287
|
-
const
|
|
358
|
+
function capDiffRows(rows, max) {
|
|
359
|
+
if (rows.length <= max || max <= 0) return max <= 0 ? [] : rows;
|
|
360
|
+
const kept = rows.slice(0, Math.max(max - 1, 0));
|
|
361
|
+
const dropped = rows.slice(kept.length);
|
|
362
|
+
const hidden = dropped.reduce((n, r) => n + (r.kind === "skip" ? r.count : 1), 0);
|
|
363
|
+
return [...kept, { kind: "skip", count: hidden, reason: "context" }];
|
|
364
|
+
}
|
|
365
|
+
function DiffPreview({ diff, budget }) {
|
|
366
|
+
if (budget !== void 0 && budget <= 0) return null;
|
|
288
367
|
if (diff.noop) {
|
|
289
368
|
return /* @__PURE__ */ jsx5(Text5, { color: palette.dim, children: "(no change -- new content is identical to what's on disk)" });
|
|
290
369
|
}
|
|
370
|
+
const contentUnchanged = diff.added === 0 && diff.removed === 0;
|
|
371
|
+
let remaining = budget !== void 0 ? budget - 1 : void 0;
|
|
372
|
+
const fits = () => {
|
|
373
|
+
if (remaining === void 0) return true;
|
|
374
|
+
if (remaining < 1) return false;
|
|
375
|
+
remaining -= 1;
|
|
376
|
+
return true;
|
|
377
|
+
};
|
|
378
|
+
const endingRow = diff.endingChange && fits() && /* @__PURE__ */ jsx5(Text5, { color: palette.amber, bold: true, children: formatEndingChange(diff.endingChange, contentUnchanged) });
|
|
379
|
+
const unexplainedRow = diff.unexplainedChange && fits() && /* @__PURE__ */ jsx5(Text5, { color: palette.amber, bold: true, children: "the file changes in a way not shown above (e.g. trailing whitespace or encoding)" });
|
|
380
|
+
const newFileRow = diff.isNewFile && fits() && /* @__PURE__ */ jsx5(Text5, { color: palette.dim, children: "(new file)" });
|
|
381
|
+
const rows = remaining !== void 0 ? capDiffRows(diff.rows, remaining) : diff.rows;
|
|
291
382
|
return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
|
|
292
383
|
endingRow,
|
|
293
384
|
unexplainedRow,
|
|
294
|
-
|
|
295
|
-
|
|
385
|
+
newFileRow,
|
|
386
|
+
rows.map((r, i) => {
|
|
296
387
|
if (r.kind === "skip") {
|
|
297
388
|
const label = r.reason === "changes" ? `\u2026 ${r.count} more changed line${r.count === 1 ? "" : "s"}` : `\u2026 ${r.count} unchanged line${r.count === 1 ? "" : "s"}`;
|
|
298
389
|
return /* @__PURE__ */ jsx5(Text5, { color: palette.dim, children: label }, i);
|
|
@@ -301,6 +392,7 @@ function DiffPreview({ diff }) {
|
|
|
301
392
|
Text5,
|
|
302
393
|
{
|
|
303
394
|
color: r.kind === "add" ? palette.good : r.kind === "del" ? palette.bad : palette.dim,
|
|
395
|
+
wrap: "truncate-end",
|
|
304
396
|
children: [
|
|
305
397
|
r.kind === "add" ? "+ " : r.kind === "del" ? "- " : " ",
|
|
306
398
|
r.text
|
|
@@ -317,43 +409,64 @@ function DiffPreview({ diff }) {
|
|
|
317
409
|
] })
|
|
318
410
|
] });
|
|
319
411
|
}
|
|
320
|
-
|
|
412
|
+
var PERMISSION_BORDER_ROWS = 2;
|
|
413
|
+
var QUESTION_FIXED_ROWS = 5;
|
|
414
|
+
function ModalView({ modal, rows }) {
|
|
321
415
|
if (modal.kind === "permission") {
|
|
416
|
+
let content = Math.max(overlayBoxBudget(rows) - PERMISSION_BORDER_ROWS, 0);
|
|
417
|
+
const take = (n) => {
|
|
418
|
+
if (content < n) return false;
|
|
419
|
+
content -= n;
|
|
420
|
+
return true;
|
|
421
|
+
};
|
|
422
|
+
const showButtons = take(1);
|
|
423
|
+
const showTool = take(1);
|
|
424
|
+
const showDetail = take(1);
|
|
425
|
+
const diffBudget = modal.diff ? content : void 0;
|
|
322
426
|
return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", borderStyle: "round", borderColor: palette.warn, paddingX: 1, children: [
|
|
323
|
-
/* @__PURE__ */ jsxs5(Text5, { color: palette.warn, children: [
|
|
427
|
+
showTool ? /* @__PURE__ */ jsxs5(Text5, { color: palette.warn, children: [
|
|
324
428
|
modal.tool,
|
|
325
429
|
" wants to run"
|
|
326
|
-
] }),
|
|
327
|
-
|
|
328
|
-
modal.diff && /* @__PURE__ */ jsx5(
|
|
329
|
-
/* @__PURE__ */ jsxs5(Box5, {
|
|
430
|
+
] }) : null,
|
|
431
|
+
showDetail ? /* @__PURE__ */ jsx5(Text5, { bold: true, wrap: "truncate-end", children: modal.detail }) : null,
|
|
432
|
+
modal.diff && /* @__PURE__ */ jsx5(DiffPreview, { diff: modal.diff, budget: diffBudget }),
|
|
433
|
+
showButtons ? /* @__PURE__ */ jsxs5(Box5, { children: [
|
|
330
434
|
/* @__PURE__ */ jsx5(Text5, { color: palette.good, children: "[y]" }),
|
|
331
435
|
/* @__PURE__ */ jsx5(Text5, { color: palette.dim, children: " run it " }),
|
|
332
436
|
/* @__PURE__ */ jsx5(Text5, { color: palette.bad, children: "[n]" }),
|
|
333
437
|
/* @__PURE__ */ jsx5(Text5, { color: palette.dim, children: " deny esc denies" })
|
|
334
|
-
] })
|
|
438
|
+
] }) : null
|
|
335
439
|
] });
|
|
336
440
|
}
|
|
337
441
|
const q = modal.questions[0];
|
|
442
|
+
const options = q?.options ?? [];
|
|
443
|
+
const optionsBudget = Math.max(overlayBoxBudget(rows) - QUESTION_FIXED_ROWS, 0);
|
|
444
|
+
const { shown, overflow } = capList(options, optionsBudget, (n) => `\u2026 ${n} more option${n === 1 ? "" : "s"}`);
|
|
338
445
|
return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", borderStyle: "round", borderColor: palette.ember, paddingX: 1, children: [
|
|
339
446
|
/* @__PURE__ */ jsx5(Text5, { color: palette.dim, children: q?.header }),
|
|
340
|
-
/* @__PURE__ */ jsx5(Text5, { bold: true, children: q?.question }),
|
|
341
|
-
/* @__PURE__ */
|
|
342
|
-
|
|
343
|
-
i
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
447
|
+
/* @__PURE__ */ jsx5(Text5, { bold: true, wrap: "truncate-end", children: q?.question }),
|
|
448
|
+
/* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", children: [
|
|
449
|
+
shown.map((o) => {
|
|
450
|
+
const i = options.indexOf(o);
|
|
451
|
+
return /* @__PURE__ */ jsxs5(Box5, { children: [
|
|
452
|
+
/* @__PURE__ */ jsxs5(Text5, { color: palette.amber, children: [
|
|
453
|
+
i + 1,
|
|
454
|
+
" "
|
|
455
|
+
] }),
|
|
456
|
+
/* @__PURE__ */ jsx5(Text5, { wrap: "truncate-end", children: o.label }),
|
|
457
|
+
o.description ? /* @__PURE__ */ jsxs5(Text5, { color: palette.dim, wrap: "truncate-end", children: [
|
|
458
|
+
" ",
|
|
459
|
+
o.description
|
|
460
|
+
] }) : null
|
|
461
|
+
] }, o.label);
|
|
462
|
+
}),
|
|
463
|
+
overflow ? /* @__PURE__ */ jsx5(Text5, { color: palette.dim, children: overflow }) : null
|
|
464
|
+
] }),
|
|
465
|
+
/* @__PURE__ */ jsxs5(Text5, { color: palette.dim, children: [
|
|
353
466
|
"1-",
|
|
354
|
-
|
|
467
|
+
options.length,
|
|
355
468
|
" choose \xB7 \u21B5 confirm \xB7 or type your own answer \xB7 esc dismisses"
|
|
356
|
-
] })
|
|
469
|
+
] })
|
|
357
470
|
] });
|
|
358
471
|
}
|
|
359
472
|
|
|
@@ -504,6 +617,23 @@ function useColumns() {
|
|
|
504
617
|
}, [stdout]);
|
|
505
618
|
return columns;
|
|
506
619
|
}
|
|
620
|
+
function usableRows(rows) {
|
|
621
|
+
return rows !== void 0 && Number.isFinite(rows) && rows > 0 ? rows : void 0;
|
|
622
|
+
}
|
|
623
|
+
function useRows() {
|
|
624
|
+
const { stdout } = useStdout();
|
|
625
|
+
const [rows, setRows] = useState(usableRows(stdout?.rows));
|
|
626
|
+
useEffect(() => {
|
|
627
|
+
if (!stdout) return;
|
|
628
|
+
const onResize = () => setRows(usableRows(stdout.rows));
|
|
629
|
+
onResize();
|
|
630
|
+
stdout.on("resize", onResize);
|
|
631
|
+
return () => {
|
|
632
|
+
stdout.off("resize", onResize);
|
|
633
|
+
};
|
|
634
|
+
}, [stdout]);
|
|
635
|
+
return rows;
|
|
636
|
+
}
|
|
507
637
|
function usd(v) {
|
|
508
638
|
return v < 0.01 ? `$${v.toFixed(4)}` : `$${v.toFixed(2)}`;
|
|
509
639
|
}
|
|
@@ -513,6 +643,8 @@ function App(props) {
|
|
|
513
643
|
const paletteSelected = Math.min(props.paletteSelected, Math.max(paletteItems.length - 1, 0));
|
|
514
644
|
const busy = state.status !== "idle";
|
|
515
645
|
const columns = useColumns();
|
|
646
|
+
const rows = useRows();
|
|
647
|
+
const modalOpen = state.modal != null;
|
|
516
648
|
const statusWord = busy ? "running" : "idle";
|
|
517
649
|
const roundSeg = state.live ? ` ${glyph.sep} turn ${state.live.turn}` : ` ${glyph.sep} ${props.toolCount} tools`;
|
|
518
650
|
const turnTokens = tokens(state.turnUsage.promptTokens + state.turnUsage.completionTokens);
|
|
@@ -526,12 +658,12 @@ function App(props) {
|
|
|
526
658
|
const { right: statusRight } = fitStatus(statusLeft, { model: state.model, cwd: props.cwd, home: homedir() }, columns);
|
|
527
659
|
return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
|
|
528
660
|
/* @__PURE__ */ jsx8(Static, { items: state.committed, children: (item) => /* @__PURE__ */ jsx8(CommittedRow, { item }, item.id) }, `transcript-${state.transcriptGen}`),
|
|
529
|
-
state.live?.tools.map((t) => /* @__PURE__ */ jsx8(LiveToolRow, { tool: t }, t.callId)),
|
|
530
|
-
state.live?.streaming ? /* @__PURE__ */ jsx8(Box8, { marginTop: 1, children: /* @__PURE__ */ jsx8(Text8, { color: palette.soft, children: state.live.streaming }) }) : null,
|
|
531
|
-
/* @__PURE__ */ jsx8(TodoBlock, { todos: state.todos }),
|
|
532
|
-
state.modal ? /* @__PURE__ */ jsx8(Box8, { marginTop: 1, children: state.modal.kind === "mcp" ? /* @__PURE__ */ jsx8(McpOverlay, { modal: state.modal }) : state.modal.kind === "help" ? /* @__PURE__ */ jsx8(HelpOverlay, {}) : state.modal.kind === "context" ? /* @__PURE__ */ jsx8(ContextOverlay, { snapshot: contextSnapshotFromState(state, props.contextWindow ?? null, props.toolCount) }) : state.modal.kind === "permission" || state.modal.kind === "user" ? /* @__PURE__ */ jsx8(ModalView, { modal: state.modal }) : null }) : null,
|
|
533
|
-
paletteItems.length && !
|
|
534
|
-
state.pendingSkill ? /* @__PURE__ */ jsxs8(Box8, { marginTop: 1, children: [
|
|
661
|
+
!modalOpen && state.live?.tools.map((t) => /* @__PURE__ */ jsx8(LiveToolRow, { tool: t }, t.callId)),
|
|
662
|
+
!modalOpen && state.live?.streaming ? /* @__PURE__ */ jsx8(Box8, { marginTop: 1, children: /* @__PURE__ */ jsx8(Text8, { color: palette.soft, children: state.live.streaming }) }) : null,
|
|
663
|
+
!modalOpen ? /* @__PURE__ */ jsx8(TodoBlock, { todos: state.todos }) : null,
|
|
664
|
+
state.modal ? /* @__PURE__ */ jsx8(Box8, { marginTop: 1, children: state.modal.kind === "mcp" ? /* @__PURE__ */ jsx8(McpOverlay, { modal: state.modal, rows }) : state.modal.kind === "help" ? /* @__PURE__ */ jsx8(HelpOverlay, { rows }) : state.modal.kind === "context" ? /* @__PURE__ */ jsx8(ContextOverlay, { snapshot: contextSnapshotFromState(state, props.contextWindow ?? null, props.toolCount), rows }) : state.modal.kind === "permission" || state.modal.kind === "user" ? /* @__PURE__ */ jsx8(ModalView, { modal: state.modal, rows }) : null }) : null,
|
|
665
|
+
paletteItems.length && !modalOpen ? /* @__PURE__ */ jsx8(Box8, { marginTop: 1, children: /* @__PURE__ */ jsx8(PaletteView, { items: paletteItems, selected: paletteSelected }) }) : null,
|
|
666
|
+
state.pendingSkill && !modalOpen ? /* @__PURE__ */ jsxs8(Box8, { marginTop: 1, children: [
|
|
535
667
|
/* @__PURE__ */ jsxs8(Text8, { color: palette.ember, children: [
|
|
536
668
|
glyph.sep,
|
|
537
669
|
" skill armed: ",
|
|
@@ -557,7 +689,7 @@ function App(props) {
|
|
|
557
689
|
props.inputKey
|
|
558
690
|
)
|
|
559
691
|
] }),
|
|
560
|
-
state.committed.length === 0 ? /* @__PURE__ */ jsx8(Box8, { marginBottom: 1, children: /* @__PURE__ */ jsxs8(Text8, { color: palette.soft, children: [
|
|
692
|
+
state.committed.length === 0 && !modalOpen ? /* @__PURE__ */ jsx8(Box8, { marginBottom: 1, children: /* @__PURE__ */ jsxs8(Text8, { color: palette.soft, children: [
|
|
561
693
|
"Type a request. ",
|
|
562
694
|
/* @__PURE__ */ jsxs8(Text8, { color: palette.dim, children: [
|
|
563
695
|
"/help for commands ",
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Rows the live region spends OUTSIDE the overlay box itself, every time an
|
|
2
|
+
* overlay is open: the modal Box's own `marginTop` (1), the input box's
|
|
3
|
+
* `marginTop` (1) plus its three border/content rows (3), and the one-line
|
|
4
|
+
* status row (1) -- 6 total. Live tool rows, streaming text, TodoBlock, the
|
|
5
|
+
* palette, the pending-skill indicator, and the empty-conversation hint are
|
|
6
|
+
* all suppressed while a modal is open (App.tsx), so none of them are part
|
|
7
|
+
* of this reservation; if a future change stops suppressing one of them,
|
|
8
|
+
* this constant must grow to match or the invariant this exists to keep
|
|
9
|
+
* (packages/term/src/ink/liveRegionHeight.test.tsx) goes red. */
|
|
10
|
+
export declare const RESERVED_CHROME_ROWS = 6;
|
|
11
|
+
/** No usable row count -- see App.tsx's `usableRows`: a stream that cannot
|
|
12
|
+
* report its height (not a TTY, piped output, a render test double) gets
|
|
13
|
+
* this, meaning "don't cap" rather than a guessed height. Callers pass it
|
|
14
|
+
* straight through to `capList`, whose `Number.MAX_SAFE_INTEGER` cap is a
|
|
15
|
+
* no-op (every real list is shorter than that). */
|
|
16
|
+
export declare function overlayBoxBudget(rows: number | undefined): number;
|
|
17
|
+
export interface CappedList<T> {
|
|
18
|
+
shown: T[];
|
|
19
|
+
/** Set only when `items` didn't fit -- the caller renders this as its own
|
|
20
|
+
* line, the same way TodoBlock renders `view.overflow`. */
|
|
21
|
+
overflow: string | null;
|
|
22
|
+
}
|
|
23
|
+
/** Cap `items` to `cap` rows TOTAL, overflow line included -- the exact rule
|
|
24
|
+
* `visibleTodos` (todos.ts) already applies to the todo list, generalized to
|
|
25
|
+
* any list an overlay renders one item per row. */
|
|
26
|
+
export declare function capList<T>(items: T[], cap: number, overflowLabel: (hiddenCount: number) => string): CappedList<T>;
|
|
27
|
+
//# sourceMappingURL=overlayBudget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlayBudget.d.ts","sourceRoot":"","sources":["../../src/ink/overlayBudget.ts"],"names":[],"mappings":"AAgBA;;;;;;;;iEAQiE;AACjE,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;;mDAImD;AACnD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGjE;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX;+DAC2D;IAC3D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;mDAEmD;AACnD,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAYjH"}
|
package/dist/session.d.ts
CHANGED
|
@@ -49,9 +49,12 @@ export interface TermSessionDeps {
|
|
|
49
49
|
* guess. */
|
|
50
50
|
contextWindow?: () => number | null;
|
|
51
51
|
/** The models this host knows about, for `/model` (list only). The model is
|
|
52
|
-
* FIXED once a session begins -- `resolveContextWindow(model)`
|
|
53
|
-
* launch (packages/cli/src/cli.ts's `resolvedWindow`) and
|
|
54
|
-
*
|
|
52
|
+
* FIXED once a session begins -- `resolveContextWindow(model)` resolves it
|
|
53
|
+
* at launch (packages/cli/src/cli.ts's `resolvedWindow`), and a later
|
|
54
|
+
* hydration from the backend's own catalog may raise or lower that number
|
|
55
|
+
* in place (see the same file's `compression.contextWindow` mutation), but
|
|
56
|
+
* the MODEL itself never changes mid-session and sizes rung-2 compaction
|
|
57
|
+
* throughout; switching to a model with a SMALLER window mid-session
|
|
55
58
|
* would leave compaction sized for the larger one and the loop would meet
|
|
56
59
|
* the context wall as a fatal 400 instead of compacting in time. So `/model
|
|
57
60
|
* <id>` refuses (see `runModelCommand`) and there is no `setModel` dep --
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpJ,OAAO,EAAY,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAA0B,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG3H,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAuC,KAAK,YAAY,EAAqB,MAAM,gBAAgB,CAAC;AAG3G,OAAO,EAAoC,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;wCASwC;AACxC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB;;;;;;;;8DAQ0D;IAC1D,KAAK,CAAC,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC;IAChC;;;;;;;;;;gBAUY;IACZ,aAAa,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAMpC
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@corenel/term",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Corenel's terminal face — a headless chat controller plus its Ink views. `./session` is ink-free and shared with the CLI's readline fallback; only `./ink` pulls React. dist/ is bundled (see build.mjs), but @corenel/harness and @corenel/protocol stay EXTERNAL to that bundle — they are real runtime dependencies, declared below, so the CLI and term share exactly one harness module instance (see build.mjs for why two instances is a governance hole, not a cosmetic bug).",
|
|
6
6
|
"exports": {
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"ink-text-input": "^6.0.0",
|
|
47
47
|
"openai": "^4.77.0",
|
|
48
48
|
"react": "^18.3.1",
|
|
49
|
-
"@corenel/harness": "0.
|
|
50
|
-
"@corenel/protocol": "0.
|
|
49
|
+
"@corenel/harness": "0.9.0",
|
|
50
|
+
"@corenel/protocol": "0.8.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@types/node": "^24.13.1",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"esbuild": "^0.21.5",
|
|
56
56
|
"ink-testing-library": "^4.0.0",
|
|
57
57
|
"typescript": "^5.9.3",
|
|
58
|
-
"@corenel/tools-node": "0.
|
|
58
|
+
"@corenel/tools-node": "0.5.0"
|
|
59
59
|
},
|
|
60
60
|
"license": "Elastic-2.0",
|
|
61
61
|
"engines": {
|