hoomanjs 1.35.3 → 1.37.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 +17 -13
- package/dist/acp/acp-agent.d.ts +40 -66
- package/dist/acp/acp-agent.js +786 -398
- package/dist/acp/acp-agent.js.map +1 -1
- package/dist/acp/approvals.d.ts +2 -2
- package/dist/acp/approvals.js +66 -58
- package/dist/acp/approvals.js.map +1 -1
- package/dist/acp/commands.d.ts +20 -0
- package/dist/acp/commands.js +66 -0
- package/dist/acp/commands.js.map +1 -0
- package/dist/acp/index.d.ts +1 -1
- package/dist/acp/index.js +1 -1
- package/dist/acp/index.js.map +1 -1
- package/dist/acp/mcp-servers.js +14 -8
- package/dist/acp/mcp-servers.js.map +1 -1
- package/dist/acp/prompt-invoke.js +103 -49
- package/dist/acp/prompt-invoke.js.map +1 -1
- package/dist/acp/session-config.d.ts +18 -0
- package/dist/acp/session-config.js +52 -0
- package/dist/acp/session-config.js.map +1 -0
- package/dist/acp/sessions/replay.d.ts +2 -2
- package/dist/acp/sessions/replay.js +28 -44
- package/dist/acp/sessions/replay.js.map +1 -1
- package/dist/acp/sessions/store.d.ts +4 -0
- package/dist/acp/sessions/store.js +5 -1
- package/dist/acp/sessions/store.js.map +1 -1
- package/dist/acp/utils/tool-kind.js +2 -2
- package/dist/acp/utils/tool-kind.js.map +1 -1
- package/dist/acp/utils/tool-result-content.d.ts +7 -0
- package/dist/acp/utils/tool-result-content.js +18 -0
- package/dist/acp/utils/tool-result-content.js.map +1 -1
- package/dist/chat/app.js +117 -1
- package/dist/chat/app.js.map +1 -1
- package/dist/chat/components/BottomChrome.d.ts +2 -1
- package/dist/chat/components/BottomChrome.js +2 -2
- package/dist/chat/components/BottomChrome.js.map +1 -1
- package/dist/chat/components/ReasoningStrip.js +3 -1
- package/dist/chat/components/ReasoningStrip.js.map +1 -1
- package/dist/chat/components/StatusBar.d.ts +2 -1
- package/dist/chat/components/StatusBar.js +18 -3
- package/dist/chat/components/StatusBar.js.map +1 -1
- package/dist/chat/components/ThoughtEvent.d.ts +3 -1
- package/dist/chat/components/ThoughtEvent.js +6 -2
- package/dist/chat/components/ThoughtEvent.js.map +1 -1
- package/dist/chat/components/Transcript.d.ts +5 -2
- package/dist/chat/components/Transcript.js +4 -4
- package/dist/chat/components/Transcript.js.map +1 -1
- package/dist/chat/components/markdown/CodeBlock.js.map +1 -1
- package/dist/cli.js +24 -1
- package/dist/cli.js.map +1 -1
- package/dist/configure/app.js +287 -64
- package/dist/configure/app.js.map +1 -1
- package/dist/configure/components/MenuScreen.js +29 -5
- package/dist/configure/components/MenuScreen.js.map +1 -1
- package/dist/configure/types.d.ts +8 -2
- package/dist/core/agent/index.js +17 -4
- package/dist/core/agent/index.js.map +1 -1
- package/dist/core/approvals/allowlist.d.ts +52 -0
- package/dist/core/approvals/allowlist.js +265 -0
- package/dist/core/approvals/allowlist.js.map +1 -0
- package/dist/core/approvals/bash-arity.d.ts +10 -0
- package/dist/core/approvals/bash-arity.js +178 -0
- package/dist/core/approvals/bash-arity.js.map +1 -0
- package/dist/core/approvals/intervention.d.ts +1 -2
- package/dist/core/approvals/intervention.js +5 -20
- package/dist/core/approvals/intervention.js.map +1 -1
- package/dist/core/approvals/wildcard.d.ts +14 -0
- package/dist/core/approvals/wildcard.js +27 -0
- package/dist/core/approvals/wildcard.js.map +1 -0
- package/dist/core/config.d.ts +352 -22
- package/dist/core/config.js +40 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/models/anthropic.d.ts +7 -1
- package/dist/core/models/anthropic.js +36 -7
- package/dist/core/models/anthropic.js.map +1 -1
- package/dist/core/models/azure.js +13 -0
- package/dist/core/models/azure.js.map +1 -1
- package/dist/core/models/bedrock.js +33 -0
- package/dist/core/models/bedrock.js.map +1 -1
- package/dist/core/models/google.js +5 -0
- package/dist/core/models/google.js.map +1 -1
- package/dist/core/models/groq.js +14 -0
- package/dist/core/models/groq.js.map +1 -1
- package/dist/core/models/minimax.js +2 -2
- package/dist/core/models/minimax.js.map +1 -1
- package/dist/core/models/moonshot.js +5 -0
- package/dist/core/models/moonshot.js.map +1 -1
- package/dist/core/models/ollama/index.js +5 -3
- package/dist/core/models/ollama/index.js.map +1 -1
- package/dist/core/models/openai.js +21 -1
- package/dist/core/models/openai.js.map +1 -1
- package/dist/core/models/openrouter.d.ts +2 -2
- package/dist/core/models/openrouter.js +28 -10
- package/dist/core/models/openrouter.js.map +1 -1
- package/dist/core/models/types.d.ts +759 -51
- package/dist/core/models/types.js +43 -7
- package/dist/core/models/types.js.map +1 -1
- package/dist/core/models/xai.js +12 -0
- package/dist/core/models/xai.js.map +1 -1
- package/dist/core/session-config.d.ts +10 -1
- package/dist/core/session-config.js +16 -0
- package/dist/core/session-config.js.map +1 -1
- package/dist/core/skills/built-in/hooman-config/SKILL.md +20 -12
- package/dist/core/state/file-tool-display.d.ts +6 -0
- package/dist/core/state/file-tool-display.js.map +1 -1
- package/dist/core/state/todos.d.ts +11 -0
- package/dist/core/state/todos.js +2 -0
- package/dist/core/state/todos.js.map +1 -1
- package/dist/core/state/tool-approvals.d.ts +6 -7
- package/dist/core/state/tool-approvals.js +7 -50
- package/dist/core/state/tool-approvals.js.map +1 -1
- package/dist/core/tools/filesystem.js +83 -27
- package/dist/core/tools/filesystem.js.map +1 -1
- package/dist/core/tools/shell.js +39 -0
- package/dist/core/tools/shell.js.map +1 -1
- package/dist/core/tools/terminal-backend.d.ts +41 -0
- package/dist/core/tools/terminal-backend.js +9 -0
- package/dist/core/tools/terminal-backend.js.map +1 -0
- package/dist/core/tools/text-fs-backend.d.ts +25 -0
- package/dist/core/tools/text-fs-backend.js +9 -0
- package/dist/core/tools/text-fs-backend.js.map +1 -0
- package/dist/core/tools/todo.d.ts +1 -0
- package/dist/core/tools/todo.js +2 -1
- package/dist/core/tools/todo.js.map +1 -1
- package/dist/core/tools/web-search.js +56 -1
- package/dist/core/tools/web-search.js.map +1 -1
- package/dist/core/utils/attachments.js.map +1 -1
- package/dist/core/utils/paths.d.ts +1 -0
- package/dist/core/utils/paths.js +1 -0
- package/dist/core/utils/paths.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/dist/acp/sessions/options.d.ts +0 -10
- package/dist/acp/sessions/options.js +0 -89
- package/dist/acp/sessions/options.js.map +0 -1
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { DocumentBlock, ImageBlock, Message, TextBlock, } from "@strands-agents/sdk";
|
|
1
|
+
import { DocumentBlock, ImageBlock, Message, TextBlock, VideoBlock, } from "@strands-agents/sdk";
|
|
2
2
|
function decodeBase64(data) {
|
|
3
3
|
return new Uint8Array(Buffer.from(data, "base64"));
|
|
4
4
|
}
|
|
5
|
-
function
|
|
5
|
+
function basename(uri) {
|
|
6
|
+
const trimmed = uri.split(/[?#]/, 1)[0] ?? uri;
|
|
7
|
+
const tail = trimmed.split("/").pop();
|
|
8
|
+
return tail && tail.length > 0 ? tail : "attachment";
|
|
9
|
+
}
|
|
10
|
+
function imageFormatFromMime(mime) {
|
|
6
11
|
const m = mime.toLowerCase();
|
|
7
|
-
if (m.includes("png"))
|
|
8
|
-
return "png";
|
|
9
12
|
if (m.includes("jpeg") || m.includes("jpg"))
|
|
10
13
|
return "jpeg";
|
|
11
14
|
if (m.includes("gif"))
|
|
@@ -14,10 +17,40 @@ function mimeToImageFormat(mime) {
|
|
|
14
17
|
return "webp";
|
|
15
18
|
return "png";
|
|
16
19
|
}
|
|
17
|
-
function
|
|
20
|
+
function videoFormatFromMime(mime) {
|
|
21
|
+
const m = mime.toLowerCase();
|
|
22
|
+
if (m.includes("mp4"))
|
|
23
|
+
return "mp4";
|
|
24
|
+
if (m.includes("webm"))
|
|
25
|
+
return "webm";
|
|
26
|
+
if (m.includes("quicktime") || m.includes("mov"))
|
|
27
|
+
return "mov";
|
|
28
|
+
if (m.includes("matroska") || m.includes("mkv"))
|
|
29
|
+
return "mkv";
|
|
30
|
+
if (m.includes("mpeg") || m.includes("mpg"))
|
|
31
|
+
return "mpeg";
|
|
32
|
+
if (m.includes("flv"))
|
|
33
|
+
return "flv";
|
|
34
|
+
if (m.includes("wmv"))
|
|
35
|
+
return "wmv";
|
|
36
|
+
if (m.includes("3gp"))
|
|
37
|
+
return "3gp";
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
function docFormatFromMime(mime) {
|
|
18
41
|
const m = mime.toLowerCase();
|
|
19
42
|
if (m.includes("pdf"))
|
|
20
43
|
return "pdf";
|
|
44
|
+
if (m.includes("csv"))
|
|
45
|
+
return "csv";
|
|
46
|
+
if (m.includes("wordprocessingml") || m.endsWith("/docx"))
|
|
47
|
+
return "docx";
|
|
48
|
+
if (m.includes("msword") || m.endsWith("/doc"))
|
|
49
|
+
return "doc";
|
|
50
|
+
if (m.includes("spreadsheetml") || m.endsWith("/xlsx"))
|
|
51
|
+
return "xlsx";
|
|
52
|
+
if (m.includes("ms-excel") || m.endsWith("/xls"))
|
|
53
|
+
return "xls";
|
|
21
54
|
if (m.includes("html"))
|
|
22
55
|
return "html";
|
|
23
56
|
if (m.includes("markdown") || m.endsWith("/md"))
|
|
@@ -26,61 +59,79 @@ function mimeToDocFormat(mime) {
|
|
|
26
59
|
return "json";
|
|
27
60
|
if (m.includes("xml"))
|
|
28
61
|
return "xml";
|
|
29
|
-
if (m.includes("csv"))
|
|
30
|
-
return "csv";
|
|
31
62
|
return "txt";
|
|
32
63
|
}
|
|
64
|
+
/** Faithful representation of an embedded text resource (preserves its URI). */
|
|
65
|
+
function textResourceToStrands(r) {
|
|
66
|
+
const mime = r.mimeType ? ` (${r.mimeType})` : "";
|
|
67
|
+
return [new TextBlock(`Attached resource ${r.uri}${mime}:\n\n${r.text}`)];
|
|
68
|
+
}
|
|
69
|
+
/** Route an embedded binary resource to the closest Strands media block. */
|
|
70
|
+
function blobResourceToStrands(r) {
|
|
71
|
+
const bytes = decodeBase64(r.blob);
|
|
72
|
+
const mime = (r.mimeType ?? "application/octet-stream").toLowerCase();
|
|
73
|
+
if (mime.startsWith("image/")) {
|
|
74
|
+
return [
|
|
75
|
+
new ImageBlock({
|
|
76
|
+
format: imageFormatFromMime(mime),
|
|
77
|
+
source: { bytes },
|
|
78
|
+
}),
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
if (mime.startsWith("video/")) {
|
|
82
|
+
const format = videoFormatFromMime(mime);
|
|
83
|
+
if (format) {
|
|
84
|
+
return [new VideoBlock({ format, source: { bytes } })];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return [
|
|
88
|
+
new DocumentBlock({
|
|
89
|
+
format: docFormatFromMime(mime),
|
|
90
|
+
name: basename(r.uri),
|
|
91
|
+
source: { bytes },
|
|
92
|
+
context: r.uri,
|
|
93
|
+
}),
|
|
94
|
+
];
|
|
95
|
+
}
|
|
96
|
+
/** Text describing a resource link (metadata the agent may act on via tools). */
|
|
97
|
+
function resourceLinkText(block) {
|
|
98
|
+
const label = block.title?.trim() || block.name;
|
|
99
|
+
const meta = [];
|
|
100
|
+
if (block.mimeType)
|
|
101
|
+
meta.push(block.mimeType);
|
|
102
|
+
if (typeof block.size === "number")
|
|
103
|
+
meta.push(`${block.size} bytes`);
|
|
104
|
+
const suffix = meta.length > 0 ? ` (${meta.join(", ")})` : "";
|
|
105
|
+
const desc = block.description?.trim() ? `\n${block.description.trim()}` : "";
|
|
106
|
+
return `[resource_link ${label}](${block.uri})${suffix}${desc}`;
|
|
107
|
+
}
|
|
33
108
|
function acpBlockToStrands(block) {
|
|
34
109
|
switch (block.type) {
|
|
35
110
|
case "text":
|
|
36
111
|
return [new TextBlock(block.text)];
|
|
37
|
-
case "resource_link":
|
|
38
|
-
return [
|
|
39
|
-
new TextBlock(`[resource_link name=${JSON.stringify(block.name)} uri=${JSON.stringify(block.uri)}]`),
|
|
40
|
-
];
|
|
41
|
-
case "resource": {
|
|
42
|
-
const r = block.resource;
|
|
43
|
-
if ("text" in r) {
|
|
44
|
-
return [new TextBlock(r.text)];
|
|
45
|
-
}
|
|
46
|
-
const bytes = decodeBase64(r.blob);
|
|
47
|
-
const mime = (r.mimeType ?? "application/octet-stream").toLowerCase();
|
|
48
|
-
if (mime.startsWith("image/")) {
|
|
49
|
-
return [
|
|
50
|
-
new ImageBlock({
|
|
51
|
-
format: mimeToImageFormat(mime),
|
|
52
|
-
source: { bytes },
|
|
53
|
-
}),
|
|
54
|
-
];
|
|
55
|
-
}
|
|
56
|
-
return [
|
|
57
|
-
new DocumentBlock({
|
|
58
|
-
format: mimeToDocFormat(mime),
|
|
59
|
-
name: r.uri.split("/").pop() ?? "attachment",
|
|
60
|
-
source: { bytes },
|
|
61
|
-
}),
|
|
62
|
-
];
|
|
63
|
-
}
|
|
64
112
|
case "image": {
|
|
65
113
|
const bytes = decodeBase64(block.data);
|
|
66
114
|
return [
|
|
67
115
|
new ImageBlock({
|
|
68
|
-
format:
|
|
116
|
+
format: imageFormatFromMime(block.mimeType),
|
|
69
117
|
source: { bytes },
|
|
70
118
|
}),
|
|
71
119
|
];
|
|
72
120
|
}
|
|
73
121
|
case "audio": {
|
|
122
|
+
// Strands has no audio content block; surface a descriptive marker so the
|
|
123
|
+
// model is aware of the attachment without receiving unusable bytes.
|
|
74
124
|
const bytes = decodeBase64(block.data);
|
|
75
125
|
return [
|
|
76
|
-
new TextBlock(`[audio mimeType=${JSON.stringify(block.mimeType)} bytes=${bytes.byteLength}]`),
|
|
77
|
-
new DocumentBlock({
|
|
78
|
-
format: "txt",
|
|
79
|
-
name: "audio.bin",
|
|
80
|
-
source: { bytes },
|
|
81
|
-
}),
|
|
126
|
+
new TextBlock(`[audio attachment mimeType=${JSON.stringify(block.mimeType)} bytes=${bytes.byteLength} — not forwarded to the model]`),
|
|
82
127
|
];
|
|
83
128
|
}
|
|
129
|
+
case "resource":
|
|
130
|
+
return "text" in block.resource
|
|
131
|
+
? textResourceToStrands(block.resource)
|
|
132
|
+
: blobResourceToStrands(block.resource);
|
|
133
|
+
case "resource_link":
|
|
134
|
+
return [new TextBlock(resourceLinkText(block))];
|
|
84
135
|
default:
|
|
85
136
|
return [
|
|
86
137
|
new TextBlock(`[unsupported ACP block ${JSON.stringify(block)}]`),
|
|
@@ -105,22 +156,25 @@ export function acpPromptEchoText(prompt) {
|
|
|
105
156
|
case "text":
|
|
106
157
|
lines.push(block.text);
|
|
107
158
|
break;
|
|
108
|
-
case "
|
|
109
|
-
lines.push(`[
|
|
159
|
+
case "image":
|
|
160
|
+
lines.push(`[image ${block.mimeType} ${block.data.length} b64 chars]`);
|
|
161
|
+
break;
|
|
162
|
+
case "audio":
|
|
163
|
+
lines.push(`[audio ${block.mimeType} ${block.data.length} b64 chars]`);
|
|
110
164
|
break;
|
|
111
165
|
case "resource":
|
|
112
166
|
if ("text" in block.resource) {
|
|
113
|
-
|
|
167
|
+
const mime = block.resource.mimeType
|
|
168
|
+
? ` (${block.resource.mimeType})`
|
|
169
|
+
: "";
|
|
170
|
+
lines.push(`Attached resource ${block.resource.uri}${mime}:\n\n${block.resource.text}`);
|
|
114
171
|
}
|
|
115
172
|
else {
|
|
116
173
|
lines.push(`[binary resource uri=${block.resource.uri} mime=${block.resource.mimeType ?? ""} len=${block.resource.blob.length}]`);
|
|
117
174
|
}
|
|
118
175
|
break;
|
|
119
|
-
case "
|
|
120
|
-
lines.push(
|
|
121
|
-
break;
|
|
122
|
-
case "audio":
|
|
123
|
-
lines.push(`[audio ${block.mimeType} ${block.data.length} b64 chars]`);
|
|
176
|
+
case "resource_link":
|
|
177
|
+
lines.push(resourceLinkText(block));
|
|
124
178
|
break;
|
|
125
179
|
default:
|
|
126
180
|
lines.push(JSON.stringify(block));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-invoke.js","sourceRoot":"","sources":["../../src/acp/prompt-invoke.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt-invoke.js","sourceRoot":"","sources":["../../src/acp/prompt-invoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SessionConfigOption } from "@agentclientprotocol/sdk";
|
|
2
|
+
import type { Config } from "../core/config.js";
|
|
3
|
+
import type { SessionMode } from "../core/modes/schema.js";
|
|
4
|
+
/** Config option id for the session mode selector (mirrors `session/set_mode`). */
|
|
5
|
+
export declare const CONFIG_ID_MODE = "mode";
|
|
6
|
+
/** Config option id for the language-model selector. */
|
|
7
|
+
export declare const CONFIG_ID_MODEL = "model";
|
|
8
|
+
/** Name of the currently-active (default) named LLM, if any are configured. */
|
|
9
|
+
export declare function currentModelName(config: Config): string | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Build the ACP `configOptions` advertised for a session: a language-model
|
|
12
|
+
* selector (the requested feature) followed by the session-mode selector.
|
|
13
|
+
*
|
|
14
|
+
* Session Config Options supersede the older `modes` field; agents that expose
|
|
15
|
+
* mode-like config should send both and keep them in sync during the transition
|
|
16
|
+
* (see https://agentclientprotocol.com/protocol/v1/session-config-options).
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildSessionConfigOptions(config: Config, currentMode: SessionMode): SessionConfigOption[];
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { MODE_DEFINITIONS } from "../core/modes/definitions.js";
|
|
2
|
+
/** Config option id for the session mode selector (mirrors `session/set_mode`). */
|
|
3
|
+
export const CONFIG_ID_MODE = "mode";
|
|
4
|
+
/** Config option id for the language-model selector. */
|
|
5
|
+
export const CONFIG_ID_MODEL = "model";
|
|
6
|
+
/** Name of the currently-active (default) named LLM, if any are configured. */
|
|
7
|
+
export function currentModelName(config) {
|
|
8
|
+
return (config.llms.find((entry) => entry.default)?.name ?? config.llms[0]?.name);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Build the ACP `configOptions` advertised for a session: a language-model
|
|
12
|
+
* selector (the requested feature) followed by the session-mode selector.
|
|
13
|
+
*
|
|
14
|
+
* Session Config Options supersede the older `modes` field; agents that expose
|
|
15
|
+
* mode-like config should send both and keep them in sync during the transition
|
|
16
|
+
* (see https://agentclientprotocol.com/protocol/v1/session-config-options).
|
|
17
|
+
*/
|
|
18
|
+
export function buildSessionConfigOptions(config, currentMode) {
|
|
19
|
+
const options = [];
|
|
20
|
+
const modelValues = config.llms.map((llm) => ({
|
|
21
|
+
value: llm.name,
|
|
22
|
+
name: llm.name,
|
|
23
|
+
description: `${llm.provider}/${llm.options.model}`,
|
|
24
|
+
}));
|
|
25
|
+
const currentModel = currentModelName(config);
|
|
26
|
+
if (modelValues.length > 0 && currentModel) {
|
|
27
|
+
options.push({
|
|
28
|
+
id: CONFIG_ID_MODEL,
|
|
29
|
+
name: "Model",
|
|
30
|
+
description: "Language model used for this session",
|
|
31
|
+
category: "model",
|
|
32
|
+
type: "select",
|
|
33
|
+
currentValue: currentModel,
|
|
34
|
+
options: modelValues,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
options.push({
|
|
38
|
+
id: CONFIG_ID_MODE,
|
|
39
|
+
name: "Session Mode",
|
|
40
|
+
description: "Controls the tool surface and permission behaviour",
|
|
41
|
+
category: "mode",
|
|
42
|
+
type: "select",
|
|
43
|
+
currentValue: currentMode,
|
|
44
|
+
options: MODE_DEFINITIONS.map((mode) => ({
|
|
45
|
+
value: mode.id,
|
|
46
|
+
name: mode.name,
|
|
47
|
+
description: mode.description,
|
|
48
|
+
})),
|
|
49
|
+
});
|
|
50
|
+
return options;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=session-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-config.js","sourceRoot":"","sources":["../../src/acp/session-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AACrC,wDAAwD;AACxD,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAEvC,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,CACL,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CACzE,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAc,EACd,WAAwB;IAExB,MAAM,OAAO,GAA0B,EAAE,CAAC;IAE1C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5C,KAAK,EAAE,GAAG,CAAC,IAAI;QACf,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,WAAW,EAAE,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE;KACpD,CAAC,CAAC,CAAC;IACJ,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,sCAAsC;YACnD,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,YAAY;YAC1B,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;QACX,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,oDAAoD;QACjE,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,WAAW;QACzB,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,EAAE;YACd,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AgentContext } from "@agentclientprotocol/sdk";
|
|
2
2
|
import type { Message } from "@strands-agents/sdk";
|
|
3
3
|
/**
|
|
4
4
|
* Replay persisted conversation to the client using ACP session updates.
|
|
5
5
|
* Emits separate chunks for text vs structured tool call / result updates.
|
|
6
6
|
*/
|
|
7
|
-
export declare function replayConversationHistory(
|
|
7
|
+
export declare function replayConversationHistory(client: AgentContext, sessionId: string, messages: Message[]): Promise<void>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { methods, } from "@agentclientprotocol/sdk";
|
|
1
2
|
import { ToolResultBlock, ToolUseBlock, } from "@strands-agents/sdk";
|
|
2
3
|
import { inferToolKind } from "../utils/tool-kind.js";
|
|
3
4
|
import { toolResultToAcpContent } from "../utils/tool-result-content.js";
|
|
@@ -27,33 +28,28 @@ function collectToolResults(messages) {
|
|
|
27
28
|
* Replay persisted conversation to the client using ACP session updates.
|
|
28
29
|
* Emits separate chunks for text vs structured tool call / result updates.
|
|
29
30
|
*/
|
|
30
|
-
export async function replayConversationHistory(
|
|
31
|
+
export async function replayConversationHistory(client, sessionId, messages) {
|
|
32
|
+
const send = (update) => client.notify(methods.client.session.update, { sessionId, update });
|
|
31
33
|
const resultsByToolUseId = collectToolResults(messages);
|
|
32
34
|
for (const message of messages) {
|
|
33
35
|
const role = message.role;
|
|
34
36
|
for (const block of message.content) {
|
|
35
37
|
if (role === "user") {
|
|
36
38
|
if (block instanceof ToolResultBlock) {
|
|
37
|
-
await
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
rawOutput: block.toJSON(),
|
|
44
|
-
content: toolResultToAcpContent(block),
|
|
45
|
-
},
|
|
39
|
+
await send({
|
|
40
|
+
sessionUpdate: "tool_call_update",
|
|
41
|
+
toolCallId: block.toolUseId,
|
|
42
|
+
status: block.status === "success" ? "completed" : "failed",
|
|
43
|
+
rawOutput: block.toJSON(),
|
|
44
|
+
content: toolResultToAcpContent(block),
|
|
46
45
|
});
|
|
47
46
|
continue;
|
|
48
47
|
}
|
|
49
48
|
const text = blockToFallbackText(block);
|
|
50
49
|
if (text?.trim()) {
|
|
51
|
-
await
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
sessionUpdate: "user_message_chunk",
|
|
55
|
-
content: { type: "text", text },
|
|
56
|
-
},
|
|
50
|
+
await send({
|
|
51
|
+
sessionUpdate: "user_message_chunk",
|
|
52
|
+
content: { type: "text", text },
|
|
57
53
|
});
|
|
58
54
|
}
|
|
59
55
|
continue;
|
|
@@ -61,28 +57,22 @@ export async function replayConversationHistory(connection, sessionId, messages)
|
|
|
61
57
|
if (role === "assistant") {
|
|
62
58
|
if (block instanceof ToolUseBlock) {
|
|
63
59
|
const hasResult = resultsByToolUseId.has(block.toolUseId);
|
|
64
|
-
await
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
rawInput: block.input,
|
|
72
|
-
status: hasResult ? "in_progress" : "completed",
|
|
73
|
-
},
|
|
60
|
+
await send({
|
|
61
|
+
sessionUpdate: "tool_call",
|
|
62
|
+
toolCallId: block.toolUseId,
|
|
63
|
+
title: block.name,
|
|
64
|
+
kind: inferToolKind(block.name),
|
|
65
|
+
rawInput: block.input,
|
|
66
|
+
status: hasResult ? "in_progress" : "completed",
|
|
74
67
|
});
|
|
75
68
|
continue;
|
|
76
69
|
}
|
|
77
70
|
if (block.type === "textBlock") {
|
|
78
71
|
const t = block.text;
|
|
79
72
|
if (t) {
|
|
80
|
-
await
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
sessionUpdate: "agent_message_chunk",
|
|
84
|
-
content: { type: "text", text: t },
|
|
85
|
-
},
|
|
73
|
+
await send({
|
|
74
|
+
sessionUpdate: "agent_message_chunk",
|
|
75
|
+
content: { type: "text", text: t },
|
|
86
76
|
});
|
|
87
77
|
}
|
|
88
78
|
continue;
|
|
@@ -90,24 +80,18 @@ export async function replayConversationHistory(connection, sessionId, messages)
|
|
|
90
80
|
if (block.type === "reasoningBlock") {
|
|
91
81
|
const t = blockToFallbackText(block);
|
|
92
82
|
if (t?.trim()) {
|
|
93
|
-
await
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
sessionUpdate: "agent_thought_chunk",
|
|
97
|
-
content: { type: "text", text: t },
|
|
98
|
-
},
|
|
83
|
+
await send({
|
|
84
|
+
sessionUpdate: "agent_thought_chunk",
|
|
85
|
+
content: { type: "text", text: t },
|
|
99
86
|
});
|
|
100
87
|
}
|
|
101
88
|
continue;
|
|
102
89
|
}
|
|
103
90
|
const fallback = blockToFallbackText(block);
|
|
104
91
|
if (fallback?.trim()) {
|
|
105
|
-
await
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
sessionUpdate: "agent_message_chunk",
|
|
109
|
-
content: { type: "text", text: fallback },
|
|
110
|
-
},
|
|
92
|
+
await send({
|
|
93
|
+
sessionUpdate: "agent_message_chunk",
|
|
94
|
+
content: { type: "text", text: fallback },
|
|
111
95
|
});
|
|
112
96
|
}
|
|
113
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../../src/acp/sessions/replay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../../src/acp/sessions/replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@ export type SessionMetaFile = {
|
|
|
18
18
|
yolo?: boolean;
|
|
19
19
|
/** Persisted session planning mode (`hooman.sessionMode` / agent appState `mode`). */
|
|
20
20
|
sessionMode?: SessionMode;
|
|
21
|
+
/** Persisted named LLM (`config.llms[].name`) selected via `session/set_config_option`. */
|
|
22
|
+
model?: string;
|
|
21
23
|
};
|
|
22
24
|
export declare function sessionDir(root: string, sessionId: string): string;
|
|
23
25
|
export declare function writeSessionMeta(root: string, sessionId: string, meta: SessionMetaFile): Promise<void>;
|
|
@@ -26,5 +28,7 @@ export declare function patchSessionMeta(root: string, sessionId: string, patch:
|
|
|
26
28
|
export declare function readSessionMeta(root: string, sessionId: string): Promise<SessionMetaFile | null>;
|
|
27
29
|
export declare function saveSessionMessages(root: string, sessionId: string, messages: MessageData[]): Promise<void>;
|
|
28
30
|
export declare function loadSessionMessages(root: string, sessionId: string): Promise<MessageData[]>;
|
|
31
|
+
/** Hard-delete a persisted session. No-op when it does not exist. */
|
|
32
|
+
export declare function deleteStoredSession(root: string, sessionId: string): Promise<void>;
|
|
29
33
|
export declare function listStoredSessionIds(root: string): Promise<string[]>;
|
|
30
34
|
export declare function toSessionInfo(root: string, sessionId: string): Promise<SessionInfo | null>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
|
|
1
|
+
import { mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
const META = "meta.json";
|
|
4
4
|
const MESSAGES = "messages.json";
|
|
@@ -72,6 +72,10 @@ export async function loadSessionMessages(root, sessionId) {
|
|
|
72
72
|
return [];
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
+
/** Hard-delete a persisted session. No-op when it does not exist. */
|
|
76
|
+
export async function deleteStoredSession(root, sessionId) {
|
|
77
|
+
await rm(sessionDir(root, sessionId), { recursive: true, force: true });
|
|
78
|
+
}
|
|
75
79
|
export async function listStoredSessionIds(root) {
|
|
76
80
|
try {
|
|
77
81
|
const names = await readdir(root, { withFileTypes: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/acp/sessions/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/acp/sessions/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,8 +26,8 @@ const KNOWN_TOOL_KINDS = new Map([
|
|
|
26
26
|
["update_todos", "other"],
|
|
27
27
|
["get_current_time", "other"],
|
|
28
28
|
["convert_time", "other"],
|
|
29
|
-
[ENTER_PLAN_MODE_TOOL, "
|
|
30
|
-
[EXIT_PLAN_MODE_TOOL, "
|
|
29
|
+
[ENTER_PLAN_MODE_TOOL, "switch_mode"],
|
|
30
|
+
[EXIT_PLAN_MODE_TOOL, "switch_mode"],
|
|
31
31
|
]);
|
|
32
32
|
export { INTERNAL_ALWAYS_ALLOWED };
|
|
33
33
|
export function inferToolKind(toolName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-kind.js","sourceRoot":"","sources":["../../../src/acp/utils/tool-kind.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAmB;IACjD,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAC/B,CAAC,YAAY,EAAE,MAAM,CAAC;IACtB,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAC5B,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,eAAe,EAAE,MAAM,CAAC;IACzB,CAAC,OAAO,EAAE,SAAS,CAAC;IACpB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,KAAK,EAAE,OAAO,CAAC;IAChB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,YAAY,EAAE,QAAQ,CAAC;IACxB,CAAC,QAAQ,EAAE,OAAO,CAAC;IACnB,CAAC,4BAA4B,EAAE,MAAM,CAAC;IACtC,CAAC,eAAe,EAAE,QAAQ,CAAC;IAC3B,CAAC,2BAA2B,EAAE,OAAO,CAAC;IACtC,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,mBAAmB,EAAE,OAAO,CAAC;IAC9B,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC5B,CAAC,4BAA4B,EAAE,OAAO,CAAC;IACvC,CAAC,cAAc,EAAE,OAAO,CAAC;IACzB,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAC7B,CAAC,cAAc,EAAE,OAAO,CAAC;IACzB,CAAC,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"tool-kind.js","sourceRoot":"","sources":["../../../src/acp/utils/tool-kind.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAmB;IACjD,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAC/B,CAAC,YAAY,EAAE,MAAM,CAAC;IACtB,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAC5B,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAC1B,CAAC,WAAW,EAAE,MAAM,CAAC;IACrB,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,eAAe,EAAE,MAAM,CAAC;IACzB,CAAC,OAAO,EAAE,SAAS,CAAC;IACpB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,KAAK,EAAE,OAAO,CAAC;IAChB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,YAAY,EAAE,QAAQ,CAAC;IACxB,CAAC,QAAQ,EAAE,OAAO,CAAC;IACnB,CAAC,4BAA4B,EAAE,MAAM,CAAC;IACtC,CAAC,eAAe,EAAE,QAAQ,CAAC;IAC3B,CAAC,2BAA2B,EAAE,OAAO,CAAC;IACtC,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,mBAAmB,EAAE,OAAO,CAAC;IAC9B,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC5B,CAAC,4BAA4B,EAAE,OAAO,CAAC;IACvC,CAAC,cAAc,EAAE,OAAO,CAAC;IACzB,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAC7B,CAAC,cAAc,EAAE,OAAO,CAAC;IACzB,CAAC,oBAAoB,EAAE,aAAa,CAAC;IACrC,CAAC,mBAAmB,EAAE,aAAa,CAAC;CACrC,CAAC,CAAC;AAEH,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,IAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACvC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QAC/B,OAAO,GAAG,QAAQ,KAAK,IAAI,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { ToolCallContent } from "@agentclientprotocol/sdk";
|
|
2
|
+
import type { FileToolDisplay } from "../../core/state/file-tool-display.js";
|
|
3
|
+
/**
|
|
4
|
+
* ACP `diff` content for a file-modifying tool, when the tool captured the
|
|
5
|
+
* before/after text. Returns `undefined` for non-file tools so the caller can
|
|
6
|
+
* fall back to {@link toolResultToAcpContent}.
|
|
7
|
+
*/
|
|
8
|
+
export declare function fileToolDiffContent(display: FileToolDisplay | undefined): Array<ToolCallContent> | undefined;
|
|
2
9
|
type ToolResultLike = {
|
|
3
10
|
toolUseId: string;
|
|
4
11
|
status: string;
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP `diff` content for a file-modifying tool, when the tool captured the
|
|
3
|
+
* before/after text. Returns `undefined` for non-file tools so the caller can
|
|
4
|
+
* fall back to {@link toolResultToAcpContent}.
|
|
5
|
+
*/
|
|
6
|
+
export function fileToolDiffContent(display) {
|
|
7
|
+
if (!display || display.path === undefined || display.newText === undefined) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
type: "diff",
|
|
13
|
+
path: display.path,
|
|
14
|
+
oldText: display.oldText ?? null,
|
|
15
|
+
newText: display.newText,
|
|
16
|
+
},
|
|
17
|
+
];
|
|
18
|
+
}
|
|
1
19
|
function capText(text, max = 12_000) {
|
|
2
20
|
return text.length > max ? `${text.slice(0, max)}\n...(truncated)` : text;
|
|
3
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-result-content.js","sourceRoot":"","sources":["../../../src/acp/utils/tool-result-content.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-result-content.js","sourceRoot":"","sources":["../../../src/acp/utils/tool-result-content.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAoC;IAEpC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB;KACF,CAAC;AACJ,CAAC;AAQD,SAAS,OAAO,CAAC,IAAY,EAAE,GAAG,GAAG,MAAM;IACzC,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAsB;IAEtB,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,IAAI,CAAC,SAAS,CACnB,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EACtD,IAAI,EACJ,CAAC,CACF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC"}
|