@duetso/agent 0.1.42 → 0.1.44
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 +47 -4
- package/dist/package.json +1 -1
- package/dist/src/cli/help.d.ts.map +1 -1
- package/dist/src/cli/help.js +5 -0
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/login.js +1 -1
- package/dist/src/cli/login.js.map +1 -1
- package/dist/src/cli/run.d.ts.map +1 -1
- package/dist/src/cli/run.js +23 -0
- package/dist/src/cli/run.js.map +1 -1
- package/dist/src/model-resolution/catalog.d.ts +12 -0
- package/dist/src/model-resolution/catalog.d.ts.map +1 -1
- package/dist/src/model-resolution/catalog.js +50 -0
- package/dist/src/model-resolution/catalog.js.map +1 -1
- package/dist/src/tui/app.d.ts +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +71 -83
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/history.d.ts +12 -3
- package/dist/src/tui/history.d.ts.map +1 -1
- package/dist/src/tui/history.js +63 -23
- package/dist/src/tui/history.js.map +1 -1
- package/dist/src/tui/sidebar.d.ts +6 -3
- package/dist/src/tui/sidebar.d.ts.map +1 -1
- package/dist/src/tui/sidebar.js +11 -0
- package/dist/src/tui/sidebar.js.map +1 -1
- package/dist/src/tui/tool-formatters.d.ts +56 -0
- package/dist/src/tui/tool-formatters.d.ts.map +1 -0
- package/dist/src/tui/tool-formatters.js +319 -0
- package/dist/src/tui/tool-formatters.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { formatCompactJson } from "../lib/compact-json.js";
|
|
2
|
+
/** Cap noisy tool output (file dumps, search hits) inline; the full payload
|
|
3
|
+
* is still in session history for the model to consult. */
|
|
4
|
+
const TOOL_RESULT_MAX_LINES = 3;
|
|
5
|
+
export function truncateToolText(text) {
|
|
6
|
+
const lines = text.split("\n");
|
|
7
|
+
if (lines.length <= TOOL_RESULT_MAX_LINES)
|
|
8
|
+
return text;
|
|
9
|
+
const head = lines.slice(0, TOOL_RESULT_MAX_LINES).join("\n");
|
|
10
|
+
const remaining = lines.length - TOOL_RESULT_MAX_LINES;
|
|
11
|
+
return `${head}\n… (+${remaining} more line${remaining === 1 ? "" : "s"})`;
|
|
12
|
+
}
|
|
13
|
+
export function textFromToolContent(content) {
|
|
14
|
+
if (!content)
|
|
15
|
+
return "";
|
|
16
|
+
return content
|
|
17
|
+
.filter((block) => block.type === "text")
|
|
18
|
+
.map((block) => block.text)
|
|
19
|
+
.join("\n");
|
|
20
|
+
}
|
|
21
|
+
/** Resolve the formatter for a tool call and produce its rendered block. */
|
|
22
|
+
export function formatToolBlock(spec) {
|
|
23
|
+
const formatter = TOOL_FORMATTERS[spec.toolName] ?? defaultFormatter;
|
|
24
|
+
return formatter(spec);
|
|
25
|
+
}
|
|
26
|
+
function defaultFormatter(spec) {
|
|
27
|
+
const body = spec.input === undefined || spec.input === null ? undefined : formatCompactJson(spec.input);
|
|
28
|
+
return {
|
|
29
|
+
header: `[tool ${spec.toolName}]`,
|
|
30
|
+
body,
|
|
31
|
+
result: buildDefaultResult(spec),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function buildDefaultResult(spec) {
|
|
35
|
+
if (spec.status === "running")
|
|
36
|
+
return undefined;
|
|
37
|
+
const text = textFromToolContent(spec.output);
|
|
38
|
+
if (!text)
|
|
39
|
+
return undefined;
|
|
40
|
+
const label = spec.status === "error" ? "[error]" : "[result]";
|
|
41
|
+
return { label, body: truncateToolText(text) };
|
|
42
|
+
}
|
|
43
|
+
// ---- per-tool formatters --------------------------------------------------
|
|
44
|
+
const formatBash = (spec) => {
|
|
45
|
+
const input = pickObject(spec.input);
|
|
46
|
+
const command = stringField(input, "command") ?? "";
|
|
47
|
+
const timeout = numberField(input, "timeout");
|
|
48
|
+
const header = command ? `$ ${firstLine(command)}` : "$ ";
|
|
49
|
+
const extraCommandLines = command.includes("\n")
|
|
50
|
+
? command.split("\n").slice(1).join("\n")
|
|
51
|
+
: undefined;
|
|
52
|
+
const bodyParts = [];
|
|
53
|
+
if (extraCommandLines)
|
|
54
|
+
bodyParts.push(extraCommandLines);
|
|
55
|
+
if (timeout !== undefined)
|
|
56
|
+
bodyParts.push(`(timeout ${timeout}s)`);
|
|
57
|
+
return {
|
|
58
|
+
header,
|
|
59
|
+
body: bodyParts.length > 0 ? bodyParts.join("\n") : undefined,
|
|
60
|
+
result: buildDefaultResult(spec),
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
const formatRead = (spec) => {
|
|
64
|
+
const input = pickObject(spec.input);
|
|
65
|
+
const path = stringField(input, "path") ?? "?";
|
|
66
|
+
const offset = numberField(input, "offset");
|
|
67
|
+
const limit = numberField(input, "limit");
|
|
68
|
+
const range = offset !== undefined || limit !== undefined ? ` (${formatLineRange(offset, limit)})` : "";
|
|
69
|
+
return {
|
|
70
|
+
header: `read ${path}${range}`,
|
|
71
|
+
result: buildDefaultResult(spec),
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
const formatEdit = (spec) => {
|
|
75
|
+
const input = pickObject(spec.input);
|
|
76
|
+
const path = stringField(input, "path") ?? "?";
|
|
77
|
+
const edits = arrayField(input, "edits");
|
|
78
|
+
const count = edits?.length ?? 0;
|
|
79
|
+
const summary = count > 0 ? ` (${count} edit${count === 1 ? "" : "s"})` : "";
|
|
80
|
+
return {
|
|
81
|
+
header: `edit ${path}${summary}`,
|
|
82
|
+
result: buildDefaultResult(spec),
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
const formatWrite = (spec) => {
|
|
86
|
+
const input = pickObject(spec.input);
|
|
87
|
+
const path = stringField(input, "path") ?? "?";
|
|
88
|
+
const content = stringField(input, "content");
|
|
89
|
+
const sizeNote = content !== undefined ? ` (${content.length} byte${content.length === 1 ? "" : "s"})` : "";
|
|
90
|
+
return {
|
|
91
|
+
header: `write ${path}${sizeNote}`,
|
|
92
|
+
result: buildDefaultResult(spec),
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
const formatGrep = (spec) => {
|
|
96
|
+
const input = pickObject(spec.input);
|
|
97
|
+
const pattern = stringField(input, "pattern") ?? "";
|
|
98
|
+
const path = stringField(input, "path");
|
|
99
|
+
const glob = stringField(input, "glob");
|
|
100
|
+
const flagBits = [];
|
|
101
|
+
if (booleanField(input, "ignoreCase"))
|
|
102
|
+
flagBits.push("i");
|
|
103
|
+
if (booleanField(input, "literal"))
|
|
104
|
+
flagBits.push("literal");
|
|
105
|
+
const tail = [];
|
|
106
|
+
if (path)
|
|
107
|
+
tail.push(path);
|
|
108
|
+
if (glob)
|
|
109
|
+
tail.push(`glob=${glob}`);
|
|
110
|
+
if (flagBits.length > 0)
|
|
111
|
+
tail.push(`[${flagBits.join(",")}]`);
|
|
112
|
+
const tailText = tail.length > 0 ? ` ${tail.join(" ")}` : "";
|
|
113
|
+
return {
|
|
114
|
+
header: `grep ${JSON.stringify(pattern)}${tailText}`,
|
|
115
|
+
result: buildDefaultResult(spec),
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
const formatLs = (spec) => {
|
|
119
|
+
const input = pickObject(spec.input);
|
|
120
|
+
const path = stringField(input, "path") ?? ".";
|
|
121
|
+
return { header: `ls ${path}`, result: buildDefaultResult(spec) };
|
|
122
|
+
};
|
|
123
|
+
const formatFind = (spec) => {
|
|
124
|
+
const input = pickObject(spec.input);
|
|
125
|
+
const pattern = stringField(input, "pattern") ?? "";
|
|
126
|
+
const path = stringField(input, "path");
|
|
127
|
+
const tail = path ? ` in ${path}` : "";
|
|
128
|
+
return {
|
|
129
|
+
header: `find ${JSON.stringify(pattern)}${tail}`,
|
|
130
|
+
result: buildDefaultResult(spec),
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
const formatAskUserQuestion = (spec) => {
|
|
134
|
+
const input = pickObject(spec.input);
|
|
135
|
+
const questionsRaw = arrayField(input, "questions") ?? [];
|
|
136
|
+
const questions = questionsRaw.filter(isQuestionLike);
|
|
137
|
+
const body = questions
|
|
138
|
+
.map((q) => {
|
|
139
|
+
const heading = q.header ? `${q.header}\n` : "";
|
|
140
|
+
const options = q.options.map((opt) => ` • ${opt.label}`).join("\n");
|
|
141
|
+
return `${heading}${q.question}${options ? `\n${options}` : ""}`;
|
|
142
|
+
})
|
|
143
|
+
.join("\n\n");
|
|
144
|
+
if (spec.mode === "live") {
|
|
145
|
+
// The runner emits an `ask` terminal event that already prints
|
|
146
|
+
// `[question]` and surfaces the picker. Hiding the tool_call avoids the
|
|
147
|
+
// duplicate transcript entry; on resume the history formatter reproduces
|
|
148
|
+
// the same `[question]` block from the persisted call.
|
|
149
|
+
return { header: "[question]", body, hidden: true };
|
|
150
|
+
}
|
|
151
|
+
// History mode: no terminal event replays, so this block carries the full
|
|
152
|
+
// Q&A. Pull the chosen answer out of the tool result if available.
|
|
153
|
+
const answerText = textFromToolContent(spec.output).trim();
|
|
154
|
+
const result = answerText ? { label: "→", body: extractAnswerSummary(answerText) } : undefined;
|
|
155
|
+
return { header: "[question]", body, result };
|
|
156
|
+
};
|
|
157
|
+
function extractAnswerSummary(rawAnswer) {
|
|
158
|
+
// Tool results from ask_user_question are wrapped in an XML envelope by
|
|
159
|
+
// the runner. Pull out the answer values when we recognize them; otherwise
|
|
160
|
+
// fall back to the raw string so nothing is silently dropped.
|
|
161
|
+
const matches = [...rawAnswer.matchAll(/<answers>([\s\S]*?)<\/answers>/g)];
|
|
162
|
+
if (matches.length === 0)
|
|
163
|
+
return truncateToolText(rawAnswer);
|
|
164
|
+
return matches
|
|
165
|
+
.map((m) => m[1].replace(/<[^>]+>/g, "").trim())
|
|
166
|
+
.filter((line) => line.length > 0)
|
|
167
|
+
.join("\n");
|
|
168
|
+
}
|
|
169
|
+
function isQuestionLike(value) {
|
|
170
|
+
if (!value || typeof value !== "object")
|
|
171
|
+
return false;
|
|
172
|
+
const v = value;
|
|
173
|
+
return typeof v.question === "string" && Array.isArray(v.options);
|
|
174
|
+
}
|
|
175
|
+
const formatTodoWrite = (spec) => {
|
|
176
|
+
const input = pickObject(spec.input);
|
|
177
|
+
const merge = booleanField(input, "merge");
|
|
178
|
+
const todos = arrayField(input, "todos") ?? [];
|
|
179
|
+
const verb = merge ? "todo update" : "todo replace";
|
|
180
|
+
const lines = todos
|
|
181
|
+
.map((todo) => {
|
|
182
|
+
if (!todo || typeof todo !== "object")
|
|
183
|
+
return undefined;
|
|
184
|
+
const t = todo;
|
|
185
|
+
const status = typeof t.status === "string" ? t.status : "?";
|
|
186
|
+
const id = typeof t.id === "string" ? t.id : "?";
|
|
187
|
+
const content = typeof t.content === "string" ? t.content : "";
|
|
188
|
+
return `${todoStatusGlyph(status)} ${id}: ${content}`;
|
|
189
|
+
})
|
|
190
|
+
.filter((line) => line !== undefined);
|
|
191
|
+
return {
|
|
192
|
+
header: `${verb} (${todos.length})`,
|
|
193
|
+
body: lines.length > 0 ? lines.join("\n") : undefined,
|
|
194
|
+
// Suppress the stock `[result]` block — todo_write only echoes the same
|
|
195
|
+
// todos back, which the body already shows.
|
|
196
|
+
result: undefined,
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
function todoStatusGlyph(status) {
|
|
200
|
+
switch (status) {
|
|
201
|
+
case "completed":
|
|
202
|
+
return "✓";
|
|
203
|
+
case "in_progress":
|
|
204
|
+
return "▸";
|
|
205
|
+
case "failed":
|
|
206
|
+
return "✗";
|
|
207
|
+
default:
|
|
208
|
+
return "·";
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const formatReadSkill = (spec) => {
|
|
212
|
+
const input = pickObject(spec.input);
|
|
213
|
+
const name = stringField(input, "name") ?? "?";
|
|
214
|
+
return { header: `read skill: ${name}`, result: buildDefaultResult(spec) };
|
|
215
|
+
};
|
|
216
|
+
const formatCreateStateMachine = (spec) => {
|
|
217
|
+
const input = pickObject(spec.input);
|
|
218
|
+
const definition = pickObject(input ? input["definition"] : undefined);
|
|
219
|
+
const smName = stringField(definition, "name") ?? "?";
|
|
220
|
+
const states = arrayField(definition, "states") ?? [];
|
|
221
|
+
const stateNames = states
|
|
222
|
+
.map((s) => s && typeof s === "object" ? stringField(s, "name") : undefined)
|
|
223
|
+
.filter((s) => Boolean(s));
|
|
224
|
+
const body = stateNames.length > 0 ? `states: ${stateNames.join(", ")}` : undefined;
|
|
225
|
+
return {
|
|
226
|
+
header: `state machine ▶ ${smName}`,
|
|
227
|
+
body,
|
|
228
|
+
result: buildDefaultResult(spec),
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
const formatSelectStateMachineState = (spec) => {
|
|
232
|
+
const input = pickObject(spec.input);
|
|
233
|
+
const decision = pickObject(input ? input["decision"] : undefined);
|
|
234
|
+
const kind = stringField(decision, "kind") ?? "?";
|
|
235
|
+
const stateName = stringField(decision, "state");
|
|
236
|
+
const reason = stringField(decision, "reason");
|
|
237
|
+
const tail = stateName ? ` ${stateName}` : "";
|
|
238
|
+
const reasonNote = reason ? `reason: ${reason}` : undefined;
|
|
239
|
+
return {
|
|
240
|
+
header: `→ ${kind}${tail}`,
|
|
241
|
+
body: reasonNote,
|
|
242
|
+
result: buildDefaultResult(spec),
|
|
243
|
+
};
|
|
244
|
+
};
|
|
245
|
+
const formatGetCurrentStateMachineState = (spec) => ({
|
|
246
|
+
header: "state machine status",
|
|
247
|
+
result: buildDefaultResult(spec),
|
|
248
|
+
});
|
|
249
|
+
const TOOL_FORMATTERS = {
|
|
250
|
+
bash: formatBash,
|
|
251
|
+
read: formatRead,
|
|
252
|
+
edit: formatEdit,
|
|
253
|
+
write: formatWrite,
|
|
254
|
+
grep: formatGrep,
|
|
255
|
+
ls: formatLs,
|
|
256
|
+
find: formatFind,
|
|
257
|
+
ask_user_question: formatAskUserQuestion,
|
|
258
|
+
todo_write: formatTodoWrite,
|
|
259
|
+
read_skill: formatReadSkill,
|
|
260
|
+
create_state_machine_definition: formatCreateStateMachine,
|
|
261
|
+
select_state_machine_state: formatSelectStateMachineState,
|
|
262
|
+
get_current_state_machine_state: formatGetCurrentStateMachineState,
|
|
263
|
+
};
|
|
264
|
+
// ---- helpers --------------------------------------------------------------
|
|
265
|
+
function pickObject(value) {
|
|
266
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
267
|
+
return undefined;
|
|
268
|
+
return value;
|
|
269
|
+
}
|
|
270
|
+
function stringField(obj, key) {
|
|
271
|
+
if (!obj)
|
|
272
|
+
return undefined;
|
|
273
|
+
const v = obj[key];
|
|
274
|
+
return typeof v === "string" ? v : undefined;
|
|
275
|
+
}
|
|
276
|
+
function numberField(obj, key) {
|
|
277
|
+
if (!obj)
|
|
278
|
+
return undefined;
|
|
279
|
+
const v = obj[key];
|
|
280
|
+
return typeof v === "number" && Number.isFinite(v) ? v : undefined;
|
|
281
|
+
}
|
|
282
|
+
function booleanField(obj, key) {
|
|
283
|
+
if (!obj)
|
|
284
|
+
return undefined;
|
|
285
|
+
const v = obj[key];
|
|
286
|
+
return typeof v === "boolean" ? v : undefined;
|
|
287
|
+
}
|
|
288
|
+
function arrayField(obj, key) {
|
|
289
|
+
if (!obj)
|
|
290
|
+
return undefined;
|
|
291
|
+
const v = obj[key];
|
|
292
|
+
return Array.isArray(v) ? v : undefined;
|
|
293
|
+
}
|
|
294
|
+
function firstLine(text) {
|
|
295
|
+
const newline = text.indexOf("\n");
|
|
296
|
+
return newline === -1 ? text : text.slice(0, newline);
|
|
297
|
+
}
|
|
298
|
+
function formatLineRange(offset, limit) {
|
|
299
|
+
if (offset !== undefined && limit !== undefined) {
|
|
300
|
+
return `lines ${offset}–${offset + limit - 1}`;
|
|
301
|
+
}
|
|
302
|
+
if (offset !== undefined)
|
|
303
|
+
return `from line ${offset}`;
|
|
304
|
+
if (limit !== undefined)
|
|
305
|
+
return `first ${limit} line${limit === 1 ? "" : "s"}`;
|
|
306
|
+
return "";
|
|
307
|
+
}
|
|
308
|
+
/** Compose a formatter result into a single multi-line string suitable for
|
|
309
|
+
* history rendering or for use as a fallback display surface. The live
|
|
310
|
+
* renderer instead prepends a spinner / marker per its own layout rules. */
|
|
311
|
+
export function composeFormattedToolBlock(formatted, marker) {
|
|
312
|
+
const headerLine = `${formatted.header} ${marker}`.trimEnd();
|
|
313
|
+
const sections = [formatted.body ? `${headerLine}\n${formatted.body}` : headerLine];
|
|
314
|
+
if (formatted.result && formatted.result.body) {
|
|
315
|
+
sections.push(`${formatted.result.label}\n${formatted.result.body}`);
|
|
316
|
+
}
|
|
317
|
+
return sections.join("\n");
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=tool-formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-formatters.js","sourceRoot":"","sources":["../../../src/tui/tool-formatters.ts"],"names":[],"mappings":"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"}
|