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,514 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent template loader with multi-file prompt assembly.
|
|
3
|
+
*
|
|
4
|
+
* Provides `loadTemplate` / `loadTemplates` for agent templates.
|
|
5
|
+
*
|
|
6
|
+
* Template folder layout:
|
|
7
|
+
*
|
|
8
|
+
* agent_templates/
|
|
9
|
+
* +-- main/
|
|
10
|
+
* | +-- agent.yaml # required
|
|
11
|
+
* | +-- system_prompt.md # referenced by system_prompt_file
|
|
12
|
+
* | +-- knowledge/ # optional -- files appended to system prompt
|
|
13
|
+
* | +-- style_guide.md
|
|
14
|
+
* +-- executor/
|
|
15
|
+
* +-- agent.yaml
|
|
16
|
+
* +-- system_prompt.md
|
|
17
|
+
*
|
|
18
|
+
* Prompt assembly pipeline (per template):
|
|
19
|
+
*
|
|
20
|
+
* 1. Read core system prompt from system_prompt.md
|
|
21
|
+
* 2. Assemble tool prompts from prompts/tools/{name}.md
|
|
22
|
+
* (ordered by TOOL_PROMPT_ORDER, filtered by template's declared tools)
|
|
23
|
+
* 3. Assemble section prompts from prompts/sections/{name}.md
|
|
24
|
+
* (controlled by template's prompt_sections field)
|
|
25
|
+
* 4. Append knowledge/ files (existing mechanism)
|
|
26
|
+
*/
|
|
27
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
28
|
+
import { basename, dirname, join } from "node:path";
|
|
29
|
+
import * as yaml from "js-yaml";
|
|
30
|
+
import { Agent } from "../agents/agent.js";
|
|
31
|
+
import { BASIC_TOOLS, BASIC_TOOLS_MAP } from "../tools/basic.js";
|
|
32
|
+
// ------------------------------------------------------------------
|
|
33
|
+
// Constants
|
|
34
|
+
// ------------------------------------------------------------------
|
|
35
|
+
const AGENT_YAML = "agent.yaml";
|
|
36
|
+
const REQUIRED_TEMPLATE_TYPE = "agent";
|
|
37
|
+
const MIN_TEMPLATE_MAX_TOOL_ROUNDS = 100;
|
|
38
|
+
/**
|
|
39
|
+
* Canonical ordering for tool prompt assembly.
|
|
40
|
+
* Tools not in this list are appended alphabetically after these.
|
|
41
|
+
*/
|
|
42
|
+
export const TOOL_PROMPT_ORDER = [
|
|
43
|
+
// File I/O
|
|
44
|
+
"read_file",
|
|
45
|
+
"write_file",
|
|
46
|
+
"edit_file",
|
|
47
|
+
"apply_patch",
|
|
48
|
+
"list_dir",
|
|
49
|
+
"glob",
|
|
50
|
+
"grep",
|
|
51
|
+
"diff",
|
|
52
|
+
// Shell
|
|
53
|
+
"bash",
|
|
54
|
+
"bash_background",
|
|
55
|
+
"bash_output",
|
|
56
|
+
"kill_shell",
|
|
57
|
+
"test",
|
|
58
|
+
// Web
|
|
59
|
+
"web_search",
|
|
60
|
+
"web_fetch",
|
|
61
|
+
// Orchestration
|
|
62
|
+
"spawn_agent",
|
|
63
|
+
"wait",
|
|
64
|
+
"kill_agent",
|
|
65
|
+
"check_status",
|
|
66
|
+
// Context
|
|
67
|
+
"show_context",
|
|
68
|
+
"summarize_context",
|
|
69
|
+
// Planning
|
|
70
|
+
"plan",
|
|
71
|
+
// Interaction
|
|
72
|
+
"ask",
|
|
73
|
+
"skill",
|
|
74
|
+
"reload_skills",
|
|
75
|
+
];
|
|
76
|
+
/**
|
|
77
|
+
* Paired tool dependencies.
|
|
78
|
+
* If a tool (key) is in the list, all its required companions (value) must also be present.
|
|
79
|
+
*/
|
|
80
|
+
export const TOOL_REQUIRES = {
|
|
81
|
+
bash_output: ["bash_background"],
|
|
82
|
+
kill_shell: ["bash_background"],
|
|
83
|
+
bash_background: ["bash_output"],
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Default tools for custom templates that omit `tools` in agent.yaml.
|
|
87
|
+
* Same set as the executor template.
|
|
88
|
+
*/
|
|
89
|
+
export const EXECUTOR_DEFAULT_TOOLS = [
|
|
90
|
+
"read_file",
|
|
91
|
+
"write_file",
|
|
92
|
+
"edit_file",
|
|
93
|
+
"apply_patch",
|
|
94
|
+
"list_dir",
|
|
95
|
+
"glob",
|
|
96
|
+
"grep",
|
|
97
|
+
"diff",
|
|
98
|
+
"bash",
|
|
99
|
+
"bash_background",
|
|
100
|
+
"bash_output",
|
|
101
|
+
"kill_shell",
|
|
102
|
+
"test",
|
|
103
|
+
"web_search",
|
|
104
|
+
"web_fetch",
|
|
105
|
+
];
|
|
106
|
+
// ------------------------------------------------------------------
|
|
107
|
+
// Public API
|
|
108
|
+
// ------------------------------------------------------------------
|
|
109
|
+
/**
|
|
110
|
+
* Load a single agent template from `templateDir`.
|
|
111
|
+
*
|
|
112
|
+
* @param templateDir Path to the template folder (must contain `agent.yaml`).
|
|
113
|
+
* @param config Global Config instance (provides model resolution).
|
|
114
|
+
* @param nameOverride If given, replaces the `name` field from the YAML.
|
|
115
|
+
* @param mcpManager Optional MCP client manager for MCP tool resolution.
|
|
116
|
+
* @param promptsDirs Ordered list of `prompts/` directories (user override first, bundled second).
|
|
117
|
+
* If omitted or empty, no tool/section prompts are assembled.
|
|
118
|
+
* @returns Fully constructed Agent, ready to use.
|
|
119
|
+
*/
|
|
120
|
+
export function loadTemplate(templateDir, config, nameOverride, mcpManager, promptsDirs) {
|
|
121
|
+
const yamlPath = join(templateDir, AGENT_YAML);
|
|
122
|
+
if (!existsSync(yamlPath)) {
|
|
123
|
+
throw new Error(`Template config not found: ${yamlPath}`);
|
|
124
|
+
}
|
|
125
|
+
const raw = readFileSync(yamlPath, "utf-8");
|
|
126
|
+
const spec = yaml.load(raw) ?? {};
|
|
127
|
+
const typeError = validateTemplateType(spec);
|
|
128
|
+
if (typeError) {
|
|
129
|
+
throw new Error(typeError);
|
|
130
|
+
}
|
|
131
|
+
const name = nameOverride ??
|
|
132
|
+
spec["name"] ??
|
|
133
|
+
basename(templateDir);
|
|
134
|
+
const model = spec["model"];
|
|
135
|
+
// --- 1. Resolve core system prompt ---
|
|
136
|
+
let systemPrompt = resolveSystemPrompt(spec, templateDir);
|
|
137
|
+
// --- 2. Assemble tool prompts ---
|
|
138
|
+
if (promptsDirs && promptsDirs.length > 0) {
|
|
139
|
+
const toolNames = resolveToolNames(spec);
|
|
140
|
+
validateToolDependencies(toolNames);
|
|
141
|
+
const toolPrompts = assembleToolPrompts(toolNames, promptsDirs);
|
|
142
|
+
if (toolPrompts) {
|
|
143
|
+
systemPrompt = systemPrompt.trimEnd() + "\n\n---\n\n# Tools\n\n" + toolPrompts;
|
|
144
|
+
}
|
|
145
|
+
// --- 3. Assemble section prompts ---
|
|
146
|
+
const sections = resolveSections(spec);
|
|
147
|
+
const sectionPrompts = assembleSectionPrompts(sections, promptsDirs);
|
|
148
|
+
if (sectionPrompts) {
|
|
149
|
+
systemPrompt = systemPrompt.trimEnd() + "\n\n" + sectionPrompts;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// --- 4. Append knowledge files (if any) ---
|
|
153
|
+
const knowledgeDir = join(templateDir, "knowledge");
|
|
154
|
+
if (existsSync(knowledgeDir) && statSync(knowledgeDir).isDirectory()) {
|
|
155
|
+
const knowledgeParts = [];
|
|
156
|
+
const entries = readdirSync(knowledgeDir).sort();
|
|
157
|
+
for (const entry of entries) {
|
|
158
|
+
if (entry.startsWith("."))
|
|
159
|
+
continue;
|
|
160
|
+
const fullPath = join(knowledgeDir, entry);
|
|
161
|
+
try {
|
|
162
|
+
if (!statSync(fullPath).isFile())
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
knowledgeParts.push(readFileSync(fullPath, "utf-8"));
|
|
169
|
+
}
|
|
170
|
+
if (knowledgeParts.length > 0) {
|
|
171
|
+
systemPrompt =
|
|
172
|
+
systemPrompt.trimEnd() + "\n\n" + knowledgeParts.join("\n\n");
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return buildAgent(spec, name, model, systemPrompt, config, mcpManager);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Scan template directories and load all templates with layered override.
|
|
179
|
+
*
|
|
180
|
+
* When both `bundledRoot` and `userRoot` are provided, user templates override
|
|
181
|
+
* bundled templates with the same folder name. User-only templates are also loaded.
|
|
182
|
+
*
|
|
183
|
+
* @param bundledRoot Bundled templates root (always available from the package).
|
|
184
|
+
* @param config Global Config instance.
|
|
185
|
+
* @param mcpManager Optional MCP client manager.
|
|
186
|
+
* @param promptsDirs Ordered prompts directories (user first, bundled second).
|
|
187
|
+
* @param userRoot Optional user override templates root (~/.longeragent/agent_templates/).
|
|
188
|
+
* @returns `{ name: agent }` record.
|
|
189
|
+
*/
|
|
190
|
+
export function loadTemplates(bundledRoot, config, mcpManager, promptsDirs, userRoot) {
|
|
191
|
+
if (!existsSync(bundledRoot) || !statSync(bundledRoot).isDirectory()) {
|
|
192
|
+
throw new Error(`Bundled templates root not found: ${bundledRoot}`);
|
|
193
|
+
}
|
|
194
|
+
// Discover template dirs: bundled first, user overrides on top
|
|
195
|
+
const templateDirs = {};
|
|
196
|
+
for (const child of readdirSync(bundledRoot).sort()) {
|
|
197
|
+
const childPath = join(bundledRoot, child);
|
|
198
|
+
if (isTemplateDir(childPath)) {
|
|
199
|
+
templateDirs[child] = childPath;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (userRoot && existsSync(userRoot) && statSync(userRoot).isDirectory()) {
|
|
203
|
+
for (const child of readdirSync(userRoot).sort()) {
|
|
204
|
+
const childPath = join(userRoot, child);
|
|
205
|
+
if (isTemplateDir(childPath)) {
|
|
206
|
+
templateDirs[child] = childPath; // override bundled
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const resolvedPromptsDirs = promptsDirs && promptsDirs.length > 0
|
|
211
|
+
? promptsDirs
|
|
212
|
+
: [resolvePromptsDir(bundledRoot)].filter((d) => !!d);
|
|
213
|
+
const agents = {};
|
|
214
|
+
for (const name of Object.keys(templateDirs).sort()) {
|
|
215
|
+
const agent = loadTemplate(templateDirs[name], config, undefined, mcpManager, resolvedPromptsDirs);
|
|
216
|
+
agents[agent.name] = agent;
|
|
217
|
+
}
|
|
218
|
+
return agents;
|
|
219
|
+
}
|
|
220
|
+
function isTemplateDir(p) {
|
|
221
|
+
try {
|
|
222
|
+
return statSync(p).isDirectory() && existsSync(join(p, AGENT_YAML));
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Validate a template directory without loading it.
|
|
230
|
+
* Returns null if valid, or an error message string if invalid.
|
|
231
|
+
*/
|
|
232
|
+
export function validateTemplate(templateDir) {
|
|
233
|
+
const yamlPath = join(templateDir, AGENT_YAML);
|
|
234
|
+
if (!existsSync(yamlPath)) {
|
|
235
|
+
return `Missing agent.yaml in ${templateDir}`;
|
|
236
|
+
}
|
|
237
|
+
let spec;
|
|
238
|
+
try {
|
|
239
|
+
const raw = readFileSync(yamlPath, "utf-8");
|
|
240
|
+
spec = yaml.load(raw) ?? {};
|
|
241
|
+
}
|
|
242
|
+
catch (e) {
|
|
243
|
+
return `Invalid YAML in agent.yaml: ${e}`;
|
|
244
|
+
}
|
|
245
|
+
const typeError = validateTemplateType(spec);
|
|
246
|
+
if (typeError) {
|
|
247
|
+
return typeError;
|
|
248
|
+
}
|
|
249
|
+
if (!spec["system_prompt"] && !spec["system_prompt_file"]) {
|
|
250
|
+
return "agent.yaml must have either 'system_prompt' or 'system_prompt_file'";
|
|
251
|
+
}
|
|
252
|
+
if (typeof spec["system_prompt_file"] === "string") {
|
|
253
|
+
const promptPath = join(templateDir, spec["system_prompt_file"]);
|
|
254
|
+
if (!existsSync(promptPath)) {
|
|
255
|
+
return `system_prompt_file not found: ${spec["system_prompt_file"]}`;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
const toolsSpec = spec["tools"];
|
|
259
|
+
if (toolsSpec != null && toolsSpec !== "all" && !Array.isArray(toolsSpec)) {
|
|
260
|
+
return `Invalid tools spec: must be "all", a list of tool names, or omitted`;
|
|
261
|
+
}
|
|
262
|
+
const maxRoundsError = validateTemplateMaxToolRounds(spec);
|
|
263
|
+
if (maxRoundsError) {
|
|
264
|
+
return maxRoundsError;
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
// ------------------------------------------------------------------
|
|
269
|
+
// Prompt assembly
|
|
270
|
+
// ------------------------------------------------------------------
|
|
271
|
+
/**
|
|
272
|
+
* Resolve the prompts/ directory as a sibling of the templates root.
|
|
273
|
+
* Returns the path if found, or undefined if not.
|
|
274
|
+
*/
|
|
275
|
+
export function resolvePromptsDir(templatesRoot) {
|
|
276
|
+
const candidate = join(dirname(templatesRoot), "prompts");
|
|
277
|
+
if (existsSync(candidate) && statSync(candidate).isDirectory()) {
|
|
278
|
+
return candidate;
|
|
279
|
+
}
|
|
280
|
+
return undefined;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Resolve tool names from the `tools` field in agent.yaml.
|
|
284
|
+
*
|
|
285
|
+
* - `"all"` → all tools in TOOL_PROMPT_ORDER
|
|
286
|
+
* - Array of names → as-is
|
|
287
|
+
* - Absent / null → EXECUTOR_DEFAULT_TOOLS (for custom templates)
|
|
288
|
+
*/
|
|
289
|
+
export function resolveToolNames(spec) {
|
|
290
|
+
const toolsSpec = spec["tools"];
|
|
291
|
+
if (toolsSpec == null)
|
|
292
|
+
return [...EXECUTOR_DEFAULT_TOOLS];
|
|
293
|
+
if (toolsSpec === "all")
|
|
294
|
+
return [...TOOL_PROMPT_ORDER];
|
|
295
|
+
if (Array.isArray(toolsSpec))
|
|
296
|
+
return toolsSpec;
|
|
297
|
+
throw new Error(`Invalid tools spec: ${JSON.stringify(toolsSpec)}`);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Validate that paired tool dependencies are satisfied.
|
|
301
|
+
*/
|
|
302
|
+
export function validateToolDependencies(toolNames) {
|
|
303
|
+
const nameSet = new Set(toolNames);
|
|
304
|
+
for (const [tool, requires] of Object.entries(TOOL_REQUIRES)) {
|
|
305
|
+
if (!nameSet.has(tool))
|
|
306
|
+
continue;
|
|
307
|
+
for (const req of requires) {
|
|
308
|
+
if (!nameSet.has(req)) {
|
|
309
|
+
throw new Error(`Tool '${tool}' requires '${req}' to be included in the tools list.`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Read and concatenate tool prompt files in canonical order.
|
|
316
|
+
* For each tool, the first matching file across `promptsDirs` is used (user override first).
|
|
317
|
+
* Tools without a corresponding prompt file are silently skipped.
|
|
318
|
+
*/
|
|
319
|
+
export function assembleToolPrompts(toolNames, promptsDirs) {
|
|
320
|
+
// Sort by TOOL_PROMPT_ORDER, unknowns go to the end alphabetically
|
|
321
|
+
const orderIndex = new Map(TOOL_PROMPT_ORDER.map((n, i) => [n, i]));
|
|
322
|
+
const sorted = [...toolNames].sort((a, b) => {
|
|
323
|
+
const ia = orderIndex.get(a) ?? Infinity;
|
|
324
|
+
const ib = orderIndex.get(b) ?? Infinity;
|
|
325
|
+
if (ia !== ib)
|
|
326
|
+
return ia - ib;
|
|
327
|
+
return a.localeCompare(b);
|
|
328
|
+
});
|
|
329
|
+
const parts = [];
|
|
330
|
+
for (const name of sorted) {
|
|
331
|
+
const filePath = resolveLayeredFile(promptsDirs, "tools", `${name}.md`);
|
|
332
|
+
if (!filePath)
|
|
333
|
+
continue;
|
|
334
|
+
try {
|
|
335
|
+
parts.push(readFileSync(filePath, "utf-8").trimEnd());
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
// Skip unreadable files
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return parts.join("\n\n");
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Resolve prompt_sections from the spec.
|
|
345
|
+
* Defaults to ["important_log"] if omitted.
|
|
346
|
+
*/
|
|
347
|
+
function resolveSections(spec) {
|
|
348
|
+
const sections = spec["prompt_sections"];
|
|
349
|
+
if (sections == null)
|
|
350
|
+
return ["important_log"];
|
|
351
|
+
if (Array.isArray(sections))
|
|
352
|
+
return sections;
|
|
353
|
+
return ["important_log"];
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Read and concatenate section prompt files.
|
|
357
|
+
* For each section, the first matching file across `promptsDirs` is used.
|
|
358
|
+
*/
|
|
359
|
+
export function assembleSectionPrompts(sections, promptsDirs) {
|
|
360
|
+
if (sections.length === 0)
|
|
361
|
+
return "";
|
|
362
|
+
const parts = [];
|
|
363
|
+
for (const name of sections) {
|
|
364
|
+
const filePath = resolveLayeredFile(promptsDirs, "sections", `${name}.md`);
|
|
365
|
+
if (!filePath)
|
|
366
|
+
continue;
|
|
367
|
+
try {
|
|
368
|
+
parts.push(readFileSync(filePath, "utf-8").trimEnd());
|
|
369
|
+
}
|
|
370
|
+
catch {
|
|
371
|
+
// Skip unreadable files
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return parts.join("\n\n");
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Resolve a file across multiple directories, returning the first match.
|
|
378
|
+
* Directories are checked in order (user override first, bundled second).
|
|
379
|
+
*/
|
|
380
|
+
function resolveLayeredFile(dirs, subdir, filename) {
|
|
381
|
+
for (const dir of dirs) {
|
|
382
|
+
const filePath = join(dir, subdir, filename);
|
|
383
|
+
if (existsSync(filePath))
|
|
384
|
+
return filePath;
|
|
385
|
+
}
|
|
386
|
+
return null;
|
|
387
|
+
}
|
|
388
|
+
// ------------------------------------------------------------------
|
|
389
|
+
// Internal helpers
|
|
390
|
+
// ------------------------------------------------------------------
|
|
391
|
+
/**
|
|
392
|
+
* Return the system prompt string from inline text or an external file.
|
|
393
|
+
*/
|
|
394
|
+
function resolveSystemPrompt(spec, templateDir) {
|
|
395
|
+
if (typeof spec["system_prompt"] === "string") {
|
|
396
|
+
return spec["system_prompt"];
|
|
397
|
+
}
|
|
398
|
+
if (typeof spec["system_prompt_file"] === "string") {
|
|
399
|
+
const promptPath = join(templateDir, spec["system_prompt_file"]);
|
|
400
|
+
if (!existsSync(promptPath)) {
|
|
401
|
+
throw new Error(`system_prompt_file not found: ${promptPath}`);
|
|
402
|
+
}
|
|
403
|
+
return readFileSync(promptPath, "utf-8");
|
|
404
|
+
}
|
|
405
|
+
return "";
|
|
406
|
+
}
|
|
407
|
+
function validateTemplateType(spec) {
|
|
408
|
+
const type = spec["type"];
|
|
409
|
+
if (typeof type !== "string" || !type.trim()) {
|
|
410
|
+
return `agent.yaml must set type: ${REQUIRED_TEMPLATE_TYPE}`;
|
|
411
|
+
}
|
|
412
|
+
if (type !== REQUIRED_TEMPLATE_TYPE) {
|
|
413
|
+
return `Invalid template type '${type}': expected '${REQUIRED_TEMPLATE_TYPE}'`;
|
|
414
|
+
}
|
|
415
|
+
return null;
|
|
416
|
+
}
|
|
417
|
+
function validateTemplateMaxToolRounds(spec) {
|
|
418
|
+
const raw = spec["max_tool_rounds"];
|
|
419
|
+
if (typeof raw !== "number" || !Number.isInteger(raw)) {
|
|
420
|
+
return `agent.yaml must set integer max_tool_rounds >= ${MIN_TEMPLATE_MAX_TOOL_ROUNDS}`;
|
|
421
|
+
}
|
|
422
|
+
if (raw < MIN_TEMPLATE_MAX_TOOL_ROUNDS) {
|
|
423
|
+
return `max_tool_rounds must be >= ${MIN_TEMPLATE_MAX_TOOL_ROUNDS} (got ${raw})`;
|
|
424
|
+
}
|
|
425
|
+
return null;
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Resolve the `tools` field to a list of ToolDef objects.
|
|
429
|
+
*
|
|
430
|
+
* - `"all"` => all built-in tools
|
|
431
|
+
* - A list of name strings => resolve each from BASIC_TOOLS_MAP
|
|
432
|
+
* - Absent / null => empty list (custom templates get defaults via resolveToolNames)
|
|
433
|
+
*/
|
|
434
|
+
function resolveTools(spec) {
|
|
435
|
+
const toolsSpec = spec["tools"];
|
|
436
|
+
if (toolsSpec == null)
|
|
437
|
+
return [];
|
|
438
|
+
if (toolsSpec === "all") {
|
|
439
|
+
// BASIC_TOOLS includes all basic tools.
|
|
440
|
+
// Comm tools (spawn_agent, wait, etc.) are injected by Session at runtime.
|
|
441
|
+
return [...BASIC_TOOLS];
|
|
442
|
+
}
|
|
443
|
+
if (Array.isArray(toolsSpec)) {
|
|
444
|
+
const resolved = [];
|
|
445
|
+
for (const name of toolsSpec) {
|
|
446
|
+
const tool = BASIC_TOOLS_MAP[name];
|
|
447
|
+
if (!tool) {
|
|
448
|
+
throw new Error(`Unknown tool '${name}'. Available: ${Object.keys(BASIC_TOOLS_MAP).join(", ")}`);
|
|
449
|
+
}
|
|
450
|
+
resolved.push(tool);
|
|
451
|
+
}
|
|
452
|
+
return resolved;
|
|
453
|
+
}
|
|
454
|
+
throw new Error(`Invalid tools spec: ${JSON.stringify(toolsSpec)}`);
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Resolve the `mcp_tools` field to MCP ToolDef objects.
|
|
458
|
+
*/
|
|
459
|
+
function resolveMcpTools(spec, mcpManager) {
|
|
460
|
+
if (!mcpManager)
|
|
461
|
+
return [];
|
|
462
|
+
const mcpSpec = spec["mcp_tools"];
|
|
463
|
+
if (!mcpSpec || mcpSpec === "none")
|
|
464
|
+
return [];
|
|
465
|
+
if (mcpSpec === "all") {
|
|
466
|
+
return mcpManager.getAllTools();
|
|
467
|
+
}
|
|
468
|
+
if (Array.isArray(mcpSpec)) {
|
|
469
|
+
const tools = [];
|
|
470
|
+
for (const serverName of mcpSpec) {
|
|
471
|
+
const serverTools = mcpManager.getToolsForServer(serverName);
|
|
472
|
+
if (serverTools.length === 0) {
|
|
473
|
+
console.warn(`MCP server '${serverName}' has no tools or is not connected`);
|
|
474
|
+
}
|
|
475
|
+
tools.push(...serverTools);
|
|
476
|
+
}
|
|
477
|
+
return tools;
|
|
478
|
+
}
|
|
479
|
+
return [];
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Build a fully configured Agent from the parsed YAML spec.
|
|
483
|
+
*/
|
|
484
|
+
function buildAgent(spec, name, model, systemPrompt, config, mcpManager) {
|
|
485
|
+
const typeError = validateTemplateType(spec);
|
|
486
|
+
if (typeError) {
|
|
487
|
+
throw new Error(typeError);
|
|
488
|
+
}
|
|
489
|
+
const maxRoundsError = validateTemplateMaxToolRounds(spec);
|
|
490
|
+
if (maxRoundsError) {
|
|
491
|
+
throw new Error(maxRoundsError);
|
|
492
|
+
}
|
|
493
|
+
const resolvedModel = model ?? config.defaultModel;
|
|
494
|
+
if (!resolvedModel) {
|
|
495
|
+
throw new Error(`No model specified for template '${name}' and no default model in config.`);
|
|
496
|
+
}
|
|
497
|
+
const tools = [...resolveTools(spec), ...resolveMcpTools(spec, mcpManager)];
|
|
498
|
+
const opts = {
|
|
499
|
+
name,
|
|
500
|
+
role: systemPrompt,
|
|
501
|
+
model: resolvedModel,
|
|
502
|
+
config,
|
|
503
|
+
tools,
|
|
504
|
+
};
|
|
505
|
+
opts.maxToolRounds = spec["max_tool_rounds"];
|
|
506
|
+
if (typeof spec["description"] === "string") {
|
|
507
|
+
opts.description = spec["description"];
|
|
508
|
+
}
|
|
509
|
+
const agent = new Agent(opts);
|
|
510
|
+
// Keep MCP selection intent for runtime lazy wiring in Session._ensureMcp().
|
|
511
|
+
agent._mcpToolsSpec = spec["mcp_tools"] ?? undefined;
|
|
512
|
+
return agent;
|
|
513
|
+
}
|
|
514
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/templates/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG3C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGjE,qEAAqE;AACrE,YAAY;AACZ,qEAAqE;AAErE,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,sBAAsB,GAAG,OAAO,CAAC;AACvC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAa;IACzC,WAAW;IACX,WAAW;IACX,YAAY;IACZ,WAAW;IACX,aAAa;IACb,UAAU;IACV,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,iBAAiB;IACjB,aAAa;IACb,YAAY;IACZ,MAAM;IACN,MAAM;IACN,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,MAAM;IACN,YAAY;IACZ,cAAc;IACd,UAAU;IACV,cAAc;IACd,mBAAmB;IACnB,WAAW;IACX,MAAM;IACN,cAAc;IACd,KAAK;IACL,OAAO;IACP,eAAe;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,WAAW,EAAE,CAAC,iBAAiB,CAAC;IAChC,UAAU,EAAE,CAAC,iBAAiB,CAAC;IAC/B,eAAe,EAAE,CAAC,aAAa,CAAC;CACjC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAa;IAC9C,WAAW;IACX,YAAY;IACZ,WAAW;IACX,aAAa;IACb,UAAU;IACV,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,iBAAiB;IACjB,aAAa;IACb,YAAY;IACZ,MAAM;IACN,YAAY;IACZ,WAAW;CACZ,CAAC;AAEF,qEAAqE;AACrE,aAAa;AACb,qEAAqE;AAErE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,WAAmB,EACnB,MAAc,EACd,YAAqB,EACrB,UAA6B,EAC7B,WAAsB;IAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAA6B,IAAI,EAAE,CAAC;IAC/D,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,IAAI,GACR,YAAY;QACX,IAAI,CAAC,MAAM,CAAwB;QACpC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAuB,CAAC;IAElD,wCAAwC;IACxC,IAAI,YAAY,GAAG,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAE1D,mCAAmC;IACnC,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAChE,IAAI,WAAW,EAAE,CAAC;YAChB,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,wBAAwB,GAAG,WAAW,CAAC;QACjF,CAAC;QAED,sCAAsC;QACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,cAAc,GAAG,sBAAsB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,cAAc,EAAE,CAAC;YACnB,YAAY,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,cAAc,CAAC;QAClE,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrE,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;oBAAE,SAAS;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,YAAY;gBACV,YAAY,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CACf,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,MAAM,EACN,UAAU,CACX,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,WAAmB,EACnB,MAAc,EACd,UAA6B,EAC7B,WAAsB,EACtB,QAAiB;IAEjB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,+DAA+D;IAC/D,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC3C,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACzE,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxC,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,mBAAmB;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,mBAAmB,GAAG,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAC/D,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;QACnG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,yBAAyB,WAAW,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,GAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAA6B,IAAI,EAAE,CAAC;IAC3D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,+BAA+B,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;QAC1D,OAAO,qEAAqE,CAAC;IAC/E,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,iCAAiC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACvE,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1E,OAAO,qEAAqE,CAAC;IAC/E,CAAC;IAED,MAAM,cAAc,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qEAAqE;AACrE,kBAAkB;AAClB,qEAAqE;AAErE;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAqB;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC/D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA6B;IAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,SAAS,IAAI,IAAI;QAAE,OAAO,CAAC,GAAG,sBAAsB,CAAC,CAAC;IAC1D,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,CAAC,GAAG,iBAAiB,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,SAAqB,CAAC;IAC3D,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAmB;IAC1D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,SAAS,IAAI,eAAe,GAAG,qCAAqC,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAmB,EACnB,WAAqB;IAErB,mEAAmE;IACnE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QACzC,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QACzC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,IAA6B;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACzC,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAoB,CAAC;IACzD,OAAO,CAAC,eAAe,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAkB,EAClB,WAAqB;IAErB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QAC3E,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,IAAc,EAAE,MAAc,EAAE,QAAgB;IAC1E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7C,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qEAAqE;AACrE,mBAAmB;AACnB,qEAAqE;AAErE;;GAEG;AACH,SAAS,mBAAmB,CAC1B,IAA6B,EAC7B,WAAmB;IAEnB,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,oBAAoB,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,oBAAoB,CAAC,IAA6B;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7C,OAAO,6BAA6B,sBAAsB,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACpC,OAAO,0BAA0B,IAAI,gBAAgB,sBAAsB,GAAG,CAAC;IACjF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,6BAA6B,CAAC,IAA6B;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,kDAAkD,4BAA4B,EAAE,CAAC;IAC1F,CAAC;IACD,IAAI,GAAG,GAAG,4BAA4B,EAAE,CAAC;QACvC,OAAO,8BAA8B,4BAA4B,SAAS,GAAG,GAAG,CAAC;IACnF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,IAA6B;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,SAAS,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAEjC,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,wCAAwC;QACxC,2EAA2E;QAC3E,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CACb,iBAAiB,IAAI,iBAAiB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChF,CAAC;YACJ,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,IAA6B,EAC7B,UAA6B;IAE7B,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAE9C,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;YACjC,MAAM,WAAW,GAAG,UAAU,CAAC,iBAAiB,CAAC,UAAoB,CAAC,CAAC;YACvE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,IAAI,CACV,eAAe,UAAU,oCAAoC,CAC9D,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CACjB,IAA6B,EAC7B,IAAY,EACZ,KAAyB,EACzB,YAAoB,EACpB,MAAc,EACd,UAA6B;IAE7B,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,cAAc,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,IAAI,MAAM,CAAC,YAAY,CAAC;IACnD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,mCAAmC,CAC5E,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAE5E,MAAM,IAAI,GAQN;QACF,IAAI;QACJ,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,aAAa;QACpB,MAAM;QACN,KAAK;KACN,CAAC;IAEF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAW,CAAC;IACvD,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IAE9B,6EAA6E;IAC5E,KAAa,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;IAE9D,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in tool definitions and executors.
|
|
3
|
+
*
|
|
4
|
+
* 15 tools: read_file, list_dir, glob, grep, edit_file, write_file,
|
|
5
|
+
* apply_patch, bash, bash_background, bash_output, kill_shell,
|
|
6
|
+
* diff, test, web_search, web_fetch.
|
|
7
|
+
*/
|
|
8
|
+
import type { ToolDef } from "../providers/base.js";
|
|
9
|
+
import { ToolResult } from "../providers/base.js";
|
|
10
|
+
export declare const BASH_BACKGROUND_TOOL: ToolDef;
|
|
11
|
+
export declare const BASH_OUTPUT_TOOL: ToolDef;
|
|
12
|
+
export declare const KILL_SHELL_TOOL: ToolDef;
|
|
13
|
+
export declare const BASIC_TOOLS: ToolDef[];
|
|
14
|
+
export declare const BASIC_TOOLS_MAP: Record<string, ToolDef>;
|
|
15
|
+
export declare function buildBashEnv(): NodeJS.ProcessEnv;
|
|
16
|
+
export interface ExecuteToolContext {
|
|
17
|
+
projectRoot?: string;
|
|
18
|
+
externalPathAllowlist?: string[];
|
|
19
|
+
sessionArtifactsDir?: string;
|
|
20
|
+
supportsMultimodal?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Execute a tool by name and return a `ToolResult`.
|
|
24
|
+
*
|
|
25
|
+
* Tool functions may return either a plain `string` (wrapped automatically)
|
|
26
|
+
* or a `ToolResult` with optional action hints, tags, and metadata.
|
|
27
|
+
*/
|
|
28
|
+
export declare function executeTool(name: string, args: Record<string, unknown>, ctx?: ExecuteToolContext): Promise<ToolResult>;
|
|
29
|
+
//# sourceMappingURL=basic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/tools/basic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AA2XlD,eAAO,MAAM,oBAAoB,EAAE,OAkBlC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,OAsB9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,OAqB7B,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,OAAO,EAgBhC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAEnD,CAAC;AAyzBF,wBAAgB,YAAY,IAAI,MAAM,CAAC,UAAU,CAahD;AAmWD,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AA4vBD;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,CAAC,EAAE,kBAAkB,GACvB,OAAO,CAAC,UAAU,CAAC,CAgBrB"}
|