cyrus-edge-worker 0.2.5 → 0.2.7

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 (59) hide show
  1. package/dist/AgentSessionManager.d.ts +42 -5
  2. package/dist/AgentSessionManager.d.ts.map +1 -1
  3. package/dist/AgentSessionManager.js +143 -16
  4. package/dist/AgentSessionManager.js.map +1 -1
  5. package/dist/AskUserQuestionHandler.d.ts +96 -0
  6. package/dist/AskUserQuestionHandler.d.ts.map +1 -0
  7. package/dist/AskUserQuestionHandler.js +203 -0
  8. package/dist/AskUserQuestionHandler.js.map +1 -0
  9. package/dist/EdgeWorker.d.ts +72 -11
  10. package/dist/EdgeWorker.d.ts.map +1 -1
  11. package/dist/EdgeWorker.js +469 -124
  12. package/dist/EdgeWorker.js.map +1 -1
  13. package/dist/GitService.d.ts +34 -0
  14. package/dist/GitService.d.ts.map +1 -0
  15. package/dist/GitService.js +347 -0
  16. package/dist/GitService.js.map +1 -0
  17. package/dist/SharedApplicationServer.d.ts +2 -1
  18. package/dist/SharedApplicationServer.d.ts.map +1 -1
  19. package/dist/SharedApplicationServer.js +5 -3
  20. package/dist/SharedApplicationServer.js.map +1 -1
  21. package/dist/index.d.ts +5 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +4 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/procedures/{ProcedureRouter.d.ts → ProcedureAnalyzer.d.ts} +11 -11
  26. package/dist/procedures/ProcedureAnalyzer.d.ts.map +1 -0
  27. package/dist/procedures/{ProcedureRouter.js → ProcedureAnalyzer.js} +21 -14
  28. package/dist/procedures/ProcedureAnalyzer.js.map +1 -0
  29. package/dist/procedures/index.d.ts +2 -2
  30. package/dist/procedures/index.d.ts.map +1 -1
  31. package/dist/procedures/index.js +2 -2
  32. package/dist/procedures/index.js.map +1 -1
  33. package/dist/procedures/registry.d.ts +20 -1
  34. package/dist/procedures/registry.d.ts.map +1 -1
  35. package/dist/procedures/registry.js +26 -1
  36. package/dist/procedures/registry.js.map +1 -1
  37. package/dist/procedures/types.d.ts +29 -5
  38. package/dist/procedures/types.d.ts.map +1 -1
  39. package/dist/procedures/types.js +1 -1
  40. package/dist/prompts/subroutines/user-testing-summary.md +87 -0
  41. package/dist/prompts/subroutines/user-testing.md +48 -0
  42. package/dist/prompts/subroutines/validation-fixer.md +56 -0
  43. package/dist/prompts/subroutines/verifications.md +51 -24
  44. package/dist/validation/ValidationLoopController.d.ts +54 -0
  45. package/dist/validation/ValidationLoopController.d.ts.map +1 -0
  46. package/dist/validation/ValidationLoopController.js +242 -0
  47. package/dist/validation/ValidationLoopController.js.map +1 -0
  48. package/dist/validation/index.d.ts +7 -0
  49. package/dist/validation/index.d.ts.map +1 -0
  50. package/dist/validation/index.js +7 -0
  51. package/dist/validation/index.js.map +1 -0
  52. package/dist/validation/types.d.ts +90 -0
  53. package/dist/validation/types.d.ts.map +1 -0
  54. package/dist/validation/types.js +33 -0
  55. package/dist/validation/types.js.map +1 -0
  56. package/package.json +10 -8
  57. package/prompts/graphite-orchestrator.md +360 -0
  58. package/dist/procedures/ProcedureRouter.d.ts.map +0 -1
  59. package/dist/procedures/ProcedureRouter.js.map +0 -1
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Handler for AskUserQuestion tool invocations using Linear's select signal.
3
+ *
4
+ * This handler bridges the Claude SDK's AskUserQuestion tool with Linear's
5
+ * agent elicitation API. When Claude uses the AskUserQuestion tool, this handler:
6
+ * 1. Posts an elicitation activity to Linear with the question and options
7
+ * 2. Stores the pending question with a promise resolver
8
+ * 3. Waits for the "prompted" webhook event from Linear
9
+ * 4. Resolves the promise with the user's response
10
+ *
11
+ * The handler follows the same pattern as RepositoryRouter for pending selections,
12
+ * but is specifically designed for user questions during agent execution.
13
+ *
14
+ * @see {@link https://linear.app/developers/agent-signals#select}
15
+ */
16
+ import { AgentActivitySignal } from "cyrus-core";
17
+ /**
18
+ * Handler for presenting AskUserQuestion tool calls to users via Linear's select signal.
19
+ *
20
+ * Usage:
21
+ * 1. Create handler instance with dependencies
22
+ * 2. Call `handleAskUserQuestion()` when Claude uses the AskUserQuestion tool
23
+ * 3. The handler posts an elicitation to Linear and returns a promise
24
+ * 4. When the "prompted" webhook arrives, call `handleUserResponse()` to resolve the promise
25
+ */
26
+ export class AskUserQuestionHandler {
27
+ deps;
28
+ /**
29
+ * Map of agent session ID to pending question data.
30
+ * Used to track questions awaiting user response.
31
+ */
32
+ pendingQuestions = new Map();
33
+ constructor(deps) {
34
+ this.deps = deps;
35
+ }
36
+ /**
37
+ * Handle an AskUserQuestion tool call by presenting it to the user via Linear.
38
+ *
39
+ * This method:
40
+ * 1. Validates the input (only 1 question allowed)
41
+ * 2. Posts an elicitation activity to Linear with the select signal
42
+ * 3. Returns a promise that resolves when the user responds
43
+ *
44
+ * @param input - The AskUserQuestion tool input (must contain exactly 1 question)
45
+ * @param linearAgentSessionId - Linear agent session ID (for tracking and API calls)
46
+ * @param organizationId - Linear organization/workspace ID
47
+ * @param signal - AbortSignal for cancellation
48
+ * @returns Promise resolving to the user's answer or denial
49
+ */
50
+ async handleAskUserQuestion(input, linearAgentSessionId, organizationId, signal) {
51
+ // Validate: only 1 question at a time
52
+ if (!input.questions || input.questions.length !== 1) {
53
+ console.error(`[AskUserQuestionHandler] Invalid input: expected exactly 1 question, got ${input.questions?.length ?? 0}`);
54
+ return {
55
+ answered: false,
56
+ message: "Only one question at a time is supported. Please ask each question separately.",
57
+ };
58
+ }
59
+ const question = input.questions[0];
60
+ console.log(`[AskUserQuestionHandler] Handling question for session ${linearAgentSessionId}: ${question.header}`);
61
+ // Check if already cancelled
62
+ if (signal.aborted) {
63
+ return {
64
+ answered: false,
65
+ message: "Operation was cancelled",
66
+ };
67
+ }
68
+ // Get issue tracker
69
+ const issueTracker = this.deps.getIssueTracker(organizationId);
70
+ if (!issueTracker) {
71
+ console.error(`[AskUserQuestionHandler] No issue tracker found for organization ${organizationId}`);
72
+ return {
73
+ answered: false,
74
+ message: "Issue tracker not available",
75
+ };
76
+ }
77
+ // Check for existing pending question for this session
78
+ if (this.pendingQuestions.has(linearAgentSessionId)) {
79
+ console.warn(`[AskUserQuestionHandler] Replacing existing pending question for session ${linearAgentSessionId}`);
80
+ this.cancelPendingQuestion(linearAgentSessionId, "Replaced by new question");
81
+ }
82
+ // Create the options for Linear's select signal
83
+ // Include an "Other" option to allow free-form input
84
+ const options = question.options.map((opt) => ({
85
+ value: opt.label,
86
+ }));
87
+ // Add "Other" option for free-form input
88
+ options.push({ value: "Other" });
89
+ // Build the elicitation body
90
+ // Include the question text and option descriptions for context
91
+ const optionsText = question.options
92
+ .map((opt) => `• **${opt.label}**: ${opt.description}`)
93
+ .join("\n");
94
+ const elicitationBody = `${question.question}\n\n${optionsText}`;
95
+ // Post elicitation to Linear
96
+ try {
97
+ await issueTracker.createAgentActivity({
98
+ agentSessionId: linearAgentSessionId,
99
+ content: {
100
+ type: "elicitation",
101
+ body: elicitationBody,
102
+ },
103
+ signal: AgentActivitySignal.Select,
104
+ signalMetadata: { options },
105
+ });
106
+ console.log(`[AskUserQuestionHandler] Posted elicitation with ${options.length} options for session ${linearAgentSessionId}`);
107
+ }
108
+ catch (error) {
109
+ const errorMessage = error.message || String(error);
110
+ console.error(`[AskUserQuestionHandler] Failed to post elicitation: ${errorMessage}`);
111
+ return {
112
+ answered: false,
113
+ message: `Failed to present question to user: ${errorMessage}`,
114
+ };
115
+ }
116
+ // Create promise to wait for user response
117
+ // Cleanup is handled via AbortSignal when the session ends
118
+ return new Promise((resolve) => {
119
+ // Setup abort handler for session cancellation
120
+ const abortHandler = () => {
121
+ console.log(`[AskUserQuestionHandler] Question cancelled for session ${linearAgentSessionId}`);
122
+ this.pendingQuestions.delete(linearAgentSessionId);
123
+ resolve({
124
+ answered: false,
125
+ message: "Operation was cancelled",
126
+ });
127
+ };
128
+ signal.addEventListener("abort", abortHandler, { once: true });
129
+ // Store pending question
130
+ this.pendingQuestions.set(linearAgentSessionId, {
131
+ question,
132
+ resolve: (result) => {
133
+ // Clean up abort handler before resolving
134
+ signal.removeEventListener("abort", abortHandler);
135
+ this.pendingQuestions.delete(linearAgentSessionId);
136
+ resolve(result);
137
+ },
138
+ signal,
139
+ });
140
+ });
141
+ }
142
+ /**
143
+ * Handle user response from the "prompted" webhook event.
144
+ *
145
+ * This method is called when Linear sends an AgentSessionPrompted webhook
146
+ * in response to a select signal elicitation.
147
+ *
148
+ * @param linearAgentSessionId - Linear agent session ID
149
+ * @param selectedValue - The value selected by the user (option label or free text)
150
+ * @returns true if a pending question was resolved, false if no pending question found
151
+ */
152
+ handleUserResponse(linearAgentSessionId, selectedValue) {
153
+ const pendingQuestion = this.pendingQuestions.get(linearAgentSessionId);
154
+ if (!pendingQuestion) {
155
+ console.log(`[AskUserQuestionHandler] No pending question found for session ${linearAgentSessionId}`);
156
+ return false;
157
+ }
158
+ console.log(`[AskUserQuestionHandler] User responded to question for session ${linearAgentSessionId}: ${selectedValue}`);
159
+ // Build the answers map
160
+ // The key is the question text, the value is the selected option
161
+ const answers = {
162
+ [pendingQuestion.question.question]: selectedValue,
163
+ };
164
+ // Resolve the pending promise
165
+ pendingQuestion.resolve({
166
+ answered: true,
167
+ answers,
168
+ });
169
+ return true;
170
+ }
171
+ /**
172
+ * Check if there's a pending question for this agent session.
173
+ *
174
+ * @param linearAgentSessionId - Linear agent session ID
175
+ * @returns true if there's a pending question
176
+ */
177
+ hasPendingQuestion(linearAgentSessionId) {
178
+ return this.pendingQuestions.has(linearAgentSessionId);
179
+ }
180
+ /**
181
+ * Cancel a pending question.
182
+ *
183
+ * @param linearAgentSessionId - Linear agent session ID
184
+ * @param reason - Reason for cancellation
185
+ */
186
+ cancelPendingQuestion(linearAgentSessionId, reason) {
187
+ const pendingQuestion = this.pendingQuestions.get(linearAgentSessionId);
188
+ if (pendingQuestion) {
189
+ console.log(`[AskUserQuestionHandler] Cancelling pending question for session ${linearAgentSessionId}: ${reason}`);
190
+ pendingQuestion.resolve({
191
+ answered: false,
192
+ message: reason,
193
+ });
194
+ }
195
+ }
196
+ /**
197
+ * Get the number of pending questions (for debugging/monitoring).
198
+ */
199
+ get pendingCount() {
200
+ return this.pendingQuestions.size;
201
+ }
202
+ }
203
+ //# sourceMappingURL=AskUserQuestionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskUserQuestionHandler.js","sourceRoot":"","sources":["../src/AskUserQuestionHandler.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { EventEmitter } from "node:events";
2
- import { type Issue as LinearIssue } from "@linear/sdk";
3
- import type { CyrusAgentSession, EdgeWorkerConfig, RepositoryConfig, SerializableEdgeWorkerState } from "cyrus-core";
2
+ import type { CyrusAgentSession, EdgeWorkerConfig, Issue, RepositoryConfig, SerializableEdgeWorkerState } from "cyrus-core";
4
3
  import { AgentSessionManager } from "./AgentSessionManager.js";
5
4
  import { RepositoryRouter } from "./RepositoryRouter.js";
6
5
  import type { EdgeWorkerEvents } from "./types.js";
@@ -20,16 +19,21 @@ export declare class EdgeWorker extends EventEmitter {
20
19
  private agentSessionManagers;
21
20
  private issueTrackers;
22
21
  private linearEventTransport;
22
+ private cliRPCServer;
23
23
  private configUpdater;
24
24
  private persistenceManager;
25
25
  private sharedApplicationServer;
26
26
  private cyrusHome;
27
27
  private childToParentAgentSession;
28
- private procedureRouter;
28
+ private procedureAnalyzer;
29
29
  private configWatcher?;
30
30
  private configPath?;
31
31
  /** @internal - Exposed for testing only */
32
32
  repositoryRouter: RepositoryRouter;
33
+ private gitService;
34
+ private activeWebhookCount;
35
+ /** Handler for AskUserQuestion tool invocations via Linear select signal */
36
+ private askUserQuestionHandler;
33
37
  constructor(config: EdgeWorkerConfig);
34
38
  /**
35
39
  * Start the edge worker
@@ -39,6 +43,16 @@ export declare class EdgeWorker extends EventEmitter {
39
43
  * Initialize and register components (routes) before server starts
40
44
  */
41
45
  private initializeComponents;
46
+ /**
47
+ * Register the /status endpoint for checking if the process is busy or idle
48
+ * This endpoint is used to determine if the process can be safely restarted
49
+ */
50
+ private registerStatusEndpoint;
51
+ /**
52
+ * Compute the current status of the Cyrus process
53
+ * @returns "idle" if the process can be safely restarted, "busy" if work is in progress
54
+ */
55
+ private computeStatus;
42
56
  /**
43
57
  * Stop the edge worker
44
58
  */
@@ -58,6 +72,14 @@ export declare class EdgeWorker extends EventEmitter {
58
72
  * This is triggered by the AgentSessionManager's 'subroutineComplete' event
59
73
  */
60
74
  private handleSubroutineTransition;
75
+ /**
76
+ * Handle validation loop fixer - run the fixer prompt
77
+ */
78
+ private handleValidationLoopFixer;
79
+ /**
80
+ * Handle validation loop rerun - re-run the verifications subroutine
81
+ */
82
+ private handleValidationLoopRerun;
61
83
  /**
62
84
  * Start watching config file for changes
63
85
  */
@@ -157,6 +179,13 @@ export declare class EdgeWorker extends EventEmitter {
157
179
  * In both cases, the selected repository is cached for future use.
158
180
  */
159
181
  private handleRepositorySelectionResponse;
182
+ /**
183
+ * Handle AskUserQuestion response from prompted webhook
184
+ * Branch 2.5: User response to a question posed via AskUserQuestion tool
185
+ *
186
+ * @param webhook The prompted webhook containing user's response
187
+ */
188
+ private handleAskUserQuestionResponse;
160
189
  /**
161
190
  * Handle normal prompted activity (existing session continuation)
162
191
  * Branch 3 of agentSessionPrompted (see packages/CLAUDE.md)
@@ -238,11 +267,13 @@ export declare class EdgeWorker extends EventEmitter {
238
267
  */
239
268
  private formatAgentGuidance;
240
269
  /**
241
- * Check if a branch exists locally or remotely
242
- */
243
- private branchExists;
244
- /**
245
- * Determine the base branch for an issue, considering parent issues
270
+ * Determine the base branch for an issue, considering parent issues and blocked-by relationships
271
+ *
272
+ * Priority order:
273
+ * 1. If issue has graphite label AND has a "blocked by" relationship, use the blocking issue's branch
274
+ * (This enables Graphite stacking where each sub-issue branches off the previous)
275
+ * 2. If issue has a parent, use the parent's branch
276
+ * 3. Fall back to repository's default base branch
246
277
  */
247
278
  private determineBaseBranch;
248
279
  /**
@@ -250,9 +281,30 @@ export declare class EdgeWorker extends EventEmitter {
250
281
  */
251
282
  private convertLinearIssueToCore;
252
283
  /**
253
- * Sanitize branch name by removing backticks to prevent command injection
284
+ * Fetch issues that block this issue (i.e., issues this one is "blocked by")
285
+ * Uses the inverseRelations field with type "blocks"
286
+ *
287
+ * Linear relations work like this:
288
+ * - When Issue A "blocks" Issue B, a relation is created with:
289
+ * - issue = A (the blocker)
290
+ * - relatedIssue = B (the blocked one)
291
+ * - type = "blocks"
292
+ *
293
+ * So to find "who blocks Issue B", we need inverseRelations (where B is the relatedIssue)
294
+ * and look for type === "blocks", then get the `issue` field (the blocker).
295
+ *
296
+ * @param issue The issue to fetch blocking issues for
297
+ * @returns Array of issues that block this one, or empty array if none
298
+ */
299
+ private fetchBlockingIssues;
300
+ /**
301
+ * Check if an issue has the graphite label
302
+ *
303
+ * @param issue The issue to check
304
+ * @param repository The repository configuration
305
+ * @returns True if the issue has the graphite label
254
306
  */
255
- private sanitizeBranchName;
307
+ private hasGraphiteLabel;
256
308
  /**
257
309
  * Format Linear comments into a threaded structure that mirrors the Linear UI
258
310
  * @param comments Array of Linear comments
@@ -410,6 +462,15 @@ export declare class EdgeWorker extends EventEmitter {
410
462
  * @returns Object containing the runner config and runner type to use
411
463
  */
412
464
  private buildAgentRunnerConfig;
465
+ /**
466
+ * Create an onAskUserQuestion callback for the ClaudeRunner.
467
+ * This callback delegates to the AskUserQuestionHandler which posts
468
+ * elicitations to Linear and waits for user responses.
469
+ *
470
+ * @param linearAgentSessionId - Linear agent session ID for tracking
471
+ * @param organizationId - Linear organization/workspace ID
472
+ */
473
+ private createAskUserQuestionCallback;
413
474
  /**
414
475
  * Build disallowed tools list following the same hierarchy as allowed tools
415
476
  */
@@ -507,6 +568,6 @@ export declare class EdgeWorker extends EventEmitter {
507
568
  /**
508
569
  * Fetch complete issue details from Linear API
509
570
  */
510
- fetchFullIssueDetails(issueId: string, repositoryId: string): Promise<LinearIssue | null>;
571
+ fetchFullIssueDetails(issueId: string, repositoryId: string): Promise<Issue | null>;
511
572
  }
512
573
  //# sourceMappingURL=EdgeWorker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EdgeWorker.d.ts","sourceRoot":"","sources":["../src/EdgeWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAgB,KAAK,KAAK,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAqBtE,OAAO,KAAK,EAMX,iBAAiB,EACjB,gBAAgB,EAMhB,gBAAgB,EAChB,2BAA2B,EAO3B,MAAM,YAAY,CAAC;AAkBpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAc/D,OAAO,EACN,gBAAgB,EAEhB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAoB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,CAAC,OAAO,WAAW,UAAU;IAClC,EAAE,CAAC,CAAC,SAAS,MAAM,gBAAgB,EAClC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAC3B,IAAI,CAAC;IACR,IAAI,CAAC,CAAC,SAAS,MAAM,gBAAgB,EACpC,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GACtC,OAAO,CAAC;CACX;AAED;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,oBAAoB,CAA+C;IAC3E,OAAO,CAAC,aAAa,CAAgD;IACrE,OAAO,CAAC,oBAAoB,CAAqC;IACjE,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,uBAAuB,CAA0B;IACzD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,yBAAyB,CAAkC;IACnE,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAC,CAAY;IAClC,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,2CAA2C;IACpC,gBAAgB,EAAE,gBAAgB,CAAC;gBAE9B,MAAM,EAAE,gBAAgB;IAkJpC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;YACW,oBAAoB;IA8DlC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C3B;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvC;;;;OAIG;YACW,yBAAyB;IA2GvC;;;OAGG;YACW,0BAA0B;IAoExC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;YACW,kBAAkB;IAoChC;;OAEG;YACW,gBAAgB;IAyD9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkC/B;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;YACW,kBAAkB;IA+EhC;;OAEG;YACW,0BAA0B;IAgExC;;OAEG;YACW,yBAAyB;IAoEvC;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;YACW,aAAa;IA6C3B;;OAEG;YACW,4BAA4B;IAiC1C;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAWnC;;;;;;;OAOG;YACW,wBAAwB;IAsFtC;;;;;OAKG;YACW,gCAAgC;IAqF9C;;;;;;;;;;;OAWG;YACW,qBAAqB;IA+TnC;;;;;;;OAOG;YACW,gBAAgB;IA+C9B;;;;;;;OAOG;YACW,iCAAiC;IAiE/C;;;OAGG;YACW,4BAA4B;IAqN1C;;;;;;;;OAQG;YACW,+BAA+B;IA6C7C;;;;OAIG;YACW,qBAAqB;IAwCnC;;OAEG;YACW,mBAAmB;IAejC;;;OAGG;YACW,iBAAiB;IAQ/B;;OAEG;YACW,gBAAgB;IAa9B;;;;;;;;;OASG;IACH,OAAO,CAAC,yBAAyB;IAkFjC;;OAEG;YACW,+BAA+B;IAwE7C;;;;;;;OAOG;YACW,qBAAqB;IA0JnC;;;;;;;;OAQG;YACW,kBAAkB;IAoDhC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;YACW,YAAY;IA2B1B;;OAEG;YACW,mBAAmB;IAmDjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;OAIG;YACW,oBAAoB;IAmFlC;;;;;;;;OAQG;YACW,uBAAuB;IAwLrC;;OAEG;IACH,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAY3C;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG;IAKtC;;OAEG;IACG,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAChD,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,EAAE,MAAM,CAAC;KAC5B,CAAC;IAKF;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;;;OAIG;YAEW,uBAAuB;IA+ErC;;OAEG;IAeH;;OAEG;YACW,WAAW;IAqBzB;;OAEG;IASH;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;;;;OAKG;YACW,wBAAwB;IAwJtC;;OAEG;YACW,kBAAkB;IAuDhC;;;;;;OAMG;YACW,0BAA0B;IAwFxC;;OAEG;YACW,mBAAmB;IASjC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IA8CrC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAoFlC;;OAEG;IACH,OAAO,CAAC,cAAc;IAsLtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;;;;;;;;;;OAWG;YACW,kBAAkB;IAsChC;;;OAGG;YACW,cAAc;IAiB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;;OAEG;YACW,qBAAqB;IAuGnC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmC/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;;OAGG;YACW,oBAAoB;IAyClC;;OAEG;YACW,sBAAsB;IAsBpC;;OAEG;YACW,gCAAgC;IAW9C;;OAEG;YACW,kCAAkC;IA2ChD;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IA8G9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA8C5B;;;;;;OAMG;IACH,OAAO,CAAC,8BAA8B;IAuBtC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuDzB;;OAEG;IACI,wBAAwB,CAC9B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GAClB,GAAG,EAAE;IASR;;OAEG;YACW,kBAAkB;IAchC;;OAEG;YACW,kBAAkB;IAYhC;;OAEG;IACI,iBAAiB,IAAI,2BAA2B;IAoCvD;;OAEG;IACI,eAAe,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI;IA6ChE;;OAEG;YACW,yBAAyB;IAwCvC;;OAEG;YACW,8BAA8B;IAwC5C;;;OAGG;YACW,+BAA+B;IAkE7C;;;OAGG;YACW,0BAA0B;IAsFxC;;;;;;;;;;;;;;;;;;OAkBG;YACW,8BAA8B;IA2E5C;;OAEG;YACW,gCAAgC;IA2G9C;;;;;;;;;;OAUG;IACG,kBAAkB,CACvB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,gBAAgB,EAC5B,4BAA4B,EAAE,MAAM,EACpC,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,MAAM,EAClB,kBAAkB,GAAE,MAAW,EAC/B,YAAY,GAAE,OAAe,EAC7B,4BAA4B,GAAE,MAAM,EAAO,EAC3C,QAAQ,CAAC,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,EACtB,gBAAgB,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC;IAuJhB;;OAEG;YACW,iCAAiC;IA6C/C;;OAEG;IACU,qBAAqB,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;CAqC9B"}
1
+ {"version":3,"file":"EdgeWorker.d.ts","sourceRoot":"","sources":["../src/EdgeWorker.ts"],"names":[],"mappings":"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"}