@superblocksteam/vite-plugin-file-sync 2.0.165-next.0 → 2.0.166-next.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 (218) hide show
  1. package/dist/ai-service/agent/prompts/api-prompts.d.ts.map +1 -1
  2. package/dist/ai-service/agent/prompts/api-prompts.js +3 -1
  3. package/dist/ai-service/agent/prompts/api-prompts.js.map +1 -1
  4. package/dist/ai-service/agent/prompts/build-base-system-prompt.d.ts.map +1 -1
  5. package/dist/ai-service/agent/prompts/build-base-system-prompt.js +43 -7
  6. package/dist/ai-service/agent/prompts/build-base-system-prompt.js.map +1 -1
  7. package/dist/ai-service/agent/tool-result-metrics.d.ts +12 -0
  8. package/dist/ai-service/agent/tool-result-metrics.d.ts.map +1 -1
  9. package/dist/ai-service/agent/tool-result-metrics.js +29 -0
  10. package/dist/ai-service/agent/tool-result-metrics.js.map +1 -1
  11. package/dist/ai-service/agent/tools/apis/attachment-file-inputs.d.ts +17 -0
  12. package/dist/ai-service/agent/tools/apis/attachment-file-inputs.d.ts.map +1 -0
  13. package/dist/ai-service/agent/tools/apis/attachment-file-inputs.js +208 -0
  14. package/dist/ai-service/agent/tools/apis/attachment-file-inputs.js.map +1 -0
  15. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.d.ts +6 -1
  16. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.d.ts.map +1 -1
  17. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.js +53 -19
  18. package/dist/ai-service/agent/tools/apis/get-sdk-api-docs.js.map +1 -1
  19. package/dist/ai-service/agent/tools/apis/sdk-root-documentation.d.ts +20 -0
  20. package/dist/ai-service/agent/tools/apis/sdk-root-documentation.d.ts.map +1 -0
  21. package/dist/ai-service/agent/tools/apis/sdk-root-documentation.js +284 -0
  22. package/dist/ai-service/agent/tools/apis/sdk-root-documentation.js.map +1 -0
  23. package/dist/ai-service/agent/tools/apis/spreadsheet-csv.d.ts +77 -0
  24. package/dist/ai-service/agent/tools/apis/spreadsheet-csv.d.ts.map +1 -0
  25. package/dist/ai-service/agent/tools/apis/spreadsheet-csv.js +627 -0
  26. package/dist/ai-service/agent/tools/apis/spreadsheet-csv.js.map +1 -0
  27. package/dist/ai-service/agent/tools/apis/test-api.d.ts +1 -0
  28. package/dist/ai-service/agent/tools/apis/test-api.d.ts.map +1 -1
  29. package/dist/ai-service/agent/tools/apis/test-api.js +51 -9
  30. package/dist/ai-service/agent/tools/apis/test-api.js.map +1 -1
  31. package/dist/ai-service/agent/tools/app-environment/update-app-environment.d.ts +1 -1
  32. package/dist/ai-service/agent/tools/build-manage-checklist.d.ts +1 -1
  33. package/dist/ai-service/agent/tools/build-read-file.d.ts +50 -6
  34. package/dist/ai-service/agent/tools/build-read-file.d.ts.map +1 -1
  35. package/dist/ai-service/agent/tools/build-read-file.js +153 -40
  36. package/dist/ai-service/agent/tools/build-read-file.js.map +1 -1
  37. package/dist/ai-service/agent/tools/get-logs.d.ts +2 -2
  38. package/dist/ai-service/agent/tools/index.d.ts +3 -2
  39. package/dist/ai-service/agent/tools/index.d.ts.map +1 -1
  40. package/dist/ai-service/agent/tools/index.js +3 -2
  41. package/dist/ai-service/agent/tools/index.js.map +1 -1
  42. package/dist/ai-service/agent/tools/integrations/execute-request.d.ts +15 -15
  43. package/dist/ai-service/agent/tools/read-state-trackers.d.ts +33 -0
  44. package/dist/ai-service/agent/tools/read-state-trackers.d.ts.map +1 -0
  45. package/dist/ai-service/agent/tools/read-state-trackers.js +67 -0
  46. package/dist/ai-service/agent/tools/read-state-trackers.js.map +1 -0
  47. package/dist/ai-service/agent/tools/report-security-findings.d.ts +6 -6
  48. package/dist/ai-service/agent/tools/report-security-findings.d.ts.map +1 -1
  49. package/dist/ai-service/agent/tools/report-security-findings.js +4 -2
  50. package/dist/ai-service/agent/tools/report-security-findings.js.map +1 -1
  51. package/dist/ai-service/agent/tools/subagent-isolation.d.ts +4 -15
  52. package/dist/ai-service/agent/tools/subagent-isolation.d.ts.map +1 -1
  53. package/dist/ai-service/agent/tools/subagent-isolation.js +4 -44
  54. package/dist/ai-service/agent/tools/subagent-isolation.js.map +1 -1
  55. package/dist/ai-service/agent/tools.d.ts.map +1 -1
  56. package/dist/ai-service/agent/tools.js +17 -64
  57. package/dist/ai-service/agent/tools.js.map +1 -1
  58. package/dist/ai-service/agent/tools2/registry.d.ts +1 -0
  59. package/dist/ai-service/agent/tools2/registry.d.ts.map +1 -1
  60. package/dist/ai-service/agent/tools2/registry.js +23 -5
  61. package/dist/ai-service/agent/tools2/registry.js.map +1 -1
  62. package/dist/ai-service/agent/tools2/tools/attachment-lease-resolver.d.ts +9 -0
  63. package/dist/ai-service/agent/tools2/tools/attachment-lease-resolver.d.ts.map +1 -0
  64. package/dist/ai-service/agent/tools2/tools/attachment-lease-resolver.js +52 -0
  65. package/dist/ai-service/agent/tools2/tools/attachment-lease-resolver.js.map +1 -0
  66. package/dist/ai-service/agent/tools2/tools/bash.d.ts +2 -2
  67. package/dist/ai-service/agent/tools2/tools/download-attachments.d.ts +1 -1
  68. package/dist/ai-service/agent/tools2/tools/download-attachments.d.ts.map +1 -1
  69. package/dist/ai-service/agent/tools2/tools/download-attachments.js +57 -49
  70. package/dist/ai-service/agent/tools2/tools/download-attachments.js.map +1 -1
  71. package/dist/ai-service/agent/tools2/tools/end-test-run.d.ts +3 -3
  72. package/dist/ai-service/agent/tools2/tools/git.d.ts +6 -6
  73. package/dist/ai-service/agent/tools2/tools/grep-metadata.d.ts +1 -1
  74. package/dist/ai-service/agent/tools2/tools/grep.d.ts +1 -1
  75. package/dist/ai-service/agent/tools2/tools/grep.js +1 -1
  76. package/dist/ai-service/agent/tools2/tools/list-attachments.d.ts +1 -1
  77. package/dist/ai-service/agent/tools2/tools/update-test-case-status.d.ts +1 -1
  78. package/dist/ai-service/agent/tools2/tools/web-fetch.d.ts +1 -1
  79. package/dist/ai-service/app-skills/helpers.d.ts +8 -2
  80. package/dist/ai-service/app-skills/helpers.d.ts.map +1 -1
  81. package/dist/ai-service/app-skills/helpers.js +184 -4
  82. package/dist/ai-service/app-skills/helpers.js.map +1 -1
  83. package/dist/ai-service/attachments/text-upload-artifacts.d.ts.map +1 -1
  84. package/dist/ai-service/attachments/text-upload-artifacts.js +1 -1
  85. package/dist/ai-service/attachments/text-upload-artifacts.js.map +1 -1
  86. package/dist/ai-service/attachments/upload-artifact-paths.d.ts +5 -0
  87. package/dist/ai-service/attachments/upload-artifact-paths.d.ts.map +1 -0
  88. package/dist/ai-service/attachments/upload-artifact-paths.js +18 -0
  89. package/dist/ai-service/attachments/upload-artifact-paths.js.map +1 -0
  90. package/dist/ai-service/chat/chat-session-store-metrics.d.ts +6 -0
  91. package/dist/ai-service/chat/chat-session-store-metrics.d.ts.map +1 -1
  92. package/dist/ai-service/chat/chat-session-store-metrics.js +23 -1
  93. package/dist/ai-service/chat/chat-session-store-metrics.js.map +1 -1
  94. package/dist/ai-service/chat/chat-session-store.d.ts +25 -1
  95. package/dist/ai-service/chat/chat-session-store.d.ts.map +1 -1
  96. package/dist/ai-service/chat/chat-session-store.js +70 -4
  97. package/dist/ai-service/chat/chat-session-store.js.map +1 -1
  98. package/dist/ai-service/edit-after-clark.d.ts +58 -0
  99. package/dist/ai-service/edit-after-clark.d.ts.map +1 -0
  100. package/dist/ai-service/edit-after-clark.js +143 -0
  101. package/dist/ai-service/edit-after-clark.js.map +1 -0
  102. package/dist/ai-service/features.d.ts +5 -0
  103. package/dist/ai-service/features.d.ts.map +1 -1
  104. package/dist/ai-service/features.js +5 -0
  105. package/dist/ai-service/features.js.map +1 -1
  106. package/dist/ai-service/index.d.ts +25 -3
  107. package/dist/ai-service/index.d.ts.map +1 -1
  108. package/dist/ai-service/index.js +123 -18
  109. package/dist/ai-service/index.js.map +1 -1
  110. package/dist/ai-service/judge/tools/playwright-action.d.ts +5 -5
  111. package/dist/ai-service/llm/context-v2/context.d.ts +23 -6
  112. package/dist/ai-service/llm/context-v2/context.d.ts.map +1 -1
  113. package/dist/ai-service/llm/context-v2/context.js +48 -13
  114. package/dist/ai-service/llm/context-v2/context.js.map +1 -1
  115. package/dist/ai-service/llm/context-v2/token-tracker.d.ts.map +1 -1
  116. package/dist/ai-service/llm/context-v2/token-tracker.js.map +1 -1
  117. package/dist/ai-service/llm/stream/abort-reason.d.ts +31 -0
  118. package/dist/ai-service/llm/stream/abort-reason.d.ts.map +1 -0
  119. package/dist/ai-service/llm/stream/abort-reason.js +36 -0
  120. package/dist/ai-service/llm/stream/abort-reason.js.map +1 -0
  121. package/dist/ai-service/llm/stream/orchestrator.d.ts +15 -0
  122. package/dist/ai-service/llm/stream/orchestrator.d.ts.map +1 -1
  123. package/dist/ai-service/llm/stream/orchestrator.js +88 -12
  124. package/dist/ai-service/llm/stream/orchestrator.js.map +1 -1
  125. package/dist/ai-service/migration-prompt-gating.d.ts +1 -0
  126. package/dist/ai-service/migration-prompt-gating.d.ts.map +1 -1
  127. package/dist/ai-service/migration-prompt-gating.js +6 -0
  128. package/dist/ai-service/migration-prompt-gating.js.map +1 -1
  129. package/dist/ai-service/skills/system/_registry.generated.d.ts.map +1 -1
  130. package/dist/ai-service/skills/system/_registry.generated.js +8 -0
  131. package/dist/ai-service/skills/system/_registry.generated.js.map +1 -1
  132. package/dist/ai-service/skills/system/resolve.d.ts.map +1 -1
  133. package/dist/ai-service/skills/system/resolve.js +29 -4
  134. package/dist/ai-service/skills/system/resolve.js.map +1 -1
  135. package/dist/ai-service/skills/system/spreadsheet-import/skill.generated.d.ts +2 -0
  136. package/dist/ai-service/skills/system/spreadsheet-import/skill.generated.d.ts.map +1 -0
  137. package/dist/ai-service/skills/system/spreadsheet-import/skill.generated.js +66 -0
  138. package/dist/ai-service/skills/system/spreadsheet-import/skill.generated.js.map +1 -0
  139. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-names-legacy.generated.d.ts +2 -0
  140. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-names-legacy.generated.d.ts.map +1 -0
  141. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-names-legacy.generated.js +5 -0
  142. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-names-legacy.generated.js.map +1 -0
  143. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-names-sdk.generated.d.ts +2 -0
  144. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-names-sdk.generated.d.ts.map +1 -0
  145. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-names-sdk.generated.js +5 -0
  146. package/dist/ai-service/skills/system/superblocks-frontend/_variants/api-names-sdk.generated.js.map +1 -0
  147. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts +1 -1
  148. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.d.ts.map +1 -1
  149. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js +2 -1
  150. package/dist/ai-service/skills/system/superblocks-frontend/skill.generated.js.map +1 -1
  151. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts +1 -1
  152. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.d.ts.map +1 -1
  153. package/dist/ai-service/skills/system/superblocks-migration/skill.generated.js +6 -6
  154. package/dist/ai-service/skills/system/superblocks-sdk-api/skill.generated.d.ts +2 -0
  155. package/dist/ai-service/skills/system/superblocks-sdk-api/skill.generated.d.ts.map +1 -0
  156. package/dist/ai-service/skills/system/superblocks-sdk-api/skill.generated.js +29 -0
  157. package/dist/ai-service/skills/system/superblocks-sdk-api/skill.generated.js.map +1 -0
  158. package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts +1 -1
  159. package/dist/ai-service/skills/system/third-party-migration/skill.generated.d.ts.map +1 -1
  160. package/dist/ai-service/skills/system/third-party-migration/skill.generated.js +2 -2
  161. package/dist/ai-service/state-machine/clark-fsm.d.ts +14 -1
  162. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
  163. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
  164. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -1
  165. package/dist/ai-service/state-machine/handlers/llm-generating.js +1 -0
  166. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -1
  167. package/dist/ai-service/state-machine/helpers/abandon-turn-metrics.d.ts +18 -0
  168. package/dist/ai-service/state-machine/helpers/abandon-turn-metrics.d.ts.map +1 -0
  169. package/dist/ai-service/state-machine/helpers/abandon-turn-metrics.js +66 -0
  170. package/dist/ai-service/state-machine/helpers/abandon-turn-metrics.js.map +1 -0
  171. package/dist/ai-service/state-machine/helpers/transition.d.ts.map +1 -1
  172. package/dist/ai-service/state-machine/helpers/transition.js.map +1 -1
  173. package/dist/ai-service/state-machine/traced-fsm.d.ts +12 -3
  174. package/dist/ai-service/state-machine/traced-fsm.d.ts.map +1 -1
  175. package/dist/ai-service/state-machine/traced-fsm.js +17 -5
  176. package/dist/ai-service/state-machine/traced-fsm.js.map +1 -1
  177. package/dist/ai-service/template-renderer.js +43 -7
  178. package/dist/ai-service/template-renderer.js.map +1 -1
  179. package/dist/ai-service/types.d.ts +2 -0
  180. package/dist/ai-service/types.d.ts.map +1 -1
  181. package/dist/ai-service/types.js.map +1 -1
  182. package/dist/file-sync-vite-plugin.d.ts +12 -3
  183. package/dist/file-sync-vite-plugin.d.ts.map +1 -1
  184. package/dist/file-sync-vite-plugin.js +57 -17
  185. package/dist/file-sync-vite-plugin.js.map +1 -1
  186. package/dist/migration/migration-routes.d.ts.map +1 -1
  187. package/dist/migration/migration-routes.js +42 -23
  188. package/dist/migration/migration-routes.js.map +1 -1
  189. package/dist/npm/normalize-workspace-protocol-for-npm.d.ts.map +1 -1
  190. package/dist/npm/normalize-workspace-protocol-for-npm.js +5 -5
  191. package/dist/npm/normalize-workspace-protocol-for-npm.js.map +1 -1
  192. package/dist/npm/rewrite-platform-workspace-deps.d.ts +2 -0
  193. package/dist/npm/rewrite-platform-workspace-deps.d.ts.map +1 -1
  194. package/dist/npm/rewrite-platform-workspace-deps.js +2 -2
  195. package/dist/npm/rewrite-platform-workspace-deps.js.map +1 -1
  196. package/dist/policy-gate-runner.d.ts.map +1 -1
  197. package/dist/policy-gate-runner.js +3 -0
  198. package/dist/policy-gate-runner.js.map +1 -1
  199. package/dist/socket-manager.d.ts +1 -1
  200. package/dist/socket-manager.d.ts.map +1 -1
  201. package/dist/socket-manager.js +64 -22
  202. package/dist/socket-manager.js.map +1 -1
  203. package/dist/sync-service/index.d.ts +14 -1
  204. package/dist/sync-service/index.d.ts.map +1 -1
  205. package/dist/sync-service/index.js +27 -1
  206. package/dist/sync-service/index.js.map +1 -1
  207. package/dist/sync-service/list-dir.d.ts.map +1 -1
  208. package/dist/sync-service/list-dir.js +15 -1
  209. package/dist/sync-service/list-dir.js.map +1 -1
  210. package/dist/sync-service/snapshot/take-snapshot.d.ts +6 -0
  211. package/dist/sync-service/snapshot/take-snapshot.d.ts.map +1 -1
  212. package/dist/sync-service/snapshot/take-snapshot.js +21 -0
  213. package/dist/sync-service/snapshot/take-snapshot.js.map +1 -1
  214. package/dist/vite-plugin-yaml-types.d.ts +6 -0
  215. package/dist/vite-plugin-yaml-types.d.ts.map +1 -1
  216. package/dist/vite-plugin-yaml-types.js +52 -61
  217. package/dist/vite-plugin-yaml-types.js.map +1 -1
  218. package/package.json +14 -11
@@ -0,0 +1,627 @@
1
+ import path from "node:path";
2
+ import { Readable } from "node:stream";
3
+ import ExcelJS from "exceljs";
4
+ import yauzl from "yauzl";
5
+ /**
6
+ * A small workbook can expand into far more CSV than it occupies on disk, so
7
+ * bound the converted output the same way archive extraction is bounded.
8
+ */
9
+ export const MAX_WORKBOOK_CSV_BYTES = 200 * 1024 * 1024;
10
+ export const MAX_WORKBOOK_CELLS = 1_000_000;
11
+ /**
12
+ * An `.xlsx` is a zip, so the upload size limit bounds the compressed bytes
13
+ * rather than what the reader builds in memory. A million cells measured out
14
+ * at roughly 40 MiB of sheet XML, so this is the same ceiling as
15
+ * MAX_WORKBOOK_CELLS expressed in the only unit available before the reader
16
+ * has built a grid to count. It covers the whole archive because the reader
17
+ * expands every member it finds.
18
+ */
19
+ export const MAX_WORKBOOK_INFLATED_BYTES = 40 * 1024 * 1024;
20
+ const MAX_FORMULA_TEXT_CHARS = 500;
21
+ const MAX_CACHED_RESULT_CHARS = 200;
22
+ /** How far to look for a header when a sheet opens with title or spacer rows. */
23
+ const MAX_HEADER_SCAN_ROWS = 20;
24
+ /** A header worth trusting over the first populated row names this many columns. */
25
+ const MIN_HEADER_COLUMNS = 3;
26
+ /** Rows held back while looking for a total at the bottom of a sheet. */
27
+ const FOOTER_WINDOW_ROWS = 5;
28
+ const FOOTER_LABEL = /^(grand|subtotal|sum|total)\b/i;
29
+ const TOO_MUCH_DATA = "Workbook expands into too much data to import";
30
+ const UNREADABLE = "Workbook could not be read";
31
+ function workbookStem(fileName) {
32
+ const stem = path.parse(fileName).name.trim();
33
+ return stem.length > 0 ? stem : "workbook";
34
+ }
35
+ function sanitizeSheetSegment(sheetName) {
36
+ const sanitized = sheetName
37
+ .replace(/[^\w.-]+/g, "_")
38
+ .replace(/\.\.+/g, "_")
39
+ .replace(/^[\s._-]+|[\s._-]+$/g, "")
40
+ .slice(0, 80);
41
+ return sanitized.length > 0 ? sanitized : "sheet";
42
+ }
43
+ function uniqueCsvFileName(stem, sheetName, usedNames) {
44
+ const base = `${stem}-${sanitizeSheetSegment(sheetName)}.csv`;
45
+ if (!usedNames.has(base)) {
46
+ usedNames.add(base);
47
+ return base;
48
+ }
49
+ let suffix = 2;
50
+ let candidate = `${stem}-${sanitizeSheetSegment(sheetName)}-${suffix}.csv`;
51
+ while (usedNames.has(candidate)) {
52
+ suffix += 1;
53
+ candidate = `${stem}-${sanitizeSheetSegment(sheetName)}-${suffix}.csv`;
54
+ }
55
+ usedNames.add(candidate);
56
+ return candidate;
57
+ }
58
+ function isErrorValue(value) {
59
+ return typeof value === "object" && value !== null && "error" in value;
60
+ }
61
+ /**
62
+ * Excel stores a date as a day on a calendar, not an instant, and the reader
63
+ * rebuilds it at UTC midnight. Reporting the UTC calendar day keeps the day the
64
+ * workbook shows instead of the timestamp it was reconstructed from.
65
+ */
66
+ function dateText(value) {
67
+ const iso = value.toISOString();
68
+ return iso.endsWith("T00:00:00.000Z") ? iso.slice(0, 10) : iso;
69
+ }
70
+ function valueText(value) {
71
+ if (value === null || value === undefined) {
72
+ return "";
73
+ }
74
+ if (value instanceof Date) {
75
+ return dateText(value);
76
+ }
77
+ if (typeof value === "object") {
78
+ if ("richText" in value) {
79
+ return value.richText.map((part) => part.text).join("");
80
+ }
81
+ if ("text" in value)
82
+ return String(value.text);
83
+ // An Excel error (#DIV/0!, #N/A) has no value to import, so it reads as
84
+ // blank rather than poisoning an otherwise numeric column with text.
85
+ if ("error" in value)
86
+ return "";
87
+ if ("result" in value)
88
+ return valueText(value.result ?? null);
89
+ return "";
90
+ }
91
+ return String(value);
92
+ }
93
+ /** Cached results are evidence, so an error keeps its Excel text here. */
94
+ function formulaResultText(result) {
95
+ if (isErrorValue(result)) {
96
+ return result.error;
97
+ }
98
+ return valueText(result ?? null);
99
+ }
100
+ function csvField(text) {
101
+ return /[",\r\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
102
+ }
103
+ /** `B5*C5` and `B6*C6` are one rule, so drop the row numbers to compare them. */
104
+ function normalizeFormula(formula) {
105
+ return formula
106
+ .replace(/(\$?[A-Z]{1,3}\$?)\d+/g, "$1#")
107
+ .slice(0, MAX_FORMULA_TEXT_CHARS);
108
+ }
109
+ /** Sheet names quoted ('Orders 2024'!A1) or bare (Orders!A1) inside a formula. */
110
+ function referencedSheets(formula) {
111
+ const names = [];
112
+ const pattern = /(?:'([^']+)'|([A-Za-z_][A-Za-z0-9_.]*))!/g;
113
+ let match = pattern.exec(formula);
114
+ while (match !== null) {
115
+ const name = match[1] ?? match[2];
116
+ if (name)
117
+ names.push(name);
118
+ match = pattern.exec(formula);
119
+ }
120
+ return names;
121
+ }
122
+ function columnLetter(columnIndex) {
123
+ let letters = "";
124
+ let remaining = columnIndex;
125
+ while (remaining > 0) {
126
+ const rest = (remaining - 1) % 26;
127
+ letters = String.fromCharCode(65 + rest) + letters;
128
+ remaining = Math.floor((remaining - 1) / 26);
129
+ }
130
+ return letters;
131
+ }
132
+ function scanRow(row) {
133
+ const cells = [];
134
+ row.eachCell({ includeEmpty: false }, (cell, columnIndex) => {
135
+ // Every cell a merged range covers reports the master's value. Only the
136
+ // master holds data, so the covered cells stay blank.
137
+ if (cell.isMerged && cell.master.address !== cell.address) {
138
+ return;
139
+ }
140
+ const formula = cell.formula;
141
+ // `cell.value` omits a cached result of 0, which would import as NULL, so
142
+ // a formula cell reads its cached result instead.
143
+ const rawValue = formula === undefined ? cell.value : cell.result;
144
+ const text = valueText(rawValue ?? null);
145
+ if (text.length === 0 && formula === undefined) {
146
+ return;
147
+ }
148
+ cells.push({
149
+ columnIndex,
150
+ format: typeof cell.numFmt === "string" && cell.numFmt !== "General"
151
+ ? cell.numFmt
152
+ : undefined,
153
+ formula,
154
+ isBoolean: typeof rawValue === "boolean",
155
+ isDate: rawValue instanceof Date,
156
+ isError: isErrorValue(cell.result),
157
+ isNumber: typeof rawValue === "number",
158
+ result: cell.result,
159
+ text,
160
+ });
161
+ });
162
+ return { cells, rowNumber: row.number };
163
+ }
164
+ /**
165
+ * Real workbooks open with a merged title, a "Prepared by" line, or a blank
166
+ * spacer. The header is the first row naming several distinct columns: a banner
167
+ * repeats one value and a preamble is too narrow to qualify.
168
+ *
169
+ * Reaching as far right as the table is what separates the header from a title
170
+ * like "Q1 Sales | FY2024 | Confidential", which names three distinct columns
171
+ * of its own but stops short of the columns underneath it.
172
+ */
173
+ function chooseHeaderRow(rows) {
174
+ const tableWidth = Math.max(...rows.map((row) => row.cells[row.cells.length - 1]?.columnIndex ?? 0), 0);
175
+ const named = rows.find((row) => {
176
+ const texts = row.cells.map((cell) => cell.text);
177
+ return (texts.length >= MIN_HEADER_COLUMNS &&
178
+ (row.cells[row.cells.length - 1]?.columnIndex ?? 0) === tableWidth &&
179
+ row.cells.every((cell) => !cell.isNumber && !cell.isDate) &&
180
+ new Set(texts).size >= MIN_HEADER_COLUMNS);
181
+ });
182
+ if (named) {
183
+ return named;
184
+ }
185
+ // Too narrow to name three columns, so fall back to where the data starts:
186
+ // the header is the last all-text row above the first row holding a number
187
+ // or a date. That tells a "Prepared by | Finance" preamble from the
188
+ // "metric | value" header underneath it.
189
+ const firstTypedRow = rows.findIndex((row) => row.cells.some((cell) => cell.isNumber || cell.isDate));
190
+ if (firstTypedRow > 0) {
191
+ const above = rows[firstTypedRow - 1];
192
+ if (above && above.cells.length >= 2) {
193
+ return above;
194
+ }
195
+ }
196
+ return rows.find((row) => row.cells.length >= 2) ?? rows[0];
197
+ }
198
+ function newColumn(columnIndex, name, hidden) {
199
+ return {
200
+ booleanCells: 0,
201
+ columnIndex,
202
+ dateCells: 0,
203
+ errorCells: 0,
204
+ formulaCells: 0,
205
+ hidden,
206
+ name,
207
+ numberCells: 0,
208
+ populatedCells: 0,
209
+ ruleCells: 0,
210
+ valuedCells: 0,
211
+ };
212
+ }
213
+ function accumulate(column, cell, rowNumber) {
214
+ column.populatedCells += 1;
215
+ if (cell.text.length > 0)
216
+ column.valuedCells += 1;
217
+ if (cell.isDate)
218
+ column.dateCells += 1;
219
+ else if (cell.isNumber)
220
+ column.numberCells += 1;
221
+ else if (cell.isBoolean)
222
+ column.booleanCells += 1;
223
+ if (cell.isError)
224
+ column.errorCells += 1;
225
+ if (column.format === undefined && cell.format) {
226
+ column.format = cell.format;
227
+ }
228
+ if (cell.formula === undefined) {
229
+ return;
230
+ }
231
+ column.formulaCells += 1;
232
+ const rule = normalizeFormula(cell.formula);
233
+ column.ruleFormula ??= rule;
234
+ if (column.ruleFormula === rule) {
235
+ column.ruleCells += 1;
236
+ }
237
+ column.example ??= {
238
+ cachedResult: formulaResultText(cell.result).slice(0, MAX_CACHED_RESULT_CHARS),
239
+ cell: `${columnLetter(cell.columnIndex)}${rowNumber}`,
240
+ formula: cell.formula.slice(0, MAX_FORMULA_TEXT_CHARS),
241
+ };
242
+ }
243
+ function columnType(column) {
244
+ // With no values there is nothing to infer from, and guessing "text" would
245
+ // send a computed column to the database as strings.
246
+ if (column.valuedCells === 0)
247
+ return undefined;
248
+ const half = column.valuedCells / 2;
249
+ if (column.dateCells > half)
250
+ return "date";
251
+ if (column.numberCells > half)
252
+ return "number";
253
+ if (column.booleanCells > half)
254
+ return "boolean";
255
+ return "text";
256
+ }
257
+ function toColumnDigest(column) {
258
+ const type = columnType(column);
259
+ // One rule repeated down the column is a derived field. A column where every
260
+ // cell computes something different belongs to a report, and reporting its
261
+ // first formula as the rule would invite applying it to every row.
262
+ const repeats = column.ruleCells > column.populatedCells / 2;
263
+ return {
264
+ columnIndex: column.columnIndex,
265
+ name: column.name,
266
+ ...(column.hidden ? { hidden: true } : {}),
267
+ ...(type ? { type } : {}),
268
+ ...(column.format ? { format: column.format } : {}),
269
+ ...(repeats && column.ruleFormula
270
+ ? {
271
+ computed: column.ruleFormula,
272
+ coverage: `${column.ruleCells}/${column.populatedCells}`,
273
+ }
274
+ : {}),
275
+ ...(column.errorCells > 0 ? { errorCellCount: column.errorCells } : {}),
276
+ ...(column.example ? { example: column.example } : {}),
277
+ };
278
+ }
279
+ /**
280
+ * Parse an Excel workbook into what an app needs from it: a structure digest
281
+ * describing every sheet, and CSV rows for the sheets that hold data. Generated
282
+ * SDK APIs can only parse CSV, so this conversion happens before the file
283
+ * reaches testApi or the JavaScript sandbox.
284
+ */
285
+ export async function convertWorkbookToCsvSheets(input) {
286
+ const maxCsvBytes = input.maxCsvBytes ?? MAX_WORKBOOK_CSV_BYTES;
287
+ const maxCells = input.maxCells ?? MAX_WORKBOOK_CELLS;
288
+ const maxInflatedBytes = input.maxInflatedBytes ?? MAX_WORKBOOK_INFLATED_BYTES;
289
+ const stem = workbookStem(input.fileName);
290
+ const usedNames = new Set();
291
+ const sheets = [];
292
+ let totalCells = 0;
293
+ let totalCsvBytes = 0;
294
+ try {
295
+ await assertWorkbookInflateFits(input.bytes, maxInflatedBytes);
296
+ }
297
+ catch (error) {
298
+ if (error instanceof Error && error.message === TOO_MUCH_DATA) {
299
+ throw error;
300
+ }
301
+ throw new Error(UNREADABLE);
302
+ }
303
+ const workbook = new ExcelJS.Workbook();
304
+ try {
305
+ // Read from a stream rather than `load`, whose Buffer parameter type does
306
+ // not line up with the @types/node version this package compiles against.
307
+ await workbook.xlsx.read(Readable.from(Buffer.from(input.bytes)));
308
+ }
309
+ catch {
310
+ throw new Error(UNREADABLE);
311
+ }
312
+ const sheetNames = new Set(workbook.worksheets.map((worksheet) => worksheet.name));
313
+ for (const worksheet of workbook.worksheets) {
314
+ totalCells += assertWorksheetFits(worksheet, maxCells - totalCells);
315
+ const converted = convertWorksheet({
316
+ maxCsvBytes: maxCsvBytes - totalCsvBytes,
317
+ sheetNames,
318
+ worksheet,
319
+ });
320
+ if (converted.digest.role === "empty") {
321
+ continue;
322
+ }
323
+ if (converted.csv === undefined) {
324
+ sheets.push({ digest: converted.digest });
325
+ continue;
326
+ }
327
+ totalCsvBytes += Buffer.byteLength(converted.csv, "utf8");
328
+ sheets.push({
329
+ csv: converted.csv,
330
+ digest: converted.digest,
331
+ fileName: uniqueCsvFileName(stem, worksheet.name, usedNames),
332
+ });
333
+ }
334
+ if (sheets.length === 0) {
335
+ throw new Error("Workbook has no data to import");
336
+ }
337
+ return sheets;
338
+ }
339
+ /**
340
+ * Inflate the archive and count the bytes without keeping them, then stop as
341
+ * soon as the total passes the budget. A zip header can understate what it
342
+ * expands to, so this measures the real output rather than trusting the
343
+ * declared size, and it runs before the reader builds a grid to bound.
344
+ *
345
+ * Every member counts, not only the sheets: the reader expands the whole
346
+ * archive, so a workbook can hold its sheets under the budget and still hide
347
+ * an unreferenced member that inflates to gigabytes.
348
+ */
349
+ async function assertWorkbookInflateFits(bytes, maxInflatedBytes) {
350
+ const zip = await new Promise((resolve, reject) => {
351
+ yauzl.fromBuffer(Buffer.from(bytes), { lazyEntries: true }, (error, opened) => {
352
+ if (error || !opened) {
353
+ reject(error ?? new Error(UNREADABLE));
354
+ return;
355
+ }
356
+ resolve(opened);
357
+ });
358
+ });
359
+ let inflated = 0;
360
+ try {
361
+ await new Promise((resolve, reject) => {
362
+ zip.on("error", reject);
363
+ zip.on("end", resolve);
364
+ zip.on("entry", (entry) => {
365
+ if (entry.fileName.endsWith("/")) {
366
+ zip.readEntry();
367
+ return;
368
+ }
369
+ zip.openReadStream(entry, (error, stream) => {
370
+ if (error || !stream) {
371
+ reject(error ?? new Error(UNREADABLE));
372
+ return;
373
+ }
374
+ stream.on("error", reject);
375
+ stream.on("data", (chunk) => {
376
+ inflated += chunk.byteLength;
377
+ if (inflated > maxInflatedBytes) {
378
+ stream.destroy();
379
+ reject(new Error(TOO_MUCH_DATA));
380
+ }
381
+ });
382
+ stream.on("end", () => zip.readEntry());
383
+ });
384
+ });
385
+ zip.readEntry();
386
+ });
387
+ }
388
+ finally {
389
+ zip.close();
390
+ }
391
+ }
392
+ /**
393
+ * A sheet's grid is known before any of it is read, so reject an oversized one
394
+ * up front rather than after building its rows.
395
+ */
396
+ function assertWorksheetFits(worksheet, remainingCells) {
397
+ const cells = worksheet.rowCount * worksheet.columnCount;
398
+ if (cells > remainingCells) {
399
+ throw new Error("Workbook holds too many cells to import");
400
+ }
401
+ return cells;
402
+ }
403
+ function convertWorksheet({ maxCsvBytes, sheetNames, worksheet, }) {
404
+ const sheetName = worksheet.name;
405
+ const leadingRows = [];
406
+ const pendingRows = [];
407
+ const columns = new Map();
408
+ const readsFrom = new Set();
409
+ const lines = [];
410
+ let csvBytes = 0;
411
+ let columnCount = 0;
412
+ let headerRow;
413
+ let headerDecided = false;
414
+ let dataRowCount = 0;
415
+ const emitRow = (row) => {
416
+ const fields = [];
417
+ for (let index = 1; index <= columnCount; index += 1) {
418
+ const cell = row.cells.find((candidate) => candidate.columnIndex === index);
419
+ const field = csvField(cell?.text ?? "");
420
+ csvBytes += Buffer.byteLength(field, "utf8") + (index === 1 ? 0 : 1);
421
+ if (csvBytes + 1 > maxCsvBytes) {
422
+ throw new Error(TOO_MUCH_DATA);
423
+ }
424
+ fields.push(field);
425
+ }
426
+ lines.push(fields.join(","));
427
+ csvBytes += 1;
428
+ };
429
+ const countRow = (row) => {
430
+ dataRowCount += 1;
431
+ for (const cell of row.cells) {
432
+ const column = columns.get(cell.columnIndex);
433
+ if (!column)
434
+ continue;
435
+ accumulate(column, cell, row.rowNumber);
436
+ }
437
+ };
438
+ const takeRow = (row) => {
439
+ pendingRows.push(row);
440
+ if (pendingRows.length > FOOTER_WINDOW_ROWS) {
441
+ const ready = pendingRows.shift();
442
+ if (ready) {
443
+ countRow(ready);
444
+ emitRow(ready);
445
+ }
446
+ }
447
+ };
448
+ const decideHeader = () => {
449
+ headerDecided = true;
450
+ headerRow = chooseHeaderRow(leadingRows);
451
+ if (!headerRow) {
452
+ return;
453
+ }
454
+ // A column can start below the rows scanned for the header, and a header
455
+ // cell can be left blank, so the sheet's own width decides how many
456
+ // fields a row has. Without it that column is dropped from every row.
457
+ columnCount = Math.max(...headerRow.cells.map((cell) => cell.columnIndex), populatedColumnCount(worksheet));
458
+ for (let index = 1; index <= columnCount; index += 1) {
459
+ const cell = headerRow.cells.find((candidate) => candidate.columnIndex === index);
460
+ columns.set(index, newColumn(index, cell?.text.trim() || `column_${index}`, worksheet.getColumn(index).hidden === true));
461
+ }
462
+ emitRow(headerRow);
463
+ for (const row of leadingRows) {
464
+ if (row.rowNumber > headerRow.rowNumber) {
465
+ takeRow(row);
466
+ }
467
+ }
468
+ };
469
+ worksheet.eachRow({ includeEmpty: false }, (row) => {
470
+ const scanned = scanRow(row);
471
+ if (scanned.cells.length === 0) {
472
+ return;
473
+ }
474
+ for (const cell of scanned.cells) {
475
+ if (cell.formula === undefined)
476
+ continue;
477
+ for (const name of referencedSheets(cell.formula)) {
478
+ // A broken lookup can name a sheet that was never shipped with the
479
+ // file, which is not a relationship to build an app on.
480
+ if (name !== sheetName && sheetNames.has(name))
481
+ readsFrom.add(name);
482
+ }
483
+ }
484
+ if (!headerDecided) {
485
+ leadingRows.push(scanned);
486
+ if (leadingRows.length >= MAX_HEADER_SCAN_ROWS) {
487
+ decideHeader();
488
+ }
489
+ return;
490
+ }
491
+ takeRow(scanned);
492
+ });
493
+ if (!headerDecided) {
494
+ decideHeader();
495
+ }
496
+ if (!headerRow) {
497
+ return {
498
+ digest: {
499
+ columns: [],
500
+ dataRowCount: 0,
501
+ headerRowNumber: 0,
502
+ role: "empty",
503
+ sheetName,
504
+ },
505
+ };
506
+ }
507
+ // Work up from the bottom past anything that is not a row of the table. A
508
+ // report often signs off with a note under its totals, and neither belongs
509
+ // in the data.
510
+ const footerAggregates = [];
511
+ const notes = [];
512
+ for (let last = pendingRows[pendingRows.length - 1]; last !== undefined; last = pendingRows[pendingRows.length - 1]) {
513
+ const aggregate = toFooterAggregate(last, columns);
514
+ if (aggregate) {
515
+ footerAggregates.unshift(aggregate);
516
+ pendingRows.pop();
517
+ continue;
518
+ }
519
+ const note = last.cells[0]?.text;
520
+ if (note !== undefined &&
521
+ isTrailingNote(last, pendingRows[pendingRows.length - 2], columnCount)) {
522
+ notes.unshift(note);
523
+ pendingRows.pop();
524
+ continue;
525
+ }
526
+ break;
527
+ }
528
+ for (const row of pendingRows) {
529
+ countRow(row);
530
+ emitRow(row);
531
+ }
532
+ const headerRowNumber = headerRow.rowNumber;
533
+ const bannerRow = leadingRows.find((row) => row.rowNumber < headerRowNumber && row.cells.length === 1);
534
+ const role = classifySheet(columns, columnCount);
535
+ const csv = lines.join("\n").replace(/\n+$/g, "");
536
+ return {
537
+ digest: {
538
+ columns: Array.from(columns.values()).map(toColumnDigest),
539
+ dataRowCount,
540
+ headerRowNumber: headerRow.rowNumber,
541
+ role,
542
+ sheetName,
543
+ ...(worksheet.state === "hidden" || worksheet.state === "veryHidden"
544
+ ? { hidden: true }
545
+ : {}),
546
+ ...(bannerRow?.cells[0] ? { banner: bannerRow.cells[0].text } : {}),
547
+ ...(notes.length > 0 ? { notes } : {}),
548
+ ...(footerAggregates.length > 0 ? { footerAggregates } : {}),
549
+ ...(readsFrom.size > 0
550
+ ? { readsFrom: Array.from(readsFrom).sort() }
551
+ : {}),
552
+ },
553
+ // A derived report becomes a page in the app, not a table to import.
554
+ ...(role === "data table" && csv.length > 0 ? { csv: `${csv}\n` } : {}),
555
+ };
556
+ }
557
+ /**
558
+ * How wide the sheet actually is. `worksheet.columnCount` counts every cell a
559
+ * merged banner covers, which would pad each row with empty fields, so this
560
+ * looks only at cells that hold something of their own.
561
+ */
562
+ function populatedColumnCount(worksheet) {
563
+ let widest = 0;
564
+ worksheet.eachRow({ includeEmpty: false }, (row) => {
565
+ row.eachCell({ includeEmpty: false }, (cell, columnIndex) => {
566
+ if (cell.isMerged && cell.master.address !== cell.address) {
567
+ return;
568
+ }
569
+ if (cell.formula === undefined && valueText(cell.value).length === 0) {
570
+ return;
571
+ }
572
+ widest = Math.max(widest, columnIndex);
573
+ });
574
+ });
575
+ return widest;
576
+ }
577
+ /**
578
+ * A sheet is a report only when it stores nothing of its own: every column
579
+ * beside its labels is worked out from other cells. A sheet that still holds
580
+ * typed-in values is data, however many calculated columns sit next to them,
581
+ * and its rows are the thing the app is being built around.
582
+ */
583
+ function classifySheet(columns, columnCount) {
584
+ // A single column has no label column to set aside, so it is its own data.
585
+ if (columnCount < 2) {
586
+ return "data table";
587
+ }
588
+ // The first column is usually the label, so it does not decide the role.
589
+ const valueColumns = Array.from(columns.values()).filter((column) => column.columnIndex > 1 && column.populatedCells > 0);
590
+ if (valueColumns.length === 0) {
591
+ return "data table";
592
+ }
593
+ const stored = valueColumns.filter((column) => column.formulaCells <= column.populatedCells / 2);
594
+ return stored.length === 0 ? "derived report" : "data table";
595
+ }
596
+ /**
597
+ * A lone sentence under a multi-column table is a note to the reader, the same
598
+ * way a lone value above it is a title. The blank row above it is what makes it
599
+ * a note: a row with only its first column filled is ordinary sparse data.
600
+ */
601
+ function isTrailingNote(row, previousRow, columnCount) {
602
+ return (columnCount > 1 &&
603
+ row.cells.length === 1 &&
604
+ row.cells[0]?.formula === undefined &&
605
+ previousRow !== undefined &&
606
+ row.rowNumber > previousRow.rowNumber + 1);
607
+ }
608
+ function toFooterAggregate(row, columns) {
609
+ const [label, ...rest] = row.cells;
610
+ if (!label || label.columnIndex !== 1 || !FOOTER_LABEL.test(label.text)) {
611
+ return undefined;
612
+ }
613
+ // A totals row works everything out; it types nothing in. Without this a
614
+ // customer named "Total Wine" reads as a footer and loses its row, which
615
+ // any sheet with a calculated column would trigger.
616
+ if (rest.some((cell) => cell.formula === undefined)) {
617
+ return undefined;
618
+ }
619
+ const aggregates = rest
620
+ .filter((cell) => cell.formula !== undefined)
621
+ .map((cell) => {
622
+ const name = columns.get(cell.columnIndex)?.name ?? `column_${cell.columnIndex}`;
623
+ return `${name}: ${normalizeFormula(cell.formula ?? "")}`;
624
+ });
625
+ return aggregates.length > 0 ? { aggregates, label: label.text } : undefined;
626
+ }
627
+ //# sourceMappingURL=spreadsheet-csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spreadsheet-csv.js","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/apis/spreadsheet-csv.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAwD1B;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAC5C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5D,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,iFAAiF;AACjF,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,oFAAoF;AACpF,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,yEAAyE;AACzE,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,YAAY,GAAG,gCAAgC,CAAC;AACtD,MAAM,aAAa,GAAG,+CAA+C,CAAC;AACtE,MAAM,UAAU,GAAG,4BAA4B,CAAC;AAEhD,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AAC7C,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAiB;IAC7C,MAAM,SAAS,GAAG,SAAS;SACxB,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;SACzB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;SACnC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AACpD,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAY,EACZ,SAAiB,EACjB,SAAsB;IAEtB,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC;IAC9D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,SAAS,GAAG,GAAG,IAAI,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,MAAM,MAAM,CAAC;IAC3E,OAAO,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,CAAC,CAAC;QACZ,SAAS,GAAG,GAAG,IAAI,IAAI,oBAAoB,CAAC,SAAS,CAAC,IAAI,MAAM,MAAM,CAAC;IACzE,CAAC;IACD,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,KAAW;IAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACjE,CAAC;AAED,SAAS,SAAS,CAAC,KAAwB;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,MAAM,IAAI,KAAK;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,wEAAwE;QACxE,qEAAqE;QACrE,IAAI,OAAO,IAAI,KAAK;YAAE,OAAO,EAAE,CAAC;QAChC,IAAI,QAAQ,IAAI,KAAK;YAAE,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,0EAA0E;AAC1E,SAAS,iBAAiB,CAAC,MAAqC;IAC9D,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACxE,CAAC;AAED,iFAAiF;AACjF,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO;SACX,OAAO,CAAC,wBAAwB,EAAE,KAAK,CAAC;SACxC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;AACtC,CAAC;AAED,kFAAkF;AAClF,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,2CAA2C,CAAC;IAC5D,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,WAAmB;IACvC,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,SAAS,GAAG,WAAW,CAAC;IAC5B,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAClC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC;QACnD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAmBD,SAAS,OAAO,CAAC,GAAgB;IAC/B,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE;QAC1D,wEAAwE;QACxE,sDAAsD;QACtD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,0EAA0E;QAC1E,kDAAkD;QAClD,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAClE,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,KAAK,CAAC,IAAI,CAAC;YACT,WAAW;YACX,MAAM,EACJ,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;gBAC1D,CAAC,CAAC,IAAI,CAAC,MAAM;gBACb,CAAC,CAAC,SAAS;YACf,OAAO;YACP,SAAS,EAAE,OAAO,QAAQ,KAAK,SAAS;YACxC,MAAM,EAAE,QAAQ,YAAY,IAAI;YAChC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;YAClC,QAAQ,EAAE,OAAO,QAAQ,KAAK,QAAQ;YACtC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI;SACL,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,eAAe,CAAC,IAAkB;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,EACvE,CAAC,CACF,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,CACL,KAAK,CAAC,MAAM,IAAI,kBAAkB;YAClC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,KAAK,UAAU;YAClE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACzD,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,kBAAkB,CAC1C,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IACD,2EAA2E;IAC3E,2EAA2E;IAC3E,oEAAoE;IACpE,yCAAyC;IACzC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAC3C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CACvD,CAAC;IACF,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;QACtC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC;AAoBD,SAAS,SAAS,CAChB,WAAmB,EACnB,IAAY,EACZ,MAAe;IAEf,OAAO;QACL,YAAY,EAAE,CAAC;QACf,WAAW;QACX,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC;QACf,MAAM;QACN,IAAI;QACJ,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;KACf,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,MAAyB,EACzB,IAAiB,EACjB,SAAiB;IAEjB,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;SAClC,IAAI,IAAI,CAAC,QAAQ;QAAE,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;SAC3C,IAAI,IAAI,CAAC,SAAS;QAAE,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC/C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC;IAC5B,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,CAAC,OAAO,KAAK;QACjB,YAAY,EAAE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAChD,CAAC,EACD,uBAAuB,CACxB;QACD,IAAI,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,SAAS,EAAE;QACrD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,MAAyB;IAEzB,2EAA2E;IAC3E,qDAAqD;IACrD,IAAI,MAAM,CAAC,WAAW,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI;QAAE,OAAO,MAAM,CAAC;IAC3C,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC/C,IAAI,MAAM,CAAC,YAAY,GAAG,IAAI;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,MAAyB;IAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,6EAA6E;IAC7E,2EAA2E;IAC3E,mEAAmE;IACnE,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC;IAC7D,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW;YAC/B,CAAC,CAAC;gBACE,QAAQ,EAAE,MAAM,CAAC,WAAW;gBAC5B,QAAQ,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,EAAE;aACzD;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,KAMhD;IACC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,sBAAsB,CAAC;IAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,kBAAkB,CAAC;IACtD,MAAM,gBAAgB,GACpB,KAAK,CAAC,gBAAgB,IAAI,2BAA2B,CAAC;IACxD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,yBAAyB,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;YAC9D,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,0EAA0E;QAC1E,0EAA0E;QAC1E,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CACvD,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5C,UAAU,IAAI,mBAAmB,CAAC,SAAS,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,gBAAgB,CAAC;YACjC,WAAW,EAAE,WAAW,GAAG,aAAa;YACxC,UAAU;YACV,SAAS;SACV,CAAC,CAAC;QACH,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,SAAS;QACX,CAAC;QACD,aAAa,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,QAAQ,EAAE,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,yBAAyB,CACtC,KAAiB,EACjB,gBAAwB;IAExB,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/D,KAAK,CAAC,UAAU,CACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAClB,EAAE,WAAW,EAAE,IAAI,EAAE,EACrB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAChB,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACxB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACvB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAkB,EAAE,EAAE;gBACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjC,GAAG,CAAC,SAAS,EAAE,CAAC;oBAChB,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;oBAC1C,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;wBACrB,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;wBACvC,OAAO;oBACT,CAAC;oBACD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;wBAClC,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC;wBAC7B,IAAI,QAAQ,GAAG,gBAAgB,EAAE,CAAC;4BAChC,MAAM,CAAC,OAAO,EAAE,CAAC;4BACjB,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;wBACnC,CAAC;oBACH,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAC1B,SAA4B,EAC5B,cAAsB;IAEtB,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC;IACzD,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,EACxB,WAAW,EACX,UAAU,EACV,SAAS,GAKV;IAIC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;IACjC,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,SAAiC,CAAC;IACtC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,MAAM,OAAO,GAAG,CAAC,GAAe,EAAQ,EAAE;QACxC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,WAAW,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CACzB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,KAAK,CAC/C,CAAC;YACF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;YACzC,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,IAAI,QAAQ,GAAG,CAAC,GAAG,WAAW,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;YACjC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,GAAe,EAAQ,EAAE;QACzC,YAAY,IAAI,CAAC,CAAC;QAClB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,GAAe,EAAQ,EAAE;QACxC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,WAAW,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,aAAa,GAAG,IAAI,CAAC;QACrB,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,yEAAyE;QACzE,oEAAoE;QACpE,sEAAsE;QACtE,WAAW,GAAG,IAAI,CAAC,GAAG,CACpB,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAClD,oBAAoB,CAAC,SAAS,CAAC,CAChC,CAAC;QACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,WAAW,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAC/B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,KAAK,KAAK,CAC/C,CAAC;YACF,OAAO,CAAC,GAAG,CACT,KAAK,EACL,SAAS,CACP,KAAK,EACL,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,UAAU,KAAK,EAAE,EACtC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAC3C,CACF,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,SAAS,CAAC,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,SAAS;YACzC,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClD,mEAAmE;gBACnE,wDAAwD;gBACxD,IAAI,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,WAAW,CAAC,MAAM,IAAI,oBAAoB,EAAE,CAAC;gBAC/C,YAAY,EAAE,CAAC;YACjB,CAAC;YACD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,EAAE;gBACX,YAAY,EAAE,CAAC;gBACf,eAAe,EAAE,CAAC;gBAClB,IAAI,EAAE,OAAO;gBACb,SAAS;aACV;SACF,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,2EAA2E;IAC3E,eAAe;IACf,MAAM,gBAAgB,GAAiC,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KACE,IAAI,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAC9C,IAAI,KAAK,SAAS,EAClB,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAC1C,CAAC;QACD,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,SAAS,EAAE,CAAC;YACd,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACpC,WAAW,CAAC,GAAG,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QACjC,IACE,IAAI,KAAK,SAAS;YAClB,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,EACtE,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,WAAW,CAAC,GAAG,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,MAAM;IACR,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,QAAQ,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IAED,MAAM,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC;IAC5C,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAChC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,GAAG,eAAe,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CACnE,CAAC;IACF,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAElD,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;YACzD,YAAY;YACZ,eAAe,EAAE,SAAS,CAAC,SAAS;YACpC,IAAI;YACJ,SAAS;YACT,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,KAAK,YAAY;gBAClE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;gBAClB,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;gBACpB,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC7C,CAAC,CAAC,EAAE,CAAC;SACR;QACD,qEAAqE;QACrE,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,SAA4B;IACxD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;QACjD,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE;YAC1D,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1D,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrE,OAAO;YACT,CAAC;YACD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CACpB,OAAuC,EACvC,WAAmB;IAEnB,2EAA2E;IAC3E,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,yEAAyE;IACzE,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACtD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,CAChE,CAAC;IACF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAChC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,CAC7D,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CACrB,GAAe,EACf,WAAmC,EACnC,WAAmB;IAEnB,OAAO,CACL,WAAW,GAAG,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACtB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,SAAS;QACnC,WAAW,KAAK,SAAS;QACzB,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,GAAe,EACf,OAAuC;IAEvC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;IACnC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,yEAAyE;IACzE,yEAAyE;IACzE,oDAAoD;IACpD,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,EAAE,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,UAAU,GAAG,IAAI;SACpB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;SAC5C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,IAAI,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;QACtE,OAAO,GAAG,IAAI,KAAK,gBAAgB,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;IACL,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/E,CAAC"}
@@ -13,6 +13,7 @@ export declare const testApiToolFactory: import("../../tools2/types.js").ToolFac
13
13
  timeout?: number | undefined;
14
14
  description?: string | undefined;
15
15
  omitStepOutputs?: boolean | undefined;
16
+ attachmentInputs?: Record<string, string[]> | undefined;
16
17
  }, {
17
18
  message: string;
18
19
  result: {
@@ -1 +1 @@
1
- {"version":3,"file":"test-api.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/apis/test-api.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,KAAK,EACL,uBAAuB,EACxB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAEL,eAAe,EAGhB,MAAM,uBAAuB,CAAC;AAo4B/B,eAAO,MAAM,uBAAuB,GAClC,UAAU,uBAAuB,EACjC,QAAQ;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAClD,SAAS,KAAK,KACb,OAAO,CAAC,eAAe,CAkEzB,CAAC;AAEF,eAAO,MAAM,kBAAkB;WAMpB,KAAK;cACF,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqLpC,CAAC"}
1
+ {"version":3,"file":"test-api.d.ts","sourceRoot":"","sources":["../../../../../src/ai-service/agent/tools/apis/test-api.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EACV,KAAK,EACL,uBAAuB,EACxB,MAAM,qCAAqC,CAAC;AAG7C,OAAO,EAEL,eAAe,EAGhB,MAAM,uBAAuB,CAAC;AAk6B/B,eAAO,MAAM,uBAAuB,GAClC,UAAU,uBAAuB,EACjC,QAAQ;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAClD,SAAS,KAAK,KACb,OAAO,CAAC,eAAe,CAkEzB,CAAC;AAEF,eAAO,MAAM,kBAAkB;WAMpB,KAAK;cACF,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkNpC,CAAC"}