@synergenius/flow-weaver-pack-weaver 0.9.0 → 0.9.3

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 (210) hide show
  1. package/dist/bot/ai-client.d.ts +22 -2
  2. package/dist/bot/ai-client.d.ts.map +1 -1
  3. package/dist/bot/ai-client.js +168 -20
  4. package/dist/bot/ai-client.js.map +1 -1
  5. package/dist/bot/assistant-core.d.ts +25 -0
  6. package/dist/bot/assistant-core.d.ts.map +1 -0
  7. package/dist/bot/assistant-core.js +265 -0
  8. package/dist/bot/assistant-core.js.map +1 -0
  9. package/dist/bot/assistant-tools.d.ts +9 -0
  10. package/dist/bot/assistant-tools.d.ts.map +1 -0
  11. package/dist/bot/assistant-tools.js +602 -0
  12. package/dist/bot/assistant-tools.js.map +1 -0
  13. package/dist/bot/audit-logger.d.ts.map +1 -1
  14. package/dist/bot/audit-logger.js +9 -5
  15. package/dist/bot/audit-logger.js.map +1 -1
  16. package/dist/bot/bot-manager.d.ts +49 -0
  17. package/dist/bot/bot-manager.d.ts.map +1 -0
  18. package/dist/bot/bot-manager.js +279 -0
  19. package/dist/bot/bot-manager.js.map +1 -0
  20. package/dist/bot/child-process-tracker.d.ts +6 -0
  21. package/dist/bot/child-process-tracker.d.ts.map +1 -0
  22. package/dist/bot/child-process-tracker.js +35 -0
  23. package/dist/bot/child-process-tracker.js.map +1 -0
  24. package/dist/bot/cli-provider.d.ts.map +1 -1
  25. package/dist/bot/cli-provider.js +13 -8
  26. package/dist/bot/cli-provider.js.map +1 -1
  27. package/dist/bot/conversation-store.d.ts +40 -0
  28. package/dist/bot/conversation-store.d.ts.map +1 -0
  29. package/dist/bot/conversation-store.js +182 -0
  30. package/dist/bot/conversation-store.js.map +1 -0
  31. package/dist/bot/error-guide.d.ts +10 -0
  32. package/dist/bot/error-guide.d.ts.map +1 -0
  33. package/dist/bot/error-guide.js +34 -0
  34. package/dist/bot/error-guide.js.map +1 -0
  35. package/dist/bot/knowledge-store.d.ts +17 -0
  36. package/dist/bot/knowledge-store.d.ts.map +1 -0
  37. package/dist/bot/knowledge-store.js +53 -0
  38. package/dist/bot/knowledge-store.js.map +1 -0
  39. package/dist/bot/retry-utils.d.ts +19 -0
  40. package/dist/bot/retry-utils.d.ts.map +1 -0
  41. package/dist/bot/retry-utils.js +64 -0
  42. package/dist/bot/retry-utils.js.map +1 -0
  43. package/dist/bot/runner.d.ts.map +1 -1
  44. package/dist/bot/runner.js +12 -1
  45. package/dist/bot/runner.js.map +1 -1
  46. package/dist/bot/session-state.d.ts.map +1 -1
  47. package/dist/bot/session-state.js +3 -1
  48. package/dist/bot/session-state.js.map +1 -1
  49. package/dist/bot/steering.js +1 -1
  50. package/dist/bot/steering.js.map +1 -1
  51. package/dist/bot/step-executor.d.ts +10 -5
  52. package/dist/bot/step-executor.d.ts.map +1 -1
  53. package/dist/bot/step-executor.js +252 -3
  54. package/dist/bot/step-executor.js.map +1 -1
  55. package/dist/bot/system-prompt.d.ts +1 -1
  56. package/dist/bot/system-prompt.d.ts.map +1 -1
  57. package/dist/bot/system-prompt.js +69 -43
  58. package/dist/bot/system-prompt.js.map +1 -1
  59. package/dist/bot/task-decomposer.d.ts +24 -0
  60. package/dist/bot/task-decomposer.d.ts.map +1 -0
  61. package/dist/bot/task-decomposer.js +75 -0
  62. package/dist/bot/task-decomposer.js.map +1 -0
  63. package/dist/bot/task-queue.d.ts +17 -4
  64. package/dist/bot/task-queue.d.ts.map +1 -1
  65. package/dist/bot/task-queue.js +95 -4
  66. package/dist/bot/task-queue.js.map +1 -1
  67. package/dist/bot/terminal-renderer.d.ts +60 -0
  68. package/dist/bot/terminal-renderer.d.ts.map +1 -0
  69. package/dist/bot/terminal-renderer.js +205 -0
  70. package/dist/bot/terminal-renderer.js.map +1 -0
  71. package/dist/bot/types.d.ts +7 -0
  72. package/dist/bot/types.d.ts.map +1 -1
  73. package/dist/bot/weaver-tools.d.ts +18 -0
  74. package/dist/bot/weaver-tools.d.ts.map +1 -0
  75. package/dist/bot/weaver-tools.js +215 -0
  76. package/dist/bot/weaver-tools.js.map +1 -0
  77. package/dist/cli-bridge.d.ts.map +1 -1
  78. package/dist/cli-bridge.js +5 -1
  79. package/dist/cli-bridge.js.map +1 -1
  80. package/dist/cli-handlers.d.ts +13 -1
  81. package/dist/cli-handlers.d.ts.map +1 -1
  82. package/dist/cli-handlers.js +616 -48
  83. package/dist/cli-handlers.js.map +1 -1
  84. package/dist/mcp-tools.js +2 -2
  85. package/dist/mcp-tools.js.map +1 -1
  86. package/dist/node-types/abort-task.d.ts.map +1 -1
  87. package/dist/node-types/abort-task.js +4 -3
  88. package/dist/node-types/abort-task.js.map +1 -1
  89. package/dist/node-types/agent-execute.d.ts +38 -0
  90. package/dist/node-types/agent-execute.d.ts.map +1 -0
  91. package/dist/node-types/agent-execute.js +256 -0
  92. package/dist/node-types/agent-execute.js.map +1 -0
  93. package/dist/node-types/bot-report.d.ts +5 -3
  94. package/dist/node-types/bot-report.d.ts.map +1 -1
  95. package/dist/node-types/bot-report.js +39 -7
  96. package/dist/node-types/bot-report.js.map +1 -1
  97. package/dist/node-types/build-context.d.ts +3 -3
  98. package/dist/node-types/build-context.d.ts.map +1 -1
  99. package/dist/node-types/build-context.js +108 -24
  100. package/dist/node-types/build-context.js.map +1 -1
  101. package/dist/node-types/detect-provider.d.ts +2 -2
  102. package/dist/node-types/detect-provider.d.ts.map +1 -1
  103. package/dist/node-types/detect-provider.js +3 -1
  104. package/dist/node-types/detect-provider.js.map +1 -1
  105. package/dist/node-types/exec-validate-retry.d.ts.map +1 -1
  106. package/dist/node-types/exec-validate-retry.js +43 -6
  107. package/dist/node-types/exec-validate-retry.js.map +1 -1
  108. package/dist/node-types/execute-plan.d.ts.map +1 -1
  109. package/dist/node-types/execute-plan.js +31 -8
  110. package/dist/node-types/execute-plan.js.map +1 -1
  111. package/dist/node-types/execute-target.d.ts.map +1 -1
  112. package/dist/node-types/execute-target.js +3 -1
  113. package/dist/node-types/execute-target.js.map +1 -1
  114. package/dist/node-types/fix-errors.d.ts.map +1 -1
  115. package/dist/node-types/fix-errors.js +21 -5
  116. package/dist/node-types/fix-errors.js.map +1 -1
  117. package/dist/node-types/genesis-observe.d.ts.map +1 -1
  118. package/dist/node-types/genesis-observe.js +3 -1
  119. package/dist/node-types/genesis-observe.js.map +1 -1
  120. package/dist/node-types/genesis-report.js +4 -1
  121. package/dist/node-types/genesis-report.js.map +1 -1
  122. package/dist/node-types/git-ops.d.ts.map +1 -1
  123. package/dist/node-types/git-ops.js +98 -4
  124. package/dist/node-types/git-ops.js.map +1 -1
  125. package/dist/node-types/index.d.ts +2 -0
  126. package/dist/node-types/index.d.ts.map +1 -1
  127. package/dist/node-types/index.js +2 -0
  128. package/dist/node-types/index.js.map +1 -1
  129. package/dist/node-types/load-config.d.ts +2 -2
  130. package/dist/node-types/load-config.d.ts.map +1 -1
  131. package/dist/node-types/load-config.js.map +1 -1
  132. package/dist/node-types/plan-task.d.ts.map +1 -1
  133. package/dist/node-types/plan-task.js +14 -2
  134. package/dist/node-types/plan-task.js.map +1 -1
  135. package/dist/node-types/read-workflow.js +8 -2
  136. package/dist/node-types/read-workflow.js.map +1 -1
  137. package/dist/node-types/receive-task.d.ts.map +1 -1
  138. package/dist/node-types/receive-task.js +35 -26
  139. package/dist/node-types/receive-task.js.map +1 -1
  140. package/dist/node-types/send-notify.js +2 -1
  141. package/dist/node-types/send-notify.js.map +1 -1
  142. package/dist/node-types/validate-gate.d.ts +18 -0
  143. package/dist/node-types/validate-gate.d.ts.map +1 -0
  144. package/dist/node-types/validate-gate.js +96 -0
  145. package/dist/node-types/validate-gate.js.map +1 -0
  146. package/dist/workflows/genesis-task.d.ts +20 -12
  147. package/dist/workflows/genesis-task.d.ts.map +1 -1
  148. package/dist/workflows/genesis-task.js +20 -12
  149. package/dist/workflows/genesis-task.js.map +1 -1
  150. package/dist/workflows/weaver-agent.d.ts +35 -0
  151. package/dist/workflows/weaver-agent.d.ts.map +1 -0
  152. package/dist/workflows/weaver-agent.js +777 -0
  153. package/dist/workflows/weaver-agent.js.map +1 -0
  154. package/dist/workflows/weaver-bot-batch.d.ts +19 -26
  155. package/dist/workflows/weaver-bot-batch.d.ts.map +1 -1
  156. package/dist/workflows/weaver-bot-batch.js +1043 -27
  157. package/dist/workflows/weaver-bot-batch.js.map +1 -1
  158. package/dist/workflows/weaver-bot.d.ts +21 -35
  159. package/dist/workflows/weaver-bot.d.ts.map +1 -1
  160. package/dist/workflows/weaver-bot.js +1119 -36
  161. package/dist/workflows/weaver-bot.js.map +1 -1
  162. package/flowweaver.manifest.json +21 -1
  163. package/package.json +5 -2
  164. package/src/bot/ai-client.ts +180 -19
  165. package/src/bot/assistant-core.ts +306 -0
  166. package/src/bot/assistant-tools.ts +605 -0
  167. package/src/bot/audit-logger.ts +6 -5
  168. package/src/bot/bot-manager.ts +293 -0
  169. package/src/bot/child-process-tracker.ts +40 -0
  170. package/src/bot/cli-provider.ts +13 -8
  171. package/src/bot/conversation-store.ts +222 -0
  172. package/src/bot/error-guide.ts +34 -0
  173. package/src/bot/knowledge-store.ts +59 -0
  174. package/src/bot/retry-utils.ts +76 -0
  175. package/src/bot/runner.ts +12 -1
  176. package/src/bot/session-state.ts +2 -1
  177. package/src/bot/steering.ts +1 -1
  178. package/src/bot/step-executor.ts +313 -5
  179. package/src/bot/system-prompt.ts +70 -47
  180. package/src/bot/task-decomposer.ts +100 -0
  181. package/src/bot/task-queue.ts +113 -7
  182. package/src/bot/terminal-renderer.ts +241 -0
  183. package/src/bot/types.ts +8 -0
  184. package/src/bot/weaver-tools.ts +225 -0
  185. package/src/cli-bridge.ts +7 -1
  186. package/src/cli-handlers.ts +625 -48
  187. package/src/mcp-tools.ts +2 -2
  188. package/src/node-types/abort-task.ts +5 -4
  189. package/src/node-types/agent-execute.ts +306 -0
  190. package/src/node-types/bot-report.ts +40 -9
  191. package/src/node-types/build-context.ts +112 -25
  192. package/src/node-types/detect-provider.ts +4 -3
  193. package/src/node-types/exec-validate-retry.ts +47 -8
  194. package/src/node-types/execute-plan.ts +32 -8
  195. package/src/node-types/execute-target.ts +2 -1
  196. package/src/node-types/fix-errors.ts +20 -5
  197. package/src/node-types/genesis-observe.ts +2 -1
  198. package/src/node-types/genesis-report.ts +1 -1
  199. package/src/node-types/git-ops.ts +93 -4
  200. package/src/node-types/index.ts +2 -0
  201. package/src/node-types/load-config.ts +3 -3
  202. package/src/node-types/plan-task.ts +15 -3
  203. package/src/node-types/read-workflow.ts +2 -2
  204. package/src/node-types/receive-task.ts +31 -26
  205. package/src/node-types/send-notify.ts +1 -1
  206. package/src/node-types/validate-gate.ts +112 -0
  207. package/src/workflows/genesis-task.ts +20 -12
  208. package/src/workflows/weaver-agent.ts +799 -0
  209. package/src/workflows/weaver-bot-batch.ts +1049 -27
  210. package/src/workflows/weaver-bot.ts +1123 -36
@@ -1,22 +1,271 @@
1
1
  import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
+ import { execSync } from 'node:child_process';
3
4
  import { runCommand } from '@synergenius/flow-weaver';
5
+ // ---------------------------------------------------------------------------
6
+ // Safety thresholds
7
+ // ---------------------------------------------------------------------------
8
+ /** Refuse writes that shrink an existing file by more than this ratio (0-1). */
9
+ const MAX_SHRINK_RATIO = 0.5;
10
+ /** Minimum file size (bytes) before shrink guard kicks in. */
11
+ const SHRINK_GUARD_MIN_SIZE = 100;
12
+ /** Maximum number of files that can be written in a single plan. */
13
+ const MAX_FILES_PER_PLAN = 50;
14
+ /** Maximum shell command execution time (ms). */
15
+ const SHELL_TIMEOUT = 60_000;
16
+ /** Maximum file size for read/patch operations (1MB). */
17
+ const MAX_READ_SIZE = 1_048_576;
18
+ /** Maximum files returned by list-files. */
19
+ const MAX_LIST_FILES = 1000;
20
+ /** Shell commands that are NEVER allowed (destructive operations). */
21
+ const BLOCKED_SHELL_PATTERNS = [
22
+ /\brm\s+(-[a-z]*r|-[a-z]*f)[a-z]*\s/i, // rm with -r or -f flags
23
+ /\bgit\s+push\b/i, // git push (no remote ops)
24
+ /\bgit\s+reset\s+--hard\b/i, // git reset --hard
25
+ /\bnpm\s+publish\b/i, // npm publish
26
+ /\bcurl\b.*\|\s*(sh|bash)\b/i, // curl | sh/bash
27
+ /\bwget\b.*\|\s*(sh|bash)\b/i, // wget | sh/bash
28
+ /\bsudo\b/i, // sudo
29
+ /\bchmod\s+777\b/i, // chmod 777
30
+ /\bkill\s+-9\b/i, // kill -9
31
+ /\bmkfs\b/i, // format disk
32
+ /\bdd\s+if=/i, // dd (disk destroyer)
33
+ />\s*\/dev\/sd/i, // write to raw disk
34
+ ];
35
+ /** Track files written in this process to enforce the per-plan cap. */
36
+ let filesWrittenThisPlan = 0;
37
+ /** Reset the per-plan counter between plans. */
38
+ export function resetPlanFileCounter() {
39
+ filesWrittenThisPlan = 0;
40
+ }
41
+ // ---------------------------------------------------------------------------
42
+ // Path safety
43
+ // ---------------------------------------------------------------------------
44
+ function assertSafePath(filePath, projectDir) {
45
+ const resolved = path.resolve(projectDir, filePath);
46
+ if (!resolved.startsWith(path.resolve(projectDir))) {
47
+ throw new Error(`Path traversal blocked: "${filePath}" resolves outside project directory.`);
48
+ }
49
+ }
50
+ function checkWriteSafety(filePath, content) {
51
+ // Guard 1: Empty content
52
+ if (!content || content.trim().length === 0) {
53
+ return {
54
+ allowed: false,
55
+ reason: `Refusing to write empty content to ${path.basename(filePath)}. ` +
56
+ `Use read-file first, then write the complete modified file back.`,
57
+ };
58
+ }
59
+ // Guard 2: Per-plan file cap
60
+ if (filesWrittenThisPlan >= MAX_FILES_PER_PLAN) {
61
+ return {
62
+ allowed: false,
63
+ reason: `File write limit reached (${MAX_FILES_PER_PLAN} files per plan).`,
64
+ };
65
+ }
66
+ // Guard 3: Shrink detection
67
+ if (fs.existsSync(filePath)) {
68
+ const existingSize = fs.statSync(filePath).size;
69
+ const newSize = Buffer.byteLength(content, 'utf-8');
70
+ if (existingSize > SHRINK_GUARD_MIN_SIZE && newSize < existingSize * MAX_SHRINK_RATIO) {
71
+ const shrinkPct = Math.round((1 - newSize / existingSize) * 100);
72
+ return {
73
+ allowed: false,
74
+ reason: `Refusing to write ${path.basename(filePath)}: new content (${newSize}B) ` +
75
+ `is ${shrinkPct}% smaller than existing (${existingSize}B). ` +
76
+ `Use read-file first, make targeted changes, write complete file back.`,
77
+ };
78
+ }
79
+ }
80
+ return { allowed: true };
81
+ }
82
+ // ---------------------------------------------------------------------------
83
+ // Shell safety
84
+ // ---------------------------------------------------------------------------
85
+ function checkShellSafety(command) {
86
+ for (const pattern of BLOCKED_SHELL_PATTERNS) {
87
+ if (pattern.test(command)) {
88
+ return {
89
+ allowed: false,
90
+ reason: `Shell command blocked by safety policy: matches "${pattern.source}"`,
91
+ };
92
+ }
93
+ }
94
+ return { allowed: true };
95
+ }
4
96
  export async function executeStep(step, projectDir) {
5
97
  const args = step.args;
6
98
  const file = args.file;
7
99
  switch (step.operation) {
100
+ // -----------------------------------------------------------------
101
+ // File write operations (with safety guards)
102
+ // -----------------------------------------------------------------
8
103
  case 'write-file':
9
104
  case 'create-workflow':
10
105
  case 'modify-source':
11
106
  case 'implement-node': {
107
+ if (!file) {
108
+ return { blocked: true, blockReason: `${step.operation} requires a "file" argument.` };
109
+ }
110
+ assertSafePath(file, projectDir);
12
111
  const filePath = path.resolve(projectDir, file);
112
+ const content = args.content ?? args.body ?? '';
113
+ const guard = checkWriteSafety(filePath, content);
114
+ if (!guard.allowed) {
115
+ return { file: filePath, blocked: true, blockReason: guard.reason };
116
+ }
13
117
  fs.mkdirSync(path.dirname(filePath), { recursive: true });
14
118
  const existed = fs.existsSync(filePath);
15
- fs.writeFileSync(filePath, args.content ?? args.body ?? '', 'utf-8');
119
+ fs.writeFileSync(filePath, content, 'utf-8');
120
+ filesWrittenThisPlan++;
16
121
  return { file: filePath, created: !existed };
17
122
  }
18
- case 'read-file':
19
- return {};
123
+ // -----------------------------------------------------------------
124
+ // Patch file: surgical find-and-replace (no full rewrite needed)
125
+ // -----------------------------------------------------------------
126
+ case 'patch-file': {
127
+ if (!file) {
128
+ return { blocked: true, blockReason: 'patch-file requires a "file" argument.' };
129
+ }
130
+ assertSafePath(file, projectDir);
131
+ const filePath = path.resolve(projectDir, file);
132
+ if (!fs.existsSync(filePath)) {
133
+ return { blocked: true, blockReason: `File not found: ${file}` };
134
+ }
135
+ // File size guard
136
+ const fileSize = fs.statSync(filePath).size;
137
+ if (fileSize > MAX_READ_SIZE) {
138
+ return { blocked: true, blockReason: `File too large for patch-file (${fileSize} bytes, max ${MAX_READ_SIZE}).` };
139
+ }
140
+ let content = fs.readFileSync(filePath, 'utf-8');
141
+ const patches = args.patches ?? [];
142
+ if (!patches.length && args.find && args.replace !== undefined) {
143
+ patches.push({ find: args.find, replace: args.replace });
144
+ }
145
+ if (!patches.length) {
146
+ return { blocked: true, blockReason: 'patch-file requires "patches" array or "find"+"replace" args.' };
147
+ }
148
+ let applied = 0;
149
+ const notFound = [];
150
+ for (const patch of patches) {
151
+ if (content.includes(patch.find)) {
152
+ content = content.split(patch.find).join(patch.replace); // replaceAll without regex
153
+ applied++;
154
+ }
155
+ else {
156
+ notFound.push(patch.find.substring(0, 60));
157
+ }
158
+ }
159
+ if (applied === 0) {
160
+ return {
161
+ file: filePath,
162
+ output: `No patches applied. Search strings not found: ${notFound.join('; ')}`,
163
+ };
164
+ }
165
+ fs.writeFileSync(filePath, content, 'utf-8');
166
+ filesWrittenThisPlan++;
167
+ const summary = `Applied ${applied}/${patches.length} patches` +
168
+ (notFound.length ? `. Not found: ${notFound.join('; ')}` : '');
169
+ return { file: filePath, output: summary };
170
+ }
171
+ // -----------------------------------------------------------------
172
+ // Read file: return content for AI context
173
+ // -----------------------------------------------------------------
174
+ case 'read-file': {
175
+ if (!file) {
176
+ return { output: '' };
177
+ }
178
+ assertSafePath(file, projectDir);
179
+ const filePath = path.resolve(projectDir, file);
180
+ if (!fs.existsSync(filePath)) {
181
+ return { output: `File not found: ${file}` };
182
+ }
183
+ if (fs.statSync(filePath).isDirectory()) {
184
+ const entries = fs.readdirSync(filePath, { encoding: 'utf-8' });
185
+ return { output: `"${file}" is a directory. Contents:\n${entries.join('\n')}` };
186
+ }
187
+ const fileSize = fs.statSync(filePath).size;
188
+ if (fileSize > MAX_READ_SIZE) {
189
+ return { output: `File too large to read (${fileSize} bytes, max ${MAX_READ_SIZE}). Use run-shell with head/tail instead.` };
190
+ }
191
+ const content = fs.readFileSync(filePath, 'utf-8');
192
+ return { file: filePath, output: content };
193
+ }
194
+ // -----------------------------------------------------------------
195
+ // Shell command: run arbitrary command with safety guards
196
+ // -----------------------------------------------------------------
197
+ case 'run-shell': {
198
+ const command = args.command ?? '';
199
+ if (!command.trim()) {
200
+ return { blocked: true, blockReason: 'run-shell requires a "command" argument.' };
201
+ }
202
+ const shellGuard = checkShellSafety(command);
203
+ if (!shellGuard.allowed) {
204
+ return { blocked: true, blockReason: shellGuard.reason };
205
+ }
206
+ try {
207
+ const output = execSync(command, {
208
+ cwd: projectDir,
209
+ encoding: 'utf-8',
210
+ timeout: SHELL_TIMEOUT,
211
+ maxBuffer: 1024 * 1024, // 1MB output cap
212
+ stdio: ['pipe', 'pipe', 'pipe'],
213
+ });
214
+ return { output: output.trim() };
215
+ }
216
+ catch (err) {
217
+ // Shell commands that exit non-zero still return useful output
218
+ const execErr = err;
219
+ const stdout = (execErr.stdout ?? '').trim();
220
+ const stderr = (execErr.stderr ?? '').trim();
221
+ const combined = [stdout, stderr].filter(Boolean).join('\n');
222
+ return {
223
+ output: combined || (err instanceof Error ? err.message : String(err)),
224
+ };
225
+ }
226
+ }
227
+ // -----------------------------------------------------------------
228
+ // List files: glob-like directory listing
229
+ // -----------------------------------------------------------------
230
+ case 'list-files': {
231
+ const dir = args.directory ?? args.dir ?? '.';
232
+ const pattern = args.pattern ?? '';
233
+ assertSafePath(dir, projectDir);
234
+ const targetDir = path.resolve(projectDir, dir);
235
+ if (!fs.existsSync(targetDir)) {
236
+ return { output: `Directory not found: ${dir}` };
237
+ }
238
+ const entries = fs.readdirSync(targetDir, { recursive: true, encoding: 'utf-8' });
239
+ let files = entries
240
+ .filter(e => {
241
+ if (e.includes('node_modules') || e.includes('.git'))
242
+ return false;
243
+ const full = path.join(targetDir, e);
244
+ try {
245
+ return fs.statSync(full).isFile();
246
+ }
247
+ catch {
248
+ return false;
249
+ }
250
+ })
251
+ .sort();
252
+ if (pattern) {
253
+ try {
254
+ const regex = new RegExp(pattern);
255
+ files = files.filter(f => regex.test(f));
256
+ }
257
+ catch {
258
+ return { output: `Invalid regex pattern: ${pattern}` };
259
+ }
260
+ }
261
+ if (files.length > MAX_LIST_FILES) {
262
+ files = files.slice(0, MAX_LIST_FILES);
263
+ }
264
+ return { files: files.map(f => path.join(dir, f)), output: files.join('\n') };
265
+ }
266
+ // -----------------------------------------------------------------
267
+ // Flow-weaver CLI commands (via programmatic API)
268
+ // -----------------------------------------------------------------
20
269
  default: {
21
270
  const result = await runCommand(step.operation, { ...args, cwd: projectDir });
22
271
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"step-executor.js","sourceRoot":"","sources":["../../src/bot/step-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAA0D,EAC1D,UAAkB;IAElB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAA0B,CAAC;IAE7C,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,KAAK,YAAY,CAAC;QAClB,KAAK,iBAAiB,CAAC;QACvB,KAAK,eAAe,CAAC;QACrB,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAK,CAAC,CAAC;YACjD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAG,IAAI,CAAC,OAAkB,IAAK,IAAI,CAAC,IAAe,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAC7F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC;QACD,KAAK,WAAW;YACd,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;YAC9E,OAAO;gBACL,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;aAC1F,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"step-executor.js","sourceRoot":"","sources":["../../src/bot/step-executor.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,6 @@ interface CliCommandDoc {
14
14
  }[];
15
15
  }
16
16
  export declare function buildSystemPrompt(): Promise<string>;
17
- export declare function buildBotSystemPrompt(contextBundle?: string, cliCommands?: CliCommandDoc[]): string;
17
+ export declare function buildBotSystemPrompt(contextBundle?: string, _cliCommands?: CliCommandDoc[], projectDir?: string): string;
18
18
  export {};
19
19
  //# sourceMappingURL=system-prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/bot/system-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuBH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE;AAwJD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAmBzD;AA4BD,wBAAgB,oBAAoB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,aAAa,EAAE,GAAG,MAAM,CAgDlG"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/bot/system-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuBH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE;AAqLD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAmBzD;AA0CD,wBAAgB,oBAAoB,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,aAAa,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CA4BxH"}
@@ -135,9 +135,38 @@ Genesis is a 17-step self-evolving workflow engine:
135
135
 
136
136
  When stabilize mode is active, only fix-up operations are allowed: removeNode, removeConnection, implementNode. No new nodes or connections.
137
137
 
138
- ## Response Format
138
+ ## Tool Use
139
139
 
140
- Return ONLY valid JSON. No markdown, no code fences, no explanation outside the JSON structure. Your response must parse with JSON.parse() directly.`;
140
+ You have tools available: validate, read_file, patch_file, run_shell, list_files, write_file.
141
+
142
+ USE TOOLS to complete tasks. Do NOT describe what you would do — actually do it by calling tools. You can see tool results and decide your next action dynamically.
143
+
144
+ Workflow for fixing validation errors:
145
+ 1. Call validate(file) to see exact errors
146
+ 2. Call read_file(file) to see the code
147
+ 3. Call patch_file(file, patches) with exact find/replace strings
148
+ 4. Call validate(file) again to confirm fixes
149
+ 5. Repeat if errors remain
150
+
151
+ Rules:
152
+ - Always validate BEFORE and AFTER patching
153
+ - Always read a file before patching it (you need exact strings for find/replace)
154
+ - Use patch_file for modifications, write_file only for new files
155
+ - Be concise in your text responses — let tool results speak
156
+
157
+ Flow Weaver workflows are TypeScript. You can also help create supporting files in other formats (JSON configs, shell scripts, Markdown docs).
158
+
159
+ Before starting a task on a file, call recall(filename) to check if there is stored knowledge about known issues or patterns for that file.
160
+ After discovering something important (a pattern, a common fix, a gotcha), call learn(key, value) to store it for future tasks.
161
+
162
+ ## Teaching
163
+
164
+ When creating or modifying workflows, briefly explain your decisions:
165
+ - Why you chose a particular template or pattern (1 line)
166
+ - What each node does and why it is @expression vs standard (1 line)
167
+ - What the data flow looks like (1 line)
168
+ Do NOT lecture. Keep explanations short. The user is learning Flow Weaver by watching you work.
169
+ Example: "Using sequential template — best for linear pipelines. The validator is @expression (pure, no side effects). Data flows: input -> validate -> transform -> output."`;
141
170
  }
142
171
  export async function buildSystemPrompt() {
143
172
  if (cachedPrompt)
@@ -154,11 +183,25 @@ export async function buildSystemPrompt() {
154
183
  }
155
184
  function formatBotOperations(cliCommands) {
156
185
  const packOps = [
186
+ '## File Operations',
157
187
  '- create-workflow: Create a new workflow file. args: { file, content }',
158
188
  '- implement-node: Write a node type implementation. args: { file, content }',
159
- '- modify-source: Direct source file modification. args: { file, content }',
160
- '- read-file: Read a file for context. args: { file }',
161
- '- write-file: Write a file. args: { file, content }',
189
+ '- write-file: Write a file. args: { file, content }. Content must be the COMPLETE file.',
190
+ '- read-file: Read a file and return its content. args: { file }',
191
+ '- patch-file: Surgical find-and-replace edits. args: { file, patches: [{ find: "old text", replace: "new text" }] }. PREFERRED for modifying existing files — no need to rewrite the entire file.',
192
+ '- list-files: List files in a directory. args: { directory, pattern? } (pattern is regex)',
193
+ '',
194
+ '## Shell Commands',
195
+ '- run-shell: Execute a shell command and return output. args: { command }. Use for: npx vitest, git status, grep, find, etc.',
196
+ ' Examples: { "command": "npx vitest run --reporter verbose" }, { "command": "npx flow-weaver validate src/workflow.ts --json" }',
197
+ ' Blocked: rm -rf, git push, npm publish, sudo, curl|sh (safety policy).',
198
+ '',
199
+ '## Best Practices',
200
+ 'PREFER patch-file over write-file for modifying existing files (surgical edits, no truncation risk).',
201
+ 'Use run-shell for running tests (npx vitest), validation (flow-weaver validate), and inspecting output.',
202
+ 'Use read-file to understand a file before modifying it.',
203
+ 'Use list-files to discover project structure.',
204
+ 'Writes that shrink a file by >50% or write empty content are automatically BLOCKED.',
162
205
  ];
163
206
  const fwOps = cliCommands
164
207
  .filter(cmd => cmd.botCompatible)
@@ -175,45 +218,28 @@ function formatBotOperations(cliCommands) {
175
218
  });
176
219
  return [...packOps, ...fwOps].join('\n');
177
220
  }
178
- export function buildBotSystemPrompt(contextBundle, cliCommands) {
179
- const operationsList = formatBotOperations(cliCommands ?? []);
180
- const planSchema = `## Bot Plan Schema
181
-
182
- When asked to plan a task, return a JSON object with this structure:
183
- {
184
- "steps": [
185
- {
186
- "id": "step-1",
187
- "operation": "<operation>",
188
- "description": "What this step does",
189
- "args": { ... operation-specific arguments ... }
221
+ export function buildBotSystemPrompt(contextBundle, _cliCommands, projectDir) {
222
+ let prompt = `## Safety Policy
223
+
224
+ Writes that shrink a file by >50% or write empty content are automatically BLOCKED.
225
+ Blocked shell commands: rm -rf, git push, npm publish, sudo, curl|sh.
226
+ Always validate BEFORE and AFTER patching.
227
+ Always read a file before patching it (you need exact strings for find/replace).
228
+ Use patch_file for modifications, write_file only for new files.
229
+ Be concise in your text responses — let tool results speak.`;
230
+ // Load project plan file if it exists — this is the vision spec that guides all work
231
+ if (projectDir) {
232
+ try {
233
+ const fs = require('node:fs');
234
+ const path = require('node:path');
235
+ const planPath = path.resolve(projectDir, '.weaver-plan.md');
236
+ if (fs.existsSync(planPath)) {
237
+ const plan = fs.readFileSync(planPath, 'utf-8').trim();
238
+ prompt += '\n\n## Project Plan & Vision\n\nIMPORTANT: All work MUST align with this plan. If a task contradicts the plan, skip it and explain why.\n\n' + plan;
239
+ }
240
+ }
241
+ catch { /* plan file not available */ }
190
242
  }
191
- ],
192
- "summary": "Brief description of the overall plan"
193
- }
194
-
195
- Available operations:
196
- ${operationsList}`;
197
- const botInstructions = `## Bot Mode Instructions
198
-
199
- You are operating in autonomous bot mode. Your job is to plan and execute workflow creation or modification tasks.
200
-
201
- When planning:
202
- 1. Break the task into concrete, ordered steps using the plan schema above
203
- 2. For new workflows, plan: scaffold/create -> implement nodes -> compile -> validate
204
- 3. For modifications, plan: read current state -> modify -> compile -> validate
205
- 4. Each step is executed via the flow-weaver programmatic API
206
- 5. Use templates when they match the task
207
- 6. Prefer @expression nodes for deterministic operations
208
- 7. Use proper JSDoc annotations on all node types and workflows
209
- 8. Include visualization metadata (colors, icons, positions) on workflow nodes
210
-
211
- When fixing validation errors:
212
- 1. Read the error messages carefully
213
- 2. Map each error to a specific fix operation
214
- 3. Common fixes: add missing connections, fix port names, resolve type mismatches
215
- 4. Return a new plan with only the fix steps`;
216
- let prompt = planSchema + '\n\n' + botInstructions;
217
243
  if (contextBundle) {
218
244
  prompt += '\n\n## Project Context\n\n' + contextBundle;
219
245
  }
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/bot/system-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/bot/system-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Auto task decomposition — splits broad tasks into per-file tasks.
3
+ *
4
+ * When a task says "fix all templates" or "validate everything",
5
+ * decompose it into one task per file. This gives the AI focused
6
+ * context and prevents one failure from blocking all files.
7
+ */
8
+ export interface DecomposableTask {
9
+ id: string;
10
+ instruction: string;
11
+ mode?: string;
12
+ targets?: string[];
13
+ priority?: number;
14
+ }
15
+ export interface DecomposedResult {
16
+ decomposed: boolean;
17
+ tasks: DecomposableTask[];
18
+ }
19
+ /**
20
+ * Check if a task should be decomposed into per-file tasks.
21
+ * Returns the original task unchanged if no decomposition is needed.
22
+ */
23
+ export declare function decomposeTask(task: DecomposableTask, projectDir: string): DecomposedResult;
24
+ //# sourceMappingURL=task-decomposer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-decomposer.d.ts","sourceRoot":"","sources":["../../src/bot/task-decomposer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AASD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,GACjB,gBAAgB,CA6DlB"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Auto task decomposition — splits broad tasks into per-file tasks.
3
+ *
4
+ * When a task says "fix all templates" or "validate everything",
5
+ * decompose it into one task per file. This gives the AI focused
6
+ * context and prevents one failure from blocking all files.
7
+ */
8
+ import * as fs from 'node:fs';
9
+ import * as path from 'node:path';
10
+ // Patterns that suggest a broad task targeting multiple files
11
+ const BROAD_PATTERNS = [
12
+ /\b(all|every|each)\b.*\b(template|workflow|file|node.?type)s?\b/i,
13
+ /\bfix\b.*\bin\s+src\/(templates|node-types|workflows)\/?$/i,
14
+ /\bvalidat(e|ion)\b.*\b(all|every|each|src\/)\b/i,
15
+ ];
16
+ /**
17
+ * Check if a task should be decomposed into per-file tasks.
18
+ * Returns the original task unchanged if no decomposition is needed.
19
+ */
20
+ export function decomposeTask(task, projectDir) {
21
+ const instruction = task.instruction;
22
+ // Already has specific targets — don't decompose
23
+ if (task.targets && task.targets.length === 1) {
24
+ return { decomposed: false, tasks: [task] };
25
+ }
26
+ // Check if instruction matches broad patterns
27
+ const isBroad = BROAD_PATTERNS.some(p => p.test(instruction));
28
+ if (!isBroad) {
29
+ return { decomposed: false, tasks: [task] };
30
+ }
31
+ // Determine which directory to scan
32
+ let targetDir;
33
+ if (instruction.match(/template/i))
34
+ targetDir = 'src/templates';
35
+ else if (instruction.match(/node.?type/i))
36
+ targetDir = 'src/node-types';
37
+ else if (instruction.match(/workflow/i))
38
+ targetDir = 'src/workflows';
39
+ if (!targetDir) {
40
+ return { decomposed: false, tasks: [task] };
41
+ }
42
+ const absDir = path.resolve(projectDir, targetDir);
43
+ if (!fs.existsSync(absDir)) {
44
+ return { decomposed: false, tasks: [task] };
45
+ }
46
+ // List .ts files in the directory — only files that actually exist
47
+ let files;
48
+ try {
49
+ files = fs.readdirSync(absDir)
50
+ .filter(f => f.endsWith('.ts') && !f.startsWith('index'))
51
+ .filter(f => fs.existsSync(path.resolve(absDir, f))) // verify file exists
52
+ .sort();
53
+ }
54
+ catch {
55
+ return { decomposed: false, tasks: [task] };
56
+ }
57
+ if (files.length === 0 || files.length > 50) {
58
+ return { decomposed: false, tasks: [task] };
59
+ }
60
+ // Extract the verb from the original instruction for clean per-file instructions
61
+ const verb = instruction.match(/^(Fix|Validate|Add|Update|Review|Run|Check|Test|Improve)/i)?.[0] ?? 'Process';
62
+ // Create per-file tasks with clean, grammatical instructions
63
+ const tasks = files.map((file, i) => {
64
+ const filePath = path.join(targetDir, file);
65
+ return {
66
+ id: `${task.id}-${i + 1}`,
67
+ instruction: `${verb} ${filePath}`,
68
+ mode: task.mode ?? 'modify',
69
+ targets: [filePath],
70
+ priority: task.priority ?? 0,
71
+ };
72
+ });
73
+ return { decomposed: true, tasks };
74
+ }
75
+ //# sourceMappingURL=task-decomposer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-decomposer.js","sourceRoot":"","sources":["../../src/bot/task-decomposer.ts"],"names":[],"mappings":"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"}
@@ -6,19 +6,32 @@ export interface QueuedTask {
6
6
  options?: Record<string, unknown>;
7
7
  priority: number;
8
8
  addedAt: number;
9
- status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
9
+ status: 'pending' | 'running' | 'completed' | 'no-op' | 'failed' | 'cancelled';
10
+ /** Error reason (set on failure) */
11
+ failureReason?: string;
12
+ }
13
+ export interface AddResult {
14
+ id: string;
15
+ duplicate: boolean;
10
16
  }
11
17
  export declare class TaskQueue {
12
- private filePath;
18
+ readonly filePath: string;
13
19
  constructor(dir?: string);
14
- add(task: Omit<QueuedTask, 'id' | 'addedAt' | 'status'>): Promise<string>;
20
+ add(task: Omit<QueuedTask, 'id' | 'addedAt' | 'status'>): Promise<AddResult>;
15
21
  next(): Promise<QueuedTask | null>;
16
22
  list(): Promise<QueuedTask[]>;
17
23
  remove(id: string): Promise<boolean>;
18
24
  clear(): Promise<number>;
19
25
  markRunning(id: string): Promise<void>;
20
26
  markComplete(id: string): Promise<void>;
21
- markFailed(id: string): Promise<void>;
27
+ markNoOp(id: string): Promise<void>;
28
+ markFailed(id: string, reason?: string): Promise<void>;
29
+ /** Reset a failed or running task back to pending. */
30
+ retry(id: string): Promise<boolean>;
31
+ /** Reset ALL failed tasks back to pending. Returns count reset. */
32
+ retryAll(): Promise<number>;
33
+ /** Reset orphaned "running" tasks to pending (crash recovery). */
34
+ recoverOrphans(): Promise<number>;
22
35
  private updateStatus;
23
36
  private readAll;
24
37
  private writeAll;
@@ -1 +1 @@
1
- {"version":3,"file":"task-queue.d.ts","sourceRoot":"","sources":["../../src/bot/task-queue.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;CACtE;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;gBAEb,GAAG,CAAC,EAAE,MAAM;IAKlB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAezE,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQlC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IASxB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAI7B,YAAY;IAW1B,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,QAAQ;CAKjB"}
1
+ {"version":3,"file":"task-queue.d.ts","sourceRoot":"","sources":["../../src/bot/task-queue.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC/E,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;CACpB;AAeD,qBAAa,SAAS;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,GAAG,CAAC,EAAE,MAAM;IAWlB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAqC5E,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQlC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUpC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IASxB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY5D,sDAAsD;IAChD,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYzC,mEAAmE;IAC7D,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAgBjC,kEAAkE;IAC5D,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;YAezB,YAAY;IAW1B,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,QAAQ;CAKjB"}