qlogicagent 0.2.1 → 0.4.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 +45 -45
- package/package.json +56 -42
- package/dist/agent/agent.d.ts +0 -43
- package/dist/agent/agent.js +0 -113
- package/dist/agent/tool-loop.d.ts +0 -64
- package/dist/agent/tool-loop.js +0 -575
- package/dist/agent/types.d.ts +0 -175
- package/dist/agent/types.js +0 -14
- package/dist/cli/main.d.ts +0 -11
- package/dist/cli/main.js +0 -23
- package/dist/cli/stdio-server.d.ts +0 -45
- package/dist/cli/stdio-server.js +0 -463
- package/dist/config/config.d.ts +0 -17
- package/dist/config/config.js +0 -21
- package/dist/contracts/hooks.d.ts +0 -120
- package/dist/contracts/hooks.js +0 -7
- package/dist/contracts/index.d.ts +0 -10
- package/dist/contracts/index.js +0 -10
- package/dist/contracts/planner.d.ts +0 -35
- package/dist/contracts/planner.js +0 -2
- package/dist/contracts/skill-candidate.d.ts +0 -63
- package/dist/contracts/skill-candidate.js +0 -195
- package/dist/contracts/todo.d.ts +0 -14
- package/dist/contracts/todo.js +0 -9
- package/dist/index.d.ts +0 -13
- package/dist/index.js +0 -15
- package/dist/llm/builtin-providers.d.ts +0 -10
- package/dist/llm/builtin-providers.js +0 -531
- package/dist/llm/index.d.ts +0 -15
- package/dist/llm/index.js +0 -14
- package/dist/llm/llm-client.d.ts +0 -43
- package/dist/llm/llm-client.js +0 -67
- package/dist/llm/model-catalog.d.ts +0 -53
- package/dist/llm/model-catalog.js +0 -191
- package/dist/llm/provider-def.d.ts +0 -59
- package/dist/llm/provider-def.js +0 -12
- package/dist/llm/provider-registry.d.ts +0 -54
- package/dist/llm/provider-registry.js +0 -147
- package/dist/llm/transport.d.ts +0 -62
- package/dist/llm/transport.js +0 -27
- package/dist/llm/transports/anthropic-messages.d.ts +0 -31
- package/dist/llm/transports/anthropic-messages.js +0 -293
- package/dist/llm/transports/openai-chat.d.ts +0 -36
- package/dist/llm/transports/openai-chat.js +0 -165
- package/dist/orchestration/agent-registry.d.ts +0 -41
- package/dist/orchestration/agent-registry.js +0 -116
- package/dist/orchestration/approval-aware-tool-plan.d.ts +0 -32
- package/dist/orchestration/approval-aware-tool-plan.js +0 -87
- package/dist/orchestration/context-compression.d.ts +0 -220
- package/dist/orchestration/context-compression.js +0 -583
- package/dist/orchestration/conversation-repair.d.ts +0 -61
- package/dist/orchestration/conversation-repair.js +0 -429
- package/dist/orchestration/curator-scheduler.d.ts +0 -119
- package/dist/orchestration/curator-scheduler.js +0 -135
- package/dist/orchestration/embedded-failover-policy.d.ts +0 -110
- package/dist/orchestration/embedded-failover-policy.js +0 -168
- package/dist/orchestration/error-classification.d.ts +0 -12
- package/dist/orchestration/error-classification.js +0 -77
- package/dist/orchestration/failover-classification.d.ts +0 -8
- package/dist/orchestration/failover-classification.js +0 -381
- package/dist/orchestration/failover-error.d.ts +0 -33
- package/dist/orchestration/failover-error.js +0 -198
- package/dist/orchestration/fork-subagent.d.ts +0 -100
- package/dist/orchestration/fork-subagent.js +0 -98
- package/dist/orchestration/index.d.ts +0 -120
- package/dist/orchestration/index.js +0 -267
- package/dist/orchestration/memory-flush-policy.d.ts +0 -57
- package/dist/orchestration/memory-flush-policy.js +0 -85
- package/dist/orchestration/memory-provider.d.ts +0 -14
- package/dist/orchestration/memory-provider.js +0 -2
- package/dist/orchestration/parallel-tool-calls.d.ts +0 -41
- package/dist/orchestration/parallel-tool-calls.js +0 -59
- package/dist/orchestration/prompt-cache-strategy.d.ts +0 -126
- package/dist/orchestration/prompt-cache-strategy.js +0 -228
- package/dist/orchestration/reactive-compact.d.ts +0 -73
- package/dist/orchestration/reactive-compact.js +0 -78
- package/dist/orchestration/retry-loop.d.ts +0 -22
- package/dist/orchestration/retry-loop.js +0 -24
- package/dist/orchestration/skill-candidate.d.ts +0 -52
- package/dist/orchestration/skill-candidate.js +0 -141
- package/dist/orchestration/skill-consolidation.d.ts +0 -123
- package/dist/orchestration/skill-consolidation.js +0 -220
- package/dist/orchestration/skill-improvement.d.ts +0 -59
- package/dist/orchestration/skill-improvement.js +0 -66
- package/dist/orchestration/skill-similarity.d.ts +0 -98
- package/dist/orchestration/skill-similarity.js +0 -131
- package/dist/orchestration/streaming-tool-executor.d.ts +0 -73
- package/dist/orchestration/streaming-tool-executor.js +0 -96
- package/dist/orchestration/team-orchestration.d.ts +0 -195
- package/dist/orchestration/team-orchestration.js +0 -369
- package/dist/orchestration/team-tool-loop-wiring.d.ts +0 -92
- package/dist/orchestration/team-tool-loop-wiring.js +0 -147
- package/dist/orchestration/tool-choice-policy.d.ts +0 -54
- package/dist/orchestration/tool-choice-policy.js +0 -164
- package/dist/orchestration/tool-loop-state.d.ts +0 -50
- package/dist/orchestration/tool-loop-state.js +0 -133
- package/dist/orchestration/tool-schema.d.ts +0 -39
- package/dist/orchestration/tool-schema.js +0 -297
- package/dist/orchestration/transcript-repair.d.ts +0 -42
- package/dist/orchestration/transcript-repair.js +0 -426
- package/dist/orchestration/turn-loop-guard.d.ts +0 -86
- package/dist/orchestration/turn-loop-guard.js +0 -92
- package/dist/orchestration/web-browser-policy.d.ts +0 -17
- package/dist/orchestration/web-browser-policy.js +0 -39
- package/dist/runtime/context-compression.d.ts +0 -61
- package/dist/runtime/context-compression.js +0 -274
- package/dist/runtime/hook-registry.d.ts +0 -12
- package/dist/runtime/hook-registry.js +0 -53
- package/dist/runtime/memory-hooks.d.ts +0 -23
- package/dist/runtime/memory-hooks.js +0 -65
- package/dist/runtime/tool-eligibility.d.ts +0 -59
- package/dist/runtime/tool-eligibility.js +0 -111
- package/dist/skills/index.d.ts +0 -108
- package/dist/skills/index.js +0 -82
- package/dist/skills/memory-extractor.d.ts +0 -64
- package/dist/skills/memory-extractor.js +0 -173
- package/dist/skills/memory-query-tool.d.ts +0 -43
- package/dist/skills/memory-query-tool.js +0 -127
- package/dist/skills/memory-store.d.ts +0 -66
- package/dist/skills/memory-store.js +0 -228
- package/dist/skills/memory-tool.d.ts +0 -67
- package/dist/skills/memory-tool.js +0 -192
- package/dist/skills/portable-tool.d.ts +0 -71
- package/dist/skills/portable-tool.js +0 -14
- package/dist/skills/qmemory-adapter.d.ts +0 -52
- package/dist/skills/qmemory-adapter.js +0 -165
- package/dist/skills/skill-frontmatter.d.ts +0 -19
- package/dist/skills/skill-frontmatter.js +0 -344
- package/dist/skills/skill-guard.d.ts +0 -23
- package/dist/skills/skill-guard.js +0 -229
- package/dist/skills/skill-loader.d.ts +0 -16
- package/dist/skills/skill-loader.js +0 -303
- package/dist/skills/skill-source.d.ts +0 -119
- package/dist/skills/skill-source.js +0 -126
- package/dist/skills/skill-types.d.ts +0 -199
- package/dist/skills/skill-types.js +0 -6
- package/dist/skills/think-tool.d.ts +0 -16
- package/dist/skills/think-tool.js +0 -59
- package/dist/skills/todo-tool.d.ts +0 -63
- package/dist/skills/todo-tool.js +0 -114
- package/dist/skills/tools/agent-tool.d.ts +0 -91
- package/dist/skills/tools/agent-tool.js +0 -142
- package/dist/skills/tools/apply-patch-tool.d.ts +0 -29
- package/dist/skills/tools/apply-patch-tool.js +0 -184
- package/dist/skills/tools/ask-user-tool.d.ts +0 -80
- package/dist/skills/tools/ask-user-tool.js +0 -121
- package/dist/skills/tools/brief-tool.d.ts +0 -74
- package/dist/skills/tools/brief-tool.js +0 -95
- package/dist/skills/tools/browser-tool.d.ts +0 -114
- package/dist/skills/tools/browser-tool.js +0 -155
- package/dist/skills/tools/checkpoint-tool.d.ts +0 -66
- package/dist/skills/tools/checkpoint-tool.js +0 -102
- package/dist/skills/tools/config-tool.d.ts +0 -63
- package/dist/skills/tools/config-tool.js +0 -143
- package/dist/skills/tools/cron-tool.d.ts +0 -116
- package/dist/skills/tools/cron-tool.js +0 -175
- package/dist/skills/tools/edit-tool.d.ts +0 -43
- package/dist/skills/tools/edit-tool.js +0 -70
- package/dist/skills/tools/exec-tool.d.ts +0 -102
- package/dist/skills/tools/exec-tool.js +0 -133
- package/dist/skills/tools/image-generate-tool.d.ts +0 -62
- package/dist/skills/tools/image-generate-tool.js +0 -67
- package/dist/skills/tools/instructions-tool.d.ts +0 -103
- package/dist/skills/tools/instructions-tool.js +0 -187
- package/dist/skills/tools/lsp-tool.d.ts +0 -153
- package/dist/skills/tools/lsp-tool.js +0 -227
- package/dist/skills/tools/mcp-client-types.d.ts +0 -269
- package/dist/skills/tools/mcp-client-types.js +0 -53
- package/dist/skills/tools/mcp-tool.d.ts +0 -249
- package/dist/skills/tools/mcp-tool.js +0 -503
- package/dist/skills/tools/memory-tool.d.ts +0 -74
- package/dist/skills/tools/memory-tool.js +0 -88
- package/dist/skills/tools/monitor-tool.d.ts +0 -113
- package/dist/skills/tools/monitor-tool.js +0 -131
- package/dist/skills/tools/music-generate-tool.d.ts +0 -55
- package/dist/skills/tools/music-generate-tool.js +0 -62
- package/dist/skills/tools/notify-tool.d.ts +0 -53
- package/dist/skills/tools/notify-tool.js +0 -62
- package/dist/skills/tools/patch-tool.d.ts +0 -45
- package/dist/skills/tools/patch-tool.js +0 -505
- package/dist/skills/tools/pdf-tool.d.ts +0 -66
- package/dist/skills/tools/pdf-tool.js +0 -88
- package/dist/skills/tools/plan-mode-tool.d.ts +0 -59
- package/dist/skills/tools/plan-mode-tool.js +0 -122
- package/dist/skills/tools/read-tool.d.ts +0 -51
- package/dist/skills/tools/read-tool.js +0 -84
- package/dist/skills/tools/repl-tool.d.ts +0 -70
- package/dist/skills/tools/repl-tool.js +0 -69
- package/dist/skills/tools/search-tool.d.ts +0 -112
- package/dist/skills/tools/search-tool.js +0 -225
- package/dist/skills/tools/send-message-tool.d.ts +0 -51
- package/dist/skills/tools/send-message-tool.js +0 -76
- package/dist/skills/tools/skill-list-tool.d.ts +0 -33
- package/dist/skills/tools/skill-list-tool.js +0 -54
- package/dist/skills/tools/skill-manage-tool.d.ts +0 -73
- package/dist/skills/tools/skill-manage-tool.js +0 -153
- package/dist/skills/tools/skill-view-tool.d.ts +0 -37
- package/dist/skills/tools/skill-view-tool.js +0 -72
- package/dist/skills/tools/sleep-tool.d.ts +0 -49
- package/dist/skills/tools/sleep-tool.js +0 -81
- package/dist/skills/tools/structured-output-tool.d.ts +0 -116
- package/dist/skills/tools/structured-output-tool.js +0 -176
- package/dist/skills/tools/task-tool.d.ts +0 -104
- package/dist/skills/tools/task-tool.js +0 -161
- package/dist/skills/tools/team-tool.d.ts +0 -89
- package/dist/skills/tools/team-tool.js +0 -105
- package/dist/skills/tools/tool-search-tool.d.ts +0 -51
- package/dist/skills/tools/tool-search-tool.js +0 -110
- package/dist/skills/tools/tts-tool.d.ts +0 -38
- package/dist/skills/tools/tts-tool.js +0 -45
- package/dist/skills/tools/video-edit-tool.d.ts +0 -69
- package/dist/skills/tools/video-edit-tool.js +0 -74
- package/dist/skills/tools/video-generate-tool.d.ts +0 -62
- package/dist/skills/tools/video-generate-tool.js +0 -66
- package/dist/skills/tools/video-merge-tool.d.ts +0 -105
- package/dist/skills/tools/video-merge-tool.js +0 -92
- package/dist/skills/tools/video-upscale-tool.d.ts +0 -45
- package/dist/skills/tools/video-upscale-tool.js +0 -52
- package/dist/skills/tools/web-fetch-tool.d.ts +0 -78
- package/dist/skills/tools/web-fetch-tool.js +0 -92
- package/dist/skills/tools/web-search-tool.d.ts +0 -57
- package/dist/skills/tools/web-search-tool.js +0 -86
- package/dist/skills/tools/worktree-tool.d.ts +0 -69
- package/dist/skills/tools/worktree-tool.js +0 -147
- package/dist/skills/tools/write-tool.d.ts +0 -45
- package/dist/skills/tools/write-tool.js +0 -81
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// Brief Tool — "SendUserMessage" equivalent from Claude Code.
|
|
3
|
-
//
|
|
4
|
-
// In brief/chat mode, agent output is not directly visible to
|
|
5
|
-
// the user. Only messages sent through this tool are displayed.
|
|
6
|
-
// This enables clean separation of internal reasoning vs
|
|
7
|
-
// user-facing communication.
|
|
8
|
-
//
|
|
9
|
-
// Reference: claude-code-haha/src/tools/BriefTool/BriefTool.ts
|
|
10
|
-
// Category: interaction
|
|
11
|
-
// ============================================================
|
|
12
|
-
export const BRIEF_TOOL_NAME = "send_user_message";
|
|
13
|
-
export const BRIEF_TOOL_SCHEMA = {
|
|
14
|
-
type: "object",
|
|
15
|
-
properties: {
|
|
16
|
-
message: {
|
|
17
|
-
type: "string",
|
|
18
|
-
description: "The message to send to the user. Supports Markdown formatting. " +
|
|
19
|
-
"This is the ONLY way to communicate with the user in brief/chat mode.",
|
|
20
|
-
minLength: 1,
|
|
21
|
-
},
|
|
22
|
-
attachments: {
|
|
23
|
-
type: "array",
|
|
24
|
-
description: "Optional file paths to attach (images, documents, etc.).",
|
|
25
|
-
items: { type: "string" },
|
|
26
|
-
maxItems: 10,
|
|
27
|
-
},
|
|
28
|
-
status: {
|
|
29
|
-
type: "string",
|
|
30
|
-
enum: ["normal", "proactive"],
|
|
31
|
-
description: "Message status. Use 'proactive' when providing unsolicited information " +
|
|
32
|
-
"(e.g., monitoring alerts, task completion notifications).",
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
required: ["message"],
|
|
36
|
-
};
|
|
37
|
-
export function createBriefTool(deps) {
|
|
38
|
-
return {
|
|
39
|
-
name: BRIEF_TOOL_NAME,
|
|
40
|
-
label: "Send User Message",
|
|
41
|
-
description: "Send a message to the user. In brief/chat mode this is the ONLY way " +
|
|
42
|
-
"your messages are visible. Supports Markdown and file attachments. " +
|
|
43
|
-
"Use 'proactive' status for unsolicited updates (monitoring alerts, " +
|
|
44
|
-
"task completions). Keep messages concise and useful.",
|
|
45
|
-
parameters: BRIEF_TOOL_SCHEMA,
|
|
46
|
-
isConcurrencySafe: true,
|
|
47
|
-
isReadOnly: true,
|
|
48
|
-
searchHint: "send message user brief chat communicate display output",
|
|
49
|
-
execute: async (_toolCallId, params) => {
|
|
50
|
-
if (!params.message || params.message.trim().length === 0) {
|
|
51
|
-
return {
|
|
52
|
-
content: [{ type: "text", text: "Error: message cannot be empty." }],
|
|
53
|
-
details: { type: "brief", error: "empty_message" },
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
// Resolve attachments if provided
|
|
57
|
-
let resolvedAttachments;
|
|
58
|
-
if (params.attachments && params.attachments.length > 0) {
|
|
59
|
-
if (deps.resolveAttachments) {
|
|
60
|
-
const resolved = await deps.resolveAttachments(params.attachments);
|
|
61
|
-
if ("error" in resolved) {
|
|
62
|
-
return {
|
|
63
|
-
content: [{ type: "text", text: `Attachment error: ${resolved.error}` }],
|
|
64
|
-
details: { type: "brief", error: "attachment_resolution_failed" },
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
resolvedAttachments = resolved;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
const status = params.status || "normal";
|
|
71
|
-
const result = await deps.deliverMessage({
|
|
72
|
-
message: params.message.trim(),
|
|
73
|
-
attachments: params.attachments,
|
|
74
|
-
status,
|
|
75
|
-
});
|
|
76
|
-
if (!result.delivered) {
|
|
77
|
-
return {
|
|
78
|
-
content: [{ type: "text", text: `Message delivery failed: ${result.error || "unknown error"}` }],
|
|
79
|
-
details: { type: "brief", delivered: false, error: result.error },
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
// Minimal confirmation — avoids re-echoing message in context (saves tokens)
|
|
83
|
-
return {
|
|
84
|
-
content: [{ type: "text", text: "Message delivered to user." }],
|
|
85
|
-
details: {
|
|
86
|
-
type: "brief",
|
|
87
|
-
delivered: true,
|
|
88
|
-
status,
|
|
89
|
-
hasAttachments: (resolvedAttachments?.length ?? 0) > 0,
|
|
90
|
-
sentAt: result.sentAt,
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
},
|
|
94
|
-
};
|
|
95
|
-
}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import type { PortableTool } from "../portable-tool.js";
|
|
2
|
-
export declare const BROWSER_TOOL_NAME: "browser";
|
|
3
|
-
export type BrowserAction = "navigate" | "click" | "type" | "scroll" | "snapshot" | "screenshot" | "console" | "cdp";
|
|
4
|
-
export interface BrowserToolParams {
|
|
5
|
-
/** Browser action to perform */
|
|
6
|
-
action: BrowserAction;
|
|
7
|
-
/** URL for navigate action */
|
|
8
|
-
url?: string;
|
|
9
|
-
/** Element reference (e.g. "@e5") for click/type actions */
|
|
10
|
-
ref?: string;
|
|
11
|
-
/** Text to type */
|
|
12
|
-
text?: string;
|
|
13
|
-
/** Scroll direction */
|
|
14
|
-
direction?: "up" | "down" | "left" | "right";
|
|
15
|
-
/** CDP method name for raw cdp action */
|
|
16
|
-
method?: string;
|
|
17
|
-
/** CDP params object */
|
|
18
|
-
params?: Record<string, unknown>;
|
|
19
|
-
/** JavaScript expression for console eval */
|
|
20
|
-
expression?: string;
|
|
21
|
-
/** Whether to include full accessibility tree */
|
|
22
|
-
full?: boolean;
|
|
23
|
-
}
|
|
24
|
-
export declare const BROWSER_TOOL_SCHEMA: {
|
|
25
|
-
readonly type: "object";
|
|
26
|
-
readonly properties: {
|
|
27
|
-
readonly action: {
|
|
28
|
-
readonly type: "string";
|
|
29
|
-
readonly enum: readonly ["navigate", "click", "type", "scroll", "snapshot", "screenshot", "console", "cdp"];
|
|
30
|
-
readonly description: string;
|
|
31
|
-
};
|
|
32
|
-
readonly url: {
|
|
33
|
-
readonly type: "string";
|
|
34
|
-
readonly description: "URL to navigate to. Required for 'navigate' action.";
|
|
35
|
-
};
|
|
36
|
-
readonly ref: {
|
|
37
|
-
readonly type: "string";
|
|
38
|
-
readonly description: "Element reference like \"@e5\" from a previous snapshot. Required for click/type.";
|
|
39
|
-
};
|
|
40
|
-
readonly text: {
|
|
41
|
-
readonly type: "string";
|
|
42
|
-
readonly description: "Text to type into the referenced element. Required for 'type' action.";
|
|
43
|
-
};
|
|
44
|
-
readonly direction: {
|
|
45
|
-
readonly type: "string";
|
|
46
|
-
readonly enum: readonly ["up", "down", "left", "right"];
|
|
47
|
-
readonly description: "Scroll direction. Required for 'scroll' action.";
|
|
48
|
-
};
|
|
49
|
-
readonly method: {
|
|
50
|
-
readonly type: "string";
|
|
51
|
-
readonly description: "CDP method name (e.g. 'Page.reload'). Required for 'cdp' action.";
|
|
52
|
-
};
|
|
53
|
-
readonly params: {
|
|
54
|
-
readonly type: "object";
|
|
55
|
-
readonly description: "Parameters for the CDP method. Optional for 'cdp' action.";
|
|
56
|
-
};
|
|
57
|
-
readonly expression: {
|
|
58
|
-
readonly type: "string";
|
|
59
|
-
readonly description: "JavaScript expression to evaluate. Used with 'console' action.";
|
|
60
|
-
};
|
|
61
|
-
readonly full: {
|
|
62
|
-
readonly type: "boolean";
|
|
63
|
-
readonly description: "Include full accessibility tree (default: compact). Used with 'snapshot'.";
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
readonly required: readonly ["action"];
|
|
67
|
-
};
|
|
68
|
-
export interface BrowserSnapshot {
|
|
69
|
-
elements: Array<{
|
|
70
|
-
ref: string;
|
|
71
|
-
role: string;
|
|
72
|
-
name: string;
|
|
73
|
-
text?: string;
|
|
74
|
-
}>;
|
|
75
|
-
url: string;
|
|
76
|
-
title: string;
|
|
77
|
-
}
|
|
78
|
-
export interface BrowserScreenshot {
|
|
79
|
-
base64: string;
|
|
80
|
-
mimeType: string;
|
|
81
|
-
width: number;
|
|
82
|
-
height: number;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Host-provided browser automation backend.
|
|
86
|
-
* The host manages Chrome/Chromium lifecycle and CDP connections.
|
|
87
|
-
*/
|
|
88
|
-
export interface BrowserToolDeps {
|
|
89
|
-
navigate(url: string): Promise<{
|
|
90
|
-
snapshot: BrowserSnapshot;
|
|
91
|
-
}>;
|
|
92
|
-
click(ref: string): Promise<{
|
|
93
|
-
success: boolean;
|
|
94
|
-
error?: string;
|
|
95
|
-
}>;
|
|
96
|
-
type(ref: string, text: string): Promise<{
|
|
97
|
-
success: boolean;
|
|
98
|
-
error?: string;
|
|
99
|
-
}>;
|
|
100
|
-
scroll(direction: "up" | "down" | "left" | "right"): Promise<{
|
|
101
|
-
success: boolean;
|
|
102
|
-
}>;
|
|
103
|
-
snapshot(full?: boolean): Promise<BrowserSnapshot>;
|
|
104
|
-
screenshot(): Promise<BrowserScreenshot>;
|
|
105
|
-
consoleEval(expression?: string): Promise<{
|
|
106
|
-
result?: string;
|
|
107
|
-
messages?: string[];
|
|
108
|
-
errors?: string[];
|
|
109
|
-
}>;
|
|
110
|
-
cdp(method: string, params?: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
111
|
-
/** Validate URL safety (SSRF prevention). Returns error message if blocked, null if safe. */
|
|
112
|
-
validateUrl(url: string): string | null;
|
|
113
|
-
}
|
|
114
|
-
export declare function createBrowserTool(deps: BrowserToolDeps): PortableTool<BrowserToolParams>;
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// Browser Tool — CDP-based browser automation.
|
|
3
|
-
// Reference: hermes-agent-main/tools/browser_tool.py
|
|
4
|
-
// hermes-agent-main/tools/browser_cdp_tool.py
|
|
5
|
-
// Category: web
|
|
6
|
-
// ============================================================
|
|
7
|
-
export const BROWSER_TOOL_NAME = "browser";
|
|
8
|
-
export const BROWSER_TOOL_SCHEMA = {
|
|
9
|
-
type: "object",
|
|
10
|
-
properties: {
|
|
11
|
-
action: {
|
|
12
|
-
type: "string",
|
|
13
|
-
enum: ["navigate", "click", "type", "scroll", "snapshot", "screenshot", "console", "cdp"],
|
|
14
|
-
description: "Browser action: navigate (go to URL), click (element by ref), type (text into element), " +
|
|
15
|
-
"scroll (direction), snapshot (accessibility tree), screenshot (visual capture), " +
|
|
16
|
-
"console (eval JS / read logs), cdp (raw CDP command).",
|
|
17
|
-
},
|
|
18
|
-
url: {
|
|
19
|
-
type: "string",
|
|
20
|
-
description: "URL to navigate to. Required for 'navigate' action.",
|
|
21
|
-
},
|
|
22
|
-
ref: {
|
|
23
|
-
type: "string",
|
|
24
|
-
description: 'Element reference like "@e5" from a previous snapshot. Required for click/type.',
|
|
25
|
-
},
|
|
26
|
-
text: {
|
|
27
|
-
type: "string",
|
|
28
|
-
description: "Text to type into the referenced element. Required for 'type' action.",
|
|
29
|
-
},
|
|
30
|
-
direction: {
|
|
31
|
-
type: "string",
|
|
32
|
-
enum: ["up", "down", "left", "right"],
|
|
33
|
-
description: "Scroll direction. Required for 'scroll' action.",
|
|
34
|
-
},
|
|
35
|
-
method: {
|
|
36
|
-
type: "string",
|
|
37
|
-
description: "CDP method name (e.g. 'Page.reload'). Required for 'cdp' action.",
|
|
38
|
-
},
|
|
39
|
-
params: {
|
|
40
|
-
type: "object",
|
|
41
|
-
description: "Parameters for the CDP method. Optional for 'cdp' action.",
|
|
42
|
-
},
|
|
43
|
-
expression: {
|
|
44
|
-
type: "string",
|
|
45
|
-
description: "JavaScript expression to evaluate. Used with 'console' action.",
|
|
46
|
-
},
|
|
47
|
-
full: {
|
|
48
|
-
type: "boolean",
|
|
49
|
-
description: "Include full accessibility tree (default: compact). Used with 'snapshot'.",
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
required: ["action"],
|
|
53
|
-
};
|
|
54
|
-
export function createBrowserTool(deps) {
|
|
55
|
-
return {
|
|
56
|
-
name: BROWSER_TOOL_NAME,
|
|
57
|
-
label: "Browser",
|
|
58
|
-
description: "Control a headless browser via Chrome DevTools Protocol. " +
|
|
59
|
-
"Actions: navigate (URL), click/type (element refs from snapshot), " +
|
|
60
|
-
"scroll, snapshot (accessibility tree), screenshot (visual), " +
|
|
61
|
-
"console (JS eval/logs), cdp (raw CDP commands). " +
|
|
62
|
-
"Use snapshot to get element refs before click/type.",
|
|
63
|
-
parameters: BROWSER_TOOL_SCHEMA,
|
|
64
|
-
execute: async (_toolCallId, params) => {
|
|
65
|
-
switch (params.action) {
|
|
66
|
-
case "navigate": {
|
|
67
|
-
if (!params.url) {
|
|
68
|
-
return { content: [{ type: "text", text: "Error: url is required for navigate action." }], details: { type: "browser", error: "missing_url" } };
|
|
69
|
-
}
|
|
70
|
-
const blocked = deps.validateUrl(params.url);
|
|
71
|
-
if (blocked) {
|
|
72
|
-
return { content: [{ type: "text", text: `Blocked: ${blocked}` }], details: { type: "browser", error: "url_blocked" } };
|
|
73
|
-
}
|
|
74
|
-
const nav = await deps.navigate(params.url);
|
|
75
|
-
const lines = [`Navigated to: ${nav.snapshot.url}`, `Title: ${nav.snapshot.title}`, "", `Elements: ${nav.snapshot.elements.length}`];
|
|
76
|
-
if (nav.snapshot.elements.length <= 30) {
|
|
77
|
-
for (const e of nav.snapshot.elements) {
|
|
78
|
-
lines.push(` ${e.ref} [${e.role}] ${e.name}${e.text ? `: "${e.text}"` : ""}`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
lines.push("(use snapshot action for full element list)");
|
|
83
|
-
}
|
|
84
|
-
return { content: [{ type: "text", text: lines.join("\n") }], details: { type: "browser", action: "navigate", url: params.url } };
|
|
85
|
-
}
|
|
86
|
-
case "click": {
|
|
87
|
-
if (!params.ref) {
|
|
88
|
-
return { content: [{ type: "text", text: "Error: ref is required for click (e.g. '@e5')." }], details: { type: "browser", error: "missing_ref" } };
|
|
89
|
-
}
|
|
90
|
-
const click = await deps.click(params.ref);
|
|
91
|
-
if (!click.success) {
|
|
92
|
-
return { content: [{ type: "text", text: `Click failed: ${click.error || "unknown"}` }], details: { type: "browser", error: "click_failed" } };
|
|
93
|
-
}
|
|
94
|
-
return { content: [{ type: "text", text: `Clicked ${params.ref}` }], details: { type: "browser", action: "click", ref: params.ref } };
|
|
95
|
-
}
|
|
96
|
-
case "type": {
|
|
97
|
-
if (!params.ref || !params.text) {
|
|
98
|
-
return { content: [{ type: "text", text: "Error: ref and text are required for type action." }], details: { type: "browser", error: "missing_params" } };
|
|
99
|
-
}
|
|
100
|
-
const typed = await deps.type(params.ref, params.text);
|
|
101
|
-
if (!typed.success) {
|
|
102
|
-
return { content: [{ type: "text", text: `Type failed: ${typed.error || "unknown"}` }], details: { type: "browser", error: "type_failed" } };
|
|
103
|
-
}
|
|
104
|
-
return { content: [{ type: "text", text: `Typed "${params.text}" into ${params.ref}` }], details: { type: "browser", action: "type", ref: params.ref } };
|
|
105
|
-
}
|
|
106
|
-
case "scroll": {
|
|
107
|
-
if (!params.direction) {
|
|
108
|
-
return { content: [{ type: "text", text: "Error: direction is required for scroll." }], details: { type: "browser", error: "missing_direction" } };
|
|
109
|
-
}
|
|
110
|
-
await deps.scroll(params.direction);
|
|
111
|
-
return { content: [{ type: "text", text: `Scrolled ${params.direction}` }], details: { type: "browser", action: "scroll", direction: params.direction } };
|
|
112
|
-
}
|
|
113
|
-
case "snapshot": {
|
|
114
|
-
const snap = await deps.snapshot(params.full);
|
|
115
|
-
const lines = [`URL: ${snap.url}`, `Title: ${snap.title}`, "", `Accessibility tree (${snap.elements.length} elements):`, ""];
|
|
116
|
-
for (const e of snap.elements) {
|
|
117
|
-
lines.push(`${e.ref} [${e.role}] ${e.name}${e.text ? ` — "${e.text}"` : ""}`);
|
|
118
|
-
}
|
|
119
|
-
return { content: [{ type: "text", text: lines.join("\n") }], details: { type: "browser", action: "snapshot", elementCount: snap.elements.length } };
|
|
120
|
-
}
|
|
121
|
-
case "screenshot": {
|
|
122
|
-
const shot = await deps.screenshot();
|
|
123
|
-
return {
|
|
124
|
-
content: [{ type: "image", data: shot.base64, mimeType: shot.mimeType }],
|
|
125
|
-
details: { type: "browser", action: "screenshot", width: shot.width, height: shot.height },
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
case "console": {
|
|
129
|
-
const c = await deps.consoleEval(params.expression);
|
|
130
|
-
const lines = [];
|
|
131
|
-
if (c.result !== undefined)
|
|
132
|
-
lines.push(`Result: ${c.result}`);
|
|
133
|
-
if (c.messages?.length) {
|
|
134
|
-
lines.push("Console messages:");
|
|
135
|
-
c.messages.forEach((m) => lines.push(` ${m}`));
|
|
136
|
-
}
|
|
137
|
-
if (c.errors?.length) {
|
|
138
|
-
lines.push("JS errors:");
|
|
139
|
-
c.errors.forEach((e) => lines.push(` ${e}`));
|
|
140
|
-
}
|
|
141
|
-
return { content: [{ type: "text", text: lines.join("\n") || "(no output)" }], details: { type: "browser", action: "console" } };
|
|
142
|
-
}
|
|
143
|
-
case "cdp": {
|
|
144
|
-
if (!params.method) {
|
|
145
|
-
return { content: [{ type: "text", text: "Error: method is required for cdp action." }], details: { type: "browser", error: "missing_method" } };
|
|
146
|
-
}
|
|
147
|
-
const result = await deps.cdp(params.method, params.params);
|
|
148
|
-
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }], details: { type: "browser", action: "cdp", method: params.method } };
|
|
149
|
-
}
|
|
150
|
-
default:
|
|
151
|
-
return { content: [{ type: "text", text: `Error: unknown action "${params.action}".` }], details: { type: "browser", error: "unknown_action" } };
|
|
152
|
-
}
|
|
153
|
-
},
|
|
154
|
-
};
|
|
155
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import type { PortableTool } from "../portable-tool.js";
|
|
2
|
-
export declare const CHECKPOINT_TOOL_NAME: "checkpoint";
|
|
3
|
-
export type CheckpointAction = "create" | "list" | "restore" | "diff";
|
|
4
|
-
export interface CheckpointToolParams {
|
|
5
|
-
action: CheckpointAction;
|
|
6
|
-
/** Checkpoint ID (for restore/diff) */
|
|
7
|
-
checkpointId?: string;
|
|
8
|
-
/** Optional message for create */
|
|
9
|
-
message?: string;
|
|
10
|
-
/** File paths to restore (partial restore). If empty, restores all. */
|
|
11
|
-
paths?: string[];
|
|
12
|
-
}
|
|
13
|
-
export declare const CHECKPOINT_TOOL_SCHEMA: {
|
|
14
|
-
readonly type: "object";
|
|
15
|
-
readonly properties: {
|
|
16
|
-
readonly action: {
|
|
17
|
-
readonly type: "string";
|
|
18
|
-
readonly enum: readonly ["create", "list", "restore", "diff"];
|
|
19
|
-
readonly description: string;
|
|
20
|
-
};
|
|
21
|
-
readonly checkpointId: {
|
|
22
|
-
readonly type: "string";
|
|
23
|
-
readonly description: "Checkpoint ID. Required for restore and diff.";
|
|
24
|
-
};
|
|
25
|
-
readonly message: {
|
|
26
|
-
readonly type: "string";
|
|
27
|
-
readonly description: "Optional descriptive message for the checkpoint.";
|
|
28
|
-
};
|
|
29
|
-
readonly paths: {
|
|
30
|
-
readonly type: "array";
|
|
31
|
-
readonly items: {
|
|
32
|
-
readonly type: "string";
|
|
33
|
-
};
|
|
34
|
-
readonly description: "File paths to restore (partial restore). Omit to restore everything.";
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
readonly required: readonly ["action"];
|
|
38
|
-
};
|
|
39
|
-
export interface Checkpoint {
|
|
40
|
-
id: string;
|
|
41
|
-
message: string;
|
|
42
|
-
timestamp: string;
|
|
43
|
-
fileCount: number;
|
|
44
|
-
}
|
|
45
|
-
export interface CheckpointResult {
|
|
46
|
-
success: boolean;
|
|
47
|
-
checkpoint?: Checkpoint;
|
|
48
|
-
checkpoints?: Checkpoint[];
|
|
49
|
-
diff?: string;
|
|
50
|
-
error?: string;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Host-provided checkpoint backend.
|
|
54
|
-
* Uses shadow git repos (isolated from user project) for snapshots.
|
|
55
|
-
*/
|
|
56
|
-
export interface CheckpointToolDeps {
|
|
57
|
-
/** Create a snapshot of the current workspace state */
|
|
58
|
-
createCheckpoint(message?: string): Promise<CheckpointResult>;
|
|
59
|
-
/** List all available checkpoints */
|
|
60
|
-
listCheckpoints(): Promise<CheckpointResult>;
|
|
61
|
-
/** Restore workspace to a checkpoint state (optionally partial) */
|
|
62
|
-
restoreCheckpoint(checkpointId: string, paths?: string[]): Promise<CheckpointResult>;
|
|
63
|
-
/** Show diff between current state and a checkpoint */
|
|
64
|
-
diffCheckpoint(checkpointId: string): Promise<CheckpointResult>;
|
|
65
|
-
}
|
|
66
|
-
export declare function createCheckpointTool(deps: CheckpointToolDeps): PortableTool<CheckpointToolParams>;
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// Checkpoint Manager — transparent file history snapshots.
|
|
3
|
-
// Reference: hermes-agent-main/tools/checkpoint_manager.py
|
|
4
|
-
// Category: infrastructure (LLM does NOT directly invoke)
|
|
5
|
-
// ============================================================
|
|
6
|
-
export const CHECKPOINT_TOOL_NAME = "checkpoint";
|
|
7
|
-
export const CHECKPOINT_TOOL_SCHEMA = {
|
|
8
|
-
type: "object",
|
|
9
|
-
properties: {
|
|
10
|
-
action: {
|
|
11
|
-
type: "string",
|
|
12
|
-
enum: ["create", "list", "restore", "diff"],
|
|
13
|
-
description: "Action: create (snapshot current state), list (show checkpoints), " +
|
|
14
|
-
"restore (revert to checkpoint), diff (show changes since checkpoint).",
|
|
15
|
-
},
|
|
16
|
-
checkpointId: {
|
|
17
|
-
type: "string",
|
|
18
|
-
description: "Checkpoint ID. Required for restore and diff.",
|
|
19
|
-
},
|
|
20
|
-
message: {
|
|
21
|
-
type: "string",
|
|
22
|
-
description: "Optional descriptive message for the checkpoint.",
|
|
23
|
-
},
|
|
24
|
-
paths: {
|
|
25
|
-
type: "array",
|
|
26
|
-
items: { type: "string" },
|
|
27
|
-
description: "File paths to restore (partial restore). Omit to restore everything.",
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
required: ["action"],
|
|
31
|
-
};
|
|
32
|
-
const COMMIT_HASH_PATTERN = /^[0-9a-fA-F]{4,64}$/;
|
|
33
|
-
export function createCheckpointTool(deps) {
|
|
34
|
-
return {
|
|
35
|
-
name: CHECKPOINT_TOOL_NAME,
|
|
36
|
-
label: "Checkpoint",
|
|
37
|
-
description: "Manage workspace checkpoints (shadow snapshots independent of user's git). " +
|
|
38
|
-
"Create snapshots before risky operations, list history, restore on errors, " +
|
|
39
|
-
"or diff to see what changed. Checkpoints do NOT affect user's .git.",
|
|
40
|
-
parameters: CHECKPOINT_TOOL_SCHEMA,
|
|
41
|
-
execute: async (_toolCallId, params) => {
|
|
42
|
-
switch (params.action) {
|
|
43
|
-
case "create": {
|
|
44
|
-
const r = await deps.createCheckpoint(params.message);
|
|
45
|
-
if (!r.success) {
|
|
46
|
-
return { content: [{ type: "text", text: `Error: ${r.error}` }], details: { type: "checkpoint", error: r.error } };
|
|
47
|
-
}
|
|
48
|
-
return {
|
|
49
|
-
content: [{ type: "text", text: `Checkpoint created: ${r.checkpoint.id}\nMessage: ${r.checkpoint.message}\nFiles: ${r.checkpoint.fileCount}` }],
|
|
50
|
-
details: { type: "checkpoint", action: "create", checkpointId: r.checkpoint.id },
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
case "list": {
|
|
54
|
-
const r = await deps.listCheckpoints();
|
|
55
|
-
if (!r.checkpoints || r.checkpoints.length === 0) {
|
|
56
|
-
return { content: [{ type: "text", text: "No checkpoints available." }], details: { type: "checkpoint", action: "list", count: 0 } };
|
|
57
|
-
}
|
|
58
|
-
const lines = [`Checkpoints (${r.checkpoints.length}):`, ""];
|
|
59
|
-
for (const cp of r.checkpoints) {
|
|
60
|
-
lines.push(`- ${cp.id.slice(0, 8)} [${cp.timestamp}] ${cp.message} (${cp.fileCount} files)`);
|
|
61
|
-
}
|
|
62
|
-
return { content: [{ type: "text", text: lines.join("\n") }], details: { type: "checkpoint", action: "list", count: r.checkpoints.length } };
|
|
63
|
-
}
|
|
64
|
-
case "restore": {
|
|
65
|
-
if (!params.checkpointId) {
|
|
66
|
-
return { content: [{ type: "text", text: "Error: checkpointId required for restore." }], details: { type: "checkpoint", error: "missing_id" } };
|
|
67
|
-
}
|
|
68
|
-
if (!COMMIT_HASH_PATTERN.test(params.checkpointId)) {
|
|
69
|
-
return { content: [{ type: "text", text: "Error: invalid checkpoint ID format." }], details: { type: "checkpoint", error: "invalid_id" } };
|
|
70
|
-
}
|
|
71
|
-
const r = await deps.restoreCheckpoint(params.checkpointId, params.paths);
|
|
72
|
-
if (!r.success) {
|
|
73
|
-
return { content: [{ type: "text", text: `Error: ${r.error}` }], details: { type: "checkpoint", error: r.error } };
|
|
74
|
-
}
|
|
75
|
-
const scope = params.paths ? `(${params.paths.length} files)` : "(full workspace)";
|
|
76
|
-
return {
|
|
77
|
-
content: [{ type: "text", text: `Restored to checkpoint ${params.checkpointId.slice(0, 8)} ${scope}` }],
|
|
78
|
-
details: { type: "checkpoint", action: "restore", checkpointId: params.checkpointId },
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
case "diff": {
|
|
82
|
-
if (!params.checkpointId) {
|
|
83
|
-
return { content: [{ type: "text", text: "Error: checkpointId required for diff." }], details: { type: "checkpoint", error: "missing_id" } };
|
|
84
|
-
}
|
|
85
|
-
if (!COMMIT_HASH_PATTERN.test(params.checkpointId)) {
|
|
86
|
-
return { content: [{ type: "text", text: "Error: invalid checkpoint ID format." }], details: { type: "checkpoint", error: "invalid_id" } };
|
|
87
|
-
}
|
|
88
|
-
const r = await deps.diffCheckpoint(params.checkpointId);
|
|
89
|
-
if (!r.success) {
|
|
90
|
-
return { content: [{ type: "text", text: `Error: ${r.error}` }], details: { type: "checkpoint", error: r.error } };
|
|
91
|
-
}
|
|
92
|
-
return {
|
|
93
|
-
content: [{ type: "text", text: r.diff || "(no changes since checkpoint)" }],
|
|
94
|
-
details: { type: "checkpoint", action: "diff", checkpointId: params.checkpointId },
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
default:
|
|
98
|
-
return { content: [{ type: "text", text: `Error: unknown action "${params.action}".` }], details: { type: "checkpoint", error: "unknown_action" } };
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import type { PortableTool } from "../portable-tool.js";
|
|
2
|
-
export declare const CONFIG_TOOL_NAME: "config";
|
|
3
|
-
export type ConfigAction = "get" | "set" | "list" | "reset";
|
|
4
|
-
export interface ConfigToolParams {
|
|
5
|
-
/** Config action */
|
|
6
|
-
action: ConfigAction;
|
|
7
|
-
/** Setting key path (e.g. "model", "language", "theme") */
|
|
8
|
-
key?: string;
|
|
9
|
-
/** Value to set (for 'set' action) */
|
|
10
|
-
value?: string | boolean | number;
|
|
11
|
-
}
|
|
12
|
-
export declare const CONFIG_TOOL_SCHEMA: {
|
|
13
|
-
readonly type: "object";
|
|
14
|
-
readonly properties: {
|
|
15
|
-
readonly action: {
|
|
16
|
-
readonly type: "string";
|
|
17
|
-
readonly enum: readonly ["get", "set", "list", "reset"];
|
|
18
|
-
readonly description: string;
|
|
19
|
-
};
|
|
20
|
-
readonly key: {
|
|
21
|
-
readonly type: "string";
|
|
22
|
-
readonly description: string;
|
|
23
|
-
};
|
|
24
|
-
readonly value: {
|
|
25
|
-
readonly description: "Value to set. Type depends on the setting. Required for 'set' action.";
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
readonly required: readonly ["action"];
|
|
29
|
-
};
|
|
30
|
-
export interface ConfigSetting {
|
|
31
|
-
key: string;
|
|
32
|
-
value: unknown;
|
|
33
|
-
type: "string" | "boolean" | "number" | "enum";
|
|
34
|
-
description: string;
|
|
35
|
-
options?: string[];
|
|
36
|
-
readOnly?: boolean;
|
|
37
|
-
}
|
|
38
|
-
export interface ConfigResult {
|
|
39
|
-
success: boolean;
|
|
40
|
-
setting?: ConfigSetting;
|
|
41
|
-
settings?: ConfigSetting[];
|
|
42
|
-
previousValue?: unknown;
|
|
43
|
-
error?: string;
|
|
44
|
-
}
|
|
45
|
-
/** Keys that cannot be modified by LLM (security-critical) */
|
|
46
|
-
export declare const CONFIG_READONLY_KEYS: readonly string[];
|
|
47
|
-
/**
|
|
48
|
-
* Host-provided config backend.
|
|
49
|
-
* Manages persistent agent settings with safety guardrails.
|
|
50
|
-
*/
|
|
51
|
-
export interface ConfigToolDeps {
|
|
52
|
-
/** Get a single config value */
|
|
53
|
-
getConfig(key: string): Promise<ConfigResult>;
|
|
54
|
-
/** Set a config value (respects readonly/whitelist) */
|
|
55
|
-
setConfig(key: string, value: unknown): Promise<ConfigResult>;
|
|
56
|
-
/** List all available config settings */
|
|
57
|
-
listConfig(): Promise<ConfigResult>;
|
|
58
|
-
/** Reset a setting to default */
|
|
59
|
-
resetConfig(key: string): Promise<ConfigResult>;
|
|
60
|
-
/** Check if a key is supported/valid */
|
|
61
|
-
isValidKey?(key: string): boolean;
|
|
62
|
-
}
|
|
63
|
-
export declare function createConfigTool(deps: ConfigToolDeps): PortableTool<ConfigToolParams>;
|