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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +182 -0
  3. package/dist/cli/commands/auth.d.ts +18 -0
  4. package/dist/cli/commands/auth.d.ts.map +1 -0
  5. package/dist/cli/commands/auth.js +128 -0
  6. package/dist/cli/commands/auth.js.map +1 -0
  7. package/dist/cli/commands/chat-agent.d.ts +18 -0
  8. package/dist/cli/commands/chat-agent.d.ts.map +1 -0
  9. package/dist/cli/commands/chat-agent.js +421 -0
  10. package/dist/cli/commands/chat-agent.js.map +1 -0
  11. package/dist/cli/commands/edit-agent.d.ts +10 -0
  12. package/dist/cli/commands/edit-agent.d.ts.map +1 -0
  13. package/dist/cli/commands/edit-agent.js +310 -0
  14. package/dist/cli/commands/edit-agent.js.map +1 -0
  15. package/dist/cli/commands/task-agent.d.ts +126 -0
  16. package/dist/cli/commands/task-agent.d.ts.map +1 -0
  17. package/dist/cli/commands/task-agent.js +345 -0
  18. package/dist/cli/commands/task-agent.js.map +1 -0
  19. package/dist/core/agent/agent-prompt.d.ts +47 -0
  20. package/dist/core/agent/agent-prompt.d.ts.map +1 -0
  21. package/dist/core/agent/agent-prompt.js +146 -0
  22. package/dist/core/agent/agent-prompt.js.map +1 -0
  23. package/dist/core/agent/agent-runner.d.ts +63 -0
  24. package/dist/core/agent/agent-runner.d.ts.map +1 -0
  25. package/dist/core/agent/agent-runner.js +346 -0
  26. package/dist/core/agent/agent-runner.js.map +1 -0
  27. package/dist/core/agent/agent-service.d.ts +164 -0
  28. package/dist/core/agent/agent-service.d.ts.map +1 -0
  29. package/dist/core/agent/agent-service.js +463 -0
  30. package/dist/core/agent/agent-service.js.map +1 -0
  31. package/dist/core/agent/gmail-agent.d.ts +17 -0
  32. package/dist/core/agent/gmail-agent.d.ts.map +1 -0
  33. package/dist/core/agent/gmail-agent.js +191 -0
  34. package/dist/core/agent/gmail-agent.js.map +1 -0
  35. package/dist/core/agent/prompts/default/v1.d.ts +2 -0
  36. package/dist/core/agent/prompts/default/v1.d.ts.map +1 -0
  37. package/dist/core/agent/prompts/default/v1.js +202 -0
  38. package/dist/core/agent/prompts/default/v1.js.map +1 -0
  39. package/dist/core/agent/prompts/default/v2.d.ts +2 -0
  40. package/dist/core/agent/prompts/default/v2.d.ts.map +1 -0
  41. package/dist/core/agent/prompts/default/v2.js +72 -0
  42. package/dist/core/agent/prompts/default/v2.js.map +1 -0
  43. package/dist/core/agent/prompts/gmail/v1.d.ts +2 -0
  44. package/dist/core/agent/prompts/gmail/v1.d.ts.map +1 -0
  45. package/dist/core/agent/prompts/gmail/v1.js +206 -0
  46. package/dist/core/agent/prompts/gmail/v1.js.map +1 -0
  47. package/dist/core/agent/prompts/gmail/v2.d.ts +2 -0
  48. package/dist/core/agent/prompts/gmail/v2.d.ts.map +1 -0
  49. package/dist/core/agent/prompts/gmail/v2.js +59 -0
  50. package/dist/core/agent/prompts/gmail/v2.js.map +1 -0
  51. package/dist/core/agent/tools/base-tool.d.ts +161 -0
  52. package/dist/core/agent/tools/base-tool.d.ts.map +1 -0
  53. package/dist/core/agent/tools/base-tool.js +153 -0
  54. package/dist/core/agent/tools/base-tool.js.map +1 -0
  55. package/dist/core/agent/tools/fs-tools.d.ts +21 -0
  56. package/dist/core/agent/tools/fs-tools.d.ts.map +1 -0
  57. package/dist/core/agent/tools/fs-tools.js +1210 -0
  58. package/dist/core/agent/tools/fs-tools.js.map +1 -0
  59. package/dist/core/agent/tools/git-tools.d.ts +63 -0
  60. package/dist/core/agent/tools/git-tools.d.ts.map +1 -0
  61. package/dist/core/agent/tools/git-tools.js +600 -0
  62. package/dist/core/agent/tools/git-tools.js.map +1 -0
  63. package/dist/core/agent/tools/gmail-tools.d.ts +22 -0
  64. package/dist/core/agent/tools/gmail-tools.d.ts.map +1 -0
  65. package/dist/core/agent/tools/gmail-tools.js +779 -0
  66. package/dist/core/agent/tools/gmail-tools.js.map +1 -0
  67. package/dist/core/agent/tools/register-tools.d.ts +13 -0
  68. package/dist/core/agent/tools/register-tools.d.ts.map +1 -0
  69. package/dist/core/agent/tools/register-tools.js +169 -0
  70. package/dist/core/agent/tools/register-tools.js.map +1 -0
  71. package/dist/core/agent/tools/shell-tools.d.ts +19 -0
  72. package/dist/core/agent/tools/shell-tools.d.ts.map +1 -0
  73. package/dist/core/agent/tools/shell-tools.js +367 -0
  74. package/dist/core/agent/tools/shell-tools.js.map +1 -0
  75. package/dist/core/agent/tools/tool-registry.d.ts +62 -0
  76. package/dist/core/agent/tools/tool-registry.d.ts.map +1 -0
  77. package/dist/core/agent/tools/tool-registry.js +187 -0
  78. package/dist/core/agent/tools/tool-registry.js.map +1 -0
  79. package/dist/core/agent/tools/web-search-tools.d.ts +39 -0
  80. package/dist/core/agent/tools/web-search-tools.d.ts.map +1 -0
  81. package/dist/core/agent/tools/web-search-tools.js +220 -0
  82. package/dist/core/agent/tools/web-search-tools.js.map +1 -0
  83. package/dist/core/types/errors.d.ts +300 -0
  84. package/dist/core/types/errors.d.ts.map +1 -0
  85. package/dist/core/types/errors.js +115 -0
  86. package/dist/core/types/errors.js.map +1 -0
  87. package/dist/core/types/index.d.ts +208 -0
  88. package/dist/core/types/index.d.ts.map +1 -0
  89. package/dist/core/types/index.js +30 -0
  90. package/dist/core/types/index.js.map +1 -0
  91. package/dist/core/utils/error-handler.d.ts +114 -0
  92. package/dist/core/utils/error-handler.d.ts.map +1 -0
  93. package/dist/core/utils/error-handler.js +551 -0
  94. package/dist/core/utils/error-handler.js.map +1 -0
  95. package/dist/core/utils/markdown-renderer.d.ts +52 -0
  96. package/dist/core/utils/markdown-renderer.d.ts.map +1 -0
  97. package/dist/core/utils/markdown-renderer.js +134 -0
  98. package/dist/core/utils/markdown-renderer.js.map +1 -0
  99. package/dist/main.d.ts +3 -0
  100. package/dist/main.d.ts.map +1 -0
  101. package/dist/main.js +255 -0
  102. package/dist/main.js.map +1 -0
  103. package/dist/services/config.d.ts +29 -0
  104. package/dist/services/config.d.ts.map +1 -0
  105. package/dist/services/config.js +204 -0
  106. package/dist/services/config.js.map +1 -0
  107. package/dist/services/gmail.d.ts +197 -0
  108. package/dist/services/gmail.d.ts.map +1 -0
  109. package/dist/services/gmail.js +592 -0
  110. package/dist/services/gmail.js.map +1 -0
  111. package/dist/services/llm/ai-sdk-service.d.ts +5 -0
  112. package/dist/services/llm/ai-sdk-service.d.ts.map +1 -0
  113. package/dist/services/llm/ai-sdk-service.js +326 -0
  114. package/dist/services/llm/ai-sdk-service.js.map +1 -0
  115. package/dist/services/llm/context-manager.d.ts +51 -0
  116. package/dist/services/llm/context-manager.d.ts.map +1 -0
  117. package/dist/services/llm/context-manager.js +269 -0
  118. package/dist/services/llm/context-manager.js.map +1 -0
  119. package/dist/services/llm/types.d.ts +114 -0
  120. package/dist/services/llm/types.d.ts.map +1 -0
  121. package/dist/services/llm/types.js +51 -0
  122. package/dist/services/llm/types.js.map +1 -0
  123. package/dist/services/logger.d.ts +28 -0
  124. package/dist/services/logger.d.ts.map +1 -0
  125. package/dist/services/logger.js +267 -0
  126. package/dist/services/logger.js.map +1 -0
  127. package/dist/services/shell.d.ts +37 -0
  128. package/dist/services/shell.d.ts.map +1 -0
  129. package/dist/services/shell.js +197 -0
  130. package/dist/services/shell.js.map +1 -0
  131. package/dist/services/storage/file.d.ts +37 -0
  132. package/dist/services/storage/file.d.ts.map +1 -0
  133. package/dist/services/storage/file.js +221 -0
  134. package/dist/services/storage/file.js.map +1 -0
  135. package/dist/services/storage/inMemory.d.ts +25 -0
  136. package/dist/services/storage/inMemory.d.ts.map +1 -0
  137. package/dist/services/storage/inMemory.js +106 -0
  138. package/dist/services/storage/inMemory.js.map +1 -0
  139. package/dist/services/storage/service.d.ts +26 -0
  140. package/dist/services/storage/service.d.ts.map +1 -0
  141. package/dist/services/storage/service.js +48 -0
  142. package/dist/services/storage/service.js.map +1 -0
  143. 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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"}