zilmate 1.7.2 → 1.7.5

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 (178) hide show
  1. package/.env.example +36 -36
  2. package/README.md +503 -503
  3. package/SDK.md +320 -320
  4. package/agent-docs.md +276 -276
  5. package/dist/agents/automation-planner.agent.d.ts.map +1 -1
  6. package/dist/agents/coding.agent.d.ts +18 -0
  7. package/dist/agents/coding.agent.d.ts.map +1 -1
  8. package/dist/agents/finance.agent.d.ts +60 -0
  9. package/dist/agents/finance.agent.d.ts.map +1 -0
  10. package/dist/agents/finance.agent.js +30 -0
  11. package/dist/agents/finance.agent.js.map +1 -0
  12. package/dist/agents/manager.d.ts +94 -1
  13. package/dist/agents/manager.d.ts.map +1 -1
  14. package/dist/agents/manager.js +102 -36
  15. package/dist/agents/manager.js.map +1 -1
  16. package/dist/agents/swarm/engineering/qa.d.ts +3 -0
  17. package/dist/agents/swarm/engineering/qa.d.ts.map +1 -0
  18. package/dist/agents/swarm/engineering/qa.js +19 -0
  19. package/dist/agents/swarm/engineering/qa.js.map +1 -0
  20. package/dist/agents/swarm/growth/seo.d.ts +3 -0
  21. package/dist/agents/swarm/growth/seo.d.ts.map +1 -0
  22. package/dist/agents/swarm/growth/seo.js +19 -0
  23. package/dist/agents/swarm/growth/seo.js.map +1 -0
  24. package/dist/agents/swarm/main.d.ts +22 -0
  25. package/dist/agents/swarm/main.d.ts.map +1 -0
  26. package/dist/agents/swarm/main.js +65 -0
  27. package/dist/agents/swarm/main.js.map +1 -0
  28. package/dist/agents/swarm/operations/finance.d.ts +3 -0
  29. package/dist/agents/swarm/operations/finance.d.ts.map +1 -0
  30. package/dist/agents/swarm/operations/finance.js +19 -0
  31. package/dist/agents/swarm/operations/finance.js.map +1 -0
  32. package/dist/agents/swarm/registry.d.ts +4 -0
  33. package/dist/agents/swarm/registry.d.ts.map +1 -0
  34. package/dist/agents/swarm/registry.js +361 -0
  35. package/dist/agents/swarm/registry.js.map +1 -0
  36. package/dist/cli/composer.d.ts.map +1 -1
  37. package/dist/cli/composer.js +54 -4
  38. package/dist/cli/composer.js.map +1 -1
  39. package/dist/cli/doctor.d.ts.map +1 -1
  40. package/dist/cli/doctor.js +13 -0
  41. package/dist/cli/doctor.js.map +1 -1
  42. package/dist/cli/format.d.ts.map +1 -1
  43. package/dist/cli/format.js +46 -24
  44. package/dist/cli/format.js.map +1 -1
  45. package/dist/cli/interactive.d.ts.map +1 -1
  46. package/dist/cli/interactive.js +47 -3
  47. package/dist/cli/interactive.js.map +1 -1
  48. package/dist/cli/render.d.ts.map +1 -1
  49. package/dist/cli/render.js +18 -9
  50. package/dist/cli/render.js.map +1 -1
  51. package/dist/cli/setup.d.ts +1 -0
  52. package/dist/cli/setup.d.ts.map +1 -1
  53. package/dist/cli/setup.js +74 -2
  54. package/dist/cli/setup.js.map +1 -1
  55. package/dist/cli/swarm.d.ts +4 -0
  56. package/dist/cli/swarm.d.ts.map +1 -0
  57. package/dist/cli/swarm.js +21 -0
  58. package/dist/cli/swarm.js.map +1 -0
  59. package/dist/cli/theme.d.ts +9 -0
  60. package/dist/cli/theme.d.ts.map +1 -1
  61. package/dist/cli/theme.js +36 -0
  62. package/dist/cli/theme.js.map +1 -1
  63. package/dist/cli/tunnel.d.ts.map +1 -1
  64. package/dist/cli/tunnel.js +2 -1
  65. package/dist/cli/tunnel.js.map +1 -1
  66. package/dist/cli/voice.js +11 -11
  67. package/dist/cli/welcome.d.ts.map +1 -1
  68. package/dist/cli/welcome.js +2 -0
  69. package/dist/cli/welcome.js.map +1 -1
  70. package/dist/index.js +19 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/jobs/anomaly.js +5 -5
  73. package/dist/memory/heal.js +43 -43
  74. package/dist/observability/doctor.d.ts +3 -0
  75. package/dist/observability/doctor.d.ts.map +1 -0
  76. package/dist/observability/doctor.js +33 -0
  77. package/dist/observability/doctor.js.map +1 -0
  78. package/dist/observability/usage.d.ts +13 -0
  79. package/dist/observability/usage.d.ts.map +1 -0
  80. package/dist/observability/usage.js +34 -0
  81. package/dist/observability/usage.js.map +1 -0
  82. package/dist/runtime/confirm.d.ts.map +1 -1
  83. package/dist/runtime/confirm.js +12 -2
  84. package/dist/runtime/confirm.js.map +1 -1
  85. package/dist/runtime/prompts/builder.d.ts +11 -0
  86. package/dist/runtime/prompts/builder.d.ts.map +1 -0
  87. package/dist/runtime/prompts/builder.js +29 -0
  88. package/dist/runtime/prompts/builder.js.map +1 -0
  89. package/dist/runtime/registry.d.ts +14 -0
  90. package/dist/runtime/registry.d.ts.map +1 -0
  91. package/dist/runtime/registry.js +39 -0
  92. package/dist/runtime/registry.js.map +1 -0
  93. package/dist/runtime/storage/interface.d.ts +16 -0
  94. package/dist/runtime/storage/interface.d.ts.map +1 -0
  95. package/dist/runtime/storage/interface.js +19 -0
  96. package/dist/runtime/storage/interface.js.map +1 -0
  97. package/dist/runtime/storage/local.d.ts +12 -0
  98. package/dist/runtime/storage/local.d.ts.map +1 -0
  99. package/dist/runtime/storage/local.js +48 -0
  100. package/dist/runtime/storage/local.js.map +1 -0
  101. package/dist/runtime/storage/redis.d.ts +11 -0
  102. package/dist/runtime/storage/redis.d.ts.map +1 -0
  103. package/dist/runtime/storage/redis.js +21 -0
  104. package/dist/runtime/storage/redis.js.map +1 -0
  105. package/dist/runtime/swarm/reports.d.ts +9 -0
  106. package/dist/runtime/swarm/reports.d.ts.map +1 -0
  107. package/dist/runtime/swarm/reports.js +43 -0
  108. package/dist/runtime/swarm/reports.js.map +1 -0
  109. package/dist/runtime/swarm.d.ts +37 -0
  110. package/dist/runtime/swarm.d.ts.map +1 -0
  111. package/dist/runtime/swarm.js +90 -0
  112. package/dist/runtime/swarm.js.map +1 -0
  113. package/dist/runtime/telemetry.d.ts +15 -0
  114. package/dist/runtime/telemetry.d.ts.map +1 -0
  115. package/dist/runtime/telemetry.js +25 -0
  116. package/dist/runtime/telemetry.js.map +1 -0
  117. package/dist/runtime/tool-utils.d.ts +12 -0
  118. package/dist/runtime/tool-utils.d.ts.map +1 -0
  119. package/dist/runtime/tool-utils.js +31 -0
  120. package/dist/runtime/tool-utils.js.map +1 -0
  121. package/dist/tools/browser.tool.d.ts +54 -0
  122. package/dist/tools/browser.tool.d.ts.map +1 -0
  123. package/dist/tools/browser.tool.js +193 -0
  124. package/dist/tools/browser.tool.js.map +1 -0
  125. package/dist/tools/business-apps.tool.d.ts +18 -0
  126. package/dist/tools/business-apps.tool.d.ts.map +1 -0
  127. package/dist/tools/business-apps.tool.js +43 -0
  128. package/dist/tools/business-apps.tool.js.map +1 -0
  129. package/dist/tools/computer-use.tool.js +66 -66
  130. package/dist/tools/cross-app-ledger.tool.d.ts +7 -0
  131. package/dist/tools/cross-app-ledger.tool.d.ts.map +1 -0
  132. package/dist/tools/cross-app-ledger.tool.js +70 -0
  133. package/dist/tools/cross-app-ledger.tool.js.map +1 -0
  134. package/dist/tools/desktop.tool.js +10 -10
  135. package/dist/tools/documents.tool.js +5 -5
  136. package/dist/tools/finance.tool.d.ts +18 -0
  137. package/dist/tools/finance.tool.d.ts.map +1 -0
  138. package/dist/tools/finance.tool.js +88 -0
  139. package/dist/tools/finance.tool.js.map +1 -0
  140. package/dist/tools/image-intelligence.tool.d.ts +12 -0
  141. package/dist/tools/image-intelligence.tool.d.ts.map +1 -0
  142. package/dist/tools/image-intelligence.tool.js +62 -0
  143. package/dist/tools/image-intelligence.tool.js.map +1 -0
  144. package/dist/tools/notify.tool.js +8 -8
  145. package/dist/tools/osint-install.tool.js +8 -8
  146. package/dist/tools/pentest-install.tool.js +6 -6
  147. package/dist/tools/setup-assistant.tool.d.ts +1 -1
  148. package/dist/tools/shell.tool.d.ts +18 -0
  149. package/dist/tools/shell.tool.d.ts.map +1 -1
  150. package/dist/tools/shell.tool.js +34 -0
  151. package/dist/tools/shell.tool.js.map +1 -1
  152. package/dist/tools/triggers.tool.d.ts.map +1 -1
  153. package/dist/tools/web-intelligence.tool.d.ts +12 -0
  154. package/dist/tools/web-intelligence.tool.d.ts.map +1 -0
  155. package/dist/tools/web-intelligence.tool.js +27 -0
  156. package/dist/tools/web-intelligence.tool.js.map +1 -0
  157. package/dist/workspace/init.js +18 -18
  158. package/dist/workspace/output-paths.d.ts +1 -1
  159. package/dist/workspace/output-paths.d.ts.map +1 -1
  160. package/dist/workspace/output-paths.js +1 -0
  161. package/dist/workspace/output-paths.js.map +1 -1
  162. package/dist/workspace/paths.d.ts +1 -0
  163. package/dist/workspace/paths.d.ts.map +1 -1
  164. package/dist/workspace/paths.js +1 -0
  165. package/dist/workspace/paths.js.map +1 -1
  166. package/install.ps1 +62 -62
  167. package/package.json +106 -103
  168. package/scripts/postinstall.mjs +42 -42
  169. package/scripts/release-github.mjs +91 -91
  170. package/src/doc/README.md +49 -49
  171. package/src/doc/admin-tools-and-sms-campaigns.md +99 -99
  172. package/src/doc/escalation-checklist.md +97 -97
  173. package/src/doc/payments-and-payouts.md +82 -82
  174. package/src/doc/shift-lifecycle-and-disputes.md +95 -95
  175. package/src/doc/support-macros.md +40 -40
  176. package/src/doc/venue-support-playbook.md +145 -145
  177. package/src/doc/verification-and-trust.md +88 -88
  178. package/src/doc/worker-support-playbook.md +159 -159
@@ -44,49 +44,49 @@ async function gatherHealContext(sessionId) {
44
44
  };
45
45
  }
46
46
  async function analyzeHealPass(input, ctx, pass) {
47
- const prompt = `You are ZilMate Heal Engine (pass ${pass}). Perform a deep retrospective and extract durable intelligence.
48
-
49
- Session summary:
50
- ${input.sessionSummary}
51
-
52
- Successes:
53
- ${(input.recentSuccesses ?? []).join('\n') || '(none)'}
54
-
55
- Failures / friction:
56
- ${(input.recentFailures ?? []).join('\n') || '(none)'}
57
-
58
- Recent conversation:
59
- ${formatTurns(ctx.turns) || '(no session turns loaded)'}
60
-
61
- Personal context owner: ${ctx.context.ownerName || '(unset)'}
62
- Projects: ${ctx.context.projects.map((p) => `${p.name}(${p.status})`).join(', ') || '(none)'}
63
- VIP contacts: ${ctx.context.contacts.filter((c) => c.vip).map((c) => c.name).join(', ') || '(none)'}
64
- Urgency rules: ${ctx.context.urgencyRules.join(' | ') || '(none)'}
65
-
66
- Knowledge graph owner: ${ctx.graph.ownerName || '(unset)'}; nodes: ${ctx.graph.nodes.length}
67
- Notebook excerpt:
68
- ${ctx.notebookExcerpt || '(empty)'}
69
-
70
- Recent memories (${ctx.memories.length}):
71
- ${ctx.memories.map((m) => `- ${m.text}`).join('\n') || '(none)'}
72
-
73
- Recent jobs:
74
- ${ctx.jobs.map((j) => `- ${j.id} ${j.status}: ${j.task}${j.error ? ` ERR=${j.error}` : ''}`).join('\n') || '(none)'}
75
-
76
- Prior heal passes:
77
- ${ctx.recentHeal.join('\n') || '(none)'}
78
-
79
- Return JSON only:
80
- {
81
- "summary": "what worked, what failed, what to change next time",
82
- "memories": ["new durable facts not already in memory"],
83
- "personalContext": [{"key":"...","value":"...","kind":"owner|urgency|project|workflow"}],
84
- "knowledgeNodes": [{"label":"...","type":"person|org|project|goal|topic","parentLabel":"optional","notes":"..."}],
85
- "workflows": ["repeatable workflow the user prefers"],
86
- "contacts": [{"name":"...","email":"...","role":"...","vip":true,"notes":"..."}],
87
- "actionItems": ["concrete next steps"],
88
- "frictionPoints": ["things that broke or annoyed the user"],
89
- "ownerName": "optional"
47
+ const prompt = `You are ZilMate Heal Engine (pass ${pass}). Perform a deep retrospective and extract durable intelligence.
48
+
49
+ Session summary:
50
+ ${input.sessionSummary}
51
+
52
+ Successes:
53
+ ${(input.recentSuccesses ?? []).join('\n') || '(none)'}
54
+
55
+ Failures / friction:
56
+ ${(input.recentFailures ?? []).join('\n') || '(none)'}
57
+
58
+ Recent conversation:
59
+ ${formatTurns(ctx.turns) || '(no session turns loaded)'}
60
+
61
+ Personal context owner: ${ctx.context.ownerName || '(unset)'}
62
+ Projects: ${ctx.context.projects.map((p) => `${p.name}(${p.status})`).join(', ') || '(none)'}
63
+ VIP contacts: ${ctx.context.contacts.filter((c) => c.vip).map((c) => c.name).join(', ') || '(none)'}
64
+ Urgency rules: ${ctx.context.urgencyRules.join(' | ') || '(none)'}
65
+
66
+ Knowledge graph owner: ${ctx.graph.ownerName || '(unset)'}; nodes: ${ctx.graph.nodes.length}
67
+ Notebook excerpt:
68
+ ${ctx.notebookExcerpt || '(empty)'}
69
+
70
+ Recent memories (${ctx.memories.length}):
71
+ ${ctx.memories.map((m) => `- ${m.text}`).join('\n') || '(none)'}
72
+
73
+ Recent jobs:
74
+ ${ctx.jobs.map((j) => `- ${j.id} ${j.status}: ${j.task}${j.error ? ` ERR=${j.error}` : ''}`).join('\n') || '(none)'}
75
+
76
+ Prior heal passes:
77
+ ${ctx.recentHeal.join('\n') || '(none)'}
78
+
79
+ Return JSON only:
80
+ {
81
+ "summary": "what worked, what failed, what to change next time",
82
+ "memories": ["new durable facts not already in memory"],
83
+ "personalContext": [{"key":"...","value":"...","kind":"owner|urgency|project|workflow"}],
84
+ "knowledgeNodes": [{"label":"...","type":"person|org|project|goal|topic","parentLabel":"optional","notes":"..."}],
85
+ "workflows": ["repeatable workflow the user prefers"],
86
+ "contacts": [{"name":"...","email":"...","role":"...","vip":true,"notes":"..."}],
87
+ "actionItems": ["concrete next steps"],
88
+ "frictionPoints": ["things that broke or annoyed the user"],
89
+ "ownerName": "optional"
90
90
  }`;
91
91
  const result = await generateText({ model: models.manager, prompt });
92
92
  try {
@@ -0,0 +1,3 @@
1
+ export declare function checkDependency(command: string): Promise<boolean>;
2
+ export declare function runProactiveDoctor(): Promise<void>;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/observability/doctor.ts"],"names":[],"mappings":"AAMA,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQvE;AAED,wBAAsB,kBAAkB,kBAkBvC"}
@@ -0,0 +1,33 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import { emitProgress } from '../runtime/progress.js';
4
+ const execFileAsync = promisify(execFile);
5
+ export async function checkDependency(command) {
6
+ const probe = process.platform === 'win32' ? 'where.exe' : 'which';
7
+ try {
8
+ await execFileAsync(probe, [command]);
9
+ return true;
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ }
15
+ export async function runProactiveDoctor() {
16
+ const dependencies = [
17
+ { name: 'ffmpeg', critical: false },
18
+ { name: 'nmap', critical: false },
19
+ { name: 'python', critical: false },
20
+ { name: 'git', critical: false },
21
+ ];
22
+ for (const dep of dependencies) {
23
+ const found = await checkDependency(dep.name);
24
+ if (!found) {
25
+ emitProgress({
26
+ type: 'step',
27
+ label: 'Dependency check',
28
+ detail: `Missing optional dependency: ${dep.name}. Some tools may be unavailable.`,
29
+ });
30
+ }
31
+ }
32
+ }
33
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/observability/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,YAAY,GAAG;QACnB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;QACnC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;QACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;QACnC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;KACjC,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,YAAY,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,gCAAgC,GAAG,CAAC,IAAI,kCAAkC;aACnF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { LanguageModelUsage } from 'ai';
2
+ export type SessionMetrics = {
3
+ tokens: {
4
+ promptTokens: number;
5
+ completionTokens: number;
6
+ totalTokens: number;
7
+ };
8
+ estimatedCost: number;
9
+ requestCount: number;
10
+ };
11
+ export declare function trackUsage(sessionId: string, usage: LanguageModelUsage): void;
12
+ export declare function getSessionMetrics(sessionId: string): SessionMetrics;
13
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/observability/usage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAOF,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,QA0BtE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAMnE"}
@@ -0,0 +1,34 @@
1
+ import { emitProgress } from '../runtime/progress.js';
2
+ const sessionStore = new Map();
3
+ // Roughly estimated costs per 1k tokens (blended average for common models)
4
+ const COST_PER_1K_TOKENS = 0.002;
5
+ export function trackUsage(sessionId, usage) {
6
+ const current = sessionStore.get(sessionId) || {
7
+ tokens: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
8
+ estimatedCost: 0,
9
+ requestCount: 0,
10
+ };
11
+ const prompt = usage.inputTokens ?? 0;
12
+ const completion = usage.outputTokens ?? 0;
13
+ const total = usage.totalTokens ?? (prompt + completion);
14
+ current.tokens.promptTokens += prompt;
15
+ current.tokens.completionTokens += completion;
16
+ current.tokens.totalTokens += total;
17
+ current.requestCount += 1;
18
+ // Simple linear cost estimation
19
+ current.estimatedCost = (current.tokens.totalTokens / 1000) * COST_PER_1K_TOKENS;
20
+ sessionStore.set(sessionId, current);
21
+ emitProgress({
22
+ type: 'step',
23
+ label: 'Usage tracked',
24
+ detail: `Tokens: ${total} (Session total: ${current.tokens.totalTokens}, Est. Cost: $${current.estimatedCost.toFixed(4)})`,
25
+ });
26
+ }
27
+ export function getSessionMetrics(sessionId) {
28
+ return sessionStore.get(sessionId) || {
29
+ tokens: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
30
+ estimatedCost: 0,
31
+ requestCount: 0,
32
+ };
33
+ }
34
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/observability/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAa1E,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEvD,4EAA4E;AAC5E,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,KAAyB;IACrE,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI;QAC7C,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;QAChE,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,CAAC;KAChB,CAAC;IAEF,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAEzD,OAAO,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC;IACtC,OAAO,CAAC,MAAM,CAAC,gBAAgB,IAAI,UAAU,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;IACpC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC;IAE1B,gCAAgC;IAChC,OAAO,CAAC,aAAa,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,kBAAkB,CAAC;IAEjF,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAErC,YAAY,CAAC;QACX,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,WAAW,KAAK,oBAAoB,OAAO,CAAC,MAAM,CAAC,WAAW,iBAAiB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;KAC3H,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI;QACpC,MAAM,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;QAChE,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,CAAC;KAChB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/runtime/confirm.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;AAkBjG,wBAAgB,oBAAoB,YAEnC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,WAE9D;AAED,wBAAgB,qBAAqB,SAEpC;AAED,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,cAQ/G;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,oBA8BrE"}
1
+ {"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/runtime/confirm.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;AAsBjG,wBAAgB,oBAAoB,YAEnC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,WAE9D;AAED,wBAAgB,qBAAqB,SAEpC;AAED,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,cAQ/G;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,oBAoCrE"}
@@ -6,6 +6,9 @@ function approvalKey(request) {
6
6
  const action = request.action || request.summary;
7
7
  return `${request.toolkitSlug}/${request.toolSlug}/${action}`;
8
8
  }
9
+ function toolkitApprovalKey(request) {
10
+ return `toolkit:${request.toolkitSlug}`;
11
+ }
9
12
  function enqueueConfirmation(run) {
10
13
  const next = confirmationTail.then(run);
11
14
  confirmationTail = next.catch(() => undefined);
@@ -32,7 +35,8 @@ export async function withConfirmationHandler(handler, run) {
32
35
  }
33
36
  export async function requestConfirmation(request) {
34
37
  const key = approvalKey(request);
35
- if (sessionApprovals.has(key)) {
38
+ const toolkitKey = toolkitApprovalKey(request);
39
+ if (sessionApprovals.has(key) || sessionApprovals.has(toolkitKey)) {
36
40
  return true;
37
41
  }
38
42
  return enqueueConfirmation(async () => {
@@ -46,7 +50,13 @@ export async function requestConfirmation(request) {
46
50
  try {
47
51
  const result = await currentHandler(request);
48
52
  if (result === 'session') {
49
- sessionApprovals.add(key);
53
+ // If the user approves for the whole toolkit or just this action
54
+ if (request.toolkitSlug && request.toolkitSlug !== 'local') {
55
+ sessionApprovals.add(toolkitKey);
56
+ }
57
+ else {
58
+ sessionApprovals.add(key);
59
+ }
50
60
  return true;
51
61
  }
52
62
  return result === true;
@@ -1 +1 @@
1
- {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/runtime/confirm.ts"],"names":[],"mappings":"AAYA,IAAI,cAA+C,CAAC;AACpD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;AAC3C,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,IAAI,gBAAgB,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;AAE3D,SAAS,WAAW,CAAC,OAA4B;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IACjD,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,mBAAmB,CAAI,GAAqB;IACnD,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,OAAO,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAI,OAAwC,EAAE,GAAqB;IAC9G,MAAM,QAAQ,GAAG,cAAc,CAAC;IAChC,cAAc,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,cAAc,GAAG,QAAQ,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAA4B;IACpE,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEjC,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,mBAAmB,CAAC,KAAK,IAAI,EAAE;QACpC,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kBAAkB,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAE7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,MAAM,KAAK,IAAI,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,kBAAkB,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/runtime/confirm.ts"],"names":[],"mappings":"AAYA,IAAI,cAA+C,CAAC;AACpD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;AAC3C,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,IAAI,gBAAgB,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;AAE3D,SAAS,WAAW,CAAC,OAA4B;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IACjD,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA4B;IACtD,OAAO,WAAW,OAAO,CAAC,WAAW,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,mBAAmB,CAAI,GAAqB;IACnD,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,OAAO,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAI,OAAwC,EAAE,GAAqB;IAC9G,MAAM,QAAQ,GAAG,cAAc,CAAC;IAChC,cAAc,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,cAAc,GAAG,QAAQ,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAA4B;IACpE,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE/C,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,mBAAmB,CAAC,KAAK,IAAI,EAAE;QACpC,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kBAAkB,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAE7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,iEAAiE;gBACjE,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;oBAC3D,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,MAAM,KAAK,IAAI,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,kBAAkB,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type PromptSection = {
2
+ id: string;
3
+ content: string;
4
+ dependencies?: string[];
5
+ };
6
+ export declare class SystemPromptBuilder {
7
+ private sections;
8
+ addSection(section: PromptSection): this;
9
+ build(activeToolGroups?: string[]): string;
10
+ }
11
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/runtime/prompts/builder.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAuB;IAEvC,UAAU,CAAC,OAAO,EAAE,aAAa;IAKjC,KAAK,CAAC,gBAAgB,GAAE,MAAM,EAAO,GAAG,MAAM;CAuB/C"}
@@ -0,0 +1,29 @@
1
+ export class SystemPromptBuilder {
2
+ sections = [];
3
+ addSection(section) {
4
+ this.sections.push(section);
5
+ return this;
6
+ }
7
+ build(activeToolGroups = []) {
8
+ const included = new Set();
9
+ // Always include core instructions
10
+ const core = this.sections.find(s => s.id === 'core');
11
+ if (core)
12
+ included.add('core');
13
+ // Add sections based on active groups
14
+ for (const group of activeToolGroups) {
15
+ const section = this.sections.find(s => s.id === group);
16
+ if (section) {
17
+ included.add(group);
18
+ if (section.dependencies) {
19
+ section.dependencies.forEach(d => included.add(d));
20
+ }
21
+ }
22
+ }
23
+ return this.sections
24
+ .filter(s => included.has(s.id))
25
+ .map(s => s.content)
26
+ .join('\n\n');
27
+ }
28
+ }
29
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/runtime/prompts/builder.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,mBAAmB;IACtB,QAAQ,GAAoB,EAAE,CAAC;IAEvC,UAAU,CAAC,OAAsB;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,mBAA6B,EAAE;QACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,mCAAmC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACtD,IAAI,IAAI;YAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE/B,sCAAsC;QACtC,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;YACxD,IAAI,OAAO,EAAE,CAAC;gBACZ,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;oBACzB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ;aACjB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACnB,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { type Tool } from 'ai';
2
+ export type ToolModule = Record<string, Tool<any, any>>;
3
+ export declare class ToolRegistry {
4
+ private static instance;
5
+ private tools;
6
+ private constructor();
7
+ static getInstance(): ToolRegistry;
8
+ register(name: string, tool: Tool<any, any>): void;
9
+ registerModule(module: ToolModule): void;
10
+ getTool(name: string): Tool<any, any> | undefined;
11
+ getAllTools(): Record<string, Tool<any, any>>;
12
+ getToolsByGroup(prefix: string): Record<string, Tool<any, any>>;
13
+ }
14
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/runtime/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAExD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,KAAK,CAA0C;IAEvD,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;IAI3C,cAAc,CAAC,MAAM,EAAE,UAAU;IAMjC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS;IAIjD,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAQ7C,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;CAShE"}
@@ -0,0 +1,39 @@
1
+ export class ToolRegistry {
2
+ static instance;
3
+ tools = new Map();
4
+ constructor() { }
5
+ static getInstance() {
6
+ if (!ToolRegistry.instance) {
7
+ ToolRegistry.instance = new ToolRegistry();
8
+ }
9
+ return ToolRegistry.instance;
10
+ }
11
+ register(name, tool) {
12
+ this.tools.set(name, tool);
13
+ }
14
+ registerModule(module) {
15
+ for (const [name, tool] of Object.entries(module)) {
16
+ this.register(name, tool);
17
+ }
18
+ }
19
+ getTool(name) {
20
+ return this.tools.get(name);
21
+ }
22
+ getAllTools() {
23
+ const result = {};
24
+ for (const [name, tool] of this.tools.entries()) {
25
+ result[name] = tool;
26
+ }
27
+ return result;
28
+ }
29
+ getToolsByGroup(prefix) {
30
+ const result = {};
31
+ for (const [name, tool] of this.tools.entries()) {
32
+ if (name.startsWith(prefix)) {
33
+ result[name] = tool;
34
+ }
35
+ }
36
+ return result;
37
+ }
38
+ }
39
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/runtime/registry.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,YAAY;IACf,MAAM,CAAC,QAAQ,CAAe;IAC9B,KAAK,GAAgC,IAAI,GAAG,EAAE,CAAC;IAEvD,gBAAuB,CAAC;IAExB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC3B,YAAY,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,IAAoB;QACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,MAAkB;QAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,WAAW;QACT,MAAM,MAAM,GAAmC,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,eAAe,CAAC,MAAc;QAC5B,MAAM,MAAM,GAAmC,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ export interface StorageProvider {
2
+ name: string;
3
+ get<T>(key: string): Promise<T | null>;
4
+ set<T>(key: string, value: T): Promise<void>;
5
+ delete(key: string): Promise<void>;
6
+ list(prefix?: string): Promise<string[]>;
7
+ }
8
+ export declare class KeyValueStorage {
9
+ private provider;
10
+ constructor(provider: StorageProvider);
11
+ get<T>(key: string): Promise<T | null>;
12
+ set<T>(key: string, value: T): Promise<void>;
13
+ delete(key: string): Promise<void>;
14
+ list(prefix?: string): Promise<string[]>;
15
+ }
16
+ //# sourceMappingURL=interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC1C;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,eAAe;IAEvC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAItC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAG/C"}
@@ -0,0 +1,19 @@
1
+ export class KeyValueStorage {
2
+ provider;
3
+ constructor(provider) {
4
+ this.provider = provider;
5
+ }
6
+ async get(key) {
7
+ return this.provider.get(key);
8
+ }
9
+ async set(key, value) {
10
+ await this.provider.set(key, value);
11
+ }
12
+ async delete(key) {
13
+ await this.provider.delete(key);
14
+ }
15
+ async list(prefix) {
16
+ return this.provider.list(prefix);
17
+ }
18
+ }
19
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/runtime/storage/interface.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,QAAyB;QAAzB,aAAQ,GAAR,QAAQ,CAAiB;IAAG,CAAC;IAEjD,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ;QAChC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAe;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { StorageProvider } from './interface.js';
2
+ export declare class LocalFileStorage implements StorageProvider {
3
+ private rootDir;
4
+ name: string;
5
+ constructor(rootDir: string);
6
+ private getPath;
7
+ get<T>(key: string): Promise<T | null>;
8
+ set<T>(key: string, value: T): Promise<void>;
9
+ delete(key: string): Promise<void>;
10
+ list(prefix?: string): Promise<string[]>;
11
+ }
12
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/local.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,qBAAa,gBAAiB,YAAW,eAAe;IAG1C,OAAO,CAAC,OAAO;IAF3B,IAAI,SAAW;gBAEK,OAAO,EAAE,MAAM;IAMnC,OAAO,CAAC,OAAO;IAIT,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAWtC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAQ/C"}
@@ -0,0 +1,48 @@
1
+ import { readFile, writeFile, unlink, readdir, mkdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ export class LocalFileStorage {
5
+ rootDir;
6
+ name = 'local';
7
+ constructor(rootDir) {
8
+ this.rootDir = rootDir;
9
+ if (!existsSync(rootDir)) {
10
+ mkdir(rootDir, { recursive: true }).catch(() => undefined);
11
+ }
12
+ }
13
+ getPath(key) {
14
+ return path.join(this.rootDir, `${key.replace(/:/g, '_')}.json`);
15
+ }
16
+ async get(key) {
17
+ const filePath = this.getPath(key);
18
+ if (!existsSync(filePath))
19
+ return null;
20
+ try {
21
+ const data = await readFile(filePath, 'utf8');
22
+ return JSON.parse(data);
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ async set(key, value) {
29
+ const filePath = this.getPath(key);
30
+ await writeFile(filePath, JSON.stringify(value, null, 2), 'utf8');
31
+ }
32
+ async delete(key) {
33
+ const filePath = this.getPath(key);
34
+ if (existsSync(filePath)) {
35
+ await unlink(filePath);
36
+ }
37
+ }
38
+ async list(prefix) {
39
+ if (!existsSync(this.rootDir))
40
+ return [];
41
+ const files = await readdir(this.rootDir);
42
+ return files
43
+ .filter(f => f.endsWith('.json'))
44
+ .map(f => f.replace('.json', '').replace(/_/g, ':'))
45
+ .filter(k => !prefix || k.startsWith(prefix));
46
+ }
47
+ }
48
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/runtime/storage/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,OAAO,gBAAgB;IAGP;IAFpB,IAAI,GAAG,OAAO,CAAC;IAEf,YAAoB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QACjC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAW;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAe;QACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,KAAK;aACT,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACnD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { StorageProvider } from './interface.js';
2
+ export declare class RedisStorage implements StorageProvider {
3
+ name: string;
4
+ private client;
5
+ constructor(url: string, token: string);
6
+ get<T>(key: string): Promise<T | null>;
7
+ set<T>(key: string, value: T): Promise<void>;
8
+ delete(key: string): Promise<void>;
9
+ list(prefix?: string): Promise<string[]>;
10
+ }
11
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../src/runtime/storage/redis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,qBAAa,YAAa,YAAW,eAAe;IAClD,IAAI,SAAW;IACf,OAAO,CAAC,MAAM,CAAQ;gBAEV,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIhC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAItC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAG/C"}
@@ -0,0 +1,21 @@
1
+ import { Redis } from '@upstash/redis';
2
+ export class RedisStorage {
3
+ name = 'redis';
4
+ client;
5
+ constructor(url, token) {
6
+ this.client = new Redis({ url, token });
7
+ }
8
+ async get(key) {
9
+ return this.client.get(key);
10
+ }
11
+ async set(key, value) {
12
+ await this.client.set(key, value);
13
+ }
14
+ async delete(key) {
15
+ await this.client.del(key);
16
+ }
17
+ async list(prefix) {
18
+ return this.client.keys(prefix ? `${prefix}*` : '*');
19
+ }
20
+ }
21
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/runtime/storage/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGvC,MAAM,OAAO,YAAY;IACvB,IAAI,GAAG,OAAO,CAAC;IACP,MAAM,CAAQ;IAEtB,YAAY,GAAW,EAAE,KAAa;QACpC,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,KAAQ;QAChC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAe;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ export declare class ReportGenerator {
2
+ private static instance;
3
+ private reportDir;
4
+ private constructor();
5
+ static getInstance(): ReportGenerator;
6
+ ensureDir(): Promise<void>;
7
+ saveReport(agentName: string, content: string, status: 'doing' | 'done' | 'planning'): Promise<string>;
8
+ }
9
+ //# sourceMappingURL=reports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../../src/runtime/swarm/reports.ts"],"names":[],"mappings":"AAKA,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IACzC,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,eAAe;IAO/B,SAAS;IAMT,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU;CAwB3F"}
@@ -0,0 +1,43 @@
1
+ import { writeFile, mkdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ import { workspaceLayout } from '../../workspace/paths.js';
5
+ export class ReportGenerator {
6
+ static instance;
7
+ reportDir;
8
+ constructor() {
9
+ this.reportDir = path.join(workspaceLayout().outputs, 'swarm-reports');
10
+ }
11
+ static getInstance() {
12
+ if (!ReportGenerator.instance) {
13
+ ReportGenerator.instance = new ReportGenerator();
14
+ }
15
+ return ReportGenerator.instance;
16
+ }
17
+ async ensureDir() {
18
+ if (!existsSync(this.reportDir)) {
19
+ await mkdir(this.reportDir, { recursive: true });
20
+ }
21
+ }
22
+ async saveReport(agentName, content, status) {
23
+ await this.ensureDir();
24
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
25
+ const filename = `${agentName.toLowerCase()}-${status}-${timestamp}.md`;
26
+ const filePath = path.join(this.reportDir, filename);
27
+ const formattedContent = [
28
+ `# Swarm Status Report: ${agentName}`,
29
+ `**Status:** ${status.toUpperCase()}`,
30
+ `**Timestamp:** ${new Date().toLocaleString()}`,
31
+ `---`,
32
+ content,
33
+ `---`,
34
+ `*Generated by ZilMate Swarm Protocol*`
35
+ ].join('\n\n');
36
+ await writeFile(filePath, formattedContent, 'utf8');
37
+ // Also update a "current-status.md" for easy tracking
38
+ const currentPath = path.join(this.reportDir, `${agentName.toLowerCase()}-current.md`);
39
+ await writeFile(currentPath, formattedContent, 'utf8');
40
+ return filePath;
41
+ }
42
+ }
43
+ //# sourceMappingURL=reports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reports.js","sourceRoot":"","sources":["../../../src/runtime/swarm/reports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,OAAO,eAAe;IAClB,MAAM,CAAC,QAAQ,CAAkB;IACjC,SAAS,CAAS;IAE1B;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC9B,eAAe,CAAC,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACnD,CAAC;QACD,OAAO,eAAe,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,OAAe,EAAE,MAAqC;QACxF,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,GAAG,SAAS,CAAC,WAAW,EAAE,IAAI,MAAM,IAAI,SAAS,KAAK,CAAC;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAErD,MAAM,gBAAgB,GAAG;YACvB,0BAA0B,SAAS,EAAE;YACrC,eAAe,MAAM,CAAC,WAAW,EAAE,EAAE;YACrC,kBAAkB,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,EAAE;YAC/C,KAAK;YACL,OAAO;YACP,KAAK;YACL,uCAAuC;SACxC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEf,MAAM,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAEpD,sDAAsD;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACvF,MAAM,SAAS,CAAC,WAAW,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAEvD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}