zidane 5.0.6 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +37 -1
  2. package/dist/{agent-JhicgLOV.d.ts → agent-B0vrSTQ9.d.ts} +162 -4
  3. package/dist/agent-B0vrSTQ9.d.ts.map +1 -0
  4. package/dist/chat.d.ts +526 -81
  5. package/dist/chat.d.ts.map +1 -1
  6. package/dist/chat.js +2 -2
  7. package/dist/contexts/docker.d.ts +7 -0
  8. package/dist/contexts/docker.d.ts.map +1 -0
  9. package/dist/{contexts-3Arvn7yR.js → contexts/docker.js} +2 -128
  10. package/dist/contexts/docker.js.map +1 -0
  11. package/dist/contexts-BwiHIr2w.js +129 -0
  12. package/dist/contexts-BwiHIr2w.js.map +1 -0
  13. package/dist/contexts.d.ts +3 -2
  14. package/dist/contexts.js +2 -2
  15. package/dist/index-CFxhms_B.d.ts +1303 -0
  16. package/dist/index-CFxhms_B.d.ts.map +1 -0
  17. package/dist/index-DYcymRtr.d.ts +26 -0
  18. package/dist/index-DYcymRtr.d.ts.map +1 -0
  19. package/dist/{index-t_W9i7Ql.d.ts → index-X6Q9PN_A.d.ts} +3 -3
  20. package/dist/{index-t_W9i7Ql.d.ts.map → index-X6Q9PN_A.d.ts.map} +1 -1
  21. package/dist/index.d.ts +6 -5
  22. package/dist/index.js +10 -9
  23. package/dist/index.js.map +1 -1
  24. package/dist/login-BiuHyuEh.js +1276 -0
  25. package/dist/login-BiuHyuEh.js.map +1 -0
  26. package/dist/{mcp-Dw-fRPVk.js → mcp-BgwK6ySj.js} +184 -9
  27. package/dist/mcp-BgwK6ySj.js.map +1 -0
  28. package/dist/mcp.d.ts +2 -2
  29. package/dist/mcp.js +1 -1
  30. package/dist/{messages-xaYMMFlb.js → messages-BAFLvH_z.js} +1 -1
  31. package/dist/{messages-xaYMMFlb.js.map → messages-BAFLvH_z.js.map} +1 -1
  32. package/dist/{presets-BRFH2qsQ.js → presets-CI8_fyvX.js} +2 -2
  33. package/dist/{presets-BRFH2qsQ.js.map → presets-CI8_fyvX.js.map} +1 -1
  34. package/dist/presets.d.ts +2 -2
  35. package/dist/presets.js +1 -1
  36. package/dist/{providers-BCbdv99U.js → providers-C6-vhaVu.js} +2 -2
  37. package/dist/{providers-BCbdv99U.js.map → providers-C6-vhaVu.js.map} +1 -1
  38. package/dist/providers.d.ts +1 -1
  39. package/dist/providers.js +2 -2
  40. package/dist/session/sqlite.d.ts +1 -1
  41. package/dist/{session-791hhrFa.js → session-pS4Vt4dl.js} +1 -1
  42. package/dist/{session-791hhrFa.js.map → session-pS4Vt4dl.js.map} +1 -1
  43. package/dist/session.d.ts +1 -1
  44. package/dist/session.js +2 -2
  45. package/dist/skills.d.ts +2 -2
  46. package/dist/{stats-DZIsGqzu.js → stats-DvCtBRwK.js} +1 -1
  47. package/dist/{stats-DZIsGqzu.js.map → stats-DvCtBRwK.js.map} +1 -1
  48. package/dist/{theme-C3JHZ5y9.d.ts → theme-CcGLMJrn.d.ts} +732 -20
  49. package/dist/theme-CcGLMJrn.d.ts.map +1 -0
  50. package/dist/{tools-CLazLRb4.js → tools-d1yeA6xK.js} +399 -13
  51. package/dist/tools-d1yeA6xK.js.map +1 -0
  52. package/dist/tools.d.ts +2 -2
  53. package/dist/tools.js +1 -1
  54. package/dist/tui.d.ts +421 -39
  55. package/dist/tui.d.ts.map +1 -1
  56. package/dist/tui.js +5755 -2367
  57. package/dist/tui.js.map +1 -1
  58. package/dist/{turn-operations-BfEh-GER.js → turn-operations-BzOIM6Of.js} +1984 -108
  59. package/dist/turn-operations-BzOIM6Of.js.map +1 -0
  60. package/dist/types-Bx_F8jet.js.map +1 -1
  61. package/dist/{index-CXVvqTQj.d.ts → types-OtrV6LJT.d.ts} +2 -27
  62. package/dist/types-OtrV6LJT.d.ts.map +1 -0
  63. package/dist/types.d.ts +4 -3
  64. package/dist/types.js +1 -1
  65. package/package.json +5 -1
  66. package/dist/agent-JhicgLOV.d.ts.map +0 -1
  67. package/dist/contexts-3Arvn7yR.js.map +0 -1
  68. package/dist/index-2yLUyTbc.d.ts +0 -430
  69. package/dist/index-2yLUyTbc.d.ts.map +0 -1
  70. package/dist/index-CXVvqTQj.d.ts.map +0 -1
  71. package/dist/mcp-Dw-fRPVk.js.map +0 -1
  72. package/dist/theme-C3JHZ5y9.d.ts.map +0 -1
  73. package/dist/tools-CLazLRb4.js.map +0 -1
  74. package/dist/turn-operations-BfEh-GER.js.map +0 -1
package/dist/tools.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { _ as ToolContext, v as ToolDef, y as ToolMap } from "./agent-JhicgLOV.js";
2
- import { A as listFiles, C as SkillsRunScriptToolOptions, D as shell, E as createSkillsReadTool, F as edit, M as createInteractionTool, N as grep, O as readFile, P as glob, S as createSkillsUseTool, T as SkillsReadToolOptions, _ as ChildAgent, b as createSpawnTool, d as writeFile, f as ValidationResult, g as createToolSearchTool, h as ToolSearchToolOptions, j as InteractionToolOptions, k as multiEdit, m as LazyToolEntry, p as validateToolArgs, v as SpawnToolOptions, w as createSkillsRunScriptTool, x as SkillsUseToolOptions, y as SpawnToolState } from "./index-2yLUyTbc.js";
1
+ import { b as ToolMap, v as ToolContext, y as ToolDef } from "./agent-B0vrSTQ9.js";
2
+ import { A as listFiles, C as SkillsRunScriptToolOptions, D as shell, E as createSkillsReadTool, F as edit, M as createInteractionTool, N as grep, O as readFile, P as glob, S as createSkillsUseTool, T as SkillsReadToolOptions, _ as ChildAgent, b as createSpawnTool, d as writeFile, f as ValidationResult, g as createToolSearchTool, h as ToolSearchToolOptions, j as InteractionToolOptions, k as multiEdit, m as LazyToolEntry, p as validateToolArgs, v as SpawnToolOptions, w as createSkillsRunScriptTool, x as SkillsUseToolOptions, y as SpawnToolState } from "./index-CFxhms_B.js";
3
3
  export { ChildAgent, InteractionToolOptions, LazyToolEntry, SkillsReadToolOptions, SkillsRunScriptToolOptions, SkillsUseToolOptions, SpawnToolOptions, SpawnToolState, ToolContext, ToolDef, ToolMap, ToolSearchToolOptions, ValidationResult, createInteractionTool, createSkillsReadTool, createSkillsRunScriptTool, createSkillsUseTool, createSpawnTool, createToolSearchTool, edit, glob, grep, listFiles, multiEdit, readFile, shell, validateToolArgs, writeFile };
package/dist/tools.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as multiEdit, c as grep, f as createToolSearchTool, g as validateToolArgs, h as createSkillsReadTool, i as readFile, l as glob, m as createSkillsRunScriptTool, n as createSpawnTool, o as listFiles, p as createSkillsUseTool, r as shell, s as createInteractionTool, t as writeFile, u as edit } from "./tools-CLazLRb4.js";
1
+ import { a as multiEdit, c as grep, f as createToolSearchTool, g as validateToolArgs, h as createSkillsReadTool, i as readFile, l as glob, m as createSkillsRunScriptTool, n as createSpawnTool, o as listFiles, p as createSkillsUseTool, r as shell, s as createInteractionTool, t as writeFile, u as edit } from "./tools-d1yeA6xK.js";
2
2
  export { createInteractionTool, createSkillsReadTool, createSkillsRunScriptTool, createSkillsUseTool, createSpawnTool, createToolSearchTool, edit, glob, grep, listFiles, multiEdit, readFile, shell, validateToolArgs, writeFile };
package/dist/tui.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { b as SkillConfig } from "./agent-JhicgLOV.js";
2
- import { $ as Settings, C as DiscoveredMcp, N as ResolvedConfig, O as EnabledAllowlistKey, Q as SessionMeta, S as splitPromptSegments, _t as ModelInfo, at as CompletionReference, b as PromptSegment, c as ThemeColors, et as StreamEvent, it as CompletionProvider, j as ChatOptions, jt as AgentRegistry, kt as AgentAccent, m as ApprovalRequest, mt as ProviderKey, ot as CompletionState, p as ApprovalDecision, pt as ProviderAuth, s as Theme, x as PromptSegmentRef } from "./theme-C3JHZ5y9.js";
1
+ import { O as SessionData, Ot as SessionTurn, jt as ThinkingLevel, x as SkillConfig } from "./agent-B0vrSTQ9.js";
2
+ import { A as DiscoveryError, B as InteractionRequest, Bt as StreamEvent, D as PromptSegmentRef, E as PromptSegment, Kt as KeyBindings, Nn as AgentRegistry, O as splitPromptSegments, Rt as SessionMeta, V as InteractionResponse, _n as ModelInfo, an as CompletionReference, b as ApprovalRequest, c as ThemeColors, gt as ChatOptions, in as CompletionProvider, jn as AgentAccent, k as DiscoveredMcp, m as SessionExportFormat, mn as ProviderKey, on as CompletionState, pn as ProviderAuth, pt as EnabledAllowlistKey, s as Theme, vt as ResolvedConfig, y as ApprovalDecision, zt as Settings } from "./theme-CcGLMJrn.js";
3
3
  import * as _$react from "react";
4
4
  import { ReactNode } from "react";
5
5
  import { SyntaxStyle } from "@opentui/core";
@@ -147,6 +147,91 @@ declare function Footer({
147
147
  * `<text>` regardless of where the parent grabbed its palette.
148
148
  */
149
149
  declare function renderHintSpans(hints: readonly Hint[], COLOR: ThemeColors): ReactNode;
150
+ /**
151
+ * One run of styled text in a {@link TitleOverlay} meta segment array.
152
+ * `color` defaults to `COLOR.dim` (the standard secondary tone for
153
+ * meta info); supply an explicit color to accent a value — typical use
154
+ * is a `warn` tint on a primary stat (turn count, session count) while
155
+ * surrounding separators stay `mute`.
156
+ */
157
+ interface MetaSegment {
158
+ text: string;
159
+ /** Foreground color. Defaults to `COLOR.dim`. */
160
+ color?: string;
161
+ }
162
+ /**
163
+ * Colored title for a full-screen bordered surface. The `title` slot
164
+ * rides `titleColor` (defaults to `COLOR.brand` — the theme's primary
165
+ * anchor) on the LEFT of the top border; the optional `meta` slot
166
+ * rides on the RIGHT.
167
+ *
168
+ * `meta` accepts either:
169
+ * - a plain `string` → rendered entirely in `COLOR.dim` (the simple
170
+ * "single dim label" case, e.g. `"5 sessions"`).
171
+ * - a {@link MetaSegment} array → rendered concatenated with each
172
+ * segment's own color (lets a stat like turn count stand out from
173
+ * the surrounding separators).
174
+ *
175
+ * Responsive behavior (driven by `useTerminalDimensions`):
176
+ * - Both fit → render both with a 2-cell visual gap between them.
177
+ * - Meta doesn't fit → drop meta; title takes the full budget.
178
+ * - Title doesn't fit → truncate with a trailing `…`.
179
+ * - Terminal is degenerately narrow → render nothing.
180
+ *
181
+ * The width math assumes the immediate parent fills the screen's
182
+ * content area (the standard `flexGrow: 1` flex column). Hosts running
183
+ * the bordered box inside a narrower container should pass `parentWidth`
184
+ * to override the terminal-width assumption.
185
+ *
186
+ * @example
187
+ * ```tsx
188
+ * <box style={{ flexDirection: 'column', flexGrow: 1 }}>
189
+ * <box style={{ border: true, flexGrow: 1 }}>...</box>
190
+ * <TitleOverlay
191
+ * title="my session"
192
+ * meta={[
193
+ * { text: '#abcd' },
194
+ * { text: ' · ', color: COLOR.mute },
195
+ * { text: '5 turns', color: COLOR.warn },
196
+ * ]}
197
+ * />
198
+ * </box>
199
+ * ```
200
+ */
201
+ declare function TitleOverlay({
202
+ title,
203
+ meta,
204
+ titleColor,
205
+ parentWidth,
206
+ statusIcon
207
+ }: {
208
+ title: string; /** Optional right-aligned secondary segment. Dropped first when space runs out. */
209
+ meta?: string | readonly MetaSegment[] | null; /** Defaults to `COLOR.brand`. */
210
+ titleColor?: string;
211
+ /**
212
+ * Override for the parent container's width in columns. Defaults to
213
+ * `terminalWidth - 2` to match the standard screen layout that has
214
+ * 1-cell padding on each side.
215
+ */
216
+ parentWidth?: number;
217
+ /**
218
+ * Optional single-cell glyph rendered immediately AFTER the title
219
+ * text. Used by the chat screen to surface a streaming / compacting
220
+ * indicator next to the session name — keeps the affordance close to
221
+ * what it qualifies (the conversation) without claiming a full row
222
+ * above the prompt input.
223
+ *
224
+ * Sized as one cell + one leading space when present, so the title
225
+ * budget reserves two extra columns. Pass a {@link StatusSpinner}
226
+ * or any other 1-cell `<span>`; `null` (the default) takes no space.
227
+ *
228
+ * Render order is `title <space> icon`. The leading title slot reads
229
+ * naturally — eye lands on the name first, then catches the activity
230
+ * indicator — and avoids the visual jitter that came with the icon
231
+ * pulsing on the leftmost position.
232
+ */
233
+ statusIcon?: ReactNode;
234
+ }): ReactNode;
150
235
  /**
151
236
  * Plain-text width estimate for a list of {@link Hint}s rendered via
152
237
  * `renderHintSpans` — `<key> <label> · <key> <label> · …`. Exported so
@@ -158,7 +243,18 @@ declare function hintsLength(hints: readonly Hint[]): number;
158
243
  declare function Spinner({
159
244
  label
160
245
  }: {
161
- label: string;
246
+ label?: string;
247
+ }): ReactNode;
248
+ /**
249
+ * Glyph-only spinner painted in a caller-chosen color. Used as the
250
+ * status icon prefixed to the chat screen's session title — a single
251
+ * cell wide so it slots in front of the title text without disturbing
252
+ * the existing `TITLE_OVERLAY_WRAP` budget math.
253
+ */
254
+ declare function StatusSpinner({
255
+ color
256
+ }: {
257
+ color: string;
162
258
  }): ReactNode;
163
259
  declare function Transcript({
164
260
  events,
@@ -174,19 +270,6 @@ declare function Transcript({
174
270
  */
175
271
  selectedTurnId?: string | null;
176
272
  }): ReactNode;
177
- /**
178
- * Per-event visibility — filters honor user toggles and the
179
- * `hideSubagentOutput` setting. When subagent output is hidden:
180
- * - Child-agent events are filtered down to the `spawn-start` /
181
- * `spawn-end` markers so the user still sees "🌱 working… 🌳 done".
182
- * - The parent's `tool-result` for `spawn` is hidden too. Its body
183
- * duplicates `spawn-end`'s stats line *and* the parent's next markdown
184
- * turn ("Here's what the sub-agent found: …"). Showing it again
185
- * produced an extra `┃ [sub-agent child-1] Completed …` block that
186
- * the user just wanted gone.
187
- *
188
- * Exported so the visibility matrix can be unit-tested without rendering.
189
- */
190
273
  declare function isVisible(event: StreamEvent, settings: Settings): boolean;
191
274
  /**
192
275
  * Resolve the top margin for an event given the one rendered just before it.
@@ -208,21 +291,86 @@ declare function isVisible(event: StreamEvent, settings: Settings): boolean;
208
291
  */
209
292
  declare function marginTopFor(event: StreamEvent, previous: StreamEvent | undefined): number;
210
293
  //#endregion
294
+ //#region src/tui/effort-picker.d.ts
295
+ declare function EffortPickerModal({
296
+ current,
297
+ supportsAdaptive,
298
+ onPick
299
+ }: {
300
+ current: ThinkingLevel | undefined;
301
+ supportsAdaptive: boolean;
302
+ onPick: (effort: ThinkingLevel) => void;
303
+ }): _$react.ReactNode;
304
+ //#endregion
305
+ //#region src/tui/interaction-block.d.ts
306
+ /**
307
+ * InteractionBlock — picker UI for `present_plan` and `ask_user` tool calls.
308
+ *
309
+ * Sits in the chat screen's prompt slot whenever the head of the
310
+ * interactions queue is non-empty (live or resumed — the App layer
311
+ * doesn't differentiate at this layer). Two surfaces driven off the
312
+ * request's discriminator:
313
+ *
314
+ * - `plan` → renders the title + markdown body + (optional) step list,
315
+ * then a 3-option decision picker. Reject and revise can flow into a
316
+ * comment textarea for free-text feedback before final submit.
317
+ *
318
+ * - `question` → renders the question text, then a choice picker
319
+ * (when the model provided choices) or a free-text answer textarea
320
+ * (otherwise).
321
+ *
322
+ * Esc aborts the entire run via the parent keyboard handler; per-call
323
+ * accept/deny only happens through the picker below — same convention
324
+ * as `ApprovalBlock`.
325
+ */
326
+ declare function InteractionBlock({
327
+ request,
328
+ onResolve
329
+ }: {
330
+ request: InteractionRequest; /** Submit the user's response to the head of the queue. */
331
+ onResolve: (response: InteractionResponse) => void;
332
+ }): ReactNode;
333
+ //#endregion
211
334
  //#region src/tui/mcps-settings.d.ts
212
335
  /**
213
- * List + toggle modal for MCP servers discovered from `.{prefix}/mcps.json`
214
- * / `.agents/mcps.json` (project + user). State machine lives in
215
- * `<ToggleListModal>` (shared with the Skills picker); this file supplies
216
- * the transport/command detail column and the empty-state copy.
217
- *
218
- * Toggling does NOT restart the active agent — the change applies on the
219
- * next session activation (the app rebuilds the agent there), keeping
220
- * current runs stable.
336
+ * MCP server picker. Shows discovered entries with three columns:
337
+ *
338
+ * [enabled?] <name> <transport · detail> <auth status>
339
+ *
340
+ * Keybindings:
341
+ *
342
+ * / / k / j navigate
343
+ * enter / space toggle enabled/disabled
344
+ * l login (needs-auth or error rows; opens browser)
345
+ * o logout (authed rows; wipes stored tokens)
346
+ * esc close — also cancels an in-flight `authorizing` row
347
+ *
348
+ * Status badge legend:
349
+ *
350
+ * ✓ authed tokens stored + bootstrap connected
351
+ * ⚠ needs login bootstrap needs OAuth, no tokens
352
+ * … authorizing interactive login in flight
353
+ * ✗ <error> login attempt failed
354
+ *
355
+ * The state behind the badges is read via `useMcpAuthState()` so updates
356
+ * propagate live while the modal is open — a `mcp:auth:url` arriving from
357
+ * an in-flight login flips the row to `authorizing` without re-opening.
358
+ *
359
+ * Errors (`DiscoveryError[]`) surface in a warn-colored preamble so a
360
+ * broken `mcps.json` is loud rather than invisible.
221
361
  */
222
362
  declare function McpsSettingsModal({
223
- catalog
363
+ catalog,
364
+ errors,
365
+ onLogin,
366
+ onLogout,
367
+ onCancelLogin
224
368
  }: {
225
369
  catalog: readonly DiscoveredMcp[];
370
+ errors?: readonly DiscoveryError[];
371
+ onLogin: (name: string) => Promise<void> | void;
372
+ onLogout: (name: string) => void;
373
+ onCancelLogin: (name: string) => void;
226
374
  }): _$react.ReactNode;
227
375
  //#endregion
228
376
  //#region src/tui/modal.d.ts
@@ -381,11 +529,18 @@ declare function SessionsScreen({
381
529
  declare function ChatScreen({
382
530
  events,
383
531
  busy,
532
+ compacting,
533
+ queuedMessages,
534
+ queueSelectionIndex,
535
+ queueShortcuts,
536
+ onEnterQueueFromEmptyPrompt,
384
537
  settings,
385
538
  onSubmit,
386
539
  session,
387
540
  pending,
388
541
  onApproval,
542
+ pendingInteraction,
543
+ onInteraction,
389
544
  completionProviders,
390
545
  onPopupOpenChange,
391
546
  selectedTurnId,
@@ -393,6 +548,42 @@ declare function ChatScreen({
393
548
  }: {
394
549
  events: StreamEvent[];
395
550
  busy: boolean;
551
+ /**
552
+ * `true` while a background auto-compaction is in flight. Drives the
553
+ * same title-overlay spinner as {@link busy} but in a different color
554
+ * — the conversation is "active" without anything streaming visibly.
555
+ */
556
+ compacting?: boolean;
557
+ /**
558
+ * User prompts submitted while a run was already in flight. Rendered
559
+ * stacked in a small box above the prompt input until the active
560
+ * `agent.run()` finishes; each entry is then popped (FIFO) and pushed
561
+ * into the transcript as a user message. Empty by default.
562
+ */
563
+ queuedMessages?: readonly QueuedPreview[];
564
+ /**
565
+ * Highlighted index inside {@link queuedMessages}, or `null` when the
566
+ * prompt textarea has focus. When non-null, the textarea blurs (same
567
+ * pattern as `selectMode`) so up / down / push / drop keys reach the
568
+ * App's keyboard handler instead of being eaten by the input.
569
+ */
570
+ queueSelectionIndex?: number | null;
571
+ /**
572
+ * Resolved keybinding specs (`"ctrl+return"`, `"backspace"` — and
573
+ * whatever the user has configured) threaded into the queue UI so
574
+ * the title hint + per-row action hints track `keybindings.json`
575
+ * overrides. Required when the queue is wired — the binding strings
576
+ * are only ever read here.
577
+ */
578
+ queueShortcuts?: QueueShortcuts;
579
+ /**
580
+ * Called from `PromptBlock` when the user presses `↑` on an empty
581
+ * prompt. Returning `true` parks focus on the last queued message
582
+ * (the one closest to the prompt) and tells the caller to suppress
583
+ * the default history-cycle behavior; `false` means "no queue, do
584
+ * your normal thing" and history-cycling proceeds.
585
+ */
586
+ onEnterQueueFromEmptyPrompt?: () => boolean;
396
587
  settings: Settings;
397
588
  /**
398
589
  * Submit handler — receives the raw prompt text and the parsed references
@@ -403,6 +594,15 @@ declare function ChatScreen({
403
594
  session: SessionMeta | null; /** Head of the safe-mode approval queue, or `null` when nothing is pending. */
404
595
  pending: ApprovalRequest | null; /** Resolve the active prompt with the user's pick. */
405
596
  onApproval: (decision: ApprovalDecision) => void;
597
+ /**
598
+ * Head of the interactions queue (plan approval / Q&A). When set, the
599
+ * prompt slot renders {@link InteractionBlock} instead of the textarea
600
+ * so the user resolves the request before continuing typing. Works the
601
+ * same for live tool calls and resumed-session pending interactions —
602
+ * the App layer only swaps the resolver behind {@link onInteraction}.
603
+ */
604
+ pendingInteraction: InteractionRequest | null; /** Submit the user's response to the head of the interactions queue. */
605
+ onInteraction: (response: InteractionResponse) => void;
406
606
  /**
407
607
  * Optional autocomplete providers. When passed, `PromptBlock` shows a
408
608
  * popup above the textarea and intercepts navigation keys while it's
@@ -432,30 +632,182 @@ declare function ChatScreen({
432
632
  */
433
633
  promptTriggerHints?: readonly Hint[];
434
634
  }): ReactNode;
635
+ /**
636
+ * One entry in the queued-messages preview list shown above the prompt
637
+ * input. Only the displayable text + the user-provided ref spans are
638
+ * surfaced — the `references` carry-through happens entirely in the
639
+ * App layer (see `messageQueueRef`); this view doesn't need to know
640
+ * about them.
641
+ */
642
+ interface QueuedPreview {
643
+ /** Raw prompt text the user typed (no `❯` prefix). */
644
+ text: string;
645
+ /**
646
+ * Optional chip spans from the original prompt (`@files`, `/skills`)
647
+ * — passed through so the queued entry highlights skill / file names
648
+ * the same way the echoed user-prompt event does once it lands in
649
+ * the transcript.
650
+ */
651
+ refs?: readonly {
652
+ start: number;
653
+ end: number;
654
+ providerId: string;
655
+ }[];
656
+ }
657
+ /**
658
+ * Resolved keybinding specs the queue UI surfaces to the user. Each
659
+ * field is the literal string from `keybindings.json` ("ctrl+return",
660
+ * "backspace" — or whatever the user has configured) formatted for
661
+ * display via {@link formatBindingForDisplay} at render time so any
662
+ * customization (e.g. `"cmd+up"`, `"delete"`) shows the actual key.
663
+ */
664
+ interface QueueShortcuts {
665
+ enter: string;
666
+ push: string;
667
+ drop: string;
668
+ }
435
669
  //#endregion
436
- //#region src/tui/settings-modal.d.ts
437
- interface SettingsActions {
670
+ //#region src/tui/session-details-modal.d.ts
671
+ /** Result handed back by the host's export handler — drives the success footer. */
672
+ interface SessionExportResult {
673
+ /** Absolute path of the written file. */
674
+ filepath: string;
675
+ /** Format that was written — used to label the success banner. */
676
+ format: SessionExportFormat;
677
+ }
678
+ interface SessionDetailsModalActions {
679
+ /** Delete the entire session from the store. Parent handles teardown / navigation. */
680
+ onDelete: (sessionId: string) => void | Promise<void>;
438
681
  /**
439
- * Re-open the auth screen so the user can switch providers or run the
440
- * wizard for a new/existing one. Wiring this callback adds a
441
- * "Re-configure providers" row to the modal.
682
+ * Generate a title for the session via the active provider/model.
683
+ * Resolves to the new title (already persisted by the parent); reject
684
+ * with an Error to surface a failure message in the modal footer.
685
+ *
686
+ * Omit when title generation isn't wired (no provider picked yet, or
687
+ * the host opted out) — the modal hides the `g` shortcut.
688
+ *
689
+ * `signal` is provided so a parent unmount (modal closed, session
690
+ * switched) can abort the in-flight provider stream. Implementations
691
+ * should forward it to whatever transport they use; an aborted
692
+ * generation should reject (e.g. with the signal's reason).
442
693
  */
443
- onReauth?: () => void;
694
+ onGenerateTitle?: (sessionId: string, signal: AbortSignal) => Promise<string>;
695
+ /**
696
+ * Export the session to disk in the requested format. The host
697
+ * decides where the file lands (typically `.{prefix}/sessions/`) and
698
+ * returns the absolute path so the modal can show a confirmation
699
+ * footer. Reject with an Error to surface a failure message.
700
+ *
701
+ * Omit when export isn't wired — the modal hides the `e` / `j`
702
+ * shortcuts.
703
+ */
704
+ onExport?: (sessionId: string, format: SessionExportFormat) => Promise<SessionExportResult>;
705
+ /**
706
+ * Compact older turns via an LLM-generated summary. The host calls
707
+ * `compactConversation` and appends the synthetic `compact-summary`
708
+ * marker turn so older turns stop reaching the provider. The model
709
+ * sees everything from the marker forward verbatim; the user can
710
+ * still scroll back to see the original turns.
711
+ *
712
+ * Resolves to a result envelope used by the modal to flash the
713
+ * "compacted N turns" success banner. Reject with an Error to
714
+ * surface a failure message.
715
+ *
716
+ * `signal` is provided so a parent unmount (modal closed, session
717
+ * switched) can abort the in-flight summary call.
718
+ *
719
+ * Omit when compaction isn't wired (no provider picked yet, or the
720
+ * host opted out) — the modal hides the `k` shortcut.
721
+ */
722
+ onCompact?: (sessionId: string, signal: AbortSignal) => Promise<SessionCompactResult>;
723
+ }
724
+ /** What `onCompact` returns. Drives the modal's success banner. */
725
+ interface SessionCompactResult {
726
+ /** Number of turns absorbed into the summary. */
727
+ replacedCount: number;
728
+ /**
729
+ * Number of turns the PTL-retry path had to drop without summarizing.
730
+ * Zero on first-try success. When non-zero, the modal warns the user
731
+ * that some context was lost — those turns stay in the conversation
732
+ * history but the new summary doesn't describe them.
733
+ */
734
+ droppedCount: number;
444
735
  /**
445
- * Open the Skills list + toggle modal. Adds a "Skills" row when wired.
736
+ * Number of files re-injected as synthetic `read_file` results after
737
+ * the compaction marker. Zero when the session had no active reads or
738
+ * the host opted out of restoration.
446
739
  */
447
- onOpenSkills?: () => void;
740
+ restoredFiles: number;
448
741
  /**
449
- * Open the MCP servers list + toggle modal. Adds an "MCP servers" row
450
- * when wired.
742
+ * Number of skills re-injected as synthetic `skills_use` results
743
+ * after the compaction marker.
451
744
  */
452
- onOpenMcps?: () => void;
745
+ restoredSkills: number;
746
+ /** Model used for the summary call. */
747
+ model: string;
748
+ /** Total input tokens billed (including cache reads + creations). */
749
+ inputTokens: number;
750
+ /** Output tokens of the summary itself. */
751
+ outputTokens: number;
752
+ /**
753
+ * Estimated wire-level context size the NEXT turn will start from.
754
+ * Sum of the summary's tokens plus the restoration content's
755
+ * byte-based estimate — captures what the model will actually see on
756
+ * its next call, modulo the system prompt and any preserved tail
757
+ * turns whose precise token count we don't know without re-asking
758
+ * the provider.
759
+ *
760
+ * Drives both the post-compact success banner ("→ N effective") and
761
+ * the chat footer's `ctx` indicator — `onCompactSession` writes this
762
+ * value into `lastInputTokens` so the user sees the drop immediately
763
+ * instead of waiting for the next real turn's `usage` update.
764
+ */
765
+ effectiveTokens: number;
766
+ }
767
+ declare function SessionDetailsModal({
768
+ session,
769
+ title,
770
+ isCurrent,
771
+ actions,
772
+ keybindings
773
+ }: {
774
+ session: SessionData;
775
+ /**
776
+ * Display title for the session. Falls back to the first user turn's
777
+ * preview when omitted — the parent usually has a cached `SessionMeta`
778
+ * title and threads it through so the modal header matches what the
779
+ * sessions list / chat title bar are showing.
780
+ */
781
+ title?: string; /** True when this is the actively-mounted session — gates the "active" tag in the header. */
782
+ isCurrent: boolean;
783
+ actions: SessionDetailsModalActions; /** Effective keybindings — the modal-internal letter actions resolve through this. */
784
+ keybindings: KeyBindings;
785
+ }): _$react.ReactNode;
786
+ //#endregion
787
+ //#region src/tui/settings-modal.d.ts
788
+ interface SettingsActions {
789
+ /** Re-open the auth screen so the user can switch providers. */
790
+ onReauth?: () => void;
791
+ /** Open `~/.zidane/keybindings.json` in `$EDITOR`. */
792
+ onOpenKeybindings?: () => void;
793
+ /** Start an MCP OAuth flow. Resolves once tokens land or the flow aborts. */
794
+ onLoginMcp?: (name: string) => Promise<void> | void;
795
+ /** Wipe stored MCP tokens. */
796
+ onLogoutMcp?: (name: string) => void;
797
+ /** Abort an in-flight MCP OAuth flow. */
798
+ onCancelLoginMcp?: (name: string) => void;
453
799
  }
454
800
  declare function SettingsModal({
801
+ skillsCatalog,
802
+ mcpsCatalog,
803
+ mcpsErrors,
455
804
  actions
456
805
  }?: {
806
+ /** Discovered skills — drives the Skills tab + persists through `enabledSkills`. */skillsCatalog?: readonly SkillConfig[]; /** Discovered MCP servers — drives the MCPs tab + persists through `enabledMcps`. */
807
+ mcpsCatalog?: readonly DiscoveredMcp[]; /** Non-fatal `mcps.json` parse errors — surface in a preamble on the MCP tab. */
808
+ mcpsErrors?: readonly DiscoveryError[];
457
809
  actions?: SettingsActions;
458
- }): _$react.ReactNode;
810
+ }): ReactNode;
459
811
  //#endregion
460
812
  //#region src/tui/skills-settings.d.ts
461
813
  /**
@@ -512,7 +864,8 @@ declare function ToggleListModal<T>({
512
864
  settingKey,
513
865
  title,
514
866
  renderDetail,
515
- emptyState
867
+ emptyState,
868
+ preamble
516
869
  }: {
517
870
  catalog: readonly T[];
518
871
  keyOf: (entry: T) => string;
@@ -520,8 +873,37 @@ declare function ToggleListModal<T>({
520
873
  title: string; /** Mute-colored trailing copy for each row (description, transport, …). */
521
874
  renderDetail?: (entry: T) => ReactNode; /** What to render when `catalog` is empty (hint about where to drop config). */
522
875
  emptyState: ReactNode;
876
+ /**
877
+ * Optional content rendered ABOVE the list (or the empty state). Used to
878
+ * surface non-fatal warnings — e.g. discovered files that failed to parse,
879
+ * so the user can fix them without quitting the TUI. Distinct from
880
+ * `emptyState`, which only renders when there's nothing to show; this
881
+ * renders even when the catalog has entries.
882
+ */
883
+ preamble?: ReactNode;
523
884
  }): ReactNode;
524
885
  //#endregion
886
+ //#region src/tui/turn-details-modal.d.ts
887
+ interface TurnDetailsModalActions {
888
+ /** Fork the session at this turn — new session keeps history up to here. */
889
+ onFork: (turnId: string) => void;
890
+ /** Delete this turn (with cleanup of orphan tool blocks in neighbors). */
891
+ onDelete: (turnId: string) => void;
892
+ }
893
+ declare function TurnDetailsModal({
894
+ turn,
895
+ index,
896
+ total,
897
+ actions,
898
+ keybindings
899
+ }: {
900
+ turn: SessionTurn; /** 1-based position of this turn in the session, for the header. */
901
+ index: number; /** Total turn count, for the `n / N` header. */
902
+ total: number;
903
+ actions: TurnDetailsModalActions; /** Effective keybindings — the modal-internal letter actions resolve through this. */
904
+ keybindings: KeyBindings;
905
+ }): _$react.ReactNode;
906
+ //#endregion
525
907
  //#region src/tui/index.d.ts
526
908
  /**
527
909
  * Boot a full chat TUI with sensible defaults. **Does not return** under
@@ -565,5 +947,5 @@ declare function ToggleListModal<T>({
565
947
  */
566
948
  declare function runTui(options?: Partial<ChatOptions>): Promise<never>;
567
949
  //#endregion
568
- export { AgentPickerModal, App, AuthScreen, ChatScreen, CompletionPopup, type ContextUsage, Footer, type Hint, McpsSettingsModal, Modal, type ModalProps, ModalRoot, ModelPickerModal, type PickedModel, type PromptSegment, type PromptSegmentRef, SessionsScreen, type SettingsActions, SettingsModal, SkillsSettingsModal, Spinner, ToggleListModal, Transcript, accentColor, buildMdStyle, hintsLength, isVisible, marginTopFor, onInputSubmit, renderHintSpans, runTui, splitPromptSegments, useMdStyle, useModal, useModalAwareFocus };
950
+ export { AgentPickerModal, App, AuthScreen, ChatScreen, CompletionPopup, type ContextUsage, EffortPickerModal, Footer, type Hint, InteractionBlock, McpsSettingsModal, type MetaSegment, Modal, type ModalProps, ModalRoot, ModelPickerModal, type PickedModel, type PromptSegment, type PromptSegmentRef, type QueueShortcuts, type QueuedPreview, type SessionCompactResult, SessionDetailsModal, type SessionDetailsModalActions, type SessionExportResult, SessionsScreen, type SettingsActions, SettingsModal, SkillsSettingsModal, Spinner, StatusSpinner, TitleOverlay, ToggleListModal, Transcript, TurnDetailsModal, type TurnDetailsModalActions, accentColor, buildMdStyle, hintsLength, isVisible, marginTopFor, onInputSubmit, renderHintSpans, runTui, splitPromptSegments, useMdStyle, useModal, useModalAwareFocus };
569
951
  //# sourceMappingURL=tui.d.ts.map
package/dist/tui.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","names":[],"sources":["../src/tui/agent-picker.tsx","../src/tui/app.tsx","../src/tui/completion-popup.tsx","../src/tui/components.tsx","../src/tui/mcps-settings.tsx","../src/tui/modal.tsx","../src/tui/model-picker.tsx","../src/tui/screens.tsx","../src/tui/settings-modal.tsx","../src/tui/skills-settings.tsx","../src/tui/theme.ts","../src/tui/toggle-list-modal.tsx","../src/tui/index.tsx"],"mappings":"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"}
1
+ {"version":3,"file":"tui.d.ts","names":[],"sources":["../src/tui/agent-picker.tsx","../src/tui/app.tsx","../src/tui/completion-popup.tsx","../src/tui/components.tsx","../src/tui/effort-picker.tsx","../src/tui/interaction-block.tsx","../src/tui/mcps-settings.tsx","../src/tui/modal.tsx","../src/tui/model-picker.tsx","../src/tui/screens.tsx","../src/tui/session-details-modal.tsx","../src/tui/settings-modal.tsx","../src/tui/skills-settings.tsx","../src/tui/theme.ts","../src/tui/toggle-list-modal.tsx","../src/tui/turn-details-modal.tsx","../src/tui/index.tsx"],"mappings":"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"}