azerclaw 2.1.9 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/bin/azerclaw.ts +45 -6
  2. package/bin/opencode.ts +1 -1
  3. package/dist/bin/azerclaw.d.ts +1 -47
  4. package/dist/bin/azerclaw.d.ts.map +1 -1
  5. package/dist/bin/azerclaw.js +94 -55
  6. package/dist/bin/azerclaw.js.map +1 -1
  7. package/dist/bin/opencode.js +1 -1
  8. package/dist/src/agents/builtin.js +12 -12
  9. package/dist/src/brain/adapters/base.d.ts +33 -0
  10. package/dist/src/brain/adapters/base.d.ts.map +1 -0
  11. package/dist/src/brain/adapters/base.js +11 -0
  12. package/dist/src/brain/adapters/base.js.map +1 -0
  13. package/dist/src/brain/adapters/index.d.ts +11 -0
  14. package/dist/src/brain/adapters/index.d.ts.map +1 -0
  15. package/dist/src/brain/adapters/index.js +37 -0
  16. package/dist/src/brain/adapters/index.js.map +1 -0
  17. package/dist/src/brain/adapters/native.d.ts +15 -0
  18. package/dist/src/brain/adapters/native.d.ts.map +1 -0
  19. package/dist/src/brain/adapters/native.js +25 -0
  20. package/dist/src/brain/adapters/native.js.map +1 -0
  21. package/dist/src/brain/adapters/prompt.d.ts +16 -0
  22. package/dist/src/brain/adapters/prompt.d.ts.map +1 -0
  23. package/dist/src/brain/adapters/prompt.js +91 -0
  24. package/dist/src/brain/adapters/prompt.js.map +1 -0
  25. package/dist/src/brain/hybrid.d.ts +53 -0
  26. package/dist/src/brain/hybrid.d.ts.map +1 -0
  27. package/dist/src/brain/hybrid.js +263 -0
  28. package/dist/src/brain/hybrid.js.map +1 -0
  29. package/dist/src/brain/index.d.ts +8 -0
  30. package/dist/src/brain/index.d.ts.map +1 -0
  31. package/dist/src/brain/index.js +19 -0
  32. package/dist/src/brain/index.js.map +1 -0
  33. package/dist/src/brain/router.d.ts +55 -0
  34. package/dist/src/brain/router.d.ts.map +1 -0
  35. package/dist/src/brain/router.js +174 -0
  36. package/dist/src/brain/router.js.map +1 -0
  37. package/dist/src/channels/adapter.d.ts +6 -0
  38. package/dist/src/channels/adapter.d.ts.map +1 -1
  39. package/dist/src/channels/adapter.js +44 -1
  40. package/dist/src/channels/adapter.js.map +1 -1
  41. package/dist/src/channels/discord.d.ts.map +1 -1
  42. package/dist/src/channels/discord.js +60 -14
  43. package/dist/src/channels/discord.js.map +1 -1
  44. package/dist/src/channels/slack.d.ts +5 -0
  45. package/dist/src/channels/slack.d.ts.map +1 -1
  46. package/dist/src/channels/slack.js +77 -9
  47. package/dist/src/channels/slack.js.map +1 -1
  48. package/dist/src/channels/telegram.d.ts +1 -0
  49. package/dist/src/channels/telegram.d.ts.map +1 -1
  50. package/dist/src/channels/telegram.js +42 -4
  51. package/dist/src/channels/telegram.js.map +1 -1
  52. package/dist/src/channels/webhook.d.ts.map +1 -1
  53. package/dist/src/channels/webhook.js +37 -6
  54. package/dist/src/channels/webhook.js.map +1 -1
  55. package/dist/src/cli/animations/fish.d.ts +9 -0
  56. package/dist/src/cli/animations/fish.d.ts.map +1 -1
  57. package/dist/src/cli/animations/fish.js +64 -80
  58. package/dist/src/cli/animations/fish.js.map +1 -1
  59. package/dist/src/cli/animations/markdown.d.ts.map +1 -1
  60. package/dist/src/cli/animations/markdown.js +0 -1
  61. package/dist/src/cli/animations/markdown.js.map +1 -1
  62. package/dist/src/cli/commands/agents.js +31 -30
  63. package/dist/src/cli/commands/agents.js.map +1 -1
  64. package/dist/src/cli/commands/channels.js +41 -48
  65. package/dist/src/cli/commands/channels.js.map +1 -1
  66. package/dist/src/cli/commands/chat.d.ts +1 -0
  67. package/dist/src/cli/commands/chat.d.ts.map +1 -1
  68. package/dist/src/cli/commands/chat.js +81 -8
  69. package/dist/src/cli/commands/chat.js.map +1 -1
  70. package/dist/src/cli/commands/config.js +0 -1
  71. package/dist/src/cli/commands/config.js.map +1 -1
  72. package/dist/src/cli/commands/doctor.js +42 -40
  73. package/dist/src/cli/commands/doctor.js.map +1 -1
  74. package/dist/src/cli/commands/export.js +6 -6
  75. package/dist/src/cli/commands/export.js.map +1 -1
  76. package/dist/src/cli/commands/mcp.js +7 -7
  77. package/dist/src/cli/commands/mcp.js.map +1 -1
  78. package/dist/src/cli/commands/models.js +0 -1
  79. package/dist/src/cli/commands/models.js.map +1 -1
  80. package/dist/src/cli/commands/onboard.js +0 -55
  81. package/dist/src/cli/commands/onboard.js.map +1 -1
  82. package/dist/src/cli/commands/pairing.js +22 -24
  83. package/dist/src/cli/commands/pairing.js.map +1 -1
  84. package/dist/src/cli/commands/plugins.js +8 -8
  85. package/dist/src/cli/commands/plugins.js.map +1 -1
  86. package/dist/src/cli/commands/run.d.ts +1 -0
  87. package/dist/src/cli/commands/run.d.ts.map +1 -1
  88. package/dist/src/cli/commands/run.js +101 -50
  89. package/dist/src/cli/commands/run.js.map +1 -1
  90. package/dist/src/cli/commands/sandbox.js +27 -32
  91. package/dist/src/cli/commands/sandbox.js.map +1 -1
  92. package/dist/src/cli/commands/settings.js +1 -16
  93. package/dist/src/cli/commands/settings.js.map +1 -1
  94. package/dist/src/cli/commands/share.js +6 -6
  95. package/dist/src/cli/commands/share.js.map +1 -1
  96. package/dist/src/cli/commands/tui.js +0 -1
  97. package/dist/src/cli/commands/tui.js.map +1 -1
  98. package/dist/src/config/hotreload.d.ts +87 -0
  99. package/dist/src/config/hotreload.d.ts.map +1 -0
  100. package/dist/src/config/hotreload.js +497 -0
  101. package/dist/src/config/hotreload.js.map +1 -0
  102. package/dist/src/config/manager.d.ts +4 -2
  103. package/dist/src/config/manager.d.ts.map +1 -1
  104. package/dist/src/config/manager.js +23 -5
  105. package/dist/src/config/manager.js.map +1 -1
  106. package/dist/src/config/schema.d.ts +286 -9
  107. package/dist/src/config/schema.d.ts.map +1 -1
  108. package/dist/src/config/schema.js +71 -7
  109. package/dist/src/config/schema.js.map +1 -1
  110. package/dist/src/core/runtime.d.ts +18 -0
  111. package/dist/src/core/runtime.d.ts.map +1 -1
  112. package/dist/src/core/runtime.js +82 -12
  113. package/dist/src/core/runtime.js.map +1 -1
  114. package/dist/src/core/server.d.ts.map +1 -1
  115. package/dist/src/core/server.js +18 -2
  116. package/dist/src/core/server.js.map +1 -1
  117. package/dist/src/index.d.ts +2 -0
  118. package/dist/src/index.d.ts.map +1 -1
  119. package/dist/src/index.js +6 -0
  120. package/dist/src/index.js.map +1 -1
  121. package/dist/src/interfaces/terminal/dashboard.d.ts +80 -0
  122. package/dist/src/interfaces/terminal/dashboard.d.ts.map +1 -0
  123. package/dist/src/interfaces/terminal/dashboard.js +618 -0
  124. package/dist/src/interfaces/terminal/dashboard.js.map +1 -0
  125. package/dist/src/interfaces/terminal/index.d.ts +46 -0
  126. package/dist/src/interfaces/terminal/index.d.ts.map +1 -0
  127. package/dist/src/interfaces/terminal/index.js +171 -0
  128. package/dist/src/interfaces/terminal/index.js.map +1 -0
  129. package/dist/src/interfaces/terminal/visualizations.d.ts +78 -0
  130. package/dist/src/interfaces/terminal/visualizations.d.ts.map +1 -0
  131. package/dist/src/interfaces/terminal/visualizations.js +540 -0
  132. package/dist/src/interfaces/terminal/visualizations.js.map +1 -0
  133. package/dist/src/interfaces/web/server.d.ts +73 -0
  134. package/dist/src/interfaces/web/server.d.ts.map +1 -0
  135. package/dist/src/interfaces/web/server.js +505 -0
  136. package/dist/src/interfaces/web/server.js.map +1 -0
  137. package/dist/src/mcp-servers/antigravity/index.js +2 -2
  138. package/dist/src/mcp-servers/antigravity/index.js.map +1 -1
  139. package/dist/src/memory/dreaming.d.ts +91 -0
  140. package/dist/src/memory/dreaming.d.ts.map +1 -0
  141. package/dist/src/memory/dreaming.js +582 -0
  142. package/dist/src/memory/dreaming.js.map +1 -0
  143. package/dist/src/memory/index.d.ts +8 -0
  144. package/dist/src/memory/index.d.ts.map +1 -0
  145. package/dist/src/memory/index.js +29 -0
  146. package/dist/src/memory/index.js.map +1 -0
  147. package/dist/src/memory/store.d.ts +13 -0
  148. package/dist/src/memory/store.d.ts.map +1 -1
  149. package/dist/src/memory/store.js +28 -0
  150. package/dist/src/memory/store.js.map +1 -1
  151. package/dist/src/memory/vector.d.ts +94 -0
  152. package/dist/src/memory/vector.d.ts.map +1 -0
  153. package/dist/src/memory/vector.js +457 -0
  154. package/dist/src/memory/vector.js.map +1 -0
  155. package/dist/src/networking/analyzer.d.ts +189 -0
  156. package/dist/src/networking/analyzer.d.ts.map +1 -0
  157. package/dist/src/networking/analyzer.js +604 -0
  158. package/dist/src/networking/analyzer.js.map +1 -0
  159. package/dist/src/plugins/bundled/context-engine/index.d.ts +8 -0
  160. package/dist/src/plugins/bundled/context-engine/index.d.ts.map +1 -0
  161. package/dist/src/plugins/bundled/context-engine/index.js +353 -0
  162. package/dist/src/plugins/bundled/context-engine/index.js.map +1 -0
  163. package/dist/src/plugins/bundled/observability/index.d.ts +64 -0
  164. package/dist/src/plugins/bundled/observability/index.d.ts.map +1 -0
  165. package/dist/src/plugins/bundled/observability/index.js +441 -0
  166. package/dist/src/plugins/bundled/observability/index.js.map +1 -0
  167. package/dist/src/plugins/index.d.ts +15 -0
  168. package/dist/src/plugins/index.d.ts.map +1 -0
  169. package/dist/src/plugins/index.js +117 -0
  170. package/dist/src/plugins/index.js.map +1 -0
  171. package/dist/src/plugins/loader.d.ts +19 -0
  172. package/dist/src/plugins/loader.d.ts.map +1 -0
  173. package/dist/src/plugins/loader.js +333 -0
  174. package/dist/src/plugins/loader.js.map +1 -0
  175. package/dist/src/plugins/manager.d.ts +32 -0
  176. package/dist/src/plugins/manager.d.ts.map +1 -0
  177. package/dist/src/plugins/manager.js +410 -0
  178. package/dist/src/plugins/manager.js.map +1 -0
  179. package/dist/src/plugins/registry.d.ts +50 -0
  180. package/dist/src/plugins/registry.d.ts.map +1 -0
  181. package/dist/src/plugins/registry.js +285 -0
  182. package/dist/src/plugins/registry.js.map +1 -0
  183. package/dist/src/plugins/types.d.ts +165 -0
  184. package/dist/src/plugins/types.d.ts.map +1 -0
  185. package/dist/src/plugins/types.js +7 -0
  186. package/dist/src/plugins/types.js.map +1 -0
  187. package/dist/src/providers/base.d.ts +5 -0
  188. package/dist/src/providers/base.d.ts.map +1 -1
  189. package/dist/src/providers/base.js.map +1 -1
  190. package/dist/src/providers/huggingface.d.ts +27 -0
  191. package/dist/src/providers/huggingface.d.ts.map +1 -0
  192. package/dist/src/providers/huggingface.js +140 -0
  193. package/dist/src/providers/huggingface.js.map +1 -0
  194. package/dist/src/providers/kiloauto.d.ts +29 -0
  195. package/dist/src/providers/kiloauto.d.ts.map +1 -0
  196. package/dist/src/providers/kiloauto.js +242 -0
  197. package/dist/src/providers/kiloauto.js.map +1 -0
  198. package/dist/src/providers/localllama.d.ts +26 -0
  199. package/dist/src/providers/localllama.d.ts.map +1 -0
  200. package/dist/src/providers/localllama.js +192 -0
  201. package/dist/src/providers/localllama.js.map +1 -0
  202. package/dist/src/providers/openai.d.ts.map +1 -1
  203. package/dist/src/providers/openai.js +8 -1
  204. package/dist/src/providers/openai.js.map +1 -1
  205. package/dist/src/providers/router.d.ts.map +1 -1
  206. package/dist/src/providers/router.js +36 -4
  207. package/dist/src/providers/router.js.map +1 -1
  208. package/dist/src/scheduler/heartbeat.d.ts.map +1 -1
  209. package/dist/src/scheduler/heartbeat.js +23 -1
  210. package/dist/src/scheduler/heartbeat.js.map +1 -1
  211. package/dist/src/security/privacy.d.ts +199 -0
  212. package/dist/src/security/privacy.d.ts.map +1 -0
  213. package/dist/src/security/privacy.js +600 -0
  214. package/dist/src/security/privacy.js.map +1 -0
  215. package/dist/src/server/hq.d.ts.map +1 -1
  216. package/dist/src/server/hq.js +56 -4
  217. package/dist/src/server/hq.js.map +1 -1
  218. package/dist/src/skills/loader.d.ts.map +1 -1
  219. package/dist/src/skills/loader.js +13 -3
  220. package/dist/src/skills/loader.js.map +1 -1
  221. package/dist/src/tools/advanced.d.ts.map +1 -1
  222. package/dist/src/tools/advanced.js +73 -18
  223. package/dist/src/tools/advanced.js.map +1 -1
  224. package/dist/src/tools/filesystem.d.ts.map +1 -1
  225. package/dist/src/tools/filesystem.js +110 -7
  226. package/dist/src/tools/filesystem.js.map +1 -1
  227. package/dist/src/tools/index_memory.d.ts.map +1 -1
  228. package/dist/src/tools/index_memory.js +13 -6
  229. package/dist/src/tools/index_memory.js.map +1 -1
  230. package/dist/src/tools/loader.d.ts.map +1 -1
  231. package/dist/src/tools/loader.js +4 -2
  232. package/dist/src/tools/loader.js.map +1 -1
  233. package/dist/src/tools/registry.d.ts +6 -0
  234. package/dist/src/tools/registry.d.ts.map +1 -1
  235. package/dist/src/tools/registry.js +51 -12
  236. package/dist/src/tools/registry.js.map +1 -1
  237. package/dist/src/tools/shell.d.ts.map +1 -1
  238. package/dist/src/tools/shell.js +2 -0
  239. package/dist/src/tools/shell.js.map +1 -1
  240. package/dist/src/tools/specialized.d.ts.map +1 -1
  241. package/dist/src/tools/specialized.js +52 -12
  242. package/dist/src/tools/specialized.js.map +1 -1
  243. package/dist/src/workflow/engine.d.ts.map +1 -1
  244. package/dist/src/workflow/engine.js +43 -13
  245. package/dist/src/workflow/engine.js.map +1 -1
  246. package/dist/src/workflow/lobster.d.ts +138 -0
  247. package/dist/src/workflow/lobster.d.ts.map +1 -0
  248. package/dist/src/workflow/lobster.js +620 -0
  249. package/dist/src/workflow/lobster.js.map +1 -0
  250. package/dist/src/workspace/heartbeat.d.ts +122 -0
  251. package/dist/src/workspace/heartbeat.d.ts.map +1 -0
  252. package/dist/src/workspace/heartbeat.js +624 -0
  253. package/dist/src/workspace/heartbeat.js.map +1 -0
  254. package/dist/src/workspace/index.d.ts +29 -0
  255. package/dist/src/workspace/index.d.ts.map +1 -0
  256. package/dist/src/workspace/index.js +97 -0
  257. package/dist/src/workspace/index.js.map +1 -0
  258. package/package.json +2 -2
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW Hybrid Execution Engine
4
+ * Decomposes tasks, routes subtasks to best free models in parallel,
5
+ * and synthesizes results into a coherent final response.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.HybridEngine = void 0;
9
+ const runtime_1 = require("../core/runtime");
10
+ const router_1 = require("./router");
11
+ const adapters_1 = require("./adapters");
12
+ const router_2 = require("../providers/router");
13
+ // ─── Task Decomposer ────────────────────────────────────────────
14
+ const DECOMPOSE_PROMPT = `You are a task decomposition engine. Analyze the user's request and break it into independent subtasks that can be executed in parallel by different AI models.
15
+
16
+ Rules:
17
+ 1. Each subtask must be self-contained and executable independently (unless it has dependencies).
18
+ 2. Assign a task type to each subtask: code, reasoning, creative, search, chat.
19
+ 3. If the request is simple (single question, greeting, one-step task), return ONE subtask with complexity "simple".
20
+ 4. Output ONLY a JSON object in this exact format (no markdown, no extra text):
21
+
22
+ {
23
+ "complexity": "simple" | "moderate" | "complex",
24
+ "subtasks": [
25
+ { "id": "1", "description": "...", "taskType": "code", "dependencies": [] },
26
+ { "id": "2", "description": "...", "taskType": "reasoning", "dependencies": ["1"] }
27
+ ]
28
+ }
29
+
30
+ User request:`;
31
+ async function decomposeTask(request) {
32
+ const router = (0, router_2.getRouter)();
33
+ // Use a fast provider for planning (prefer groq or opencode)
34
+ const plannerProvider = router.getProvider('groq') || router.getProvider('opencode') || router.getProvider();
35
+ if (!plannerProvider) {
36
+ return { subtasks: [{ id: '1', description: request, taskType: (0, router_1.classifyTask)(request), dependencies: [] }], requiresParallel: false, complexity: 'simple' };
37
+ }
38
+ try {
39
+ const result = await plannerProvider.complete({
40
+ messages: [{ role: 'user', content: request }],
41
+ systemPrompt: DECOMPOSE_PROMPT,
42
+ maxTokens: 1024,
43
+ temperature: 0.3,
44
+ });
45
+ if (result.finishReason === 'error') {
46
+ // Fallback: single task
47
+ return { subtasks: [{ id: '1', description: request, taskType: (0, router_1.classifyTask)(request), dependencies: [] }], requiresParallel: false, complexity: 'simple' };
48
+ }
49
+ const text = result.content.trim();
50
+ // Extract JSON from possible markdown fences
51
+ const jsonMatch = text.match(/\{[\s\S]*\}/);
52
+ if (!jsonMatch) {
53
+ return { subtasks: [{ id: '1', description: request, taskType: (0, router_1.classifyTask)(request), dependencies: [] }], requiresParallel: false, complexity: 'simple' };
54
+ }
55
+ const parsed = JSON.parse(jsonMatch[0]);
56
+ const subtasks = (parsed.subtasks || []).map((st) => ({
57
+ id: String(st.id),
58
+ description: String(st.description),
59
+ taskType: String(st.taskType || 'chat'),
60
+ dependencies: Array.isArray(st.dependencies) ? st.dependencies.map(String) : [],
61
+ }));
62
+ const complexity = parsed.complexity === 'moderate' || parsed.complexity === 'complex'
63
+ ? parsed.complexity
64
+ : 'simple';
65
+ return {
66
+ subtasks: subtasks.length > 0 ? subtasks : [{ id: '1', description: request, taskType: (0, router_1.classifyTask)(request), dependencies: [] }],
67
+ requiresParallel: complexity !== 'simple' && subtasks.length > 1,
68
+ complexity,
69
+ };
70
+ }
71
+ catch {
72
+ // On any failure, fall back to simple single-task mode
73
+ return { subtasks: [{ id: '1', description: request, taskType: (0, router_1.classifyTask)(request), dependencies: [] }], requiresParallel: false, complexity: 'simple' };
74
+ }
75
+ }
76
+ // ─── Result Synthesizer ─────────────────────────────────────────
77
+ const SYNTHESIZE_PROMPT = `You are a result synthesizer. Combine the outputs from multiple AI sub-agents into a single, coherent, well-structured final response.
78
+
79
+ Rules:
80
+ 1. Remove duplicate information.
81
+ 2. Resolve any contradictions by favoring the most detailed or most confident answer.
82
+ 3. Maintain the original tone and intent of the user's request.
83
+ 4. If subtasks produced code, format it properly with markdown code blocks.
84
+ 5. Be concise but complete.
85
+
86
+ Subtask outputs:`;
87
+ async function synthesizeResults(originalRequest, results) {
88
+ const router = (0, router_2.getRouter)();
89
+ const synthesizerProvider = router.getProvider('opencode') || router.getProvider('groq') || router.getProvider();
90
+ if (!synthesizerProvider) {
91
+ return results.map(r => `### ${r.subtask.description}\n${r.output}`).join('\n\n---\n\n');
92
+ }
93
+ const subtaskText = results.map((r, i) => `--- Subtask ${i + 1} (${r.subtask.taskType}): ${r.subtask.description} ---\n${r.output}`).join('\n\n');
94
+ try {
95
+ const result = await synthesizerProvider.complete({
96
+ messages: [
97
+ { role: 'system', content: SYNTHESIZE_PROMPT },
98
+ { role: 'user', content: `Original request: ${originalRequest}\n\n${subtaskText}` },
99
+ ],
100
+ maxTokens: 4096,
101
+ temperature: 0.5,
102
+ });
103
+ if (result.finishReason === 'error') {
104
+ // Fallback: simple concatenation
105
+ return results.map(r => `### ${r.subtask.description}\n${r.output}`).join('\n\n---\n\n');
106
+ }
107
+ return result.content;
108
+ }
109
+ catch {
110
+ return results.map(r => `### ${r.subtask.description}\n${r.output}`).join('\n\n---\n\n');
111
+ }
112
+ }
113
+ // ─── Hybrid Engine ──────────────────────────────────────────────
114
+ class HybridEngine {
115
+ smartRouter;
116
+ eventHandler;
117
+ aborted = false;
118
+ constructor(options) {
119
+ this.smartRouter = options?.smartRouter || new router_1.SmartModelRouter();
120
+ this.eventHandler = options?.eventHandler;
121
+ }
122
+ /**
123
+ * Execute a user request through the hybrid engine.
124
+ * Returns the final synthesized response.
125
+ */
126
+ async execute(request, flags = []) {
127
+ this.aborted = false;
128
+ // ─── Step 1: Decompose ───
129
+ await this.emit({ type: 'decompose', content: 'Analyzing task complexity...' });
130
+ const decomposition = await decomposeTask(request);
131
+ if (this.aborted) {
132
+ return 'Execution aborted.';
133
+ }
134
+ // Simple tasks bypass hybrid and go straight to single AgentRuntime
135
+ if (!decomposition.requiresParallel || decomposition.complexity === 'simple') {
136
+ return this.runSimple(request, flags);
137
+ }
138
+ // ─── Step 2: Dispatch subtasks in parallel respecting dependencies ───
139
+ await this.emit({ type: 'dispatch', content: `Dispatching ${decomposition.subtasks.length} subtasks...` });
140
+ const completedResults = new Map();
141
+ const pending = new Set(decomposition.subtasks);
142
+ while (pending.size > 0 && !this.aborted) {
143
+ // Find subtasks whose dependencies are all satisfied
144
+ const ready = Array.from(pending).filter(st => st.dependencies.every(depId => completedResults.has(depId)));
145
+ if (ready.length === 0) {
146
+ // Deadlock or circular dependency — just run remaining
147
+ pending.forEach(st => ready.push(st));
148
+ pending.clear();
149
+ }
150
+ // Run ready subtasks in parallel
151
+ const batchPromises = ready.map(async (subtask) => {
152
+ await this.emit({ type: 'subtask_start', subtaskId: subtask.id, content: subtask.description });
153
+ // Build context from dependencies
154
+ const depContext = subtask.dependencies
155
+ .map(depId => {
156
+ const dep = completedResults.get(depId);
157
+ return dep ? `Context from previous step (${dep.subtask.description}):\n${dep.output}` : '';
158
+ })
159
+ .filter(Boolean)
160
+ .join('\n\n');
161
+ const taskPrompt = depContext
162
+ ? `${subtask.description}\n\n${depContext}`
163
+ : subtask.description;
164
+ const output = await this.runSubtask(taskPrompt, subtask.taskType, flags);
165
+ await this.emit({ type: 'subtask_done', subtaskId: subtask.id, content: output.slice(0, 200) });
166
+ completedResults.set(subtask.id, { subtask, output });
167
+ });
168
+ await Promise.all(batchPromises);
169
+ ready.forEach(st => pending.delete(st));
170
+ }
171
+ if (this.aborted) {
172
+ return 'Execution aborted.';
173
+ }
174
+ // ─── Step 3: Synthesize ───
175
+ await this.emit({ type: 'synthesize', content: 'Synthesizing results...' });
176
+ const results = decomposition.subtasks.map(st => completedResults.get(st.id));
177
+ const finalResponse = await synthesizeResults(request, results);
178
+ await this.emit({ type: 'response', content: finalResponse });
179
+ await this.emit({ type: 'done' });
180
+ return finalResponse;
181
+ }
182
+ /**
183
+ * Run a single subtask with the best model for its task type.
184
+ */
185
+ async runSubtask(taskPrompt, taskType, flags) {
186
+ const routeOptions = { task: taskType };
187
+ const best = await this.smartRouter.selectBest(routeOptions);
188
+ if (!best) {
189
+ // Ultimate fallback: standard AgentRuntime
190
+ return this.runWithAgentRuntime(taskPrompt, flags);
191
+ }
192
+ const adapter = (0, adapters_1.getAdapter)(best.provider.name);
193
+ // For providers needing tool injection, we could modify the prompt here.
194
+ // For now, we run a lightweight completion.
195
+ const messages = [{ role: 'user', content: taskPrompt }];
196
+ try {
197
+ const result = await best.provider.complete({
198
+ messages,
199
+ maxTokens: 2048,
200
+ temperature: 0.7,
201
+ });
202
+ if (result.finishReason === 'error') {
203
+ // Fallback to AgentRuntime if the provider fails
204
+ return this.runWithAgentRuntime(taskPrompt, flags);
205
+ }
206
+ // Parse tool calls if adapter requires injection
207
+ if (adapter.requiresInjection()) {
208
+ const parsed = adapter.parseResponse(result.content);
209
+ if (parsed.toolCalls && parsed.toolCalls.length > 0) {
210
+ // For now, subtasks are meant to be reasoning-only.
211
+ // We return the text content; tool execution is handled by the main agent.
212
+ return parsed.content || result.content;
213
+ }
214
+ }
215
+ return result.content;
216
+ }
217
+ catch {
218
+ return this.runWithAgentRuntime(taskPrompt, flags);
219
+ }
220
+ }
221
+ /**
222
+ * Fallback: run with the existing AgentRuntime (single model, full tool loop).
223
+ */
224
+ async runWithAgentRuntime(prompt, flags) {
225
+ return new Promise((resolve, reject) => {
226
+ const agent = new runtime_1.AgentRuntime({
227
+ sessionId: `hybrid_${Date.now()}`,
228
+ flags,
229
+ eventHandler: async (event) => {
230
+ // Forward relevant events to hybrid handler
231
+ if (event.type === 'response' && this.eventHandler) {
232
+ await this.emit({ type: 'response', content: event.content });
233
+ }
234
+ if (event.type === 'done') {
235
+ resolve(event.content || '');
236
+ }
237
+ else if (event.type === 'error') {
238
+ reject(new Error(event.error || 'Agent error'));
239
+ }
240
+ },
241
+ });
242
+ agent.run(prompt).then(resolve).catch(reject);
243
+ });
244
+ }
245
+ /**
246
+ * Simple mode: directly use AgentRuntime for straightforward requests.
247
+ */
248
+ async runSimple(request, flags) {
249
+ const result = await this.runWithAgentRuntime(request, flags);
250
+ await this.emit({ type: 'done' });
251
+ return result;
252
+ }
253
+ abort() {
254
+ this.aborted = true;
255
+ }
256
+ async emit(event) {
257
+ if (this.eventHandler) {
258
+ await this.eventHandler(event);
259
+ }
260
+ }
261
+ }
262
+ exports.HybridEngine = HybridEngine;
263
+ //# sourceMappingURL=hybrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid.js","sourceRoot":"","sources":["../../../src/brain/hybrid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 🐟 AZERCLAW Hybrid Brain
3
+ * Exports the smart router, hybrid engine, and tool adapters.
4
+ */
5
+ export { SmartModelRouter, RouteOptions, classifyTask } from './router';
6
+ export { HybridEngine, HybridEvent, HybridEventHandler, SubTask, DecompositionResult } from './hybrid';
7
+ export { BaseToolAdapter, PromptInjectionAdapter, NativeToolAdapter, getAdapter, registerAdapter } from './adapters';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/brain/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW Hybrid Brain
4
+ * Exports the smart router, hybrid engine, and tool adapters.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.registerAdapter = exports.getAdapter = exports.NativeToolAdapter = exports.PromptInjectionAdapter = exports.BaseToolAdapter = exports.HybridEngine = exports.classifyTask = exports.SmartModelRouter = void 0;
8
+ var router_1 = require("./router");
9
+ Object.defineProperty(exports, "SmartModelRouter", { enumerable: true, get: function () { return router_1.SmartModelRouter; } });
10
+ Object.defineProperty(exports, "classifyTask", { enumerable: true, get: function () { return router_1.classifyTask; } });
11
+ var hybrid_1 = require("./hybrid");
12
+ Object.defineProperty(exports, "HybridEngine", { enumerable: true, get: function () { return hybrid_1.HybridEngine; } });
13
+ var adapters_1 = require("./adapters");
14
+ Object.defineProperty(exports, "BaseToolAdapter", { enumerable: true, get: function () { return adapters_1.BaseToolAdapter; } });
15
+ Object.defineProperty(exports, "PromptInjectionAdapter", { enumerable: true, get: function () { return adapters_1.PromptInjectionAdapter; } });
16
+ Object.defineProperty(exports, "NativeToolAdapter", { enumerable: true, get: function () { return adapters_1.NativeToolAdapter; } });
17
+ Object.defineProperty(exports, "getAdapter", { enumerable: true, get: function () { return adapters_1.getAdapter; } });
18
+ Object.defineProperty(exports, "registerAdapter", { enumerable: true, get: function () { return adapters_1.registerAdapter; } });
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/brain/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mCAAwE;AAA/D,0GAAA,gBAAgB,OAAA;AAAgB,sGAAA,YAAY,OAAA;AACrD,mCAAuG;AAA9F,sGAAA,YAAY,OAAA;AACrB,uCAAqH;AAA5G,2GAAA,eAAe,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,2GAAA,eAAe,OAAA"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * 🐟 AZERCLAW Smart Model Router
3
+ * Task-aware routing with capability scoring and multi-model selection.
4
+ */
5
+ import { BaseProvider, ModelInfo, TaskType, CompletionOptions, CompletionResult, StreamChunk } from '../providers/base';
6
+ import { ProviderRouter } from '../providers/router';
7
+ export declare function classifyTask(prompt: string): TaskType;
8
+ interface RouteScore {
9
+ provider: string;
10
+ model: ModelInfo;
11
+ score: number;
12
+ }
13
+ export interface RouteOptions {
14
+ task?: TaskType;
15
+ requireTools?: boolean;
16
+ topK?: number;
17
+ preferStreaming?: boolean;
18
+ }
19
+ export declare class SmartModelRouter {
20
+ private baseRouter;
21
+ constructor(baseRouter?: ProviderRouter);
22
+ /**
23
+ * Classify the task type from a user prompt.
24
+ */
25
+ classify(prompt: string): TaskType;
26
+ /**
27
+ * Score and rank all available models for a given task.
28
+ */
29
+ rankModels(options?: RouteOptions): Promise<RouteScore[]>;
30
+ /**
31
+ * Select the single best model for a task.
32
+ */
33
+ selectBest(options?: RouteOptions): Promise<{
34
+ provider: BaseProvider;
35
+ model: ModelInfo;
36
+ } | undefined>;
37
+ /**
38
+ * Select top K models for parallel execution.
39
+ */
40
+ selectParallel(options?: RouteOptions): Promise<Array<{
41
+ provider: BaseProvider;
42
+ model: ModelInfo;
43
+ }>>;
44
+ /**
45
+ * Complete using the best model for the task.
46
+ */
47
+ complete(options: CompletionOptions, routeOptions?: RouteOptions): Promise<CompletionResult>;
48
+ /**
49
+ * Stream using the best model for the task.
50
+ */
51
+ stream(options: CompletionOptions, routeOptions?: RouteOptions): AsyncGenerator<StreamChunk>;
52
+ getBaseRouter(): ProviderRouter;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/brain/router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxH,OAAO,EAAa,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAchE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAYrD;AAkCD,UAAU,UAAU;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AA+BD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAiB;gBAEvB,UAAU,CAAC,EAAE,cAAc;IAIvC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAIlC;;OAEG;IACG,UAAU,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAsBnE;;OAEG;IACG,UAAU,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IAW/G;;OAEG;IACG,cAAc,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAe9G;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgBlG;;OAEG;IACI,MAAM,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC;IAYnG,aAAa,IAAI,cAAc;CAGhC"}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW Smart Model Router
4
+ * Task-aware routing with capability scoring and multi-model selection.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SmartModelRouter = void 0;
8
+ exports.classifyTask = classifyTask;
9
+ const router_1 = require("../providers/router");
10
+ // ─── Task Classifier ────────────────────────────────────────────
11
+ const TASK_KEYWORDS = {
12
+ code: ['code', 'function', 'bug', 'fix', 'refactor', 'implement', 'write', 'script', 'program', 'compile', 'syntax', 'error', 'test'],
13
+ reasoning: ['explain', 'why', 'analyze', 'compare', 'evaluate', 'reason', 'logic', 'think', 'step by step', 'break down'],
14
+ creative: ['write', 'story', 'poem', 'creative', 'design', 'draft', 'generate text', 'brainstorm', 'ideate'],
15
+ search: ['search', 'find', 'look up', 'google', 'web', 'url', 'website', 'browse', 'fetch'],
16
+ chat: ['hello', 'hi', 'hey', 'talk', 'chat', 'conversation', 'discuss'],
17
+ planning: ['plan', 'decompose', 'break into', 'subtask', 'workflow', 'orchestrate', 'route'],
18
+ synthesis: ['summarize', 'combine', 'merge', 'synthesize', 'consolidate', 'aggregate'],
19
+ };
20
+ function classifyTask(prompt) {
21
+ const lower = prompt.toLowerCase();
22
+ const scores = {};
23
+ for (const [task, keywords] of Object.entries(TASK_KEYWORDS)) {
24
+ scores[task] = keywords.reduce((acc, kw) => acc + (lower.includes(kw) ? 1 : 0), 0);
25
+ }
26
+ const sorted = Object.entries(scores)
27
+ .sort((a, b) => b[1] - a[1]);
28
+ return sorted[0]?.[1] > 0 ? sorted[0][0] : 'chat';
29
+ }
30
+ const DEFAULT_PROFILES = {
31
+ opencode: { strengths: ['code', 'reasoning', 'chat'], latencyTier: 'normal', costTier: 'free' },
32
+ openrouter: { strengths: ['code', 'reasoning', 'creative', 'chat'], latencyTier: 'normal', costTier: 'free' },
33
+ groq: { strengths: ['code', 'chat', 'planning'], latencyTier: 'fast', costTier: 'free' },
34
+ pollinations: { strengths: ['creative', 'chat', 'search'], latencyTier: 'normal', costTier: 'free' },
35
+ ollama: { strengths: ['code', 'chat', 'reasoning'], latencyTier: 'slow', costTier: 'free' },
36
+ kiloauto: { strengths: ['code', 'reasoning', 'synthesis'], latencyTier: 'fast', costTier: 'free' },
37
+ huggingface: { strengths: ['chat', 'creative'], latencyTier: 'slow', costTier: 'free' },
38
+ localllama: { strengths: ['code', 'chat', 'reasoning'], latencyTier: 'slow', costTier: 'free' },
39
+ };
40
+ function enrichModelInfo(model) {
41
+ const profile = DEFAULT_PROFILES[model.provider];
42
+ if (!profile)
43
+ return model;
44
+ return {
45
+ ...model,
46
+ strengths: model.strengths || profile.strengths,
47
+ latencyTier: model.latencyTier || profile.latencyTier,
48
+ costTier: model.costTier || profile.costTier,
49
+ };
50
+ }
51
+ function scoreModel(model, task, requireTools) {
52
+ const enriched = enrichModelInfo(model);
53
+ let score = 0;
54
+ // Task match
55
+ if (enriched.strengths?.includes(task))
56
+ score += 30;
57
+ else if (enriched.strengths?.some(s => ['chat', 'reasoning'].includes(s)))
58
+ score += 10;
59
+ // Tool support
60
+ if (requireTools && enriched.supportsTools)
61
+ score += 20;
62
+ if (requireTools && !enriched.supportsTools)
63
+ score -= 50;
64
+ // Latency preference
65
+ if (enriched.latencyTier === 'fast')
66
+ score += 10;
67
+ else if (enriched.latencyTier === 'slow')
68
+ score -= 5;
69
+ // Cost preference (always prefer free)
70
+ if (enriched.costTier === 'free')
71
+ score += 15;
72
+ // Context window bonus for code/reasoning
73
+ if ((task === 'code' || task === 'reasoning') && (enriched.contextWindow || 0) > 64000) {
74
+ score += 5;
75
+ }
76
+ return score;
77
+ }
78
+ class SmartModelRouter {
79
+ baseRouter;
80
+ constructor(baseRouter) {
81
+ this.baseRouter = baseRouter || (0, router_1.getRouter)();
82
+ }
83
+ /**
84
+ * Classify the task type from a user prompt.
85
+ */
86
+ classify(prompt) {
87
+ return classifyTask(prompt);
88
+ }
89
+ /**
90
+ * Score and rank all available models for a given task.
91
+ */
92
+ async rankModels(options = {}) {
93
+ const allModels = await this.baseRouter.listAllModels();
94
+ const task = options.task || 'chat';
95
+ const requireTools = options.requireTools ?? false;
96
+ const scores = allModels.map(model => ({
97
+ provider: model.provider,
98
+ model: enrichModelInfo(model),
99
+ score: scoreModel(model, task, requireTools),
100
+ }));
101
+ // Filter offline models, non-tool models when required, and prefer streaming
102
+ const filtered = scores.filter(s => {
103
+ if (s.model.status === 'offline')
104
+ return false;
105
+ if (requireTools && !s.model.supportsTools)
106
+ return false;
107
+ if (options.preferStreaming && !s.model.supportsStreaming)
108
+ return false;
109
+ return true;
110
+ });
111
+ return filtered.sort((a, b) => b.score - a.score);
112
+ }
113
+ /**
114
+ * Select the single best model for a task.
115
+ */
116
+ async selectBest(options = {}) {
117
+ const ranked = await this.rankModels(options);
118
+ if (ranked.length === 0)
119
+ return undefined;
120
+ const best = ranked[0];
121
+ const provider = this.baseRouter.getProvider(best.provider);
122
+ if (!provider)
123
+ return undefined;
124
+ return { provider, model: best.model };
125
+ }
126
+ /**
127
+ * Select top K models for parallel execution.
128
+ */
129
+ async selectParallel(options = {}) {
130
+ const ranked = await this.rankModels(options);
131
+ const topK = options.topK || 3;
132
+ const selected = [];
133
+ for (const route of ranked.slice(0, topK)) {
134
+ const provider = this.baseRouter.getProvider(route.provider);
135
+ if (provider) {
136
+ selected.push({ provider, model: route.model });
137
+ }
138
+ }
139
+ return selected;
140
+ }
141
+ /**
142
+ * Complete using the best model for the task.
143
+ */
144
+ async complete(options, routeOptions) {
145
+ const task = routeOptions?.task || classifyTask(options.messages.map(m => m.content).join(' '));
146
+ const best = await this.selectBest({ ...routeOptions, task });
147
+ if (!best) {
148
+ return {
149
+ content: 'Error: No suitable AI model available for this task.',
150
+ model: 'none',
151
+ provider: 'none',
152
+ finishReason: 'error',
153
+ };
154
+ }
155
+ return best.provider.complete({ ...options, model: best.model.id });
156
+ }
157
+ /**
158
+ * Stream using the best model for the task.
159
+ */
160
+ async *stream(options, routeOptions) {
161
+ const task = routeOptions?.task || classifyTask(options.messages.map(m => m.content).join(' '));
162
+ const best = await this.selectBest({ ...routeOptions, task, preferStreaming: true });
163
+ if (!best) {
164
+ yield { type: 'error', error: 'No suitable AI model available for this task.' };
165
+ return;
166
+ }
167
+ yield* best.provider.stream({ ...options, model: best.model.id });
168
+ }
169
+ getBaseRouter() {
170
+ return this.baseRouter;
171
+ }
172
+ }
173
+ exports.SmartModelRouter = SmartModelRouter;
174
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/brain/router.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,12 @@ export declare abstract class ChannelAdapter {
34
34
  abstract readonly platform: string;
35
35
  abstract readonly displayName: string;
36
36
  protected agents: Map<string, AgentRuntime>;
37
+ private agentLastSeen;
38
+ /**
39
+ * Evict idle agents and trim the map to MAX_CHANNEL_AGENTS using LRU order.
40
+ */
41
+ private evictStaleAgents;
42
+ private touchAgent;
37
43
  /**
38
44
  * Initialize the adapter with credentials.
39
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/channels/adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAc,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EAAmB,YAAY,EAAE,MAAM,WAAW,CAAC;AAK1D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAID,8BAAsB,cAAc;IAClC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAa;IAExD;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO;IAE/B;;OAEG;cACa,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CzE,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;cAiB9C,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoD7E,SAAS,CAAC,eAAe,IAAI,YAAY;IAIzC,SAAS,CAAC,wBAAwB,IAAI;QAAE,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE;IAUtG,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM;CAG/D"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/channels/adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAc,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EAAmB,YAAY,EAAE,MAAM,WAAW,CAAC;AAK1D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AASD,8BAAsB,cAAc;IAClC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAa;IACxD,OAAO,CAAC,aAAa,CAAkC;IAEvD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/D;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAElD;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO;IAE/B;;OAEG;cACa,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CzE,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;cAiB9C,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoD7E,SAAS,CAAC,eAAe,IAAI,YAAY;IAIzC,SAAS,CAAC,wBAAwB,IAAI;QAAE,QAAQ,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE;IAUtG,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM;CAG/D"}