@zaalipro/dsh-workflows 0.1.0-rc.3

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 (229) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +224 -0
  3. package/README.i18n.yaml +4 -0
  4. package/README.md +109 -0
  5. package/README.zh.md +109 -0
  6. package/cordis.patch.yml +10 -0
  7. package/docs/architecture.i18n.yaml +4 -0
  8. package/docs/architecture.md +177 -0
  9. package/docs/architecture.zh.md +177 -0
  10. package/docs/testing.i18n.yaml +4 -0
  11. package/docs/testing.md +125 -0
  12. package/docs/testing.zh.md +125 -0
  13. package/docs/user-guide.i18n.yaml +4 -0
  14. package/docs/user-guide.md +351 -0
  15. package/docs/user-guide.zh.md +351 -0
  16. package/lib/client-types/WorkflowMemberInspector.d.ts +28 -0
  17. package/lib/client-types/WorkflowMemberInspector.d.ts.map +1 -0
  18. package/lib/client-types/WorkflowMemberInspector.js +181 -0
  19. package/lib/client-types/WorkflowMemberInspector.js.map +1 -0
  20. package/lib/client-types/WorkflowRunPanel.d.ts +43 -0
  21. package/lib/client-types/WorkflowRunPanel.d.ts.map +1 -0
  22. package/lib/client-types/WorkflowRunPanel.js +130 -0
  23. package/lib/client-types/WorkflowRunPanel.js.map +1 -0
  24. package/lib/client-types/WorkflowsDashboard.d.ts +49 -0
  25. package/lib/client-types/WorkflowsDashboard.d.ts.map +1 -0
  26. package/lib/client-types/WorkflowsDashboard.js +942 -0
  27. package/lib/client-types/WorkflowsDashboard.js.map +1 -0
  28. package/lib/client-types/adapter.d.ts +60 -0
  29. package/lib/client-types/adapter.d.ts.map +1 -0
  30. package/lib/client-types/adapter.js +117 -0
  31. package/lib/client-types/adapter.js.map +1 -0
  32. package/lib/client-types/chat-renderer.d.ts +10 -0
  33. package/lib/client-types/chat-renderer.d.ts.map +1 -0
  34. package/lib/client-types/chat-renderer.js +11 -0
  35. package/lib/client-types/chat-renderer.js.map +1 -0
  36. package/lib/client-types/contract.d.ts +210 -0
  37. package/lib/client-types/contract.d.ts.map +1 -0
  38. package/lib/client-types/contract.js +37 -0
  39. package/lib/client-types/contract.js.map +1 -0
  40. package/lib/client-types/controller.d.ts +83 -0
  41. package/lib/client-types/controller.d.ts.map +1 -0
  42. package/lib/client-types/controller.js +705 -0
  43. package/lib/client-types/controller.js.map +1 -0
  44. package/lib/client-types/index.d.ts +19 -0
  45. package/lib/client-types/index.d.ts.map +1 -0
  46. package/lib/client-types/index.js +730 -0
  47. package/lib/client-types/index.js.map +1 -0
  48. package/lib/client-types/locales.d.ts +257 -0
  49. package/lib/client-types/locales.d.ts.map +1 -0
  50. package/lib/client-types/locales.js +270 -0
  51. package/lib/client-types/locales.js.map +1 -0
  52. package/lib/client-types/slot-components.d.ts +38 -0
  53. package/lib/client-types/slot-components.d.ts.map +1 -0
  54. package/lib/client-types/slot-components.js +22 -0
  55. package/lib/client-types/slot-components.js.map +1 -0
  56. package/lib/client-types/store.d.ts +69 -0
  57. package/lib/client-types/store.d.ts.map +1 -0
  58. package/lib/client-types/store.js +135 -0
  59. package/lib/client-types/store.js.map +1 -0
  60. package/lib/client-types/workflow-definition.d.ts +52 -0
  61. package/lib/client-types/workflow-definition.d.ts.map +1 -0
  62. package/lib/client-types/workflow-definition.js +135 -0
  63. package/lib/client-types/workflow-definition.js.map +1 -0
  64. package/lib/client.js +11064 -0
  65. package/lib/client.js.map +1 -0
  66. package/lib/compat-engine/index.js +1926 -0
  67. package/lib/compat-engine/index.js.map +1 -0
  68. package/lib/compat-engine/worker.cjs +1500 -0
  69. package/lib/compat-engine/worker.cjs.map +1 -0
  70. package/lib/typert.host.d.ts +3 -0
  71. package/lib/typert.host.js +1709 -0
  72. package/lib/typert.remote-client.d.ts +57 -0
  73. package/lib/typert.remote-client.js +1662 -0
  74. package/lib/types/commands/aliases.d.ts +4 -0
  75. package/lib/types/commands/aliases.d.ts.map +1 -0
  76. package/lib/types/commands/aliases.js +25 -0
  77. package/lib/types/commands/aliases.js.map +1 -0
  78. package/lib/types/commands/index.d.ts +66 -0
  79. package/lib/types/commands/index.d.ts.map +1 -0
  80. package/lib/types/commands/index.js +550 -0
  81. package/lib/types/commands/index.js.map +1 -0
  82. package/lib/types/commands/parser.d.ts +17 -0
  83. package/lib/types/commands/parser.d.ts.map +1 -0
  84. package/lib/types/commands/parser.js +45 -0
  85. package/lib/types/commands/parser.js.map +1 -0
  86. package/lib/types/config.d.ts +71 -0
  87. package/lib/types/config.d.ts.map +1 -0
  88. package/lib/types/config.js +109 -0
  89. package/lib/types/config.js.map +1 -0
  90. package/lib/types/index.d.ts +41 -0
  91. package/lib/types/index.d.ts.map +1 -0
  92. package/lib/types/index.js +483 -0
  93. package/lib/types/index.js.map +1 -0
  94. package/lib/types/invariant.d.ts +21 -0
  95. package/lib/types/invariant.d.ts.map +1 -0
  96. package/lib/types/invariant.js +85 -0
  97. package/lib/types/invariant.js.map +1 -0
  98. package/lib/types/registry/definition.d.ts +24 -0
  99. package/lib/types/registry/definition.d.ts.map +1 -0
  100. package/lib/types/registry/definition.js +189 -0
  101. package/lib/types/registry/definition.js.map +1 -0
  102. package/lib/types/registry/index.d.ts +100 -0
  103. package/lib/types/registry/index.d.ts.map +1 -0
  104. package/lib/types/registry/index.js +899 -0
  105. package/lib/types/registry/index.js.map +1 -0
  106. package/lib/types/registry/names.d.ts +19 -0
  107. package/lib/types/registry/names.d.ts.map +1 -0
  108. package/lib/types/registry/names.js +69 -0
  109. package/lib/types/registry/names.js.map +1 -0
  110. package/lib/types/registry/remote.d.ts +15 -0
  111. package/lib/types/registry/remote.d.ts.map +1 -0
  112. package/lib/types/registry/remote.js +128 -0
  113. package/lib/types/registry/remote.js.map +1 -0
  114. package/lib/types/registry/roots.d.ts +44 -0
  115. package/lib/types/registry/roots.d.ts.map +1 -0
  116. package/lib/types/registry/roots.js +118 -0
  117. package/lib/types/registry/roots.js.map +1 -0
  118. package/lib/types/registry/types.d.ts +62 -0
  119. package/lib/types/registry/types.d.ts.map +1 -0
  120. package/lib/types/registry/types.js +2 -0
  121. package/lib/types/registry/types.js.map +1 -0
  122. package/lib/types/registry/watchers.d.ts +70 -0
  123. package/lib/types/registry/watchers.d.ts.map +1 -0
  124. package/lib/types/registry/watchers.js +152 -0
  125. package/lib/types/registry/watchers.js.map +1 -0
  126. package/lib/types/remote-events.d.ts +42 -0
  127. package/lib/types/remote-events.d.ts.map +1 -0
  128. package/lib/types/remote-events.js +21 -0
  129. package/lib/types/remote-events.js.map +1 -0
  130. package/lib/types/run-recorder.d.ts +44 -0
  131. package/lib/types/run-recorder.d.ts.map +1 -0
  132. package/lib/types/run-recorder.js +356 -0
  133. package/lib/types/run-recorder.js.map +1 -0
  134. package/lib/types/supervisor/canned-validate.d.ts +25 -0
  135. package/lib/types/supervisor/canned-validate.d.ts.map +1 -0
  136. package/lib/types/supervisor/canned-validate.js +122 -0
  137. package/lib/types/supervisor/canned-validate.js.map +1 -0
  138. package/lib/types/supervisor/completion-notice.d.ts +49 -0
  139. package/lib/types/supervisor/completion-notice.d.ts.map +1 -0
  140. package/lib/types/supervisor/completion-notice.js +281 -0
  141. package/lib/types/supervisor/completion-notice.js.map +1 -0
  142. package/lib/types/supervisor/cursors.d.ts +68 -0
  143. package/lib/types/supervisor/cursors.d.ts.map +1 -0
  144. package/lib/types/supervisor/cursors.js +158 -0
  145. package/lib/types/supervisor/cursors.js.map +1 -0
  146. package/lib/types/supervisor/engine-compat.d.ts +48 -0
  147. package/lib/types/supervisor/engine-compat.d.ts.map +1 -0
  148. package/lib/types/supervisor/engine-compat.js +116 -0
  149. package/lib/types/supervisor/engine-compat.js.map +1 -0
  150. package/lib/types/supervisor/index.d.ts +183 -0
  151. package/lib/types/supervisor/index.d.ts.map +1 -0
  152. package/lib/types/supervisor/index.js +2040 -0
  153. package/lib/types/supervisor/index.js.map +1 -0
  154. package/lib/types/supervisor/parallel-compat.d.ts +36 -0
  155. package/lib/types/supervisor/parallel-compat.d.ts.map +1 -0
  156. package/lib/types/supervisor/parallel-compat.js +180 -0
  157. package/lib/types/supervisor/parallel-compat.js.map +1 -0
  158. package/lib/types/supervisor/remote.d.ts +25 -0
  159. package/lib/types/supervisor/remote.d.ts.map +1 -0
  160. package/lib/types/supervisor/remote.js +478 -0
  161. package/lib/types/supervisor/remote.js.map +1 -0
  162. package/lib/types/supervisor/storage/bounded-file.d.ts +41 -0
  163. package/lib/types/supervisor/storage/bounded-file.d.ts.map +1 -0
  164. package/lib/types/supervisor/storage/bounded-file.js +186 -0
  165. package/lib/types/supervisor/storage/bounded-file.js.map +1 -0
  166. package/lib/types/supervisor/storage/details-codec.d.ts +14 -0
  167. package/lib/types/supervisor/storage/details-codec.d.ts.map +1 -0
  168. package/lib/types/supervisor/storage/details-codec.js +359 -0
  169. package/lib/types/supervisor/storage/details-codec.js.map +1 -0
  170. package/lib/types/supervisor/storage/index.d.ts +26 -0
  171. package/lib/types/supervisor/storage/index.d.ts.map +1 -0
  172. package/lib/types/supervisor/storage/index.js +100 -0
  173. package/lib/types/supervisor/storage/index.js.map +1 -0
  174. package/lib/types/supervisor/storage/lease.d.ts +34 -0
  175. package/lib/types/supervisor/storage/lease.d.ts.map +1 -0
  176. package/lib/types/supervisor/storage/lease.js +289 -0
  177. package/lib/types/supervisor/storage/lease.js.map +1 -0
  178. package/lib/types/supervisor/storage/manifest-codec.d.ts +10 -0
  179. package/lib/types/supervisor/storage/manifest-codec.d.ts.map +1 -0
  180. package/lib/types/supervisor/storage/manifest-codec.js +335 -0
  181. package/lib/types/supervisor/storage/manifest-codec.js.map +1 -0
  182. package/lib/types/supervisor/storage/manifest-store.d.ts +99 -0
  183. package/lib/types/supervisor/storage/manifest-store.d.ts.map +1 -0
  184. package/lib/types/supervisor/storage/manifest-store.js +1606 -0
  185. package/lib/types/supervisor/storage/manifest-store.js.map +1 -0
  186. package/lib/types/supervisor/storage/manifest-types.d.ts +269 -0
  187. package/lib/types/supervisor/storage/manifest-types.d.ts.map +1 -0
  188. package/lib/types/supervisor/storage/manifest-types.js +2 -0
  189. package/lib/types/supervisor/storage/manifest-types.js.map +1 -0
  190. package/lib/types/supervisor/storage/private-root.d.ts +143 -0
  191. package/lib/types/supervisor/storage/private-root.d.ts.map +1 -0
  192. package/lib/types/supervisor/storage/private-root.js +860 -0
  193. package/lib/types/supervisor/storage/private-root.js.map +1 -0
  194. package/lib/types/supervisor/storage/recovery.d.ts +14 -0
  195. package/lib/types/supervisor/storage/recovery.d.ts.map +1 -0
  196. package/lib/types/supervisor/storage/recovery.js +126 -0
  197. package/lib/types/supervisor/storage/recovery.js.map +1 -0
  198. package/lib/types/supervisor/storage/run-files.d.ts +67 -0
  199. package/lib/types/supervisor/storage/run-files.d.ts.map +1 -0
  200. package/lib/types/supervisor/storage/run-files.js +346 -0
  201. package/lib/types/supervisor/storage/run-files.js.map +1 -0
  202. package/lib/types/supervisor/types.d.ts +295 -0
  203. package/lib/types/supervisor/types.d.ts.map +1 -0
  204. package/lib/types/supervisor/types.js +3 -0
  205. package/lib/types/supervisor/types.js.map +1 -0
  206. package/lib/types/supervisor/value-view.d.ts +19 -0
  207. package/lib/types/supervisor/value-view.d.ts.map +1 -0
  208. package/lib/types/supervisor/value-view.js +183 -0
  209. package/lib/types/supervisor/value-view.js.map +1 -0
  210. package/lib/types/tool/index.d.ts +86 -0
  211. package/lib/types/tool/index.d.ts.map +1 -0
  212. package/lib/types/tool/index.js +810 -0
  213. package/lib/types/tool/index.js.map +1 -0
  214. package/lib/types/tool/schema.d.ts +158 -0
  215. package/lib/types/tool/schema.d.ts.map +1 -0
  216. package/lib/types/tool/schema.js +137 -0
  217. package/lib/types/tool/schema.js.map +1 -0
  218. package/lib/types/types.d.ts +9 -0
  219. package/lib/types/types.d.ts.map +1 -0
  220. package/lib/types/types.js +3 -0
  221. package/lib/types/types.js.map +1 -0
  222. package/lib/types/user-questions.d.ts +9 -0
  223. package/lib/types/user-questions.d.ts.map +1 -0
  224. package/lib/types/user-questions.js +91 -0
  225. package/lib/types/user-questions.js.map +1 -0
  226. package/package.json +273 -0
  227. package/skills/create-workflow/SKILL.md +166 -0
  228. package/vendor/workflow-engine/LICENSE +21 -0
  229. package/vendor/workflow-engine/README.md +1 -0
@@ -0,0 +1,186 @@
1
+ import { constants } from 'node:fs';
2
+ import { randomBytes } from 'node:crypto';
3
+ import { link, lstat, mkdir, open, rename, stat, unlink } from 'node:fs/promises';
4
+ import { dirname, join } from 'node:path';
5
+ export class BoundedFileError extends Error {
6
+ code;
7
+ constructor(message, code = 'WORKFLOW_STORAGE_UNSAFE', options) {
8
+ super(message, options);
9
+ this.name = 'BoundedFileError';
10
+ this.code = code;
11
+ }
12
+ }
13
+ const COMPONENT = /^[A-Za-z0-9][A-Za-z0-9._-]*$/u;
14
+ const encoder = new TextEncoder();
15
+ function noFollowFlag() {
16
+ const flag = constants.O_NOFOLLOW;
17
+ if (process.platform === 'win32' || typeof flag !== 'number' || flag === 0) {
18
+ throw new BoundedFileError(`safe workflow storage is unavailable on ${process.platform}`, 'WORKFLOW_STORAGE_UNSUPPORTED');
19
+ }
20
+ return flag;
21
+ }
22
+ function unsafe(path, detail, cause) {
23
+ return new BoundedFileError(`workflow storage path "${path}" is unsafe: ${detail}`, 'WORKFLOW_STORAGE_UNSAFE', cause === undefined ? undefined : { cause });
24
+ }
25
+ /** Validate a value before it is used as a descriptor-relative component. */
26
+ export function assertSafeComponent(value, label = 'path component') {
27
+ if (!COMPONENT.test(value)
28
+ || value === '.'
29
+ || value === '..'
30
+ || value.includes('/')
31
+ || value.includes('\\')
32
+ || Buffer.byteLength(value, 'utf8') > 255) {
33
+ throw new BoundedFileError(`${label} is unsafe: ${value}`);
34
+ }
35
+ return value;
36
+ }
37
+ /** Read through a retained private-directory authority with a fixed byte cap. */
38
+ export async function readOwnedRegularFile(directory, name, options) {
39
+ assertSafeComponent(name, 'file name');
40
+ if (!Number.isSafeInteger(options.maxBytes) || options.maxBytes < 0) {
41
+ throw new RangeError('maxBytes must be a non-negative safe integer');
42
+ }
43
+ options.signal?.throwIfAborted();
44
+ await directory.assertIdentity(options.signal);
45
+ const bytes = await directory.readBytes(name, options.signal, options.maxBytes);
46
+ if (bytes.byteLength > options.maxBytes) {
47
+ throw new BoundedFileError(`private file "${name}" exceeds ${options.maxBytes} bytes`, 'WORKFLOW_STORAGE_LIMIT');
48
+ }
49
+ await directory.assertIdentity(options.signal);
50
+ return new Uint8Array(bytes);
51
+ }
52
+ /** Publish through the compatible Host's guarded private-directory operation. */
53
+ export async function writeOwnedFileAtomic(directory, name, bytes, options) {
54
+ assertSafeComponent(name, 'file name');
55
+ if (!Number.isSafeInteger(options.maxBytes) || options.maxBytes < 0) {
56
+ throw new RangeError('maxBytes must be a non-negative safe integer');
57
+ }
58
+ if (bytes.byteLength > options.maxBytes) {
59
+ throw new BoundedFileError(`private file "${name}" exceeds ${options.maxBytes} bytes`, 'WORKFLOW_STORAGE_LIMIT');
60
+ }
61
+ options.signal?.throwIfAborted();
62
+ await directory.assertIdentity(options.signal);
63
+ let content;
64
+ try {
65
+ content = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
66
+ }
67
+ catch (error) {
68
+ throw new BoundedFileError(`private file "${name}" is not valid UTF-8`, 'WORKFLOW_STORAGE_CORRUPT', { cause: error });
69
+ }
70
+ const outcome = await directory.writeText(name, content, options.expected, options.signal);
71
+ await directory.assertIdentity(options.signal);
72
+ return outcome;
73
+ }
74
+ /** Legacy path-shaped bounded read, retained for compatibility with early consumers. */
75
+ export async function readBoundedUtf8(path, maxBytes) {
76
+ if (!Number.isSafeInteger(maxBytes) || maxBytes < 0)
77
+ throw new RangeError('maxBytes must be a non-negative safe integer');
78
+ const handle = await open(path, constants.O_RDONLY | noFollowFlag());
79
+ try {
80
+ const info = await handle.stat();
81
+ if (!info.isFile() || info.nlink !== 1 || (info.mode & 0o777) !== 0o600) {
82
+ throw unsafe(path, 'file is not a private regular single-link file');
83
+ }
84
+ if (typeof process.getuid === 'function' && info.uid !== process.getuid())
85
+ throw unsafe(path, 'file has the wrong owner');
86
+ if (info.size > maxBytes)
87
+ throw new BoundedFileError(`${path} exceeds ${maxBytes} bytes`, 'WORKFLOW_STORAGE_LIMIT');
88
+ const chunks = [];
89
+ let total = 0;
90
+ while (total <= maxBytes) {
91
+ const chunk = Buffer.allocUnsafe(Math.min(64 * 1024, maxBytes - total + 1));
92
+ const { bytesRead } = await handle.read(chunk, 0, chunk.length, null);
93
+ if (bytesRead === 0)
94
+ break;
95
+ total += bytesRead;
96
+ if (total > maxBytes)
97
+ throw new BoundedFileError(`${path} exceeds ${maxBytes} bytes`, 'WORKFLOW_STORAGE_LIMIT');
98
+ chunks.push(chunk.subarray(0, bytesRead));
99
+ }
100
+ try {
101
+ return new TextDecoder('utf-8', { fatal: true }).decode(Buffer.concat(chunks, total));
102
+ }
103
+ catch (error) {
104
+ throw new BoundedFileError(`${path} is not valid UTF-8`, 'WORKFLOW_STORAGE_CORRUPT', { cause: error });
105
+ }
106
+ }
107
+ finally {
108
+ await handle.close();
109
+ }
110
+ }
111
+ /** Legacy path-shaped atomic publication with fsync and final-component checks. */
112
+ export async function writeBoundedAtomic(path, content, options) {
113
+ const bytes = encoder.encode(content);
114
+ if (bytes.byteLength > options.maxBytes) {
115
+ throw new BoundedFileError(`${path} exceeds ${options.maxBytes} bytes`, 'WORKFLOW_STORAGE_LIMIT');
116
+ }
117
+ const mode = options.mode ?? 0o600;
118
+ if (mode !== 0o600)
119
+ throw unsafe(path, 'workflow storage files must use mode 0600');
120
+ const parent = dirname(path);
121
+ await mkdir(parent, { recursive: true, mode: 0o700 });
122
+ const temp = join(parent, `.${randomBytes(16).toString('hex')}.tmp`);
123
+ const handle = await open(temp, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY | noFollowFlag(), mode);
124
+ try {
125
+ let offset = 0;
126
+ while (offset < bytes.byteLength) {
127
+ const { bytesWritten } = await handle.write(bytes, offset, bytes.byteLength - offset, offset);
128
+ if (bytesWritten <= 0)
129
+ throw unsafe(temp, 'short write');
130
+ offset += bytesWritten;
131
+ }
132
+ await handle.sync();
133
+ if (options.createOnly) {
134
+ try {
135
+ await lstat(path);
136
+ throw unsafe(path, 'destination already exists');
137
+ }
138
+ catch (error) {
139
+ if (error.code !== 'ENOENT')
140
+ throw error;
141
+ }
142
+ }
143
+ else {
144
+ try {
145
+ const current = await lstat(path);
146
+ if (!current.isFile() || current.isSymbolicLink() || current.nlink !== 1) {
147
+ throw unsafe(path, 'destination is not a regular single-link file');
148
+ }
149
+ }
150
+ catch (error) {
151
+ if (error.code !== 'ENOENT')
152
+ throw error;
153
+ }
154
+ }
155
+ if (options.createOnly) {
156
+ try {
157
+ await link(temp, path);
158
+ }
159
+ catch (error) {
160
+ if (error.code === 'EEXIST')
161
+ throw unsafe(path, 'destination already exists', error);
162
+ throw error;
163
+ }
164
+ await unlink(temp);
165
+ }
166
+ else {
167
+ await rename(temp, path);
168
+ }
169
+ const published = await stat(path);
170
+ if (!published.isFile() || published.nlink !== 1 || (published.mode & 0o777) !== 0o600) {
171
+ throw unsafe(path, 'published file identity is invalid');
172
+ }
173
+ const parentHandle = await open(parent, constants.O_RDONLY | (constants.O_DIRECTORY ?? 0));
174
+ try {
175
+ await parentHandle.sync();
176
+ }
177
+ finally {
178
+ await parentHandle.close();
179
+ }
180
+ }
181
+ finally {
182
+ await handle.close().catch(() => undefined);
183
+ await unlink(temp).catch(() => undefined);
184
+ }
185
+ }
186
+ //# sourceMappingURL=bounded-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounded-file.js","sourceRoot":"","sources":["../../../../src/supervisor/storage/bounded-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { WorkflowRunDetailPayloadV2, WorkflowRunDetailSnapshotV2 } from './manifest-types.js';
2
+ export interface WorkflowRunDetailLimits {
3
+ readonly memberOutcomeMaxBytes: number;
4
+ readonly maxTerminalResultBytes: number;
5
+ readonly maxLogLineBytes: number;
6
+ readonly maxRunDetailsBytes: number;
7
+ }
8
+ /** Deterministically compact a detail payload to its fixed quotas. */
9
+ export declare function compactWorkflowRunDetails(value: WorkflowRunDetailPayloadV2, limits: WorkflowRunDetailLimits): WorkflowRunDetailPayloadV2;
10
+ /** Encode one immutable version-2 detail sidecar. */
11
+ export declare function encodeWorkflowRunDetails(value: WorkflowRunDetailSnapshotV2, limits: WorkflowRunDetailLimits): Uint8Array;
12
+ /** Decode one immutable version-2 detail sidecar. */
13
+ export declare function decodeWorkflowRunDetails(input: Uint8Array | string, file: string, limits: WorkflowRunDetailLimits): WorkflowRunDetailSnapshotV2;
14
+ //# sourceMappingURL=details-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"details-codec.d.ts","sourceRoot":"","sources":["../../../../src/supervisor/storage/details-codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,qBAAqB,CAAA;AAI5B,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAA;IACtC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAA;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CACpC;AAkRD,sEAAsE;AACtE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,0BAA0B,EAAE,MAAM,EAAE,uBAAuB,GAAG,0BAA0B,CAGxI;AAED,qDAAqD;AACrD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,2BAA2B,EAAE,MAAM,EAAE,uBAAuB,GAAG,UAAU,CAUxH;AAED,qDAAqD;AACrD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,2BAA2B,CAY/I"}
@@ -0,0 +1,359 @@
1
+ import { BoundedFileError } from './bounded-file.js';
2
+ import { snapshotWorkflowJsonValue } from '../value-view.js';
3
+ const COMPONENT = /^[a-f0-9]{32}$/u;
4
+ const SAFE_ARTIFACT = /^[A-Za-z0-9][A-Za-z0-9._-]*$/u;
5
+ const OUTCOMES = new Set(['pending', 'available', 'not-produced', 'evicted']);
6
+ const MEMBER_STATUSES = new Set(['running', 'completed', 'failed', 'cancelled']);
7
+ const encoder = new TextEncoder();
8
+ function corrupt(message) {
9
+ throw new BoundedFileError(message, 'WORKFLOW_STORAGE_CORRUPT');
10
+ }
11
+ function overLimit(message) {
12
+ throw new BoundedFileError(message, 'WORKFLOW_STORAGE_LIMIT');
13
+ }
14
+ function isRecord(value) {
15
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
16
+ }
17
+ function own(value, key) {
18
+ return Object.prototype.hasOwnProperty.call(value, key);
19
+ }
20
+ function exactKeys(value, allowed, required, path) {
21
+ const accepted = new Set(allowed);
22
+ for (const key of Object.keys(value))
23
+ if (!accepted.has(key))
24
+ corrupt(`${path}.${key} is not allowed`);
25
+ for (const key of required)
26
+ if (!own(value, key))
27
+ corrupt(`${path}.${key} is required`);
28
+ }
29
+ function safeNonNegative(value, path) {
30
+ if (!Number.isSafeInteger(value) || Number(value) < 0)
31
+ corrupt(`${path} must be a non-negative safe integer`);
32
+ return value;
33
+ }
34
+ function nonEmptyText(value, path) {
35
+ if (typeof value !== 'string' || value.length === 0)
36
+ corrupt(`${path} must be a non-empty string`);
37
+ return value;
38
+ }
39
+ function assertLimits(limits) {
40
+ for (const [name, value] of Object.entries(limits)) {
41
+ if (!Number.isSafeInteger(value) || value <= 0)
42
+ overLimit(`${name} must be a positive safe integer`);
43
+ }
44
+ if (limits.memberOutcomeMaxBytes > limits.maxRunDetailsBytes
45
+ || limits.maxTerminalResultBytes > limits.maxRunDetailsBytes
46
+ || limits.maxLogLineBytes > limits.maxRunDetailsBytes) {
47
+ overLimit('workflow detail field limits must not exceed maxRunDetailsBytes');
48
+ }
49
+ }
50
+ function sortObject(value) {
51
+ if (Array.isArray(value))
52
+ return value.map(sortObject);
53
+ if (!isRecord(value))
54
+ return value;
55
+ return Object.fromEntries(Object.keys(value).sort().map(key => [key, sortObject(value[key])]));
56
+ }
57
+ function canonicalBytes(value) {
58
+ return encoder.encode(`${JSON.stringify(sortObject(value), null, 2)}\n`);
59
+ }
60
+ function compactBytes(value) {
61
+ return encoder.encode(JSON.stringify(value)).byteLength;
62
+ }
63
+ function prettyValueText(value) {
64
+ return JSON.stringify(value, null, 2);
65
+ }
66
+ function prettyValueBytes(value) {
67
+ return encoder.encode(prettyValueText(value)).byteLength;
68
+ }
69
+ function utf8Prefix(text, maxBytes) {
70
+ let result = '';
71
+ let retained = 0;
72
+ for (const point of text) {
73
+ const bytes = encoder.encode(point).byteLength;
74
+ if (retained + bytes > maxBytes)
75
+ break;
76
+ result += point;
77
+ retained += bytes;
78
+ }
79
+ return result;
80
+ }
81
+ function jsonSnapshot(value, path) {
82
+ try {
83
+ return snapshotWorkflowJsonValue(value);
84
+ }
85
+ catch (error) {
86
+ corrupt(`${path} is not lossless JSON: ${error instanceof Error ? error.message : String(error)}`);
87
+ }
88
+ }
89
+ function validateMember(value, index, limits, enforceQuotas) {
90
+ const path = `detail.payload.members[${index}]`;
91
+ if (!isRecord(value))
92
+ corrupt(`${path} must be an object`);
93
+ exactKeys(value, ['memberId', 'seq', 'label', 'phase', 'status', 'outcome', 'value', 'childSessionId', 'startedAt', 'settledAt'], ['memberId', 'seq', 'label', 'status', 'outcome'], path);
94
+ nonEmptyText(value.memberId, `${path}.memberId`);
95
+ safeNonNegative(value.seq, `${path}.seq`);
96
+ nonEmptyText(value.label, `${path}.label`);
97
+ if (own(value, 'phase') && typeof value.phase !== 'string')
98
+ corrupt(`${path}.phase must be a string`);
99
+ if (!MEMBER_STATUSES.has(String(value.status)))
100
+ corrupt(`${path}.status is invalid`);
101
+ if (!OUTCOMES.has(String(value.outcome)))
102
+ corrupt(`${path}.outcome is invalid`);
103
+ if (own(value, 'childSessionId'))
104
+ nonEmptyText(value.childSessionId, `${path}.childSessionId`);
105
+ const startedAt = own(value, 'startedAt') ? safeNonNegative(value.startedAt, `${path}.startedAt`) : undefined;
106
+ const settledAt = own(value, 'settledAt') ? safeNonNegative(value.settledAt, `${path}.settledAt`) : undefined;
107
+ if (startedAt !== undefined && settledAt !== undefined && settledAt < startedAt)
108
+ corrupt(`${path}.settledAt precedes startedAt`);
109
+ if (value.status === 'running' && settledAt !== undefined)
110
+ corrupt(`${path} is running but settled`);
111
+ if (value.outcome === 'available') {
112
+ if (!own(value, 'value'))
113
+ corrupt(`${path}.value is required for an available outcome`);
114
+ const snapshot = jsonSnapshot(value.value, `${path}.value`);
115
+ if (enforceQuotas && prettyValueBytes(snapshot) > limits.memberOutcomeMaxBytes)
116
+ overLimit(`${path}.value exceeds the member outcome limit`);
117
+ }
118
+ else if (own(value, 'value')) {
119
+ corrupt(`${path}.value is forbidden for outcome ${String(value.outcome)}`);
120
+ }
121
+ return value;
122
+ }
123
+ function validateResult(value, limits, enforceQuotas) {
124
+ const path = 'detail.payload.result';
125
+ if (!isRecord(value))
126
+ corrupt(`${path} must be an object`);
127
+ exactKeys(value, ['state', 'value', 'preview', 'totalBytes', 'truncated'], ['state'], path);
128
+ if (!OUTCOMES.has(String(value.state)))
129
+ corrupt(`${path}.state is invalid`);
130
+ if (value.state !== 'available') {
131
+ if (Object.keys(value).some(key => key !== 'state'))
132
+ corrupt(`${path} non-available state carries a projection`);
133
+ return;
134
+ }
135
+ const hasValue = own(value, 'value');
136
+ const hasPreview = own(value, 'preview');
137
+ if (hasValue === hasPreview)
138
+ corrupt(`${path} must contain exactly one of value or preview`);
139
+ if (hasValue) {
140
+ const snapshot = jsonSnapshot(value.value, `${path}.value`);
141
+ const totalBytes = prettyValueBytes(snapshot);
142
+ if (enforceQuotas && totalBytes > limits.maxTerminalResultBytes)
143
+ overLimit(`${path}.value exceeds the terminal result limit`);
144
+ if (own(value, 'truncated') && value.truncated !== false)
145
+ corrupt(`${path}.truncated must be false with value`);
146
+ if (own(value, 'totalBytes') && safeNonNegative(value.totalBytes, `${path}.totalBytes`) !== totalBytes)
147
+ corrupt(`${path}.totalBytes does not match value`);
148
+ }
149
+ else {
150
+ if (typeof value.preview !== 'string')
151
+ corrupt(`${path}.preview must be a string`);
152
+ if (value.truncated !== true)
153
+ corrupt(`${path}.truncated must be true with preview`);
154
+ const totalBytes = safeNonNegative(value.totalBytes, `${path}.totalBytes`);
155
+ const previewBytes = encoder.encode(value.preview).byteLength;
156
+ if (previewBytes > totalBytes)
157
+ corrupt(`${path}.preview exceeds totalBytes`);
158
+ if (enforceQuotas && previewBytes > limits.maxTerminalResultBytes)
159
+ overLimit(`${path}.preview exceeds the terminal result limit`);
160
+ }
161
+ }
162
+ function validatePayload(value, limits, enforceQuotas) {
163
+ if (!isRecord(value))
164
+ corrupt('detail.payload must be an object');
165
+ exactKeys(value, ['members', 'logs', 'result', 'phases', 'artifacts'], [], 'detail.payload');
166
+ if (own(value, 'members')) {
167
+ if (!Array.isArray(value.members))
168
+ corrupt('detail.payload.members must be an array');
169
+ const ids = new Set();
170
+ const sequences = new Set();
171
+ for (let index = 0; index < value.members.length; index += 1) {
172
+ const member = validateMember(value.members[index], index, limits, enforceQuotas);
173
+ const id = member.memberId;
174
+ const seq = member.seq;
175
+ if (ids.has(id))
176
+ corrupt(`detail.payload.members[${index}].memberId is duplicated`);
177
+ if (sequences.has(seq))
178
+ corrupt(`detail.payload.members[${index}].seq is duplicated`);
179
+ ids.add(id);
180
+ sequences.add(seq);
181
+ }
182
+ }
183
+ if (own(value, 'logs')) {
184
+ if (!Array.isArray(value.logs))
185
+ corrupt('detail.payload.logs must be an array');
186
+ let previous;
187
+ for (let index = 0; index < value.logs.length; index += 1) {
188
+ const path = `detail.payload.logs[${index}]`;
189
+ const log = value.logs[index];
190
+ if (!isRecord(log))
191
+ corrupt(`${path} must be an object`);
192
+ exactKeys(log, ['index', 'text'], ['index', 'text'], path);
193
+ const current = safeNonNegative(log.index, `${path}.index`);
194
+ if (previous !== undefined && current !== previous + 1)
195
+ corrupt(`${path}.index is not contiguous`);
196
+ previous = current;
197
+ if (typeof log.text !== 'string')
198
+ corrupt(`${path}.text must be a string`);
199
+ if (enforceQuotas && encoder.encode(log.text).byteLength > limits.maxLogLineBytes)
200
+ overLimit(`${path}.text exceeds the log line limit`);
201
+ }
202
+ }
203
+ if (own(value, 'result'))
204
+ validateResult(value.result, limits, enforceQuotas);
205
+ if (own(value, 'phases')) {
206
+ if (!Array.isArray(value.phases))
207
+ corrupt('detail.payload.phases must be an array');
208
+ for (let index = 0; index < value.phases.length; index += 1) {
209
+ const path = `detail.payload.phases[${index}]`;
210
+ const phase = value.phases[index];
211
+ if (!isRecord(phase))
212
+ corrupt(`${path} must be an object`);
213
+ exactKeys(phase, ['title', 'startedAt', 'endedAt'], ['title'], path);
214
+ nonEmptyText(phase.title, `${path}.title`);
215
+ const startedAt = own(phase, 'startedAt') ? safeNonNegative(phase.startedAt, `${path}.startedAt`) : undefined;
216
+ const endedAt = own(phase, 'endedAt') ? safeNonNegative(phase.endedAt, `${path}.endedAt`) : undefined;
217
+ if (startedAt !== undefined && endedAt !== undefined && endedAt < startedAt)
218
+ corrupt(`${path}.endedAt precedes startedAt`);
219
+ }
220
+ }
221
+ if (own(value, 'artifacts')) {
222
+ if (!Array.isArray(value.artifacts))
223
+ corrupt('detail.payload.artifacts must be an array');
224
+ const names = new Set();
225
+ for (let index = 0; index < value.artifacts.length; index += 1) {
226
+ const path = `detail.payload.artifacts[${index}]`;
227
+ const artifact = value.artifacts[index];
228
+ if (!isRecord(artifact))
229
+ corrupt(`${path} must be an object`);
230
+ exactKeys(artifact, ['name', 'bytes'], ['name', 'bytes'], path);
231
+ const name = nonEmptyText(artifact.name, `${path}.name`);
232
+ if (!SAFE_ARTIFACT.test(name) || name === '.' || name === '..')
233
+ corrupt(`${path}.name is unsafe`);
234
+ if (names.has(name))
235
+ corrupt(`${path}.name is duplicated`);
236
+ names.add(name);
237
+ safeNonNegative(artifact.bytes, `${path}.bytes`);
238
+ }
239
+ }
240
+ }
241
+ function validateSnapshot(value, limits, enforceQuotas) {
242
+ if (!isRecord(value))
243
+ corrupt('detail snapshot must be an object');
244
+ exactKeys(value, ['version', 'sessionId', 'runId', 'runDirectory', 'detailId', 'snapshotRevision', 'payload'], ['version', 'sessionId', 'runId', 'runDirectory', 'detailId', 'snapshotRevision', 'payload'], 'detail');
245
+ if (value.version !== 2)
246
+ corrupt('detail.version must be 2');
247
+ nonEmptyText(value.sessionId, 'detail.sessionId');
248
+ nonEmptyText(value.runId, 'detail.runId');
249
+ if (typeof value.runDirectory !== 'string' || !COMPONENT.test(value.runDirectory))
250
+ corrupt('detail.runDirectory is unsafe');
251
+ if (typeof value.detailId !== 'string' || !COMPONENT.test(value.detailId))
252
+ corrupt('detail.detailId is unsafe');
253
+ safeNonNegative(value.snapshotRevision, 'detail.snapshotRevision');
254
+ validatePayload(value.payload, limits, enforceQuotas);
255
+ }
256
+ function normalizePayload(value, limits) {
257
+ validatePayload(value, limits, false);
258
+ const output = {};
259
+ if (value.members !== undefined) {
260
+ output.members = [...value.members].sort((left, right) => left.seq - right.seq).map(member => {
261
+ const detached = { ...member };
262
+ if (member.outcome === 'available' && own(member, 'value')) {
263
+ const snapshot = jsonSnapshot(member.value, `member ${member.memberId} value`);
264
+ if (prettyValueBytes(snapshot) > limits.memberOutcomeMaxBytes) {
265
+ delete detached.value;
266
+ detached.outcome = 'evicted';
267
+ }
268
+ else
269
+ detached.value = snapshot;
270
+ }
271
+ return detached;
272
+ });
273
+ }
274
+ if (value.logs !== undefined) {
275
+ output.logs = [...value.logs].sort((left, right) => left.index - right.index)
276
+ .map(log => ({ ...log, text: utf8Prefix(log.text, limits.maxLogLineBytes) }));
277
+ }
278
+ if (value.result !== undefined) {
279
+ if (value.result.state === 'available' && own(value.result, 'value')) {
280
+ const snapshot = jsonSnapshot(value.result.value, 'terminal result');
281
+ const text = prettyValueText(snapshot);
282
+ const totalBytes = encoder.encode(text).byteLength;
283
+ output.result = totalBytes <= limits.maxTerminalResultBytes
284
+ ? { state: 'available', value: snapshot, totalBytes, truncated: false }
285
+ : { state: 'available', preview: utf8Prefix(text, limits.maxTerminalResultBytes), totalBytes, truncated: true };
286
+ }
287
+ else
288
+ output.result = { ...value.result };
289
+ }
290
+ if (value.phases !== undefined)
291
+ output.phases = value.phases.map(phase => ({ ...phase }));
292
+ if (value.artifacts !== undefined) {
293
+ output.artifacts = [...value.artifacts].sort((left, right) => left.name.localeCompare(right.name)).map(artifact => ({ ...artifact }));
294
+ }
295
+ return output;
296
+ }
297
+ function fitPayload(initial, fits) {
298
+ let output = initial;
299
+ let logs = output.logs === undefined ? undefined : [...output.logs];
300
+ let members = output.members === undefined ? undefined : [...output.members];
301
+ // Preserve the newest bounded log when member bodies can make the snapshot
302
+ // fit. Older log bodies are always evicted before any member body; the
303
+ // final log is removed only when no outcome eviction is sufficient.
304
+ while (!fits(output) && logs !== undefined && logs.length > 1) {
305
+ logs = logs.slice(1);
306
+ output = { ...output, logs };
307
+ }
308
+ while (!fits(output) && members !== undefined) {
309
+ const index = members.findIndex(member => member.outcome === 'available' && own(member, 'value'));
310
+ if (index < 0)
311
+ break;
312
+ const member = { ...members[index], outcome: 'evicted' };
313
+ delete member.value;
314
+ members[index] = member;
315
+ output = { ...output, members };
316
+ }
317
+ while (!fits(output) && logs !== undefined && logs.length > 0) {
318
+ logs = logs.slice(1);
319
+ output = { ...output, logs };
320
+ }
321
+ if (!fits(output))
322
+ overLimit('fixed workflow detail metadata exceeds the run limit');
323
+ return output;
324
+ }
325
+ /** Deterministically compact a detail payload to its fixed quotas. */
326
+ export function compactWorkflowRunDetails(value, limits) {
327
+ assertLimits(limits);
328
+ return fitPayload(normalizePayload(value, limits), payload => compactBytes(payload) <= limits.maxRunDetailsBytes);
329
+ }
330
+ /** Encode one immutable version-2 detail sidecar. */
331
+ export function encodeWorkflowRunDetails(value, limits) {
332
+ assertLimits(limits);
333
+ validateSnapshot(value, limits, false);
334
+ const normalized = normalizePayload(value.payload, limits);
335
+ const payload = fitPayload(normalized, candidate => canonicalBytes({ ...value, payload: candidate }).byteLength <= limits.maxRunDetailsBytes);
336
+ const compact = { ...value, payload };
337
+ validateSnapshot(compact, limits, true);
338
+ const bytes = canonicalBytes(compact);
339
+ if (bytes.byteLength > limits.maxRunDetailsBytes)
340
+ overLimit('workflow detail snapshot exceeds the run limit');
341
+ return bytes;
342
+ }
343
+ /** Decode one immutable version-2 detail sidecar. */
344
+ export function decodeWorkflowRunDetails(input, file, limits) {
345
+ assertLimits(limits);
346
+ const bytes = typeof input === 'string' ? encoder.encode(input) : input;
347
+ if (bytes.byteLength > limits.maxRunDetailsBytes)
348
+ overLimit(`${file} exceeds the ${limits.maxRunDetailsBytes}-byte run detail limit`);
349
+ let value;
350
+ try {
351
+ value = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
352
+ }
353
+ catch (error) {
354
+ throw new BoundedFileError(`${file} is malformed UTF-8 or JSON`, 'WORKFLOW_STORAGE_CORRUPT', { cause: error });
355
+ }
356
+ validateSnapshot(value, limits, true);
357
+ return value;
358
+ }
359
+ //# sourceMappingURL=details-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"details-codec.js","sourceRoot":"","sources":["../../../../src/supervisor/storage/details-codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type ResolvedWorkflowPackageConfig } from '../../config.js';
2
+ import { type WorkflowStorageAnchor, type WorkflowStorageLease } from './lease.js';
3
+ import { type WorkflowStorageLayout } from './private-root.js';
4
+ import { FileWorkflowRunStore } from './manifest-store.js';
5
+ import type { RecoveredRun } from './manifest-types.js';
6
+ export * from './lease.js';
7
+ export * from './private-root.js';
8
+ export * from './bounded-file.js';
9
+ export * from './manifest-types.js';
10
+ export * from './manifest-codec.js';
11
+ export * from './details-codec.js';
12
+ export * from './manifest-store.js';
13
+ export * from './run-files.js';
14
+ export * from './recovery.js';
15
+ export interface WorkflowStorage {
16
+ readonly anchor: WorkflowStorageAnchor;
17
+ readonly lease: WorkflowStorageLease;
18
+ readonly layout: WorkflowStorageLayout;
19
+ readonly store: FileWorkflowRunStore;
20
+ /** Interrupted inspection rows from the first eager recovery pass. */
21
+ readonly recovered: readonly RecoveredRun[];
22
+ dispose(): Promise<void>;
23
+ }
24
+ /** Bootstrap the leased storage root and eagerly recover retained state. */
25
+ export declare function openWorkflowStorage(config: ResolvedWorkflowPackageConfig, hostFileSystem?: unknown): Promise<WorkflowStorage>;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/supervisor/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,6BAA6B,EAAE,MAAM,iBAAiB,CAAA;AAClG,OAAO,EAA0D,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC1I,OAAO,EAA0F,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACtJ,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,cAAc,YAAY,CAAC;AAAC,cAAc,mBAAmB,CAAC;AAAC,cAAc,mBAAmB,CAAC;AAAC,cAAc,qBAAqB,CAAC;AAAC,cAAc,qBAAqB,CAAC;AAAC,cAAc,oBAAoB,CAAC;AAAC,cAAc,qBAAqB,CAAC;AAAC,cAAc,gBAAgB,CAAC;AAAC,cAAc,eAAe,CAAA;AAClT,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAA;IACtC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAA;IACpC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAA;IACtC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAA;IACpC,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAA;IAC3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AACD,4EAA4E;AAC5E,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,6BAA6B,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CA+DnI"}