@xoxoai/checkmate 0.4.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 (158) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +244 -0
  3. package/dist/ai/client.d.ts +49 -0
  4. package/dist/ai/client.d.ts.map +1 -0
  5. package/dist/ai/client.js +244 -0
  6. package/dist/ai/client.js.map +1 -0
  7. package/dist/ai/message-handler.d.ts +11 -0
  8. package/dist/ai/message-handler.d.ts.map +1 -0
  9. package/dist/ai/message-handler.js +33 -0
  10. package/dist/ai/message-handler.js.map +1 -0
  11. package/dist/ai/message-history.d.ts +19 -0
  12. package/dist/ai/message-history.d.ts.map +1 -0
  13. package/dist/ai/message-history.js +48 -0
  14. package/dist/ai/message-history.js.map +1 -0
  15. package/dist/ai/prompts.d.ts +4 -0
  16. package/dist/ai/prompts.d.ts.map +1 -0
  17. package/dist/ai/prompts.js +24 -0
  18. package/dist/ai/prompts.js.map +1 -0
  19. package/dist/ai/rate-limit-policy.d.ts +7 -0
  20. package/dist/ai/rate-limit-policy.d.ts.map +1 -0
  21. package/dist/ai/rate-limit-policy.js +17 -0
  22. package/dist/ai/rate-limit-policy.js.map +1 -0
  23. package/dist/ai/response-processor.d.ts +20 -0
  24. package/dist/ai/response-processor.d.ts.map +1 -0
  25. package/dist/ai/response-processor.js +62 -0
  26. package/dist/ai/response-processor.js.map +1 -0
  27. package/dist/ai/token-pricing.d.ts +13 -0
  28. package/dist/ai/token-pricing.d.ts.map +1 -0
  29. package/dist/ai/token-pricing.js +348 -0
  30. package/dist/ai/token-pricing.js.map +1 -0
  31. package/dist/ai/token-tracker.d.ts +33 -0
  32. package/dist/ai/token-tracker.d.ts.map +1 -0
  33. package/dist/ai/token-tracker.js +138 -0
  34. package/dist/ai/token-tracker.js.map +1 -0
  35. package/dist/ai/tool-response-handler.d.ts +21 -0
  36. package/dist/ai/tool-response-handler.d.ts.map +1 -0
  37. package/dist/ai/tool-response-handler.js +54 -0
  38. package/dist/ai/tool-response-handler.js.map +1 -0
  39. package/dist/config/runtime-config.d.ts +21 -0
  40. package/dist/config/runtime-config.d.ts.map +1 -0
  41. package/dist/config/runtime-config.js +98 -0
  42. package/dist/config/runtime-config.js.map +1 -0
  43. package/dist/core.d.ts +8 -0
  44. package/dist/core.d.ts.map +1 -0
  45. package/dist/core.js +4 -0
  46. package/dist/core.js.map +1 -0
  47. package/dist/index.d.ts +2 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +2 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/integrations/salesforce/authenticator.d.ts +27 -0
  52. package/dist/integrations/salesforce/authenticator.d.ts.map +1 -0
  53. package/dist/integrations/salesforce/authenticator.js +27 -0
  54. package/dist/integrations/salesforce/authenticator.js.map +1 -0
  55. package/dist/integrations/salesforce/cli-handler.d.ts +14 -0
  56. package/dist/integrations/salesforce/cli-handler.d.ts.map +1 -0
  57. package/dist/integrations/salesforce/cli-handler.js +50 -0
  58. package/dist/integrations/salesforce/cli-handler.js.map +1 -0
  59. package/dist/logging/index.d.ts +2 -0
  60. package/dist/logging/index.d.ts.map +1 -0
  61. package/dist/logging/index.js +4 -0
  62. package/dist/logging/index.js.map +1 -0
  63. package/dist/logging/logger.d.ts +5 -0
  64. package/dist/logging/logger.d.ts.map +1 -0
  65. package/dist/logging/logger.js +15 -0
  66. package/dist/logging/logger.js.map +1 -0
  67. package/dist/playwright.d.ts +102 -0
  68. package/dist/playwright.d.ts.map +1 -0
  69. package/dist/playwright.js +116 -0
  70. package/dist/playwright.js.map +1 -0
  71. package/dist/runtime/extension.d.ts +274 -0
  72. package/dist/runtime/extension.d.ts.map +1 -0
  73. package/dist/runtime/extension.js +171 -0
  74. package/dist/runtime/extension.js.map +1 -0
  75. package/dist/runtime/runner.d.ts +94 -0
  76. package/dist/runtime/runner.d.ts.map +1 -0
  77. package/dist/runtime/runner.js +86 -0
  78. package/dist/runtime/runner.js.map +1 -0
  79. package/dist/runtime/step-execution.d.ts +17 -0
  80. package/dist/runtime/step-execution.d.ts.map +1 -0
  81. package/dist/runtime/step-execution.js +49 -0
  82. package/dist/runtime/step-execution.js.map +1 -0
  83. package/dist/runtime/types.d.ts +79 -0
  84. package/dist/runtime/types.d.ts.map +1 -0
  85. package/dist/runtime/types.js +2 -0
  86. package/dist/runtime/types.js.map +1 -0
  87. package/dist/salesforce.d.ts +71 -0
  88. package/dist/salesforce.d.ts.map +1 -0
  89. package/dist/salesforce.js +73 -0
  90. package/dist/salesforce.js.map +1 -0
  91. package/dist/tools/browser/screenshot-service.d.ts +10 -0
  92. package/dist/tools/browser/screenshot-service.d.ts.map +1 -0
  93. package/dist/tools/browser/screenshot-service.js +23 -0
  94. package/dist/tools/browser/screenshot-service.js.map +1 -0
  95. package/dist/tools/browser/snapshot-filter/index.d.ts +4 -0
  96. package/dist/tools/browser/snapshot-filter/index.d.ts.map +1 -0
  97. package/dist/tools/browser/snapshot-filter/index.js +4 -0
  98. package/dist/tools/browser/snapshot-filter/index.js.map +1 -0
  99. package/dist/tools/browser/snapshot-filter/semantic-scorer.d.ts +15 -0
  100. package/dist/tools/browser/snapshot-filter/semantic-scorer.d.ts.map +1 -0
  101. package/dist/tools/browser/snapshot-filter/semantic-scorer.js +99 -0
  102. package/dist/tools/browser/snapshot-filter/semantic-scorer.js.map +1 -0
  103. package/dist/tools/browser/snapshot-filter/snapshot-filter.d.ts +4 -0
  104. package/dist/tools/browser/snapshot-filter/snapshot-filter.d.ts.map +1 -0
  105. package/dist/tools/browser/snapshot-filter/snapshot-filter.js +57 -0
  106. package/dist/tools/browser/snapshot-filter/snapshot-filter.js.map +1 -0
  107. package/dist/tools/browser/snapshot-filter/tree-reconstructor.d.ts +3 -0
  108. package/dist/tools/browser/snapshot-filter/tree-reconstructor.d.ts.map +1 -0
  109. package/dist/tools/browser/snapshot-filter/tree-reconstructor.js +85 -0
  110. package/dist/tools/browser/snapshot-filter/tree-reconstructor.js.map +1 -0
  111. package/dist/tools/browser/snapshot-service.d.ts +19 -0
  112. package/dist/tools/browser/snapshot-service.d.ts.map +1 -0
  113. package/dist/tools/browser/snapshot-service.js +67 -0
  114. package/dist/tools/browser/snapshot-service.js.map +1 -0
  115. package/dist/tools/browser/tool.d.ts +34 -0
  116. package/dist/tools/browser/tool.d.ts.map +1 -0
  117. package/dist/tools/browser/tool.js +226 -0
  118. package/dist/tools/browser/tool.js.map +1 -0
  119. package/dist/tools/browser/transient-state-tracker.d.ts +16 -0
  120. package/dist/tools/browser/transient-state-tracker.d.ts.map +1 -0
  121. package/dist/tools/browser/transient-state-tracker.js +266 -0
  122. package/dist/tools/browser/transient-state-tracker.js.map +1 -0
  123. package/dist/tools/define-agent-tool.d.ts +45 -0
  124. package/dist/tools/define-agent-tool.d.ts.map +1 -0
  125. package/dist/tools/define-agent-tool.js +55 -0
  126. package/dist/tools/define-agent-tool.js.map +1 -0
  127. package/dist/tools/dispatcher.d.ts +11 -0
  128. package/dist/tools/dispatcher.d.ts.map +1 -0
  129. package/dist/tools/dispatcher.js +49 -0
  130. package/dist/tools/dispatcher.js.map +1 -0
  131. package/dist/tools/loop-detector.d.ts +27 -0
  132. package/dist/tools/loop-detector.d.ts.map +1 -0
  133. package/dist/tools/loop-detector.js +76 -0
  134. package/dist/tools/loop-detector.js.map +1 -0
  135. package/dist/tools/registry.d.ts +21 -0
  136. package/dist/tools/registry.d.ts.map +1 -0
  137. package/dist/tools/registry.js +46 -0
  138. package/dist/tools/registry.js.map +1 -0
  139. package/dist/tools/salesforce/login-tool.d.ts +7 -0
  140. package/dist/tools/salesforce/login-tool.d.ts.map +1 -0
  141. package/dist/tools/salesforce/login-tool.js +25 -0
  142. package/dist/tools/salesforce/login-tool.js.map +1 -0
  143. package/dist/tools/step/result-tool.d.ts +7 -0
  144. package/dist/tools/step/result-tool.d.ts.map +1 -0
  145. package/dist/tools/step/result-tool.js +32 -0
  146. package/dist/tools/step/result-tool.js.map +1 -0
  147. package/dist/tools/tool-contract.d.ts +3 -0
  148. package/dist/tools/tool-contract.d.ts.map +1 -0
  149. package/dist/tools/tool-contract.js +2 -0
  150. package/dist/tools/tool-contract.js.map +1 -0
  151. package/dist/tools/types.d.ts +139 -0
  152. package/dist/tools/types.d.ts.map +1 -0
  153. package/dist/tools/types.js +4 -0
  154. package/dist/tools/types.js.map +1 -0
  155. package/docs/EXTENSIONS.md +233 -0
  156. package/docs/GUIDE.md +467 -0
  157. package/docs/ROADMAP.md +47 -0
  158. package/package.json +106 -0
@@ -0,0 +1,48 @@
1
+ export class MessageHistory {
2
+ static SNAPSHOT_IDENTIFIER = 'this is a current page snapshot';
3
+ static SCREENSHOT_IDENTIFIER = 'this is a current screenshot of the page';
4
+ static TOOL_EXECUTION_SUMMARY_IDENTIFIER = 'tool execution summary';
5
+ buildInitialMessages(config) {
6
+ return [
7
+ {
8
+ role: 'system',
9
+ content: [{ type: 'text', text: config.systemPrompt }],
10
+ },
11
+ {
12
+ role: 'user',
13
+ content: [{ type: 'text', text: config.userPrompt }],
14
+ },
15
+ ...(config.contextMessages ?? []),
16
+ ];
17
+ }
18
+ createSnapshotMessage(snapshotContent) {
19
+ return {
20
+ role: 'user',
21
+ content: [{ type: 'text', text: `${MessageHistory.SNAPSHOT_IDENTIFIER}:\n${snapshotContent}` }],
22
+ };
23
+ }
24
+ createScreenshotMessage(base64Data, mimeType = 'image/png') {
25
+ return {
26
+ role: 'user',
27
+ content: [
28
+ { type: 'text', text: MessageHistory.SCREENSHOT_IDENTIFIER },
29
+ { type: 'image_url', image_url: { url: `data:${mimeType};base64,${base64Data}`, detail: 'high' } },
30
+ ],
31
+ };
32
+ }
33
+ removeEphemeralStateMessages(aiClient) {
34
+ aiClient.replaceHistory(aiClient.getMessages().filter((message) => !this.isEphemeralStateMessage(message)));
35
+ }
36
+ isEphemeralStateMessage(message) {
37
+ if (message.role !== 'user' || !Array.isArray(message.content) || message.content.length === 0) {
38
+ return false;
39
+ }
40
+ const firstPart = message.content[0];
41
+ if (!('text' in firstPart) || typeof firstPart.text !== 'string') {
42
+ return false;
43
+ }
44
+ return (firstPart.text.startsWith(`${MessageHistory.SNAPSHOT_IDENTIFIER}:`) ||
45
+ firstPart.text === MessageHistory.SCREENSHOT_IDENTIFIER);
46
+ }
47
+ }
48
+ //# sourceMappingURL=message-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-history.js","sourceRoot":"","sources":["../../src/ai/message-history.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,cAAc;IAC1B,MAAM,CAAU,mBAAmB,GAAG,iCAAiC,CAAA;IACvE,MAAM,CAAU,qBAAqB,GAAG,0CAA0C,CAAA;IAClF,MAAM,CAAU,iCAAiC,GAAG,wBAAwB,CAAA;IAE5E,oBAAoB,CAAC,MAAgC;QACpD,OAAO;YACN;gBACC,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;aACtD;YACD;gBACC,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;aACpD;YACD,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;SACjC,CAAA;IACF,CAAC;IAED,qBAAqB,CAAC,eAA8B;QACnD,OAAO;YACN,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,mBAAmB,MAAM,eAAe,EAAE,EAAE,CAAC;SAC/F,CAAA;IACF,CAAC;IAED,uBAAuB,CAAC,UAAkB,EAAE,WAAmB,WAAW;QACzE,OAAO;YACN,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACR,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,qBAAqB,EAAE;gBAC5D,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,QAAQ,WAAW,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;aAClG;SACD,CAAA;IACF,CAAC;IAED,4BAA4B,CAAC,QAAkB;QAC9C,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAC5G,CAAC;IAEO,uBAAuB,CAAC,OAAmC;QAClE,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChG,OAAO,KAAK,CAAA;QACb,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACpC,IAAI,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClE,OAAO,KAAK,CAAA;QACb,CAAC;QAED,OAAO,CACN,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,mBAAmB,GAAG,CAAC;YACnE,SAAS,CAAC,IAAI,KAAK,cAAc,CAAC,qBAAqB,CACvD,CAAA;IACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Step } from '../runtime/types';
2
+ export declare const STEP_SYSTEM_PROMPT: (instructions?: string[]) => string;
3
+ export declare const STEP_START_USER_PROMPT: (step: Step) => string;
4
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ai/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAGvC,eAAO,MAAM,kBAAkB,GAAI,eAAc,MAAM,EAAO,WAkB7D,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,MAAM,IAAI,WAIhD,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { StepResultTool } from '../tools/step/result-tool';
2
+ export const STEP_SYSTEM_PROMPT = (instructions = []) => {
3
+ const extensionInstructions = instructions.length > 0
4
+ ? `
5
+
6
+ # EXTENSIONS:
7
+ ${instructions.join('\n')}`
8
+ : '';
9
+ return `You are a quality assurance assistant executing test steps.
10
+
11
+ # RULES:
12
+ Be objective when asserting if expected results are met and focus on executing all the actions.
13
+ Never ask for user input. Use only tools to proceed with the step.
14
+ If you cannot proceed, fail the step and provide the reason as the actual result.
15
+ If the step fails, call '${StepResultTool.TOOL_FAIL_TEST_STEP}' with the actual result.
16
+ If the step succeeds, call '${StepResultTool.TOOL_PASS_TEST_STEP}' with the actual result.
17
+ ${extensionInstructions}`;
18
+ };
19
+ export const STEP_START_USER_PROMPT = (step) => `Here is the test step I want you to execute.
20
+
21
+ # STEP:
22
+ ${JSON.stringify(step, null, 2)}
23
+ `;
24
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/ai/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,eAAyB,EAAE,EAAE,EAAE;IACjE,MAAM,qBAAqB,GAC1B,YAAY,CAAC,MAAM,GAAG,CAAC;QACtB,CAAC,CAAC;;;EAGH,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACxB,CAAC,CAAC,EAAE,CAAA;IAEN,OAAO;;;;;;2BAMmB,cAAc,CAAC,mBAAmB;8BAC/B,cAAc,CAAC,mBAAmB;EAC9D,qBAAqB,EAAE,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC;;;EAGpD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;CAC9B,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { RuntimeConfig } from '../config/runtime-config';
2
+ export declare class RateLimitPolicy {
3
+ private readonly config;
4
+ constructor(config?: RuntimeConfig);
5
+ wait(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=rate-limit-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit-policy.d.ts","sourceRoot":"","sources":["../../src/ai/rate-limit-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAGxD,qBAAa,eAAe;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,gBAAsB;IAEnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAS3B"}
@@ -0,0 +1,17 @@
1
+ import { RuntimeConfig } from '../config/runtime-config';
2
+ import { logger } from '../logging';
3
+ export class RateLimitPolicy {
4
+ config;
5
+ constructor(config = new RuntimeConfig()) {
6
+ this.config = config;
7
+ }
8
+ async wait() {
9
+ const delay = this.config.getApiRateLimitDelayMs();
10
+ if (delay <= 0) {
11
+ return;
12
+ }
13
+ logger.warn(`waiting: ${Math.floor(delay / 1000)} seconds to avoid rate limit`);
14
+ await new Promise((resolve) => setTimeout(resolve, delay));
15
+ }
16
+ }
17
+ //# sourceMappingURL=rate-limit-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit-policy.js","sourceRoot":"","sources":["../../src/ai/rate-limit-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,MAAM,OAAO,eAAe;IACE;IAA7B,YAA6B,SAAS,IAAI,aAAa,EAAE;QAA5B,WAAM,GAAN,MAAM,CAAsB;IAAG,CAAC;IAE7D,KAAK,CAAC,IAAI;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAA;QAClD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAChB,OAAM;QACP,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,8BAA8B,CAAC,CAAA;QAC/E,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAC3D,CAAC;CACD"}
@@ -0,0 +1,20 @@
1
+ import { ChatCompletion } from 'openai/resources/chat/completions';
2
+ import { Step, ResolveStepResult } from '../runtime/types';
3
+ import { AiClient } from './client';
4
+ import { ExtensionHost } from '../runtime/extension';
5
+ export type ResponseProcessorDependencies = {
6
+ aiClient: AiClient;
7
+ extensionHost: ExtensionHost;
8
+ };
9
+ export declare class ResponseProcessor {
10
+ private readonly tokenTracker;
11
+ private readonly toolDispatcher;
12
+ private readonly toolResponseHandler;
13
+ private readonly rateLimitPolicy;
14
+ private readonly messageHandler;
15
+ private readonly aiClient;
16
+ constructor({ aiClient, extensionHost }: ResponseProcessorDependencies);
17
+ resetStepTokens(): void;
18
+ handleResponse(response: ChatCompletion, step: Step, resolveStepResult: ResolveStepResult): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=response-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-processor.d.ts","sourceRoot":"","sources":["../../src/ai/response-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAI1D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAMnC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,MAAM,MAAM,6BAA6B,GAAG;IAC3C,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa,EAAE,aAAa,CAAA;CAC5B,CAAA;AAED,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEvB,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,6BAA6B;IAOtE,eAAe,IAAI,IAAI;IAIjB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CA+C/G"}
@@ -0,0 +1,62 @@
1
+ import { ToolDispatcher } from '../tools/dispatcher';
2
+ import { MessageHandler } from './message-handler';
3
+ import { MessageHistory } from './message-history';
4
+ import { RateLimitPolicy } from './rate-limit-policy';
5
+ import { TokenTracker } from './token-tracker';
6
+ import { ToolResponseHandler } from './tool-response-handler';
7
+ export class ResponseProcessor {
8
+ tokenTracker = new TokenTracker();
9
+ toolDispatcher;
10
+ toolResponseHandler;
11
+ rateLimitPolicy = new RateLimitPolicy();
12
+ messageHandler;
13
+ aiClient;
14
+ constructor({ aiClient, extensionHost }) {
15
+ this.aiClient = aiClient;
16
+ this.toolDispatcher = new ToolDispatcher(aiClient.getToolRegistry());
17
+ this.toolResponseHandler = new ToolResponseHandler(aiClient, new MessageHistory(), this, extensionHost);
18
+ this.messageHandler = new MessageHandler(aiClient, this);
19
+ }
20
+ resetStepTokens() {
21
+ this.tokenTracker.resetStep();
22
+ }
23
+ async handleResponse(response, step, resolveStepResult) {
24
+ await this.rateLimitPolicy.wait();
25
+ const historyTokenCount = this.aiClient.countHistoryTokens();
26
+ this.tokenTracker.log(response, historyTokenCount, this.aiClient.getRuntimeConfig().getModel());
27
+ if (!response.choices || response.choices.length === 0) {
28
+ throw new Error(`No choices found in response:\n${JSON.stringify(response, null, 2)}`);
29
+ }
30
+ for (const choice of response.choices) {
31
+ if (!choice.message.tool_calls || choice.message.tool_calls.length === 0) {
32
+ await this.messageHandler.handle(choice, step, resolveStepResult);
33
+ continue;
34
+ }
35
+ const toolResponses = [];
36
+ let dispatchedToolCall = false;
37
+ for (const toolCall of choice.message.tool_calls) {
38
+ if (toolCall.type !== 'function') {
39
+ continue;
40
+ }
41
+ dispatchedToolCall = true;
42
+ const parsedToolCall = {
43
+ name: toolCall.function.name,
44
+ arguments: JSON.parse(toolCall.function.arguments || '{}'),
45
+ };
46
+ const toolResponse = await this.toolDispatcher.dispatch(parsedToolCall, { step, resolveStepResult });
47
+ if (toolResponse) {
48
+ toolResponses.push({ toolCallId: toolCall.id, toolCall: parsedToolCall, toolResponse });
49
+ }
50
+ }
51
+ if (toolResponses.length > 0) {
52
+ await this.toolResponseHandler.handleMultiple(toolResponses, step, resolveStepResult);
53
+ return;
54
+ }
55
+ if (dispatchedToolCall) {
56
+ return;
57
+ }
58
+ await this.messageHandler.handle(choice, step, resolveStepResult);
59
+ }
60
+ }
61
+ }
62
+ //# sourceMappingURL=response-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-processor.js","sourceRoot":"","sources":["../../src/ai/response-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * TokenPricing estimates provider token costs in USD.
3
+ */
4
+ export declare class TokenPricing {
5
+ private static roundToCents;
6
+ private static inputPricePerMillionUSD;
7
+ private static outputPricePerMillionUSD;
8
+ static inputPriceUSD(model: string, tokens: number): number;
9
+ static cachedInputPriceUSD(model: string, tokens: number): number;
10
+ static outputPriceUSD(model: string, tokens: number): number;
11
+ static totalPriceUSD(model: string, inputTokens: number, outputTokens: number, cachedInputTokens?: number): number;
12
+ }
13
+ //# sourceMappingURL=token-pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-pricing.d.ts","sourceRoot":"","sources":["../../src/ai/token-pricing.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,YAAY;IACxB,OAAO,CAAC,MAAM,CAAC,YAAY;IAI3B,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAqKtC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAiKvC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAI3D,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAIjE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAI5D,MAAM,CAAC,aAAa,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,iBAAiB,GAAE,MAAU,GAC3B,MAAM;CAQT"}
@@ -0,0 +1,348 @@
1
+ /**
2
+ * TokenPricing estimates provider token costs in USD.
3
+ */
4
+ export class TokenPricing {
5
+ static roundToCents(price) {
6
+ return Math.round(price * 1000) / 1000;
7
+ }
8
+ static inputPricePerMillionUSD(model) {
9
+ switch (model) {
10
+ case 'gpt-5.4':
11
+ return this.roundToCents(2.5);
12
+ case 'gpt-5.3-instant':
13
+ case 'gpt-5.3-codex':
14
+ return this.roundToCents(1.5);
15
+ case 'gpt-5.2':
16
+ return this.roundToCents(1.75);
17
+ case 'gpt-5.2-pro':
18
+ return this.roundToCents(21.0);
19
+ case 'gpt-5-mini':
20
+ return this.roundToCents(0.25);
21
+ case 'gpt-5.1':
22
+ return this.roundToCents(1.25);
23
+ case 'gpt-5-nano':
24
+ return this.roundToCents(0.05);
25
+ case 'gpt-5-pro':
26
+ return this.roundToCents(15.0);
27
+ case 'gpt-4.1':
28
+ return this.roundToCents(3.0);
29
+ case 'gpt-4.1-mini':
30
+ return this.roundToCents(0.8);
31
+ case 'gpt-4.1-nano':
32
+ return this.roundToCents(0.2);
33
+ case 'gpt-4o':
34
+ case 'gpt-4o-2024-11-20':
35
+ return this.roundToCents(2.5);
36
+ case 'gpt-4o-mini':
37
+ case 'gpt-4o-mini-2024-07-18':
38
+ return this.roundToCents(0.15);
39
+ case 'gpt-4-turbo':
40
+ case 'gpt-4-turbo-preview':
41
+ return this.roundToCents(10.0);
42
+ case 'gpt-4':
43
+ return this.roundToCents(30.0);
44
+ case 'gpt-3.5-turbo':
45
+ return this.roundToCents(0.5);
46
+ case 'o4-mini':
47
+ return this.roundToCents(4.0);
48
+ case 'o3-mini':
49
+ return this.roundToCents(1.1);
50
+ case 'o1':
51
+ case 'o1-2024-12-17':
52
+ return this.roundToCents(15.0);
53
+ case 'o1-mini':
54
+ case 'o1-mini-2024-09-12':
55
+ return this.roundToCents(3.0);
56
+ case 'claude-3-5-sonnet-20241022':
57
+ case 'claude-3-5-sonnet-latest':
58
+ case 'claude-4-sonnet':
59
+ case 'claude-4.5-sonnet':
60
+ case 'claude-4.6-sonnet':
61
+ return this.roundToCents(3.0);
62
+ case 'claude-3-5-haiku-20241022':
63
+ case 'claude-3-5-haiku-latest':
64
+ return this.roundToCents(0.25);
65
+ case 'claude-4.5-haiku':
66
+ return this.roundToCents(1.0);
67
+ case 'claude-3-opus-20240229':
68
+ case 'claude-3-opus-latest':
69
+ return this.roundToCents(15.0);
70
+ case 'claude-4.6-opus':
71
+ return this.roundToCents(5.0);
72
+ case 'claude-opus-4.5':
73
+ case 'claude-opus-4-5':
74
+ return this.roundToCents(5.0);
75
+ case 'claude-opus-4.1':
76
+ case 'claude-opus-4-1':
77
+ case 'claude-opus-4':
78
+ return this.roundToCents(15.0);
79
+ case 'claude-sonnet-4.5':
80
+ case 'claude-sonnet-4-5':
81
+ case 'claude-sonnet-4':
82
+ case 'claude-sonnet-3.7':
83
+ return this.roundToCents(3.0);
84
+ case 'claude-haiku-4.5':
85
+ case 'claude-haiku-4-5':
86
+ return this.roundToCents(1.0);
87
+ case 'claude-haiku-3.5':
88
+ return this.roundToCents(0.8);
89
+ case 'claude-haiku-3':
90
+ return this.roundToCents(0.25);
91
+ case 'gemini-3.1-pro-preview':
92
+ return this.roundToCents(2.0);
93
+ case 'gemini-3.1-flash-lite-preview':
94
+ return this.roundToCents(0.25);
95
+ case 'gemini-3.1-flash-image-preview':
96
+ return this.roundToCents(0.5);
97
+ case 'gemini-3-pro-preview':
98
+ return this.roundToCents(2.0);
99
+ case 'gemini-2.5-pro':
100
+ return this.roundToCents(1.25);
101
+ case 'gemini-2.5-flash':
102
+ case 'gemini-2.5-flash-preview-09-2025':
103
+ return this.roundToCents(0.3);
104
+ case 'gemini-2.5-flash-lite':
105
+ case 'gemini-2.5-flash-lite-preview-09-2025':
106
+ return this.roundToCents(0.1);
107
+ case 'gemini-3-flash-preview':
108
+ case 'gemini-3-flash':
109
+ return this.roundToCents(0.5);
110
+ case 'gemini-3-pro-image-preview':
111
+ case 'gemini-3-pro-image':
112
+ return this.roundToCents(2.0);
113
+ case 'gemini-2.0-flash':
114
+ return this.roundToCents(0.1);
115
+ case 'gemini-2.0-flash-lite':
116
+ return this.roundToCents(0.075);
117
+ case 'grok-4.20':
118
+ case 'grok-4.20-latest':
119
+ return this.roundToCents(3.0);
120
+ case 'grok-4':
121
+ case 'grok-4-0709':
122
+ case 'grok-4-latest':
123
+ return this.roundToCents(3.0);
124
+ case 'grok-4-1-fast':
125
+ case 'grok-4-1-fast-reasoning':
126
+ case 'grok-4-1-fast-reasoning-latest':
127
+ case 'grok-4-1-fast-non-reasoning':
128
+ case 'grok-4-fast-reasoning':
129
+ case 'grok-4-fast-non-reasoning':
130
+ return this.roundToCents(0.2);
131
+ case 'grok-code-fast-1':
132
+ return this.roundToCents(0.2);
133
+ case 'grok-2-vision-1212':
134
+ return this.roundToCents(2.0);
135
+ case 'grok-3':
136
+ case 'grok-3-latest':
137
+ case 'grok-3-beta':
138
+ case 'grok-3-fast':
139
+ case 'grok-3-fast-latest':
140
+ case 'grok-3-fast-beta':
141
+ return this.roundToCents(3.0);
142
+ case 'grok-3-mini':
143
+ case 'grok-3-mini-latest':
144
+ case 'grok-3-mini-beta':
145
+ case 'grok-3-mini-fast':
146
+ case 'grok-3-mini-fast-latest':
147
+ case 'grok-3-mini-fast-beta':
148
+ return this.roundToCents(0.3);
149
+ case 'openai/gpt-oss-20b':
150
+ case 'openai/gpt-oss-safeguard-20b':
151
+ return this.roundToCents(0.075);
152
+ case 'openai/gpt-oss-120b':
153
+ return this.roundToCents(0.15);
154
+ case 'moonshotai/kimi-k2-instruct-0905':
155
+ return this.roundToCents(1.0);
156
+ case 'meta-llama/llama-4-scout-17b-16e-instruct':
157
+ return this.roundToCents(0.11);
158
+ case 'meta-llama/llama-4-maverick-17b-128e-instruct':
159
+ return this.roundToCents(0.2);
160
+ case 'meta-llama/llama-guard-4-12b':
161
+ return this.roundToCents(0.2);
162
+ case 'qwen/qwen3-32b':
163
+ return this.roundToCents(0.29);
164
+ case 'llama-3.3-70b-versatile':
165
+ return this.roundToCents(0.59);
166
+ case 'llama-3.1-8b-instant':
167
+ return this.roundToCents(0.05);
168
+ default:
169
+ return this.roundToCents(1.0);
170
+ }
171
+ }
172
+ static outputPricePerMillionUSD(model) {
173
+ switch (model) {
174
+ case 'gpt-5.4':
175
+ return this.roundToCents(10.0);
176
+ case 'gpt-5.3-instant':
177
+ case 'gpt-5.3-codex':
178
+ return this.roundToCents(6.0);
179
+ case 'gpt-5.2':
180
+ return this.roundToCents(7.0);
181
+ case 'gpt-5.2-pro':
182
+ return this.roundToCents(84.0);
183
+ case 'gpt-5-mini':
184
+ return this.roundToCents(2.0);
185
+ case 'gpt-5.1':
186
+ return this.roundToCents(10.0);
187
+ case 'gpt-5-nano':
188
+ return this.roundToCents(0.4);
189
+ case 'gpt-5-pro':
190
+ return this.roundToCents(120.0);
191
+ case 'gpt-4.1':
192
+ return this.roundToCents(12.0);
193
+ case 'gpt-4.1-mini':
194
+ return this.roundToCents(3.2);
195
+ case 'gpt-4.1-nano':
196
+ return this.roundToCents(0.8);
197
+ case 'gpt-4o':
198
+ case 'gpt-4o-2024-11-20':
199
+ return this.roundToCents(10.0);
200
+ case 'gpt-4o-mini':
201
+ case 'gpt-4o-mini-2024-07-18':
202
+ return this.roundToCents(0.6);
203
+ case 'gpt-4-turbo':
204
+ case 'gpt-4-turbo-preview':
205
+ return this.roundToCents(30.0);
206
+ case 'gpt-4':
207
+ return this.roundToCents(60.0);
208
+ case 'gpt-3.5-turbo':
209
+ return this.roundToCents(1.5);
210
+ case 'o4-mini':
211
+ return this.roundToCents(16.0);
212
+ case 'o3-mini':
213
+ return this.roundToCents(4.4);
214
+ case 'o1':
215
+ case 'o1-2024-12-17':
216
+ return this.roundToCents(60.0);
217
+ case 'o1-mini':
218
+ case 'o1-mini-2024-09-12':
219
+ return this.roundToCents(12.0);
220
+ case 'claude-3-5-sonnet-20241022':
221
+ case 'claude-3-5-sonnet-latest':
222
+ case 'claude-4-sonnet':
223
+ case 'claude-4.5-sonnet':
224
+ case 'claude-4.6-sonnet':
225
+ case 'claude-sonnet-4.5':
226
+ case 'claude-sonnet-4-5':
227
+ case 'claude-sonnet-4':
228
+ case 'claude-sonnet-3.7':
229
+ return this.roundToCents(15.0);
230
+ case 'claude-3-5-haiku-20241022':
231
+ case 'claude-3-5-haiku-latest':
232
+ return this.roundToCents(1.25);
233
+ case 'claude-4.5-haiku':
234
+ case 'claude-haiku-4.5':
235
+ case 'claude-haiku-4-5':
236
+ return this.roundToCents(5.0);
237
+ case 'claude-haiku-3.5':
238
+ return this.roundToCents(4.0);
239
+ case 'claude-haiku-3':
240
+ return this.roundToCents(1.25);
241
+ case 'claude-3-opus-20240229':
242
+ case 'claude-3-opus-latest':
243
+ return this.roundToCents(75.0);
244
+ case 'claude-4.6-opus':
245
+ case 'claude-opus-4.5':
246
+ case 'claude-opus-4-5':
247
+ return this.roundToCents(25.0);
248
+ case 'claude-opus-4.1':
249
+ case 'claude-opus-4-1':
250
+ case 'claude-opus-4':
251
+ return this.roundToCents(75.0);
252
+ case 'gemini-3.1-pro-preview':
253
+ return this.roundToCents(10.0);
254
+ case 'gemini-3.1-flash-lite-preview':
255
+ return this.roundToCents(1.0);
256
+ case 'gemini-3.1-flash-image-preview':
257
+ return this.roundToCents(2.0);
258
+ case 'gemini-3-pro-preview':
259
+ return this.roundToCents(10.0);
260
+ case 'gemini-2.5-pro':
261
+ return this.roundToCents(10.0);
262
+ case 'gemini-2.5-flash':
263
+ case 'gemini-2.5-flash-preview-09-2025':
264
+ return this.roundToCents(2.5);
265
+ case 'gemini-2.5-flash-lite':
266
+ case 'gemini-2.5-flash-lite-preview-09-2025':
267
+ return this.roundToCents(0.4);
268
+ case 'gemini-3-flash-preview':
269
+ case 'gemini-3-flash':
270
+ return this.roundToCents(2.0);
271
+ case 'gemini-3-pro-image-preview':
272
+ case 'gemini-3-pro-image':
273
+ return this.roundToCents(10.0);
274
+ case 'gemini-2.0-flash':
275
+ return this.roundToCents(0.4);
276
+ case 'gemini-2.0-flash-lite':
277
+ return this.roundToCents(0.3);
278
+ case 'grok-4.20':
279
+ case 'grok-4.20-latest':
280
+ return this.roundToCents(15.0);
281
+ case 'grok-4':
282
+ case 'grok-4-0709':
283
+ case 'grok-4-latest':
284
+ return this.roundToCents(15.0);
285
+ case 'grok-4-1-fast':
286
+ case 'grok-4-1-fast-reasoning':
287
+ case 'grok-4-1-fast-reasoning-latest':
288
+ case 'grok-4-1-fast-non-reasoning':
289
+ case 'grok-4-fast-reasoning':
290
+ case 'grok-4-fast-non-reasoning':
291
+ case 'grok-code-fast-1':
292
+ return this.roundToCents(0.5);
293
+ case 'grok-2-vision-1212':
294
+ return this.roundToCents(10.0);
295
+ case 'grok-3':
296
+ case 'grok-3-latest':
297
+ case 'grok-3-beta':
298
+ case 'grok-3-fast':
299
+ case 'grok-3-fast-latest':
300
+ case 'grok-3-fast-beta':
301
+ return this.roundToCents(15.0);
302
+ case 'grok-3-mini':
303
+ case 'grok-3-mini-latest':
304
+ case 'grok-3-mini-beta':
305
+ case 'grok-3-mini-fast':
306
+ case 'grok-3-mini-fast-latest':
307
+ case 'grok-3-mini-fast-beta':
308
+ return this.roundToCents(0.5);
309
+ case 'openai/gpt-oss-20b':
310
+ case 'openai/gpt-oss-safeguard-20b':
311
+ return this.roundToCents(0.3);
312
+ case 'openai/gpt-oss-120b':
313
+ return this.roundToCents(0.6);
314
+ case 'moonshotai/kimi-k2-instruct-0905':
315
+ return this.roundToCents(3.0);
316
+ case 'meta-llama/llama-4-scout-17b-16e-instruct':
317
+ return this.roundToCents(0.34);
318
+ case 'meta-llama/llama-4-maverick-17b-128e-instruct':
319
+ return this.roundToCents(0.6);
320
+ case 'meta-llama/llama-guard-4-12b':
321
+ return this.roundToCents(0.6);
322
+ case 'qwen/qwen3-32b':
323
+ return this.roundToCents(0.59);
324
+ case 'llama-3.3-70b-versatile':
325
+ return this.roundToCents(0.79);
326
+ case 'llama-3.1-8b-instant':
327
+ return this.roundToCents(0.08);
328
+ default:
329
+ return this.roundToCents(2.0);
330
+ }
331
+ }
332
+ static inputPriceUSD(model, tokens) {
333
+ return this.roundToCents((this.inputPricePerMillionUSD(model) * tokens) / 1_000_000);
334
+ }
335
+ static cachedInputPriceUSD(model, tokens) {
336
+ return this.roundToCents(this.inputPriceUSD(model, tokens) / 10);
337
+ }
338
+ static outputPriceUSD(model, tokens) {
339
+ return this.roundToCents((this.outputPricePerMillionUSD(model) * tokens) / 1_000_000);
340
+ }
341
+ static totalPriceUSD(model, inputTokens, outputTokens, cachedInputTokens = 0) {
342
+ const uncachedInputTokens = Math.max(inputTokens - cachedInputTokens, 0);
343
+ return this.roundToCents(this.inputPriceUSD(model, uncachedInputTokens) +
344
+ this.cachedInputPriceUSD(model, cachedInputTokens) +
345
+ this.outputPriceUSD(model, outputTokens));
346
+ }
347
+ }
348
+ //# sourceMappingURL=token-pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-pricing.js","sourceRoot":"","sources":["../../src/ai/token-pricing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { ChatCompletion } from 'openai/resources/chat/completions';
2
+ import { RuntimeConfig } from '../config/runtime-config';
3
+ export declare class TokenTracker {
4
+ private config;
5
+ private _inputTokensUsedForTest;
6
+ private _inputTokensUsedForStep;
7
+ private _cachedInputTokensUsedForTest;
8
+ private _cachedInputTokensUsedForStep;
9
+ private _cacheMetricsUnavailableForTest;
10
+ private _cacheMetricsUnavailableForStep;
11
+ private _outputTokensUsedForTest;
12
+ private _outputTokensUsedForStep;
13
+ constructor(config?: RuntimeConfig);
14
+ private get inputTokensUsedForTest();
15
+ private set inputTokensUsedForTest(value);
16
+ private get inputTokensUsedForStep();
17
+ private set inputTokensUsedForStep(value);
18
+ private get cachedInputTokensUsedForTest();
19
+ private set cachedInputTokensUsedForTest(value);
20
+ private get cachedInputTokensUsedForStep();
21
+ private set cachedInputTokensUsedForStep(value);
22
+ private get outputTokensUsedForTest();
23
+ private set outputTokensUsedForTest(value);
24
+ private get outputTokensUsedForStep();
25
+ private set outputTokensUsedForStep(value);
26
+ private checkBudget;
27
+ resetStep(): void;
28
+ log(response: ChatCompletion, historyTokenCount: number, model: string): void;
29
+ private inputCostUSD;
30
+ private formatCachedUsage;
31
+ private formatUSD;
32
+ }
33
+ //# sourceMappingURL=token-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-tracker.d.ts","sourceRoot":"","sources":["../../src/ai/token-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAIxD,qBAAa,YAAY;IAUZ,OAAO,CAAC,MAAM;IAT1B,OAAO,CAAC,uBAAuB,CAAI;IACnC,OAAO,CAAC,uBAAuB,CAAI;IACnC,OAAO,CAAC,6BAA6B,CAAI;IACzC,OAAO,CAAC,6BAA6B,CAAI;IACzC,OAAO,CAAC,+BAA+B,CAAQ;IAC/C,OAAO,CAAC,+BAA+B,CAAQ;IAC/C,OAAO,CAAC,wBAAwB,CAAI;IACpC,OAAO,CAAC,wBAAwB,CAAI;gBAEhB,MAAM,gBAAsB;IAEhD,OAAO,KAAK,sBAAsB,GAEjC;IAED,OAAO,KAAK,sBAAsB,QAGjC;IAED,OAAO,KAAK,sBAAsB,GAEjC;IAED,OAAO,KAAK,sBAAsB,QAGjC;IAED,OAAO,KAAK,4BAA4B,GAEvC;IAED,OAAO,KAAK,4BAA4B,QAGvC;IAED,OAAO,KAAK,4BAA4B,GAEvC;IAED,OAAO,KAAK,4BAA4B,QAGvC;IAED,OAAO,KAAK,uBAAuB,GAElC;IAED,OAAO,KAAK,uBAAuB,QAGlC;IAED,OAAO,KAAK,uBAAuB,GAElC;IAED,OAAO,KAAK,uBAAuB,QAGlC;IAED,OAAO,CAAC,WAAW;IA6BnB,SAAS,IAAI,IAAI;IAOjB,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAuE7E,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,SAAS;CAGjB"}