@jx-grxf/patchpilot 1.0.0 → 1.2.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/README.md +51 -16
- package/dist/cli.js +46 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/agent.d.ts +44 -1
- package/dist/core/agent.js +617 -70
- package/dist/core/agent.js.map +1 -1
- package/dist/core/clipboard.d.ts +14 -0
- package/dist/core/clipboard.js +134 -0
- package/dist/core/clipboard.js.map +1 -0
- package/dist/core/codex.d.ts +8 -0
- package/dist/core/codex.js +28 -2
- package/dist/core/codex.js.map +1 -1
- package/dist/core/compaction.d.ts +23 -0
- package/dist/core/compaction.js +145 -0
- package/dist/core/compaction.js.map +1 -0
- package/dist/core/contextFormat.d.ts +21 -0
- package/dist/core/contextFormat.js +87 -0
- package/dist/core/contextFormat.js.map +1 -0
- package/dist/core/contextItem.d.ts +41 -0
- package/dist/core/contextItem.js +93 -0
- package/dist/core/contextItem.js.map +1 -0
- package/dist/core/contextStore.d.ts +48 -0
- package/dist/core/contextStore.js +306 -0
- package/dist/core/contextStore.js.map +1 -0
- package/dist/core/doctor.js +9 -8
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/gemini.js +10 -4
- package/dist/core/gemini.js.map +1 -1
- package/dist/core/geminiWrapper.d.ts +43 -2
- package/dist/core/geminiWrapper.js +582 -42
- package/dist/core/geminiWrapper.js.map +1 -1
- package/dist/core/http.js +70 -6
- package/dist/core/http.js.map +1 -1
- package/dist/core/json.d.ts +1 -1
- package/dist/core/json.js +18 -20
- package/dist/core/json.js.map +1 -1
- package/dist/core/nvidia.d.ts +1 -1
- package/dist/core/nvidia.js +13 -4
- package/dist/core/nvidia.js.map +1 -1
- package/dist/core/ollama.js +13 -3
- package/dist/core/ollama.js.map +1 -1
- package/dist/core/openrouter.js +15 -6
- package/dist/core/openrouter.js.map +1 -1
- package/dist/core/reasoning.js +3 -0
- package/dist/core/reasoning.js.map +1 -1
- package/dist/core/session.js +9 -3
- package/dist/core/session.js.map +1 -1
- package/dist/core/tokenAccounting.d.ts +4 -0
- package/dist/core/tokenAccounting.js +75 -13
- package/dist/core/tokenAccounting.js.map +1 -1
- package/dist/core/types.d.ts +58 -3
- package/dist/core/types.js +30 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/updateCheck.d.ts +19 -0
- package/dist/core/updateCheck.js +103 -0
- package/dist/core/updateCheck.js.map +1 -0
- package/dist/core/workspace.d.ts +29 -0
- package/dist/core/workspace.js +1271 -92
- package/dist/core/workspace.js.map +1 -1
- package/dist/tui/App.d.ts +1 -0
- package/dist/tui/App.js +1346 -112
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/commands.js +109 -6
- package/dist/tui/commands.js.map +1 -1
- package/dist/tui/components/ApprovalPanel.js +16 -1
- package/dist/tui/components/ApprovalPanel.js.map +1 -1
- package/dist/tui/components/CommandSuggestions.js +26 -3
- package/dist/tui/components/CommandSuggestions.js.map +1 -1
- package/dist/tui/components/Composer.d.ts +3 -0
- package/dist/tui/components/Composer.js +57 -5
- package/dist/tui/components/Composer.js.map +1 -1
- package/dist/tui/components/ExperimentalPanel.d.ts +1 -1
- package/dist/tui/components/ExperimentalPanel.js +5 -0
- package/dist/tui/components/ExperimentalPanel.js.map +1 -1
- package/dist/tui/components/OnboardingPanel.d.ts +12 -0
- package/dist/tui/components/OnboardingPanel.js +69 -21
- package/dist/tui/components/OnboardingPanel.js.map +1 -1
- package/dist/tui/components/StartupBanner.d.ts +4 -0
- package/dist/tui/components/StartupBanner.js +9 -0
- package/dist/tui/components/StartupBanner.js.map +1 -0
- package/dist/tui/components/Transcript.d.ts +7 -0
- package/dist/tui/components/Transcript.js +86 -16
- package/dist/tui/components/Transcript.js.map +1 -1
- package/dist/tui/contextCommands.d.ts +8 -0
- package/dist/tui/contextCommands.js +205 -0
- package/dist/tui/contextCommands.js.map +1 -0
- package/dist/tui/experimental/AnimatedText.d.ts +38 -0
- package/dist/tui/experimental/AnimatedText.js +55 -0
- package/dist/tui/experimental/AnimatedText.js.map +1 -0
- package/dist/tui/experimental/Banner.d.ts +10 -0
- package/dist/tui/experimental/Banner.js +33 -0
- package/dist/tui/experimental/Banner.js.map +1 -0
- package/dist/tui/experimental/CommandPalette.d.ts +11 -0
- package/dist/tui/experimental/CommandPalette.js +25 -0
- package/dist/tui/experimental/CommandPalette.js.map +1 -0
- package/dist/tui/experimental/ExperimentalShell.d.ts +58 -0
- package/dist/tui/experimental/ExperimentalShell.js +366 -0
- package/dist/tui/experimental/ExperimentalShell.js.map +1 -0
- package/dist/tui/experimental/ThemePicker.d.ts +13 -0
- package/dist/tui/experimental/ThemePicker.js +12 -0
- package/dist/tui/experimental/ThemePicker.js.map +1 -0
- package/dist/tui/experimental/attachments.d.ts +35 -0
- package/dist/tui/experimental/attachments.js +244 -0
- package/dist/tui/experimental/attachments.js.map +1 -0
- package/dist/tui/experimental/composer.d.ts +24 -0
- package/dist/tui/experimental/composer.js +84 -0
- package/dist/tui/experimental/composer.js.map +1 -0
- package/dist/tui/experimental/geminiPricing.d.ts +16 -0
- package/dist/tui/experimental/geminiPricing.js +39 -0
- package/dist/tui/experimental/geminiPricing.js.map +1 -0
- package/dist/tui/experimental/layout.d.ts +46 -0
- package/dist/tui/experimental/layout.js +112 -0
- package/dist/tui/experimental/layout.js.map +1 -0
- package/dist/tui/experimental/theme.d.ts +35 -0
- package/dist/tui/experimental/theme.js +86 -0
- package/dist/tui/experimental/theme.js.map +1 -0
- package/dist/tui/experimental/transcriptRows.d.ts +20 -0
- package/dist/tui/experimental/transcriptRows.js +169 -0
- package/dist/tui/experimental/transcriptRows.js.map +1 -0
- package/dist/tui/experimental/ultraModes.d.ts +46 -0
- package/dist/tui/experimental/ultraModes.js +95 -0
- package/dist/tui/experimental/ultraModes.js.map +1 -0
- package/dist/tui/experimental/ultramaxx.d.ts +19 -0
- package/dist/tui/experimental/ultramaxx.js +43 -0
- package/dist/tui/experimental/ultramaxx.js.map +1 -0
- package/dist/tui/format.d.ts +4 -2
- package/dist/tui/format.js +14 -0
- package/dist/tui/format.js.map +1 -1
- package/dist/tui/hosts.js +7 -1
- package/dist/tui/hosts.js.map +1 -1
- package/dist/tui/layout.d.ts +26 -0
- package/dist/tui/layout.js +66 -0
- package/dist/tui/layout.js.map +1 -0
- package/dist/tui/modelSelection.d.ts +1 -1
- package/dist/tui/modelSelection.js +8 -6
- package/dist/tui/modelSelection.js.map +1 -1
- package/dist/tui/modes.d.ts +7 -0
- package/dist/tui/modes.js +12 -0
- package/dist/tui/modes.js.map +1 -1
- package/dist/tui/onboardingPreferences.d.ts +37 -0
- package/dist/tui/onboardingPreferences.js +118 -0
- package/dist/tui/onboardingPreferences.js.map +1 -0
- package/dist/tui/runStatus.d.ts +50 -0
- package/dist/tui/runStatus.js +164 -0
- package/dist/tui/runStatus.js.map +1 -0
- package/dist/tui/types.d.ts +8 -0
- package/dist/tui/types.js.map +1 -1
- package/docs/architecture.md +115 -0
- package/docs/gemini-wrapper.md +23 -0
- package/docs/product-context.md +43 -0
- package/docs/releases/v1.0.1.md +25 -0
- package/docs/releases/v1.1.0.md +30 -0
- package/docs/releases/v1.2.0.md +28 -0
- package/package.json +4 -2
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared visual language for the experimental shell: consistent symbols and
|
|
3
|
+
* colors so tools, approvals, and run state read at a glance.
|
|
4
|
+
*/
|
|
5
|
+
export const symbols = {
|
|
6
|
+
user: "›",
|
|
7
|
+
assistant: "◆",
|
|
8
|
+
tool: "⚡",
|
|
9
|
+
diff: "±",
|
|
10
|
+
approval: "⚠",
|
|
11
|
+
// Non-destructive prompts get their own quiet glyphs so a benign "update
|
|
12
|
+
// available" never reads like a destructive-action gate.
|
|
13
|
+
update: "⬆",
|
|
14
|
+
reauth: "↻",
|
|
15
|
+
info: "ℹ",
|
|
16
|
+
error: "✗",
|
|
17
|
+
final: "✓",
|
|
18
|
+
status: "•",
|
|
19
|
+
arrow: "→",
|
|
20
|
+
bullet: "·",
|
|
21
|
+
pin: "📌",
|
|
22
|
+
todoDone: "✓",
|
|
23
|
+
todoActive: "▸",
|
|
24
|
+
todoPending: "○",
|
|
25
|
+
caret: "▏",
|
|
26
|
+
// Todo / progress bar track. Filled is solid, empty is a light rule so the
|
|
27
|
+
// bar keeps contrast on both dark and light terminal themes.
|
|
28
|
+
barFilled: "█",
|
|
29
|
+
barEmpty: "░",
|
|
30
|
+
};
|
|
31
|
+
/** Marker glyph for a transcript block kind. */
|
|
32
|
+
export function blockSymbol(kind) {
|
|
33
|
+
switch (kind) {
|
|
34
|
+
case "user":
|
|
35
|
+
return symbols.user;
|
|
36
|
+
case "assistant":
|
|
37
|
+
return symbols.assistant;
|
|
38
|
+
case "tool":
|
|
39
|
+
return symbols.tool;
|
|
40
|
+
case "diff":
|
|
41
|
+
return symbols.diff;
|
|
42
|
+
case "approval":
|
|
43
|
+
return symbols.approval;
|
|
44
|
+
case "error":
|
|
45
|
+
return symbols.error;
|
|
46
|
+
case "final":
|
|
47
|
+
return symbols.final;
|
|
48
|
+
case "status":
|
|
49
|
+
return symbols.status;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Accent color for a transcript block kind. */
|
|
53
|
+
export function blockColor(kind, danger) {
|
|
54
|
+
switch (kind) {
|
|
55
|
+
case "user":
|
|
56
|
+
return "white";
|
|
57
|
+
case "assistant":
|
|
58
|
+
return "cyan";
|
|
59
|
+
case "tool":
|
|
60
|
+
return danger ? "red" : "green";
|
|
61
|
+
case "diff":
|
|
62
|
+
return "yellow";
|
|
63
|
+
case "approval":
|
|
64
|
+
return "yellow";
|
|
65
|
+
case "error":
|
|
66
|
+
return "red";
|
|
67
|
+
case "final":
|
|
68
|
+
return "green";
|
|
69
|
+
case "status":
|
|
70
|
+
return "gray";
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Border / accent color that reflects the current work state. */
|
|
74
|
+
export function workStateColor(workState) {
|
|
75
|
+
if (workState === "error") {
|
|
76
|
+
return "red";
|
|
77
|
+
}
|
|
78
|
+
if (workState === "waiting_approval" || workState === "editing" || workState === "verifying") {
|
|
79
|
+
return "yellow";
|
|
80
|
+
}
|
|
81
|
+
if (workState === "done" || workState === "idle") {
|
|
82
|
+
return "green";
|
|
83
|
+
}
|
|
84
|
+
return "cyan";
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/tui/experimental/theme.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,GAAG;IACT,SAAS,EAAE,GAAG;IACd,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,GAAG;IACb,yEAAyE;IACzE,yDAAyD;IACzD,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,IAAI;IACT,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,GAAG;IAChB,KAAK,EAAE,GAAG;IACV,2EAA2E;IAC3E,6DAA6D;IAC7D,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,GAAG;CACL,CAAC;AAIX,gDAAgD;AAChD,MAAM,UAAU,WAAW,CAAC,IAAyB;IACnD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC;QACtB,KAAK,WAAW;YACd,OAAO,OAAO,CAAC,SAAS,CAAC;QAC3B,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC;QACtB,KAAK,UAAU;YACb,OAAO,OAAO,CAAC,QAAQ,CAAC;QAC1B,KAAK,OAAO;YACV,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,MAAM,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,UAAU,CAAC,IAAyB,EAAE,MAAe;IACnE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,OAAO,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QAClC,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,SAAS,KAAK,kBAAkB,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;QAC7F,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACjD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { InkColor } from "../format.js";
|
|
2
|
+
import type { LogLine } from "../types.js";
|
|
3
|
+
import type { AgentTodoItem } from "../../core/types.js";
|
|
4
|
+
export type ShellRow = {
|
|
5
|
+
symbol: string;
|
|
6
|
+
label: string;
|
|
7
|
+
text: string;
|
|
8
|
+
color: InkColor;
|
|
9
|
+
symbolColor?: InkColor;
|
|
10
|
+
labelColor?: InkColor;
|
|
11
|
+
textColor?: InkColor;
|
|
12
|
+
effect?: "rainbow";
|
|
13
|
+
bold?: boolean;
|
|
14
|
+
dim?: boolean;
|
|
15
|
+
};
|
|
16
|
+
/** Flatten transcript log lines into wrapped, renderable rows. */
|
|
17
|
+
export declare function buildShellRows(lines: LogLine[], width: number): ShellRow[];
|
|
18
|
+
/** Build the todo dock rows. */
|
|
19
|
+
export declare function buildTodoDock(todos: AgentTodoItem[], width: number, frame: number): ShellRow[];
|
|
20
|
+
export declare function truncate(value: string, width: number): string;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { blockColor, blockSymbol, symbols } from "./theme.js";
|
|
2
|
+
const LABEL_WIDTH = 12;
|
|
3
|
+
const GUTTER = 4; // symbol cell (2) + label gap (2)
|
|
4
|
+
/** Flatten transcript log lines into wrapped, renderable rows. */
|
|
5
|
+
export function buildShellRows(lines, width) {
|
|
6
|
+
const textWidth = Math.max(16, width - LABEL_WIDTH - GUTTER);
|
|
7
|
+
return lines.flatMap((line) => {
|
|
8
|
+
const danger = line.tone === "danger" || line.tone === "warning";
|
|
9
|
+
const color = blockColor(line.kind, danger);
|
|
10
|
+
const symbol = blockSymbol(line.kind);
|
|
11
|
+
const label = line.kind === "tool" && line.tool ? line.tool : line.label;
|
|
12
|
+
const labelColor = labelAccentColor(line.kind, label, line.workState, danger);
|
|
13
|
+
const textColor = bodyColor(line.kind, danger);
|
|
14
|
+
const effect = label.toLowerCase() === "ultramaxx" ? "rainbow" : undefined;
|
|
15
|
+
const textRows = wrapText(line.text, textWidth);
|
|
16
|
+
const metadata = [
|
|
17
|
+
line.preview ? `preview ${line.preview}` : "",
|
|
18
|
+
line.workState ? `state ${line.workState}` : "",
|
|
19
|
+
]
|
|
20
|
+
.filter(Boolean)
|
|
21
|
+
.join(" ");
|
|
22
|
+
const detailSources = [line.detail, metadata].filter((value) => Boolean(value));
|
|
23
|
+
const detailRows = detailSources.flatMap((detail) => wrapText(detail, textWidth));
|
|
24
|
+
const rows = textRows.map((text, index) => ({
|
|
25
|
+
symbol: index === 0 ? symbol : "",
|
|
26
|
+
label: index === 0 ? label.slice(0, LABEL_WIDTH) : "",
|
|
27
|
+
text,
|
|
28
|
+
color,
|
|
29
|
+
symbolColor: labelColor,
|
|
30
|
+
labelColor,
|
|
31
|
+
textColor,
|
|
32
|
+
effect: index === 0 ? effect : undefined,
|
|
33
|
+
bold: index === 0,
|
|
34
|
+
}));
|
|
35
|
+
for (const detail of detailRows) {
|
|
36
|
+
rows.push({ symbol: "", label: "", text: detail, color: "gray", dim: true });
|
|
37
|
+
}
|
|
38
|
+
if (detailRows.length > 0) {
|
|
39
|
+
rows.push({ symbol: "", label: "", text: "", color: "gray" });
|
|
40
|
+
}
|
|
41
|
+
return rows;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function labelAccentColor(kind, label, workState, danger) {
|
|
45
|
+
const normalized = label.toLowerCase();
|
|
46
|
+
if (danger || normalized === "stop" || workState === "error") {
|
|
47
|
+
return "red";
|
|
48
|
+
}
|
|
49
|
+
if (normalized === "ultramaxx") {
|
|
50
|
+
return "magenta";
|
|
51
|
+
}
|
|
52
|
+
if (normalized === "planning" || workState === "planning" || normalized === "usage") {
|
|
53
|
+
return "blue";
|
|
54
|
+
}
|
|
55
|
+
if (normalized === "gemini-wrapper" || normalized === "gemini" || normalized === "attach") {
|
|
56
|
+
return "cyan";
|
|
57
|
+
}
|
|
58
|
+
if (normalized === "update" || normalized === "approval" || workState === "waiting_approval" || workState === "editing" || workState === "verifying") {
|
|
59
|
+
return "yellow";
|
|
60
|
+
}
|
|
61
|
+
if (kind === "tool") {
|
|
62
|
+
return "green";
|
|
63
|
+
}
|
|
64
|
+
if (kind === "diff") {
|
|
65
|
+
return "yellow";
|
|
66
|
+
}
|
|
67
|
+
if (kind === "final" || workState === "done" || workState === "idle") {
|
|
68
|
+
return "green";
|
|
69
|
+
}
|
|
70
|
+
if (kind === "assistant") {
|
|
71
|
+
return "cyan";
|
|
72
|
+
}
|
|
73
|
+
return "gray";
|
|
74
|
+
}
|
|
75
|
+
function bodyColor(kind, danger) {
|
|
76
|
+
if (danger || kind === "error") {
|
|
77
|
+
return "red";
|
|
78
|
+
}
|
|
79
|
+
if (kind === "user") {
|
|
80
|
+
return "white";
|
|
81
|
+
}
|
|
82
|
+
if (kind === "final") {
|
|
83
|
+
return "white";
|
|
84
|
+
}
|
|
85
|
+
return "gray";
|
|
86
|
+
}
|
|
87
|
+
/** Build the todo dock rows. */
|
|
88
|
+
export function buildTodoDock(todos, width, frame) {
|
|
89
|
+
if (todos.length === 0) {
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
const textWidth = Math.max(16, width - LABEL_WIDTH - GUTTER);
|
|
93
|
+
const completed = todos.filter((todo) => todo.status === "completed").length;
|
|
94
|
+
const rows = [
|
|
95
|
+
{
|
|
96
|
+
symbol: symbols.bullet,
|
|
97
|
+
label: "todos",
|
|
98
|
+
text: `${completed}/${todos.length} complete`,
|
|
99
|
+
color: "cyan",
|
|
100
|
+
bold: true,
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
for (const todo of todos.slice(0, 6)) {
|
|
104
|
+
const isActive = todo.status === "in_progress";
|
|
105
|
+
const marker = todo.status === "completed"
|
|
106
|
+
? symbols.todoDone
|
|
107
|
+
: isActive
|
|
108
|
+
? frame % 2 === 0
|
|
109
|
+
? symbols.todoActive
|
|
110
|
+
: symbols.bullet
|
|
111
|
+
: symbols.todoPending;
|
|
112
|
+
const color = todo.status === "completed" ? "green" : isActive ? "yellow" : "gray";
|
|
113
|
+
rows.push({
|
|
114
|
+
symbol: "",
|
|
115
|
+
label: marker,
|
|
116
|
+
text: truncate(todo.content, textWidth),
|
|
117
|
+
color,
|
|
118
|
+
bold: isActive,
|
|
119
|
+
dim: todo.status === "pending",
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return rows;
|
|
123
|
+
}
|
|
124
|
+
export function truncate(value, width) {
|
|
125
|
+
if (value.length <= width) {
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
return `${value.slice(0, Math.max(0, width - 1))}…`;
|
|
129
|
+
}
|
|
130
|
+
function wrapText(value, width) {
|
|
131
|
+
const rows = value.split(/\r?\n/).flatMap((line) => wrapLine(line, width));
|
|
132
|
+
return rows.length > 0 ? rows : [""];
|
|
133
|
+
}
|
|
134
|
+
function wrapLine(value, width) {
|
|
135
|
+
const words = value.trimEnd().split(/\s+/).filter(Boolean);
|
|
136
|
+
if (words.length === 0) {
|
|
137
|
+
return [""];
|
|
138
|
+
}
|
|
139
|
+
const rows = [];
|
|
140
|
+
let currentRow = "";
|
|
141
|
+
for (const word of words) {
|
|
142
|
+
for (const chunk of chunkWord(word, width)) {
|
|
143
|
+
const nextRow = currentRow ? `${currentRow} ${chunk}` : chunk;
|
|
144
|
+
if (nextRow.length <= width) {
|
|
145
|
+
currentRow = nextRow;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (currentRow) {
|
|
149
|
+
rows.push(currentRow);
|
|
150
|
+
}
|
|
151
|
+
currentRow = chunk;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (currentRow) {
|
|
155
|
+
rows.push(currentRow);
|
|
156
|
+
}
|
|
157
|
+
return rows.length > 0 ? rows : [""];
|
|
158
|
+
}
|
|
159
|
+
function chunkWord(word, width) {
|
|
160
|
+
if (word.length <= width) {
|
|
161
|
+
return [word];
|
|
162
|
+
}
|
|
163
|
+
const chunks = [];
|
|
164
|
+
for (let index = 0; index < word.length; index += width) {
|
|
165
|
+
chunks.push(word.slice(index, index + width));
|
|
166
|
+
}
|
|
167
|
+
return chunks;
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=transcriptRows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcriptRows.js","sourceRoot":"","sources":["../../../src/tui/experimental/transcriptRows.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ultra-modes — power-mode keywords the user can drop **anywhere** in a prompt
|
|
3
|
+
* (not only as a leading `/command`). Several can be combined in one prompt as
|
|
4
|
+
* long as they do not conflict; an incompatible pair is reported so the TUI can
|
|
5
|
+
* block the send instead of running a contradictory request.
|
|
6
|
+
*
|
|
7
|
+
* - `ultramaxx` — escalate: xhigh reasoning, large step budget, advisors on.
|
|
8
|
+
* - `ultracheap` — minimize: cheapest model, low reasoning, terse, advisors off.
|
|
9
|
+
* - `ultrafast` — speed: lowest-latency settings, fixed short thinking, no advisors.
|
|
10
|
+
* - `ultrafocus` — restrict the agent to a single file/folder (`ultrafocus:path`).
|
|
11
|
+
* - `ultraloop` — expand the run budget and require explicit self-verification
|
|
12
|
+
* before the final answer.
|
|
13
|
+
*/
|
|
14
|
+
export type UltraMode = "maxx" | "cheap" | "fast" | "focus" | "loop";
|
|
15
|
+
export declare const ultraModeKeyword: Record<UltraMode, string>;
|
|
16
|
+
/** All ultra keywords, longest first so matching is unambiguous. */
|
|
17
|
+
export declare const ultraKeywords: readonly string[];
|
|
18
|
+
export type UltraModeParse = {
|
|
19
|
+
/** Distinct modes found, in detection order. */
|
|
20
|
+
modes: UltraMode[];
|
|
21
|
+
/** Optional path argument captured from `ultrafocus:<path>` / `ultrafocus <path>`. */
|
|
22
|
+
focusPath: string | null;
|
|
23
|
+
/** The prompt with every ultra keyword (and focus path) removed. */
|
|
24
|
+
cleaned: string;
|
|
25
|
+
/** Human-readable conflict message, or null when the combination is valid. */
|
|
26
|
+
conflict: string | null;
|
|
27
|
+
};
|
|
28
|
+
/** True when the text contains any ultra keyword (anywhere, not just the start). */
|
|
29
|
+
export declare function hasUltraMode(text: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Parse every ultra keyword out of a prompt, capture the focus path, strip the
|
|
32
|
+
* keywords, and validate the combination.
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseUltraModes(text: string): UltraModeParse;
|
|
35
|
+
/** A short label like "ultramaxx + ultrafocus" for transcript messages. */
|
|
36
|
+
export declare function describeUltraModes(modes: UltraMode[]): string;
|
|
37
|
+
export type UltraSegment = {
|
|
38
|
+
text: string;
|
|
39
|
+
/** The ultra mode this segment spells out, or null for plain text. */
|
|
40
|
+
mode: UltraMode | null;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Split a composer line into plain and ultra-keyword segments so each keyword
|
|
44
|
+
* can be rendered with its own colour gradient — anywhere in the line.
|
|
45
|
+
*/
|
|
46
|
+
export declare function splitUltraSegments(line: string): UltraSegment[];
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export const ultraModeKeyword = {
|
|
2
|
+
maxx: "ultramaxx",
|
|
3
|
+
cheap: "ultracheap",
|
|
4
|
+
fast: "ultrafast",
|
|
5
|
+
focus: "ultrafocus",
|
|
6
|
+
loop: "ultraloop",
|
|
7
|
+
};
|
|
8
|
+
/** All ultra keywords, longest first so matching is unambiguous. */
|
|
9
|
+
export const ultraKeywords = Object.values(ultraModeKeyword);
|
|
10
|
+
/**
|
|
11
|
+
* Pairs that must never run together. `maxx` and `cheap` sit on opposite ends
|
|
12
|
+
* of the cost/effort axis — escalating and minimizing at the same time is
|
|
13
|
+
* contradictory, so the prompt cannot be sent.
|
|
14
|
+
*/
|
|
15
|
+
const incompatiblePairs = [
|
|
16
|
+
["maxx", "cheap"],
|
|
17
|
+
["maxx", "fast"],
|
|
18
|
+
];
|
|
19
|
+
// `ultrafocus` optionally swallows a following path token (`:path`, `=path`,
|
|
20
|
+
// or a bare path after whitespace). A quoted path keeps spaces intact.
|
|
21
|
+
const focusPattern = /\bultrafocus\b(?:\s*[:=]\s*|\s+)?("[^"]+"|'[^']+'|[^\s]+)?/i;
|
|
22
|
+
const plainKeywordPattern = (keyword) => new RegExp(`(?<![\\w-])${keyword}(?![\\w-])`, "ig");
|
|
23
|
+
/** True when the text contains any ultra keyword (anywhere, not just the start). */
|
|
24
|
+
export function hasUltraMode(text) {
|
|
25
|
+
return ultraKeywords.some((keyword) => plainKeywordPattern(keyword).test(text));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse every ultra keyword out of a prompt, capture the focus path, strip the
|
|
29
|
+
* keywords, and validate the combination.
|
|
30
|
+
*/
|
|
31
|
+
export function parseUltraModes(text) {
|
|
32
|
+
const modes = [];
|
|
33
|
+
let cleaned = text;
|
|
34
|
+
let focusPath = null;
|
|
35
|
+
// `ultrafocus` first — it may carry a path argument that must be removed too.
|
|
36
|
+
const focusMatch = cleaned.match(focusPattern);
|
|
37
|
+
if (focusMatch) {
|
|
38
|
+
modes.push("focus");
|
|
39
|
+
const raw = focusMatch[1]?.trim() ?? "";
|
|
40
|
+
focusPath = raw ? raw.replace(/^["']|["']$/g, "").trim() || null : null;
|
|
41
|
+
cleaned = cleaned.replace(focusPattern, " ");
|
|
42
|
+
}
|
|
43
|
+
for (const mode of ["maxx", "cheap", "fast", "loop"]) {
|
|
44
|
+
const pattern = plainKeywordPattern(ultraModeKeyword[mode]);
|
|
45
|
+
if (pattern.test(cleaned)) {
|
|
46
|
+
modes.push(mode);
|
|
47
|
+
cleaned = cleaned.replace(plainKeywordPattern(ultraModeKeyword[mode]), " ");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
cleaned = cleaned.replace(/\s{2,}/g, " ").trim();
|
|
51
|
+
let conflict = null;
|
|
52
|
+
for (const [left, right] of incompatiblePairs) {
|
|
53
|
+
if (modes.includes(left) && modes.includes(right)) {
|
|
54
|
+
conflict = `${ultraModeKeyword[left]} and ${ultraModeKeyword[right]} cannot be combined — one escalates effort and cost, the other minimizes it. Keep only one.`;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return { modes: orderModes(modes), focusPath, cleaned, conflict };
|
|
59
|
+
}
|
|
60
|
+
/** Stable display order regardless of where the keywords appeared. */
|
|
61
|
+
function orderModes(modes) {
|
|
62
|
+
const order = ["maxx", "cheap", "fast", "focus", "loop"];
|
|
63
|
+
return order.filter((mode) => modes.includes(mode));
|
|
64
|
+
}
|
|
65
|
+
/** A short label like "ultramaxx + ultrafocus" for transcript messages. */
|
|
66
|
+
export function describeUltraModes(modes) {
|
|
67
|
+
return modes.map((mode) => ultraModeKeyword[mode]).join(" + ");
|
|
68
|
+
}
|
|
69
|
+
const keywordToMode = new Map(Object.entries(ultraModeKeyword).map(([mode, keyword]) => [keyword, mode]));
|
|
70
|
+
// One pass that finds any ultra keyword as a whole word, anywhere in the line.
|
|
71
|
+
const anyKeywordPattern = new RegExp(`(?<![\\w-])(${ultraKeywords.join("|")})(?![\\w-])`, "ig");
|
|
72
|
+
/**
|
|
73
|
+
* Split a composer line into plain and ultra-keyword segments so each keyword
|
|
74
|
+
* can be rendered with its own colour gradient — anywhere in the line.
|
|
75
|
+
*/
|
|
76
|
+
export function splitUltraSegments(line) {
|
|
77
|
+
if (!line) {
|
|
78
|
+
return [{ text: "", mode: null }];
|
|
79
|
+
}
|
|
80
|
+
const segments = [];
|
|
81
|
+
let lastIndex = 0;
|
|
82
|
+
anyKeywordPattern.lastIndex = 0;
|
|
83
|
+
for (let match = anyKeywordPattern.exec(line); match; match = anyKeywordPattern.exec(line)) {
|
|
84
|
+
if (match.index > lastIndex) {
|
|
85
|
+
segments.push({ text: line.slice(lastIndex, match.index), mode: null });
|
|
86
|
+
}
|
|
87
|
+
segments.push({ text: match[0], mode: keywordToMode.get(match[0].toLowerCase()) ?? null });
|
|
88
|
+
lastIndex = match.index + match[0].length;
|
|
89
|
+
}
|
|
90
|
+
if (lastIndex < line.length) {
|
|
91
|
+
segments.push({ text: line.slice(lastIndex), mode: null });
|
|
92
|
+
}
|
|
93
|
+
return segments.length > 0 ? segments : [{ text: line, mode: null }];
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=ultraModes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ultraModes.js","sourceRoot":"","sources":["../../../src/tui/experimental/ultraModes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ultramaxx` is a power-mode prefix: starting a prompt with it makes the
|
|
3
|
+
* backend think and work extra hard for that run (escalated reasoning effort,
|
|
4
|
+
* a larger step budget, advisor subagents, mandatory planning).
|
|
5
|
+
*/
|
|
6
|
+
export declare const ultramaxxKeyword = "ultramaxx";
|
|
7
|
+
/** True when the text starts with an explicit ultramaxx activator. */
|
|
8
|
+
export declare function hasUltramaxx(text: string): boolean;
|
|
9
|
+
/** Remove the ultramaxx activator from the task text before it reaches the model. */
|
|
10
|
+
export declare function stripUltramaxx(text: string): string;
|
|
11
|
+
export type TextSegment = {
|
|
12
|
+
text: string;
|
|
13
|
+
ultramaxx: boolean;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Split a line into plain and `ultramaxx` segments so the composer can render
|
|
17
|
+
* the keyword with the rainbow animation while leaving the rest untouched.
|
|
18
|
+
*/
|
|
19
|
+
export declare function splitUltramaxxSegments(line: string): TextSegment[];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ultramaxx` is a power-mode prefix: starting a prompt with it makes the
|
|
3
|
+
* backend think and work extra hard for that run (escalated reasoning effort,
|
|
4
|
+
* a larger step budget, advisor subagents, mandatory planning).
|
|
5
|
+
*/
|
|
6
|
+
export const ultramaxxKeyword = "ultramaxx";
|
|
7
|
+
const ultramaxxActivationPattern = /^\s*(?:[/!#]ultramaxx|ultramaxx)(?=$|[\s:.-])/i;
|
|
8
|
+
const ultramaxxStripPattern = /^\s*(?:[/!#]ultramaxx|ultramaxx)(?=$|[\s:.-])(?:\s*[:.-]\s*|\s+)?/i;
|
|
9
|
+
const ultramaxxTokenAtStartPattern = /^(\s*(?:[/!#])?)(ultramaxx)(?=$|[\s:.-])/i;
|
|
10
|
+
/** True when the text starts with an explicit ultramaxx activator. */
|
|
11
|
+
export function hasUltramaxx(text) {
|
|
12
|
+
return ultramaxxActivationPattern.test(text);
|
|
13
|
+
}
|
|
14
|
+
/** Remove the ultramaxx activator from the task text before it reaches the model. */
|
|
15
|
+
export function stripUltramaxx(text) {
|
|
16
|
+
return text.replace(ultramaxxStripPattern, "").replace(/\s{2,}/g, " ").trim();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Split a line into plain and `ultramaxx` segments so the composer can render
|
|
20
|
+
* the keyword with the rainbow animation while leaving the rest untouched.
|
|
21
|
+
*/
|
|
22
|
+
export function splitUltramaxxSegments(line) {
|
|
23
|
+
if (!line) {
|
|
24
|
+
return [{ text: "", ultramaxx: false }];
|
|
25
|
+
}
|
|
26
|
+
const match = line.match(ultramaxxTokenAtStartPattern);
|
|
27
|
+
if (!match || match.index !== 0) {
|
|
28
|
+
return [{ text: line, ultramaxx: false }];
|
|
29
|
+
}
|
|
30
|
+
const prefix = match[1] ?? "";
|
|
31
|
+
const token = match[2] ?? ultramaxxKeyword;
|
|
32
|
+
const segments = [];
|
|
33
|
+
if (prefix) {
|
|
34
|
+
segments.push({ text: prefix, ultramaxx: false });
|
|
35
|
+
}
|
|
36
|
+
segments.push({ text: token, ultramaxx: true });
|
|
37
|
+
const rest = line.slice(prefix.length + token.length);
|
|
38
|
+
if (rest) {
|
|
39
|
+
segments.push({ text: rest, ultramaxx: false });
|
|
40
|
+
}
|
|
41
|
+
return segments;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ultramaxx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ultramaxx.js","sourceRoot":"","sources":["../../../src/tui/experimental/ultramaxx.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAE5C,MAAM,0BAA0B,GAAG,gDAAgD,CAAC;AACpF,MAAM,qBAAqB,GAAG,oEAAoE,CAAC;AACnG,MAAM,4BAA4B,GAAG,2CAA2C,CAAC;AAEjF,sEAAsE;AACtE,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAChF,CAAC;AAOD;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC;IAC3C,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,IAAI,EAAE,CAAC;QACT,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/tui/format.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ModelTelemetry, SessionTelemetry } from "../core/types.js";
|
|
2
2
|
import type { GpuStats } from "./systemStats.js";
|
|
3
3
|
import type { LogTone } from "./types.js";
|
|
4
|
-
export type InkColor = "gray" | "white" | "green" | "yellow" | "red" | "cyan";
|
|
5
|
-
export type StatusColor = "gray" | "green" | "yellow" | "red" | "cyan";
|
|
4
|
+
export type InkColor = "gray" | "white" | "green" | "yellow" | "red" | "cyan" | "blue" | "magenta";
|
|
5
|
+
export type StatusColor = "gray" | "green" | "yellow" | "red" | "cyan" | "blue" | "magenta";
|
|
6
6
|
export declare function getModelHint(model: string): {
|
|
7
7
|
text: string;
|
|
8
8
|
color: "green" | "yellow";
|
|
@@ -10,6 +10,8 @@ export declare function getModelHint(model: string): {
|
|
|
10
10
|
export declare function formatOllamaHost(value: string): string;
|
|
11
11
|
export declare function formatTokens(telemetry: ModelTelemetry | null): string;
|
|
12
12
|
export declare function formatSessionTokens(session: SessionTelemetry): string;
|
|
13
|
+
/** Compact token count for the live run counter — "6.1k", "175k", "42". */
|
|
14
|
+
export declare function formatCompactTokens(value: number): string;
|
|
13
15
|
export declare function formatCost(value: number | null): string;
|
|
14
16
|
export declare function formatSpeed(telemetry: ModelTelemetry | null): string;
|
|
15
17
|
export declare function formatLatency(telemetry: ModelTelemetry | null): string;
|
package/dist/tui/format.js
CHANGED
|
@@ -52,6 +52,20 @@ export function formatSessionTokens(session) {
|
|
|
52
52
|
: "";
|
|
53
53
|
return `session ${session.requests} req, ${session.promptTokens} in${cacheSuffix}, ${session.responseTokens} out`;
|
|
54
54
|
}
|
|
55
|
+
/** Compact token count for the live run counter — "6.1k", "175k", "42". */
|
|
56
|
+
export function formatCompactTokens(value) {
|
|
57
|
+
const tokens = Number.isFinite(value) && value > 0 ? Math.floor(value) : 0;
|
|
58
|
+
if (tokens < 1000) {
|
|
59
|
+
return String(tokens);
|
|
60
|
+
}
|
|
61
|
+
if (tokens < 10_000) {
|
|
62
|
+
return `${(tokens / 1000).toFixed(1)}k`;
|
|
63
|
+
}
|
|
64
|
+
if (tokens < 1_000_000) {
|
|
65
|
+
return `${Math.round(tokens / 1000)}k`;
|
|
66
|
+
}
|
|
67
|
+
return `${(tokens / 1_000_000).toFixed(1)}M`;
|
|
68
|
+
}
|
|
55
69
|
function formatCacheHitRate(cachedTokens, promptTokens) {
|
|
56
70
|
return `${Math.round((cachedTokens / promptTokens) * 100)}%`;
|
|
57
71
|
}
|
package/dist/tui/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/tui/format.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/tui/format.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/hosts.js
CHANGED
|
@@ -49,7 +49,13 @@ export function normalizeOllamaUrl(value) {
|
|
|
49
49
|
return normalizeOllamaBaseUrl(value);
|
|
50
50
|
}
|
|
51
51
|
export async function checkOllamaHost(value, options = {}) {
|
|
52
|
-
|
|
52
|
+
let url;
|
|
53
|
+
try {
|
|
54
|
+
url = normalizeOllamaUrl(value);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
53
59
|
const controller = new AbortController();
|
|
54
60
|
const timeout = setTimeout(() => controller.abort(), options.timeoutMs ?? 500);
|
|
55
61
|
try {
|