@lleverage-ai/agent-sdk 0.0.1
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 +2321 -0
- package/dist/agent.d.ts +52 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +2122 -0
- package/dist/agent.js.map +1 -0
- package/dist/backend.d.ts +378 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +71 -0
- package/dist/backend.js.map +1 -0
- package/dist/backends/composite.d.ts +258 -0
- package/dist/backends/composite.d.ts.map +1 -0
- package/dist/backends/composite.js +437 -0
- package/dist/backends/composite.js.map +1 -0
- package/dist/backends/filesystem.d.ts +268 -0
- package/dist/backends/filesystem.d.ts.map +1 -0
- package/dist/backends/filesystem.js +623 -0
- package/dist/backends/filesystem.js.map +1 -0
- package/dist/backends/index.d.ts +14 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +14 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/persistent.d.ts +312 -0
- package/dist/backends/persistent.d.ts.map +1 -0
- package/dist/backends/persistent.js +519 -0
- package/dist/backends/persistent.js.map +1 -0
- package/dist/backends/sandbox.d.ts +315 -0
- package/dist/backends/sandbox.d.ts.map +1 -0
- package/dist/backends/sandbox.js +490 -0
- package/dist/backends/sandbox.js.map +1 -0
- package/dist/backends/state.d.ts +225 -0
- package/dist/backends/state.d.ts.map +1 -0
- package/dist/backends/state.js +396 -0
- package/dist/backends/state.js.map +1 -0
- package/dist/checkpointer/file-saver.d.ts +182 -0
- package/dist/checkpointer/file-saver.d.ts.map +1 -0
- package/dist/checkpointer/file-saver.js +298 -0
- package/dist/checkpointer/file-saver.js.map +1 -0
- package/dist/checkpointer/index.d.ts +40 -0
- package/dist/checkpointer/index.d.ts.map +1 -0
- package/dist/checkpointer/index.js +40 -0
- package/dist/checkpointer/index.js.map +1 -0
- package/dist/checkpointer/kv-saver.d.ts +142 -0
- package/dist/checkpointer/kv-saver.d.ts.map +1 -0
- package/dist/checkpointer/kv-saver.js +176 -0
- package/dist/checkpointer/kv-saver.js.map +1 -0
- package/dist/checkpointer/memory-saver.d.ts +158 -0
- package/dist/checkpointer/memory-saver.d.ts.map +1 -0
- package/dist/checkpointer/memory-saver.js +222 -0
- package/dist/checkpointer/memory-saver.js.map +1 -0
- package/dist/checkpointer/types.d.ts +353 -0
- package/dist/checkpointer/types.d.ts.map +1 -0
- package/dist/checkpointer/types.js +159 -0
- package/dist/checkpointer/types.js.map +1 -0
- package/dist/context-manager.d.ts +627 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +1039 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/context.d.ts +57 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +76 -0
- package/dist/context.js.map +1 -0
- package/dist/errors/index.d.ts +611 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +1023 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/generation-helpers.d.ts +126 -0
- package/dist/generation-helpers.d.ts.map +1 -0
- package/dist/generation-helpers.js +181 -0
- package/dist/generation-helpers.js.map +1 -0
- package/dist/hooks/audit.d.ts +210 -0
- package/dist/hooks/audit.d.ts.map +1 -0
- package/dist/hooks/audit.js +305 -0
- package/dist/hooks/audit.js.map +1 -0
- package/dist/hooks/cache.d.ts +180 -0
- package/dist/hooks/cache.d.ts.map +1 -0
- package/dist/hooks/cache.js +273 -0
- package/dist/hooks/cache.js.map +1 -0
- package/dist/hooks/guardrails.d.ts +145 -0
- package/dist/hooks/guardrails.d.ts.map +1 -0
- package/dist/hooks/guardrails.js +326 -0
- package/dist/hooks/guardrails.js.map +1 -0
- package/dist/hooks/index.d.ts +18 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +32 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/logging.d.ts +193 -0
- package/dist/hooks/logging.d.ts.map +1 -0
- package/dist/hooks/logging.js +345 -0
- package/dist/hooks/logging.js.map +1 -0
- package/dist/hooks/parallel-guardrails.d.ts +268 -0
- package/dist/hooks/parallel-guardrails.d.ts.map +1 -0
- package/dist/hooks/parallel-guardrails.js +416 -0
- package/dist/hooks/parallel-guardrails.js.map +1 -0
- package/dist/hooks/rate-limit.d.ts +305 -0
- package/dist/hooks/rate-limit.d.ts.map +1 -0
- package/dist/hooks/rate-limit.js +372 -0
- package/dist/hooks/rate-limit.js.map +1 -0
- package/dist/hooks/retry.d.ts +144 -0
- package/dist/hooks/retry.d.ts.map +1 -0
- package/dist/hooks/retry.js +210 -0
- package/dist/hooks/retry.js.map +1 -0
- package/dist/hooks/secrets.d.ts +174 -0
- package/dist/hooks/secrets.d.ts.map +1 -0
- package/dist/hooks/secrets.js +306 -0
- package/dist/hooks/secrets.js.map +1 -0
- package/dist/hooks.d.ts +229 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +352 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/env.d.ts +25 -0
- package/dist/mcp/env.d.ts.map +1 -0
- package/dist/mcp/env.js +18 -0
- package/dist/mcp/env.js.map +1 -0
- package/dist/mcp/index.d.ts +16 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +184 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +446 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/types.d.ts +58 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +7 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp/validation.d.ts +119 -0
- package/dist/mcp/validation.d.ts.map +1 -0
- package/dist/mcp/validation.js +407 -0
- package/dist/mcp/validation.js.map +1 -0
- package/dist/mcp/virtual-server.d.ts +78 -0
- package/dist/mcp/virtual-server.d.ts.map +1 -0
- package/dist/mcp/virtual-server.js +137 -0
- package/dist/mcp/virtual-server.js.map +1 -0
- package/dist/memory/filesystem-store.d.ts +217 -0
- package/dist/memory/filesystem-store.d.ts.map +1 -0
- package/dist/memory/filesystem-store.js +343 -0
- package/dist/memory/filesystem-store.js.map +1 -0
- package/dist/memory/index.d.ts +46 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +46 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/loader.d.ts +396 -0
- package/dist/memory/loader.d.ts.map +1 -0
- package/dist/memory/loader.js +419 -0
- package/dist/memory/loader.js.map +1 -0
- package/dist/memory/permissions.d.ts +282 -0
- package/dist/memory/permissions.d.ts.map +1 -0
- package/dist/memory/permissions.js +297 -0
- package/dist/memory/permissions.js.map +1 -0
- package/dist/memory/rules.d.ts +249 -0
- package/dist/memory/rules.d.ts.map +1 -0
- package/dist/memory/rules.js +362 -0
- package/dist/memory/rules.js.map +1 -0
- package/dist/memory/store.d.ts +286 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +263 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/middleware/apply.d.ts +73 -0
- package/dist/middleware/apply.d.ts.map +1 -0
- package/dist/middleware/apply.js +219 -0
- package/dist/middleware/apply.js.map +1 -0
- package/dist/middleware/context.d.ts +33 -0
- package/dist/middleware/context.d.ts.map +1 -0
- package/dist/middleware/context.js +176 -0
- package/dist/middleware/context.js.map +1 -0
- package/dist/middleware/index.d.ts +31 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +32 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/logging.d.ts +137 -0
- package/dist/middleware/logging.d.ts.map +1 -0
- package/dist/middleware/logging.js +374 -0
- package/dist/middleware/logging.js.map +1 -0
- package/dist/middleware/types.d.ts +183 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +11 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/observability/events.d.ts +183 -0
- package/dist/observability/events.d.ts.map +1 -0
- package/dist/observability/events.js +305 -0
- package/dist/observability/events.js.map +1 -0
- package/dist/observability/index.d.ts +55 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +87 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/logger.d.ts +318 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +436 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +341 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +490 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/preset.d.ts +161 -0
- package/dist/observability/preset.d.ts.map +1 -0
- package/dist/observability/preset.js +133 -0
- package/dist/observability/preset.js.map +1 -0
- package/dist/observability/streaming.d.ts +113 -0
- package/dist/observability/streaming.d.ts.map +1 -0
- package/dist/observability/streaming.js +114 -0
- package/dist/observability/streaming.js.map +1 -0
- package/dist/observability/tracing.d.ts +378 -0
- package/dist/observability/tracing.d.ts.map +1 -0
- package/dist/observability/tracing.js +539 -0
- package/dist/observability/tracing.js.map +1 -0
- package/dist/plugins.d.ts +55 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +63 -0
- package/dist/plugins.js.map +1 -0
- package/dist/presets/index.d.ts +7 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +7 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/production.d.ts +262 -0
- package/dist/presets/production.d.ts.map +1 -0
- package/dist/presets/production.js +295 -0
- package/dist/presets/production.js.map +1 -0
- package/dist/security/index.d.ts +179 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +323 -0
- package/dist/security/index.js.map +1 -0
- package/dist/subagents/advanced.d.ts +413 -0
- package/dist/subagents/advanced.d.ts.map +1 -0
- package/dist/subagents/advanced.js +396 -0
- package/dist/subagents/advanced.js.map +1 -0
- package/dist/subagents/index.d.ts +14 -0
- package/dist/subagents/index.d.ts.map +1 -0
- package/dist/subagents/index.js +15 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents.d.ts +73 -0
- package/dist/subagents.d.ts.map +1 -0
- package/dist/subagents.js +213 -0
- package/dist/subagents.js.map +1 -0
- package/dist/task-store/file-store.d.ts +76 -0
- package/dist/task-store/file-store.d.ts.map +1 -0
- package/dist/task-store/file-store.js +190 -0
- package/dist/task-store/file-store.js.map +1 -0
- package/dist/task-store/index.d.ts +11 -0
- package/dist/task-store/index.d.ts.map +1 -0
- package/dist/task-store/index.js +10 -0
- package/dist/task-store/index.js.map +1 -0
- package/dist/task-store/kv-store.d.ts +140 -0
- package/dist/task-store/kv-store.d.ts.map +1 -0
- package/dist/task-store/kv-store.js +169 -0
- package/dist/task-store/kv-store.js.map +1 -0
- package/dist/task-store/memory-store.d.ts +66 -0
- package/dist/task-store/memory-store.d.ts.map +1 -0
- package/dist/task-store/memory-store.js +125 -0
- package/dist/task-store/memory-store.js.map +1 -0
- package/dist/task-store/types.d.ts +235 -0
- package/dist/task-store/types.d.ts.map +1 -0
- package/dist/task-store/types.js +110 -0
- package/dist/task-store/types.js.map +1 -0
- package/dist/testing/assertions.d.ts +401 -0
- package/dist/testing/assertions.d.ts.map +1 -0
- package/dist/testing/assertions.js +630 -0
- package/dist/testing/assertions.js.map +1 -0
- package/dist/testing/index.d.ts +343 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +360 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-agent.d.ts +214 -0
- package/dist/testing/mock-agent.d.ts.map +1 -0
- package/dist/testing/mock-agent.js +448 -0
- package/dist/testing/mock-agent.js.map +1 -0
- package/dist/testing/recorder.d.ts +288 -0
- package/dist/testing/recorder.d.ts.map +1 -0
- package/dist/testing/recorder.js +499 -0
- package/dist/testing/recorder.js.map +1 -0
- package/dist/tools/execute.d.ts +104 -0
- package/dist/tools/execute.d.ts.map +1 -0
- package/dist/tools/execute.js +191 -0
- package/dist/tools/execute.js.map +1 -0
- package/dist/tools/factory.d.ts +260 -0
- package/dist/tools/factory.d.ts.map +1 -0
- package/dist/tools/factory.js +241 -0
- package/dist/tools/factory.js.map +1 -0
- package/dist/tools/filesystem.d.ts +215 -0
- package/dist/tools/filesystem.d.ts.map +1 -0
- package/dist/tools/filesystem.js +311 -0
- package/dist/tools/filesystem.js.map +1 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +33 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/search.d.ts +59 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +94 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/skills.d.ts +354 -0
- package/dist/tools/skills.d.ts.map +1 -0
- package/dist/tools/skills.js +413 -0
- package/dist/tools/skills.js.map +1 -0
- package/dist/tools/task.d.ts +272 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +521 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/todos.d.ts +131 -0
- package/dist/tools/todos.d.ts.map +1 -0
- package/dist/tools/todos.js +120 -0
- package/dist/tools/todos.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +424 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +607 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/user-interaction.d.ts +116 -0
- package/dist/tools/user-interaction.d.ts.map +1 -0
- package/dist/tools/user-interaction.js +147 -0
- package/dist/tools/user-interaction.js.map +1 -0
- package/dist/tools/utils.d.ts +124 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +189 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools.d.ts +74 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +73 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +2421 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +55 -0
- package/dist/types.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory state backend for ephemeral storage.
|
|
3
|
+
*
|
|
4
|
+
* StateBackend provides a virtual filesystem backed by in-memory data structures.
|
|
5
|
+
* All operations are synchronous and data is lost when the process ends.
|
|
6
|
+
*
|
|
7
|
+
* This backend is ideal for:
|
|
8
|
+
* - Single-session agents without persistence needs
|
|
9
|
+
* - Testing and development
|
|
10
|
+
* - Sandboxed environments
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const state: AgentState = { todos: [], files: {} };
|
|
15
|
+
* const backend = new StateBackend(state);
|
|
16
|
+
*
|
|
17
|
+
* // Or use the factory pattern
|
|
18
|
+
* const backendFactory = createStateBackend();
|
|
19
|
+
* const backend = backendFactory(state);
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
*/
|
|
24
|
+
import type { BackendProtocol, EditResult, FileData, FileInfo, GrepMatch, WriteResult } from "../backend.js";
|
|
25
|
+
/**
|
|
26
|
+
* Status of a todo item.
|
|
27
|
+
*
|
|
28
|
+
* @category Backend
|
|
29
|
+
*/
|
|
30
|
+
export type TodoStatus = "pending" | "in_progress" | "completed" | "cancelled";
|
|
31
|
+
/**
|
|
32
|
+
* A single todo item for task tracking.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const todo: TodoItem = {
|
|
37
|
+
* id: "todo-1",
|
|
38
|
+
* content: "Implement feature X",
|
|
39
|
+
* status: "in_progress",
|
|
40
|
+
* createdAt: "2026-01-30T10:00:00Z",
|
|
41
|
+
* };
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @category Backend
|
|
45
|
+
*/
|
|
46
|
+
export interface TodoItem {
|
|
47
|
+
/** Unique identifier for this todo */
|
|
48
|
+
id: string;
|
|
49
|
+
/** Description of the task */
|
|
50
|
+
content: string;
|
|
51
|
+
/** Current status of the task */
|
|
52
|
+
status: TodoStatus;
|
|
53
|
+
/** ISO 8601 timestamp when the todo was created */
|
|
54
|
+
createdAt: string;
|
|
55
|
+
/** ISO 8601 timestamp when the todo was completed (if applicable) */
|
|
56
|
+
completedAt?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Complete agent state including todos and virtual filesystem.
|
|
60
|
+
*
|
|
61
|
+
* This interface represents the full state that can be persisted,
|
|
62
|
+
* shared between agents, or used with checkpointing.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const state: AgentState = {
|
|
67
|
+
* todos: [],
|
|
68
|
+
* files: {
|
|
69
|
+
* "/notes.md": {
|
|
70
|
+
* content: ["# Notes", "", "Initial notes here."],
|
|
71
|
+
* created_at: new Date().toISOString(),
|
|
72
|
+
* modified_at: new Date().toISOString(),
|
|
73
|
+
* },
|
|
74
|
+
* },
|
|
75
|
+
* };
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* @category Backend
|
|
79
|
+
*/
|
|
80
|
+
export interface AgentState {
|
|
81
|
+
/** Current todo list */
|
|
82
|
+
todos: TodoItem[];
|
|
83
|
+
/** Virtual filesystem (path -> content) */
|
|
84
|
+
files: Record<string, FileData>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* In-memory backend implementation using AgentState.
|
|
88
|
+
*
|
|
89
|
+
* All file operations are performed on the in-memory `state.files` map.
|
|
90
|
+
* Changes are immediately visible but not persisted to disk.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* // Create with existing state
|
|
95
|
+
* const state: AgentState = { todos: [], files: {} };
|
|
96
|
+
* const backend = new StateBackend(state);
|
|
97
|
+
*
|
|
98
|
+
* // Write a file
|
|
99
|
+
* await backend.write("/hello.txt", "Hello, World!");
|
|
100
|
+
*
|
|
101
|
+
* // Read it back
|
|
102
|
+
* const content = await backend.read("/hello.txt");
|
|
103
|
+
* console.log(content); // " 1→Hello, World!"
|
|
104
|
+
*
|
|
105
|
+
* // State is updated directly
|
|
106
|
+
* console.log(state.files["/hello.txt"].content); // ["Hello, World!"]
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* @category Backend
|
|
110
|
+
*/
|
|
111
|
+
export declare class StateBackend implements BackendProtocol {
|
|
112
|
+
private readonly state;
|
|
113
|
+
/**
|
|
114
|
+
* Create a new StateBackend.
|
|
115
|
+
*
|
|
116
|
+
* @param state - The AgentState to use for storage
|
|
117
|
+
*/
|
|
118
|
+
constructor(state: AgentState);
|
|
119
|
+
/**
|
|
120
|
+
* List files and directories at the given path.
|
|
121
|
+
*
|
|
122
|
+
* @param path - Directory path to list (non-recursive)
|
|
123
|
+
* @returns Array of file/directory info
|
|
124
|
+
*/
|
|
125
|
+
lsInfo(path: string): FileInfo[];
|
|
126
|
+
/**
|
|
127
|
+
* Read file content with line numbers.
|
|
128
|
+
*
|
|
129
|
+
* @param filePath - Path to the file to read
|
|
130
|
+
* @param offset - Starting line offset (0-indexed)
|
|
131
|
+
* @param limit - Maximum number of lines to read
|
|
132
|
+
* @returns Formatted content with line numbers
|
|
133
|
+
*/
|
|
134
|
+
read(filePath: string, offset?: number, limit?: number): string;
|
|
135
|
+
/**
|
|
136
|
+
* Read raw file content as FileData.
|
|
137
|
+
*
|
|
138
|
+
* @param filePath - Path to the file to read
|
|
139
|
+
* @returns Raw file data with content and timestamps (deep copy)
|
|
140
|
+
*/
|
|
141
|
+
readRaw(filePath: string): FileData;
|
|
142
|
+
/**
|
|
143
|
+
* Search for pattern matches using regex.
|
|
144
|
+
*
|
|
145
|
+
* @param pattern - Regular expression pattern to search for
|
|
146
|
+
* @param path - Directory to search in (defaults to root)
|
|
147
|
+
* @param glob - Glob pattern to filter files (e.g., "*.ts")
|
|
148
|
+
* @returns Array of matches
|
|
149
|
+
*/
|
|
150
|
+
grepRaw(pattern: string, path?: string | null, glob?: string | null): GrepMatch[];
|
|
151
|
+
/**
|
|
152
|
+
* Find files matching a glob pattern.
|
|
153
|
+
*
|
|
154
|
+
* @param pattern - Glob pattern (e.g., "**\/*.ts")
|
|
155
|
+
* @param path - Base directory for the search
|
|
156
|
+
* @returns Array of matching file info
|
|
157
|
+
*/
|
|
158
|
+
globInfo(pattern: string, path?: string): FileInfo[];
|
|
159
|
+
/**
|
|
160
|
+
* Create or overwrite a file.
|
|
161
|
+
*
|
|
162
|
+
* @param filePath - Path for the new file
|
|
163
|
+
* @param content - Content to write
|
|
164
|
+
* @returns Result indicating success or failure
|
|
165
|
+
*/
|
|
166
|
+
write(filePath: string, content: string): WriteResult;
|
|
167
|
+
/**
|
|
168
|
+
* Edit a file by replacing text.
|
|
169
|
+
*
|
|
170
|
+
* @param filePath - Path to the file to edit
|
|
171
|
+
* @param oldString - Text to find and replace
|
|
172
|
+
* @param newString - Replacement text
|
|
173
|
+
* @param replaceAll - If true, replace all occurrences
|
|
174
|
+
* @returns Result indicating success or failure
|
|
175
|
+
*/
|
|
176
|
+
edit(filePath: string, oldString: string, newString: string, replaceAll?: boolean): EditResult;
|
|
177
|
+
/**
|
|
178
|
+
* Normalize a path to ensure consistent format.
|
|
179
|
+
* @internal
|
|
180
|
+
*/
|
|
181
|
+
private normalizePath;
|
|
182
|
+
/**
|
|
183
|
+
* Check if a path matches a glob pattern.
|
|
184
|
+
* Supports basic glob patterns: *, **, ?
|
|
185
|
+
* @internal
|
|
186
|
+
*/
|
|
187
|
+
private matchesGlob;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Create a StateBackend factory function.
|
|
191
|
+
*
|
|
192
|
+
* This is useful when you need to defer backend creation until state is available,
|
|
193
|
+
* such as when integrating with the agent system.
|
|
194
|
+
*
|
|
195
|
+
* @returns A factory function that creates a StateBackend from AgentState
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```typescript
|
|
199
|
+
* const backendFactory = createStateBackend();
|
|
200
|
+
*
|
|
201
|
+
* // Later, when state is available:
|
|
202
|
+
* const state: AgentState = { todos: [], files: {} };
|
|
203
|
+
* const backend = backendFactory(state);
|
|
204
|
+
* ```
|
|
205
|
+
*
|
|
206
|
+
* @category Backend
|
|
207
|
+
*/
|
|
208
|
+
export declare function createStateBackend(): (state: AgentState) => StateBackend;
|
|
209
|
+
/**
|
|
210
|
+
* Create a new empty AgentState.
|
|
211
|
+
*
|
|
212
|
+
* Convenience function to create a fresh state for testing or initialization.
|
|
213
|
+
*
|
|
214
|
+
* @returns A new AgentState with empty todos and files
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* const state = createAgentState();
|
|
219
|
+
* const backend = new StateBackend(state);
|
|
220
|
+
* ```
|
|
221
|
+
*
|
|
222
|
+
* @category Backend
|
|
223
|
+
*/
|
|
224
|
+
export declare function createAgentState(): AgentState;
|
|
225
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/backends/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACZ,MAAM,eAAe,CAAC;AAMvB;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;AAE/E;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,QAAQ;IACvB,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAC;IAEX,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAEhB,iCAAiC;IACjC,MAAM,EAAE,UAAU,CAAC;IAEnB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAElB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAElB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CACjC;AAMD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,YAAa,YAAW,eAAe;IAMtC,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC;;;;OAIG;gBAC0B,KAAK,EAAE,UAAU;IAE9C;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE;IAsDhC;;;;;;;OAOG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAsB/D;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ;IAgBnC;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE;IAgCjF;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IAsCpD;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW;IAkBrD;;;;;;;;OAQG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU;IAqD9F;;;OAGG;IACH,OAAO,CAAC,aAAa;IAerB;;;;OAIG;IACH,OAAO,CAAC,WAAW;CAuBpB;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,YAAY,CAExE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAK7C"}
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory state backend for ephemeral storage.
|
|
3
|
+
*
|
|
4
|
+
* StateBackend provides a virtual filesystem backed by in-memory data structures.
|
|
5
|
+
* All operations are synchronous and data is lost when the process ends.
|
|
6
|
+
*
|
|
7
|
+
* This backend is ideal for:
|
|
8
|
+
* - Single-session agents without persistence needs
|
|
9
|
+
* - Testing and development
|
|
10
|
+
* - Sandboxed environments
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const state: AgentState = { todos: [], files: {} };
|
|
15
|
+
* const backend = new StateBackend(state);
|
|
16
|
+
*
|
|
17
|
+
* // Or use the factory pattern
|
|
18
|
+
* const backendFactory = createStateBackend();
|
|
19
|
+
* const backend = backendFactory(state);
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @packageDocumentation
|
|
23
|
+
*/
|
|
24
|
+
// =============================================================================
|
|
25
|
+
// State Backend Implementation
|
|
26
|
+
// =============================================================================
|
|
27
|
+
/**
|
|
28
|
+
* In-memory backend implementation using AgentState.
|
|
29
|
+
*
|
|
30
|
+
* All file operations are performed on the in-memory `state.files` map.
|
|
31
|
+
* Changes are immediately visible but not persisted to disk.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // Create with existing state
|
|
36
|
+
* const state: AgentState = { todos: [], files: {} };
|
|
37
|
+
* const backend = new StateBackend(state);
|
|
38
|
+
*
|
|
39
|
+
* // Write a file
|
|
40
|
+
* await backend.write("/hello.txt", "Hello, World!");
|
|
41
|
+
*
|
|
42
|
+
* // Read it back
|
|
43
|
+
* const content = await backend.read("/hello.txt");
|
|
44
|
+
* console.log(content); // " 1→Hello, World!"
|
|
45
|
+
*
|
|
46
|
+
* // State is updated directly
|
|
47
|
+
* console.log(state.files["/hello.txt"].content); // ["Hello, World!"]
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @category Backend
|
|
51
|
+
*/
|
|
52
|
+
export class StateBackend {
|
|
53
|
+
state;
|
|
54
|
+
/**
|
|
55
|
+
* Create a new StateBackend.
|
|
56
|
+
*
|
|
57
|
+
* @param state - The AgentState to use for storage
|
|
58
|
+
*/
|
|
59
|
+
constructor(state) {
|
|
60
|
+
this.state = state;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* List files and directories at the given path.
|
|
64
|
+
*
|
|
65
|
+
* @param path - Directory path to list (non-recursive)
|
|
66
|
+
* @returns Array of file/directory info
|
|
67
|
+
*/
|
|
68
|
+
lsInfo(path) {
|
|
69
|
+
// Normalize and ensure trailing slash for directory matching
|
|
70
|
+
let normalizedPath = this.normalizePath(path);
|
|
71
|
+
if (!normalizedPath.endsWith("/")) {
|
|
72
|
+
normalizedPath += "/";
|
|
73
|
+
}
|
|
74
|
+
// Handle root case
|
|
75
|
+
if (normalizedPath === "//") {
|
|
76
|
+
normalizedPath = "/";
|
|
77
|
+
}
|
|
78
|
+
const results = [];
|
|
79
|
+
const seen = new Set();
|
|
80
|
+
for (const filePath of Object.keys(this.state.files)) {
|
|
81
|
+
// Check if file is under the path
|
|
82
|
+
if (!filePath.startsWith(normalizedPath)) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const relativePath = filePath.slice(normalizedPath.length);
|
|
86
|
+
const segments = relativePath.split("/").filter(Boolean);
|
|
87
|
+
if (segments.length === 0) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (segments.length === 1) {
|
|
91
|
+
// Direct child file
|
|
92
|
+
const fileData = this.state.files[filePath];
|
|
93
|
+
results.push({
|
|
94
|
+
path: filePath,
|
|
95
|
+
is_dir: false,
|
|
96
|
+
size: fileData.content.join("\n").length,
|
|
97
|
+
modified_at: fileData.modified_at,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// Subdirectory - construct the directory path
|
|
102
|
+
const dirName = segments[0];
|
|
103
|
+
const dirPath = normalizedPath + dirName;
|
|
104
|
+
if (!seen.has(dirPath)) {
|
|
105
|
+
seen.add(dirPath);
|
|
106
|
+
results.push({
|
|
107
|
+
path: dirPath,
|
|
108
|
+
is_dir: true,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return results;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Read file content with line numbers.
|
|
117
|
+
*
|
|
118
|
+
* @param filePath - Path to the file to read
|
|
119
|
+
* @param offset - Starting line offset (0-indexed)
|
|
120
|
+
* @param limit - Maximum number of lines to read
|
|
121
|
+
* @returns Formatted content with line numbers
|
|
122
|
+
*/
|
|
123
|
+
read(filePath, offset, limit) {
|
|
124
|
+
const normalizedPath = this.normalizePath(filePath);
|
|
125
|
+
const fileData = this.state.files[normalizedPath];
|
|
126
|
+
if (!fileData) {
|
|
127
|
+
throw new Error(`File not found: ${filePath}`);
|
|
128
|
+
}
|
|
129
|
+
const startLine = offset ?? 0;
|
|
130
|
+
const maxLines = limit ?? 2000;
|
|
131
|
+
const lines = fileData.content.slice(startLine, startLine + maxLines);
|
|
132
|
+
// Format with line numbers (matching the Read tool format)
|
|
133
|
+
return lines
|
|
134
|
+
.map((line, i) => {
|
|
135
|
+
const lineNum = startLine + i + 1;
|
|
136
|
+
const padding = " ".repeat(Math.max(0, 6 - String(lineNum).length));
|
|
137
|
+
return `${padding}${lineNum}→${line}`;
|
|
138
|
+
})
|
|
139
|
+
.join("\n");
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Read raw file content as FileData.
|
|
143
|
+
*
|
|
144
|
+
* @param filePath - Path to the file to read
|
|
145
|
+
* @returns Raw file data with content and timestamps (deep copy)
|
|
146
|
+
*/
|
|
147
|
+
readRaw(filePath) {
|
|
148
|
+
const normalizedPath = this.normalizePath(filePath);
|
|
149
|
+
const fileData = this.state.files[normalizedPath];
|
|
150
|
+
if (!fileData) {
|
|
151
|
+
throw new Error(`File not found: ${filePath}`);
|
|
152
|
+
}
|
|
153
|
+
// Return a deep copy to prevent mutation
|
|
154
|
+
return {
|
|
155
|
+
content: [...fileData.content],
|
|
156
|
+
created_at: fileData.created_at,
|
|
157
|
+
modified_at: fileData.modified_at,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Search for pattern matches using regex.
|
|
162
|
+
*
|
|
163
|
+
* @param pattern - Regular expression pattern to search for
|
|
164
|
+
* @param path - Directory to search in (defaults to root)
|
|
165
|
+
* @param glob - Glob pattern to filter files (e.g., "*.ts")
|
|
166
|
+
* @returns Array of matches
|
|
167
|
+
*/
|
|
168
|
+
grepRaw(pattern, path, glob) {
|
|
169
|
+
const regex = new RegExp(pattern);
|
|
170
|
+
const searchPath = path ? this.normalizePath(path) : "/";
|
|
171
|
+
const matches = [];
|
|
172
|
+
for (const [filePath, fileData] of Object.entries(this.state.files)) {
|
|
173
|
+
// Check if file is under the search path
|
|
174
|
+
if (!filePath.startsWith(searchPath)) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
// Check glob pattern if provided
|
|
178
|
+
if (glob && !this.matchesGlob(filePath, glob)) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
// Search each line
|
|
182
|
+
for (let i = 0; i < fileData.content.length; i++) {
|
|
183
|
+
const line = fileData.content[i];
|
|
184
|
+
if (regex.test(line)) {
|
|
185
|
+
matches.push({
|
|
186
|
+
path: filePath,
|
|
187
|
+
line: i + 1, // 1-indexed
|
|
188
|
+
text: line,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return matches;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Find files matching a glob pattern.
|
|
197
|
+
*
|
|
198
|
+
* @param pattern - Glob pattern (e.g., "**\/*.ts")
|
|
199
|
+
* @param path - Base directory for the search
|
|
200
|
+
* @returns Array of matching file info
|
|
201
|
+
*/
|
|
202
|
+
globInfo(pattern, path) {
|
|
203
|
+
// Normalize search path and ensure trailing slash for directory matching
|
|
204
|
+
let searchPath = path ? this.normalizePath(path) : "/";
|
|
205
|
+
if (!searchPath.endsWith("/")) {
|
|
206
|
+
searchPath += "/";
|
|
207
|
+
}
|
|
208
|
+
if (searchPath === "//") {
|
|
209
|
+
searchPath = "/";
|
|
210
|
+
}
|
|
211
|
+
const results = [];
|
|
212
|
+
for (const [filePath, fileData] of Object.entries(this.state.files)) {
|
|
213
|
+
// Check if file is under the search path
|
|
214
|
+
if (!filePath.startsWith(searchPath)) {
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
// Get the relative path for matching (without leading slash)
|
|
218
|
+
let relativePath = filePath.slice(searchPath.length);
|
|
219
|
+
// Remove leading slash if present
|
|
220
|
+
if (relativePath.startsWith("/")) {
|
|
221
|
+
relativePath = relativePath.slice(1);
|
|
222
|
+
}
|
|
223
|
+
if (this.matchesGlob(relativePath, pattern)) {
|
|
224
|
+
results.push({
|
|
225
|
+
path: filePath,
|
|
226
|
+
is_dir: false,
|
|
227
|
+
size: fileData.content.join("\n").length,
|
|
228
|
+
modified_at: fileData.modified_at,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return results;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Create or overwrite a file.
|
|
236
|
+
*
|
|
237
|
+
* @param filePath - Path for the new file
|
|
238
|
+
* @param content - Content to write
|
|
239
|
+
* @returns Result indicating success or failure
|
|
240
|
+
*/
|
|
241
|
+
write(filePath, content) {
|
|
242
|
+
const normalizedPath = this.normalizePath(filePath);
|
|
243
|
+
const now = new Date().toISOString();
|
|
244
|
+
const existingFile = this.state.files[normalizedPath];
|
|
245
|
+
this.state.files[normalizedPath] = {
|
|
246
|
+
content: content.split("\n"),
|
|
247
|
+
created_at: existingFile?.created_at ?? now,
|
|
248
|
+
modified_at: now,
|
|
249
|
+
};
|
|
250
|
+
return {
|
|
251
|
+
success: true,
|
|
252
|
+
path: normalizedPath,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Edit a file by replacing text.
|
|
257
|
+
*
|
|
258
|
+
* @param filePath - Path to the file to edit
|
|
259
|
+
* @param oldString - Text to find and replace
|
|
260
|
+
* @param newString - Replacement text
|
|
261
|
+
* @param replaceAll - If true, replace all occurrences
|
|
262
|
+
* @returns Result indicating success or failure
|
|
263
|
+
*/
|
|
264
|
+
edit(filePath, oldString, newString, replaceAll) {
|
|
265
|
+
const normalizedPath = this.normalizePath(filePath);
|
|
266
|
+
const fileData = this.state.files[normalizedPath];
|
|
267
|
+
if (!fileData) {
|
|
268
|
+
return {
|
|
269
|
+
success: false,
|
|
270
|
+
error: `File not found: ${filePath}`,
|
|
271
|
+
path: normalizedPath,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
const fullContent = fileData.content.join("\n");
|
|
275
|
+
const occurrences = fullContent.split(oldString).length - 1;
|
|
276
|
+
if (occurrences === 0) {
|
|
277
|
+
return {
|
|
278
|
+
success: false,
|
|
279
|
+
error: `String not found in file: "${oldString.slice(0, 50)}${oldString.length > 50 ? "..." : ""}"`,
|
|
280
|
+
path: normalizedPath,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
if (occurrences > 1 && !replaceAll) {
|
|
284
|
+
return {
|
|
285
|
+
success: false,
|
|
286
|
+
error: `Multiple occurrences (${occurrences}) found. Use replace_all=true to replace all.`,
|
|
287
|
+
path: normalizedPath,
|
|
288
|
+
occurrences,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
const newContent = replaceAll
|
|
292
|
+
? fullContent.replaceAll(oldString, newString)
|
|
293
|
+
: fullContent.replace(oldString, newString);
|
|
294
|
+
this.state.files[normalizedPath] = {
|
|
295
|
+
...fileData,
|
|
296
|
+
content: newContent.split("\n"),
|
|
297
|
+
modified_at: new Date().toISOString(),
|
|
298
|
+
};
|
|
299
|
+
return {
|
|
300
|
+
success: true,
|
|
301
|
+
path: normalizedPath,
|
|
302
|
+
occurrences: replaceAll ? occurrences : 1,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
// ===========================================================================
|
|
306
|
+
// Private Helpers
|
|
307
|
+
// ===========================================================================
|
|
308
|
+
/**
|
|
309
|
+
* Normalize a path to ensure consistent format.
|
|
310
|
+
* @internal
|
|
311
|
+
*/
|
|
312
|
+
normalizePath(path) {
|
|
313
|
+
// Ensure path starts with /
|
|
314
|
+
let normalized = path.startsWith("/") ? path : `/${path}`;
|
|
315
|
+
// Remove trailing slash for files
|
|
316
|
+
if (normalized.length > 1 && normalized.endsWith("/")) {
|
|
317
|
+
normalized = normalized.slice(0, -1);
|
|
318
|
+
}
|
|
319
|
+
// Collapse multiple slashes
|
|
320
|
+
normalized = normalized.replace(/\/+/g, "/");
|
|
321
|
+
return normalized;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Check if a path matches a glob pattern.
|
|
325
|
+
* Supports basic glob patterns: *, **, ?
|
|
326
|
+
* @internal
|
|
327
|
+
*/
|
|
328
|
+
matchesGlob(path, pattern) {
|
|
329
|
+
// Convert glob to regex using placeholder approach to avoid
|
|
330
|
+
// replacement conflicts with regex special chars
|
|
331
|
+
let regexPattern = pattern
|
|
332
|
+
// Escape special regex chars except * and ?
|
|
333
|
+
.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
334
|
+
// ** followed by / matches any path segments including empty
|
|
335
|
+
.replace(/\*\*\//g, "<<<GLOBSTAR_SLASH>>>")
|
|
336
|
+
// ** at end matches any remaining path
|
|
337
|
+
.replace(/\*\*/g, "<<<GLOBSTAR>>>")
|
|
338
|
+
// * matches anything except /
|
|
339
|
+
.replace(/\*/g, "[^/]*")
|
|
340
|
+
// ? matches single char except /
|
|
341
|
+
.replace(/\?/g, "[^/]")
|
|
342
|
+
// Now restore globstars with actual regex
|
|
343
|
+
.replace(/<<<GLOBSTAR_SLASH>>>/g, "(?:.*/)?")
|
|
344
|
+
.replace(/<<<GLOBSTAR>>>/g, ".*");
|
|
345
|
+
// Anchor the pattern
|
|
346
|
+
regexPattern = `^${regexPattern}$`;
|
|
347
|
+
return new RegExp(regexPattern).test(path);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
// =============================================================================
|
|
351
|
+
// Factory Function
|
|
352
|
+
// =============================================================================
|
|
353
|
+
/**
|
|
354
|
+
* Create a StateBackend factory function.
|
|
355
|
+
*
|
|
356
|
+
* This is useful when you need to defer backend creation until state is available,
|
|
357
|
+
* such as when integrating with the agent system.
|
|
358
|
+
*
|
|
359
|
+
* @returns A factory function that creates a StateBackend from AgentState
|
|
360
|
+
*
|
|
361
|
+
* @example
|
|
362
|
+
* ```typescript
|
|
363
|
+
* const backendFactory = createStateBackend();
|
|
364
|
+
*
|
|
365
|
+
* // Later, when state is available:
|
|
366
|
+
* const state: AgentState = { todos: [], files: {} };
|
|
367
|
+
* const backend = backendFactory(state);
|
|
368
|
+
* ```
|
|
369
|
+
*
|
|
370
|
+
* @category Backend
|
|
371
|
+
*/
|
|
372
|
+
export function createStateBackend() {
|
|
373
|
+
return (state) => new StateBackend(state);
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Create a new empty AgentState.
|
|
377
|
+
*
|
|
378
|
+
* Convenience function to create a fresh state for testing or initialization.
|
|
379
|
+
*
|
|
380
|
+
* @returns A new AgentState with empty todos and files
|
|
381
|
+
*
|
|
382
|
+
* @example
|
|
383
|
+
* ```typescript
|
|
384
|
+
* const state = createAgentState();
|
|
385
|
+
* const backend = new StateBackend(state);
|
|
386
|
+
* ```
|
|
387
|
+
*
|
|
388
|
+
* @category Backend
|
|
389
|
+
*/
|
|
390
|
+
export function createAgentState() {
|
|
391
|
+
return {
|
|
392
|
+
todos: [],
|
|
393
|
+
files: {},
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/backends/state.ts"],"names":[],"mappings":"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"}
|