neoctl 0.2.10 → 0.2.11
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/context/compaction.js +3 -3
- package/dist/context/compaction.js.map +1 -1
- package/dist/context/prompts.js +5 -1
- package/dist/context/prompts.js.map +1 -1
- package/dist/core/image-note-prompt.d.ts +8 -0
- package/dist/core/image-note-prompt.js +20 -0
- package/dist/core/image-note-prompt.js.map +1 -0
- package/dist/core/image-notes.d.ts +21 -0
- package/dist/core/image-notes.js +112 -0
- package/dist/core/image-notes.js.map +1 -0
- package/dist/core/image-registry.d.ts +5 -0
- package/dist/core/image-registry.js +41 -3
- package/dist/core/image-registry.js.map +1 -1
- package/dist/core/query-engine.js +6 -1
- package/dist/core/query-engine.js.map +1 -1
- package/dist/core/query.js +189 -1
- package/dist/core/query.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/model/anthropic-mapper.js +3 -1
- package/dist/model/anthropic-mapper.js.map +1 -1
- package/dist/model/openai-mappers.js +3 -1
- package/dist/model/openai-mappers.js.map +1 -1
- package/dist/repl/browser.d.ts +232 -0
- package/dist/repl/browser.js +156 -0
- package/dist/repl/browser.js.map +1 -0
- package/dist/repl/env-file.d.ts +4 -0
- package/dist/repl/env-file.js +97 -0
- package/dist/repl/env-file.js.map +1 -0
- package/dist/repl/foreground-exec.d.ts +10 -0
- package/dist/repl/foreground-exec.js +34 -0
- package/dist/repl/foreground-exec.js.map +1 -0
- package/dist/repl/index.js +141 -2919
- package/dist/repl/index.js.map +1 -1
- package/dist/repl/login-view.d.ts +75 -0
- package/dist/repl/login-view.js +38 -0
- package/dist/repl/login-view.js.map +1 -0
- package/dist/repl/login.d.ts +14 -0
- package/dist/repl/login.js +165 -0
- package/dist/repl/login.js.map +1 -0
- package/dist/repl/message-rendering.d.ts +99 -0
- package/dist/repl/message-rendering.js +476 -0
- package/dist/repl/message-rendering.js.map +1 -0
- package/dist/repl/prompt-payload.d.ts +9 -0
- package/dist/repl/prompt-payload.js +64 -0
- package/dist/repl/prompt-payload.js.map +1 -0
- package/dist/repl/prompt-view.d.ts +235 -0
- package/dist/repl/prompt-view.js +184 -0
- package/dist/repl/prompt-view.js.map +1 -0
- package/dist/repl/repl-types.d.ts +88 -0
- package/dist/repl/repl-types.js +2 -0
- package/dist/repl/repl-types.js.map +1 -0
- package/dist/repl/runtime.d.ts +33 -0
- package/dist/repl/runtime.js +202 -0
- package/dist/repl/runtime.js.map +1 -0
- package/dist/repl/slash-completion.d.ts +28 -0
- package/dist/repl/slash-completion.js +287 -0
- package/dist/repl/slash-completion.js.map +1 -0
- package/dist/repl/status-panel.d.ts +234 -0
- package/dist/repl/status-panel.js +509 -0
- package/dist/repl/status-panel.js.map +1 -0
- package/dist/repl/terminal.d.ts +19 -0
- package/dist/repl/terminal.js +81 -0
- package/dist/repl/terminal.js.map +1 -0
- package/dist/repl/tool-rendering.d.ts +6 -0
- package/dist/repl/tool-rendering.js +502 -0
- package/dist/repl/tool-rendering.js.map +1 -0
- package/dist/repl/usage.d.ts +17 -0
- package/dist/repl/usage.js +57 -0
- package/dist/repl/usage.js.map +1 -0
- package/dist/tools/builtins/image-generation-tool.d.ts +3 -0
- package/dist/tools/builtins/image-generation-tool.js +63 -17
- package/dist/tools/builtins/image-generation-tool.js.map +1 -1
- package/dist/tools/builtins/image-loader-tool.d.ts +7 -0
- package/dist/tools/builtins/image-loader-tool.js +29 -1
- package/dist/tools/builtins/image-loader-tool.js.map +1 -1
- package/dist/tools/builtins/image-note-tool.d.ts +29 -0
- package/dist/tools/builtins/image-note-tool.js +183 -0
- package/dist/tools/builtins/image-note-tool.js.map +1 -0
- package/dist/tools/smoke-tool-system.js +4 -2
- package/dist/tools/smoke-tool-system.js.map +1 -1
- package/dist/web/index.js +2 -0
- package/dist/web/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { LoginFormState } from "./repl-types.js";
|
|
3
|
+
export declare function loginFormViewHeight(state: LoginFormState): number;
|
|
4
|
+
export declare function LoginFormView({ state, width }: {
|
|
5
|
+
state: LoginFormState;
|
|
6
|
+
width: number;
|
|
7
|
+
}): React.FunctionComponentElement<{
|
|
8
|
+
readonly position?: "absolute" | "relative" | undefined;
|
|
9
|
+
readonly columnGap?: number | undefined;
|
|
10
|
+
readonly rowGap?: number | undefined;
|
|
11
|
+
readonly gap?: number | undefined;
|
|
12
|
+
readonly margin?: number | undefined;
|
|
13
|
+
readonly marginX?: number | undefined;
|
|
14
|
+
readonly marginY?: number | undefined;
|
|
15
|
+
readonly marginTop?: number | undefined;
|
|
16
|
+
readonly marginBottom?: number | undefined;
|
|
17
|
+
readonly marginLeft?: number | undefined;
|
|
18
|
+
readonly marginRight?: number | undefined;
|
|
19
|
+
readonly padding?: number | undefined;
|
|
20
|
+
readonly paddingX?: number | undefined;
|
|
21
|
+
readonly paddingY?: number | undefined;
|
|
22
|
+
readonly paddingTop?: number | undefined;
|
|
23
|
+
readonly paddingBottom?: number | undefined;
|
|
24
|
+
readonly paddingLeft?: number | undefined;
|
|
25
|
+
readonly paddingRight?: number | undefined;
|
|
26
|
+
readonly flexGrow?: number | undefined;
|
|
27
|
+
readonly flexShrink?: number | undefined;
|
|
28
|
+
readonly flexDirection?: "row" | "column" | "row-reverse" | "column-reverse" | undefined;
|
|
29
|
+
readonly flexBasis?: number | string | undefined;
|
|
30
|
+
readonly flexWrap?: "nowrap" | "wrap" | "wrap-reverse" | undefined;
|
|
31
|
+
readonly alignItems?: "flex-start" | "center" | "flex-end" | "stretch" | undefined;
|
|
32
|
+
readonly alignSelf?: "flex-start" | "center" | "flex-end" | "auto" | undefined;
|
|
33
|
+
readonly justifyContent?: "flex-start" | "flex-end" | "space-between" | "space-around" | "space-evenly" | "center" | undefined;
|
|
34
|
+
readonly width?: number | string | undefined;
|
|
35
|
+
readonly height?: number | string | undefined;
|
|
36
|
+
readonly minWidth?: number | string | undefined;
|
|
37
|
+
readonly minHeight?: number | string | undefined;
|
|
38
|
+
readonly display?: "flex" | "none" | undefined;
|
|
39
|
+
readonly borderStyle?: (keyof import("cli-boxes").Boxes | import("cli-boxes").BoxStyle) | undefined;
|
|
40
|
+
readonly borderTop?: boolean | undefined;
|
|
41
|
+
readonly borderBottom?: boolean | undefined;
|
|
42
|
+
readonly borderLeft?: boolean | undefined;
|
|
43
|
+
readonly borderRight?: boolean | undefined;
|
|
44
|
+
readonly borderColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
45
|
+
readonly borderTopColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
46
|
+
readonly borderBottomColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
47
|
+
readonly borderLeftColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
48
|
+
readonly borderRightColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
49
|
+
readonly borderDimColor?: boolean | undefined;
|
|
50
|
+
readonly borderTopDimColor?: boolean | undefined;
|
|
51
|
+
readonly borderBottomDimColor?: boolean | undefined;
|
|
52
|
+
readonly borderLeftDimColor?: boolean | undefined;
|
|
53
|
+
readonly borderRightDimColor?: boolean | undefined;
|
|
54
|
+
readonly overflow?: "visible" | "hidden" | undefined;
|
|
55
|
+
readonly overflowX?: "visible" | "hidden" | undefined;
|
|
56
|
+
readonly overflowY?: "visible" | "hidden" | undefined;
|
|
57
|
+
readonly backgroundColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
58
|
+
} & {
|
|
59
|
+
readonly 'aria-label'?: string;
|
|
60
|
+
readonly 'aria-hidden'?: boolean;
|
|
61
|
+
readonly 'aria-role'?: "button" | "checkbox" | "combobox" | "list" | "listbox" | "listitem" | "menu" | "menuitem" | "option" | "progressbar" | "radio" | "radiogroup" | "tab" | "tablist" | "table" | "textbox" | "timer" | "toolbar";
|
|
62
|
+
readonly 'aria-state'?: {
|
|
63
|
+
readonly busy?: boolean;
|
|
64
|
+
readonly checked?: boolean;
|
|
65
|
+
readonly disabled?: boolean;
|
|
66
|
+
readonly expanded?: boolean;
|
|
67
|
+
readonly multiline?: boolean;
|
|
68
|
+
readonly multiselectable?: boolean;
|
|
69
|
+
readonly readonly?: boolean;
|
|
70
|
+
readonly required?: boolean;
|
|
71
|
+
readonly selected?: boolean;
|
|
72
|
+
};
|
|
73
|
+
} & {
|
|
74
|
+
children?: React.ReactNode | undefined;
|
|
75
|
+
} & React.RefAttributes<import("ink").DOMElement>>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { LOGIN_FIELD_DEFINITIONS } from "./login.js";
|
|
4
|
+
const e = React.createElement;
|
|
5
|
+
export function loginFormViewHeight(state) {
|
|
6
|
+
return state.step === "provider" ? state.providers.length + 3 : LOGIN_FIELD_DEFINITIONS[state.provider].length + 4;
|
|
7
|
+
}
|
|
8
|
+
export function LoginFormView({ state, width }) {
|
|
9
|
+
const contentWidth = Math.max(30, width);
|
|
10
|
+
if (state.step === "provider") {
|
|
11
|
+
return e(Box, { flexDirection: "column", marginTop: 1 }, e(Text, { color: "cyan", bold: true }, fitToWidth(`Login: choose provider · saving to ${state.envPath}`, contentWidth)), ...state.providers.map((provider, index) => e(Text, { key: `provider-${provider}-${index}`, color: "white" }, e(Text, { color: index === state.selectedProviderIndex ? "black" : "white", backgroundColor: index === state.selectedProviderIndex ? "cyan" : undefined }, `${index + 1}.`.padStart(3)), e(Text, { color: "gray" }, " "), e(Text, { color: "cyan" }, provider))), e(Text, { color: "gray" }, fitToWidth("arrows select · Enter edit config · Esc close", contentWidth)));
|
|
12
|
+
}
|
|
13
|
+
const fields = LOGIN_FIELD_DEFINITIONS[state.provider];
|
|
14
|
+
const maxLabel = Math.max(...fields.map((field) => field.label.length));
|
|
15
|
+
return e(Box, { flexDirection: "column", marginTop: 1 }, e(Text, { color: "cyan", bold: true }, fitToWidth(`Login: ${state.provider} · ${state.envPath}`, contentWidth)), ...fields.map((field, index) => {
|
|
16
|
+
const selected = index === state.selectedFieldIndex;
|
|
17
|
+
const rawValue = state.values[field.key] ?? "";
|
|
18
|
+
const visibleValue = formatLoginFieldValue(field, rawValue, selected ? state.cursor : undefined);
|
|
19
|
+
const placeholder = rawValue ? "" : (field.placeholder ? ` (${field.placeholder})` : "");
|
|
20
|
+
return e(Text, { key: field.key, color: "white" }, e(Text, { color: selected ? "black" : "white", backgroundColor: selected ? "cyan" : undefined }, `${index + 1}.`.padStart(3)), e(Text, { color: field.required ? "yellow" : "gray" }, ` ${field.label.padEnd(maxLabel)} `), e(Text, { color: field.scope === "shared" ? "blue" : "gray" }, field.scope === "shared" ? "shared " : "provider "), e(Text, { color: rawValue ? "white" : "gray" }, fitToWidth(`${visibleValue}${placeholder}`, Math.max(8, contentWidth - maxLabel - 14))));
|
|
21
|
+
}), e(Text, { color: "gray" }, fitToWidth("Up/Down field · Left/Right cursor · type edit · Tab cycle choices · Enter save · Esc back/cancel", contentWidth)), e(Text, { color: "gray" }, fitToWidth("Provider fields save as OPENAI_* / ANTHROPIC_*; shared runtime fields save as MODEL_*.", contentWidth)));
|
|
22
|
+
}
|
|
23
|
+
function formatLoginFieldValue(field, value, cursor) {
|
|
24
|
+
const display = field.secret && value ? "\u2022".repeat(Math.min(value.length, 24)) : value;
|
|
25
|
+
if (cursor === undefined)
|
|
26
|
+
return display;
|
|
27
|
+
const safeCursor = Math.max(0, Math.min(cursor, display.length));
|
|
28
|
+
const selected = display[safeCursor] ?? " ";
|
|
29
|
+
return `${display.slice(0, safeCursor)}\u2588${selected === " " ? "" : display.slice(safeCursor + 1)}`;
|
|
30
|
+
}
|
|
31
|
+
function fitToWidth(value, width) {
|
|
32
|
+
if (value.length === width)
|
|
33
|
+
return value;
|
|
34
|
+
if (value.length > width)
|
|
35
|
+
return value.slice(0, width);
|
|
36
|
+
return value.padEnd(width, " ");
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=login-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-view.js","sourceRoot":"","sources":["../../src/repl/login-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;AAE9B,MAAM,UAAU,mBAAmB,CAAC,KAAqB;IACvD,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACrH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAA4C;IACtF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,CAAC,CACN,GAAG,EACH,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,EACzC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,sCAAsC,KAAK,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC,EACvH,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAC3C,IAAI,EACJ,EAAE,GAAG,EAAE,YAAY,QAAQ,IAAI,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EACxD,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,KAAK,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EACvL,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAC/B,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CACrC,CAAC,EACF,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,+CAA+C,EAAE,YAAY,CAAC,CAAC,CACtG,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,CACN,GAAG,EACH,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,EACzC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,CAAC,UAAU,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC,EAC/G,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,KAAK,KAAK,KAAK,CAAC,kBAAkB,CAAC;QACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,YAAY,GAAG,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjG,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzF,OAAO,CAAC,CACN,IAAI,EACJ,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAClC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC7H,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC3F,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAClH,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,GAAG,YAAY,GAAG,WAAW,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,CACxI,CAAC;IACJ,CAAC,CAAC,EACF,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,kGAAkG,EAAE,YAAY,CAAC,CAAC,EACxJ,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,wFAAwF,EAAE,YAAY,CAAC,CAAC,CAC/I,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAA2B,EAAE,KAAa,EAAE,MAA0B;IACnG,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5F,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;IAC5C,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;AACzG,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,KAAa;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { LoginFieldDefinition, LoginFormState, LoginProviderName } from "./repl-types.js";
|
|
2
|
+
export declare const LOGIN_PROVIDERS: LoginProviderName[];
|
|
3
|
+
export declare const LOGIN_FIELD_DEFINITIONS: Record<LoginProviderName, LoginFieldDefinition[]>;
|
|
4
|
+
export declare function moveLoginProviderSelection(state: LoginFormState, delta: number): LoginFormState;
|
|
5
|
+
export declare function moveLoginFieldSelection(state: LoginFormState, delta: number): LoginFormState;
|
|
6
|
+
export declare function cycleLoginFieldOption(state: LoginFormState, field: LoginFieldDefinition): LoginFormState;
|
|
7
|
+
export declare function insertLoginFieldText(state: LoginFormState, field: LoginFieldDefinition, value: string): LoginFormState;
|
|
8
|
+
export declare function deleteLoginFieldCharacter(state: LoginFormState, field: LoginFieldDefinition): LoginFormState;
|
|
9
|
+
export declare function validateLoginForm(state: LoginFormState): string | undefined;
|
|
10
|
+
export declare function createLoginFormState(envPath?: string): LoginFormState;
|
|
11
|
+
export declare function loginFormForProvider(provider: LoginProviderName, envPath: string, env?: Record<string, string>): LoginFormState;
|
|
12
|
+
export declare function parseLoginProvider(value: string | undefined): LoginProviderName | undefined;
|
|
13
|
+
export declare function applyLoginFormToProcessEnv(state: LoginFormState): void;
|
|
14
|
+
export declare function saveLoginFormToEnv(state: LoginFormState): Promise<void>;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { getUserDotEnvPath } from "../model/env.js";
|
|
2
|
+
import { applyEnvUpdatesToProcess, parseEnvFileSafe, writeEnvUpdates } from "./env-file.js";
|
|
3
|
+
export const LOGIN_PROVIDERS = ["openai", "anthropic"];
|
|
4
|
+
const SHARED_LOGIN_FIELDS = [
|
|
5
|
+
{ key: "reasoningEffort", label: "Reasoning effort", envKey: "MODEL_REASONING_EFFORT", scope: "shared", options: ["", "off", "none", "minimal", "low", "medium", "high", "xhigh", "max"] },
|
|
6
|
+
{ key: "reasoningSummary", label: "Reasoning summary", envKey: "MODEL_REASONING_SUMMARY", scope: "shared", options: ["", "auto", "concise", "detailed"] },
|
|
7
|
+
{ key: "maxOutputTokens", label: "Max output tokens", envKey: "MODEL_MAX_OUTPUT_TOKENS", scope: "shared", placeholder: "800" },
|
|
8
|
+
{ key: "timeoutMs", label: "Timeout ms", envKey: "MODEL_TIMEOUT_MS", scope: "shared", placeholder: "120000" },
|
|
9
|
+
{ key: "streamIdleTimeoutMs", label: "Stream idle timeout ms", envKey: "MODEL_STREAM_IDLE_TIMEOUT_MS", scope: "shared", placeholder: "120000" },
|
|
10
|
+
{ key: "maxRetries", label: "Max retries", envKey: "MODEL_MAX_RETRIES", scope: "shared", placeholder: "2" },
|
|
11
|
+
];
|
|
12
|
+
export const LOGIN_FIELD_DEFINITIONS = {
|
|
13
|
+
openai: [
|
|
14
|
+
{ key: "apiKey", label: "API key", envKey: "OPENAI_API_KEY", scope: "provider", required: true, secret: true, placeholder: "sk-..." },
|
|
15
|
+
{ key: "baseUrl", label: "Base URL", envKey: "OPENAI_BASE_URL", scope: "provider", placeholder: "https://api.openai.com" },
|
|
16
|
+
{ key: "model", label: "Model", envKey: "OPENAI_MODEL", scope: "provider", required: true, placeholder: "gpt-5.5" },
|
|
17
|
+
{ key: "fallbackModel", label: "Fallback model", envKey: "OPENAI_FALLBACK_MODEL", scope: "provider" },
|
|
18
|
+
{ key: "endpoint", label: "Endpoint", envKey: "OPENAI_ENDPOINT", scope: "provider", placeholder: "auto", options: ["auto", "responses", "chat"] },
|
|
19
|
+
...SHARED_LOGIN_FIELDS,
|
|
20
|
+
],
|
|
21
|
+
anthropic: [
|
|
22
|
+
{ key: "apiKey", label: "API key", envKey: "ANTHROPIC_API_KEY", scope: "provider", required: true, secret: true, placeholder: "sk-ant-..." },
|
|
23
|
+
{ key: "baseUrl", label: "Base URL", envKey: "ANTHROPIC_BASE_URL", scope: "provider", placeholder: "https://api.anthropic.com" },
|
|
24
|
+
{ key: "model", label: "Model", envKey: "ANTHROPIC_MODEL", scope: "provider", required: true, placeholder: "claude-sonnet-4-6" },
|
|
25
|
+
{ key: "fallbackModel", label: "Fallback model", envKey: "ANTHROPIC_FALLBACK_MODEL", scope: "provider" },
|
|
26
|
+
{ key: "version", label: "Anthropic version", envKey: "ANTHROPIC_VERSION", scope: "provider", placeholder: "2023-06-01" },
|
|
27
|
+
...SHARED_LOGIN_FIELDS,
|
|
28
|
+
],
|
|
29
|
+
};
|
|
30
|
+
const DEPRECATED_MODEL_ENV_KEYS = [
|
|
31
|
+
"MODEL_API_KEY",
|
|
32
|
+
"MODEL_BASE_URL",
|
|
33
|
+
"MODEL_ID",
|
|
34
|
+
"MODEL_FALLBACK_ID",
|
|
35
|
+
"MODEL_ENDPOINT",
|
|
36
|
+
"OPENAI_PROVIDER",
|
|
37
|
+
"OPENAI_REASONING_EFFORT",
|
|
38
|
+
"OPENAI_REASONING_SUMMARY",
|
|
39
|
+
"OPENAI_MAX_OUTPUT_TOKENS",
|
|
40
|
+
"OPENAI_TIMEOUT_MS",
|
|
41
|
+
"OPENAI_STREAM_IDLE_TIMEOUT_MS",
|
|
42
|
+
"OPENAI_MAX_RETRIES",
|
|
43
|
+
"ANTHROPIC_REASONING_EFFORT",
|
|
44
|
+
"ANTHROPIC_REASONING_SUMMARY",
|
|
45
|
+
"ANTHROPIC_MAX_OUTPUT_TOKENS",
|
|
46
|
+
"ANTHROPIC_TIMEOUT_MS",
|
|
47
|
+
"ANTHROPIC_STREAM_IDLE_TIMEOUT_MS",
|
|
48
|
+
"ANTHROPIC_MAX_RETRIES",
|
|
49
|
+
];
|
|
50
|
+
export function moveLoginProviderSelection(state, delta) {
|
|
51
|
+
const selectedProviderIndex = (state.selectedProviderIndex + delta + state.providers.length) % state.providers.length;
|
|
52
|
+
return { ...state, selectedProviderIndex, provider: state.providers[selectedProviderIndex] ?? state.provider };
|
|
53
|
+
}
|
|
54
|
+
export function moveLoginFieldSelection(state, delta) {
|
|
55
|
+
const fields = LOGIN_FIELD_DEFINITIONS[state.provider];
|
|
56
|
+
const selectedFieldIndex = (state.selectedFieldIndex + delta + fields.length) % fields.length;
|
|
57
|
+
const field = fields[selectedFieldIndex];
|
|
58
|
+
return { ...state, selectedFieldIndex, cursor: field ? (state.values[field.key] ?? "").length : 0 };
|
|
59
|
+
}
|
|
60
|
+
export function cycleLoginFieldOption(state, field) {
|
|
61
|
+
const options = field.options ?? [];
|
|
62
|
+
const current = state.values[field.key] ?? "";
|
|
63
|
+
const index = options.indexOf(current);
|
|
64
|
+
const next = options[(index + 1 + options.length) % options.length] ?? "";
|
|
65
|
+
return { ...state, values: { ...state.values, [field.key]: next }, cursor: next.length };
|
|
66
|
+
}
|
|
67
|
+
export function insertLoginFieldText(state, field, value) {
|
|
68
|
+
const current = state.values[field.key] ?? "";
|
|
69
|
+
const cursor = Math.max(0, Math.min(state.cursor, current.length));
|
|
70
|
+
const next = `${current.slice(0, cursor)}${value}${current.slice(cursor)}`;
|
|
71
|
+
return { ...state, values: { ...state.values, [field.key]: next }, cursor: cursor + value.length };
|
|
72
|
+
}
|
|
73
|
+
export function deleteLoginFieldCharacter(state, field) {
|
|
74
|
+
const current = state.values[field.key] ?? "";
|
|
75
|
+
const cursor = Math.max(0, Math.min(state.cursor, current.length));
|
|
76
|
+
if (cursor <= 0)
|
|
77
|
+
return state;
|
|
78
|
+
const next = `${current.slice(0, cursor - 1)}${current.slice(cursor)}`;
|
|
79
|
+
return { ...state, values: { ...state.values, [field.key]: next }, cursor: cursor - 1 };
|
|
80
|
+
}
|
|
81
|
+
export function validateLoginForm(state) {
|
|
82
|
+
for (const field of LOGIN_FIELD_DEFINITIONS[state.provider]) {
|
|
83
|
+
const value = (state.values[field.key] ?? "").trim();
|
|
84
|
+
if (field.required && !value)
|
|
85
|
+
return `${field.label} is required.`;
|
|
86
|
+
if (field.options?.length && value && !field.options.includes(value))
|
|
87
|
+
return `${field.label} must be one of: ${field.options.filter(Boolean).join(", ")}`;
|
|
88
|
+
}
|
|
89
|
+
for (const fieldKey of ["maxOutputTokens", "timeoutMs", "streamIdleTimeoutMs", "maxRetries"]) {
|
|
90
|
+
const value = state.values[fieldKey]?.trim();
|
|
91
|
+
if (value && !Number.isFinite(Number(value)))
|
|
92
|
+
return `${fieldKey} must be a number.`;
|
|
93
|
+
}
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
export function createLoginFormState(envPath = getUserDotEnvPath()) {
|
|
97
|
+
const env = parseEnvFileSafe(envPath);
|
|
98
|
+
const currentProvider = parseLoginProvider(env.MODEL_PROVIDER ?? process.env.MODEL_PROVIDER) ?? guessLoginProvider(env);
|
|
99
|
+
return loginFormForProvider(currentProvider, envPath, env);
|
|
100
|
+
}
|
|
101
|
+
export function loginFormForProvider(provider, envPath, env = parseEnvFileSafe(envPath)) {
|
|
102
|
+
const selectedProviderIndex = Math.max(0, LOGIN_PROVIDERS.indexOf(provider));
|
|
103
|
+
return {
|
|
104
|
+
step: "provider",
|
|
105
|
+
providers: LOGIN_PROVIDERS,
|
|
106
|
+
selectedProviderIndex,
|
|
107
|
+
provider,
|
|
108
|
+
selectedFieldIndex: 0,
|
|
109
|
+
cursor: 0,
|
|
110
|
+
values: loginValuesForProvider(provider, env),
|
|
111
|
+
envPath,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function loginValuesForProvider(provider, env) {
|
|
115
|
+
const values = {};
|
|
116
|
+
for (const field of LOGIN_FIELD_DEFINITIONS[provider]) {
|
|
117
|
+
values[field.key] = env[field.envKey] ?? "";
|
|
118
|
+
}
|
|
119
|
+
if (!values.baseUrl)
|
|
120
|
+
values.baseUrl = defaultBaseUrlForLoginProvider(provider);
|
|
121
|
+
if (!values.model)
|
|
122
|
+
values.model = defaultModelForLoginProvider(provider);
|
|
123
|
+
if (provider === "openai" && !values.endpoint)
|
|
124
|
+
values.endpoint = "auto";
|
|
125
|
+
return values;
|
|
126
|
+
}
|
|
127
|
+
export function parseLoginProvider(value) {
|
|
128
|
+
if (value === "openai" || value === "anthropic")
|
|
129
|
+
return value;
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
function guessLoginProvider(env) {
|
|
133
|
+
if (env.ANTHROPIC_API_KEY ?? process.env.ANTHROPIC_API_KEY)
|
|
134
|
+
return "anthropic";
|
|
135
|
+
return "openai";
|
|
136
|
+
}
|
|
137
|
+
function defaultBaseUrlForLoginProvider(provider) {
|
|
138
|
+
if (provider === "anthropic")
|
|
139
|
+
return "https://api.anthropic.com";
|
|
140
|
+
return "https://api.openai.com";
|
|
141
|
+
}
|
|
142
|
+
function defaultModelForLoginProvider(provider) {
|
|
143
|
+
if (provider === "anthropic")
|
|
144
|
+
return "claude-sonnet-4-6";
|
|
145
|
+
return "gpt-5.5";
|
|
146
|
+
}
|
|
147
|
+
export function applyLoginFormToProcessEnv(state) {
|
|
148
|
+
applyEnvUpdatesToProcess(envEntriesForLoginForm(state));
|
|
149
|
+
for (const key of DEPRECATED_MODEL_ENV_KEYS)
|
|
150
|
+
delete process.env[key];
|
|
151
|
+
}
|
|
152
|
+
export async function saveLoginFormToEnv(state) {
|
|
153
|
+
await writeEnvUpdates(state.envPath, envEntriesForLoginForm(state), DEPRECATED_MODEL_ENV_KEYS);
|
|
154
|
+
}
|
|
155
|
+
function envEntriesForLoginForm(state) {
|
|
156
|
+
const entries = {
|
|
157
|
+
MODEL_PROVIDER: state.provider,
|
|
158
|
+
};
|
|
159
|
+
for (const field of LOGIN_FIELD_DEFINITIONS[state.provider]) {
|
|
160
|
+
const value = (state.values[field.key] ?? "").trim();
|
|
161
|
+
entries[field.envKey] = value || undefined;
|
|
162
|
+
}
|
|
163
|
+
return entries;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/repl/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { Message } from "../types/messages.js";
|
|
3
|
+
import type { UiLine } from "./repl-types.js";
|
|
4
|
+
export declare const MessageList: React.NamedExoticComponent<{
|
|
5
|
+
lines: UiLine[];
|
|
6
|
+
width: number;
|
|
7
|
+
liveMaxLines?: number;
|
|
8
|
+
lineIndexOffset?: number;
|
|
9
|
+
onMarkdownRenderComplete?: (lineId: number, renderKey: string) => void;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function MessageBlock({ line, width, blockIndex, contentWidth, toolWidth, liveMaxLines, onMarkdownRenderComplete }: {
|
|
12
|
+
line: UiLine;
|
|
13
|
+
width: number;
|
|
14
|
+
blockIndex: number;
|
|
15
|
+
contentWidth?: number;
|
|
16
|
+
toolWidth?: number;
|
|
17
|
+
liveMaxLines?: number;
|
|
18
|
+
onMarkdownRenderComplete?: (lineId: number, renderKey: string) => void;
|
|
19
|
+
}): React.FunctionComponentElement<{
|
|
20
|
+
readonly position?: "absolute" | "relative" | undefined;
|
|
21
|
+
readonly columnGap?: number | undefined;
|
|
22
|
+
readonly rowGap?: number | undefined;
|
|
23
|
+
readonly gap?: number | undefined;
|
|
24
|
+
readonly margin?: number | undefined;
|
|
25
|
+
readonly marginX?: number | undefined;
|
|
26
|
+
readonly marginY?: number | undefined;
|
|
27
|
+
readonly marginTop?: number | undefined;
|
|
28
|
+
readonly marginBottom?: number | undefined;
|
|
29
|
+
readonly marginLeft?: number | undefined;
|
|
30
|
+
readonly marginRight?: number | undefined;
|
|
31
|
+
readonly padding?: number | undefined;
|
|
32
|
+
readonly paddingX?: number | undefined;
|
|
33
|
+
readonly paddingY?: number | undefined;
|
|
34
|
+
readonly paddingTop?: number | undefined;
|
|
35
|
+
readonly paddingBottom?: number | undefined;
|
|
36
|
+
readonly paddingLeft?: number | undefined;
|
|
37
|
+
readonly paddingRight?: number | undefined;
|
|
38
|
+
readonly flexGrow?: number | undefined;
|
|
39
|
+
readonly flexShrink?: number | undefined;
|
|
40
|
+
readonly flexDirection?: "row" | "column" | "row-reverse" | "column-reverse" | undefined;
|
|
41
|
+
readonly flexBasis?: number | string | undefined;
|
|
42
|
+
readonly flexWrap?: "nowrap" | "wrap" | "wrap-reverse" | undefined;
|
|
43
|
+
readonly alignItems?: "flex-start" | "center" | "flex-end" | "stretch" | undefined;
|
|
44
|
+
readonly alignSelf?: "flex-start" | "center" | "flex-end" | "auto" | undefined;
|
|
45
|
+
readonly justifyContent?: "flex-start" | "flex-end" | "space-between" | "space-around" | "space-evenly" | "center" | undefined;
|
|
46
|
+
readonly width?: number | string | undefined;
|
|
47
|
+
readonly height?: number | string | undefined;
|
|
48
|
+
readonly minWidth?: number | string | undefined;
|
|
49
|
+
readonly minHeight?: number | string | undefined;
|
|
50
|
+
readonly display?: "flex" | "none" | undefined;
|
|
51
|
+
readonly borderStyle?: (keyof import("cli-boxes").Boxes | import("cli-boxes").BoxStyle) | undefined;
|
|
52
|
+
readonly borderTop?: boolean | undefined;
|
|
53
|
+
readonly borderBottom?: boolean | undefined;
|
|
54
|
+
readonly borderLeft?: boolean | undefined;
|
|
55
|
+
readonly borderRight?: boolean | undefined;
|
|
56
|
+
readonly borderColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
57
|
+
readonly borderTopColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
58
|
+
readonly borderBottomColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
59
|
+
readonly borderLeftColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
60
|
+
readonly borderRightColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
61
|
+
readonly borderDimColor?: boolean | undefined;
|
|
62
|
+
readonly borderTopDimColor?: boolean | undefined;
|
|
63
|
+
readonly borderBottomDimColor?: boolean | undefined;
|
|
64
|
+
readonly borderLeftDimColor?: boolean | undefined;
|
|
65
|
+
readonly borderRightDimColor?: boolean | undefined;
|
|
66
|
+
readonly overflow?: "visible" | "hidden" | undefined;
|
|
67
|
+
readonly overflowX?: "visible" | "hidden" | undefined;
|
|
68
|
+
readonly overflowY?: "visible" | "hidden" | undefined;
|
|
69
|
+
readonly backgroundColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
70
|
+
} & {
|
|
71
|
+
readonly 'aria-label'?: string;
|
|
72
|
+
readonly 'aria-hidden'?: boolean;
|
|
73
|
+
readonly 'aria-role'?: "button" | "checkbox" | "combobox" | "list" | "listbox" | "listitem" | "menu" | "menuitem" | "option" | "progressbar" | "radio" | "radiogroup" | "tab" | "tablist" | "table" | "textbox" | "timer" | "toolbar";
|
|
74
|
+
readonly 'aria-state'?: {
|
|
75
|
+
readonly busy?: boolean;
|
|
76
|
+
readonly checked?: boolean;
|
|
77
|
+
readonly disabled?: boolean;
|
|
78
|
+
readonly expanded?: boolean;
|
|
79
|
+
readonly multiline?: boolean;
|
|
80
|
+
readonly multiselectable?: boolean;
|
|
81
|
+
readonly readonly?: boolean;
|
|
82
|
+
readonly required?: boolean;
|
|
83
|
+
readonly selected?: boolean;
|
|
84
|
+
};
|
|
85
|
+
} & {
|
|
86
|
+
children?: React.ReactNode | undefined;
|
|
87
|
+
} & React.RefAttributes<import("ink").DOMElement>>;
|
|
88
|
+
export declare function lineNeedsDynamicRender(line: UiLine, width: number): boolean;
|
|
89
|
+
export declare function lineRenderContentWidth(line: UiLine, terminalWidth: number): number;
|
|
90
|
+
export declare function renderMessage(message: Message, append: (line: Omit<UiLine, "id">) => number, activeAssistantId?: number, options?: {
|
|
91
|
+
includeToolUseBlocks?: boolean;
|
|
92
|
+
includeThinkingBlocks?: boolean;
|
|
93
|
+
}): boolean;
|
|
94
|
+
export declare function renderToolResultMessage(message: Message, append: (line: Omit<UiLine, "id">) => number, renderedToolResultIds: Set<string>): boolean;
|
|
95
|
+
export declare function assistantText(message: Message): string | undefined;
|
|
96
|
+
export declare function thinkingText(message: Message): string | undefined;
|
|
97
|
+
export declare function systemLine(text: string, summaryMaxLines?: number): Omit<UiLine, "id">;
|
|
98
|
+
export declare function thinkingLine(text: string, live?: boolean): Omit<UiLine, "id">;
|
|
99
|
+
export declare function metaLine(text: string): Omit<UiLine, "id">;
|