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,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileSystemContextServiceTag = void 0;
|
|
4
|
+
exports.createFileSystemContextServiceLayer = createFileSystemContextServiceLayer;
|
|
5
|
+
const platform_1 = require("@effect/platform");
|
|
6
|
+
const child_process_1 = require("child_process");
|
|
7
|
+
const effect_1 = require("effect");
|
|
8
|
+
exports.FileSystemContextServiceTag = effect_1.Context.GenericTag("FileSystemContextService");
|
|
9
|
+
/**
|
|
10
|
+
* filesystem context service that tracks a working directory per agent/conversation.
|
|
11
|
+
* Falls back to process.cwd() when no directory was set.
|
|
12
|
+
*/
|
|
13
|
+
function createFileSystemContextServiceLayer() {
|
|
14
|
+
return effect_1.Layer.effect(exports.FileSystemContextServiceTag, effect_1.Effect.gen(function* () {
|
|
15
|
+
const fs = yield* platform_1.FileSystem.FileSystem;
|
|
16
|
+
// Map key: agentId|conversationId? -> cwd
|
|
17
|
+
const cwdByKey = new Map();
|
|
18
|
+
function makeKey(key) {
|
|
19
|
+
return key.conversationId ? `${key.agentId}:${key.conversationId}` : key.agentId;
|
|
20
|
+
}
|
|
21
|
+
function normalize(p) {
|
|
22
|
+
// Handle quoted paths first: '"Application Support"' -> 'Application Support'
|
|
23
|
+
let normalized = p;
|
|
24
|
+
if ((normalized.startsWith('"') && normalized.endsWith('"')) ||
|
|
25
|
+
(normalized.startsWith("'") && normalized.endsWith("'"))) {
|
|
26
|
+
normalized = normalized.slice(1, -1);
|
|
27
|
+
}
|
|
28
|
+
// Remove shell escaping for all characters (spaces, path separators, etc.)
|
|
29
|
+
// Handle backslash-escaped characters: "Application\\ Support" -> "Application Support"
|
|
30
|
+
// Handle backslash-escaped path separators: "path\\to\\file" -> "path/to/file"
|
|
31
|
+
normalized = normalized.replace(/\\(.)/g, "$1");
|
|
32
|
+
return normalized;
|
|
33
|
+
}
|
|
34
|
+
function escapeForShell(path) {
|
|
35
|
+
// Escape paths for safe use in shell commands
|
|
36
|
+
// If the path contains spaces or special characters, wrap in quotes
|
|
37
|
+
if (path.includes(" ") ||
|
|
38
|
+
path.includes("(") ||
|
|
39
|
+
path.includes(")") ||
|
|
40
|
+
path.includes("&") ||
|
|
41
|
+
path.includes("|")) {
|
|
42
|
+
// If already quoted, don't double-quote
|
|
43
|
+
if ((path.startsWith('"') && path.endsWith('"')) ||
|
|
44
|
+
(path.startsWith("'") && path.endsWith("'"))) {
|
|
45
|
+
return path;
|
|
46
|
+
}
|
|
47
|
+
return `"${path.replace(/"/g, '\\"')}"`;
|
|
48
|
+
}
|
|
49
|
+
return path;
|
|
50
|
+
}
|
|
51
|
+
function findDirectoryByName(startPath, targetName, maxDepth) {
|
|
52
|
+
return effect_1.Effect.gen(function* () {
|
|
53
|
+
// Use system find command for efficiency
|
|
54
|
+
const command = `find ${escapeForShell(startPath)} -maxdepth ${maxDepth} -type d -iname "*${targetName}*"`;
|
|
55
|
+
const result = yield* effect_1.Effect.promise(() => new Promise((resolve, reject) => {
|
|
56
|
+
const child = (0, child_process_1.spawn)("sh", ["-c", command], {
|
|
57
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
58
|
+
timeout: 10000,
|
|
59
|
+
});
|
|
60
|
+
let stdout = "";
|
|
61
|
+
let stderr = "";
|
|
62
|
+
if (child.stdout) {
|
|
63
|
+
child.stdout.on("data", (data) => {
|
|
64
|
+
stdout += data.toString();
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (child.stderr) {
|
|
68
|
+
child.stderr.on("data", (data) => {
|
|
69
|
+
stderr += data.toString();
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
child.on("close", (code) => {
|
|
73
|
+
resolve({
|
|
74
|
+
stdout: stdout.trim(),
|
|
75
|
+
stderr: stderr.trim(),
|
|
76
|
+
exitCode: code || 0,
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
child.on("error", (error) => {
|
|
80
|
+
reject(error);
|
|
81
|
+
});
|
|
82
|
+
})).pipe(effect_1.Effect.catchAll((error) => effect_1.Effect.succeed({
|
|
83
|
+
stdout: "",
|
|
84
|
+
stderr: error.message,
|
|
85
|
+
exitCode: 1,
|
|
86
|
+
})));
|
|
87
|
+
// Parse results and sort
|
|
88
|
+
const results = result.stdout
|
|
89
|
+
.split("\n")
|
|
90
|
+
.filter((line) => line.trim())
|
|
91
|
+
.sort();
|
|
92
|
+
const warnings = [];
|
|
93
|
+
// If no results and exit code is non-zero, capture the error for LLM interpretation
|
|
94
|
+
if (result.exitCode !== 0 && result.stderr) {
|
|
95
|
+
warnings.push(`Find command encountered issues: ${result.stderr}`);
|
|
96
|
+
}
|
|
97
|
+
// If we got no results but no explicit error, provide context
|
|
98
|
+
if (results.length === 0 && result.exitCode === 0) {
|
|
99
|
+
warnings.push(`No directories found matching "${targetName}" in ${startPath} (max depth: ${maxDepth})`);
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
results,
|
|
103
|
+
...(warnings.length > 0 && { warnings }),
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
const service = {
|
|
108
|
+
getCwd: (key) => effect_1.Effect.sync(() => cwdByKey.get(makeKey(key)) ?? process.cwd()),
|
|
109
|
+
setCwd: (key, path) => effect_1.Effect.gen(function* () {
|
|
110
|
+
const target = normalize(path);
|
|
111
|
+
// Check if the directory exists and is a directory
|
|
112
|
+
const statResult = yield* fs
|
|
113
|
+
.stat(target)
|
|
114
|
+
.pipe(effect_1.Effect.catchAll(() => effect_1.Effect.succeed(null)));
|
|
115
|
+
if (!statResult) {
|
|
116
|
+
return yield* effect_1.Effect.fail(new Error(`Directory does not exist: ${target}`));
|
|
117
|
+
}
|
|
118
|
+
const isDir = statResult.type === "Directory";
|
|
119
|
+
if (!isDir) {
|
|
120
|
+
return yield* effect_1.Effect.fail(new Error(`Not a directory: ${target}`));
|
|
121
|
+
}
|
|
122
|
+
cwdByKey.set(makeKey(key), target);
|
|
123
|
+
}),
|
|
124
|
+
resolvePath: (key, path, options = {}) => effect_1.Effect.gen(function* () {
|
|
125
|
+
const base = cwdByKey.get(makeKey(key)) ?? process.cwd();
|
|
126
|
+
// Normalize the path first
|
|
127
|
+
const normalizedPath = normalize(path);
|
|
128
|
+
// Check if it's an absolute path (after normalization)
|
|
129
|
+
const resolved = normalizedPath.startsWith("/")
|
|
130
|
+
? normalizedPath
|
|
131
|
+
: `${base}/${normalizedPath}`;
|
|
132
|
+
// If skipExistenceCheck is true, return the resolved path without checking existence
|
|
133
|
+
if (options.skipExistenceCheck) {
|
|
134
|
+
return resolved;
|
|
135
|
+
}
|
|
136
|
+
// Check if the resolved path exists
|
|
137
|
+
const statResult = yield* fs
|
|
138
|
+
.stat(resolved)
|
|
139
|
+
.pipe(effect_1.Effect.catchAll(() => effect_1.Effect.succeed(null)));
|
|
140
|
+
if (statResult) {
|
|
141
|
+
return resolved;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// If it's a relative path and doesn't exist, try to find similar directories
|
|
145
|
+
if (!normalizedPath.startsWith("/")) {
|
|
146
|
+
const pathParts = normalizedPath.split("/");
|
|
147
|
+
const targetName = pathParts[pathParts.length - 1];
|
|
148
|
+
if (targetName) {
|
|
149
|
+
// Search for directories with similar names
|
|
150
|
+
const found = yield* findDirectoryByName(base, targetName, 3);
|
|
151
|
+
if (found.results.length > 0) {
|
|
152
|
+
const suggestion = found.results[0];
|
|
153
|
+
throw new Error(`Path not found: ${resolved}\n` +
|
|
154
|
+
`Did you mean: ${suggestion}?\n` +
|
|
155
|
+
`Found ${found.results.length} similar directory${found.results.length > 1 ? "ies" : "y"}: ${found.results.join(", ")}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return yield* effect_1.Effect.fail(new Error(`Path not found: ${resolved}`));
|
|
160
|
+
}
|
|
161
|
+
}),
|
|
162
|
+
findDirectory: (key, name, maxDepth = 3) => effect_1.Effect.gen(function* () {
|
|
163
|
+
const base = cwdByKey.get(makeKey(key)) ?? process.cwd();
|
|
164
|
+
return yield* findDirectoryByName(base, name, maxDepth);
|
|
165
|
+
}),
|
|
166
|
+
resolvePathForMkdir: (key, path) => effect_1.Effect.gen(function* () {
|
|
167
|
+
const base = cwdByKey.get(makeKey(key)) ?? process.cwd();
|
|
168
|
+
// Normalize the path first
|
|
169
|
+
const normalizedPath = normalize(path);
|
|
170
|
+
// Check if it's an absolute path (after normalization)
|
|
171
|
+
const resolved = normalizedPath.startsWith("/")
|
|
172
|
+
? normalizedPath
|
|
173
|
+
: `${base}/${normalizedPath}`;
|
|
174
|
+
// For mkdir, we need to check if the parent directory exists
|
|
175
|
+
const parentDir = resolved.substring(0, resolved.lastIndexOf("/"));
|
|
176
|
+
// If parentDir is empty, it means we're creating in root
|
|
177
|
+
if (parentDir === "") {
|
|
178
|
+
return resolved;
|
|
179
|
+
}
|
|
180
|
+
// Check if the parent directory exists
|
|
181
|
+
const parentStatResult = yield* fs
|
|
182
|
+
.stat(parentDir)
|
|
183
|
+
.pipe(effect_1.Effect.catchAll(() => effect_1.Effect.succeed(null)));
|
|
184
|
+
if (!parentStatResult) {
|
|
185
|
+
return yield* effect_1.Effect.fail(new Error(`Cannot create directory '${resolved}': parent directory '${parentDir}' does not exist. Use recursive=true to create parent directories.`));
|
|
186
|
+
}
|
|
187
|
+
if (parentStatResult.type !== "Directory") {
|
|
188
|
+
return yield* effect_1.Effect.fail(new Error(`Cannot create directory '${resolved}': '${parentDir}' is not a directory.`));
|
|
189
|
+
}
|
|
190
|
+
return resolved;
|
|
191
|
+
}),
|
|
192
|
+
escapePath: (path) => escapeForShell(path),
|
|
193
|
+
};
|
|
194
|
+
return service;
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/services/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { FileSystem } from "@effect/platform";
|
|
2
|
+
import { Effect, Layer } from "effect";
|
|
3
|
+
import { StorageError, StorageNotFoundError } from "../../core/types/errors";
|
|
4
|
+
import type { Agent, AgentResult, Automation, TaskResult } from "../../core/types/index";
|
|
5
|
+
import { type StorageService } from "./service";
|
|
6
|
+
export declare class FileStorageService implements StorageService {
|
|
7
|
+
private readonly basePath;
|
|
8
|
+
private readonly fs;
|
|
9
|
+
constructor(basePath: string, fs: FileSystem.FileSystem);
|
|
10
|
+
private getAgentPath;
|
|
11
|
+
private getAgentsDir;
|
|
12
|
+
private getAutomationPath;
|
|
13
|
+
private getAutomationsDir;
|
|
14
|
+
private getTaskResultsPath;
|
|
15
|
+
private getTaskResultsDir;
|
|
16
|
+
private getAgentResultsPath;
|
|
17
|
+
private getAgentResultsDir;
|
|
18
|
+
private ensureDirectoryExists;
|
|
19
|
+
private readJsonFile;
|
|
20
|
+
private readAgentFile;
|
|
21
|
+
private writeJsonFile;
|
|
22
|
+
private listJsonFiles;
|
|
23
|
+
saveAgent(agent: Agent): Effect.Effect<void, StorageError>;
|
|
24
|
+
getAgent(id: string): Effect.Effect<Agent, StorageError | StorageNotFoundError>;
|
|
25
|
+
listAgents(): Effect.Effect<readonly Agent[], StorageError>;
|
|
26
|
+
deleteAgent(id: string): Effect.Effect<void, StorageError | StorageNotFoundError>;
|
|
27
|
+
saveAutomation(automation: Automation): Effect.Effect<void, StorageError>;
|
|
28
|
+
getAutomation(id: string): Effect.Effect<Automation, StorageError | StorageNotFoundError>;
|
|
29
|
+
listAutomations(): Effect.Effect<readonly Automation[], StorageError>;
|
|
30
|
+
deleteAutomation(id: string): Effect.Effect<void, StorageError | StorageNotFoundError>;
|
|
31
|
+
saveTaskResult(result: TaskResult): Effect.Effect<void, StorageError>;
|
|
32
|
+
getTaskResults(taskId: string): Effect.Effect<readonly TaskResult[], StorageError>;
|
|
33
|
+
saveAgentResult(result: AgentResult): Effect.Effect<void, StorageError>;
|
|
34
|
+
getAgentResults(agentId: string): Effect.Effect<readonly AgentResult[], StorageError>;
|
|
35
|
+
}
|
|
36
|
+
export declare function createFileStorageLayer(basePath: string): Layer.Layer<StorageService, never, FileSystem.FileSystem>;
|
|
37
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/services/storage/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAEnE,qBAAa,kBAAmB,YAAW,cAAc;IAErD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBADF,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,UAAU,CAAC,UAAU;IAG5C,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,aAAa;IAmBrB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;IAW1D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,oBAAoB,CAAC;IAK/E,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,EAAE,EAAE,YAAY,CAAC;IAsB3D,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,CAAC;IAwBjF,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;IAWzE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,GAAG,oBAAoB,CAAC;IAKzF,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,UAAU,EAAE,EAAE,YAAY,CAAC;IAsBrE,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,CAAC;IAuBtF,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;IAiBrE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,UAAU,EAAE,EAAE,YAAY,CAAC;IAKlF,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;IAiBvE,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,EAAE,EAAE,YAAY,CAAC;CAItF;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,GACf,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CAQ3D"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileStorageService = void 0;
|
|
4
|
+
exports.createFileStorageLayer = createFileStorageLayer;
|
|
5
|
+
const platform_1 = require("@effect/platform");
|
|
6
|
+
const effect_1 = require("effect");
|
|
7
|
+
const errors_1 = require("../../core/types/errors");
|
|
8
|
+
const service_1 = require("./service");
|
|
9
|
+
class FileStorageService {
|
|
10
|
+
basePath;
|
|
11
|
+
fs;
|
|
12
|
+
constructor(basePath, fs) {
|
|
13
|
+
this.basePath = basePath;
|
|
14
|
+
this.fs = fs;
|
|
15
|
+
}
|
|
16
|
+
getAgentPath(id) {
|
|
17
|
+
return `${this.basePath}/agents/${id}.json`;
|
|
18
|
+
}
|
|
19
|
+
getAgentsDir() {
|
|
20
|
+
return `${this.basePath}/agents`;
|
|
21
|
+
}
|
|
22
|
+
getAutomationPath(id) {
|
|
23
|
+
return `${this.basePath}/automations/${id}.json`;
|
|
24
|
+
}
|
|
25
|
+
getAutomationsDir() {
|
|
26
|
+
return `${this.basePath}/automations`;
|
|
27
|
+
}
|
|
28
|
+
getTaskResultsPath(taskId) {
|
|
29
|
+
return `${this.basePath}/task-results/${taskId}.json`;
|
|
30
|
+
}
|
|
31
|
+
getTaskResultsDir() {
|
|
32
|
+
return `${this.basePath}/task-results`;
|
|
33
|
+
}
|
|
34
|
+
getAgentResultsPath(agentId) {
|
|
35
|
+
return `${this.basePath}/agent-results/${agentId}.json`;
|
|
36
|
+
}
|
|
37
|
+
getAgentResultsDir() {
|
|
38
|
+
return `${this.basePath}/agent-results`;
|
|
39
|
+
}
|
|
40
|
+
ensureDirectoryExists(path) {
|
|
41
|
+
return effect_1.Effect.gen(function* () {
|
|
42
|
+
yield* this.fs.makeDirectory(path, { recursive: true }).pipe(effect_1.Effect.mapError((error) => new errors_1.StorageError({
|
|
43
|
+
operation: "mkdir",
|
|
44
|
+
path,
|
|
45
|
+
reason: `Failed to create directory: ${String(error)}`,
|
|
46
|
+
})), effect_1.Effect.catchAll(() => effect_1.Effect.void));
|
|
47
|
+
}.bind(this));
|
|
48
|
+
}
|
|
49
|
+
readJsonFile(path) {
|
|
50
|
+
return effect_1.Effect.gen(function* () {
|
|
51
|
+
const content = yield* this.fs.readFileString(path).pipe(effect_1.Effect.mapError((error) => new errors_1.StorageError({
|
|
52
|
+
operation: "read",
|
|
53
|
+
path,
|
|
54
|
+
reason: `Failed to read file: ${String(error.message)}`,
|
|
55
|
+
})));
|
|
56
|
+
return JSON.parse(content);
|
|
57
|
+
}.bind(this));
|
|
58
|
+
}
|
|
59
|
+
readAgentFile(path) {
|
|
60
|
+
return effect_1.Effect.gen(function* () {
|
|
61
|
+
const content = yield* this.fs.readFileString(path).pipe(effect_1.Effect.mapError((error) => new errors_1.StorageError({
|
|
62
|
+
operation: "read",
|
|
63
|
+
path,
|
|
64
|
+
reason: `Failed to read file: ${String(error.message)}`,
|
|
65
|
+
})));
|
|
66
|
+
const rawData = JSON.parse(content);
|
|
67
|
+
// Convert date strings back to Date objects
|
|
68
|
+
const agent = {
|
|
69
|
+
...rawData,
|
|
70
|
+
createdAt: new Date(rawData.createdAt),
|
|
71
|
+
updatedAt: new Date(rawData.updatedAt),
|
|
72
|
+
};
|
|
73
|
+
return agent;
|
|
74
|
+
}.bind(this));
|
|
75
|
+
}
|
|
76
|
+
writeJsonFile(path, data) {
|
|
77
|
+
return effect_1.Effect.gen(function* () {
|
|
78
|
+
const content = JSON.stringify(data, null, 2);
|
|
79
|
+
yield* this.fs.writeFileString(path, content).pipe(effect_1.Effect.mapError((error) => new errors_1.StorageError({
|
|
80
|
+
operation: "write",
|
|
81
|
+
path,
|
|
82
|
+
reason: `Failed to write file: ${String(error)}`,
|
|
83
|
+
})));
|
|
84
|
+
}.bind(this));
|
|
85
|
+
}
|
|
86
|
+
listJsonFiles(dir) {
|
|
87
|
+
return effect_1.Effect.gen(function* () {
|
|
88
|
+
yield* this.ensureDirectoryExists(dir);
|
|
89
|
+
const files = yield* this.fs.readDirectory(dir).pipe(effect_1.Effect.mapError((error) => new errors_1.StorageError({
|
|
90
|
+
operation: "list",
|
|
91
|
+
path: dir,
|
|
92
|
+
reason: `Failed to list directory: ${String(error)}`,
|
|
93
|
+
})));
|
|
94
|
+
return files.filter((file) => file.endsWith(".json"));
|
|
95
|
+
}.bind(this));
|
|
96
|
+
}
|
|
97
|
+
saveAgent(agent) {
|
|
98
|
+
return effect_1.Effect.gen(function* () {
|
|
99
|
+
const dir = this.getAgentsDir();
|
|
100
|
+
yield* this.ensureDirectoryExists(dir);
|
|
101
|
+
const path = this.getAgentPath(agent.id);
|
|
102
|
+
yield* this.writeJsonFile(path, agent);
|
|
103
|
+
}.bind(this));
|
|
104
|
+
}
|
|
105
|
+
getAgent(id) {
|
|
106
|
+
const path = this.getAgentPath(id);
|
|
107
|
+
return this.readAgentFile(path);
|
|
108
|
+
}
|
|
109
|
+
listAgents() {
|
|
110
|
+
return effect_1.Effect.gen(function* () {
|
|
111
|
+
const dir = this.getAgentsDir();
|
|
112
|
+
const files = yield* this.listJsonFiles(dir);
|
|
113
|
+
const agents = [];
|
|
114
|
+
for (const file of files) {
|
|
115
|
+
const path = `${dir}/${file}`;
|
|
116
|
+
const agent = yield* this.readAgentFile(path).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.void));
|
|
117
|
+
if (agent) {
|
|
118
|
+
agents.push(agent);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return agents;
|
|
122
|
+
}.bind(this));
|
|
123
|
+
}
|
|
124
|
+
deleteAgent(id) {
|
|
125
|
+
return effect_1.Effect.gen(function* () {
|
|
126
|
+
const path = this.getAgentPath(id);
|
|
127
|
+
yield* this.fs.remove(path).pipe(effect_1.Effect.mapError((error) => {
|
|
128
|
+
if (error instanceof Error &&
|
|
129
|
+
error.cause.code.includes("ENOENT")) {
|
|
130
|
+
return new errors_1.StorageNotFoundError({ path });
|
|
131
|
+
}
|
|
132
|
+
return new errors_1.StorageError({
|
|
133
|
+
operation: "delete",
|
|
134
|
+
path,
|
|
135
|
+
reason: `Failed to delete file: ${String(error)}`,
|
|
136
|
+
});
|
|
137
|
+
}));
|
|
138
|
+
}.bind(this));
|
|
139
|
+
}
|
|
140
|
+
saveAutomation(automation) {
|
|
141
|
+
return effect_1.Effect.gen(function* () {
|
|
142
|
+
const dir = this.getAutomationsDir();
|
|
143
|
+
yield* this.ensureDirectoryExists(dir);
|
|
144
|
+
const path = this.getAutomationPath(automation.id);
|
|
145
|
+
yield* this.writeJsonFile(path, automation);
|
|
146
|
+
}.bind(this));
|
|
147
|
+
}
|
|
148
|
+
getAutomation(id) {
|
|
149
|
+
const path = this.getAutomationPath(id);
|
|
150
|
+
return this.readJsonFile(path);
|
|
151
|
+
}
|
|
152
|
+
listAutomations() {
|
|
153
|
+
return effect_1.Effect.gen(function* () {
|
|
154
|
+
const dir = this.getAutomationsDir();
|
|
155
|
+
const files = yield* this.listJsonFiles(dir);
|
|
156
|
+
const automations = [];
|
|
157
|
+
for (const file of files) {
|
|
158
|
+
const path = `${dir}/${file}`;
|
|
159
|
+
const automation = yield* this.readJsonFile(path).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.void));
|
|
160
|
+
if (automation) {
|
|
161
|
+
automations.push(automation);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return automations;
|
|
165
|
+
}.bind(this));
|
|
166
|
+
}
|
|
167
|
+
deleteAutomation(id) {
|
|
168
|
+
return effect_1.Effect.gen(function* () {
|
|
169
|
+
const path = this.getAutomationPath(id);
|
|
170
|
+
yield* this.fs.remove(path).pipe(effect_1.Effect.mapError((error) => {
|
|
171
|
+
if (error instanceof Error &&
|
|
172
|
+
error.cause.code.includes("ENOENT")) {
|
|
173
|
+
return new errors_1.StorageNotFoundError({ path });
|
|
174
|
+
}
|
|
175
|
+
return new errors_1.StorageError({
|
|
176
|
+
operation: "delete",
|
|
177
|
+
path,
|
|
178
|
+
reason: `Failed to delete file: ${String(error)}`,
|
|
179
|
+
});
|
|
180
|
+
}));
|
|
181
|
+
}.bind(this));
|
|
182
|
+
}
|
|
183
|
+
saveTaskResult(result) {
|
|
184
|
+
return effect_1.Effect.gen(function* () {
|
|
185
|
+
const dir = this.getTaskResultsDir();
|
|
186
|
+
yield* this.ensureDirectoryExists(dir);
|
|
187
|
+
const path = this.getTaskResultsPath(result.taskId);
|
|
188
|
+
// Read existing results, append new one, write back
|
|
189
|
+
const existing = yield* this.readJsonFile(path).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.succeed([])));
|
|
190
|
+
const updated = [...existing, result];
|
|
191
|
+
yield* this.writeJsonFile(path, updated);
|
|
192
|
+
}.bind(this));
|
|
193
|
+
}
|
|
194
|
+
getTaskResults(taskId) {
|
|
195
|
+
const path = this.getTaskResultsPath(taskId);
|
|
196
|
+
return this.readJsonFile(path).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.succeed([])));
|
|
197
|
+
}
|
|
198
|
+
saveAgentResult(result) {
|
|
199
|
+
return effect_1.Effect.gen(function* () {
|
|
200
|
+
const dir = this.getAgentResultsDir();
|
|
201
|
+
yield* this.ensureDirectoryExists(dir);
|
|
202
|
+
const path = this.getAgentResultsPath(result.agentId);
|
|
203
|
+
// Read existing results, append new one, write back
|
|
204
|
+
const existing = yield* this.readJsonFile(path).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.succeed([])));
|
|
205
|
+
const updated = [...existing, result];
|
|
206
|
+
yield* this.writeJsonFile(path, updated);
|
|
207
|
+
}.bind(this));
|
|
208
|
+
}
|
|
209
|
+
getAgentResults(agentId) {
|
|
210
|
+
const path = this.getAgentResultsPath(agentId);
|
|
211
|
+
return this.readJsonFile(path).pipe(effect_1.Effect.catchAll(() => effect_1.Effect.succeed([])));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.FileStorageService = FileStorageService;
|
|
215
|
+
function createFileStorageLayer(basePath) {
|
|
216
|
+
return effect_1.Layer.effect(service_1.StorageServiceTag, effect_1.Effect.gen(function* () {
|
|
217
|
+
const fs = yield* platform_1.FileSystem.FileSystem;
|
|
218
|
+
return new FileStorageService(basePath, fs);
|
|
219
|
+
}));
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/services/storage/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Effect, Layer, Ref } from "effect";
|
|
2
|
+
import { StorageError, StorageNotFoundError } from "../../core/types/errors";
|
|
3
|
+
import type { Agent, AgentResult, Automation, TaskResult } from "../../core/types/index";
|
|
4
|
+
import { type StorageService } from "./service";
|
|
5
|
+
export declare class InMemoryStorageService implements StorageService {
|
|
6
|
+
private readonly agents;
|
|
7
|
+
private readonly automations;
|
|
8
|
+
private readonly taskResults;
|
|
9
|
+
private readonly agentResults;
|
|
10
|
+
constructor(agents: Ref.Ref<Map<string, Agent>>, automations: Ref.Ref<Map<string, Automation>>, taskResults: Ref.Ref<Map<string, TaskResult[]>>, agentResults: Ref.Ref<Map<string, AgentResult[]>>);
|
|
11
|
+
saveAgent(agent: Agent): Effect.Effect<void, StorageError>;
|
|
12
|
+
getAgent(id: string): Effect.Effect<Agent, StorageError | StorageNotFoundError>;
|
|
13
|
+
listAgents(): Effect.Effect<readonly Agent[], StorageError>;
|
|
14
|
+
deleteAgent(id: string): Effect.Effect<void, StorageError | StorageNotFoundError>;
|
|
15
|
+
saveAutomation(automation: Automation): Effect.Effect<void, StorageError>;
|
|
16
|
+
getAutomation(id: string): Effect.Effect<Automation, StorageError | StorageNotFoundError>;
|
|
17
|
+
listAutomations(): Effect.Effect<readonly Automation[], StorageError>;
|
|
18
|
+
deleteAutomation(id: string): Effect.Effect<void, StorageError | StorageNotFoundError>;
|
|
19
|
+
saveTaskResult(result: TaskResult): Effect.Effect<void, StorageError>;
|
|
20
|
+
getTaskResults(taskId: string): Effect.Effect<readonly TaskResult[], StorageError>;
|
|
21
|
+
saveAgentResult(result: AgentResult): Effect.Effect<void, StorageError>;
|
|
22
|
+
getAgentResults(agentId: string): Effect.Effect<readonly AgentResult[], StorageError>;
|
|
23
|
+
}
|
|
24
|
+
export declare function createInMemoryStorageLayer(): Layer.Layer<StorageService>;
|
|
25
|
+
//# sourceMappingURL=inMemory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inMemory.d.ts","sourceRoot":"","sources":["../../../src/services/storage/inMemory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAEnE,qBAAa,sBAAuB,YAAW,cAAc;IAEzD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAHZ,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EACnC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAC7C,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,EAC/C,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAGpE,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;IAI1D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,oBAAoB,CAAC;IAU/E,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,EAAE,EAAE,YAAY,CAAC;IAI3D,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,CAAC;IAajF,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;IAIzE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,GAAG,oBAAoB,CAAC;IAUzF,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,UAAU,EAAE,EAAE,YAAY,CAAC;IAIrE,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,oBAAoB,CAAC;IAatF,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;IASrE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,UAAU,EAAE,EAAE,YAAY,CAAC;IAIlF,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC;IASvE,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,EAAE,EAAE,YAAY,CAAC;CAGtF;AAED,wBAAgB,0BAA0B,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAYxE"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InMemoryStorageService = void 0;
|
|
4
|
+
exports.createInMemoryStorageLayer = createInMemoryStorageLayer;
|
|
5
|
+
const effect_1 = require("effect");
|
|
6
|
+
const errors_1 = require("../../core/types/errors");
|
|
7
|
+
const service_1 = require("./service");
|
|
8
|
+
class InMemoryStorageService {
|
|
9
|
+
agents;
|
|
10
|
+
automations;
|
|
11
|
+
taskResults;
|
|
12
|
+
agentResults;
|
|
13
|
+
constructor(agents, automations, taskResults, agentResults) {
|
|
14
|
+
this.agents = agents;
|
|
15
|
+
this.automations = automations;
|
|
16
|
+
this.taskResults = taskResults;
|
|
17
|
+
this.agentResults = agentResults;
|
|
18
|
+
}
|
|
19
|
+
saveAgent(agent) {
|
|
20
|
+
return effect_1.Ref.update(this.agents, (map) => new Map(map.set(agent.id, agent)));
|
|
21
|
+
}
|
|
22
|
+
getAgent(id) {
|
|
23
|
+
return effect_1.Effect.flatMap(effect_1.Ref.get(this.agents), (agents) => {
|
|
24
|
+
const agent = agents.get(id);
|
|
25
|
+
if (!agent) {
|
|
26
|
+
return effect_1.Effect.fail(new errors_1.StorageNotFoundError({ path: `agent:${id}` }));
|
|
27
|
+
}
|
|
28
|
+
return effect_1.Effect.succeed(agent);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
listAgents() {
|
|
32
|
+
return effect_1.Effect.map(effect_1.Ref.get(this.agents), (agents) => Array.from(agents.values()));
|
|
33
|
+
}
|
|
34
|
+
deleteAgent(id) {
|
|
35
|
+
return effect_1.Effect.flatMap(effect_1.Ref.get(this.agents), (agents) => {
|
|
36
|
+
if (!agents.has(id)) {
|
|
37
|
+
return effect_1.Effect.fail(new errors_1.StorageNotFoundError({ path: `agent:${id}` }));
|
|
38
|
+
}
|
|
39
|
+
return effect_1.Ref.update(this.agents, (map) => {
|
|
40
|
+
const newMap = new Map(map);
|
|
41
|
+
newMap.delete(id);
|
|
42
|
+
return newMap;
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
saveAutomation(automation) {
|
|
47
|
+
return effect_1.Ref.update(this.automations, (map) => new Map(map.set(automation.id, automation)));
|
|
48
|
+
}
|
|
49
|
+
getAutomation(id) {
|
|
50
|
+
return effect_1.Effect.flatMap(effect_1.Ref.get(this.automations), (automations) => {
|
|
51
|
+
const automation = automations.get(id);
|
|
52
|
+
if (!automation) {
|
|
53
|
+
return effect_1.Effect.fail(new errors_1.StorageNotFoundError({ path: `automation:${id}` }));
|
|
54
|
+
}
|
|
55
|
+
return effect_1.Effect.succeed(automation);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
listAutomations() {
|
|
59
|
+
return effect_1.Effect.map(effect_1.Ref.get(this.automations), (automations) => Array.from(automations.values()));
|
|
60
|
+
}
|
|
61
|
+
deleteAutomation(id) {
|
|
62
|
+
return effect_1.Effect.flatMap(effect_1.Ref.get(this.automations), (automations) => {
|
|
63
|
+
if (!automations.has(id)) {
|
|
64
|
+
return effect_1.Effect.fail(new errors_1.StorageNotFoundError({ path: `automation:${id}` }));
|
|
65
|
+
}
|
|
66
|
+
return effect_1.Ref.update(this.automations, (map) => {
|
|
67
|
+
const newMap = new Map(map);
|
|
68
|
+
newMap.delete(id);
|
|
69
|
+
return newMap;
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
saveTaskResult(result) {
|
|
74
|
+
return effect_1.Ref.update(this.taskResults, (map) => {
|
|
75
|
+
const newMap = new Map(map);
|
|
76
|
+
const existing = newMap.get(result.taskId) || [];
|
|
77
|
+
newMap.set(result.taskId, [...existing, result]);
|
|
78
|
+
return newMap;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
getTaskResults(taskId) {
|
|
82
|
+
return effect_1.Effect.map(effect_1.Ref.get(this.taskResults), (results) => results.get(taskId) || []);
|
|
83
|
+
}
|
|
84
|
+
saveAgentResult(result) {
|
|
85
|
+
return effect_1.Ref.update(this.agentResults, (map) => {
|
|
86
|
+
const newMap = new Map(map);
|
|
87
|
+
const existing = newMap.get(result.agentId) || [];
|
|
88
|
+
newMap.set(result.agentId, [...existing, result]);
|
|
89
|
+
return newMap;
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
getAgentResults(agentId) {
|
|
93
|
+
return effect_1.Effect.map(effect_1.Ref.get(this.agentResults), (results) => results.get(agentId) || []);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.InMemoryStorageService = InMemoryStorageService;
|
|
97
|
+
function createInMemoryStorageLayer() {
|
|
98
|
+
return effect_1.Layer.effect(service_1.StorageServiceTag, effect_1.Effect.gen(function* () {
|
|
99
|
+
const agents = yield* effect_1.Ref.make(new Map());
|
|
100
|
+
const automations = yield* effect_1.Ref.make(new Map());
|
|
101
|
+
const taskResults = yield* effect_1.Ref.make(new Map());
|
|
102
|
+
const agentResults = yield* effect_1.Ref.make(new Map());
|
|
103
|
+
return new InMemoryStorageService(agents, automations, taskResults, agentResults);
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=inMemory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inMemory.js","sourceRoot":"","sources":["../../../src/services/storage/inMemory.ts"],"names":[],"mappings":"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"}
|