@chances-ai/tui 13.0.0 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-key-prompt.d.ts +8 -15
- package/dist/api-key-prompt.d.ts.map +1 -1
- package/dist/api-key-prompt.js +21 -31
- package/dist/api-key-prompt.js.map +1 -1
- package/dist/app.d.ts +15 -21
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +180 -151
- package/dist/app.js.map +1 -1
- package/dist/code-view.d.ts +9 -0
- package/dist/code-view.d.ts.map +1 -0
- package/dist/code-view.js +28 -0
- package/dist/code-view.js.map +1 -0
- package/dist/diff-model.d.ts +64 -0
- package/dist/diff-model.d.ts.map +1 -0
- package/dist/diff-model.js +156 -0
- package/dist/diff-model.js.map +1 -0
- package/dist/diff-view.d.ts +13 -0
- package/dist/diff-view.d.ts.map +1 -0
- package/dist/diff-view.js +60 -0
- package/dist/diff-view.js.map +1 -0
- package/dist/highlight-to-segments.d.ts +18 -0
- package/dist/highlight-to-segments.d.ts.map +1 -0
- package/dist/highlight-to-segments.js +224 -0
- package/dist/highlight-to-segments.js.map +1 -0
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/dist/markdown.d.ts +5 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +117 -0
- package/dist/markdown.js.map +1 -0
- package/dist/modal.d.ts +3 -2
- package/dist/modal.d.ts.map +1 -1
- package/dist/modal.js +3 -2
- package/dist/modal.js.map +1 -1
- package/dist/model-picker.d.ts +7 -39
- package/dist/model-picker.d.ts.map +1 -1
- package/dist/model-picker.js +14 -65
- package/dist/model-picker.js.map +1 -1
- package/dist/progress.d.ts +41 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +122 -0
- package/dist/progress.js.map +1 -0
- package/dist/select.d.ts +59 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +114 -0
- package/dist/select.js.map +1 -0
- package/dist/session-picker.d.ts +7 -15
- package/dist/session-picker.d.ts.map +1 -1
- package/dist/session-picker.js +14 -40
- package/dist/session-picker.js.map +1 -1
- package/dist/slash-typeahead.d.ts +34 -0
- package/dist/slash-typeahead.d.ts.map +1 -0
- package/dist/slash-typeahead.js +78 -0
- package/dist/slash-typeahead.js.map +1 -0
- package/dist/theme-context.d.ts +25 -0
- package/dist/theme-context.d.ts.map +1 -0
- package/dist/theme-context.js +24 -0
- package/dist/theme-context.js.map +1 -0
- package/dist/theme.d.ts +106 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +116 -0
- package/dist/theme.js.map +1 -0
- package/dist/tool-line.d.ts +33 -0
- package/dist/tool-line.d.ts.map +1 -0
- package/dist/tool-line.js +168 -0
- package/dist/tool-line.js.map +1 -0
- package/dist/tool-message.d.ts +18 -0
- package/dist/tool-message.d.ts.map +1 -0
- package/dist/tool-message.js +37 -0
- package/dist/tool-message.js.map +1 -0
- package/dist/view-model.d.ts +46 -1
- package/dist/view-model.d.ts.map +1 -1
- package/dist/view-model.js +109 -16
- package/dist/view-model.js.map +1 -1
- package/package.json +9 -4
package/dist/api-key-prompt.d.ts
CHANGED
|
@@ -1,21 +1,14 @@
|
|
|
1
1
|
import { type JSX } from "react";
|
|
2
|
-
import type { PickerKey } from "./model-picker.js";
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
resolved?: string | null;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Single-line masked input for credentials. Characters are stored verbatim
|
|
14
|
-
* but rendered as `•`. Enter submits, Esc cancels, empty-Enter cancels.
|
|
3
|
+
* (5.10 A4) Single-line masked credential input — now on the input bus rather
|
|
4
|
+
* than its own `useInput`. It owns the modal `Modal` context (masks chat) and
|
|
5
|
+
* registers `modal:accept` (Enter) / `modal:cancel` (Esc) plus a text sink for
|
|
6
|
+
* editing. Enter on empty cancels (distinguishes "gave up" from a real key);
|
|
7
|
+
* `ctrl+c` is the bus's non-stoppable force-exit, so it can never pollute the
|
|
8
|
+
* credential (the old reducer needed an explicit guard for this).
|
|
15
9
|
*
|
|
16
|
-
*
|
|
17
|
-
* that's a `/provider add`
|
|
18
|
-
* don't want to make from the TUI layer.
|
|
10
|
+
* Characters are stored verbatim but rendered as `•`. No clipboard-paste
|
|
11
|
+
* detection or provider validation — that's a `/provider add` concern.
|
|
19
12
|
*/
|
|
20
13
|
export declare function ApiKeyPrompt({ provider, onSubmit, }: {
|
|
21
14
|
provider: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-prompt.d.ts","sourceRoot":"","sources":["../src/api-key-prompt.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"api-key-prompt.d.ts","sourceRoot":"","sources":["../src/api-key-prompt.tsx"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAI3C;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC,GAAG,GAAG,CAAC,OAAO,CAwBd"}
|
package/dist/api-key-prompt.js
CHANGED
|
@@ -1,41 +1,31 @@
|
|
|
1
1
|
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Box, Text
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
3
|
import { useState } from "react";
|
|
4
|
+
import { useKeybinding, useKeybindingContext, useTextInput } from "@chances-ai/ink-ext";
|
|
5
|
+
import { useTheme } from "./theme-context.js";
|
|
4
6
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return { value, resolved: null };
|
|
12
|
-
if (key.return)
|
|
13
|
-
return { value, resolved: value.length > 0 ? value : null };
|
|
14
|
-
if (key.backspace || key.delete)
|
|
15
|
-
return { value: value.slice(0, -1) };
|
|
16
|
-
if (char && !key.ctrl && !key.meta)
|
|
17
|
-
return { value: value + char };
|
|
18
|
-
return { value };
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Single-line masked input for credentials. Characters are stored verbatim
|
|
22
|
-
* but rendered as `•`. Enter submits, Esc cancels, empty-Enter cancels.
|
|
7
|
+
* (5.10 A4) Single-line masked credential input — now on the input bus rather
|
|
8
|
+
* than its own `useInput`. It owns the modal `Modal` context (masks chat) and
|
|
9
|
+
* registers `modal:accept` (Enter) / `modal:cancel` (Esc) plus a text sink for
|
|
10
|
+
* editing. Enter on empty cancels (distinguishes "gave up" from a real key);
|
|
11
|
+
* `ctrl+c` is the bus's non-stoppable force-exit, so it can never pollute the
|
|
12
|
+
* credential (the old reducer needed an explicit guard for this).
|
|
23
13
|
*
|
|
24
|
-
*
|
|
25
|
-
* that's a `/provider add`
|
|
26
|
-
* don't want to make from the TUI layer.
|
|
14
|
+
* Characters are stored verbatim but rendered as `•`. No clipboard-paste
|
|
15
|
+
* detection or provider validation — that's a `/provider add` concern.
|
|
27
16
|
*/
|
|
28
17
|
export function ApiKeyPrompt({ provider, onSubmit, }) {
|
|
18
|
+
const { theme } = useTheme();
|
|
29
19
|
const [value, setValue] = useState("");
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (
|
|
37
|
-
setValue(
|
|
20
|
+
useKeybindingContext("Modal", true);
|
|
21
|
+
useKeybinding("modal:cancel", () => onSubmit(null), { context: "Modal" });
|
|
22
|
+
useKeybinding("modal:accept", () => onSubmit(value.length > 0 ? value : null), { context: "Modal" });
|
|
23
|
+
useTextInput("Modal", (char, key) => {
|
|
24
|
+
if (key.backspace || key.delete)
|
|
25
|
+
setValue((v) => v.slice(0, -1));
|
|
26
|
+
else if (char && !key.ctrl && !key.meta)
|
|
27
|
+
setValue((v) => v + char);
|
|
38
28
|
});
|
|
39
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor:
|
|
29
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.warning, paddingX: 1, children: [_jsxs(Text, { color: theme.warning, children: ["API key for ", provider, " \u00B7 Enter \u00B7 Esc to cancel"] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { children: "\u203A " }), _jsx(Text, { color: theme.success, children: "•".repeat(value.length) })] }), _jsx(Text, { dimColor: true, children: "(input is masked; the key is written to ~/.config/chances/auth.json with 0600 perms)" })] }));
|
|
40
30
|
}
|
|
41
31
|
//# sourceMappingURL=api-key-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key-prompt.js","sourceRoot":"","sources":["../src/api-key-prompt.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"api-key-prompt.js","sourceRoot":"","sources":["../src/api-key-prompt.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAY,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,GAIT;IACC,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEvC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpC,aAAa,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1E,aAAa,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACrG,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QAClC,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM;YAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5D,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,aACrF,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,6BAAe,QAAQ,0CAAgC,EACjF,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,0BAAU,EACf,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,OAAO,YAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAQ,IACzD,EACN,KAAC,IAAI,IAAC,QAAQ,2GAEP,IACH,CACP,CAAC;AACJ,CAAC"}
|
package/dist/app.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type JSX } from "react";
|
|
2
|
-
import type
|
|
2
|
+
import { type SlashSuggestion } from "./slash-typeahead.js";
|
|
3
|
+
export { suggestSlashCommands } from "./slash-typeahead.js";
|
|
4
|
+
export type { SlashSuggestion } from "./slash-typeahead.js";
|
|
5
|
+
import type { ThemeSetting } from "./theme.js";
|
|
6
|
+
import { type ChatViewModel } from "./view-model.js";
|
|
3
7
|
import type { ModalController } from "./modal.js";
|
|
4
|
-
export interface SlashSuggestion {
|
|
5
|
-
name: string;
|
|
6
|
-
description: string;
|
|
7
|
-
}
|
|
8
8
|
/** (5.4) An MCP resource the user can reference with `@<server>:<uri>`. */
|
|
9
9
|
export interface ResourceSuggestion {
|
|
10
10
|
/** `<server>:<uri>` — the text inserted after `@`. */
|
|
@@ -20,24 +20,18 @@ export interface ChatAppProps {
|
|
|
20
20
|
* slash commands can `await controller.open(render)` to pop modals
|
|
21
21
|
* (pickers, prompts). When absent, ChatApp behaves as before. */
|
|
22
22
|
modal?: ModalController;
|
|
23
|
-
/** Snapshot of the slash commands the host can dispatch
|
|
24
|
-
* ghost-text autocomplete when the user types `/`. Optional — when absent
|
|
25
|
-
* no autocomplete is shown (chat works exactly as before). The host should
|
|
26
|
-
* pass a fresh array on each render if the registry can change. */
|
|
23
|
+
/** Snapshot of the slash commands the host can dispatch (inline autocomplete). */
|
|
27
24
|
availableSlashCommands?: SlashSuggestion[];
|
|
28
|
-
/** (5.4) Snapshot of MCP resources for `@<server>:<uri>` autocomplete
|
|
29
|
-
* the current token starts with `@`. Optional — absent ⇒ no `@` hints. */
|
|
25
|
+
/** (5.4) Snapshot of MCP resources for `@<server>:<uri>` autocomplete. */
|
|
30
26
|
availableResources?: ResourceSuggestion[];
|
|
27
|
+
/** (5.9) Color palette selection (`config.tui.theme`). Default dark. */
|
|
28
|
+
themeSetting?: ThemeSetting;
|
|
29
|
+
/** (5.9) Syntax-highlight code/diffs (`config.tui.syntaxHighlight`). Default true. */
|
|
30
|
+
syntaxHighlight?: boolean;
|
|
31
31
|
}
|
|
32
|
-
/** Pure helper for
|
|
33
|
-
* Exported separately so tests don't have to drive ChatApp through Ink. */
|
|
34
|
-
export declare function suggestSlashCommands(input: string, available: SlashSuggestion[]): SlashSuggestion[];
|
|
35
|
-
/**
|
|
36
|
-
* (5.4) Pure helper for `@<server>:<uri>` mention autocomplete. Triggers only
|
|
37
|
-
* on the CURRENT token (last whitespace-delimited word) starting with `@`, so a
|
|
38
|
-
* mid-message `@` is fine. Slash-command lines (`/…`) never show resource hints.
|
|
39
|
-
* Exported separately so tests don't drive ChatApp through Ink.
|
|
40
|
-
*/
|
|
32
|
+
/** (5.4) Pure helper for `@<server>:<uri>` mention autocomplete. */
|
|
41
33
|
export declare function suggestResourceMentions(input: string, available: ResourceSuggestion[]): ResourceSuggestion[];
|
|
42
|
-
|
|
34
|
+
/** Public entry: wraps the chat in the theme provider + the single input bus so
|
|
35
|
+
* every component reads one palette and one keymap. */
|
|
36
|
+
export declare function ChatApp(props: ChatAppProps): JSX.Element;
|
|
43
37
|
//# sourceMappingURL=app.d.ts.map
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AACA,OAAO,EAA6C,KAAK,GAAG,EAAkB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"AACA,OAAO,EAA6C,KAAK,GAAG,EAAkB,MAAM,OAAO,CAAC;AAG5F,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAO5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAe,KAAK,aAAa,EAAa,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA6ClD,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,aAAa,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,6EAA6E;IAC7E,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C;;qEAEiE;IACjE,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,kFAAkF;IAClF,sBAAsB,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3C,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC1C,wEAAwE;IACxE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sFAAsF;IACtF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,oEAAoE;AACpE,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,kBAAkB,EAAE,GAC9B,kBAAkB,EAAE,CAOtB;AAED;wDACwD;AACxD,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CAMxD"}
|
package/dist/app.js
CHANGED
|
@@ -1,53 +1,46 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Box, Static, Text, useApp
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Static, Text, useApp } from "ink";
|
|
3
3
|
import { useEffect, useState, useSyncExternalStore } from "react";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
import { KeybindingProvider, useKeybinding, useKeybindingContext, useTextInput } from "@chances-ai/ink-ext";
|
|
5
|
+
import { SlashTypeahead } from "./slash-typeahead.js";
|
|
6
|
+
// Re-exported for backward compat: `suggestSlashCommands`/`SlashSuggestion` moved
|
|
7
|
+
// to slash-typeahead.tsx (5.10 A3) but several call sites + tests import them here.
|
|
8
|
+
export { suggestSlashCommands } from "./slash-typeahead.js";
|
|
9
|
+
import { looksLikeDiff } from "./diff-model.js";
|
|
10
|
+
import { DiffView } from "./diff-view.js";
|
|
11
|
+
import { Markdown } from "./markdown.js";
|
|
12
|
+
import { Progress } from "./progress.js";
|
|
13
|
+
import { ToolMessage } from "./tool-message.js";
|
|
14
|
+
import { useTheme, ThemeProvider } from "./theme-context.js";
|
|
15
|
+
import { extractDiff } from "./view-model.js";
|
|
16
|
+
/** (5.3 / 5.9) Footer presentation per approval mode: glyph + theme role.
|
|
17
|
+
* `default` is a dim discoverability hint; the rest are colored badges. */
|
|
7
18
|
const MODE_DISPLAY = {
|
|
8
|
-
default: { symbol: "○",
|
|
9
|
-
"auto-edit": { symbol:
|
|
10
|
-
plan: { symbol:
|
|
11
|
-
yolo: { symbol:
|
|
19
|
+
default: { symbol: () => "○", role: "planMode", label: "default" },
|
|
20
|
+
"auto-edit": { symbol: (g) => g.accept, role: "autoAccept", label: "auto-edit" },
|
|
21
|
+
plan: { symbol: (g) => g.plan, role: "planMode", label: "plan" },
|
|
22
|
+
yolo: { symbol: (g) => g.accept, role: "error", label: "yolo" },
|
|
12
23
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return (_jsxs(Text, { color: color, children: [PREFIX[line.kind], line.text] }));
|
|
32
|
-
}
|
|
33
|
-
/** Pure helper for picking the suggestions to show for a partial input.
|
|
34
|
-
* Exported separately so tests don't have to drive ChatApp through Ink. */
|
|
35
|
-
export function suggestSlashCommands(input, available) {
|
|
36
|
-
if (!input.startsWith("/"))
|
|
37
|
-
return [];
|
|
38
|
-
const partial = input.slice(1).toLowerCase();
|
|
39
|
-
if (partial === "")
|
|
40
|
-
return available.slice(0, 5);
|
|
41
|
-
return available
|
|
42
|
-
.filter((c) => c.name.toLowerCase().startsWith(partial))
|
|
43
|
-
.slice(0, 5);
|
|
24
|
+
/** Render one transcript line. `rich` ⇒ committed (assistant → Markdown);
|
|
25
|
+
* otherwise the live tail (assistant → plain, so half-streamed Markdown never
|
|
26
|
+
* flickers — v13 committed/live split). Tool/user/info/error look the same in
|
|
27
|
+
* both regions. */
|
|
28
|
+
function LineView({ line, rich, width }) {
|
|
29
|
+
const { theme, glyphs } = useTheme();
|
|
30
|
+
switch (line.kind) {
|
|
31
|
+
case "tool":
|
|
32
|
+
return (_jsx(ToolMessage, { name: line.toolName ?? "", argSummary: line.text, ok: line.ok, result: line.result, diff: line.diff, anchored: line.anchored, width: width }));
|
|
33
|
+
case "assistant":
|
|
34
|
+
return rich ? _jsx(Markdown, { text: line.text }) : _jsx(Text, { children: line.text });
|
|
35
|
+
case "user":
|
|
36
|
+
return (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { backgroundColor: theme.userMessageBg, children: [" ", line.text, " "] }) }));
|
|
37
|
+
case "error":
|
|
38
|
+
return _jsxs(Text, { color: theme.error, children: ["\u2717 ", line.text] });
|
|
39
|
+
default:
|
|
40
|
+
return _jsx(Text, { dimColor: true, children: line.text });
|
|
41
|
+
}
|
|
44
42
|
}
|
|
45
|
-
/**
|
|
46
|
-
* (5.4) Pure helper for `@<server>:<uri>` mention autocomplete. Triggers only
|
|
47
|
-
* on the CURRENT token (last whitespace-delimited word) starting with `@`, so a
|
|
48
|
-
* mid-message `@` is fine. Slash-command lines (`/…`) never show resource hints.
|
|
49
|
-
* Exported separately so tests don't drive ChatApp through Ink.
|
|
50
|
-
*/
|
|
43
|
+
/** (5.4) Pure helper for `@<server>:<uri>` mention autocomplete. */
|
|
51
44
|
export function suggestResourceMentions(input, available) {
|
|
52
45
|
if (input.startsWith("/"))
|
|
53
46
|
return [];
|
|
@@ -59,140 +52,176 @@ export function suggestResourceMentions(input, available) {
|
|
|
59
52
|
return available.slice(0, 5);
|
|
60
53
|
return available.filter((r) => r.ref.toLowerCase().startsWith(partial)).slice(0, 5);
|
|
61
54
|
}
|
|
62
|
-
|
|
55
|
+
/** Public entry: wraps the chat in the theme provider + the single input bus so
|
|
56
|
+
* every component reads one palette and one keymap. */
|
|
57
|
+
export function ChatApp(props) {
|
|
58
|
+
return (_jsx(ThemeProvider, { setting: props.themeSetting, syntaxHighlight: props.syntaxHighlight, children: _jsx(ChatBusWrapper, { ...props }) }));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* (5.10 A1/A4 migration) Owns the modal slot + the single root input bus, which
|
|
62
|
+
* is now the ONLY Ink input consumer in the tree — every picker (Model/Session
|
|
63
|
+
* via `Select`, ApiKey via the `Modal` context) registers on the bus instead of
|
|
64
|
+
* opening its own `useInput`. A picker masks chat structurally by pushing its
|
|
65
|
+
* modal context (`Select`/`Modal`), so the old `if (modalNode) return` gate is
|
|
66
|
+
* no longer needed. Permission / yolo overlays run through `Confirmation`.
|
|
67
|
+
*/
|
|
68
|
+
function ChatBusWrapper(props) {
|
|
69
|
+
const { exit } = useApp();
|
|
70
|
+
const [modalNode, setModalNode] = useState(null);
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
if (!props.modal)
|
|
73
|
+
return;
|
|
74
|
+
return props.modal.attach((node) => setModalNode(node));
|
|
75
|
+
}, [props.modal]);
|
|
76
|
+
return (_jsx(KeybindingProvider, { onForceExit: () => exit(), children: _jsx(ChatInner, { ...props, modalNode: modalNode }) }));
|
|
77
|
+
}
|
|
78
|
+
function ChatInner({ vm, onSubmit, onSlash, availableSlashCommands, availableResources, modalNode, }) {
|
|
63
79
|
useSyncExternalStore(vm.subscribe, vm.getSnapshot, vm.getSnapshot);
|
|
80
|
+
const { theme, glyphs } = useTheme();
|
|
64
81
|
const [input, setInput] = useState("");
|
|
65
|
-
|
|
66
|
-
// (5.3) Non-null while the "[d] no, and tell the model" feedback field is
|
|
67
|
-
// open under a permission prompt. Holds the text the user is typing.
|
|
82
|
+
// (5.3) Non-null while the "no, and tell the model" feedback field is open.
|
|
68
83
|
const [feedback, setFeedback] = useState(null);
|
|
69
84
|
const { exit } = useApp();
|
|
70
|
-
|
|
71
|
-
if (!modal)
|
|
72
|
-
return;
|
|
73
|
-
return modal.attach((node) => setModalNode(node));
|
|
74
|
-
}, [modal]);
|
|
75
|
-
// (5.3 codex Round-2 SHOULD-FIX #4) Drop any half-typed deny-feedback when
|
|
76
|
-
// the pending prompt changes or clears (e.g. resolved externally via
|
|
77
|
-
// detach), so a NEW prompt never opens in stale feedback-capture mode.
|
|
78
|
-
// vm.pending is a stable object while the user types (typing only touches
|
|
79
|
-
// local state), so this fires only on a real prompt boundary.
|
|
85
|
+
// (5.3 codex R2 SHOULD-FIX #4) Drop half-typed feedback when the prompt changes.
|
|
80
86
|
useEffect(() => {
|
|
81
87
|
setFeedback(null);
|
|
82
88
|
}, [vm.pending]);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
// (5.10 A1) The permission prompt + yolo confirm both live in the modal
|
|
90
|
+
// `Confirmation` context: while either is up it masks `Chat`, so the chat
|
|
91
|
+
// input below receives nothing — the old `if (vm.pending) … return` guards,
|
|
92
|
+
// now structural. v15 keeps the v14 char keys (y/a/n/d + 1/2/3); the Select
|
|
93
|
+
// migration of this prompt is v16.
|
|
94
|
+
const confirmActive = vm.pending !== null || vm.yoloConfirmPending;
|
|
95
|
+
// Run a `/command` line: clear the draft, echo it, dispatch via the host.
|
|
96
|
+
// Shared by chat:submit (typed "/foo args") and SlashTypeahead's Enter
|
|
97
|
+
// (executes the SELECTED command, no args — the menu only shows pre-space).
|
|
98
|
+
const runSlash = (line) => {
|
|
99
|
+
setInput("");
|
|
100
|
+
vm.pushUser(line);
|
|
101
|
+
if (onSlash)
|
|
102
|
+
void onSlash(line);
|
|
103
|
+
else
|
|
104
|
+
vm.pushError(`Unknown command: ${line}`);
|
|
105
|
+
};
|
|
106
|
+
// -- Chat context (base) --
|
|
107
|
+
useKeybinding("chat:submit", () => {
|
|
108
|
+
const prompt = input.trim();
|
|
109
|
+
if (prompt === "/exit" || prompt === "/quit") {
|
|
110
|
+
exit();
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// (5.8 codex R2) Block submission while a turn streams; keep the draft.
|
|
114
|
+
if (vm.busy)
|
|
115
|
+
return;
|
|
116
|
+
if (prompt.startsWith("/")) {
|
|
117
|
+
runSlash(prompt);
|
|
87
118
|
return;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
119
|
+
}
|
|
120
|
+
setInput("");
|
|
121
|
+
if (prompt) {
|
|
122
|
+
vm.pushUser(prompt);
|
|
123
|
+
void onSubmit(prompt);
|
|
124
|
+
}
|
|
125
|
+
}, { context: "Chat" });
|
|
126
|
+
// (5.3) Shift+Tab cycles approval modes; not while a turn streams (cycling
|
|
127
|
+
// would commit a status line and split the in-progress assistant message).
|
|
128
|
+
useKeybinding("chat:cycleApprovalMode", () => {
|
|
129
|
+
if (!vm.busy)
|
|
130
|
+
vm.cycleApprovalMode();
|
|
131
|
+
}, { context: "Chat" });
|
|
132
|
+
useTextInput("Chat", (char, key) => {
|
|
133
|
+
// meta+m is the Windows fallback for Shift+Tab (no `shift+tab` token there).
|
|
134
|
+
if (key.meta && char === "m") {
|
|
135
|
+
if (!vm.busy)
|
|
96
136
|
vm.cycleApprovalMode();
|
|
97
137
|
return;
|
|
98
138
|
}
|
|
99
|
-
|
|
139
|
+
if (key.backspace || key.delete) {
|
|
140
|
+
setInput((s) => s.slice(0, -1));
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (char && !key.ctrl && !key.meta)
|
|
144
|
+
setInput((s) => s + char);
|
|
145
|
+
});
|
|
146
|
+
// -- Confirmation context (permission prompt + yolo confirm) --
|
|
147
|
+
useKeybindingContext("Confirmation", confirmActive);
|
|
148
|
+
useTextInput("Confirmation", (char, key) => {
|
|
100
149
|
if (vm.yoloConfirmPending) {
|
|
101
150
|
if (char === "y")
|
|
102
151
|
vm.resolveYoloConfirm(true);
|
|
103
|
-
else if (char === "n"
|
|
152
|
+
else if (char === "n")
|
|
104
153
|
vm.resolveYoloConfirm(false);
|
|
105
154
|
return;
|
|
106
155
|
}
|
|
107
|
-
if (vm.pending)
|
|
108
|
-
// (5.3) Feedback-capture sub-mode: typing builds the deny note.
|
|
109
|
-
if (feedback !== null) {
|
|
110
|
-
if (key.return) {
|
|
111
|
-
const note = feedback.trim();
|
|
112
|
-
setFeedback(null);
|
|
113
|
-
vm.resolvePermission({ allow: false, feedback: note || undefined });
|
|
114
|
-
}
|
|
115
|
-
else if (key.escape) {
|
|
116
|
-
setFeedback(null); // back to the 4-way prompt
|
|
117
|
-
}
|
|
118
|
-
else if (key.backspace || key.delete) {
|
|
119
|
-
setFeedback((s) => (s ?? "").slice(0, -1));
|
|
120
|
-
}
|
|
121
|
-
else if (char && !key.ctrl && !key.meta) {
|
|
122
|
-
setFeedback((s) => (s ?? "") + char);
|
|
123
|
-
}
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
// 4-way prompt: yes / yes-always / no / no-with-feedback.
|
|
127
|
-
if (char === "y")
|
|
128
|
-
vm.resolvePermission({ allow: true });
|
|
129
|
-
else if (char === "a")
|
|
130
|
-
vm.resolvePermission({ allow: true, remember: true });
|
|
131
|
-
else if (char === "n")
|
|
132
|
-
vm.resolvePermission({ allow: false });
|
|
133
|
-
else if (char === "d")
|
|
134
|
-
setFeedback(""); // open the feedback field
|
|
156
|
+
if (vm.pending === null)
|
|
135
157
|
return;
|
|
136
|
-
|
|
137
|
-
if (
|
|
138
|
-
|
|
158
|
+
// (5.3) Feedback-capture sub-mode: typing builds the deny note.
|
|
159
|
+
if (feedback !== null) {
|
|
160
|
+
if (key.backspace || key.delete)
|
|
161
|
+
setFeedback((s) => (s ?? "").slice(0, -1));
|
|
162
|
+
else if (char && !key.ctrl && !key.meta)
|
|
163
|
+
setFeedback((s) => (s ?? "") + char);
|
|
139
164
|
return;
|
|
140
165
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (prompt.startsWith("/")) {
|
|
156
|
-
vm.pushUser(prompt);
|
|
157
|
-
if (onSlash)
|
|
158
|
-
void onSlash(prompt);
|
|
159
|
-
else
|
|
160
|
-
vm.pushError(`Unknown command: ${prompt}`);
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
if (prompt) {
|
|
164
|
-
vm.pushUser(prompt);
|
|
165
|
-
void onSubmit(prompt);
|
|
166
|
-
}
|
|
166
|
+
// (5.9) 4-way prompt: number OR letter selects the same decision.
|
|
167
|
+
if (char === "y" || char === "1")
|
|
168
|
+
vm.resolvePermission({ allow: true });
|
|
169
|
+
else if (char === "a" || char === "2")
|
|
170
|
+
vm.resolvePermission({ allow: true, remember: true });
|
|
171
|
+
else if (char === "n" || char === "3")
|
|
172
|
+
vm.resolvePermission({ allow: false });
|
|
173
|
+
else if (char === "d")
|
|
174
|
+
setFeedback("");
|
|
175
|
+
}, { active: confirmActive });
|
|
176
|
+
useKeybinding("confirm:cancel", // escape
|
|
177
|
+
() => {
|
|
178
|
+
if (vm.yoloConfirmPending) {
|
|
179
|
+
vm.resolveYoloConfirm(false);
|
|
167
180
|
return;
|
|
168
181
|
}
|
|
169
|
-
if (
|
|
170
|
-
setInput((s) => s.slice(0, -1));
|
|
182
|
+
if (vm.pending === null)
|
|
171
183
|
return;
|
|
184
|
+
if (feedback !== null)
|
|
185
|
+
setFeedback(null);
|
|
186
|
+
else
|
|
187
|
+
vm.resolvePermission({ allow: false });
|
|
188
|
+
}, { context: "Confirmation", active: confirmActive });
|
|
189
|
+
useKeybinding("confirm:accept", // return — only meaningful in the feedback sub-mode
|
|
190
|
+
() => {
|
|
191
|
+
if (vm.pending !== null && feedback !== null) {
|
|
192
|
+
const note = feedback.trim();
|
|
193
|
+
setFeedback(null);
|
|
194
|
+
vm.resolvePermission({ allow: false, feedback: note || undefined });
|
|
172
195
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
196
|
+
}, { context: "Confirmation", active: confirmActive });
|
|
197
|
+
const liveAssistant = vm.liveLines().find((l) => l.kind === "assistant");
|
|
198
|
+
const tokens = liveAssistant ? Math.round(liveAssistant.text.length / 4) : 0;
|
|
199
|
+
const showInput = !modalNode && !vm.yoloConfirmPending && !vm.pending;
|
|
200
|
+
return (_jsxs(_Fragment, { children: [_jsx(Static, { items: vm.committedLines(), children: (line, i) => _jsx(LineView, { line: line, rich: true }, i) }, vm.clearGeneration), _jsxs(Box, { flexDirection: "column", children: [vm.liveLines().map((line, i) => (_jsx(LineView, { line: line, rich: false }, `live-${i}`))), modalNode ? _jsx(Box, { marginTop: 1, children: modalNode }) : null, !modalNode && vm.yoloConfirmPending ? _jsx(YoloConfirm, { theme: theme }) : null, !modalNode && !vm.yoloConfirmPending && vm.pending ? (_jsx(PermissionDialog, { name: vm.pending.req.name, summary: vm.pending.req.summary, feedback: feedback, theme: theme, glyphs: glyphs })) : null, vm.busy && showInput ? _jsx(Progress, { active: true, tokens: tokens }) : null, showInput ? (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { marginTop: vm.busy ? 0 : 1, children: [_jsxs(Text, { color: vm.busy ? undefined : theme.accent, dimColor: vm.busy, children: [glyphs.prompt, " "] }), _jsx(Text, { children: input })] }), _jsx(SlashTypeahead, { input: input, available: availableSlashCommands ?? [], busy: vm.busy, onComplete: setInput, onExecute: runSlash }), _jsx(MentionAutocomplete, { input: input, available: availableResources ?? [] }), _jsx(ModeBadge, { mode: vm.approvalMode, theme: theme, glyphs: glyphs, busy: vm.busy })] })) : null] })] }));
|
|
201
|
+
}
|
|
202
|
+
function YoloConfirm({ theme }) {
|
|
203
|
+
return (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: theme.error, children: "─".repeat(40) }), _jsx(Text, { color: theme.error, children: "\u26A0 Enter YOLO mode?" }), _jsx(Text, { children: "All tool calls will be auto-approved. Only explicit deny-rules still block." }), _jsx(Text, { dimColor: true, children: "[y] enter yolo \u00B7 [n] cancel" })] }));
|
|
204
|
+
}
|
|
205
|
+
/** (5.9) Top-rule-only permission dialog with an embedded structured diff (for
|
|
206
|
+
* write/edit) and a `❯`-marked numbered option list. Same v13 keys (y/a/n/d +
|
|
207
|
+
* 1/2/3) — this is a visual reskin, not the v15 Select interaction. */
|
|
208
|
+
function PermissionDialog({ name, summary, feedback, theme, glyphs, }) {
|
|
209
|
+
const diff = looksLikeDiff(summary) ? extractDiff(summary) : null;
|
|
210
|
+
// The summary's first line is the human title (e.g. "overwrite path"); the
|
|
211
|
+
// diff (if any) renders structured below, so don't repeat it as raw text.
|
|
212
|
+
const titleLine = summary.split("\n")[0] ?? summary;
|
|
213
|
+
return (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: theme.permission, children: "─".repeat(40) }), _jsxs(Text, { color: theme.permission, bold: true, children: ["Approve ", name, "?"] }), _jsx(Text, { children: titleLine }), diff ? _jsx(DiffView, { diff: diff, anchored: name === "write" }) : null, feedback !== null ? (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "tell the model what to do instead:" }), _jsxs(Box, { children: [_jsxs(Text, { color: theme.accent, children: [glyphs.prompt, " "] }), _jsx(Text, { children: feedback }), _jsx(Text, { dimColor: true, children: "\u258C" })] }), _jsx(Text, { dimColor: true, children: "[enter] send \u00B7 [esc] back" })] })) : (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Text, { children: [_jsxs(Text, { color: theme.permission, children: [glyphs.prompt, " "] }), "1 Yes"] }), _jsx(Text, { children: " 2 Yes, don't ask again" }), _jsx(Text, { children: " 3 No (esc)" }), _jsx(Text, { children: " d No, and tell the model what to do" })] }))] }));
|
|
177
214
|
}
|
|
178
|
-
/** (5.3) Footer approval-mode indicator
|
|
179
|
-
|
|
180
|
-
* gesture is findable. */
|
|
181
|
-
function ModeBadge({ mode }) {
|
|
215
|
+
/** (5.3 / 5.9) Footer approval-mode indicator — a single dim line. */
|
|
216
|
+
function ModeBadge({ mode, theme, glyphs, busy, }) {
|
|
182
217
|
const d = MODE_DISPLAY[mode];
|
|
218
|
+
const hint = busy ? "esc to interrupt" : "? for shortcuts";
|
|
183
219
|
if (mode === "default") {
|
|
184
|
-
return (_jsx(Box, { marginLeft: 2, children:
|
|
220
|
+
return (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["shift+tab: cycle approval mode \u00B7 ", hint] }) }));
|
|
185
221
|
}
|
|
186
|
-
return (_jsxs(Box, { marginLeft: 2, children: [_jsxs(Text, { color: d.
|
|
187
|
-
}
|
|
188
|
-
function SlashAutocomplete({ input, available, }) {
|
|
189
|
-
const matches = suggestSlashCommands(input, available);
|
|
190
|
-
if (matches.length === 0)
|
|
191
|
-
return null;
|
|
192
|
-
return (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: matches.map((m) => (_jsxs(Text, { dimColor: true, children: ["/", m.name, " \u2014 ", m.description] }, m.name))) }));
|
|
222
|
+
return (_jsxs(Box, { marginLeft: 2, children: [_jsxs(Text, { color: theme[d.role], children: [d.symbol(glyphs), " ", d.label] }), _jsxs(Text, { dimColor: true, children: [" \u00B7 shift+tab to cycle \u00B7 ", hint] })] }));
|
|
193
223
|
}
|
|
194
|
-
/** (5.4) Ghost-text hints for `@<server>:<uri>` resource mentions
|
|
195
|
-
* `SlashAutocomplete` (display-only; the user types the ref). */
|
|
224
|
+
/** (5.4) Ghost-text hints for `@<server>:<uri>` resource mentions. */
|
|
196
225
|
function MentionAutocomplete({ input, available, }) {
|
|
197
226
|
const matches = suggestResourceMentions(input, available);
|
|
198
227
|
if (matches.length === 0)
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"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"}
|