neoctl 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -0
- package/dist/agents/agent-definition.d.ts +39 -0
- package/dist/agents/agent-definition.js +57 -0
- package/dist/agents/agent-definition.js.map +1 -0
- package/dist/agents/agent-tool.d.ts +38 -0
- package/dist/agents/agent-tool.js +336 -0
- package/dist/agents/agent-tool.js.map +1 -0
- package/dist/agents/local-agent-task.d.ts +52 -0
- package/dist/agents/local-agent-task.js +63 -0
- package/dist/agents/local-agent-task.js.map +1 -0
- package/dist/agents/smoke-agents.d.ts +1 -0
- package/dist/agents/smoke-agents.js +142 -0
- package/dist/agents/smoke-agents.js.map +1 -0
- package/dist/agents/team.d.ts +10 -0
- package/dist/agents/team.js +2 -0
- package/dist/agents/team.js.map +1 -0
- package/dist/app/app-state.d.ts +21 -0
- package/dist/app/app-state.js +24 -0
- package/dist/app/app-state.js.map +1 -0
- package/dist/context/compaction.d.ts +49 -0
- package/dist/context/compaction.js +334 -0
- package/dist/context/compaction.js.map +1 -0
- package/dist/context/context-manager.d.ts +53 -0
- package/dist/context/context-manager.js +98 -0
- package/dist/context/context-manager.js.map +1 -0
- package/dist/context/prompts.d.ts +22 -0
- package/dist/context/prompts.js +84 -0
- package/dist/context/prompts.js.map +1 -0
- package/dist/context/smoke-context.d.ts +1 -0
- package/dist/context/smoke-context.js +151 -0
- package/dist/context/smoke-context.js.map +1 -0
- package/dist/core/assistant-output-filter.d.ts +9 -0
- package/dist/core/assistant-output-filter.js +78 -0
- package/dist/core/assistant-output-filter.js.map +1 -0
- package/dist/core/context-metrics.d.ts +10 -0
- package/dist/core/context-metrics.js +77 -0
- package/dist/core/context-metrics.js.map +1 -0
- package/dist/core/message-pipeline.d.ts +10 -0
- package/dist/core/message-pipeline.js +138 -0
- package/dist/core/message-pipeline.js.map +1 -0
- package/dist/core/query-engine.d.ts +86 -0
- package/dist/core/query-engine.js +337 -0
- package/dist/core/query-engine.js.map +1 -0
- package/dist/core/query.d.ts +47 -0
- package/dist/core/query.js +408 -0
- package/dist/core/query.js.map +1 -0
- package/dist/core/run-agent.d.ts +48 -0
- package/dist/core/run-agent.js +150 -0
- package/dist/core/run-agent.js.map +1 -0
- package/dist/core/smoke-core-loop.d.ts +1 -0
- package/dist/core/smoke-core-loop.js +42 -0
- package/dist/core/smoke-core-loop.js.map +1 -0
- package/dist/core/state.d.ts +37 -0
- package/dist/core/state.js +31 -0
- package/dist/core/state.js.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/model/communication-logger.d.ts +30 -0
- package/dist/model/communication-logger.js +218 -0
- package/dist/model/communication-logger.js.map +1 -0
- package/dist/model/config.d.ts +25 -0
- package/dist/model/config.js +65 -0
- package/dist/model/config.js.map +1 -0
- package/dist/model/context-window.d.ts +32 -0
- package/dist/model/context-window.js +76 -0
- package/dist/model/context-window.js.map +1 -0
- package/dist/model/credentials.d.ts +13 -0
- package/dist/model/credentials.js +19 -0
- package/dist/model/credentials.js.map +1 -0
- package/dist/model/env.d.ts +8 -0
- package/dist/model/env.js +36 -0
- package/dist/model/env.js.map +1 -0
- package/dist/model/errors.d.ts +42 -0
- package/dist/model/errors.js +74 -0
- package/dist/model/errors.js.map +1 -0
- package/dist/model/http-transport.d.ts +26 -0
- package/dist/model/http-transport.js +118 -0
- package/dist/model/http-transport.js.map +1 -0
- package/dist/model/model-gateway.d.ts +103 -0
- package/dist/model/model-gateway.js +15 -0
- package/dist/model/model-gateway.js.map +1 -0
- package/dist/model/model-metadata.json +677 -0
- package/dist/model/openai-adapter.d.ts +34 -0
- package/dist/model/openai-adapter.js +152 -0
- package/dist/model/openai-adapter.js.map +1 -0
- package/dist/model/openai-chat-mapper.d.ts +11 -0
- package/dist/model/openai-chat-mapper.js +114 -0
- package/dist/model/openai-chat-mapper.js.map +1 -0
- package/dist/model/openai-mappers.d.ts +21 -0
- package/dist/model/openai-mappers.js +261 -0
- package/dist/model/openai-mappers.js.map +1 -0
- package/dist/model/openai-responses-adapter.d.ts +2 -0
- package/dist/model/openai-responses-adapter.js +2 -0
- package/dist/model/openai-responses-adapter.js.map +1 -0
- package/dist/model/openai-responses-mapper.d.ts +11 -0
- package/dist/model/openai-responses-mapper.js +218 -0
- package/dist/model/openai-responses-mapper.js.map +1 -0
- package/dist/model/provider-adapter.d.ts +17 -0
- package/dist/model/provider-adapter.js +2 -0
- package/dist/model/provider-adapter.js.map +1 -0
- package/dist/model/provider-factory.d.ts +4 -0
- package/dist/model/provider-factory.js +29 -0
- package/dist/model/provider-factory.js.map +1 -0
- package/dist/model/retry-runner.d.ts +8 -0
- package/dist/model/retry-runner.js +28 -0
- package/dist/model/retry-runner.js.map +1 -0
- package/dist/model/smoke-openai.d.ts +1 -0
- package/dist/model/smoke-openai.js +44 -0
- package/dist/model/smoke-openai.js.map +1 -0
- package/dist/model/smoke-responses-mapper.d.ts +1 -0
- package/dist/model/smoke-responses-mapper.js +72 -0
- package/dist/model/smoke-responses-mapper.js.map +1 -0
- package/dist/model/sse-decoder.d.ts +5 -0
- package/dist/model/sse-decoder.js +79 -0
- package/dist/model/sse-decoder.js.map +1 -0
- package/dist/repl/clipboard.d.ts +14 -0
- package/dist/repl/clipboard.js +92 -0
- package/dist/repl/clipboard.js.map +1 -0
- package/dist/repl/commands.d.ts +38 -0
- package/dist/repl/commands.js +86 -0
- package/dist/repl/commands.js.map +1 -0
- package/dist/repl/index.d.ts +2 -0
- package/dist/repl/index.js +2836 -0
- package/dist/repl/index.js.map +1 -0
- package/dist/repl/markdown-renderer.d.ts +81 -0
- package/dist/repl/markdown-renderer.js +546 -0
- package/dist/repl/markdown-renderer.js.map +1 -0
- package/dist/repl/render.d.ts +2 -0
- package/dist/repl/render.js +45 -0
- package/dist/repl/render.js.map +1 -0
- package/dist/repl/status-line.d.ts +19 -0
- package/dist/repl/status-line.js +160 -0
- package/dist/repl/status-line.js.map +1 -0
- package/dist/safety/audit.d.ts +10 -0
- package/dist/safety/audit.js +2 -0
- package/dist/safety/audit.js.map +1 -0
- package/dist/safety/permissions.d.ts +10 -0
- package/dist/safety/permissions.js +2 -0
- package/dist/safety/permissions.js.map +1 -0
- package/dist/safety/sandbox.d.ts +6 -0
- package/dist/safety/sandbox.js +2 -0
- package/dist/safety/sandbox.js.map +1 -0
- package/dist/session/session-store.d.ts +98 -0
- package/dist/session/session-store.js +249 -0
- package/dist/session/session-store.js.map +1 -0
- package/dist/session/smoke-session.d.ts +1 -0
- package/dist/session/smoke-session.js +85 -0
- package/dist/session/smoke-session.js.map +1 -0
- package/dist/session/tool-result-memory.d.ts +64 -0
- package/dist/session/tool-result-memory.js +303 -0
- package/dist/session/tool-result-memory.js.map +1 -0
- package/dist/skills/skill-tool.d.ts +28 -0
- package/dist/skills/skill-tool.js +107 -0
- package/dist/skills/skill-tool.js.map +1 -0
- package/dist/skills/smoke-skills.d.ts +1 -0
- package/dist/skills/smoke-skills.js +60 -0
- package/dist/skills/smoke-skills.js.map +1 -0
- package/dist/tasks/task-store.d.ts +43 -0
- package/dist/tasks/task-store.js +150 -0
- package/dist/tasks/task-store.js.map +1 -0
- package/dist/tasks/task-tools.d.ts +31 -0
- package/dist/tasks/task-tools.js +232 -0
- package/dist/tasks/task-tools.js.map +1 -0
- package/dist/tools/builtins/echo-tool.d.ts +4 -0
- package/dist/tools/builtins/echo-tool.js +26 -0
- package/dist/tools/builtins/echo-tool.js.map +1 -0
- package/dist/tools/builtins/edit-tool.d.ts +30 -0
- package/dist/tools/builtins/edit-tool.js +423 -0
- package/dist/tools/builtins/edit-tool.js.map +1 -0
- package/dist/tools/builtins/exec-tool.d.ts +18 -0
- package/dist/tools/builtins/exec-tool.js +290 -0
- package/dist/tools/builtins/exec-tool.js.map +1 -0
- package/dist/tools/builtins/filesystem-tools.d.ts +16 -0
- package/dist/tools/builtins/filesystem-tools.js +306 -0
- package/dist/tools/builtins/filesystem-tools.js.map +1 -0
- package/dist/tools/builtins/grep-tool.d.ts +56 -0
- package/dist/tools/builtins/grep-tool.js +320 -0
- package/dist/tools/builtins/grep-tool.js.map +1 -0
- package/dist/tools/builtins/ripgrep-binary.d.ts +6 -0
- package/dist/tools/builtins/ripgrep-binary.js +51 -0
- package/dist/tools/builtins/ripgrep-binary.js.map +1 -0
- package/dist/tools/builtins/search-providers.d.ts +49 -0
- package/dist/tools/builtins/search-providers.js +240 -0
- package/dist/tools/builtins/search-providers.js.map +1 -0
- package/dist/tools/builtins/search-tool.d.ts +18 -0
- package/dist/tools/builtins/search-tool.js +171 -0
- package/dist/tools/builtins/search-tool.js.map +1 -0
- package/dist/tools/registry.d.ts +18 -0
- package/dist/tools/registry.js +69 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/run-tool-use.d.ts +13 -0
- package/dist/tools/run-tool-use.js +113 -0
- package/dist/tools/run-tool-use.js.map +1 -0
- package/dist/tools/schema.d.ts +2 -0
- package/dist/tools/schema.js +61 -0
- package/dist/tools/schema.js.map +1 -0
- package/dist/tools/smoke-tool-system.d.ts +1 -0
- package/dist/tools/smoke-tool-system.js +204 -0
- package/dist/tools/smoke-tool-system.js.map +1 -0
- package/dist/tools/streaming-tool-executor.d.ts +19 -0
- package/dist/tools/streaming-tool-executor.js +89 -0
- package/dist/tools/streaming-tool-executor.js.map +1 -0
- package/dist/tools/tool-orchestration.d.ts +15 -0
- package/dist/tools/tool-orchestration.js +89 -0
- package/dist/tools/tool-orchestration.js.map +1 -0
- package/dist/tools/tool.d.ts +121 -0
- package/dist/tools/tool.js +4 -0
- package/dist/tools/tool.js.map +1 -0
- package/dist/types/events.d.ts +66 -0
- package/dist/types/events.js +2 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/messages.d.ts +57 -0
- package/dist/types/messages.js +42 -0
- package/dist/types/messages.js.map +1 -0
- package/package.json +49 -0
- package/scripts/copy-model-metadata.mjs +4 -0
- package/scripts/install-ripgrep.cjs +152 -0
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
import React, { useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { Lexer } from "marked";
|
|
4
|
+
import { bundledLanguages, codeToTokens } from "shiki";
|
|
5
|
+
const e = React.createElement;
|
|
6
|
+
const SHIKI_THEME = "dark-plus";
|
|
7
|
+
const tokenCache = new Map();
|
|
8
|
+
const renderedLinesCache = new Map();
|
|
9
|
+
export function markdownRenderKey(text, kind, width) {
|
|
10
|
+
return `${kind}\0${width}\0${text}`;
|
|
11
|
+
}
|
|
12
|
+
export function MarkdownText({ text, kind, width, maxLines, skipLines = 0, asyncRender = true, onRenderComplete, }) {
|
|
13
|
+
const renderKey = markdownRenderKey(text, kind, width);
|
|
14
|
+
const useCachedRender = asyncRender || maxLines === undefined;
|
|
15
|
+
const cachedLines = useCachedRender ? renderedLinesCache.get(renderKey) : undefined;
|
|
16
|
+
const fallbackLines = useMemo(() => cachedLines ?? renderMarkdownPreviewToLines(text, kind, width), [cachedLines, text, kind, width]);
|
|
17
|
+
const [asyncLines, setAsyncLines] = useState(() => cachedLines ? { key: renderKey, lines: cachedLines } : undefined);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const cached = useCachedRender ? renderedLinesCache.get(renderKey) : undefined;
|
|
20
|
+
if (cached) {
|
|
21
|
+
setAsyncLines({ key: renderKey, lines: cached });
|
|
22
|
+
if (asyncRender)
|
|
23
|
+
onRenderComplete?.(renderKey);
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
if (!asyncRender) {
|
|
27
|
+
setAsyncLines(undefined);
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
let cancelled = false;
|
|
31
|
+
setAsyncLines(undefined);
|
|
32
|
+
const timer = setTimeout(() => {
|
|
33
|
+
void renderMarkdownToLines(text, kind, width)
|
|
34
|
+
.catch(() => renderPlainMarkdownPreview(text, kind, width))
|
|
35
|
+
.then((rendered) => {
|
|
36
|
+
rememberRenderedLines(renderKey, rendered);
|
|
37
|
+
if (!cancelled) {
|
|
38
|
+
setAsyncLines({ key: renderKey, lines: rendered });
|
|
39
|
+
onRenderComplete?.(renderKey);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}, 40);
|
|
43
|
+
return () => {
|
|
44
|
+
cancelled = true;
|
|
45
|
+
clearTimeout(timer);
|
|
46
|
+
};
|
|
47
|
+
}, [text, kind, width, renderKey, asyncRender, useCachedRender, onRenderComplete]);
|
|
48
|
+
const renderedLines = clipRenderedLines(asyncLines?.key === renderKey ? asyncLines.lines : fallbackLines, maxLines, skipLines);
|
|
49
|
+
return e(Box, { flexDirection: "column" }, ...renderedLines.map((line, lineIndex) => e(Text, { key: `md-line-${lineIndex}`, color: line.color ?? (kind === "meta" ? "gray" : undefined) }, ...line.segments.map((segment, segmentIndex) => e(Text, {
|
|
50
|
+
key: `md-seg-${lineIndex}-${segmentIndex}`,
|
|
51
|
+
color: segment.color,
|
|
52
|
+
backgroundColor: segment.backgroundColor,
|
|
53
|
+
bold: segment.bold,
|
|
54
|
+
italic: segment.italic,
|
|
55
|
+
underline: segment.underline,
|
|
56
|
+
dimColor: segment.dimColor,
|
|
57
|
+
}, segment.text)))));
|
|
58
|
+
}
|
|
59
|
+
export function estimateMarkdownLineCount(markdown, width) {
|
|
60
|
+
return renderMarkdownPreviewToLines(markdown, "assistant", width).length;
|
|
61
|
+
}
|
|
62
|
+
function rememberRenderedLines(renderKey, lines) {
|
|
63
|
+
renderedLinesCache.set(renderKey, lines);
|
|
64
|
+
const firstKey = renderedLinesCache.keys().next().value;
|
|
65
|
+
if (renderedLinesCache.size > 200 && firstKey)
|
|
66
|
+
renderedLinesCache.delete(firstKey);
|
|
67
|
+
}
|
|
68
|
+
async function renderMarkdownToLines(markdown, kind, width) {
|
|
69
|
+
const normalized = normalizeIndentedFences(markdown.replace(/\r\n/g, "\n"));
|
|
70
|
+
const tokens = Lexer.lex(normalized, { gfm: true });
|
|
71
|
+
const lines = [];
|
|
72
|
+
const usableWidth = Math.max(10, width);
|
|
73
|
+
for (const token of tokens) {
|
|
74
|
+
await appendToken(lines, token, kind, usableWidth);
|
|
75
|
+
}
|
|
76
|
+
return lines.length ? lines : [{ segments: [{ text: "" }] }];
|
|
77
|
+
}
|
|
78
|
+
async function appendToken(lines, token, kind, width) {
|
|
79
|
+
switch (token.type) {
|
|
80
|
+
case "space":
|
|
81
|
+
if (lines.length > 0)
|
|
82
|
+
lines.push({ segments: [{ text: " " }] });
|
|
83
|
+
return;
|
|
84
|
+
case "heading": {
|
|
85
|
+
const heading = token;
|
|
86
|
+
const segments = [
|
|
87
|
+
...inlineSegments(heading.tokens, { bold: true, color: heading.depth <= 2 ? "cyan" : "blue" }),
|
|
88
|
+
];
|
|
89
|
+
lines.push(...wrapSegments(segments, width).map((wrapped) => ({ segments: wrapped })));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
case "paragraph": {
|
|
93
|
+
const paragraph = token;
|
|
94
|
+
appendWrapped(lines, inlineSegments(paragraph.tokens, {}), width, kind);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
case "text": {
|
|
98
|
+
const textToken = token;
|
|
99
|
+
appendWrapped(lines, inlineSegments(textToken.tokens ?? [textToken], {}), width, kind);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
case "code": {
|
|
103
|
+
await appendCode(lines, token, width);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
case "list": {
|
|
107
|
+
await appendList(lines, token, kind, width);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
case "blockquote": {
|
|
111
|
+
await appendBlockquote(lines, token, kind, width);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
case "hr":
|
|
115
|
+
lines.push({ segments: [{ text: "-".repeat(Math.min(width, 80)), color: "gray" }] });
|
|
116
|
+
return;
|
|
117
|
+
case "table": {
|
|
118
|
+
appendTable(lines, token, width);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
case "html": {
|
|
122
|
+
const html = token;
|
|
123
|
+
appendWrapped(lines, [{ text: html.text || html.raw, color: "gray" }], width, kind);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
default: {
|
|
127
|
+
const fallback = fallbackText(token);
|
|
128
|
+
if (fallback)
|
|
129
|
+
appendWrapped(lines, [{ text: fallback }], width, kind);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function renderMarkdownPreviewToLines(markdown, kind, width) {
|
|
134
|
+
try {
|
|
135
|
+
const normalized = normalizeIndentedFences(markdown.replace(/\r\n/g, "\n"));
|
|
136
|
+
const tokens = Lexer.lex(normalized, { gfm: true });
|
|
137
|
+
const lines = [];
|
|
138
|
+
const usableWidth = Math.max(10, width);
|
|
139
|
+
for (const token of tokens)
|
|
140
|
+
appendPreviewToken(lines, token, kind, usableWidth);
|
|
141
|
+
return lines.length ? lines : [{ segments: [{ text: "" }] }];
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return renderPlainMarkdownPreview(markdown, kind, width);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function renderPlainMarkdownPreview(markdown, kind, width) {
|
|
148
|
+
const plainSegments = markdown
|
|
149
|
+
.replace(/\r\n/g, "\n")
|
|
150
|
+
.split("\n")
|
|
151
|
+
.flatMap((line, index, all) => index === all.length - 1 ? [{ text: line }] : [{ text: line }, { text: "\n" }]);
|
|
152
|
+
const rendered = wrapSegments(plainSegments, Math.max(10, width)).map((segments) => ({
|
|
153
|
+
segments: segments.length ? segments : [{ text: "" }],
|
|
154
|
+
color: kind === "error" ? "red" : undefined,
|
|
155
|
+
}));
|
|
156
|
+
return rendered.length ? rendered : [{ segments: [{ text: "" }] }];
|
|
157
|
+
}
|
|
158
|
+
function appendPreviewToken(lines, token, kind, width) {
|
|
159
|
+
switch (token.type) {
|
|
160
|
+
case "space":
|
|
161
|
+
if (lines.length > 0)
|
|
162
|
+
lines.push({ segments: [{ text: " " }] });
|
|
163
|
+
return;
|
|
164
|
+
case "heading": {
|
|
165
|
+
const heading = token;
|
|
166
|
+
const segments = [
|
|
167
|
+
...inlineSegments(heading.tokens, { bold: true, color: heading.depth <= 2 ? "cyan" : "blue" }),
|
|
168
|
+
];
|
|
169
|
+
lines.push(...wrapSegments(segments, width).map((wrapped) => ({ segments: wrapped })));
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
case "paragraph": {
|
|
173
|
+
const paragraph = token;
|
|
174
|
+
appendWrapped(lines, inlineSegments(paragraph.tokens, {}), width, kind);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
case "text": {
|
|
178
|
+
const textToken = token;
|
|
179
|
+
appendWrapped(lines, inlineSegments(textToken.tokens ?? [textToken], {}), width, kind);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
case "code": {
|
|
183
|
+
appendCodePreview(lines, token, width);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
case "list": {
|
|
187
|
+
appendListPreview(lines, token, kind, width);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
case "blockquote": {
|
|
191
|
+
appendBlockquotePreview(lines, token, kind, width);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
case "hr":
|
|
195
|
+
lines.push({ segments: [{ text: "-".repeat(Math.min(width, 80)), color: "gray" }] });
|
|
196
|
+
return;
|
|
197
|
+
case "table": {
|
|
198
|
+
appendTable(lines, token, width);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
case "html": {
|
|
202
|
+
const html = token;
|
|
203
|
+
appendWrapped(lines, [{ text: html.text || html.raw, color: "gray" }], width, kind);
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
default: {
|
|
207
|
+
const fallback = fallbackText(token);
|
|
208
|
+
if (fallback)
|
|
209
|
+
appendWrapped(lines, [{ text: fallback }], width, kind);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function clipRenderedLines(lines, maxLines, skipLines = 0) {
|
|
214
|
+
const start = Math.max(0, skipLines);
|
|
215
|
+
if (maxLines === undefined)
|
|
216
|
+
return lines.slice(start);
|
|
217
|
+
if (maxLines <= 0)
|
|
218
|
+
return [];
|
|
219
|
+
return lines.slice(start, start + maxLines);
|
|
220
|
+
}
|
|
221
|
+
function appendWrapped(lines, segments, width, kind) {
|
|
222
|
+
const wrapped = wrapSegments(segments, width);
|
|
223
|
+
for (const line of wrapped) {
|
|
224
|
+
lines.push({ segments: line, color: kind === "error" ? "red" : undefined });
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
async function appendCode(lines, token, width) {
|
|
228
|
+
const language = normalizeLanguage(token.lang ?? "");
|
|
229
|
+
const highlighted = await highlightCode(token.text, language);
|
|
230
|
+
for (const line of highlighted) {
|
|
231
|
+
for (const wrapped of wrapSegments(line.length ? line : [{ text: " " }], width)) {
|
|
232
|
+
lines.push({ segments: wrapped.length ? wrapped : [{ text: " " }] });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
async function appendList(lines, token, kind, width) {
|
|
237
|
+
let number = typeof token.start === "number" ? token.start : 1;
|
|
238
|
+
for (const item of token.items) {
|
|
239
|
+
const marker = token.ordered ? `${number}. ` : "- ";
|
|
240
|
+
number += 1;
|
|
241
|
+
const nested = [];
|
|
242
|
+
for (const child of item.tokens) {
|
|
243
|
+
await appendToken(nested, child, kind, Math.max(10, width - marker.length));
|
|
244
|
+
}
|
|
245
|
+
appendListItemLines(lines, marker, nested, kind);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
async function appendBlockquote(lines, token, kind, width) {
|
|
249
|
+
const nested = [];
|
|
250
|
+
for (const child of token.tokens) {
|
|
251
|
+
await appendToken(nested, child, kind, Math.max(10, width - 2));
|
|
252
|
+
}
|
|
253
|
+
appendBlockquoteLines(lines, nested);
|
|
254
|
+
}
|
|
255
|
+
function appendCodePreview(lines, token, width) {
|
|
256
|
+
const language = normalizeLanguage(token.lang ?? "");
|
|
257
|
+
const codeLines = token.text.split("\n");
|
|
258
|
+
for (const [index, line] of codeLines.entries()) {
|
|
259
|
+
const gutter = index === 0 && language !== "text" ? `${language} ` : "";
|
|
260
|
+
for (const wrapped of wrapSegments([{ text: `${gutter}${line || " "}`, color: "gray" }], width)) {
|
|
261
|
+
lines.push({ segments: wrapped.length ? wrapped : [{ text: " " }] });
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
function appendListPreview(lines, token, kind, width) {
|
|
266
|
+
let number = typeof token.start === "number" ? token.start : 1;
|
|
267
|
+
for (const item of token.items) {
|
|
268
|
+
const marker = token.ordered ? `${number}. ` : "- ";
|
|
269
|
+
number += 1;
|
|
270
|
+
const nested = [];
|
|
271
|
+
for (const child of item.tokens) {
|
|
272
|
+
appendPreviewToken(nested, child, kind, Math.max(10, width - marker.length));
|
|
273
|
+
}
|
|
274
|
+
appendListItemLines(lines, marker, nested, kind);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function appendListItemLines(lines, marker, nested, kind) {
|
|
278
|
+
const itemLines = nested.length ? nested : [{ segments: [{ text: "" }] }];
|
|
279
|
+
for (const [index, line] of itemLines.entries()) {
|
|
280
|
+
lines.push({
|
|
281
|
+
color: line.color ?? (kind === "error" ? "red" : undefined),
|
|
282
|
+
segments: [{ text: index === 0 ? marker : " ".repeat(marker.length), color: "gray" }, ...line.segments],
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function appendBlockquotePreview(lines, token, kind, width) {
|
|
287
|
+
const nested = [];
|
|
288
|
+
for (const child of token.tokens)
|
|
289
|
+
appendPreviewToken(nested, child, kind, Math.max(10, width - 2));
|
|
290
|
+
appendBlockquoteLines(lines, nested);
|
|
291
|
+
}
|
|
292
|
+
function appendBlockquoteLines(lines, nested) {
|
|
293
|
+
for (const line of nested) {
|
|
294
|
+
lines.push({ segments: [{ text: "| ", color: "gray" }, ...line.segments] });
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
function appendTable(lines, token, width) {
|
|
298
|
+
const renderRow = (cells) => cells.map((cell) => plainFromInline(cell.tokens)).join(" | ");
|
|
299
|
+
const rows = [renderRow(token.header), ...token.rows.map(renderRow)];
|
|
300
|
+
for (const row of rows) {
|
|
301
|
+
lines.push({ segments: [{ text: truncateDisplayWidth(row, width), color: "gray" }] });
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
function inlineSegments(tokens, base) {
|
|
305
|
+
const segments = [];
|
|
306
|
+
for (const token of tokens) {
|
|
307
|
+
switch (token.type) {
|
|
308
|
+
case "text": {
|
|
309
|
+
const textToken = token;
|
|
310
|
+
if (textToken.tokens?.length)
|
|
311
|
+
segments.push(...inlineSegments(textToken.tokens, base));
|
|
312
|
+
else
|
|
313
|
+
segments.push({ ...base, text: textToken.text });
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
case "strong":
|
|
317
|
+
segments.push(...inlineSegments(token.tokens, { ...base, bold: true }));
|
|
318
|
+
break;
|
|
319
|
+
case "em":
|
|
320
|
+
segments.push(...inlineSegments(token.tokens, { ...base, italic: true }));
|
|
321
|
+
break;
|
|
322
|
+
case "codespan":
|
|
323
|
+
segments.push({ ...base, text: token.text, color: "yellow" });
|
|
324
|
+
break;
|
|
325
|
+
case "link":
|
|
326
|
+
segments.push(...inlineSegments(token.tokens, { ...base, color: "cyan", underline: true }));
|
|
327
|
+
break;
|
|
328
|
+
case "del":
|
|
329
|
+
segments.push(...inlineSegments(token.tokens, { ...base, dimColor: true }));
|
|
330
|
+
break;
|
|
331
|
+
case "br":
|
|
332
|
+
segments.push({ ...base, text: "\n" });
|
|
333
|
+
break;
|
|
334
|
+
case "escape":
|
|
335
|
+
segments.push({ ...base, text: token.text });
|
|
336
|
+
break;
|
|
337
|
+
case "image":
|
|
338
|
+
segments.push({ ...base, text: token.text, color: "cyan" });
|
|
339
|
+
break;
|
|
340
|
+
default:
|
|
341
|
+
segments.push({ ...base, text: fallbackText(token) });
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return mergeAdjacent(segments.filter((segment) => segment.text.length > 0));
|
|
345
|
+
}
|
|
346
|
+
function plainFromInline(tokens) {
|
|
347
|
+
return inlineSegments(tokens, {}).map((segment) => segment.text).join("");
|
|
348
|
+
}
|
|
349
|
+
function fallbackText(token) {
|
|
350
|
+
const value = token;
|
|
351
|
+
return value.text ?? value.raw ?? "";
|
|
352
|
+
}
|
|
353
|
+
function wrapSegments(segments, width) {
|
|
354
|
+
const lines = [[]];
|
|
355
|
+
let used = 0;
|
|
356
|
+
const max = Math.max(1, width);
|
|
357
|
+
for (const segment of segments) {
|
|
358
|
+
for (const part of segment.text.split(/(\n)/u)) {
|
|
359
|
+
if (part === "")
|
|
360
|
+
continue;
|
|
361
|
+
if (part === "\n") {
|
|
362
|
+
lines.push([]);
|
|
363
|
+
used = 0;
|
|
364
|
+
continue;
|
|
365
|
+
}
|
|
366
|
+
for (const char of [...part]) {
|
|
367
|
+
const charWidth = displayWidth(char);
|
|
368
|
+
if (used > 0 && used + charWidth > max) {
|
|
369
|
+
lines.push([]);
|
|
370
|
+
used = 0;
|
|
371
|
+
}
|
|
372
|
+
const current = lines[lines.length - 1] ?? [];
|
|
373
|
+
const previous = current[current.length - 1];
|
|
374
|
+
if (previous && sameStyle(previous, segment)) {
|
|
375
|
+
previous.text += char;
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
current.push({ ...segment, text: char });
|
|
379
|
+
}
|
|
380
|
+
used += charWidth;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return lines.length ? lines : [[{ text: "" }]];
|
|
385
|
+
}
|
|
386
|
+
function mergeAdjacent(segments) {
|
|
387
|
+
const merged = [];
|
|
388
|
+
for (const segment of segments) {
|
|
389
|
+
const previous = merged[merged.length - 1];
|
|
390
|
+
if (previous && sameStyle(previous, segment))
|
|
391
|
+
previous.text += segment.text;
|
|
392
|
+
else
|
|
393
|
+
merged.push({ ...segment });
|
|
394
|
+
}
|
|
395
|
+
return merged;
|
|
396
|
+
}
|
|
397
|
+
function sameStyle(left, right) {
|
|
398
|
+
return (left.color === right.color &&
|
|
399
|
+
left.backgroundColor === right.backgroundColor &&
|
|
400
|
+
left.bold === right.bold &&
|
|
401
|
+
left.italic === right.italic &&
|
|
402
|
+
left.underline === right.underline &&
|
|
403
|
+
left.dimColor === right.dimColor);
|
|
404
|
+
}
|
|
405
|
+
async function highlightCode(code, language) {
|
|
406
|
+
const cacheKey = `${SHIKI_THEME}\0${language}\0${code}`;
|
|
407
|
+
const cached = tokenCache.get(cacheKey);
|
|
408
|
+
if (cached)
|
|
409
|
+
return cached;
|
|
410
|
+
const promise = highlightCodeUncached(code, language);
|
|
411
|
+
tokenCache.set(cacheKey, promise);
|
|
412
|
+
const firstKey = tokenCache.keys().next().value;
|
|
413
|
+
if (tokenCache.size > 200 && firstKey)
|
|
414
|
+
tokenCache.delete(firstKey);
|
|
415
|
+
return promise;
|
|
416
|
+
}
|
|
417
|
+
async function highlightCodeUncached(code, language) {
|
|
418
|
+
if (!code)
|
|
419
|
+
return [[{ text: "" }]];
|
|
420
|
+
if (language === "text")
|
|
421
|
+
return code.split("\n").map((line) => [{ text: line }]);
|
|
422
|
+
try {
|
|
423
|
+
const result = await codeToTokens(code, {
|
|
424
|
+
lang: language,
|
|
425
|
+
theme: SHIKI_THEME,
|
|
426
|
+
tokenizeMaxLineLength: 1000,
|
|
427
|
+
tokenizeTimeLimit: 500,
|
|
428
|
+
});
|
|
429
|
+
return result.tokens.map((line) => line.map(tokenToSegment));
|
|
430
|
+
}
|
|
431
|
+
catch {
|
|
432
|
+
return code.split("\n").map((line) => [{ text: line }]);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
function tokenToSegment(token) {
|
|
436
|
+
const fontStyle = Number(token.fontStyle ?? 0);
|
|
437
|
+
return {
|
|
438
|
+
text: token.content,
|
|
439
|
+
color: token.color,
|
|
440
|
+
backgroundColor: token.bgColor,
|
|
441
|
+
italic: (fontStyle & 1) !== 0,
|
|
442
|
+
bold: (fontStyle & 2) !== 0,
|
|
443
|
+
underline: (fontStyle & 4) !== 0,
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
function normalizeLanguage(language) {
|
|
447
|
+
const normalized = language.trim().toLowerCase();
|
|
448
|
+
const aliases = {
|
|
449
|
+
cjs: "javascript",
|
|
450
|
+
js: "javascript",
|
|
451
|
+
jsx: "jsx",
|
|
452
|
+
mjs: "javascript",
|
|
453
|
+
node: "javascript",
|
|
454
|
+
py: "python",
|
|
455
|
+
python3: "python",
|
|
456
|
+
rb: "ruby",
|
|
457
|
+
sh: "bash",
|
|
458
|
+
shell: "bash",
|
|
459
|
+
ts: "typescript",
|
|
460
|
+
tsx: "tsx",
|
|
461
|
+
yml: "yaml",
|
|
462
|
+
};
|
|
463
|
+
const lang = aliases[normalized] ?? normalized;
|
|
464
|
+
if (!lang)
|
|
465
|
+
return "text";
|
|
466
|
+
return Object.prototype.hasOwnProperty.call(bundledLanguages, lang) ? lang : "text";
|
|
467
|
+
}
|
|
468
|
+
function normalizeIndentedFences(markdown) {
|
|
469
|
+
const lines = markdown.split("\n");
|
|
470
|
+
const result = [];
|
|
471
|
+
let fenceIndent;
|
|
472
|
+
for (const line of lines) {
|
|
473
|
+
if (!fenceIndent) {
|
|
474
|
+
const opening = line.match(/^([ \t]{4,})(```+|~~~+)/u);
|
|
475
|
+
if (opening) {
|
|
476
|
+
fenceIndent = opening[1];
|
|
477
|
+
result.push(line.slice(fenceIndent.length));
|
|
478
|
+
continue;
|
|
479
|
+
}
|
|
480
|
+
result.push(line);
|
|
481
|
+
continue;
|
|
482
|
+
}
|
|
483
|
+
const deindented = line.startsWith(fenceIndent) ? line.slice(fenceIndent.length) : line;
|
|
484
|
+
result.push(deindented);
|
|
485
|
+
if (/^(```+|~~~+)\s*$/u.test(deindented))
|
|
486
|
+
fenceIndent = undefined;
|
|
487
|
+
}
|
|
488
|
+
return result.join("\n");
|
|
489
|
+
}
|
|
490
|
+
function truncateDisplayWidth(value, maxWidth) {
|
|
491
|
+
if (stringDisplayWidth(value) <= maxWidth)
|
|
492
|
+
return value;
|
|
493
|
+
const ellipsis = "...";
|
|
494
|
+
const limit = Math.max(0, maxWidth - stringDisplayWidth(ellipsis));
|
|
495
|
+
let used = 0;
|
|
496
|
+
let result = "";
|
|
497
|
+
for (const char of [...value]) {
|
|
498
|
+
const charWidth = displayWidth(char);
|
|
499
|
+
if (used + charWidth > limit)
|
|
500
|
+
break;
|
|
501
|
+
result += char;
|
|
502
|
+
used += charWidth;
|
|
503
|
+
}
|
|
504
|
+
return `${result}${ellipsis}`;
|
|
505
|
+
}
|
|
506
|
+
function stringDisplayWidth(value) {
|
|
507
|
+
let width = 0;
|
|
508
|
+
for (const char of [...value])
|
|
509
|
+
width += displayWidth(char);
|
|
510
|
+
return width;
|
|
511
|
+
}
|
|
512
|
+
function displayWidth(char) {
|
|
513
|
+
const codePoint = char.codePointAt(0);
|
|
514
|
+
if (codePoint === undefined)
|
|
515
|
+
return 0;
|
|
516
|
+
if (codePoint === 0)
|
|
517
|
+
return 0;
|
|
518
|
+
if (codePoint < 32 || (codePoint >= 0x7f && codePoint < 0xa0))
|
|
519
|
+
return 0;
|
|
520
|
+
if (isCombiningMark(codePoint))
|
|
521
|
+
return 0;
|
|
522
|
+
return isFullWidthCodePoint(codePoint) ? 2 : 1;
|
|
523
|
+
}
|
|
524
|
+
function isCombiningMark(codePoint) {
|
|
525
|
+
return ((codePoint >= 0x0300 && codePoint <= 0x036f) ||
|
|
526
|
+
(codePoint >= 0x1ab0 && codePoint <= 0x1aff) ||
|
|
527
|
+
(codePoint >= 0x1dc0 && codePoint <= 0x1dff) ||
|
|
528
|
+
(codePoint >= 0x20d0 && codePoint <= 0x20ff) ||
|
|
529
|
+
(codePoint >= 0xfe20 && codePoint <= 0xfe2f));
|
|
530
|
+
}
|
|
531
|
+
function isFullWidthCodePoint(codePoint) {
|
|
532
|
+
return (codePoint >= 0x1100 && (codePoint <= 0x115f ||
|
|
533
|
+
codePoint === 0x2329 ||
|
|
534
|
+
codePoint === 0x232a ||
|
|
535
|
+
(codePoint >= 0x2e80 && codePoint <= 0xa4cf && codePoint !== 0x303f) ||
|
|
536
|
+
(codePoint >= 0xac00 && codePoint <= 0xd7a3) ||
|
|
537
|
+
(codePoint >= 0xf900 && codePoint <= 0xfaff) ||
|
|
538
|
+
(codePoint >= 0xfe10 && codePoint <= 0xfe19) ||
|
|
539
|
+
(codePoint >= 0xfe30 && codePoint <= 0xfe6f) ||
|
|
540
|
+
(codePoint >= 0xff00 && codePoint <= 0xff60) ||
|
|
541
|
+
(codePoint >= 0xffe0 && codePoint <= 0xffe6) ||
|
|
542
|
+
(codePoint >= 0x1f300 && codePoint <= 0x1f64f) ||
|
|
543
|
+
(codePoint >= 0x1f900 && codePoint <= 0x1f9ff) ||
|
|
544
|
+
(codePoint >= 0x20000 && codePoint <= 0x3fffd)));
|
|
545
|
+
}
|
|
546
|
+
//# sourceMappingURL=markdown-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-renderer.js","sourceRoot":"","sources":["../../src/repl/markdown-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export function renderEvent(event) {
|
|
2
|
+
switch (event.type) {
|
|
3
|
+
case "state":
|
|
4
|
+
return `${titleCaseMeta(event.phase)}${event.detail ? ` · ${event.detail}` : ""}`;
|
|
5
|
+
case "context.metrics":
|
|
6
|
+
return undefined;
|
|
7
|
+
case "assistant.delta":
|
|
8
|
+
return event.text;
|
|
9
|
+
case "thinking.delta":
|
|
10
|
+
return `thinking> ${event.text}`;
|
|
11
|
+
case "message":
|
|
12
|
+
return event.message.blocks
|
|
13
|
+
.map((block) => {
|
|
14
|
+
const prefix = event.message.isMeta ? undefined : event.message.role;
|
|
15
|
+
if (block.type === "text")
|
|
16
|
+
return prefix ? `${prefix}> ${block.text}` : block.text;
|
|
17
|
+
if (block.type === "thinking")
|
|
18
|
+
return `thinking> ${block.text}`;
|
|
19
|
+
if (block.type === "tool_result")
|
|
20
|
+
return `tool_result:${block.name}> ${JSON.stringify(block.output)}`;
|
|
21
|
+
return `tool_use:${block.name}> ${JSON.stringify(block.input)}`;
|
|
22
|
+
})
|
|
23
|
+
.join("\n");
|
|
24
|
+
case "tool.started":
|
|
25
|
+
return `tool started: ${event.toolUse.name}`;
|
|
26
|
+
case "tool.finished":
|
|
27
|
+
return `tool finished: ${event.toolUse.name} (${event.ok ? "ok" : "failed"})`;
|
|
28
|
+
case "usage":
|
|
29
|
+
return undefined;
|
|
30
|
+
case "retrying":
|
|
31
|
+
return `retrying model request: attempt ${event.attempt}, delay ${event.delayMs}ms, ${event.error.message}`;
|
|
32
|
+
case "terminal":
|
|
33
|
+
return `Stopped · ${event.reason}${event.detail ? ` · ${event.detail}` : ""}`;
|
|
34
|
+
case "error":
|
|
35
|
+
return `error: ${event.error.message}`;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function titleCaseMeta(value) {
|
|
39
|
+
return value
|
|
40
|
+
.split(/[_\s-]+/u)
|
|
41
|
+
.filter(Boolean)
|
|
42
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
43
|
+
.join(" ");
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/repl/render.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpF,KAAK,iBAAiB;YACpB,OAAO,SAAS,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,KAAK,gBAAgB;YACnB,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM;iBACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACb,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACrE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,OAAO,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;oBAAE,OAAO,eAAe,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtG,OAAO,YAAY,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,iBAAiB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/C,KAAK,eAAe;YAClB,OAAO,kBAAkB,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,mCAAmC,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9G,KAAK,UAAU;YACb,OAAO,aAAa,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChF,KAAK,OAAO;YACV,OAAO,UAAU,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,KAAK,CAAC,UAAU,CAAC;SACjB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Writable } from "node:stream";
|
|
2
|
+
import type { AgentEvent } from "../types/events.js";
|
|
3
|
+
export declare class ReplStatusLine {
|
|
4
|
+
private readonly output;
|
|
5
|
+
private phase;
|
|
6
|
+
private lastDetail;
|
|
7
|
+
private metrics?;
|
|
8
|
+
private lastUsage?;
|
|
9
|
+
private outputTokensStreamed;
|
|
10
|
+
private visible;
|
|
11
|
+
private pulseFrame;
|
|
12
|
+
constructor(output: Writable & {
|
|
13
|
+
isTTY?: boolean;
|
|
14
|
+
});
|
|
15
|
+
handle(event: AgentEvent): void;
|
|
16
|
+
clear(): void;
|
|
17
|
+
render(): void;
|
|
18
|
+
renderLine(): string;
|
|
19
|
+
}
|