@phantomind/core 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 (265) hide show
  1. package/dist/adapters/aider.d.ts +12 -0
  2. package/dist/adapters/aider.d.ts.map +1 -0
  3. package/dist/adapters/aider.js +24 -0
  4. package/dist/adapters/aider.js.map +1 -0
  5. package/dist/adapters/base.d.ts +21 -0
  6. package/dist/adapters/base.d.ts.map +1 -0
  7. package/dist/adapters/base.js +83 -0
  8. package/dist/adapters/base.js.map +1 -0
  9. package/dist/adapters/claude-code.d.ts +12 -0
  10. package/dist/adapters/claude-code.d.ts.map +1 -0
  11. package/dist/adapters/claude-code.js +31 -0
  12. package/dist/adapters/claude-code.js.map +1 -0
  13. package/dist/adapters/cline.d.ts +12 -0
  14. package/dist/adapters/cline.d.ts.map +1 -0
  15. package/dist/adapters/cline.js +32 -0
  16. package/dist/adapters/cline.js.map +1 -0
  17. package/dist/adapters/codex.d.ts +18 -0
  18. package/dist/adapters/codex.d.ts.map +1 -0
  19. package/dist/adapters/codex.js +38 -0
  20. package/dist/adapters/codex.js.map +1 -0
  21. package/dist/adapters/continue.d.ts +12 -0
  22. package/dist/adapters/continue.d.ts.map +1 -0
  23. package/dist/adapters/continue.js +29 -0
  24. package/dist/adapters/continue.js.map +1 -0
  25. package/dist/adapters/copilot.d.ts +12 -0
  26. package/dist/adapters/copilot.d.ts.map +1 -0
  27. package/dist/adapters/copilot.js +31 -0
  28. package/dist/adapters/copilot.js.map +1 -0
  29. package/dist/adapters/cursor.d.ts +12 -0
  30. package/dist/adapters/cursor.d.ts.map +1 -0
  31. package/dist/adapters/cursor.js +34 -0
  32. package/dist/adapters/cursor.js.map +1 -0
  33. package/dist/adapters/index.d.ts +32 -0
  34. package/dist/adapters/index.d.ts.map +1 -0
  35. package/dist/adapters/index.js +64 -0
  36. package/dist/adapters/index.js.map +1 -0
  37. package/dist/adapters/windsurf.d.ts +12 -0
  38. package/dist/adapters/windsurf.d.ts.map +1 -0
  39. package/dist/adapters/windsurf.js +32 -0
  40. package/dist/adapters/windsurf.js.map +1 -0
  41. package/dist/adapters/zed.d.ts +12 -0
  42. package/dist/adapters/zed.d.ts.map +1 -0
  43. package/dist/adapters/zed.js +27 -0
  44. package/dist/adapters/zed.js.map +1 -0
  45. package/dist/agent/decomposer.d.ts +55 -0
  46. package/dist/agent/decomposer.d.ts.map +1 -0
  47. package/dist/agent/decomposer.js +172 -0
  48. package/dist/agent/decomposer.js.map +1 -0
  49. package/dist/agent/executor.d.ts +33 -0
  50. package/dist/agent/executor.d.ts.map +1 -0
  51. package/dist/agent/executor.js +260 -0
  52. package/dist/agent/executor.js.map +1 -0
  53. package/dist/agent/index.d.ts +8 -0
  54. package/dist/agent/index.d.ts.map +1 -0
  55. package/dist/agent/index.js +8 -0
  56. package/dist/agent/index.js.map +1 -0
  57. package/dist/agent/memory.d.ts +95 -0
  58. package/dist/agent/memory.d.ts.map +1 -0
  59. package/dist/agent/memory.js +211 -0
  60. package/dist/agent/memory.js.map +1 -0
  61. package/dist/agent/orchestrator.d.ts +54 -0
  62. package/dist/agent/orchestrator.d.ts.map +1 -0
  63. package/dist/agent/orchestrator.js +190 -0
  64. package/dist/agent/orchestrator.js.map +1 -0
  65. package/dist/agent/queue.d.ts +95 -0
  66. package/dist/agent/queue.d.ts.map +1 -0
  67. package/dist/agent/queue.js +231 -0
  68. package/dist/agent/queue.js.map +1 -0
  69. package/dist/agent/retry.d.ts +61 -0
  70. package/dist/agent/retry.d.ts.map +1 -0
  71. package/dist/agent/retry.js +162 -0
  72. package/dist/agent/retry.js.map +1 -0
  73. package/dist/agent/roles.d.ts +35 -0
  74. package/dist/agent/roles.d.ts.map +1 -0
  75. package/dist/agent/roles.js +269 -0
  76. package/dist/agent/roles.js.map +1 -0
  77. package/dist/cli/agent.d.ts +12 -0
  78. package/dist/cli/agent.d.ts.map +1 -0
  79. package/dist/cli/agent.js +85 -0
  80. package/dist/cli/agent.js.map +1 -0
  81. package/dist/cli/audit.d.ts +11 -0
  82. package/dist/cli/audit.d.ts.map +1 -0
  83. package/dist/cli/audit.js +63 -0
  84. package/dist/cli/audit.js.map +1 -0
  85. package/dist/cli/eval.d.ts +11 -0
  86. package/dist/cli/eval.d.ts.map +1 -0
  87. package/dist/cli/eval.js +79 -0
  88. package/dist/cli/eval.js.map +1 -0
  89. package/dist/cli/index.d.ts +9 -0
  90. package/dist/cli/index.d.ts.map +1 -0
  91. package/dist/cli/index.js +9 -0
  92. package/dist/cli/index.js.map +1 -0
  93. package/dist/cli/init.d.ts +13 -0
  94. package/dist/cli/init.d.ts.map +1 -0
  95. package/dist/cli/init.js +157 -0
  96. package/dist/cli/init.js.map +1 -0
  97. package/dist/cli/main.d.ts +7 -0
  98. package/dist/cli/main.d.ts.map +1 -0
  99. package/dist/cli/main.js +153 -0
  100. package/dist/cli/main.js.map +1 -0
  101. package/dist/cli/serve.d.ts +11 -0
  102. package/dist/cli/serve.d.ts.map +1 -0
  103. package/dist/cli/serve.js +23 -0
  104. package/dist/cli/serve.js.map +1 -0
  105. package/dist/cli/stats.d.ts +10 -0
  106. package/dist/cli/stats.d.ts.map +1 -0
  107. package/dist/cli/stats.js +68 -0
  108. package/dist/cli/stats.js.map +1 -0
  109. package/dist/cli/sync.d.ts +11 -0
  110. package/dist/cli/sync.d.ts.map +1 -0
  111. package/dist/cli/sync.js +49 -0
  112. package/dist/cli/sync.js.map +1 -0
  113. package/dist/cli/validate.d.ts +13 -0
  114. package/dist/cli/validate.d.ts.map +1 -0
  115. package/dist/cli/validate.js +125 -0
  116. package/dist/cli/validate.js.map +1 -0
  117. package/dist/config/index.d.ts +2 -0
  118. package/dist/config/index.d.ts.map +1 -0
  119. package/dist/config/index.js +2 -0
  120. package/dist/config/index.js.map +1 -0
  121. package/dist/config/loader.d.ts +25 -0
  122. package/dist/config/loader.d.ts.map +1 -0
  123. package/dist/config/loader.js +190 -0
  124. package/dist/config/loader.js.map +1 -0
  125. package/dist/context/embedder.d.ts +53 -0
  126. package/dist/context/embedder.d.ts.map +1 -0
  127. package/dist/context/embedder.js +235 -0
  128. package/dist/context/embedder.js.map +1 -0
  129. package/dist/context/engine.d.ts +82 -0
  130. package/dist/context/engine.d.ts.map +1 -0
  131. package/dist/context/engine.js +343 -0
  132. package/dist/context/engine.js.map +1 -0
  133. package/dist/context/index.d.ts +5 -0
  134. package/dist/context/index.d.ts.map +1 -0
  135. package/dist/context/index.js +5 -0
  136. package/dist/context/index.js.map +1 -0
  137. package/dist/context/learner.d.ts +44 -0
  138. package/dist/context/learner.d.ts.map +1 -0
  139. package/dist/context/learner.js +246 -0
  140. package/dist/context/learner.js.map +1 -0
  141. package/dist/context/versioning.d.ts +29 -0
  142. package/dist/context/versioning.d.ts.map +1 -0
  143. package/dist/context/versioning.js +81 -0
  144. package/dist/context/versioning.js.map +1 -0
  145. package/dist/index.d.ts +169 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +285 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/mcp/index.d.ts +2 -0
  150. package/dist/mcp/index.d.ts.map +1 -0
  151. package/dist/mcp/index.js +2 -0
  152. package/dist/mcp/index.js.map +1 -0
  153. package/dist/mcp/server.d.ts +31 -0
  154. package/dist/mcp/server.d.ts.map +1 -0
  155. package/dist/mcp/server.js +334 -0
  156. package/dist/mcp/server.js.map +1 -0
  157. package/dist/observability/audit.d.ts +61 -0
  158. package/dist/observability/audit.d.ts.map +1 -0
  159. package/dist/observability/audit.js +168 -0
  160. package/dist/observability/audit.js.map +1 -0
  161. package/dist/observability/cost-tracker.d.ts +71 -0
  162. package/dist/observability/cost-tracker.d.ts.map +1 -0
  163. package/dist/observability/cost-tracker.js +206 -0
  164. package/dist/observability/cost-tracker.js.map +1 -0
  165. package/dist/observability/dashboard.d.ts +52 -0
  166. package/dist/observability/dashboard.d.ts.map +1 -0
  167. package/dist/observability/dashboard.js +134 -0
  168. package/dist/observability/dashboard.js.map +1 -0
  169. package/dist/observability/index.d.ts +4 -0
  170. package/dist/observability/index.d.ts.map +1 -0
  171. package/dist/observability/index.js +4 -0
  172. package/dist/observability/index.js.map +1 -0
  173. package/dist/providers/anthropic.d.ts +14 -0
  174. package/dist/providers/anthropic.d.ts.map +1 -0
  175. package/dist/providers/anthropic.js +99 -0
  176. package/dist/providers/anthropic.js.map +1 -0
  177. package/dist/providers/base.d.ts +52 -0
  178. package/dist/providers/base.d.ts.map +1 -0
  179. package/dist/providers/base.js +68 -0
  180. package/dist/providers/base.js.map +1 -0
  181. package/dist/providers/deepseek.d.ts +15 -0
  182. package/dist/providers/deepseek.d.ts.map +1 -0
  183. package/dist/providers/deepseek.js +99 -0
  184. package/dist/providers/deepseek.js.map +1 -0
  185. package/dist/providers/gemini.d.ts +15 -0
  186. package/dist/providers/gemini.d.ts.map +1 -0
  187. package/dist/providers/gemini.js +118 -0
  188. package/dist/providers/gemini.js.map +1 -0
  189. package/dist/providers/groq.d.ts +15 -0
  190. package/dist/providers/groq.d.ts.map +1 -0
  191. package/dist/providers/groq.js +101 -0
  192. package/dist/providers/groq.js.map +1 -0
  193. package/dist/providers/index.d.ts +11 -0
  194. package/dist/providers/index.d.ts.map +1 -0
  195. package/dist/providers/index.js +11 -0
  196. package/dist/providers/index.js.map +1 -0
  197. package/dist/providers/mistral.d.ts +15 -0
  198. package/dist/providers/mistral.d.ts.map +1 -0
  199. package/dist/providers/mistral.js +99 -0
  200. package/dist/providers/mistral.js.map +1 -0
  201. package/dist/providers/ollama.d.ts +14 -0
  202. package/dist/providers/ollama.d.ts.map +1 -0
  203. package/dist/providers/ollama.js +122 -0
  204. package/dist/providers/ollama.js.map +1 -0
  205. package/dist/providers/openai.d.ts +14 -0
  206. package/dist/providers/openai.d.ts.map +1 -0
  207. package/dist/providers/openai.js +80 -0
  208. package/dist/providers/openai.js.map +1 -0
  209. package/dist/providers/openrouter.d.ts +15 -0
  210. package/dist/providers/openrouter.d.ts.map +1 -0
  211. package/dist/providers/openrouter.js +101 -0
  212. package/dist/providers/openrouter.js.map +1 -0
  213. package/dist/providers/router.d.ts +51 -0
  214. package/dist/providers/router.d.ts.map +1 -0
  215. package/dist/providers/router.js +198 -0
  216. package/dist/providers/router.js.map +1 -0
  217. package/dist/quality/anomaly.d.ts +32 -0
  218. package/dist/quality/anomaly.d.ts.map +1 -0
  219. package/dist/quality/anomaly.js +126 -0
  220. package/dist/quality/anomaly.js.map +1 -0
  221. package/dist/quality/consistency.d.ts +26 -0
  222. package/dist/quality/consistency.d.ts.map +1 -0
  223. package/dist/quality/consistency.js +156 -0
  224. package/dist/quality/consistency.js.map +1 -0
  225. package/dist/quality/dual-verifier.d.ts +22 -0
  226. package/dist/quality/dual-verifier.d.ts.map +1 -0
  227. package/dist/quality/dual-verifier.js +137 -0
  228. package/dist/quality/dual-verifier.js.map +1 -0
  229. package/dist/quality/hallucination-guard.d.ts +57 -0
  230. package/dist/quality/hallucination-guard.d.ts.map +1 -0
  231. package/dist/quality/hallucination-guard.js +245 -0
  232. package/dist/quality/hallucination-guard.js.map +1 -0
  233. package/dist/quality/index.d.ts +7 -0
  234. package/dist/quality/index.d.ts.map +1 -0
  235. package/dist/quality/index.js +7 -0
  236. package/dist/quality/index.js.map +1 -0
  237. package/dist/quality/regression.d.ts +44 -0
  238. package/dist/quality/regression.d.ts.map +1 -0
  239. package/dist/quality/regression.js +181 -0
  240. package/dist/quality/regression.js.map +1 -0
  241. package/dist/quality/secret-scanner.d.ts +36 -0
  242. package/dist/quality/secret-scanner.d.ts.map +1 -0
  243. package/dist/quality/secret-scanner.js +187 -0
  244. package/dist/quality/secret-scanner.js.map +1 -0
  245. package/dist/schemas/index.d.ts +2 -0
  246. package/dist/schemas/index.d.ts.map +1 -0
  247. package/dist/schemas/index.js +2 -0
  248. package/dist/schemas/index.js.map +1 -0
  249. package/dist/schemas/registry.d.ts +72 -0
  250. package/dist/schemas/registry.d.ts.map +1 -0
  251. package/dist/schemas/registry.js +483 -0
  252. package/dist/schemas/registry.js.map +1 -0
  253. package/dist/templates/engine.d.ts +70 -0
  254. package/dist/templates/engine.d.ts.map +1 -0
  255. package/dist/templates/engine.js +71 -0
  256. package/dist/templates/engine.js.map +1 -0
  257. package/dist/templates/index.d.ts +2 -0
  258. package/dist/templates/index.d.ts.map +1 -0
  259. package/dist/templates/index.js +2 -0
  260. package/dist/templates/index.js.map +1 -0
  261. package/dist/types.d.ts +912 -0
  262. package/dist/types.d.ts.map +1 -0
  263. package/dist/types.js +75 -0
  264. package/dist/types.js.map +1 -0
  265. package/package.json +85 -0
@@ -0,0 +1,95 @@
1
+ /**
2
+ * PhantomMindAI — Task Queue & Scheduler
3
+ * Manages task queue with priority, scheduling, and cron support.
4
+ */
5
+ import { EventEmitter } from 'eventemitter3';
6
+ import type { AgentRole, QueueTask } from '../types.js';
7
+ import type { AgentExecutor } from './executor.js';
8
+ export interface QueueOptions {
9
+ maxConcurrent?: number;
10
+ maxQueueSize?: number;
11
+ defaultPriority?: number;
12
+ }
13
+ export interface ScheduledTask {
14
+ id: string;
15
+ cronExpression: string;
16
+ taskTemplate: {
17
+ description: string;
18
+ role?: AgentRole;
19
+ priority?: QueueTask['priority'];
20
+ };
21
+ enabled: boolean;
22
+ lastRun?: string;
23
+ nextRun?: string;
24
+ }
25
+ export declare class TaskQueue extends EventEmitter {
26
+ private queue;
27
+ private running;
28
+ private completed;
29
+ private maxConcurrent;
30
+ private maxQueueSize;
31
+ private defaultPriority;
32
+ private executor?;
33
+ private scheduledTasks;
34
+ private cronInterval?;
35
+ private processing;
36
+ constructor(options?: QueueOptions);
37
+ /**
38
+ * Set the executor for running tasks
39
+ */
40
+ setExecutor(executor: AgentExecutor): void;
41
+ /**
42
+ * Add a task to the queue
43
+ */
44
+ enqueue(description: string, options?: {
45
+ role?: AgentRole;
46
+ priority?: QueueTask['priority'];
47
+ dependencies?: string[];
48
+ }): QueueTask;
49
+ /**
50
+ * Process the next task in the queue
51
+ */
52
+ processNext(): Promise<void>;
53
+ /**
54
+ * Cancel a queued task
55
+ */
56
+ cancel(taskId: string): boolean;
57
+ /**
58
+ * Get the next task that has all dependencies satisfied
59
+ */
60
+ private getNextReady;
61
+ /**
62
+ * Sort queue by priority (lower number = higher priority)
63
+ */
64
+ private sortQueue;
65
+ /**
66
+ * Schedule a recurring task
67
+ */
68
+ schedule(cronExpression: string, description: string, options?: {
69
+ role?: AgentRole;
70
+ priority?: QueueTask['priority'];
71
+ }): ScheduledTask;
72
+ /**
73
+ * Start the cron scheduler
74
+ */
75
+ private startCron;
76
+ /**
77
+ * Simple cron matcher (supports basic patterns)
78
+ */
79
+ private matchCron;
80
+ private matchCronField;
81
+ /**
82
+ * Get queue status
83
+ */
84
+ getStatus(): {
85
+ queued: number;
86
+ running: number;
87
+ completed: number;
88
+ tasks: QueueTask[];
89
+ };
90
+ /**
91
+ * Stop the scheduler
92
+ */
93
+ stop(): void;
94
+ }
95
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/agent/queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAc,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;KAClC,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,YAAY,CAAC,CAAiC;IACtD,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,GAAE,YAAiB;IAOtC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI1C;;OAEG;IACH,OAAO,CACL,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QACP,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,GACL,SAAS;IA2BZ;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAsClC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAU/B;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAKjB;;OAEG;IACH,QAAQ,CACN,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;KAAO,GACnE,aAAa;IAkBhB;;OAEG;IACH,OAAO,CAAC,SAAS;IAkBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAsBjB,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACH,SAAS,IAAI;QACX,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,SAAS,EAAE,CAAC;KACpB;IAaD;;OAEG;IACH,IAAI,IAAI,IAAI;CAOb"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * PhantomMindAI — Task Queue & Scheduler
3
+ * Manages task queue with priority, scheduling, and cron support.
4
+ */
5
+ import { randomUUID } from 'node:crypto';
6
+ import { EventEmitter } from 'eventemitter3';
7
+ export class TaskQueue extends EventEmitter {
8
+ queue = [];
9
+ running = new Map();
10
+ completed = [];
11
+ maxConcurrent;
12
+ maxQueueSize;
13
+ defaultPriority;
14
+ executor;
15
+ scheduledTasks = [];
16
+ cronInterval;
17
+ processing = false;
18
+ constructor(options = {}) {
19
+ super();
20
+ this.maxConcurrent = options.maxConcurrent ?? 3;
21
+ this.maxQueueSize = options.maxQueueSize ?? 100;
22
+ this.defaultPriority = options.defaultPriority ?? 5;
23
+ }
24
+ /**
25
+ * Set the executor for running tasks
26
+ */
27
+ setExecutor(executor) {
28
+ this.executor = executor;
29
+ }
30
+ /**
31
+ * Add a task to the queue
32
+ */
33
+ enqueue(description, options = {}) {
34
+ if (this.queue.length >= this.maxQueueSize) {
35
+ throw new Error(`Queue is full (max ${this.maxQueueSize} tasks)`);
36
+ }
37
+ const task = {
38
+ id: randomUUID(),
39
+ description,
40
+ role: options.role ?? 'implementer',
41
+ priority: options.priority ?? 'normal',
42
+ status: 'queued',
43
+ dependencies: options.dependencies ?? [],
44
+ createdAt: new Date().toISOString(),
45
+ };
46
+ this.queue.push(task);
47
+ this.sortQueue();
48
+ this.emit('task:queued', task);
49
+ // Auto-process if not already
50
+ if (!this.processing) {
51
+ this.processNext();
52
+ }
53
+ return task;
54
+ }
55
+ /**
56
+ * Process the next task in the queue
57
+ */
58
+ async processNext() {
59
+ if (!this.executor)
60
+ return;
61
+ if (this.running.size >= this.maxConcurrent)
62
+ return;
63
+ const task = this.getNextReady();
64
+ if (!task) {
65
+ this.processing = false;
66
+ return;
67
+ }
68
+ this.processing = true;
69
+ task.status = 'running';
70
+ task.startedAt = new Date().toISOString();
71
+ this.running.set(task.id, task);
72
+ // Remove from queue
73
+ this.queue = this.queue.filter(t => t.id !== task.id);
74
+ this.emit('task:running', task);
75
+ try {
76
+ const result = await this.executor.run(task.description);
77
+ task.status = 'completed';
78
+ task.completedAt = new Date().toISOString();
79
+ task.result = result;
80
+ this.emit('task:completed', { task, result });
81
+ }
82
+ catch (error) {
83
+ task.status = 'failed';
84
+ task.completedAt = new Date().toISOString();
85
+ task.error = error.message;
86
+ this.emit('task:failed', { task, error });
87
+ }
88
+ finally {
89
+ this.running.delete(task.id);
90
+ this.completed.push(task);
91
+ // Process next
92
+ this.processNext();
93
+ }
94
+ }
95
+ /**
96
+ * Cancel a queued task
97
+ */
98
+ cancel(taskId) {
99
+ const idx = this.queue.findIndex(t => t.id === taskId);
100
+ if (idx === -1)
101
+ return false;
102
+ const [task] = this.queue.splice(idx, 1);
103
+ task.status = 'cancelled';
104
+ this.emit('task:cancelled', task);
105
+ return true;
106
+ }
107
+ /**
108
+ * Get the next task that has all dependencies satisfied
109
+ */
110
+ getNextReady() {
111
+ return this.queue.find(task => {
112
+ const deps = task.dependencies ?? [];
113
+ if (deps.length === 0)
114
+ return true;
115
+ return deps.every(depId => this.completed.some(c => c.id === depId && c.status === 'completed'));
116
+ });
117
+ }
118
+ /**
119
+ * Sort queue by priority (lower number = higher priority)
120
+ */
121
+ sortQueue() {
122
+ const priorityOrder = { critical: 0, high: 1, normal: 2, low: 3 };
123
+ this.queue.sort((a, b) => (priorityOrder[a.priority] ?? 2) - (priorityOrder[b.priority] ?? 2));
124
+ }
125
+ /**
126
+ * Schedule a recurring task
127
+ */
128
+ schedule(cronExpression, description, options = {}) {
129
+ const task = {
130
+ id: randomUUID(),
131
+ cronExpression,
132
+ taskTemplate: {
133
+ description,
134
+ role: options.role,
135
+ priority: options.priority,
136
+ },
137
+ enabled: true,
138
+ };
139
+ this.scheduledTasks.push(task);
140
+ this.startCron();
141
+ this.emit('task:scheduled', task);
142
+ return task;
143
+ }
144
+ /**
145
+ * Start the cron scheduler
146
+ */
147
+ startCron() {
148
+ if (this.cronInterval)
149
+ return;
150
+ this.cronInterval = setInterval(() => {
151
+ const now = new Date();
152
+ for (const task of this.scheduledTasks) {
153
+ if (!task.enabled)
154
+ continue;
155
+ if (this.matchCron(task.cronExpression, now)) {
156
+ task.lastRun = now.toISOString();
157
+ this.enqueue(task.taskTemplate.description, {
158
+ role: task.taskTemplate.role,
159
+ priority: task.taskTemplate.priority,
160
+ });
161
+ }
162
+ }
163
+ }, 60_000); // Check every minute
164
+ }
165
+ /**
166
+ * Simple cron matcher (supports basic patterns)
167
+ */
168
+ matchCron(expression, date) {
169
+ const parts = expression.split(' ');
170
+ if (parts.length !== 5)
171
+ return false;
172
+ const [minute, hour, dayOfMonth, month, dayOfWeek] = parts;
173
+ const now = {
174
+ minute: date.getMinutes(),
175
+ hour: date.getHours(),
176
+ dayOfMonth: date.getDate(),
177
+ month: date.getMonth() + 1,
178
+ dayOfWeek: date.getDay(),
179
+ };
180
+ return (this.matchCronField(minute, now.minute) &&
181
+ this.matchCronField(hour, now.hour) &&
182
+ this.matchCronField(dayOfMonth, now.dayOfMonth) &&
183
+ this.matchCronField(month, now.month) &&
184
+ this.matchCronField(dayOfWeek, now.dayOfWeek));
185
+ }
186
+ matchCronField(field, value) {
187
+ if (field === '*')
188
+ return true;
189
+ // Handle */n (every n)
190
+ if (field.startsWith('*/')) {
191
+ const interval = parseInt(field.slice(2), 10);
192
+ return value % interval === 0;
193
+ }
194
+ // Handle comma-separated values
195
+ if (field.includes(',')) {
196
+ return field.split(',').some(v => parseInt(v, 10) === value);
197
+ }
198
+ // Handle ranges (n-m)
199
+ if (field.includes('-')) {
200
+ const [start, end] = field.split('-').map(v => parseInt(v, 10));
201
+ return value >= start && value <= end;
202
+ }
203
+ return parseInt(field, 10) === value;
204
+ }
205
+ /**
206
+ * Get queue status
207
+ */
208
+ getStatus() {
209
+ return {
210
+ queued: this.queue.length,
211
+ running: this.running.size,
212
+ completed: this.completed.length,
213
+ tasks: [
214
+ ...this.queue,
215
+ ...Array.from(this.running.values()),
216
+ ...this.completed.slice(-20),
217
+ ],
218
+ };
219
+ }
220
+ /**
221
+ * Stop the scheduler
222
+ */
223
+ stop() {
224
+ if (this.cronInterval) {
225
+ clearInterval(this.cronInterval);
226
+ this.cronInterval = undefined;
227
+ }
228
+ this.processing = false;
229
+ }
230
+ }
231
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/agent/queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * PhantomMindAI — Retry Intelligence
3
+ * 5 strategies: decompose, add-schema, switch-provider, add-grounding, escalate.
4
+ */
5
+ import type { ProviderRouter } from '../providers/router.js';
6
+ import type { ContextEngine } from '../context/engine.js';
7
+ import type { CompletionRequest, CompletionResponse } from '../types.js';
8
+ export type RetryStrategy = 'decompose' | 'add-schema' | 'switch-provider' | 'add-grounding' | 'escalate';
9
+ export interface RetryContext {
10
+ request: CompletionRequest;
11
+ error: Error;
12
+ attempt: number;
13
+ previousStrategies: RetryStrategy[];
14
+ }
15
+ export interface RetryResult {
16
+ success: boolean;
17
+ response?: CompletionResponse;
18
+ strategy: RetryStrategy;
19
+ attempts: number;
20
+ error?: string;
21
+ }
22
+ export declare class RetryIntelligence {
23
+ private router;
24
+ private contextEngine;
25
+ private maxRetries;
26
+ private strategyOrder;
27
+ constructor(router: ProviderRouter, contextEngine: ContextEngine, maxRetries?: number);
28
+ /**
29
+ * Execute a request with intelligent retry
30
+ */
31
+ execute(request: CompletionRequest): Promise<RetryResult>;
32
+ /**
33
+ * Select the best retry strategy based on the error and context
34
+ */
35
+ private selectStrategy;
36
+ /**
37
+ * Apply a retry strategy to the request
38
+ */
39
+ private applyStrategy;
40
+ /**
41
+ * Strategy: Decompose — simplify the prompt
42
+ */
43
+ private strategyDecompose;
44
+ /**
45
+ * Strategy: Add Schema — enforce JSON output format
46
+ */
47
+ private strategyAddSchema;
48
+ /**
49
+ * Strategy: Switch Provider — try a different LLM provider
50
+ */
51
+ private strategySwitchProvider;
52
+ /**
53
+ * Strategy: Add Grounding — provide more context
54
+ */
55
+ private strategyAddGrounding;
56
+ /**
57
+ * Strategy: Escalate — last resort, add explicit error context
58
+ */
59
+ private strategyEscalate;
60
+ }
61
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/agent/retry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEzE,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,aAAa,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,aAAa,CAMnB;gBAGA,MAAM,EAAE,cAAc,EACtB,aAAa,EAAE,aAAa,EAC5B,UAAU,SAAI;IAOhB;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAsC/D;;OAEG;IACH,OAAO,CAAC,cAAc;IAiCtB;;OAEG;YACW,aAAa;IAmB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;OAEG;YACW,oBAAoB;IAUlC;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * PhantomMindAI — Retry Intelligence
3
+ * 5 strategies: decompose, add-schema, switch-provider, add-grounding, escalate.
4
+ */
5
+ export class RetryIntelligence {
6
+ router;
7
+ contextEngine;
8
+ maxRetries;
9
+ strategyOrder = [
10
+ 'decompose',
11
+ 'add-schema',
12
+ 'switch-provider',
13
+ 'add-grounding',
14
+ 'escalate',
15
+ ];
16
+ constructor(router, contextEngine, maxRetries = 5) {
17
+ this.router = router;
18
+ this.contextEngine = contextEngine;
19
+ this.maxRetries = maxRetries;
20
+ }
21
+ /**
22
+ * Execute a request with intelligent retry
23
+ */
24
+ async execute(request) {
25
+ let lastError;
26
+ const usedStrategies = [];
27
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
28
+ try {
29
+ const response = await this.router.complete(request);
30
+ return {
31
+ success: true,
32
+ response,
33
+ strategy: usedStrategies[usedStrategies.length - 1] ?? 'decompose',
34
+ attempts: attempt + 1,
35
+ };
36
+ }
37
+ catch (error) {
38
+ lastError = error;
39
+ if (attempt >= this.maxRetries)
40
+ break;
41
+ const strategy = this.selectStrategy({
42
+ request,
43
+ error: lastError,
44
+ attempt,
45
+ previousStrategies: usedStrategies,
46
+ });
47
+ usedStrategies.push(strategy);
48
+ request = await this.applyStrategy(strategy, request, lastError);
49
+ }
50
+ }
51
+ return {
52
+ success: false,
53
+ strategy: usedStrategies[usedStrategies.length - 1] ?? 'escalate',
54
+ attempts: this.maxRetries + 1,
55
+ error: lastError?.message,
56
+ };
57
+ }
58
+ /**
59
+ * Select the best retry strategy based on the error and context
60
+ */
61
+ selectStrategy(ctx) {
62
+ const errorMsg = ctx.error.message.toLowerCase();
63
+ // Rate limiting or quota → switch provider
64
+ if (errorMsg.includes('rate limit') || errorMsg.includes('429') || errorMsg.includes('quota')) {
65
+ if (!ctx.previousStrategies.includes('switch-provider'))
66
+ return 'switch-provider';
67
+ }
68
+ // Token limit exceeded → decompose
69
+ if (errorMsg.includes('token') || errorMsg.includes('context length') || errorMsg.includes('too long')) {
70
+ if (!ctx.previousStrategies.includes('decompose'))
71
+ return 'decompose';
72
+ }
73
+ // JSON parse error or format issue → add schema
74
+ if (errorMsg.includes('json') || errorMsg.includes('parse') || errorMsg.includes('format')) {
75
+ if (!ctx.previousStrategies.includes('add-schema'))
76
+ return 'add-schema';
77
+ }
78
+ // Hallucination or accuracy issue → add grounding
79
+ if (errorMsg.includes('hallucination') || errorMsg.includes('incorrect') || errorMsg.includes('invalid')) {
80
+ if (!ctx.previousStrategies.includes('add-grounding'))
81
+ return 'add-grounding';
82
+ }
83
+ // Use the next unused strategy in order
84
+ for (const strategy of this.strategyOrder) {
85
+ if (!ctx.previousStrategies.includes(strategy)) {
86
+ return strategy;
87
+ }
88
+ }
89
+ return 'escalate';
90
+ }
91
+ /**
92
+ * Apply a retry strategy to the request
93
+ */
94
+ async applyStrategy(strategy, request, error) {
95
+ switch (strategy) {
96
+ case 'decompose':
97
+ return this.strategyDecompose(request);
98
+ case 'add-schema':
99
+ return this.strategyAddSchema(request);
100
+ case 'switch-provider':
101
+ return this.strategySwitchProvider(request);
102
+ case 'add-grounding':
103
+ return await this.strategyAddGrounding(request);
104
+ case 'escalate':
105
+ return this.strategyEscalate(request, error);
106
+ }
107
+ }
108
+ /**
109
+ * Strategy: Decompose — simplify the prompt
110
+ */
111
+ strategyDecompose(request) {
112
+ return {
113
+ ...request,
114
+ prompt: `Focus on the most important aspect of this request and provide a concise response:\n\n${request.prompt}`,
115
+ maxTokens: Math.min(request.maxTokens ?? 2000, 1000),
116
+ };
117
+ }
118
+ /**
119
+ * Strategy: Add Schema — enforce JSON output format
120
+ */
121
+ strategyAddSchema(request) {
122
+ const schemaInstruction = `\n\nIMPORTANT: Respond ONLY with valid JSON. No markdown fences, no explanations outside JSON. If you need to include code, escape it properly within JSON strings.`;
123
+ return {
124
+ ...request,
125
+ systemPrompt: (request.systemPrompt ?? '') + schemaInstruction,
126
+ temperature: Math.max((request.temperature ?? 0.7) - 0.2, 0),
127
+ };
128
+ }
129
+ /**
130
+ * Strategy: Switch Provider — try a different LLM provider
131
+ */
132
+ strategySwitchProvider(request) {
133
+ return {
134
+ ...request,
135
+ // The router's fallback mechanism will handle provider switching
136
+ // We just need to modify the request slightly to trigger a fresh attempt
137
+ temperature: (request.temperature ?? 0.7) + 0.1,
138
+ };
139
+ }
140
+ /**
141
+ * Strategy: Add Grounding — provide more context
142
+ */
143
+ async strategyAddGrounding(request) {
144
+ const context = await this.contextEngine.getProjectContext({ maxTokens: 1500 });
145
+ const groundingContext = context.layers.map(l => l.content).join('\n\n');
146
+ return {
147
+ ...request,
148
+ systemPrompt: `${request.systemPrompt ?? ''}\n\n## Grounding Context\nUse the following verified project information to ensure accuracy:\n${groundingContext}`,
149
+ };
150
+ }
151
+ /**
152
+ * Strategy: Escalate — last resort, add explicit error context
153
+ */
154
+ strategyEscalate(request, error) {
155
+ return {
156
+ ...request,
157
+ systemPrompt: `${request.systemPrompt ?? ''}\n\nIMPORTANT: Previous attempt failed with error: "${error.message}". Please adjust your response to avoid this issue. Be more conservative and precise.`,
158
+ temperature: 0.1,
159
+ };
160
+ }
161
+ }
162
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/agent/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * PhantomMindAI — Agent Roles
3
+ * Persona & role system with specialized system prompts.
4
+ */
5
+ import type { AgentRole } from '../types.js';
6
+ export interface RoleDefinition {
7
+ name: AgentRole;
8
+ displayName: string;
9
+ description: string;
10
+ systemPrompt: string;
11
+ temperature: number;
12
+ focus: string[];
13
+ constraints: string[];
14
+ }
15
+ /**
16
+ * Get the system prompt for a role
17
+ */
18
+ export declare function getRoleSystemPrompt(role: AgentRole): string;
19
+ /**
20
+ * Get the full role definition
21
+ */
22
+ export declare function getRoleDefinition(role: AgentRole): RoleDefinition;
23
+ /**
24
+ * Get all available roles
25
+ */
26
+ export declare function getAvailableRoles(): RoleDefinition[];
27
+ /**
28
+ * Get recommended temperature for a role
29
+ */
30
+ export declare function getRoleTemperature(role: AgentRole): number;
31
+ /**
32
+ * Build a composite system prompt from multiple roles
33
+ */
34
+ export declare function buildMultiRolePrompt(roles: AgentRole[]): string;
35
+ //# sourceMappingURL=roles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../../src/agent/roles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AA6OD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,cAAc,CAEjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,EAAE,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAO/D"}