longer-agent 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/LICENSE +21 -0
- package/README.md +227 -0
- package/README.zh-CN.md +227 -0
- package/agent_templates/executor/agent.yaml +22 -0
- package/agent_templates/executor/system_prompt.md +17 -0
- package/agent_templates/explorer/agent.yaml +13 -0
- package/agent_templates/explorer/system_prompt.md +19 -0
- package/agent_templates/main/agent.yaml +7 -0
- package/agent_templates/main/system_prompt.md +45 -0
- package/configExample.yaml +83 -0
- package/dist/agents/agent.d.ts +79 -0
- package/dist/agents/agent.d.ts.map +1 -0
- package/dist/agents/agent.js +156 -0
- package/dist/agents/agent.js.map +1 -0
- package/dist/agents/tool-loop.d.ts +140 -0
- package/dist/agents/tool-loop.d.ts.map +1 -0
- package/dist/agents/tool-loop.js +465 -0
- package/dist/agents/tool-loop.js.map +1 -0
- package/dist/ask.d.ts +81 -0
- package/dist/ask.d.ts.map +1 -0
- package/dist/ask.js +34 -0
- package/dist/ask.js.map +1 -0
- package/dist/auth/openai-oauth.d.ts +66 -0
- package/dist/auth/openai-oauth.d.ts.map +1 -0
- package/dist/auth/openai-oauth.js +640 -0
- package/dist/auth/openai-oauth.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +254 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +118 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +862 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +130 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +648 -0
- package/dist/config.js.map +1 -0
- package/dist/context-rendering.d.ts +69 -0
- package/dist/context-rendering.d.ts.map +1 -0
- package/dist/context-rendering.js +250 -0
- package/dist/context-rendering.js.map +1 -0
- package/dist/document-projection.d.ts +12 -0
- package/dist/document-projection.d.ts.map +1 -0
- package/dist/document-projection.js +75 -0
- package/dist/document-projection.js.map +1 -0
- package/dist/ephemeral-log.d.ts +15 -0
- package/dist/ephemeral-log.d.ts.map +1 -0
- package/dist/ephemeral-log.js +173 -0
- package/dist/ephemeral-log.js.map +1 -0
- package/dist/file-attach.d.ts +89 -0
- package/dist/file-attach.d.ts.map +1 -0
- package/dist/file-attach.js +571 -0
- package/dist/file-attach.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/init-wizard.d.ts +13 -0
- package/dist/init-wizard.d.ts.map +1 -0
- package/dist/init-wizard.js +328 -0
- package/dist/init-wizard.js.map +1 -0
- package/dist/log-entry.d.ts +104 -0
- package/dist/log-entry.d.ts.map +1 -0
- package/dist/log-entry.js +292 -0
- package/dist/log-entry.js.map +1 -0
- package/dist/log-projection.d.ts +73 -0
- package/dist/log-projection.d.ts.map +1 -0
- package/dist/log-projection.js +651 -0
- package/dist/log-projection.js.map +1 -0
- package/dist/mcp-client.d.ts +55 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +402 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/model-selection.d.ts +16 -0
- package/dist/model-selection.d.ts.map +1 -0
- package/dist/model-selection.js +181 -0
- package/dist/model-selection.js.map +1 -0
- package/dist/network-retry.d.ts +38 -0
- package/dist/network-retry.d.ts.map +1 -0
- package/dist/network-retry.js +140 -0
- package/dist/network-retry.js.map +1 -0
- package/dist/persistence.d.ts +104 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/persistence.js +644 -0
- package/dist/persistence.js.map +1 -0
- package/dist/primitives/context.d.ts +29 -0
- package/dist/primitives/context.d.ts.map +1 -0
- package/dist/primitives/context.js +85 -0
- package/dist/primitives/context.js.map +1 -0
- package/dist/progress.d.ts +51 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +229 -0
- package/dist/progress.js.map +1 -0
- package/dist/provider-presets.d.ts +34 -0
- package/dist/provider-presets.d.ts.map +1 -0
- package/dist/provider-presets.js +181 -0
- package/dist/provider-presets.js.map +1 -0
- package/dist/providers/anthropic.d.ts +32 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +450 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +135 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +104 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/glm.d.ts +18 -0
- package/dist/providers/glm.d.ts.map +1 -0
- package/dist/providers/glm.js +59 -0
- package/dist/providers/glm.js.map +1 -0
- package/dist/providers/kimi.d.ts +23 -0
- package/dist/providers/kimi.d.ts.map +1 -0
- package/dist/providers/kimi.js +89 -0
- package/dist/providers/kimi.js.map +1 -0
- package/dist/providers/minimax.d.ts +20 -0
- package/dist/providers/minimax.d.ts.map +1 -0
- package/dist/providers/minimax.js +192 -0
- package/dist/providers/minimax.js.map +1 -0
- package/dist/providers/openai-chat.d.ts +33 -0
- package/dist/providers/openai-chat.d.ts.map +1 -0
- package/dist/providers/openai-chat.js +543 -0
- package/dist/providers/openai-chat.js.map +1 -0
- package/dist/providers/openai-responses.d.ts +26 -0
- package/dist/providers/openai-responses.d.ts.map +1 -0
- package/dist/providers/openai-responses.js +443 -0
- package/dist/providers/openai-responses.js.map +1 -0
- package/dist/providers/openrouter.d.ts +24 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +177 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/registry.d.ts +7 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +38 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/security/path.d.ts +51 -0
- package/dist/security/path.d.ts.map +1 -0
- package/dist/security/path.js +187 -0
- package/dist/security/path.js.map +1 -0
- package/dist/security/sensitive-files.d.ts +3 -0
- package/dist/security/sensitive-files.d.ts.map +1 -0
- package/dist/security/sensitive-files.js +41 -0
- package/dist/security/sensitive-files.js.map +1 -0
- package/dist/session.d.ts +446 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +4595 -0
- package/dist/session.js.map +1 -0
- package/dist/settings.d.ts +46 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +134 -0
- package/dist/settings.js.map +1 -0
- package/dist/show-context.d.ts +35 -0
- package/dist/show-context.d.ts.map +1 -0
- package/dist/show-context.js +320 -0
- package/dist/show-context.js.map +1 -0
- package/dist/skills/loader.d.ts +49 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +166 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/summarize-context.d.ts +29 -0
- package/dist/summarize-context.d.ts.map +1 -0
- package/dist/summarize-context.js +247 -0
- package/dist/summarize-context.js.map +1 -0
- package/dist/templates/loader.d.ts +104 -0
- package/dist/templates/loader.d.ts.map +1 -0
- package/dist/templates/loader.js +514 -0
- package/dist/templates/loader.js.map +1 -0
- package/dist/tools/basic.d.ts +29 -0
- package/dist/tools/basic.d.ts.map +1 -0
- package/dist/tools/basic.js +2079 -0
- package/dist/tools/basic.js.map +1 -0
- package/dist/tools/comm.d.ts +17 -0
- package/dist/tools/comm.d.ts.map +1 -0
- package/dist/tools/comm.js +192 -0
- package/dist/tools/comm.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +11 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +237 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +24 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +51 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tui/app.d.ts +35 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +1042 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/checkbox-picker.d.ts +35 -0
- package/dist/tui/checkbox-picker.d.ts.map +1 -0
- package/dist/tui/checkbox-picker.js +85 -0
- package/dist/tui/checkbox-picker.js.map +1 -0
- package/dist/tui/command-picker.d.ts +31 -0
- package/dist/tui/command-picker.d.ts.map +1 -0
- package/dist/tui/command-picker.js +113 -0
- package/dist/tui/command-picker.js.map +1 -0
- package/dist/tui/components/ask-panel.d.ts +21 -0
- package/dist/tui/components/ask-panel.d.ts.map +1 -0
- package/dist/tui/components/ask-panel.js +81 -0
- package/dist/tui/components/ask-panel.js.map +1 -0
- package/dist/tui/components/conversation-panel.d.ts +68 -0
- package/dist/tui/components/conversation-panel.d.ts.map +1 -0
- package/dist/tui/components/conversation-panel.js +611 -0
- package/dist/tui/components/conversation-panel.js.map +1 -0
- package/dist/tui/components/input-panel.d.ts +27 -0
- package/dist/tui/components/input-panel.d.ts.map +1 -0
- package/dist/tui/components/input-panel.js +725 -0
- package/dist/tui/components/input-panel.js.map +1 -0
- package/dist/tui/components/logo-panel.d.ts +14 -0
- package/dist/tui/components/logo-panel.d.ts.map +1 -0
- package/dist/tui/components/logo-panel.js +37 -0
- package/dist/tui/components/logo-panel.js.map +1 -0
- package/dist/tui/components/plan-panel.d.ts +10 -0
- package/dist/tui/components/plan-panel.d.ts.map +1 -0
- package/dist/tui/components/plan-panel.js +8 -0
- package/dist/tui/components/plan-panel.js.map +1 -0
- package/dist/tui/components/status-bar.d.ts +24 -0
- package/dist/tui/components/status-bar.d.ts.map +1 -0
- package/dist/tui/components/status-bar.js +80 -0
- package/dist/tui/components/status-bar.js.map +1 -0
- package/dist/tui/input/editor-state.d.ts +22 -0
- package/dist/tui/input/editor-state.d.ts.map +1 -0
- package/dist/tui/input/editor-state.js +157 -0
- package/dist/tui/input/editor-state.js.map +1 -0
- package/dist/tui/input/keymap.d.ts +3 -0
- package/dist/tui/input/keymap.d.ts.map +1 -0
- package/dist/tui/input/keymap.js +72 -0
- package/dist/tui/input/keymap.js.map +1 -0
- package/dist/tui/input/paste-slots.d.ts +17 -0
- package/dist/tui/input/paste-slots.d.ts.map +1 -0
- package/dist/tui/input/paste-slots.js +46 -0
- package/dist/tui/input/paste-slots.js.map +1 -0
- package/dist/tui/input/paste.d.ts +15 -0
- package/dist/tui/input/paste.d.ts.map +1 -0
- package/dist/tui/input/paste.js +35 -0
- package/dist/tui/input/paste.js.map +1 -0
- package/dist/tui/input/protocol.d.ts +9 -0
- package/dist/tui/input/protocol.d.ts.map +1 -0
- package/dist/tui/input/protocol.js +387 -0
- package/dist/tui/input/protocol.js.map +1 -0
- package/dist/tui/input/sanitize.d.ts +6 -0
- package/dist/tui/input/sanitize.d.ts.map +1 -0
- package/dist/tui/input/sanitize.js +20 -0
- package/dist/tui/input/sanitize.js.map +1 -0
- package/dist/tui/input/types.d.ts +18 -0
- package/dist/tui/input/types.d.ts.map +1 -0
- package/dist/tui/input/types.js +2 -0
- package/dist/tui/input/types.js.map +1 -0
- package/dist/tui/launch.d.ts +23 -0
- package/dist/tui/launch.d.ts.map +1 -0
- package/dist/tui/launch.js +104 -0
- package/dist/tui/launch.js.map +1 -0
- package/dist/tui/theme.d.ts +20 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +29 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/types.d.ts +136 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +9 -0
- package/dist/tui/types.js.map +1 -0
- package/package.json +76 -0
- package/prompts/sections/agents_md.md +23 -0
- package/prompts/sections/important_log.md +16 -0
- package/prompts/sections/system_mechanisms.md +18 -0
- package/prompts/tools/apply_patch.md +31 -0
- package/prompts/tools/ask.md +18 -0
- package/prompts/tools/bash.md +13 -0
- package/prompts/tools/bash_background.md +9 -0
- package/prompts/tools/bash_output.md +9 -0
- package/prompts/tools/check_status.md +3 -0
- package/prompts/tools/diff.md +5 -0
- package/prompts/tools/edit_file.md +11 -0
- package/prompts/tools/glob.md +7 -0
- package/prompts/tools/grep.md +20 -0
- package/prompts/tools/kill_agent.md +3 -0
- package/prompts/tools/kill_shell.md +5 -0
- package/prompts/tools/list_dir.md +5 -0
- package/prompts/tools/plan.md +252 -0
- package/prompts/tools/read_file.md +9 -0
- package/prompts/tools/show_context.md +12 -0
- package/prompts/tools/skill.md +7 -0
- package/prompts/tools/spawn_agent.md +195 -0
- package/prompts/tools/summarize_context.md +122 -0
- package/prompts/tools/test.md +5 -0
- package/prompts/tools/wait.md +17 -0
- package/prompts/tools/web_fetch.md +9 -0
- package/prompts/tools/web_search.md +5 -0
- package/prompts/tools/write_file.md +11 -0
- package/skills/.staging/.gitkeep +0 -0
- package/skills/explain-code/SKILL.md +15 -0
- package/skills/skill-manager/SKILL.md +83 -0
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared tool loop logic for Agent.
|
|
3
|
+
*
|
|
4
|
+
* Provides the async LLM <-> tool round-trip cycle. Calls the provider,
|
|
5
|
+
* executes tool calls, appends results via callbacks, and repeats until
|
|
6
|
+
* the model responds without tool calls or max rounds are reached.
|
|
7
|
+
*
|
|
8
|
+
* v2: operates through callbacks (getMessages / appendEntry) instead of
|
|
9
|
+
* directly mutating provider messages. The backing store can be the
|
|
10
|
+
* structured session log (main agent) or an ephemeral structured log
|
|
11
|
+
* (sub-agents / stateless runs).
|
|
12
|
+
*/
|
|
13
|
+
import { ToolResult as ToolResultClass } from "../providers/base.js";
|
|
14
|
+
import { isRetryableNetworkError, computeRetryDelay, retrySleep, MAX_NETWORK_RETRIES, } from "../network-retry.js";
|
|
15
|
+
import { createReasoning, createAssistantText, createToolCall, createToolResult as createToolResultEntry, } from "../log-entry.js";
|
|
16
|
+
// ------------------------------------------------------------------
|
|
17
|
+
// generateToolSummary
|
|
18
|
+
// ------------------------------------------------------------------
|
|
19
|
+
/** Generate a one-line summary from a ToolDef.summaryTemplate. */
|
|
20
|
+
export function generateToolSummary(agentName, toolName, toolArgs, summaryTemplate) {
|
|
21
|
+
if (summaryTemplate) {
|
|
22
|
+
try {
|
|
23
|
+
// Replace {agent} and any {argKey} placeholders
|
|
24
|
+
let result = summaryTemplate.replace(/\{agent\}/g, agentName);
|
|
25
|
+
for (const [key, value] of Object.entries(toolArgs)) {
|
|
26
|
+
result = result.replace(new RegExp(`\\{${key}\\}`, "g"), String(value));
|
|
27
|
+
}
|
|
28
|
+
// If any unreplaced placeholders remain, fall through to default
|
|
29
|
+
if (!/\{[^}]+\}/.test(result)) {
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// fall through
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return `${agentName} is calling ${toolName}`;
|
|
38
|
+
}
|
|
39
|
+
function compactDisplayValue(value, maxLen = 48) {
|
|
40
|
+
if (typeof value === "string") {
|
|
41
|
+
const normalized = value.replace(/\s+/g, " ").trim();
|
|
42
|
+
if (!normalized)
|
|
43
|
+
return '""';
|
|
44
|
+
return normalized.length > maxLen ? `${normalized.slice(0, maxLen - 3)}...` : normalized;
|
|
45
|
+
}
|
|
46
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
47
|
+
return String(value);
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(value)) {
|
|
50
|
+
return `[${value.length} items]`;
|
|
51
|
+
}
|
|
52
|
+
if (value && typeof value === "object") {
|
|
53
|
+
return "{...}";
|
|
54
|
+
}
|
|
55
|
+
return "";
|
|
56
|
+
}
|
|
57
|
+
export function generateToolCallDisplay(toolName, toolArgs) {
|
|
58
|
+
const path = compactDisplayValue(toolArgs["path"]);
|
|
59
|
+
const file = compactDisplayValue(toolArgs["file"]);
|
|
60
|
+
const pattern = compactDisplayValue(toolArgs["pattern"]);
|
|
61
|
+
const url = compactDisplayValue(toolArgs["url"]);
|
|
62
|
+
const command = compactDisplayValue(toolArgs["command"], 60);
|
|
63
|
+
const name = compactDisplayValue(toolArgs["name"]);
|
|
64
|
+
const id = compactDisplayValue(toolArgs["id"]);
|
|
65
|
+
const shell = compactDisplayValue(toolArgs["shell"]);
|
|
66
|
+
const contextIds = Array.isArray(toolArgs["context_ids"])
|
|
67
|
+
? `[${toolArgs["context_ids"].length} contexts]`
|
|
68
|
+
: "";
|
|
69
|
+
const ids = Array.isArray(toolArgs["ids"])
|
|
70
|
+
? `[${toolArgs["ids"].length} ids]`
|
|
71
|
+
: "";
|
|
72
|
+
switch (toolName) {
|
|
73
|
+
case "read_file":
|
|
74
|
+
case "list_dir":
|
|
75
|
+
case "edit_file":
|
|
76
|
+
case "write_file":
|
|
77
|
+
return path ? `${toolName} ${path}` : toolName;
|
|
78
|
+
case "apply_patch":
|
|
79
|
+
return toolName;
|
|
80
|
+
case "glob":
|
|
81
|
+
return pattern ? `${toolName} ${pattern}` : toolName;
|
|
82
|
+
case "grep":
|
|
83
|
+
return pattern && path ? `${toolName} ${pattern} in ${path}` : pattern ? `${toolName} ${pattern}` : toolName;
|
|
84
|
+
case "diff":
|
|
85
|
+
return compactDisplayValue(toolArgs["file_a"]) ? `${toolName} ${compactDisplayValue(toolArgs["file_a"])}` : toolName;
|
|
86
|
+
case "bash":
|
|
87
|
+
case "test":
|
|
88
|
+
return command ? `${toolName} ${command}` : toolName;
|
|
89
|
+
case "bash_background":
|
|
90
|
+
return command ? `${toolName} ${command}` : toolName;
|
|
91
|
+
case "bash_output":
|
|
92
|
+
return id ? `${toolName} ${id}` : toolName;
|
|
93
|
+
case "kill_shell":
|
|
94
|
+
return ids ? `${toolName} ${ids}` : toolName;
|
|
95
|
+
case "web_fetch":
|
|
96
|
+
return url ? `${toolName} ${url}` : toolName;
|
|
97
|
+
case "web_search":
|
|
98
|
+
case "$web_search":
|
|
99
|
+
return compactDisplayValue(toolArgs["query"]) ? `${toolName} ${compactDisplayValue(toolArgs["query"])}` : toolName;
|
|
100
|
+
case "spawn_agent":
|
|
101
|
+
return file ? `${toolName} ${file}` : toolName;
|
|
102
|
+
case "kill_agent":
|
|
103
|
+
return ids ? `${toolName} ${ids}` : toolName;
|
|
104
|
+
case "wait":
|
|
105
|
+
if (shell) {
|
|
106
|
+
return toolArgs["seconds"] !== undefined
|
|
107
|
+
? `${toolName} ${shell} ${String(toolArgs["seconds"])}s`
|
|
108
|
+
: `${toolName} ${shell}`;
|
|
109
|
+
}
|
|
110
|
+
return toolArgs["seconds"] !== undefined ? `${toolName} ${String(toolArgs["seconds"])}s` : toolName;
|
|
111
|
+
case "summarize_context":
|
|
112
|
+
return contextIds ? `${toolName} ${contextIds}` : toolName;
|
|
113
|
+
case "skill":
|
|
114
|
+
return name ? `${toolName} ${name}` : toolName;
|
|
115
|
+
default:
|
|
116
|
+
return toolName;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function extractToolPreview(metadata) {
|
|
120
|
+
const preview = metadata["tui_preview"];
|
|
121
|
+
if (!preview || typeof preview !== "object")
|
|
122
|
+
return null;
|
|
123
|
+
const text = preview["text"];
|
|
124
|
+
if (typeof text !== "string" || !text.trim())
|
|
125
|
+
return null;
|
|
126
|
+
const dim = preview["dim"] === true ? true : undefined;
|
|
127
|
+
return { text, dim };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Async tool loop: call LLM, execute tools, repeat until done.
|
|
131
|
+
*
|
|
132
|
+
* Tool executors are called with their arguments dict and may be
|
|
133
|
+
* sync or async. Exceptions are caught and returned as error
|
|
134
|
+
* ToolResult content.
|
|
135
|
+
*/
|
|
136
|
+
export async function asyncRunToolLoop(opts) {
|
|
137
|
+
const { provider, getMessages, appendEntry, allocId, turnIndex, baseRoundIndex = 0, tools, toolExecutors, maxRounds, agentName = "", onToolCall, onTextChunk, onReasoningChunk, builtinExecutor, signal, contextIdAllocator, onTokenUpdate, compactCheck, thinkingLevel, cacheEnabled, onSaveCheckpoint, beforeToolExecute, getNotification, streamCallbacksOwnEntries = false, onRetryAttempt, onRetrySuccess, onRetryExhausted, } = opts;
|
|
138
|
+
let toolsMap = opts.toolsMap;
|
|
139
|
+
if (!toolsMap && tools) {
|
|
140
|
+
toolsMap = Object.fromEntries(tools.map((t) => [t.name, t]));
|
|
141
|
+
}
|
|
142
|
+
const toolHistory = [];
|
|
143
|
+
const intermediateText = [];
|
|
144
|
+
let hadStreamedText = false;
|
|
145
|
+
let totalInput = 0;
|
|
146
|
+
let totalOutput = 0;
|
|
147
|
+
let lastInput = 0;
|
|
148
|
+
let lastReasoningContent = "";
|
|
149
|
+
let lastReasoningState = null;
|
|
150
|
+
// Flat context ID per tool-call round
|
|
151
|
+
let lastRoundId;
|
|
152
|
+
// Network retry counter (consecutive failures across rounds)
|
|
153
|
+
let networkRetryCount = 0;
|
|
154
|
+
for (let roundIdx = 0; roundIdx < maxRounds; roundIdx++) {
|
|
155
|
+
const roundIndex = baseRoundIndex + roundIdx;
|
|
156
|
+
// Check abort before each provider call
|
|
157
|
+
if (signal?.aborted) {
|
|
158
|
+
throw new DOMException("The operation was aborted.", "AbortError");
|
|
159
|
+
}
|
|
160
|
+
// Track whether the provider called onTextChunk (streaming).
|
|
161
|
+
let providerStreamedText = false;
|
|
162
|
+
let providerStreamedReasoning = false;
|
|
163
|
+
let textHandledViaCallback = false;
|
|
164
|
+
let reasoningHandledViaCallback = false;
|
|
165
|
+
let wrappedChunk;
|
|
166
|
+
if (onTextChunk) {
|
|
167
|
+
wrappedChunk = (chunk) => {
|
|
168
|
+
providerStreamedText = true;
|
|
169
|
+
textHandledViaCallback = onTextChunk(roundIndex, chunk) === true || textHandledViaCallback;
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
let wrappedReasoningChunk;
|
|
173
|
+
if (onReasoningChunk) {
|
|
174
|
+
wrappedReasoningChunk = (chunk) => {
|
|
175
|
+
providerStreamedReasoning = true;
|
|
176
|
+
reasoningHandledViaCallback = onReasoningChunk(roundIndex, chunk) === true || reasoningHandledViaCallback;
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
let resp;
|
|
180
|
+
// eslint-disable-next-line no-constant-condition
|
|
181
|
+
while (true) {
|
|
182
|
+
try {
|
|
183
|
+
resp = await provider.asyncSendMessage(getMessages(), tools?.length ? tools : undefined, {
|
|
184
|
+
onTextChunk: wrappedChunk,
|
|
185
|
+
onReasoningChunk: wrappedReasoningChunk,
|
|
186
|
+
signal,
|
|
187
|
+
thinkingLevel,
|
|
188
|
+
cacheEnabled,
|
|
189
|
+
});
|
|
190
|
+
if (networkRetryCount > 0) {
|
|
191
|
+
onRetrySuccess?.(networkRetryCount);
|
|
192
|
+
networkRetryCount = 0;
|
|
193
|
+
}
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
catch (netErr) {
|
|
197
|
+
if (!isRetryableNetworkError(netErr) || networkRetryCount >= MAX_NETWORK_RETRIES) {
|
|
198
|
+
if (isRetryableNetworkError(netErr)) {
|
|
199
|
+
const errMsg = netErr instanceof Error ? netErr.message : String(netErr);
|
|
200
|
+
onRetryExhausted?.(MAX_NETWORK_RETRIES, errMsg);
|
|
201
|
+
}
|
|
202
|
+
throw netErr;
|
|
203
|
+
}
|
|
204
|
+
networkRetryCount++;
|
|
205
|
+
const errMsg = netErr instanceof Error ? netErr.message : String(netErr);
|
|
206
|
+
const delay = computeRetryDelay(networkRetryCount - 1);
|
|
207
|
+
const delaySec = Math.round(delay / 1000);
|
|
208
|
+
onRetryAttempt?.(networkRetryCount, MAX_NETWORK_RETRIES, delaySec, errMsg);
|
|
209
|
+
await retrySleep(delay, signal);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
lastInput = resp.usage.inputTokens;
|
|
213
|
+
totalInput += resp.usage.inputTokens;
|
|
214
|
+
totalOutput += resp.usage.outputTokens;
|
|
215
|
+
if (onTokenUpdate) {
|
|
216
|
+
onTokenUpdate(lastInput, resp.usage);
|
|
217
|
+
}
|
|
218
|
+
// Compact check after each provider call
|
|
219
|
+
let compactTriggered = false;
|
|
220
|
+
let compactScenario;
|
|
221
|
+
if (compactCheck) {
|
|
222
|
+
const check = compactCheck(resp.usage.inputTokens, resp.usage.outputTokens, resp.hasToolCalls);
|
|
223
|
+
if (check?.compactNeeded) {
|
|
224
|
+
compactTriggered = true;
|
|
225
|
+
compactScenario = check.scenario;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Fallback: emit text as single chunk if provider didn't stream
|
|
229
|
+
if (resp.text && onTextChunk && !providerStreamedText) {
|
|
230
|
+
textHandledViaCallback = onTextChunk(roundIndex, resp.text) === true || textHandledViaCallback;
|
|
231
|
+
}
|
|
232
|
+
if (resp.reasoningContent && onReasoningChunk && !providerStreamedReasoning) {
|
|
233
|
+
reasoningHandledViaCallback =
|
|
234
|
+
onReasoningChunk(roundIndex, resp.reasoningContent) === true || reasoningHandledViaCallback;
|
|
235
|
+
}
|
|
236
|
+
if (resp.text) {
|
|
237
|
+
hadStreamedText = true;
|
|
238
|
+
}
|
|
239
|
+
if (!resp.hasToolCalls) {
|
|
240
|
+
// No tool calls — return final result.
|
|
241
|
+
// The caller (Session) is responsible for creating the final
|
|
242
|
+
// assistant_text / reasoning / no_reply entries.
|
|
243
|
+
return {
|
|
244
|
+
text: resp.text,
|
|
245
|
+
toolHistory,
|
|
246
|
+
totalUsage: { inputTokens: totalInput, outputTokens: totalOutput },
|
|
247
|
+
intermediateText,
|
|
248
|
+
lastInputTokens: lastInput,
|
|
249
|
+
reasoningContent: resp.reasoningContent,
|
|
250
|
+
reasoningState: resp.reasoningState,
|
|
251
|
+
lastRoundId: lastRoundId,
|
|
252
|
+
compactNeeded: compactTriggered,
|
|
253
|
+
compactScenario: compactTriggered ? "output" : undefined,
|
|
254
|
+
lastTotalTokens: resp.usage.inputTokens + resp.usage.outputTokens,
|
|
255
|
+
textHandledInLog: streamCallbacksOwnEntries && textHandledViaCallback,
|
|
256
|
+
reasoningHandledInLog: streamCallbacksOwnEntries && reasoningHandledViaCallback,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
// Track reasoning from each round (used in max-rounds fallback)
|
|
260
|
+
lastReasoningContent = resp.reasoningContent;
|
|
261
|
+
lastReasoningState = resp.reasoningState;
|
|
262
|
+
// Context ID: allocate a flat ID per round
|
|
263
|
+
if (contextIdAllocator) {
|
|
264
|
+
lastRoundId = contextIdAllocator(roundIndex);
|
|
265
|
+
}
|
|
266
|
+
// --- Create entries for this round ---
|
|
267
|
+
// Reasoning entry
|
|
268
|
+
if (resp.reasoningContent && !(streamCallbacksOwnEntries && reasoningHandledViaCallback)) {
|
|
269
|
+
appendEntry(createReasoning(allocId("reasoning"), turnIndex, roundIndex, resp.reasoningContent, resp.reasoningContent, resp.reasoningState, lastRoundId));
|
|
270
|
+
}
|
|
271
|
+
// Intermediate assistant text entry (text alongside tool_calls)
|
|
272
|
+
if (resp.text && !(streamCallbacksOwnEntries && textHandledViaCallback)) {
|
|
273
|
+
intermediateText.push(resp.text);
|
|
274
|
+
appendEntry(createAssistantText(allocId("assistant_text"), turnIndex, roundIndex, resp.text, resp.text, lastRoundId));
|
|
275
|
+
}
|
|
276
|
+
// Pre-compute summaries, emit progress, and run preflight checks
|
|
277
|
+
const toolSummaries = new Map();
|
|
278
|
+
const preflightDecisions = new Map();
|
|
279
|
+
for (const tc of resp.toolCalls) {
|
|
280
|
+
const toolDef = toolsMap?.[tc.name];
|
|
281
|
+
const summary = generateToolSummary(agentName, tc.name, tc.arguments, toolDef?.summaryTemplate ?? "");
|
|
282
|
+
toolSummaries.set(tc.id, summary);
|
|
283
|
+
if (onToolCall) {
|
|
284
|
+
onToolCall(agentName, tc.name, tc.arguments, summary);
|
|
285
|
+
}
|
|
286
|
+
if (beforeToolExecute) {
|
|
287
|
+
const decision = await beforeToolExecute({
|
|
288
|
+
agentName,
|
|
289
|
+
toolName: tc.name,
|
|
290
|
+
toolArgs: tc.arguments,
|
|
291
|
+
toolCallId: tc.id,
|
|
292
|
+
summary,
|
|
293
|
+
});
|
|
294
|
+
if (decision) {
|
|
295
|
+
preflightDecisions.set(tc.id, decision);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Tool call entries
|
|
300
|
+
for (const tc of resp.toolCalls) {
|
|
301
|
+
const summary = toolSummaries.get(tc.id) ?? "";
|
|
302
|
+
const display = generateToolCallDisplay(tc.name, tc.arguments);
|
|
303
|
+
appendEntry(createToolCall(allocId("tool_call"), turnIndex, roundIndex, display, { id: tc.id, name: tc.name, arguments: tc.arguments }, { toolCallId: tc.id, toolName: tc.name, agentName, contextId: lastRoundId }));
|
|
304
|
+
}
|
|
305
|
+
// Execute each tool call
|
|
306
|
+
for (const tc of resp.toolCalls) {
|
|
307
|
+
// Check abort before each tool execution
|
|
308
|
+
if (signal?.aborted) {
|
|
309
|
+
throw new DOMException("The operation was aborted.", "AbortError");
|
|
310
|
+
}
|
|
311
|
+
const summary = toolSummaries.get(tc.id) ?? "";
|
|
312
|
+
// Execute tool with exception safety
|
|
313
|
+
let toolOutput;
|
|
314
|
+
// Check for JSON parse errors from provider (arguments couldn't be parsed)
|
|
315
|
+
if (tc.arguments["_parseError"]) {
|
|
316
|
+
const parseError = tc.arguments["_parseError"];
|
|
317
|
+
toolOutput = new ToolResultClass({
|
|
318
|
+
content: `ERROR: ${parseError}`,
|
|
319
|
+
});
|
|
320
|
+
// Clean up internal marker from arguments before storing in history
|
|
321
|
+
const cleanArgs = { ...tc.arguments };
|
|
322
|
+
delete cleanArgs["_parseError"];
|
|
323
|
+
tc.arguments = cleanArgs;
|
|
324
|
+
}
|
|
325
|
+
else
|
|
326
|
+
try {
|
|
327
|
+
const preflight = preflightDecisions.get(tc.id);
|
|
328
|
+
if (preflight?.kind === "deny") {
|
|
329
|
+
toolOutput = new ToolResultClass({
|
|
330
|
+
content: `ERROR: ${preflight.message}`,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
else if (tc.name in toolExecutors) {
|
|
334
|
+
toolOutput = await toolExecutors[tc.name](tc.arguments);
|
|
335
|
+
}
|
|
336
|
+
else if (builtinExecutor) {
|
|
337
|
+
toolOutput = await builtinExecutor(tc.name, tc.arguments);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
toolOutput = new ToolResultClass({
|
|
341
|
+
content: `ERROR: No executor found for tool '${tc.name}'`,
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
catch (e) {
|
|
346
|
+
if (e?.name === "AskPendingError") {
|
|
347
|
+
const ask = e.ask;
|
|
348
|
+
if (ask) {
|
|
349
|
+
ask.payload.toolCallId = tc.id;
|
|
350
|
+
ask.roundIndex = roundIndex;
|
|
351
|
+
}
|
|
352
|
+
return {
|
|
353
|
+
text: resp.text || "",
|
|
354
|
+
toolHistory,
|
|
355
|
+
totalUsage: { inputTokens: totalInput, outputTokens: totalOutput },
|
|
356
|
+
intermediateText,
|
|
357
|
+
lastInputTokens: lastInput,
|
|
358
|
+
reasoningContent: resp.reasoningContent,
|
|
359
|
+
reasoningState: resp.reasoningState,
|
|
360
|
+
lastRoundId: lastRoundId,
|
|
361
|
+
compactNeeded: false,
|
|
362
|
+
lastTotalTokens: resp.usage.inputTokens + resp.usage.outputTokens,
|
|
363
|
+
textHandledInLog: streamCallbacksOwnEntries && textHandledViaCallback,
|
|
364
|
+
reasoningHandledInLog: streamCallbacksOwnEntries && reasoningHandledViaCallback,
|
|
365
|
+
suspendedAsk: ask ? { ask, toolCallId: tc.id, roundIndex } : undefined,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
if (e?.name === "AbortError" || signal?.aborted) {
|
|
369
|
+
throw e;
|
|
370
|
+
}
|
|
371
|
+
console.error(`[${agentName}] tool '${tc.name}' raised:`, e);
|
|
372
|
+
toolOutput = new ToolResultClass({
|
|
373
|
+
content: `ERROR: Tool execution failed — ${e}`,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
// Normalize to ToolResult
|
|
377
|
+
const resolved = typeof toolOutput === "string"
|
|
378
|
+
? new ToolResultClass({ content: toolOutput })
|
|
379
|
+
: toolOutput instanceof ToolResultClass
|
|
380
|
+
? toolOutput
|
|
381
|
+
: new ToolResultClass({ content: String(toolOutput) });
|
|
382
|
+
// Append notification if queued messages are pending
|
|
383
|
+
let resultStr = resolved.content;
|
|
384
|
+
if (getNotification) {
|
|
385
|
+
const note = getNotification();
|
|
386
|
+
if (note)
|
|
387
|
+
resultStr += note;
|
|
388
|
+
}
|
|
389
|
+
const toolEntry = {
|
|
390
|
+
tool: tc.name,
|
|
391
|
+
arguments: tc.arguments,
|
|
392
|
+
result: resultStr,
|
|
393
|
+
};
|
|
394
|
+
if (resolved.actionHint) {
|
|
395
|
+
toolEntry["action_hint"] = resolved.actionHint;
|
|
396
|
+
}
|
|
397
|
+
if (resolved.tags.length > 0) {
|
|
398
|
+
toolEntry["tags"] = resolved.tags;
|
|
399
|
+
}
|
|
400
|
+
if (Object.keys(resolved.metadata).length > 0) {
|
|
401
|
+
toolEntry["tool_metadata"] = resolved.metadata;
|
|
402
|
+
}
|
|
403
|
+
toolHistory.push(toolEntry);
|
|
404
|
+
// Assign contextId to ALL tool_results in the round (metadata only, no visible §{id}§ tag)
|
|
405
|
+
const finalContent = resultStr;
|
|
406
|
+
const toolResultContextId = contextIdAllocator && lastRoundId !== undefined
|
|
407
|
+
? lastRoundId
|
|
408
|
+
: undefined;
|
|
409
|
+
// Propagate contentBlocks to metadata for multimodal tool results
|
|
410
|
+
const mergedMetadata = { ...resolved.metadata };
|
|
411
|
+
if (resolved.contentBlocks) {
|
|
412
|
+
mergedMetadata._contentBlocks = resolved.contentBlocks;
|
|
413
|
+
}
|
|
414
|
+
// Create tool_result entry
|
|
415
|
+
const preview = extractToolPreview(resolved.metadata);
|
|
416
|
+
appendEntry(createToolResultEntry(allocId("tool_result"), turnIndex, roundIndex, {
|
|
417
|
+
toolCallId: tc.id,
|
|
418
|
+
toolName: tc.name,
|
|
419
|
+
content: finalContent,
|
|
420
|
+
toolSummary: summary,
|
|
421
|
+
}, {
|
|
422
|
+
isError: resolved.content.startsWith("ERROR:"),
|
|
423
|
+
contextId: toolResultContextId,
|
|
424
|
+
toolMetadata: mergedMetadata,
|
|
425
|
+
previewText: preview?.text,
|
|
426
|
+
previewDim: preview?.dim,
|
|
427
|
+
}));
|
|
428
|
+
if (onSaveCheckpoint)
|
|
429
|
+
onSaveCheckpoint();
|
|
430
|
+
}
|
|
431
|
+
// After all tool calls executed: if compact was triggered, return early
|
|
432
|
+
if (compactTriggered) {
|
|
433
|
+
return {
|
|
434
|
+
text: resp.text || "",
|
|
435
|
+
toolHistory,
|
|
436
|
+
totalUsage: { inputTokens: totalInput, outputTokens: totalOutput },
|
|
437
|
+
intermediateText,
|
|
438
|
+
lastInputTokens: lastInput,
|
|
439
|
+
reasoningContent: lastReasoningContent,
|
|
440
|
+
reasoningState: lastReasoningState,
|
|
441
|
+
lastRoundId: lastRoundId,
|
|
442
|
+
compactNeeded: true,
|
|
443
|
+
compactScenario: "toolcall",
|
|
444
|
+
lastTotalTokens: resp.usage.inputTokens + resp.usage.outputTokens,
|
|
445
|
+
textHandledInLog: streamCallbacksOwnEntries && textHandledViaCallback,
|
|
446
|
+
reasoningHandledInLog: streamCallbacksOwnEntries && reasoningHandledViaCallback,
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
console.warn(`[${agentName}] hit max tool rounds (${maxRounds})`);
|
|
451
|
+
return {
|
|
452
|
+
text: "(Agent reached maximum tool call rounds without completing.)",
|
|
453
|
+
toolHistory,
|
|
454
|
+
totalUsage: { inputTokens: totalInput, outputTokens: totalOutput },
|
|
455
|
+
intermediateText,
|
|
456
|
+
lastInputTokens: lastInput,
|
|
457
|
+
reasoningContent: lastReasoningContent,
|
|
458
|
+
reasoningState: lastReasoningState,
|
|
459
|
+
lastRoundId: lastRoundId,
|
|
460
|
+
lastTotalTokens: totalInput + totalOutput,
|
|
461
|
+
textHandledInLog: false,
|
|
462
|
+
reasoningHandledInLog: false,
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
//# sourceMappingURL=tool-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-loop.js","sourceRoot":"","sources":["../../src/agents/tool-loop.ts"],"names":[],"mappings":"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"}
|
package/dist/ask.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export type AskKind = "agent_question";
|
|
2
|
+
export interface AskSource {
|
|
3
|
+
agentId: string;
|
|
4
|
+
agentName?: string;
|
|
5
|
+
toolName?: string;
|
|
6
|
+
turnId?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface AskBase {
|
|
9
|
+
id: string;
|
|
10
|
+
kind: AskKind;
|
|
11
|
+
createdAt: string;
|
|
12
|
+
source: AskSource;
|
|
13
|
+
summary: string;
|
|
14
|
+
roundIndex?: number;
|
|
15
|
+
}
|
|
16
|
+
export type AgentQuestionOptionKind = "normal" | "custom_input" | "discuss_further";
|
|
17
|
+
export interface AgentQuestionOption {
|
|
18
|
+
label: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
kind: AgentQuestionOptionKind;
|
|
21
|
+
systemAdded?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare const ASK_CUSTOM_OPTION_LABEL = "Enter custom answer";
|
|
24
|
+
export declare const ASK_DISCUSS_OPTION_LABEL = "Discuss further";
|
|
25
|
+
export declare const ASK_DISCUSS_FURTHER_GUIDANCE = "One or more answers are \"Discuss further\". Treat those answers as requests to continue the discussion rather than final commitments. Use any other answers normally. Briefly address the discussion points, then wait for the user's next message.";
|
|
26
|
+
export interface AgentQuestionItem {
|
|
27
|
+
question: string;
|
|
28
|
+
options: AgentQuestionOption[];
|
|
29
|
+
}
|
|
30
|
+
export interface AgentQuestionAnswer {
|
|
31
|
+
questionIndex: number;
|
|
32
|
+
selectedOptionIndex: number;
|
|
33
|
+
answerText: string;
|
|
34
|
+
/** Optional user note attached to any answer (added via Tab). */
|
|
35
|
+
note?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface AgentQuestionDecision {
|
|
38
|
+
answers: AgentQuestionAnswer[];
|
|
39
|
+
}
|
|
40
|
+
export interface AgentQuestion extends AskBase {
|
|
41
|
+
kind: "agent_question";
|
|
42
|
+
payload: {
|
|
43
|
+
questions: AgentQuestionItem[];
|
|
44
|
+
toolCallId: string;
|
|
45
|
+
};
|
|
46
|
+
options: string[];
|
|
47
|
+
}
|
|
48
|
+
export type AskRequest = AgentQuestion;
|
|
49
|
+
export interface PendingAskUi {
|
|
50
|
+
id: string;
|
|
51
|
+
kind: AskKind;
|
|
52
|
+
createdAt: string;
|
|
53
|
+
summary: string;
|
|
54
|
+
source: AskSource;
|
|
55
|
+
payload: Record<string, unknown>;
|
|
56
|
+
options: string[];
|
|
57
|
+
}
|
|
58
|
+
export interface AskAuditRecord {
|
|
59
|
+
askId: string;
|
|
60
|
+
kind: AskKind;
|
|
61
|
+
summary: string;
|
|
62
|
+
decidedAt: string;
|
|
63
|
+
decision: string;
|
|
64
|
+
source: AskSource;
|
|
65
|
+
}
|
|
66
|
+
export interface PendingTurnState {
|
|
67
|
+
stage: "pre_user_input" | "activation";
|
|
68
|
+
userInput?: string;
|
|
69
|
+
nextActivationIdx?: number;
|
|
70
|
+
convLenBefore?: number;
|
|
71
|
+
pendingToolResultText?: string;
|
|
72
|
+
pendingToolCallId?: string;
|
|
73
|
+
}
|
|
74
|
+
export declare class AskPendingError extends Error {
|
|
75
|
+
askId: string;
|
|
76
|
+
ask?: AskRequest;
|
|
77
|
+
constructor(askOrId: string | AskRequest);
|
|
78
|
+
}
|
|
79
|
+
export declare function isAskPendingError(err: unknown): err is AskPendingError;
|
|
80
|
+
export declare function toPendingAskUi(ask: AskRequest | null): PendingAskUi | null;
|
|
81
|
+
//# sourceMappingURL=ask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"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"}
|
package/dist/ask.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const ASK_CUSTOM_OPTION_LABEL = "Enter custom answer";
|
|
2
|
+
export const ASK_DISCUSS_OPTION_LABEL = "Discuss further";
|
|
3
|
+
export const ASK_DISCUSS_FURTHER_GUIDANCE = 'One or more answers are "Discuss further". Treat those answers as requests to continue the discussion rather than final commitments. Use any other answers normally. Briefly address the discussion points, then wait for the user\'s next message.';
|
|
4
|
+
export class AskPendingError extends Error {
|
|
5
|
+
askId;
|
|
6
|
+
ask;
|
|
7
|
+
constructor(askOrId) {
|
|
8
|
+
const askId = typeof askOrId === "string" ? askOrId : askOrId.id;
|
|
9
|
+
super(`Ask request pending resolution (${askId})`);
|
|
10
|
+
this.name = "AskPendingError";
|
|
11
|
+
this.askId = askId;
|
|
12
|
+
if (typeof askOrId !== "string") {
|
|
13
|
+
this.ask = askOrId;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function isAskPendingError(err) {
|
|
18
|
+
return err instanceof AskPendingError ||
|
|
19
|
+
(err?.name === "AskPendingError" && typeof err?.askId === "string");
|
|
20
|
+
}
|
|
21
|
+
export function toPendingAskUi(ask) {
|
|
22
|
+
if (!ask)
|
|
23
|
+
return null;
|
|
24
|
+
return {
|
|
25
|
+
id: ask.id,
|
|
26
|
+
kind: ask.kind,
|
|
27
|
+
createdAt: ask.createdAt,
|
|
28
|
+
summary: ask.summary,
|
|
29
|
+
source: ask.source,
|
|
30
|
+
payload: ask.payload,
|
|
31
|
+
options: [...ask.options],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ask.js.map
|
package/dist/ask.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"AA2BA,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;AAC7D,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC;AAC1D,MAAM,CAAC,MAAM,4BAA4B,GACvC,qPAAqP,CAAC;AAuDxP,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,KAAK,CAAS;IACd,GAAG,CAAc;IAEjB,YAAY,OAA4B;QACtC,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,KAAK,CAAC,mCAAmC,KAAK,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,GAAG,YAAY,eAAe;QACnC,CAAE,GAAW,EAAE,IAAI,KAAK,iBAAiB,IAAI,OAAQ,GAAW,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAsB;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAkC;QAC/C,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;KAC1B,CAAC;AACJ,CAAC"}
|