@falai/agent 1.1.3 → 1.2.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 +9 -0
- package/dist/cjs/core/Agent.d.ts +17 -1
- package/dist/cjs/core/Agent.d.ts.map +1 -1
- package/dist/cjs/core/Agent.js +47 -0
- package/dist/cjs/core/Agent.js.map +1 -1
- package/dist/cjs/core/BatchPromptBuilder.d.ts +3 -0
- package/dist/cjs/core/BatchPromptBuilder.d.ts.map +1 -1
- package/dist/cjs/core/BatchPromptBuilder.js +4 -1
- package/dist/cjs/core/BatchPromptBuilder.js.map +1 -1
- package/dist/cjs/core/CompactionEngine.d.ts +65 -0
- package/dist/cjs/core/CompactionEngine.d.ts.map +1 -0
- package/dist/cjs/core/CompactionEngine.js +251 -0
- package/dist/cjs/core/CompactionEngine.js.map +1 -0
- package/dist/cjs/core/PromptComposer.d.ts +8 -1
- package/dist/cjs/core/PromptComposer.d.ts.map +1 -1
- package/dist/cjs/core/PromptComposer.js +238 -126
- package/dist/cjs/core/PromptComposer.js.map +1 -1
- package/dist/cjs/core/PromptSectionCache.d.ts +57 -0
- package/dist/cjs/core/PromptSectionCache.d.ts.map +1 -0
- package/dist/cjs/core/PromptSectionCache.js +108 -0
- package/dist/cjs/core/PromptSectionCache.js.map +1 -0
- package/dist/cjs/core/ResponseEngine.d.ts +3 -0
- package/dist/cjs/core/ResponseEngine.d.ts.map +1 -1
- package/dist/cjs/core/ResponseEngine.js +10 -6
- package/dist/cjs/core/ResponseEngine.js.map +1 -1
- package/dist/cjs/core/ResponseModal.d.ts.map +1 -1
- package/dist/cjs/core/ResponseModal.js +75 -16
- package/dist/cjs/core/ResponseModal.js.map +1 -1
- package/dist/cjs/core/RoutingEngine.d.ts +10 -0
- package/dist/cjs/core/RoutingEngine.d.ts.map +1 -1
- package/dist/cjs/core/RoutingEngine.js +3 -2
- package/dist/cjs/core/RoutingEngine.js.map +1 -1
- package/dist/cjs/core/SessionManager.d.ts.map +1 -1
- package/dist/cjs/core/SessionManager.js +20 -0
- package/dist/cjs/core/SessionManager.js.map +1 -1
- package/dist/cjs/core/StreamingToolExecutor.d.ts +142 -0
- package/dist/cjs/core/StreamingToolExecutor.d.ts.map +1 -0
- package/dist/cjs/core/StreamingToolExecutor.js +455 -0
- package/dist/cjs/core/StreamingToolExecutor.js.map +1 -0
- package/dist/cjs/core/ToolManager.d.ts +18 -1
- package/dist/cjs/core/ToolManager.d.ts.map +1 -1
- package/dist/cjs/core/ToolManager.js +91 -0
- package/dist/cjs/core/ToolManager.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/cjs/providers/AnthropicProvider.js +8 -7
- package/dist/cjs/providers/AnthropicProvider.js.map +1 -1
- package/dist/cjs/providers/GeminiProvider.d.ts +25 -0
- package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/cjs/providers/GeminiProvider.js +79 -51
- package/dist/cjs/providers/GeminiProvider.js.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenAIProvider.js +14 -6
- package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/cjs/providers/OpenRouterProvider.js +7 -6
- package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
- package/dist/cjs/types/agent.d.ts +44 -0
- package/dist/cjs/types/agent.d.ts.map +1 -1
- package/dist/cjs/types/agent.js.map +1 -1
- package/dist/cjs/types/compaction.d.ts +50 -0
- package/dist/cjs/types/compaction.d.ts.map +1 -0
- package/dist/cjs/types/compaction.js +6 -0
- package/dist/cjs/types/compaction.js.map +1 -0
- package/dist/cjs/types/index.d.ts +4 -2
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/tool.d.ts +84 -0
- package/dist/cjs/types/tool.d.ts.map +1 -1
- package/dist/core/Agent.d.ts +17 -1
- package/dist/core/Agent.d.ts.map +1 -1
- package/dist/core/Agent.js +47 -0
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/BatchPromptBuilder.d.ts +3 -0
- package/dist/core/BatchPromptBuilder.d.ts.map +1 -1
- package/dist/core/BatchPromptBuilder.js +4 -1
- package/dist/core/BatchPromptBuilder.js.map +1 -1
- package/dist/core/CompactionEngine.d.ts +65 -0
- package/dist/core/CompactionEngine.d.ts.map +1 -0
- package/dist/core/CompactionEngine.js +244 -0
- package/dist/core/CompactionEngine.js.map +1 -0
- package/dist/core/PromptComposer.d.ts +8 -1
- package/dist/core/PromptComposer.d.ts.map +1 -1
- package/dist/core/PromptComposer.js +238 -126
- package/dist/core/PromptComposer.js.map +1 -1
- package/dist/core/PromptSectionCache.d.ts +57 -0
- package/dist/core/PromptSectionCache.d.ts.map +1 -0
- package/dist/core/PromptSectionCache.js +104 -0
- package/dist/core/PromptSectionCache.js.map +1 -0
- package/dist/core/ResponseEngine.d.ts +3 -0
- package/dist/core/ResponseEngine.d.ts.map +1 -1
- package/dist/core/ResponseEngine.js +10 -6
- package/dist/core/ResponseEngine.js.map +1 -1
- package/dist/core/ResponseModal.d.ts.map +1 -1
- package/dist/core/ResponseModal.js +75 -16
- package/dist/core/ResponseModal.js.map +1 -1
- package/dist/core/RoutingEngine.d.ts +10 -0
- package/dist/core/RoutingEngine.d.ts.map +1 -1
- package/dist/core/RoutingEngine.js +3 -2
- package/dist/core/RoutingEngine.js.map +1 -1
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +17 -0
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/StreamingToolExecutor.d.ts +142 -0
- package/dist/core/StreamingToolExecutor.d.ts.map +1 -0
- package/dist/core/StreamingToolExecutor.js +448 -0
- package/dist/core/StreamingToolExecutor.js.map +1 -0
- package/dist/core/ToolManager.d.ts +18 -1
- package/dist/core/ToolManager.d.ts.map +1 -1
- package/dist/core/ToolManager.js +91 -0
- package/dist/core/ToolManager.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/AnthropicProvider.js +8 -7
- package/dist/providers/AnthropicProvider.js.map +1 -1
- package/dist/providers/GeminiProvider.d.ts +25 -0
- package/dist/providers/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/GeminiProvider.js +79 -51
- package/dist/providers/GeminiProvider.js.map +1 -1
- package/dist/providers/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/OpenAIProvider.js +14 -6
- package/dist/providers/OpenAIProvider.js.map +1 -1
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/OpenRouterProvider.js +7 -6
- package/dist/providers/OpenRouterProvider.js.map +1 -1
- package/dist/types/agent.d.ts +44 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js.map +1 -1
- package/dist/types/compaction.d.ts +50 -0
- package/dist/types/compaction.d.ts.map +1 -0
- package/dist/types/compaction.js +5 -0
- package/dist/types/compaction.js.map +1 -0
- package/dist/types/index.d.ts +4 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/tool.d.ts +84 -0
- package/dist/types/tool.d.ts.map +1 -1
- package/docs/api/overview.md +140 -0
- package/docs/core/tools/enhanced-tool.md +186 -0
- package/docs/core/tools/streaming-execution.md +161 -0
- package/docs/guides/context-compaction.md +96 -0
- package/docs/guides/prompt-optimization.md +164 -0
- package/examples/advanced-patterns/context-compaction.ts +223 -0
- package/examples/advanced-patterns/streaming-responses.ts +85 -7
- package/examples/tools/enhanced-tool-metadata.ts +268 -0
- package/examples/tools/streaming-tool-execution.ts +283 -0
- package/package.json +1 -1
- package/src/core/Agent.ts +58 -2
- package/src/core/BatchPromptBuilder.ts +4 -1
- package/src/core/CompactionEngine.ts +318 -0
- package/src/core/PromptComposer.ts +259 -156
- package/src/core/PromptSectionCache.ts +136 -0
- package/src/core/ResponseEngine.ts +9 -6
- package/src/core/ResponseModal.ts +77 -16
- package/src/core/RoutingEngine.ts +13 -2
- package/src/core/SessionManager.ts +19 -0
- package/src/core/StreamingToolExecutor.ts +572 -0
- package/src/core/ToolManager.ts +151 -41
- package/src/index.ts +14 -0
- package/src/providers/AnthropicProvider.ts +11 -12
- package/src/providers/GeminiProvider.ts +83 -52
- package/src/providers/OpenAIProvider.ts +21 -13
- package/src/providers/OpenRouterProvider.ts +13 -13
- package/src/types/agent.ts +45 -0
- package/src/types/compaction.ts +52 -0
- package/src/types/index.ts +35 -14
- package/src/types/tool.ts +108 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context compaction types for managing conversation history size
|
|
3
|
+
*/
|
|
4
|
+
import type { AiProvider } from "./ai";
|
|
5
|
+
import type { HistoryItem } from "./history";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for the compaction engine.
|
|
8
|
+
*
|
|
9
|
+
* Validation constraints:
|
|
10
|
+
* - `compactionThreshold` must be between 0.5 and 0.95
|
|
11
|
+
* - `preserveRecentCount` must be >= 2
|
|
12
|
+
* - `maxToolResultChars` must be > 0
|
|
13
|
+
*/
|
|
14
|
+
export interface CompactionOptions {
|
|
15
|
+
/** Maximum token budget for the conversation */
|
|
16
|
+
maxTokens: number;
|
|
17
|
+
/**
|
|
18
|
+
* Threshold ratio (0–1) at which to trigger compaction.
|
|
19
|
+
* Must be between 0.5 and 0.95.
|
|
20
|
+
*/
|
|
21
|
+
compactionThreshold: number;
|
|
22
|
+
/**
|
|
23
|
+
* Number of recent messages to always preserve unchanged.
|
|
24
|
+
* Must be >= 2.
|
|
25
|
+
*/
|
|
26
|
+
preserveRecentCount: number;
|
|
27
|
+
/**
|
|
28
|
+
* Maximum characters per tool result before truncation.
|
|
29
|
+
* Must be > 0.
|
|
30
|
+
*/
|
|
31
|
+
maxToolResultChars: number;
|
|
32
|
+
/** Provider to use for LLM summarization during auto-compact */
|
|
33
|
+
provider: AiProvider;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Result of a compaction operation
|
|
37
|
+
*/
|
|
38
|
+
export interface CompactionResult {
|
|
39
|
+
/** The compacted history */
|
|
40
|
+
history: HistoryItem[];
|
|
41
|
+
/** Strategy that was applied */
|
|
42
|
+
strategy: 'none' | 'tool_result_budget' | 'micro_compact' | 'auto_compact';
|
|
43
|
+
/** Estimated tokens after compaction */
|
|
44
|
+
estimatedTokens: number;
|
|
45
|
+
/** Number of messages removed/compacted */
|
|
46
|
+
messagesCompacted: number;
|
|
47
|
+
/** Summary text (if auto-compact was used) */
|
|
48
|
+
summary?: string;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=compaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/types/compaction.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAC9B,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,EAAE,UAAU,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,4BAA4B;IAC5B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,eAAe,GAAG,cAAc,CAAC;IAC3E,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/types/compaction.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Central type definitions export
|
|
3
3
|
*/
|
|
4
|
-
export type { AgentOptions, Term, Guideline, GuidelineMatch, AgentResponseStreamChunk, AgentResponse, ContextLifecycleHooks, ContextProvider, ValidationError, ValidationResult, } from "./agent";
|
|
4
|
+
export type { AgentOptions, AgentCompactionConfig, Term, Guideline, GuidelineMatch, AgentResponseStreamChunk, AgentResponse, ContextLifecycleHooks, ContextProvider, ValidationError, ValidationResult, } from "./agent";
|
|
5
5
|
export { CompositionMode } from "./agent";
|
|
6
6
|
export type { Event, EmittedEvent, MessageEventData, ToolEventData, StatusEventData, Participant, ToolResult as EventToolResult, ToolCall, HistoryMessage, Role, HistoryItem, History, UserHistoryItem, AssistantHistoryItem, SystemHistoryItem, ToolHistoryItem, } from "./history";
|
|
7
7
|
export { EventKind, MessageRole } from "./history";
|
|
@@ -9,8 +9,10 @@ export * from "./history";
|
|
|
9
9
|
export type { RouteOptions, RouteRef, StepRef, StepOptions, BranchSpec, StepResult, BranchResult, RouteCompletionHandler, RouteTransitionConfig, RouteLifecycleHooks, } from "./route";
|
|
10
10
|
export * from "./route";
|
|
11
11
|
export type { SessionState, PendingTransition } from "./session";
|
|
12
|
-
export type { Tool, ToolContext, ToolResult, ToolHandler, ToolExecutionResult, DataEnrichmentConfig, ValidationConfig, ApiCallConfig, ComputationConfig } from "./tool";
|
|
12
|
+
export type { Tool, ToolContext, ToolResult, ToolHandler, ToolExecutionResult, EnhancedTool, ToolValidationResult, ToolPermissionResult, ToolCallRequest, ToolExecutionUpdate, TrackedTool, ToolStatus, DataEnrichmentConfig, ValidationConfig, ApiCallConfig, ComputationConfig } from "./tool";
|
|
13
13
|
export { ToolScope } from "./tool";
|
|
14
|
+
export type { CompactionOptions, CompactionResult, } from "./compaction";
|
|
15
|
+
export type { PromptSectionType, PromptCacheConfig, SectionCompute, } from "../core/PromptSectionCache";
|
|
14
16
|
export type { AiProvider, GenerateMessageInput, GenerateMessageOutput, AgentStructuredResponse, ReasoningConfig, GenerateMessageStreamChunk, } from "./ai";
|
|
15
17
|
export type { StructuredSchema } from "./schema";
|
|
16
18
|
export type { RoutingDecision } from "./routing";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,cAAc,EACd,wBAAwB,EACxB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,YAAY,EACV,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,IAAI,eAAe,EAC7B,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,WAAW,EACX,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,cAAc,WAAW,CAAC;AAG1B,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,cAAc,SAAS,CAAC;AAGxB,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGjE,YAAY,EACV,IAAI,EACJ,WAAW,EACX,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EAClB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,YAAY,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,0BAA0B,GAC3B,MAAM,MAAM,CAAC;AAGd,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,cAAc,WAAW,CAAC;AAG1B,YAAY,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,cAAc,eAAe,CAAC;AAG9B,YAAY,EACV,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,IAAI,EACJ,SAAS,EACT,cAAc,EACd,wBAAwB,EACxB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,YAAY,EACV,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,IAAI,eAAe,EAC7B,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,WAAW,EACX,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,cAAc,WAAW,CAAC;AAG1B,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,cAAc,SAAS,CAAC;AAGxB,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAGjE,YAAY,EACV,IAAI,EACJ,WAAW,EACX,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EAClB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,YAAY,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,GACf,MAAM,4BAA4B,CAAC;AAGpC,YAAY,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,0BAA0B,GAC3B,MAAM,MAAM,CAAC;AAGd,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,cAAc,WAAW,CAAC;AAG1B,YAAY,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,cAAc,eAAe,CAAC;AAG9B,YAAY,EACV,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAqB1C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,cAAc,WAAW,CAAC;AAe1B,cAAc,SAAS,CAAC;AAwBxB,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AA8BnC,cAAc,WAAW,CAAC;AAgB1B,cAAc,eAAe,CAAC;AAS9B,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC"}
|
package/dist/types/tool.d.ts
CHANGED
|
@@ -84,6 +84,90 @@ export declare enum ToolScope {
|
|
|
84
84
|
REGISTERED = "registered",
|
|
85
85
|
ALL = "all"
|
|
86
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Result of input validation on a tool call
|
|
89
|
+
*/
|
|
90
|
+
export interface ToolValidationResult {
|
|
91
|
+
valid: boolean;
|
|
92
|
+
error?: string;
|
|
93
|
+
/** Suggested corrected input */
|
|
94
|
+
correctedInput?: Record<string, unknown>;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Result of a permission check on a tool call
|
|
98
|
+
*/
|
|
99
|
+
export interface ToolPermissionResult {
|
|
100
|
+
allowed: boolean;
|
|
101
|
+
reason?: string;
|
|
102
|
+
/** If not allowed, can the user override? */
|
|
103
|
+
canOverride?: boolean;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* A single tool invocation request from the LLM
|
|
107
|
+
*/
|
|
108
|
+
export interface ToolCallRequest {
|
|
109
|
+
/** Unique ID for this tool call instance */
|
|
110
|
+
id: string;
|
|
111
|
+
/** Tool name/ID to execute */
|
|
112
|
+
toolName: string;
|
|
113
|
+
/** Arguments passed to the tool */
|
|
114
|
+
arguments: Record<string, unknown>;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Result or progress update from a tool execution
|
|
118
|
+
*/
|
|
119
|
+
export interface ToolExecutionUpdate<TData = unknown> {
|
|
120
|
+
/** The tool call this update relates to */
|
|
121
|
+
toolCallId: string;
|
|
122
|
+
/** Result message (undefined for progress updates) */
|
|
123
|
+
result?: ToolExecutionResult;
|
|
124
|
+
/** Progress message for long-running tools */
|
|
125
|
+
progress?: string;
|
|
126
|
+
/** Updated context after tool execution */
|
|
127
|
+
contextUpdate?: Record<string, unknown>;
|
|
128
|
+
/** Updated data after tool execution */
|
|
129
|
+
dataUpdate?: Partial<TData>;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Internal status of a tracked tool in the executor queue
|
|
133
|
+
*/
|
|
134
|
+
export type ToolStatus = 'queued' | 'executing' | 'completed' | 'yielded';
|
|
135
|
+
/**
|
|
136
|
+
* Internal type tracking the state of a queued or executing tool
|
|
137
|
+
*/
|
|
138
|
+
export interface TrackedTool<TContext = unknown, TData = unknown> {
|
|
139
|
+
id: string;
|
|
140
|
+
toolCall: ToolCallRequest;
|
|
141
|
+
tool: EnhancedTool<TContext, TData>;
|
|
142
|
+
status: ToolStatus;
|
|
143
|
+
isConcurrencySafe: boolean;
|
|
144
|
+
promise?: Promise<void>;
|
|
145
|
+
results: ToolExecutionResult[];
|
|
146
|
+
pendingProgress: string[];
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Extended tool interface with rich metadata for concurrency control,
|
|
150
|
+
* permission gating, input validation, and result size management.
|
|
151
|
+
*
|
|
152
|
+
* All additional methods/properties are optional — plain `Tool` objects
|
|
153
|
+
* remain fully compatible.
|
|
154
|
+
*/
|
|
155
|
+
export interface EnhancedTool<TContext = any, TData = any, TResult = any> extends Tool<TContext, TData, TResult> {
|
|
156
|
+
/** Whether this tool is safe to run concurrently with other concurrent-safe tools */
|
|
157
|
+
isConcurrencySafe?(input?: Record<string, unknown>): boolean;
|
|
158
|
+
/** Whether this tool only reads data without side effects */
|
|
159
|
+
isReadOnly?(input?: Record<string, unknown>): boolean;
|
|
160
|
+
/** Whether this tool performs destructive/irreversible operations */
|
|
161
|
+
isDestructive?(input?: Record<string, unknown>): boolean;
|
|
162
|
+
/** How the tool responds to abort signals: 'cancel' = immediate abort, 'block' = allow completion */
|
|
163
|
+
interruptBehavior?(): 'cancel' | 'block';
|
|
164
|
+
/** Maximum characters for the tool result before truncation */
|
|
165
|
+
maxResultSizeChars?: number;
|
|
166
|
+
/** Validate input before execution */
|
|
167
|
+
validateInput?(input: Record<string, unknown>, context: ToolContext<TContext, TData>): Promise<ToolValidationResult> | ToolValidationResult;
|
|
168
|
+
/** Check permissions before execution */
|
|
169
|
+
checkPermissions?(input: Record<string, unknown>, context: ToolContext<TContext, TData>): Promise<ToolPermissionResult> | ToolPermissionResult;
|
|
170
|
+
}
|
|
87
171
|
/**
|
|
88
172
|
* Configuration for data enrichment tools
|
|
89
173
|
*/
|
package/dist/types/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/types/tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/types/tool.ts"],"names":[],"mappings":"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"}
|
package/docs/api/overview.md
CHANGED
|
@@ -12,10 +12,14 @@ Complete API documentation for `@falai/agent`. This framework provides a strongl
|
|
|
12
12
|
- [RoutingEngine](#routingengine)
|
|
13
13
|
- [ResponseEngine](#responseengine)
|
|
14
14
|
- [PromptComposer](#promptcomposer)
|
|
15
|
+
- [StreamingToolExecutor](#streamingtoolexecutor)
|
|
16
|
+
- [CompactionEngine](#compactionengine)
|
|
17
|
+
- [PromptSectionCache](#promptsectioncache)
|
|
15
18
|
|
|
16
19
|
- [AI Providers](#ai-providers)
|
|
17
20
|
- [Persistence Adapters](#persistence-adapters)
|
|
18
21
|
- [Types & Interfaces](#types--interfaces)
|
|
22
|
+
- [EnhancedTool](#enhancedtool)
|
|
19
23
|
- [Utilities](#utilities)
|
|
20
24
|
|
|
21
25
|
---
|
|
@@ -602,6 +606,119 @@ build(): Promise<string>
|
|
|
602
606
|
|
|
603
607
|
|
|
604
608
|
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
### StreamingToolExecutor
|
|
612
|
+
|
|
613
|
+
Executes tools as they arrive from the LLM stream with concurrency control, abort handling, and ordered result yielding.
|
|
614
|
+
|
|
615
|
+
#### Constructor
|
|
616
|
+
|
|
617
|
+
```typescript
|
|
618
|
+
new StreamingToolExecutor<TContext, TData>(
|
|
619
|
+
toolContext: ToolContext<TContext, TData>,
|
|
620
|
+
options?: {
|
|
621
|
+
maxParallel?: number; // default: 10
|
|
622
|
+
signal?: AbortSignal;
|
|
623
|
+
}
|
|
624
|
+
)
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
#### Methods
|
|
628
|
+
|
|
629
|
+
```typescript
|
|
630
|
+
addTool(toolCall: ToolCallRequest, tool: EnhancedTool<TContext, TData>): void
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
Queue a tool for execution. Concurrency safety is evaluated once at queue time.
|
|
634
|
+
|
|
635
|
+
```typescript
|
|
636
|
+
getCompletedResults(): Generator<ToolExecutionUpdate<TData>>
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
Synchronous generator yielding available results in request order.
|
|
640
|
+
|
|
641
|
+
```typescript
|
|
642
|
+
getRemainingResults(): AsyncGenerator<ToolExecutionUpdate<TData>>
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
Async generator yielding all results, waiting for pending tools.
|
|
646
|
+
|
|
647
|
+
```typescript
|
|
648
|
+
discard(): void
|
|
649
|
+
getUpdatedContext(): TContext
|
|
650
|
+
hasUnfinishedTools(): boolean
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
See [Streaming Execution Guide](../core/tools/streaming-execution.md) for detailed usage.
|
|
654
|
+
|
|
655
|
+
---
|
|
656
|
+
|
|
657
|
+
### CompactionEngine
|
|
658
|
+
|
|
659
|
+
Manages conversation history size through multi-layered compaction strategies.
|
|
660
|
+
|
|
661
|
+
#### Static Methods
|
|
662
|
+
|
|
663
|
+
```typescript
|
|
664
|
+
CompactionEngine.estimateTokens(history: HistoryItem[]): number
|
|
665
|
+
CompactionEngine.applyToolResultBudget(history: HistoryItem[], maxCharsPerResult: number): HistoryItem[]
|
|
666
|
+
CompactionEngine.validateOptions(options: CompactionOptions): void
|
|
667
|
+
CompactionEngine.checkAndCompact(history: HistoryItem[], options: CompactionOptions): Promise<CompactionResult>
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
See [Context Compaction Guide](../guides/context-compaction.md) for detailed usage.
|
|
671
|
+
|
|
672
|
+
---
|
|
673
|
+
|
|
674
|
+
### PromptSectionCache
|
|
675
|
+
|
|
676
|
+
Memoizes static prompt sections across turns, recomputing only dynamic sections per-turn. Integrates with `PromptComposer` for optimized prompt generation.
|
|
677
|
+
|
|
678
|
+
#### Constructor
|
|
679
|
+
|
|
680
|
+
```typescript
|
|
681
|
+
new PromptSectionCache(config?: PromptCacheConfig)
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
#### Configuration
|
|
685
|
+
|
|
686
|
+
```typescript
|
|
687
|
+
interface PromptCacheConfig {
|
|
688
|
+
enabled?: boolean; // default: true
|
|
689
|
+
volatileKeys?: string[]; // keys that always recompute
|
|
690
|
+
}
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
#### Methods
|
|
694
|
+
|
|
695
|
+
```typescript
|
|
696
|
+
register(key: string, type: PromptSectionType, compute: () => string | null | Promise<string | null>): void
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
Register a section as `'static'` (cached) or `'dynamic'` (recomputed every turn).
|
|
700
|
+
|
|
701
|
+
```typescript
|
|
702
|
+
get(key: string): Promise<string | null>
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
Get a section's value, using cache for static sections.
|
|
706
|
+
|
|
707
|
+
```typescript
|
|
708
|
+
resolveAll(): Promise<(string | null)[]>
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
Resolve all sections in registration order.
|
|
712
|
+
|
|
713
|
+
```typescript
|
|
714
|
+
invalidate(key: string): void
|
|
715
|
+
invalidateAll(): void
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
Invalidate a specific section or all sections.
|
|
719
|
+
|
|
720
|
+
See [Prompt Optimization Guide](../guides/prompt-optimization.md) for detailed usage.
|
|
721
|
+
|
|
605
722
|
---
|
|
606
723
|
|
|
607
724
|
## AI Providers
|
|
@@ -1077,6 +1194,29 @@ type ToolHandler<TContext, TArgs extends unknown[], TResult, TData> = (
|
|
|
1077
1194
|
}>;
|
|
1078
1195
|
```
|
|
1079
1196
|
|
|
1197
|
+
### EnhancedTool
|
|
1198
|
+
|
|
1199
|
+
Extends `Tool` with optional metadata for concurrency, permissions, validation, and result budgeting. See [EnhancedTool Reference](../core/tools/enhanced-tool.md) for full documentation.
|
|
1200
|
+
|
|
1201
|
+
```typescript
|
|
1202
|
+
interface EnhancedTool<TContext, TData, TResult> extends Tool<TContext, TData, TResult> {
|
|
1203
|
+
isConcurrencySafe?(input?: Record<string, unknown>): boolean;
|
|
1204
|
+
isReadOnly?(input?: Record<string, unknown>): boolean;
|
|
1205
|
+
isDestructive?(input?: Record<string, unknown>): boolean;
|
|
1206
|
+
interruptBehavior?(): 'cancel' | 'block';
|
|
1207
|
+
maxResultSizeChars?: number;
|
|
1208
|
+
validateInput?(input: Record<string, unknown>, context: ToolContext<TContext, TData>): Promise<ToolValidationResult> | ToolValidationResult;
|
|
1209
|
+
checkPermissions?(input: Record<string, unknown>, context: ToolContext<TContext, TData>): Promise<ToolPermissionResult> | ToolPermissionResult;
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
interface ToolValidationResult { valid: boolean; error?: string; correctedInput?: Record<string, unknown>; }
|
|
1213
|
+
interface ToolPermissionResult { allowed: boolean; reason?: string; canOverride?: boolean; }
|
|
1214
|
+
interface ToolCallRequest { id: string; toolName: string; arguments: Record<string, unknown>; }
|
|
1215
|
+
interface ToolExecutionUpdate<TData> { toolCallId: string; result?: ToolExecutionResult; progress?: string; contextUpdate?: Record<string, unknown>; dataUpdate?: Partial<TData>; }
|
|
1216
|
+
interface CompactionOptions { maxTokens: number; compactionThreshold: number; preserveRecentCount: number; maxToolResultChars: number; provider: AiProvider; }
|
|
1217
|
+
interface CompactionResult<TData> { history: HistoryItem[]; strategy: 'none' | 'tool_result_budget' | 'micro_compact' | 'auto_compact'; estimatedTokens: number; messagesCompacted: number; summary?: string; }
|
|
1218
|
+
```
|
|
1219
|
+
|
|
1080
1220
|
### AI Provider Types
|
|
1081
1221
|
|
|
1082
1222
|
```typescript
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# EnhancedTool Interface
|
|
2
|
+
|
|
3
|
+
`EnhancedTool` extends the existing `Tool` interface with optional metadata for concurrency control, permission gating, input validation, and result size management. All additional methods are optional — plain `Tool` objects remain fully compatible.
|
|
4
|
+
|
|
5
|
+
## Interface
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
interface EnhancedTool<TContext = any, TData = any, TResult = any>
|
|
9
|
+
extends Tool<TContext, TData, TResult> {
|
|
10
|
+
|
|
11
|
+
// Concurrency & safety
|
|
12
|
+
isConcurrencySafe?(input?: Record<string, unknown>): boolean;
|
|
13
|
+
isReadOnly?(input?: Record<string, unknown>): boolean;
|
|
14
|
+
isDestructive?(input?: Record<string, unknown>): boolean;
|
|
15
|
+
|
|
16
|
+
// Execution control
|
|
17
|
+
interruptBehavior?(): 'cancel' | 'block';
|
|
18
|
+
maxResultSizeChars?: number;
|
|
19
|
+
|
|
20
|
+
// Validation & permissions
|
|
21
|
+
validateInput?(
|
|
22
|
+
input: Record<string, unknown>,
|
|
23
|
+
context: ToolContext<TContext, TData>
|
|
24
|
+
): Promise<ToolValidationResult> | ToolValidationResult;
|
|
25
|
+
|
|
26
|
+
checkPermissions?(
|
|
27
|
+
input: Record<string, unknown>,
|
|
28
|
+
context: ToolContext<TContext, TData>
|
|
29
|
+
): Promise<ToolPermissionResult> | ToolPermissionResult;
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Methods & Properties
|
|
34
|
+
|
|
35
|
+
### isConcurrencySafe
|
|
36
|
+
|
|
37
|
+
Returns `true` if this tool can safely run in parallel with other concurrency-safe tools. The `StreamingToolExecutor` evaluates this once at queue time and caches the result.
|
|
38
|
+
|
|
39
|
+
Default (when absent): `false` — the tool runs serially.
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
const listFiles: EnhancedTool = {
|
|
43
|
+
id: "list-files",
|
|
44
|
+
name: "list_files",
|
|
45
|
+
description: "List files in a directory",
|
|
46
|
+
handler: async (ctx, args) => { /* ... */ },
|
|
47
|
+
isConcurrencySafe: () => true,
|
|
48
|
+
};
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The method receives the tool's input arguments, so concurrency safety can be input-dependent:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
isConcurrencySafe: (input) => {
|
|
55
|
+
// Safe for read paths, not safe for write paths
|
|
56
|
+
return input?.mode === "read";
|
|
57
|
+
},
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### isReadOnly / isDestructive
|
|
61
|
+
|
|
62
|
+
Informational metadata. `isReadOnly` indicates the tool has no side effects; `isDestructive` indicates irreversible operations. Both default to `false` when absent.
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
isReadOnly: () => true,
|
|
66
|
+
isDestructive: () => false,
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### interruptBehavior
|
|
70
|
+
|
|
71
|
+
Controls how the tool responds to abort signals (sibling failure or parent cancellation):
|
|
72
|
+
|
|
73
|
+
- `'cancel'` — immediately abort the tool
|
|
74
|
+
- `'block'` — allow the tool to finish (default when absent)
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
interruptBehavior: () => "cancel",
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### maxResultSizeChars
|
|
81
|
+
|
|
82
|
+
Maximum characters for the tool result. Results exceeding this limit are truncated with a notice like `[Truncated: 12000 chars total, showing first 5000]`.
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
maxResultSizeChars: 50_000,
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### validateInput
|
|
89
|
+
|
|
90
|
+
Called before the tool handler. If it returns `{ valid: false }`, the handler is never invoked and a validation error is returned instead.
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
validateInput: async (input, ctx) => {
|
|
94
|
+
if (!input.resourceId || typeof input.resourceId !== "string") {
|
|
95
|
+
return { valid: false, error: "resourceId must be a non-empty string" };
|
|
96
|
+
}
|
|
97
|
+
return { valid: true };
|
|
98
|
+
},
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The return type:
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
interface ToolValidationResult {
|
|
105
|
+
valid: boolean;
|
|
106
|
+
error?: string;
|
|
107
|
+
correctedInput?: Record<string, unknown>;
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### checkPermissions
|
|
112
|
+
|
|
113
|
+
Called before the tool handler (after validation). If it returns `{ allowed: false }`, the handler is never invoked and a permission error is returned.
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
checkPermissions: async (input, ctx) => {
|
|
117
|
+
const role = (ctx.context as any)?.userRole;
|
|
118
|
+
if (role !== "admin") {
|
|
119
|
+
return { allowed: false, reason: "Only admins can delete resources", canOverride: false };
|
|
120
|
+
}
|
|
121
|
+
return { allowed: true };
|
|
122
|
+
},
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
The return type:
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
interface ToolPermissionResult {
|
|
129
|
+
allowed: boolean;
|
|
130
|
+
reason?: string;
|
|
131
|
+
canOverride?: boolean;
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Full Example
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
const deleteTool: EnhancedTool = {
|
|
139
|
+
id: "delete-resource",
|
|
140
|
+
name: "delete_resource",
|
|
141
|
+
description: "Delete a resource permanently",
|
|
142
|
+
parameters: {
|
|
143
|
+
type: "object",
|
|
144
|
+
properties: { resourceId: { type: "string" } },
|
|
145
|
+
required: ["resourceId"],
|
|
146
|
+
},
|
|
147
|
+
handler: async (ctx, args) => {
|
|
148
|
+
await deleteResource(args?.resourceId as string);
|
|
149
|
+
return { success: true };
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
isConcurrencySafe: () => false,
|
|
153
|
+
isReadOnly: () => false,
|
|
154
|
+
isDestructive: () => true,
|
|
155
|
+
interruptBehavior: () => "block",
|
|
156
|
+
maxResultSizeChars: 500,
|
|
157
|
+
|
|
158
|
+
validateInput: async (input) => {
|
|
159
|
+
if (!input.resourceId || typeof input.resourceId !== "string") {
|
|
160
|
+
return { valid: false, error: "resourceId must be a non-empty string" };
|
|
161
|
+
}
|
|
162
|
+
return { valid: true };
|
|
163
|
+
},
|
|
164
|
+
|
|
165
|
+
checkPermissions: async (input, ctx) => {
|
|
166
|
+
const role = (ctx.context as any)?.userRole;
|
|
167
|
+
if (role !== "admin") {
|
|
168
|
+
return { allowed: false, reason: "Only admins can delete resources" };
|
|
169
|
+
}
|
|
170
|
+
return { allowed: true };
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Backward Compatibility
|
|
176
|
+
|
|
177
|
+
Plain `Tool` objects without any `EnhancedTool` methods work exactly as before. The framework applies these defaults:
|
|
178
|
+
|
|
179
|
+
| Property | Default |
|
|
180
|
+
|---|---|
|
|
181
|
+
| `isConcurrencySafe` | `false` |
|
|
182
|
+
| `isReadOnly` | `false` |
|
|
183
|
+
| `isDestructive` | `false` |
|
|
184
|
+
| `interruptBehavior` | `'block'` |
|
|
185
|
+
| `validateInput` | skipped |
|
|
186
|
+
| `checkPermissions` | skipped |
|