@a5c-ai/genty-runtime 5.1.1-staging.00ceebd28cf2

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 (221) hide show
  1. package/README.md +69 -0
  2. package/dist/apiResult.d.ts +19 -0
  3. package/dist/apiResult.d.ts.map +1 -0
  4. package/dist/apiResult.js +16 -0
  5. package/dist/background/state.d.ts +20 -0
  6. package/dist/background/state.d.ts.map +1 -0
  7. package/dist/background/state.js +52 -0
  8. package/dist/backgroundProcessRegistry.d.ts +124 -0
  9. package/dist/backgroundProcessRegistry.d.ts.map +1 -0
  10. package/dist/backgroundProcessRegistry.js +427 -0
  11. package/dist/cost/claudeCodeParser.d.ts +81 -0
  12. package/dist/cost/claudeCodeParser.d.ts.map +1 -0
  13. package/dist/cost/claudeCodeParser.js +232 -0
  14. package/dist/cost/collector.d.ts +42 -0
  15. package/dist/cost/collector.d.ts.map +1 -0
  16. package/dist/cost/collector.js +105 -0
  17. package/dist/cost/effectCost.d.ts +23 -0
  18. package/dist/cost/effectCost.d.ts.map +1 -0
  19. package/dist/cost/effectCost.js +26 -0
  20. package/dist/cost/index.d.ts +19 -0
  21. package/dist/cost/index.d.ts.map +1 -0
  22. package/dist/cost/index.js +39 -0
  23. package/dist/cost/journal.d.ts +40 -0
  24. package/dist/cost/journal.d.ts.map +1 -0
  25. package/dist/cost/journal.js +137 -0
  26. package/dist/cost/types.d.ts +164 -0
  27. package/dist/cost/types.d.ts.map +1 -0
  28. package/dist/cost/types.js +228 -0
  29. package/dist/daemon/automationExecutor.d.ts +16 -0
  30. package/dist/daemon/automationExecutor.d.ts.map +1 -0
  31. package/dist/daemon/automationExecutor.js +222 -0
  32. package/dist/daemon/config.d.ts +8 -0
  33. package/dist/daemon/config.d.ts.map +1 -0
  34. package/dist/daemon/config.js +245 -0
  35. package/dist/daemon/daemonLog.d.ts +30 -0
  36. package/dist/daemon/daemonLog.d.ts.map +1 -0
  37. package/dist/daemon/daemonLog.js +140 -0
  38. package/dist/daemon/durableQueue.d.ts +41 -0
  39. package/dist/daemon/durableQueue.d.ts.map +1 -0
  40. package/dist/daemon/durableQueue.js +183 -0
  41. package/dist/daemon/fileWatcher.d.ts +9 -0
  42. package/dist/daemon/fileWatcher.d.ts.map +1 -0
  43. package/dist/daemon/fileWatcher.js +144 -0
  44. package/dist/daemon/index.d.ts +15 -0
  45. package/dist/daemon/index.d.ts.map +1 -0
  46. package/dist/daemon/index.js +25 -0
  47. package/dist/daemon/lifecycle.d.ts +13 -0
  48. package/dist/daemon/lifecycle.d.ts.map +1 -0
  49. package/dist/daemon/lifecycle.js +320 -0
  50. package/dist/daemon/loop.d.ts +27 -0
  51. package/dist/daemon/loop.d.ts.map +1 -0
  52. package/dist/daemon/loop.js +387 -0
  53. package/dist/daemon/timerScheduler.d.ts +13 -0
  54. package/dist/daemon/timerScheduler.d.ts.map +1 -0
  55. package/dist/daemon/timerScheduler.js +212 -0
  56. package/dist/daemon/types.d.ts +122 -0
  57. package/dist/daemon/types.d.ts.map +1 -0
  58. package/dist/daemon/types.js +25 -0
  59. package/dist/daemon/webhookListener.d.ts +6 -0
  60. package/dist/daemon/webhookListener.d.ts.map +1 -0
  61. package/dist/daemon/webhookListener.js +132 -0
  62. package/dist/execution/index.d.ts +10 -0
  63. package/dist/execution/index.d.ts.map +1 -0
  64. package/dist/execution/index.js +20 -0
  65. package/dist/execution/modes/docker.d.ts +26 -0
  66. package/dist/execution/modes/docker.d.ts.map +1 -0
  67. package/dist/execution/modes/docker.js +183 -0
  68. package/dist/execution/modes/index.d.ts +10 -0
  69. package/dist/execution/modes/index.d.ts.map +1 -0
  70. package/dist/execution/modes/index.js +14 -0
  71. package/dist/execution/modes/kubernetes.d.ts +46 -0
  72. package/dist/execution/modes/kubernetes.d.ts.map +1 -0
  73. package/dist/execution/modes/kubernetes.js +334 -0
  74. package/dist/execution/modes/local.d.ts +23 -0
  75. package/dist/execution/modes/local.d.ts.map +1 -0
  76. package/dist/execution/modes/local.js +117 -0
  77. package/dist/execution/modes/ssh.d.ts +23 -0
  78. package/dist/execution/modes/ssh.d.ts.map +1 -0
  79. package/dist/execution/modes/ssh.js +144 -0
  80. package/dist/execution/policy.d.ts +15 -0
  81. package/dist/execution/policy.d.ts.map +1 -0
  82. package/dist/execution/policy.js +121 -0
  83. package/dist/execution/provider.d.ts +32 -0
  84. package/dist/execution/provider.d.ts.map +1 -0
  85. package/dist/execution/provider.js +90 -0
  86. package/dist/execution/types.d.ts +189 -0
  87. package/dist/execution/types.d.ts.map +1 -0
  88. package/dist/execution/types.js +9 -0
  89. package/dist/index.d.ts +12 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +44 -0
  92. package/dist/observability/diagnostics.d.ts +25 -0
  93. package/dist/observability/diagnostics.d.ts.map +1 -0
  94. package/dist/observability/diagnostics.js +98 -0
  95. package/dist/observability/health.d.ts +19 -0
  96. package/dist/observability/health.d.ts.map +1 -0
  97. package/dist/observability/health.js +145 -0
  98. package/dist/observability/index.d.ts +7 -0
  99. package/dist/observability/index.d.ts.map +1 -0
  100. package/dist/observability/index.js +25 -0
  101. package/dist/observability/runStatus.d.ts +44 -0
  102. package/dist/observability/runStatus.d.ts.map +1 -0
  103. package/dist/observability/runStatus.js +169 -0
  104. package/dist/observability/timeline.d.ts +11 -0
  105. package/dist/observability/timeline.d.ts.map +1 -0
  106. package/dist/observability/timeline.js +176 -0
  107. package/dist/observability/types.d.ts +65 -0
  108. package/dist/observability/types.d.ts.map +1 -0
  109. package/dist/observability/types.js +8 -0
  110. package/dist/observability/webhooks.d.ts +68 -0
  111. package/dist/observability/webhooks.d.ts.map +1 -0
  112. package/dist/observability/webhooks.js +132 -0
  113. package/dist/resources/budget-tracker.d.ts +56 -0
  114. package/dist/resources/budget-tracker.d.ts.map +1 -0
  115. package/dist/resources/budget-tracker.js +131 -0
  116. package/dist/resources/concurrency-guard.d.ts +55 -0
  117. package/dist/resources/concurrency-guard.d.ts.map +1 -0
  118. package/dist/resources/concurrency-guard.js +132 -0
  119. package/dist/resources/index.d.ts +12 -0
  120. package/dist/resources/index.d.ts.map +1 -0
  121. package/dist/resources/index.js +20 -0
  122. package/dist/resources/manager.d.ts +52 -0
  123. package/dist/resources/manager.d.ts.map +1 -0
  124. package/dist/resources/manager.js +150 -0
  125. package/dist/resources/timeout-cascade.d.ts +56 -0
  126. package/dist/resources/timeout-cascade.d.ts.map +1 -0
  127. package/dist/resources/timeout-cascade.js +145 -0
  128. package/dist/resources/types.d.ts +130 -0
  129. package/dist/resources/types.d.ts.map +1 -0
  130. package/dist/resources/types.js +9 -0
  131. package/dist/rpc/index.d.ts +5 -0
  132. package/dist/rpc/index.d.ts.map +1 -0
  133. package/dist/rpc/index.js +7 -0
  134. package/dist/rpc/server.d.ts +13 -0
  135. package/dist/rpc/server.d.ts.map +1 -0
  136. package/dist/rpc/server.js +64 -0
  137. package/dist/rpc/server.test.d.ts +2 -0
  138. package/dist/rpc/server.test.d.ts.map +1 -0
  139. package/dist/rpc/server.test.js +35 -0
  140. package/dist/rpc/types.d.ts +23 -0
  141. package/dist/rpc/types.d.ts.map +1 -0
  142. package/dist/rpc/types.js +20 -0
  143. package/dist/session/context.d.ts +22 -0
  144. package/dist/session/context.d.ts.map +1 -0
  145. package/dist/session/context.js +113 -0
  146. package/dist/session/continuityState.d.ts +39 -0
  147. package/dist/session/continuityState.d.ts.map +1 -0
  148. package/dist/session/continuityState.js +164 -0
  149. package/dist/session/cost.d.ts +63 -0
  150. package/dist/session/cost.d.ts.map +1 -0
  151. package/dist/session/cost.js +194 -0
  152. package/dist/session/discovery.d.ts +22 -0
  153. package/dist/session/discovery.d.ts.map +1 -0
  154. package/dist/session/discovery.js +35 -0
  155. package/dist/session/export.d.ts +4 -0
  156. package/dist/session/export.d.ts.map +1 -0
  157. package/dist/session/export.js +56 -0
  158. package/dist/session/export.test.d.ts +2 -0
  159. package/dist/session/export.test.d.ts.map +1 -0
  160. package/dist/session/export.test.js +42 -0
  161. package/dist/session/history.d.ts +30 -0
  162. package/dist/session/history.d.ts.map +1 -0
  163. package/dist/session/history.js +143 -0
  164. package/dist/session/index.d.ts +20 -0
  165. package/dist/session/index.d.ts.map +1 -0
  166. package/dist/session/index.js +78 -0
  167. package/dist/session/memoryExtraction.d.ts +65 -0
  168. package/dist/session/memoryExtraction.d.ts.map +1 -0
  169. package/dist/session/memoryExtraction.js +201 -0
  170. package/dist/session/parse.d.ts +45 -0
  171. package/dist/session/parse.d.ts.map +1 -0
  172. package/dist/session/parse.js +170 -0
  173. package/dist/session/persistence.d.ts +46 -0
  174. package/dist/session/persistence.d.ts.map +1 -0
  175. package/dist/session/persistence.js +180 -0
  176. package/dist/session/rewind.d.ts +45 -0
  177. package/dist/session/rewind.d.ts.map +1 -0
  178. package/dist/session/rewind.js +68 -0
  179. package/dist/session/rewind.test.d.ts +2 -0
  180. package/dist/session/rewind.test.d.ts.map +1 -0
  181. package/dist/session/rewind.test.js +96 -0
  182. package/dist/session/tree.d.ts +29 -0
  183. package/dist/session/tree.d.ts.map +1 -0
  184. package/dist/session/tree.js +115 -0
  185. package/dist/session/tree.test.d.ts +2 -0
  186. package/dist/session/tree.test.d.ts.map +1 -0
  187. package/dist/session/tree.test.js +75 -0
  188. package/dist/session/types.d.ts +267 -0
  189. package/dist/session/types.d.ts.map +1 -0
  190. package/dist/session/types.js +45 -0
  191. package/dist/session/write.d.ts +61 -0
  192. package/dist/session/write.d.ts.map +1 -0
  193. package/dist/session/write.js +213 -0
  194. package/dist/shellInvocation.d.ts +6 -0
  195. package/dist/shellInvocation.d.ts.map +1 -0
  196. package/dist/shellInvocation.js +8 -0
  197. package/dist/shellInvocation.test.d.ts +2 -0
  198. package/dist/shellInvocation.test.d.ts.map +1 -0
  199. package/dist/shellInvocation.test.js +18 -0
  200. package/dist/telemetry/audit-log.d.ts +56 -0
  201. package/dist/telemetry/audit-log.d.ts.map +1 -0
  202. package/dist/telemetry/audit-log.js +59 -0
  203. package/dist/telemetry/exporters.d.ts +35 -0
  204. package/dist/telemetry/exporters.d.ts.map +1 -0
  205. package/dist/telemetry/exporters.js +141 -0
  206. package/dist/telemetry/index.d.ts +12 -0
  207. package/dist/telemetry/index.d.ts.map +1 -0
  208. package/dist/telemetry/index.js +25 -0
  209. package/dist/telemetry/provider.d.ts +57 -0
  210. package/dist/telemetry/provider.d.ts.map +1 -0
  211. package/dist/telemetry/provider.js +261 -0
  212. package/dist/telemetry/span-tree.d.ts +46 -0
  213. package/dist/telemetry/span-tree.d.ts.map +1 -0
  214. package/dist/telemetry/span-tree.js +93 -0
  215. package/dist/telemetry/traceContext.d.ts +10 -0
  216. package/dist/telemetry/traceContext.d.ts.map +1 -0
  217. package/dist/telemetry/traceContext.js +43 -0
  218. package/dist/telemetry/types.d.ts +109 -0
  219. package/dist/telemetry/types.d.ts.map +1 -0
  220. package/dist/telemetry/types.js +21 -0
  221. package/package.json +137 -0
@@ -0,0 +1,122 @@
1
+ /**
2
+ * GAP-REMOTE-001: Daemon Mode — Type definitions.
3
+ */
4
+ import type { AutomationRule, TimerAutomationRule, WebhookAutomationRule } from "@a5c-ai/comm-adapter";
5
+ export interface DaemonConfig {
6
+ workspace: string;
7
+ triggers: TriggerConfig[];
8
+ maxConcurrentRuns?: number;
9
+ triggerAdmission?: TriggerAdmissionConfig;
10
+ }
11
+ export interface TriggerRateLimitConfig {
12
+ maxTriggers: number;
13
+ windowMs: number;
14
+ }
15
+ export interface TriggerAdmissionConfig {
16
+ maxPendingRuns?: number;
17
+ rateLimit?: TriggerRateLimitConfig;
18
+ dedupeWindowMs?: number;
19
+ }
20
+ export interface FileTriggerConfig {
21
+ type: "file";
22
+ pattern: string;
23
+ processId: string;
24
+ entrypoint: string;
25
+ debounceMs?: number;
26
+ }
27
+ export type TriggerConfig = FileTriggerConfig | AutomationRule;
28
+ export interface FileTriggerEvent {
29
+ type: "file";
30
+ processId: string;
31
+ entrypoint: string;
32
+ inputs?: Record<string, unknown>;
33
+ }
34
+ export interface AutomationTriggerEvent {
35
+ type: "automation";
36
+ rule: AutomationRule;
37
+ inputs?: Record<string, unknown>;
38
+ }
39
+ export type TriggerEvent = FileTriggerEvent | AutomationTriggerEvent;
40
+ export declare function isFileTriggerConfig(trigger: TriggerConfig): trigger is FileTriggerConfig;
41
+ export declare function isTimerAutomationRule(trigger: TriggerConfig): trigger is TimerAutomationRule;
42
+ export declare function isWebhookAutomationRule(trigger: TriggerConfig): trigger is WebhookAutomationRule;
43
+ export declare function isFileTriggerEvent(event: TriggerEvent): event is FileTriggerEvent;
44
+ export declare function isAutomationTriggerEvent(event: TriggerEvent): event is AutomationTriggerEvent;
45
+ export interface LegacyTriggerConfig {
46
+ type: "file" | "webhook" | "timer";
47
+ processId: string;
48
+ entrypoint: string;
49
+ pattern?: string;
50
+ port?: number;
51
+ cron?: string;
52
+ debounceMs?: number;
53
+ }
54
+ export interface DaemonStartOptions {
55
+ daemonDir: string;
56
+ workspace: string;
57
+ foreground?: boolean;
58
+ config?: DaemonConfig;
59
+ }
60
+ export interface DaemonStartOutput {
61
+ pid: number;
62
+ daemonDir: string;
63
+ startedAt: string;
64
+ }
65
+ export interface DaemonStopOptions {
66
+ daemonDir: string;
67
+ gracePeriodMs?: number;
68
+ }
69
+ export interface DaemonStopOutput {
70
+ pid: number;
71
+ stoppedAt: string;
72
+ }
73
+ export interface DaemonStatusOptions {
74
+ daemonDir: string;
75
+ }
76
+ export interface DaemonStatusOutput {
77
+ running: boolean;
78
+ pid?: number;
79
+ uptime?: number;
80
+ startedAt?: string;
81
+ activeTriggers?: number;
82
+ pendingRuns?: number;
83
+ deadLetterRuns?: number;
84
+ }
85
+ export interface DaemonWatchdogOptions {
86
+ daemonDir: string;
87
+ pollIntervalMs?: number;
88
+ maxRestarts?: number;
89
+ signal?: AbortSignal;
90
+ }
91
+ export interface DaemonWatchdogOutput {
92
+ restarts: number;
93
+ stoppedAt: string;
94
+ }
95
+ export interface FileWatcherHandle {
96
+ dispose(): void;
97
+ }
98
+ export interface WebhookListenerOptions {
99
+ rule: WebhookAutomationRule;
100
+ onTrigger: TriggerCallback;
101
+ }
102
+ export interface WebhookListenerHandle {
103
+ close(): Promise<void>;
104
+ port: number;
105
+ }
106
+ export type TriggerAdmissionStatus = "accepted" | "deferred" | "rejected" | "duplicate";
107
+ export interface TriggerAdmissionResult {
108
+ status: TriggerAdmissionStatus;
109
+ reason?: string;
110
+ retryAfterMs?: number;
111
+ queueDepth?: number;
112
+ fingerprint?: string;
113
+ }
114
+ export type TriggerCallback = (trigger: TriggerEvent) => void | TriggerAdmissionResult | Promise<void | TriggerAdmissionResult>;
115
+ export interface DaemonMetadata {
116
+ workspace: string;
117
+ startedAt: string;
118
+ triggers: TriggerConfig[];
119
+ maxConcurrentRuns: number;
120
+ pid: number;
121
+ }
122
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/daemon/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /**
3
+ * GAP-REMOTE-001: Daemon Mode — Type definitions.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isFileTriggerConfig = isFileTriggerConfig;
7
+ exports.isTimerAutomationRule = isTimerAutomationRule;
8
+ exports.isWebhookAutomationRule = isWebhookAutomationRule;
9
+ exports.isFileTriggerEvent = isFileTriggerEvent;
10
+ exports.isAutomationTriggerEvent = isAutomationTriggerEvent;
11
+ function isFileTriggerConfig(trigger) {
12
+ return "type" in trigger && trigger.type === "file";
13
+ }
14
+ function isTimerAutomationRule(trigger) {
15
+ return "trigger" in trigger && trigger.trigger.type === "timer";
16
+ }
17
+ function isWebhookAutomationRule(trigger) {
18
+ return "trigger" in trigger && trigger.trigger.type === "webhook";
19
+ }
20
+ function isFileTriggerEvent(event) {
21
+ return event.type !== "automation";
22
+ }
23
+ function isAutomationTriggerEvent(event) {
24
+ return event.type === "automation";
25
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * GAP-REMOTE-001: Webhook Listener — HTTP trigger endpoint.
3
+ */
4
+ import type { WebhookListenerOptions, WebhookListenerHandle } from "./types";
5
+ export declare function createWebhookListener(options: WebhookListenerOptions): Promise<WebhookListenerHandle>;
6
+ //# sourceMappingURL=webhookListener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookListener.d.ts","sourceRoot":"","sources":["../../src/daemon/webhookListener.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAA0B,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAIrG,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAiFhC"}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ /**
3
+ * GAP-REMOTE-001: Webhook Listener — HTTP trigger endpoint.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createWebhookListener = createWebhookListener;
40
+ const http = __importStar(require("node:http"));
41
+ const MAX_BODY_BYTES = 1024 * 1024; // 1 MiB
42
+ async function createWebhookListener(options) {
43
+ const { rule, onTrigger } = options;
44
+ const port = rule.trigger.port;
45
+ const path = rule.trigger.path ?? "/trigger";
46
+ const method = rule.trigger.method ?? "POST";
47
+ const authToken = rule.trigger.auth?.type === "bearer" ? rule.trigger.auth.token : undefined;
48
+ const server = http.createServer((req, res) => {
49
+ if (req.method !== method || req.url !== path) {
50
+ res.writeHead(404, { "Content-Type": "application/json" });
51
+ res.end(JSON.stringify({ error: "Not found" }));
52
+ return;
53
+ }
54
+ // Auth check
55
+ if (authToken) {
56
+ const authHeader = req.headers.authorization;
57
+ if (!authHeader || authHeader !== `Bearer ${authToken}`) {
58
+ res.writeHead(401, { "Content-Type": "application/json" });
59
+ res.end(JSON.stringify({ error: "Unauthorized" }));
60
+ return;
61
+ }
62
+ }
63
+ let body = "";
64
+ let bodySize = 0;
65
+ req.on("data", (chunk) => {
66
+ bodySize += chunk.length;
67
+ if (bodySize > MAX_BODY_BYTES) {
68
+ res.writeHead(413, { "Content-Type": "application/json" });
69
+ res.end(JSON.stringify({ error: "Payload too large" }));
70
+ req.destroy();
71
+ return;
72
+ }
73
+ body += chunk.toString();
74
+ });
75
+ req.on("end", () => {
76
+ try {
77
+ const payload = JSON.parse(body);
78
+ const inputs = typeof payload.inputs === "object" && payload.inputs !== null && !Array.isArray(payload.inputs)
79
+ ? payload.inputs
80
+ : undefined;
81
+ void Promise.resolve(onTrigger({
82
+ type: "automation",
83
+ rule,
84
+ inputs,
85
+ })).then((admission) => {
86
+ const result = normalizeAdmissionResult(admission);
87
+ res.writeHead(statusForAdmission(result), {
88
+ "Content-Type": "application/json",
89
+ ...(result.retryAfterMs ? { "Retry-After": String(Math.ceil(result.retryAfterMs / 1000)) } : {}),
90
+ });
91
+ res.end(JSON.stringify({ ok: result.status === "accepted" || result.status === "deferred", ...result }));
92
+ }, () => {
93
+ res.writeHead(500, { "Content-Type": "application/json" });
94
+ res.end(JSON.stringify({ error: "Trigger callback failed" }));
95
+ });
96
+ }
97
+ catch {
98
+ res.writeHead(400, { "Content-Type": "application/json" });
99
+ res.end(JSON.stringify({ error: "Invalid JSON body" }));
100
+ }
101
+ });
102
+ });
103
+ return new Promise((resolve, reject) => {
104
+ server.on("error", reject);
105
+ server.listen(port, () => {
106
+ const addr = server.address();
107
+ const actualPort = typeof addr === "object" && addr ? addr.port : port;
108
+ resolve({
109
+ port: actualPort,
110
+ async close() {
111
+ return new Promise((res, rej) => {
112
+ server.close((err) => (err ? rej(err) : res()));
113
+ });
114
+ },
115
+ });
116
+ });
117
+ });
118
+ }
119
+ function normalizeAdmissionResult(admission) {
120
+ return admission ?? { status: "accepted" };
121
+ }
122
+ function statusForAdmission(admission) {
123
+ if (admission.status === "accepted")
124
+ return 200;
125
+ if (admission.status === "deferred" || admission.status === "duplicate")
126
+ return 202;
127
+ if (admission.reason === "rate-limit")
128
+ return 429;
129
+ if (admission.reason === "queue-full")
130
+ return 503;
131
+ return 409;
132
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Execution module — execution mode abstraction interfaces and implementations.
3
+ */
4
+ export type { ExecutionMode, LocalExecutionConfig, DockerExecutionConfig, SshExecutionConfig, KubernetesExecutionConfig, ExecutionConfig, ExecutionHandle, ExecutionProvider, ExecutionPolicy, ExecutionEnvironmentPolicy, ExecutionFilesystemPolicy, ExecutionNetworkPolicy, ExecutionResourcePolicy, ExecutionSandboxPolicy, ExecutionMount, DockerPolicy, SshHostKeyPolicy, KubernetesPolicy, NormalizedResourceLimits, } from "./types";
5
+ export { resolveExecutionEnvironment, validateFilesystemPolicy, validateFilesystemMounts, validateLocalExecutionPolicy, normalizeResourceLimits, admitExecutionPolicy, shouldInheritParentEnv, } from "./policy";
6
+ export type { ResourceAdmission } from "./policy";
7
+ export { LocalExecutor, DockerExecutor, SshExecutor, KubernetesExecutor, } from "./modes";
8
+ export type { Executor, KubernetesExecutionHandle } from "./modes";
9
+ export { ExecutionProviderImpl } from "./provider";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/execution/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,GACnB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAGnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExecutionProviderImpl = exports.KubernetesExecutor = exports.SshExecutor = exports.DockerExecutor = exports.LocalExecutor = exports.shouldInheritParentEnv = exports.admitExecutionPolicy = exports.normalizeResourceLimits = exports.validateLocalExecutionPolicy = exports.validateFilesystemMounts = exports.validateFilesystemPolicy = exports.resolveExecutionEnvironment = void 0;
4
+ var policy_1 = require("./policy");
5
+ Object.defineProperty(exports, "resolveExecutionEnvironment", { enumerable: true, get: function () { return policy_1.resolveExecutionEnvironment; } });
6
+ Object.defineProperty(exports, "validateFilesystemPolicy", { enumerable: true, get: function () { return policy_1.validateFilesystemPolicy; } });
7
+ Object.defineProperty(exports, "validateFilesystemMounts", { enumerable: true, get: function () { return policy_1.validateFilesystemMounts; } });
8
+ Object.defineProperty(exports, "validateLocalExecutionPolicy", { enumerable: true, get: function () { return policy_1.validateLocalExecutionPolicy; } });
9
+ Object.defineProperty(exports, "normalizeResourceLimits", { enumerable: true, get: function () { return policy_1.normalizeResourceLimits; } });
10
+ Object.defineProperty(exports, "admitExecutionPolicy", { enumerable: true, get: function () { return policy_1.admitExecutionPolicy; } });
11
+ Object.defineProperty(exports, "shouldInheritParentEnv", { enumerable: true, get: function () { return policy_1.shouldInheritParentEnv; } });
12
+ // Mode executors
13
+ var modes_1 = require("./modes");
14
+ Object.defineProperty(exports, "LocalExecutor", { enumerable: true, get: function () { return modes_1.LocalExecutor; } });
15
+ Object.defineProperty(exports, "DockerExecutor", { enumerable: true, get: function () { return modes_1.DockerExecutor; } });
16
+ Object.defineProperty(exports, "SshExecutor", { enumerable: true, get: function () { return modes_1.SshExecutor; } });
17
+ Object.defineProperty(exports, "KubernetesExecutor", { enumerable: true, get: function () { return modes_1.KubernetesExecutor; } });
18
+ // Provider
19
+ var provider_1 = require("./provider");
20
+ Object.defineProperty(exports, "ExecutionProviderImpl", { enumerable: true, get: function () { return provider_1.ExecutionProviderImpl; } });
@@ -0,0 +1,26 @@
1
+ /**
2
+ * DockerExecutor — constructs `docker run` commands and spawns them
3
+ * via child_process.
4
+ *
5
+ * This is a structural stub: it correctly assembles the Docker CLI
6
+ * invocation from DockerExecutionConfig, but the host must have Docker
7
+ * installed and the daemon running for it to work at runtime.
8
+ */
9
+ import type { ExecutionHandle, DockerExecutionConfig } from "../types";
10
+ import type { Executor } from "./local";
11
+ export declare class DockerExecutor implements Executor<DockerExecutionConfig> {
12
+ private readonly processes;
13
+ private readonly preflight;
14
+ constructor(options?: {
15
+ preflight?: (config: DockerExecutionConfig) => Promise<void>;
16
+ });
17
+ spawn(command: string, args: string[], config: DockerExecutionConfig): Promise<ExecutionHandle>;
18
+ attach(id: string): Promise<ExecutionHandle | undefined>;
19
+ list(): ExecutionHandle[];
20
+ destroy(id: string): Promise<void>;
21
+ /** Build the full `docker run` argument list. */
22
+ _buildDockerArgs(id: string, command: string, args: string[], config: DockerExecutionConfig): string[];
23
+ private _dockerNetwork;
24
+ private _toPublicHandle;
25
+ }
26
+ //# sourceMappingURL=docker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/execution/modes/docker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,UAAU,CAAC;AAKlB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAsBxC,qBAAa,cAAe,YAAW,QAAQ,CAAC,qBAAqB,CAAC;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmD;gBAEjE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE;IAIhF,KAAK,CACT,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,eAAe,CAAC;IA+BrB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAM9D,IAAI,IAAI,eAAe,EAAE;IAInB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BxC,iDAAiD;IACjD,gBAAgB,CACd,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,qBAAqB,GAC5B,MAAM,EAAE;IAyEX,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,eAAe;CAyBxB"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ /**
3
+ * DockerExecutor — constructs `docker run` commands and spawns them
4
+ * via child_process.
5
+ *
6
+ * This is a structural stub: it correctly assembles the Docker CLI
7
+ * invocation from DockerExecutionConfig, but the host must have Docker
8
+ * installed and the daemon running for it to work at runtime.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.DockerExecutor = void 0;
12
+ const node_child_process_1 = require("node:child_process");
13
+ const node_crypto_1 = require("node:crypto");
14
+ const policy_1 = require("../policy");
15
+ // ---------------------------------------------------------------------------
16
+ // DockerExecutor
17
+ // ---------------------------------------------------------------------------
18
+ class DockerExecutor {
19
+ processes = new Map();
20
+ preflight;
21
+ constructor(options) {
22
+ this.preflight = options?.preflight ?? (async () => { });
23
+ }
24
+ async spawn(command, args, config) {
25
+ const id = (0, node_crypto_1.randomUUID)();
26
+ if (config.policy?.docker?.skipPreflight !== true) {
27
+ await this.preflight(config);
28
+ }
29
+ const dockerArgs = this._buildDockerArgs(id, command, args, config);
30
+ const child = (0, node_child_process_1.spawn)("docker", dockerArgs, {
31
+ stdio: ["pipe", "pipe", "pipe"],
32
+ });
33
+ const handle = {
34
+ id,
35
+ mode: "docker",
36
+ status: "running",
37
+ };
38
+ const entry = { handle, process: child, config };
39
+ this.processes.set(id, entry);
40
+ child.on("exit", (code) => {
41
+ handle.status = code === 0 ? "stopped" : "failed";
42
+ });
43
+ child.on("error", () => {
44
+ handle.status = "failed";
45
+ });
46
+ return this._toPublicHandle(entry);
47
+ }
48
+ async attach(id) {
49
+ const entry = this.processes.get(id);
50
+ if (!entry)
51
+ return undefined;
52
+ return this._toPublicHandle(entry);
53
+ }
54
+ list() {
55
+ return [...this.processes.values()].map((e) => this._toPublicHandle(e));
56
+ }
57
+ async destroy(id) {
58
+ const entry = this.processes.get(id);
59
+ if (!entry)
60
+ return;
61
+ // Attempt `docker stop` on the container (uses the handle id as name).
62
+ const child = entry.process;
63
+ if (!child.killed && child.exitCode === null) {
64
+ child.kill("SIGTERM");
65
+ await new Promise((resolve) => {
66
+ const timeout = setTimeout(() => {
67
+ if (!child.killed && child.exitCode === null) {
68
+ child.kill("SIGKILL");
69
+ }
70
+ resolve();
71
+ }, 5_000);
72
+ child.on("exit", () => {
73
+ clearTimeout(timeout);
74
+ resolve();
75
+ });
76
+ });
77
+ }
78
+ entry.handle.status = "stopped";
79
+ this.processes.delete(id);
80
+ }
81
+ // ---------- Helpers -------------------------------------------------------
82
+ /** Build the full `docker run` argument list. */
83
+ _buildDockerArgs(id, command, args, config) {
84
+ const dockerArgs = ["run", "--rm", "--name", `babysitter-${id.slice(0, 8)}`];
85
+ const policy = config.policy;
86
+ (0, policy_1.validateFilesystemMounts)(policy);
87
+ const dockerPolicy = policy?.docker;
88
+ const insecureDocker = dockerPolicy?.insecureAllowPrivilegedOptions === true;
89
+ const readOnlyRoot = dockerPolicy?.readOnlyRootFilesystem ?? policy?.filesystem?.readOnlyRootFilesystem ?? true;
90
+ if (readOnlyRoot) {
91
+ dockerArgs.push("--read-only");
92
+ }
93
+ else if (!insecureDocker) {
94
+ throw new Error("Writable Docker root filesystem requires insecureAllowPrivilegedOptions");
95
+ }
96
+ for (const cap of dockerPolicy?.capDrop ?? ["ALL"]) {
97
+ dockerArgs.push("--cap-drop", cap);
98
+ }
99
+ for (const opt of dockerPolicy?.securityOpt ?? ["no-new-privileges"]) {
100
+ dockerArgs.push("--security-opt", opt);
101
+ }
102
+ dockerArgs.push("--user", dockerPolicy?.user ?? "65532:65532");
103
+ // Volume mounts.
104
+ if (config.volumes) {
105
+ for (const vol of config.volumes) {
106
+ dockerArgs.push("-v", vol);
107
+ }
108
+ }
109
+ for (const mount of policy?.filesystem?.mounts ?? []) {
110
+ const suffix = mount.readOnly ?? true ? ":ro" : "";
111
+ dockerArgs.push("-v", `${mount.hostPath}:${mount.containerPath}${suffix}`);
112
+ }
113
+ // Network.
114
+ const network = this._dockerNetwork(config);
115
+ if (network === "host" && !insecureDocker) {
116
+ throw new Error("Docker host network requires insecureAllowPrivilegedOptions");
117
+ }
118
+ dockerArgs.push("--network", network);
119
+ for (const dns of policy?.network?.dns ?? []) {
120
+ dockerArgs.push("--dns", dns);
121
+ }
122
+ if (policy?.resources?.cpuCount !== undefined) {
123
+ dockerArgs.push("--cpus", String(policy.resources.cpuCount));
124
+ }
125
+ if (policy?.resources?.memoryBytes !== undefined) {
126
+ dockerArgs.push("--memory", String(policy.resources.memoryBytes));
127
+ }
128
+ if (policy?.resources?.pidsLimit !== undefined) {
129
+ dockerArgs.push("--pids-limit", String(policy.resources.pidsLimit));
130
+ }
131
+ // Environment variables.
132
+ for (const [key, value] of Object.entries((0, policy_1.resolveExecutionEnvironment)(config.env, policy))) {
133
+ dockerArgs.push("-e", `${key}=${value}`);
134
+ }
135
+ // Image.
136
+ dockerArgs.push(config.image);
137
+ // Command and arguments.
138
+ dockerArgs.push(command, ...args);
139
+ return dockerArgs;
140
+ }
141
+ _dockerNetwork(config) {
142
+ if (config.network) {
143
+ return config.network;
144
+ }
145
+ const network = config.policy?.network;
146
+ if (!network) {
147
+ return "none";
148
+ }
149
+ if (network.mode === "custom") {
150
+ if (!network.name) {
151
+ throw new Error("Docker custom network policy requires a network name");
152
+ }
153
+ return network.name;
154
+ }
155
+ return network.mode ?? "none";
156
+ }
157
+ _toPublicHandle(entry) {
158
+ const self = this;
159
+ return {
160
+ get id() {
161
+ return entry.handle.id;
162
+ },
163
+ get mode() {
164
+ return entry.handle.mode;
165
+ },
166
+ get status() {
167
+ return entry.handle.status;
168
+ },
169
+ async attach() {
170
+ if (entry.process.stdout) {
171
+ entry.process.stdout.pipe(process.stdout, { end: false });
172
+ }
173
+ if (entry.process.stderr) {
174
+ entry.process.stderr.pipe(process.stderr, { end: false });
175
+ }
176
+ },
177
+ async destroy() {
178
+ await self.destroy(entry.handle.id);
179
+ },
180
+ };
181
+ }
182
+ }
183
+ exports.DockerExecutor = DockerExecutor;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Execution mode implementations — barrel export.
3
+ */
4
+ export { LocalExecutor } from "./local";
5
+ export type { Executor } from "./local";
6
+ export { DockerExecutor } from "./docker";
7
+ export { SshExecutor } from "./ssh";
8
+ export { KubernetesExecutor } from "./kubernetes";
9
+ export type { KubernetesExecutionHandle } from "./kubernetes";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/execution/modes/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /**
3
+ * Execution mode implementations — barrel export.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KubernetesExecutor = exports.SshExecutor = exports.DockerExecutor = exports.LocalExecutor = void 0;
7
+ var local_1 = require("./local");
8
+ Object.defineProperty(exports, "LocalExecutor", { enumerable: true, get: function () { return local_1.LocalExecutor; } });
9
+ var docker_1 = require("./docker");
10
+ Object.defineProperty(exports, "DockerExecutor", { enumerable: true, get: function () { return docker_1.DockerExecutor; } });
11
+ var ssh_1 = require("./ssh");
12
+ Object.defineProperty(exports, "SshExecutor", { enumerable: true, get: function () { return ssh_1.SshExecutor; } });
13
+ var kubernetes_1 = require("./kubernetes");
14
+ Object.defineProperty(exports, "KubernetesExecutor", { enumerable: true, get: function () { return kubernetes_1.KubernetesExecutor; } });
@@ -0,0 +1,46 @@
1
+ /**
2
+ * KubernetesExecutor — kubectl-backed Kubernetes Job execution.
3
+ */
4
+ import type { ExecutionHandle, KubernetesExecutionConfig } from "../types";
5
+ import type { Executor } from "./local";
6
+ export interface KubectlResult {
7
+ stdout: string;
8
+ stderr: string;
9
+ }
10
+ export type KubectlInvoker = (args: string[], options?: {
11
+ input?: string;
12
+ timeoutMs?: number;
13
+ }) => Promise<KubectlResult>;
14
+ export interface KubernetesExecutorOptions {
15
+ kubectl?: KubectlInvoker;
16
+ kubectlPath?: string;
17
+ pollIntervalMs?: number;
18
+ }
19
+ export interface KubernetesExecutionHandle extends ExecutionHandle {
20
+ readonly mode: "kubernetes";
21
+ readonly manifest: string;
22
+ readonly jobName: string;
23
+ readonly logs?: string;
24
+ }
25
+ export declare class KubernetesExecutor implements Executor<KubernetesExecutionConfig> {
26
+ private readonly entries;
27
+ private readonly kubectl;
28
+ private readonly pollIntervalMs;
29
+ constructor(options?: KubernetesExecutorOptions);
30
+ spawn(command: string, args: string[], config: KubernetesExecutionConfig): Promise<KubernetesExecutionHandle>;
31
+ attach(id: string): Promise<KubernetesExecutionHandle | undefined>;
32
+ list(): KubernetesExecutionHandle[];
33
+ destroy(id: string): Promise<void>;
34
+ waitForCompletion(id: string): Promise<KubernetesExecutionHandle>;
35
+ _buildManifest(jobName: string, command: string, args: string[], config: KubernetesExecutionConfig): string;
36
+ private streamLogs;
37
+ private readJobStatus;
38
+ private _resourcesYaml;
39
+ private _resourcesFromConfig;
40
+ private _envYaml;
41
+ private _volumeMountsYaml;
42
+ private _volumesYaml;
43
+ private _securityContextYaml;
44
+ private _toPublicHandle;
45
+ }
46
+ //# sourceMappingURL=kubernetes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubernetes.d.ts","sourceRoot":"","sources":["../../../src/execution/modes/kubernetes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,eAAe,EACf,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAKlB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,KAC7C,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAgBD,MAAM,WAAW,yBAA0B,SAAQ,eAAe;IAChE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,kBAAmB,YAAW,QAAQ,CAAC,yBAAyB,CAAC;IAC5E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,OAAO,CAAC,EAAE,yBAAyB;IAKzC,KAAK,CACT,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC;IAuB/B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAMxE,IAAI,IAAI,yBAAyB,EAAE;IAI7B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAmCvE,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,yBAAyB,GAChC,MAAM;YA+CK,UAAU;YAWV,aAAa;IAmB3B,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,eAAe;CA6BxB"}