jazz-ai 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 +182 -0
- package/dist/cli/commands/auth.d.ts +18 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +128 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/chat-agent.d.ts +18 -0
- package/dist/cli/commands/chat-agent.d.ts.map +1 -0
- package/dist/cli/commands/chat-agent.js +421 -0
- package/dist/cli/commands/chat-agent.js.map +1 -0
- package/dist/cli/commands/edit-agent.d.ts +10 -0
- package/dist/cli/commands/edit-agent.d.ts.map +1 -0
- package/dist/cli/commands/edit-agent.js +310 -0
- package/dist/cli/commands/edit-agent.js.map +1 -0
- package/dist/cli/commands/task-agent.d.ts +126 -0
- package/dist/cli/commands/task-agent.d.ts.map +1 -0
- package/dist/cli/commands/task-agent.js +345 -0
- package/dist/cli/commands/task-agent.js.map +1 -0
- package/dist/core/agent/agent-prompt.d.ts +47 -0
- package/dist/core/agent/agent-prompt.d.ts.map +1 -0
- package/dist/core/agent/agent-prompt.js +146 -0
- package/dist/core/agent/agent-prompt.js.map +1 -0
- package/dist/core/agent/agent-runner.d.ts +63 -0
- package/dist/core/agent/agent-runner.d.ts.map +1 -0
- package/dist/core/agent/agent-runner.js +346 -0
- package/dist/core/agent/agent-runner.js.map +1 -0
- package/dist/core/agent/agent-service.d.ts +164 -0
- package/dist/core/agent/agent-service.d.ts.map +1 -0
- package/dist/core/agent/agent-service.js +463 -0
- package/dist/core/agent/agent-service.js.map +1 -0
- package/dist/core/agent/gmail-agent.d.ts +17 -0
- package/dist/core/agent/gmail-agent.d.ts.map +1 -0
- package/dist/core/agent/gmail-agent.js +191 -0
- package/dist/core/agent/gmail-agent.js.map +1 -0
- package/dist/core/agent/prompts/default/v1.d.ts +2 -0
- package/dist/core/agent/prompts/default/v1.d.ts.map +1 -0
- package/dist/core/agent/prompts/default/v1.js +202 -0
- package/dist/core/agent/prompts/default/v1.js.map +1 -0
- package/dist/core/agent/prompts/default/v2.d.ts +2 -0
- package/dist/core/agent/prompts/default/v2.d.ts.map +1 -0
- package/dist/core/agent/prompts/default/v2.js +72 -0
- package/dist/core/agent/prompts/default/v2.js.map +1 -0
- package/dist/core/agent/prompts/gmail/v1.d.ts +2 -0
- package/dist/core/agent/prompts/gmail/v1.d.ts.map +1 -0
- package/dist/core/agent/prompts/gmail/v1.js +206 -0
- package/dist/core/agent/prompts/gmail/v1.js.map +1 -0
- package/dist/core/agent/prompts/gmail/v2.d.ts +2 -0
- package/dist/core/agent/prompts/gmail/v2.d.ts.map +1 -0
- package/dist/core/agent/prompts/gmail/v2.js +59 -0
- package/dist/core/agent/prompts/gmail/v2.js.map +1 -0
- package/dist/core/agent/tools/base-tool.d.ts +161 -0
- package/dist/core/agent/tools/base-tool.d.ts.map +1 -0
- package/dist/core/agent/tools/base-tool.js +153 -0
- package/dist/core/agent/tools/base-tool.js.map +1 -0
- package/dist/core/agent/tools/fs-tools.d.ts +21 -0
- package/dist/core/agent/tools/fs-tools.d.ts.map +1 -0
- package/dist/core/agent/tools/fs-tools.js +1210 -0
- package/dist/core/agent/tools/fs-tools.js.map +1 -0
- package/dist/core/agent/tools/git-tools.d.ts +63 -0
- package/dist/core/agent/tools/git-tools.d.ts.map +1 -0
- package/dist/core/agent/tools/git-tools.js +600 -0
- package/dist/core/agent/tools/git-tools.js.map +1 -0
- package/dist/core/agent/tools/gmail-tools.d.ts +22 -0
- package/dist/core/agent/tools/gmail-tools.d.ts.map +1 -0
- package/dist/core/agent/tools/gmail-tools.js +779 -0
- package/dist/core/agent/tools/gmail-tools.js.map +1 -0
- package/dist/core/agent/tools/register-tools.d.ts +13 -0
- package/dist/core/agent/tools/register-tools.d.ts.map +1 -0
- package/dist/core/agent/tools/register-tools.js +169 -0
- package/dist/core/agent/tools/register-tools.js.map +1 -0
- package/dist/core/agent/tools/shell-tools.d.ts +19 -0
- package/dist/core/agent/tools/shell-tools.d.ts.map +1 -0
- package/dist/core/agent/tools/shell-tools.js +367 -0
- package/dist/core/agent/tools/shell-tools.js.map +1 -0
- package/dist/core/agent/tools/tool-registry.d.ts +62 -0
- package/dist/core/agent/tools/tool-registry.d.ts.map +1 -0
- package/dist/core/agent/tools/tool-registry.js +187 -0
- package/dist/core/agent/tools/tool-registry.js.map +1 -0
- package/dist/core/agent/tools/web-search-tools.d.ts +39 -0
- package/dist/core/agent/tools/web-search-tools.d.ts.map +1 -0
- package/dist/core/agent/tools/web-search-tools.js +220 -0
- package/dist/core/agent/tools/web-search-tools.js.map +1 -0
- package/dist/core/types/errors.d.ts +300 -0
- package/dist/core/types/errors.d.ts.map +1 -0
- package/dist/core/types/errors.js +115 -0
- package/dist/core/types/errors.js.map +1 -0
- package/dist/core/types/index.d.ts +208 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +30 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/utils/error-handler.d.ts +114 -0
- package/dist/core/utils/error-handler.d.ts.map +1 -0
- package/dist/core/utils/error-handler.js +551 -0
- package/dist/core/utils/error-handler.js.map +1 -0
- package/dist/core/utils/markdown-renderer.d.ts +52 -0
- package/dist/core/utils/markdown-renderer.d.ts.map +1 -0
- package/dist/core/utils/markdown-renderer.js +134 -0
- package/dist/core/utils/markdown-renderer.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +255 -0
- package/dist/main.js.map +1 -0
- package/dist/services/config.d.ts +29 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +204 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/gmail.d.ts +197 -0
- package/dist/services/gmail.d.ts.map +1 -0
- package/dist/services/gmail.js +592 -0
- package/dist/services/gmail.js.map +1 -0
- package/dist/services/llm/ai-sdk-service.d.ts +5 -0
- package/dist/services/llm/ai-sdk-service.d.ts.map +1 -0
- package/dist/services/llm/ai-sdk-service.js +326 -0
- package/dist/services/llm/ai-sdk-service.js.map +1 -0
- package/dist/services/llm/context-manager.d.ts +51 -0
- package/dist/services/llm/context-manager.d.ts.map +1 -0
- package/dist/services/llm/context-manager.js +269 -0
- package/dist/services/llm/context-manager.js.map +1 -0
- package/dist/services/llm/types.d.ts +114 -0
- package/dist/services/llm/types.d.ts.map +1 -0
- package/dist/services/llm/types.js +51 -0
- package/dist/services/llm/types.js.map +1 -0
- package/dist/services/logger.d.ts +28 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +267 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/shell.d.ts +37 -0
- package/dist/services/shell.d.ts.map +1 -0
- package/dist/services/shell.js +197 -0
- package/dist/services/shell.js.map +1 -0
- package/dist/services/storage/file.d.ts +37 -0
- package/dist/services/storage/file.d.ts.map +1 -0
- package/dist/services/storage/file.js +221 -0
- package/dist/services/storage/file.js.map +1 -0
- package/dist/services/storage/inMemory.d.ts +25 -0
- package/dist/services/storage/inMemory.d.ts.map +1 -0
- package/dist/services/storage/inMemory.js +106 -0
- package/dist/services/storage/inMemory.js.map +1 -0
- package/dist/services/storage/service.d.ts +26 -0
- package/dist/services/storage/service.d.ts.map +1 -0
- package/dist/services/storage/service.js +48 -0
- package/dist/services/storage/service.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-tools.js","sourceRoot":"","sources":["../../../../src/core/agent/tools/shell-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
|
+
import type z from "zod";
|
|
3
|
+
import type { ConfigService } from "../../../services/config";
|
|
4
|
+
import { type ToolDefinition } from "../../../services/llm/types";
|
|
5
|
+
import { type LoggerService } from "../../../services/logger";
|
|
6
|
+
/**
|
|
7
|
+
* Tool registry for managing agent tools
|
|
8
|
+
*/
|
|
9
|
+
export interface ToolExecutionContext {
|
|
10
|
+
readonly agentId: string;
|
|
11
|
+
readonly conversationId?: string;
|
|
12
|
+
readonly userId?: string;
|
|
13
|
+
readonly [key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
export interface ToolExecutionResult {
|
|
16
|
+
readonly success: boolean;
|
|
17
|
+
readonly result: unknown;
|
|
18
|
+
readonly error?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface Tool<R = never> {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly description: string;
|
|
23
|
+
readonly parameters: z.ZodTypeAny;
|
|
24
|
+
/** If true, this tool is hidden from UI listings (but still usable programmatically). */
|
|
25
|
+
readonly hidden: boolean;
|
|
26
|
+
readonly execute: (args: Record<string, unknown>, context: ToolExecutionContext) => Effect.Effect<ToolExecutionResult, Error, R>;
|
|
27
|
+
/** Optional function to create a summary of the tool execution result */
|
|
28
|
+
readonly createSummary: ((result: ToolExecutionResult) => string | undefined) | undefined;
|
|
29
|
+
}
|
|
30
|
+
export interface ToolRegistry {
|
|
31
|
+
readonly registerTool: (tool: Tool<unknown>, category?: string) => Effect.Effect<void, never>;
|
|
32
|
+
readonly registerForCategory: (category: string) => (tool: Tool<unknown>) => Effect.Effect<void, never>;
|
|
33
|
+
readonly getTool: (name: string) => Effect.Effect<Tool<unknown>, Error>;
|
|
34
|
+
readonly listTools: () => Effect.Effect<readonly string[], never>;
|
|
35
|
+
readonly getToolDefinitions: () => Effect.Effect<readonly ToolDefinition[], never>;
|
|
36
|
+
readonly listToolsByCategory: () => Effect.Effect<Record<string, readonly string[]>, never>;
|
|
37
|
+
readonly getToolsInCategory: (category: string) => Effect.Effect<readonly string[], never>;
|
|
38
|
+
readonly listCategories: () => Effect.Effect<readonly string[], never>;
|
|
39
|
+
readonly executeTool: (name: string, args: Record<string, unknown>, context: ToolExecutionContext) => Effect.Effect<ToolExecutionResult, Error, ToolRegistry | LoggerService | ConfigService>;
|
|
40
|
+
}
|
|
41
|
+
export declare const ToolRegistryTag: Context.Tag<ToolRegistry, ToolRegistry>;
|
|
42
|
+
export declare function createToolRegistryLayer(): Layer.Layer<ToolRegistry>;
|
|
43
|
+
export declare function registerTool(tool: Tool<unknown>): Effect.Effect<void, never, ToolRegistry>;
|
|
44
|
+
/**
|
|
45
|
+
* Create a category-scoped tool registration function
|
|
46
|
+
*
|
|
47
|
+
* Returns a function that registers tools under a specific category.
|
|
48
|
+
* This provides a clean API for registering multiple tools in the same category
|
|
49
|
+
* without having to pass the category to each registration call.
|
|
50
|
+
*
|
|
51
|
+
* @param category - The category name for the tools
|
|
52
|
+
* @returns A function that registers tools under the specified category
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const registerTool = yield* registerForCategory("Email");
|
|
57
|
+
* yield* registerTool(createListEmailsTool());
|
|
58
|
+
* yield* registerTool(createSendEmailTool());
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function registerForCategory(category: string): Effect.Effect<(tool: Tool<unknown>) => Effect.Effect<void, never>, never, ToolRegistry>;
|
|
62
|
+
//# sourceMappingURL=tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../../src/core/agent/tools/tool-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToolRegistryTag = void 0;
|
|
4
|
+
exports.createToolRegistryLayer = createToolRegistryLayer;
|
|
5
|
+
exports.registerTool = registerTool;
|
|
6
|
+
exports.registerForCategory = registerForCategory;
|
|
7
|
+
const effect_1 = require("effect");
|
|
8
|
+
const logger_1 = require("../../../services/logger");
|
|
9
|
+
class DefaultToolRegistry {
|
|
10
|
+
tools;
|
|
11
|
+
toolCategories;
|
|
12
|
+
constructor() {
|
|
13
|
+
this.tools = new Map();
|
|
14
|
+
this.toolCategories = new Map();
|
|
15
|
+
}
|
|
16
|
+
registerTool(tool, category) {
|
|
17
|
+
return effect_1.Effect.sync(() => {
|
|
18
|
+
this.tools.set(tool.name, tool);
|
|
19
|
+
if (category) {
|
|
20
|
+
this.toolCategories.set(tool.name, category);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
registerForCategory(category) {
|
|
25
|
+
return (tool) => this.registerTool(tool, category);
|
|
26
|
+
}
|
|
27
|
+
getTool(name) {
|
|
28
|
+
return effect_1.Effect.try({
|
|
29
|
+
try: () => {
|
|
30
|
+
const tool = this.tools.get(name);
|
|
31
|
+
if (!tool) {
|
|
32
|
+
throw new Error(`Tool not found: ${name}`);
|
|
33
|
+
}
|
|
34
|
+
return tool;
|
|
35
|
+
},
|
|
36
|
+
catch: (error) => (error instanceof Error ? error : new Error(String(error))),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
listTools() {
|
|
40
|
+
return effect_1.Effect.sync(() => {
|
|
41
|
+
const names = [];
|
|
42
|
+
this.tools.forEach((tool) => {
|
|
43
|
+
if (!tool.hidden)
|
|
44
|
+
names.push(tool.name);
|
|
45
|
+
});
|
|
46
|
+
return names;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
getToolDefinitions() {
|
|
50
|
+
return effect_1.Effect.sync(() => {
|
|
51
|
+
const definitions = [];
|
|
52
|
+
this.tools.forEach((tool) => {
|
|
53
|
+
definitions.push({
|
|
54
|
+
type: "function",
|
|
55
|
+
function: {
|
|
56
|
+
name: tool.name,
|
|
57
|
+
description: tool.description,
|
|
58
|
+
parameters: tool.parameters,
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
return definitions;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
listToolsByCategory() {
|
|
66
|
+
return effect_1.Effect.sync(() => {
|
|
67
|
+
const categories = {};
|
|
68
|
+
this.tools.forEach((tool, toolName) => {
|
|
69
|
+
if (!tool.hidden) {
|
|
70
|
+
const category = this.toolCategories.get(toolName) || "Other";
|
|
71
|
+
if (!categories[category]) {
|
|
72
|
+
categories[category] = [];
|
|
73
|
+
}
|
|
74
|
+
categories[category].push(toolName);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// Sort tool names within each category
|
|
78
|
+
Object.keys(categories).forEach((category) => {
|
|
79
|
+
const tools = categories[category];
|
|
80
|
+
if (tools) {
|
|
81
|
+
tools.sort();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
return categories;
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
getToolsInCategory(category) {
|
|
88
|
+
return effect_1.Effect.sync(() => {
|
|
89
|
+
const tools = [];
|
|
90
|
+
this.tools.forEach((tool, toolName) => {
|
|
91
|
+
if (!tool.hidden && this.toolCategories.get(toolName) === category) {
|
|
92
|
+
tools.push(toolName);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return tools.sort();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
listCategories() {
|
|
99
|
+
return effect_1.Effect.sync(() => {
|
|
100
|
+
const categories = new Set();
|
|
101
|
+
this.tools.forEach((tool, toolName) => {
|
|
102
|
+
if (!tool.hidden) {
|
|
103
|
+
const category = this.toolCategories.get(toolName) || "Other";
|
|
104
|
+
categories.add(category);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
return Array.from(categories).sort();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
executeTool(name, args, context) {
|
|
111
|
+
return effect_1.Effect.gen(function* () {
|
|
112
|
+
const start = Date.now();
|
|
113
|
+
const tool = yield* this.getTool(name);
|
|
114
|
+
// Log tool execution start
|
|
115
|
+
yield* (0, logger_1.logToolExecutionStart)(name, context.agentId, context.conversationId).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.void));
|
|
116
|
+
try {
|
|
117
|
+
const exec = tool.execute;
|
|
118
|
+
const result = yield* exec(args, context);
|
|
119
|
+
const durationMs = Date.now() - start;
|
|
120
|
+
if (result.success) {
|
|
121
|
+
// Create a summary of the result for better logging
|
|
122
|
+
const resultSummary = tool.createSummary?.(result);
|
|
123
|
+
// Log successful execution with improved formatting
|
|
124
|
+
yield* (0, logger_1.logToolExecutionSuccess)(name, context.agentId, durationMs, context.conversationId, resultSummary).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.void));
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// If this is an approval-required response, log as warning with special label
|
|
128
|
+
const resultObj = result.result;
|
|
129
|
+
const isApproval = resultObj?.approvalRequired === true;
|
|
130
|
+
if (isApproval) {
|
|
131
|
+
const approvalMsg = resultObj?.message || result.error || "Approval required";
|
|
132
|
+
yield* (0, logger_1.logToolExecutionApproval)(name, context.agentId, durationMs, approvalMsg, context.conversationId).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.void));
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
const errorMessage = result.error || "Tool returned success=false";
|
|
136
|
+
yield* (0, logger_1.logToolExecutionError)(name, context.agentId, durationMs, errorMessage, context.conversationId).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.void));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
const durationMs = Date.now() - start;
|
|
143
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
144
|
+
// Log error with improved formatting
|
|
145
|
+
yield* (0, logger_1.logToolExecutionError)(name, context.agentId, durationMs, errorMessage, context.conversationId).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.void));
|
|
146
|
+
throw err;
|
|
147
|
+
}
|
|
148
|
+
}.bind(this));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Create a service tag for dependency injection
|
|
152
|
+
exports.ToolRegistryTag = effect_1.Context.GenericTag("ToolRegistry");
|
|
153
|
+
// Create a layer for providing the tool registry
|
|
154
|
+
function createToolRegistryLayer() {
|
|
155
|
+
return effect_1.Layer.succeed(exports.ToolRegistryTag, new DefaultToolRegistry());
|
|
156
|
+
}
|
|
157
|
+
// Helper functions for common tool registry operations
|
|
158
|
+
function registerTool(tool) {
|
|
159
|
+
return effect_1.Effect.gen(function* () {
|
|
160
|
+
const registry = yield* exports.ToolRegistryTag;
|
|
161
|
+
return yield* registry.registerTool(tool);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Create a category-scoped tool registration function
|
|
166
|
+
*
|
|
167
|
+
* Returns a function that registers tools under a specific category.
|
|
168
|
+
* This provides a clean API for registering multiple tools in the same category
|
|
169
|
+
* without having to pass the category to each registration call.
|
|
170
|
+
*
|
|
171
|
+
* @param category - The category name for the tools
|
|
172
|
+
* @returns A function that registers tools under the specified category
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* const registerTool = yield* registerForCategory("Email");
|
|
177
|
+
* yield* registerTool(createListEmailsTool());
|
|
178
|
+
* yield* registerTool(createSendEmailTool());
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
function registerForCategory(category) {
|
|
182
|
+
return effect_1.Effect.gen(function* () {
|
|
183
|
+
const registry = yield* exports.ToolRegistryTag;
|
|
184
|
+
return registry.registerForCategory(category);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../../../src/core/agent/tools/tool-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type SearchDepth, type SearchOutputType } from "linkup-sdk";
|
|
2
|
+
import { type ConfigService } from "../../../services/config";
|
|
3
|
+
import { defineTool } from "./base-tool";
|
|
4
|
+
/**
|
|
5
|
+
* Unified web search tool that provides fallback from Linkup to web search options
|
|
6
|
+
* This tool maintains a consistent interface while switching between search providers
|
|
7
|
+
*/
|
|
8
|
+
export interface WebSearchArgs extends Record<string, unknown> {
|
|
9
|
+
readonly query: string;
|
|
10
|
+
readonly depth?: SearchDepth;
|
|
11
|
+
readonly outputType?: SearchOutputType;
|
|
12
|
+
readonly includeImages?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface WebSearchResult {
|
|
15
|
+
readonly answer?: string;
|
|
16
|
+
readonly results: readonly WebSearchItem[];
|
|
17
|
+
readonly totalResults: number;
|
|
18
|
+
readonly query: string;
|
|
19
|
+
readonly timestamp: string;
|
|
20
|
+
readonly provider: "linkup" | "web_search";
|
|
21
|
+
}
|
|
22
|
+
export interface WebSearchItem {
|
|
23
|
+
readonly title: string;
|
|
24
|
+
readonly url: string;
|
|
25
|
+
readonly snippet: string;
|
|
26
|
+
readonly publishedDate?: string;
|
|
27
|
+
readonly source?: string;
|
|
28
|
+
readonly metadata?: Record<string, unknown>;
|
|
29
|
+
}
|
|
30
|
+
export interface LinkupConfig {
|
|
31
|
+
readonly apiKey: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a unified web search tool that tries Linkup first, then falls back to web search options
|
|
35
|
+
*
|
|
36
|
+
* @returns A tool that can search the web using Linkup or web search fallback
|
|
37
|
+
*/
|
|
38
|
+
export declare function createWebSearchTool(): ReturnType<typeof defineTool<ConfigService, WebSearchArgs>>;
|
|
39
|
+
//# sourceMappingURL=web-search-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-search-tools.d.ts","sourceRoot":"","sources":["../../../../src/core/agent/tools/web-search-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EAGtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;GAGG;AAEH,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,CAAC,OAAO,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CA4FjG"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createWebSearchTool = createWebSearchTool;
|
|
4
|
+
const effect_1 = require("effect");
|
|
5
|
+
const linkup_sdk_1 = require("linkup-sdk");
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
const config_1 = require("../../../services/config");
|
|
8
|
+
const base_tool_1 = require("./base-tool");
|
|
9
|
+
/**
|
|
10
|
+
* Create a unified web search tool that tries Linkup first, then falls back to web search options
|
|
11
|
+
*
|
|
12
|
+
* @returns A tool that can search the web using Linkup or web search fallback
|
|
13
|
+
*/
|
|
14
|
+
function createWebSearchTool() {
|
|
15
|
+
return (0, base_tool_1.defineTool)({
|
|
16
|
+
name: "web_search",
|
|
17
|
+
description: "Search the web for current information. Uses Linkup search engine by default. Provides high-quality, factual search results to enrich AI responses with current information from the internet.",
|
|
18
|
+
parameters: zod_1.z
|
|
19
|
+
.object({
|
|
20
|
+
query: zod_1.z
|
|
21
|
+
.string()
|
|
22
|
+
.min(1, "query cannot be empty")
|
|
23
|
+
.describe("The search query to execute. Be specific and detailed for better results."),
|
|
24
|
+
depth: zod_1.z
|
|
25
|
+
.enum(["standard", "deep"])
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("Search depth - 'standard' for quick results, 'deep' for comprehensive search (default: 'standard')"),
|
|
28
|
+
outputType: zod_1.z
|
|
29
|
+
.enum(["sourcedAnswer", "searchResults", "structured"])
|
|
30
|
+
.optional()
|
|
31
|
+
.describe("Output format - 'sourcedAnswer' for AI-friendly format, 'searchResults' for raw results, 'structured' for structured data (default: 'sourcedAnswer')"),
|
|
32
|
+
includeImages: zod_1.z
|
|
33
|
+
.boolean()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("Whether to include images in search results (default: false)"),
|
|
36
|
+
})
|
|
37
|
+
.strict(),
|
|
38
|
+
validate: (args) => {
|
|
39
|
+
const result = zod_1.z
|
|
40
|
+
.object({
|
|
41
|
+
query: zod_1.z.string().min(1),
|
|
42
|
+
depth: zod_1.z.enum(["standard", "deep"]).optional(),
|
|
43
|
+
outputType: zod_1.z.enum(["sourcedAnswer", "searchResults", "structured"]).optional(),
|
|
44
|
+
includeImages: zod_1.z.boolean().optional(),
|
|
45
|
+
})
|
|
46
|
+
.strict().safeParse(args);
|
|
47
|
+
if (!result.success) {
|
|
48
|
+
return { valid: false, errors: result.error.issues.map((i) => i.message) };
|
|
49
|
+
}
|
|
50
|
+
return { valid: true, value: result.data };
|
|
51
|
+
},
|
|
52
|
+
handler: function webSearchHandler(args, context) {
|
|
53
|
+
return effect_1.Effect.gen(function* () {
|
|
54
|
+
const config = yield* config_1.AgentConfigService;
|
|
55
|
+
// Try Linkup first
|
|
56
|
+
const linkupResult = yield* tryLinkupSearch(args, config).pipe(effect_1.Effect.catchAll((error) => {
|
|
57
|
+
// Log the error but don't fail - we'll fall back to web search
|
|
58
|
+
console.warn(`Linkup search failed, falling back to web search: ${error.message}`);
|
|
59
|
+
return effect_1.Effect.succeed(null);
|
|
60
|
+
}));
|
|
61
|
+
if (linkupResult) {
|
|
62
|
+
return {
|
|
63
|
+
success: true,
|
|
64
|
+
result: linkupResult,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Fallback to web search options
|
|
68
|
+
const webSearchResult = yield* performWebSearchFallback(args, context);
|
|
69
|
+
return {
|
|
70
|
+
success: true,
|
|
71
|
+
result: webSearchResult,
|
|
72
|
+
};
|
|
73
|
+
}).pipe(effect_1.Effect.catchAll((error) => effect_1.Effect.succeed({
|
|
74
|
+
success: false,
|
|
75
|
+
result: null,
|
|
76
|
+
error: error.message,
|
|
77
|
+
})));
|
|
78
|
+
},
|
|
79
|
+
createSummary: function createSearchSummary(result) {
|
|
80
|
+
if (!result.success || !result.result)
|
|
81
|
+
return undefined;
|
|
82
|
+
const searchResult = result.result;
|
|
83
|
+
return `Found ${searchResult.totalResults} results for "${searchResult.query}" using ${searchResult.provider}`;
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Try to perform a Linkup search
|
|
89
|
+
*/
|
|
90
|
+
function tryLinkupSearch(args, config) {
|
|
91
|
+
return effect_1.Effect.gen(function* () {
|
|
92
|
+
// Get Linkup configuration
|
|
93
|
+
const linkupConfig = yield* getLinkupConfig(config);
|
|
94
|
+
// Create Linkup client
|
|
95
|
+
const client = new linkup_sdk_1.LinkupClient({
|
|
96
|
+
apiKey: linkupConfig.apiKey,
|
|
97
|
+
});
|
|
98
|
+
// Prepare search parameters
|
|
99
|
+
const searchParams = {
|
|
100
|
+
query: args.query,
|
|
101
|
+
depth: args.depth ?? "standard",
|
|
102
|
+
outputType: args.outputType ?? "sourcedAnswer",
|
|
103
|
+
includeImages: args.includeImages ?? false,
|
|
104
|
+
};
|
|
105
|
+
const searchResult = yield* performLinkupSearch(client, searchParams);
|
|
106
|
+
return {
|
|
107
|
+
...(searchResult.answer && { answer: searchResult.answer }),
|
|
108
|
+
results: searchResult.results,
|
|
109
|
+
totalResults: searchResult.totalResults,
|
|
110
|
+
query: searchResult.query,
|
|
111
|
+
timestamp: searchResult.timestamp,
|
|
112
|
+
provider: "linkup",
|
|
113
|
+
};
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Perform web search fallback using web_search_options
|
|
118
|
+
* This function returns a placeholder result since the actual web search
|
|
119
|
+
* is handled by the LLM service with web_search_options
|
|
120
|
+
*/
|
|
121
|
+
function performWebSearchFallback(args, _context) {
|
|
122
|
+
// Return a placeholder result indicating web search fallback
|
|
123
|
+
// The actual web search is handled by the LLM service with web_search_options
|
|
124
|
+
const fallbackResult = {
|
|
125
|
+
results: [
|
|
126
|
+
{
|
|
127
|
+
title: "Web Search Fallback",
|
|
128
|
+
url: "https://example.com",
|
|
129
|
+
snippet: `Web search fallback activated for query: "${args.query}". This indicates that Linkup search was unavailable and the system fell back to web search options.`,
|
|
130
|
+
source: "web_search_fallback",
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
totalResults: 1,
|
|
134
|
+
query: args.query,
|
|
135
|
+
timestamp: new Date().toISOString(),
|
|
136
|
+
provider: "web_search",
|
|
137
|
+
};
|
|
138
|
+
return effect_1.Effect.succeed(fallbackResult);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get Linkup configuration from the config service
|
|
142
|
+
*/
|
|
143
|
+
function getLinkupConfig(config) {
|
|
144
|
+
return effect_1.Effect.gen(function* () {
|
|
145
|
+
const apiKey = yield* config
|
|
146
|
+
.getOrFail("linkup.apiKey")
|
|
147
|
+
.pipe(effect_1.Effect.catchAll(() => effect_1.Effect.fail(new Error("Linkup API key is required. Please set linkup.apiKey in your configuration."))));
|
|
148
|
+
if (!apiKey || typeof apiKey !== "string") {
|
|
149
|
+
return yield* effect_1.Effect.fail(new Error("Linkup API key is required. Please set linkup.apiKey in your configuration."));
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
apiKey: apiKey,
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function performLinkupSearch(client, params) {
|
|
157
|
+
return effect_1.Effect.tryPromise({
|
|
158
|
+
try: async () => {
|
|
159
|
+
const response = await client.search({
|
|
160
|
+
query: params.query,
|
|
161
|
+
depth: params.depth,
|
|
162
|
+
outputType: params.outputType,
|
|
163
|
+
includeImages: params.includeImages,
|
|
164
|
+
});
|
|
165
|
+
let searchResult;
|
|
166
|
+
if (params.outputType === "sourcedAnswer") {
|
|
167
|
+
const sourcedAnswer = response;
|
|
168
|
+
searchResult = {
|
|
169
|
+
answer: sourcedAnswer.answer,
|
|
170
|
+
results: sourcedAnswer.sources.map((source) => {
|
|
171
|
+
if ("snippet" in source) {
|
|
172
|
+
return {
|
|
173
|
+
title: source.name || "",
|
|
174
|
+
url: source.url || "",
|
|
175
|
+
snippet: source.snippet || "",
|
|
176
|
+
source: source.name,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
return {
|
|
181
|
+
title: source.name || "",
|
|
182
|
+
url: source.url || "",
|
|
183
|
+
snippet: source.type === "text" ? source.content : "",
|
|
184
|
+
source: source.name,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}),
|
|
188
|
+
totalResults: sourcedAnswer.sources.length,
|
|
189
|
+
query: params.query,
|
|
190
|
+
timestamp: new Date().toISOString(),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
else if (params.outputType === "searchResults") {
|
|
194
|
+
const searchResults = response;
|
|
195
|
+
searchResult = {
|
|
196
|
+
results: searchResults.results.map((result) => ({
|
|
197
|
+
title: result.name || "",
|
|
198
|
+
url: result.url || "",
|
|
199
|
+
snippet: result.type === "text" ? result.content : "",
|
|
200
|
+
source: result.name,
|
|
201
|
+
})),
|
|
202
|
+
totalResults: searchResults.results.length,
|
|
203
|
+
query: params.query,
|
|
204
|
+
timestamp: new Date().toISOString(),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
return {
|
|
209
|
+
results: [],
|
|
210
|
+
totalResults: 0,
|
|
211
|
+
query: params.query,
|
|
212
|
+
timestamp: new Date().toISOString(),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
return searchResult;
|
|
216
|
+
},
|
|
217
|
+
catch: (error) => new Error(`Linkup search failed: ${error instanceof Error ? error.message : String(error)}`),
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=web-search-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-search-tools.js","sourceRoot":"","sources":["../../../../src/core/agent/tools/web-search-tools.ts"],"names":[],"mappings":"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"}
|