@minpeter/pss-runtime 0.1.0-next.2 → 0.1.0-next.4

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 (145) hide show
  1. package/README.md +172 -85
  2. package/dist/agent-host-session-store.js +2 -4
  3. package/dist/agent-host-session-store.js.map +1 -1
  4. package/dist/agent-loop.js +9 -8
  5. package/dist/agent-loop.js.map +1 -1
  6. package/dist/agent-namespace.js +3 -7
  7. package/dist/agent-namespace.js.map +1 -1
  8. package/dist/agent-options.d.ts +4 -19
  9. package/dist/agent-options.js +2 -8
  10. package/dist/agent-options.js.map +1 -1
  11. package/dist/agent-resume.js +2 -82
  12. package/dist/agent-resume.js.map +1 -1
  13. package/dist/agent-session-entry.d.ts +1 -1
  14. package/dist/agent.d.ts +4 -4
  15. package/dist/agent.js +19 -89
  16. package/dist/agent.js.map +1 -1
  17. package/dist/cloudflare/cloudflare-agent-context.d.ts +40 -0
  18. package/dist/cloudflare/cloudflare-agent-context.js +37 -0
  19. package/dist/cloudflare/cloudflare-agent-context.js.map +1 -0
  20. package/dist/cloudflare/cloudflare-alarm-budget.d.ts +18 -0
  21. package/dist/cloudflare/cloudflare-alarm-budget.js +77 -0
  22. package/dist/cloudflare/cloudflare-alarm-budget.js.map +1 -0
  23. package/dist/cloudflare/cloudflare-alarm-drainer.d.ts +45 -0
  24. package/dist/cloudflare/cloudflare-alarm-drainer.js +103 -0
  25. package/dist/cloudflare/cloudflare-alarm-drainer.js.map +1 -0
  26. package/dist/cloudflare/cloudflare-alarm-run-drain.d.ts +13 -0
  27. package/dist/cloudflare/cloudflare-alarm-run-drain.js +81 -0
  28. package/dist/cloudflare/cloudflare-alarm-run-drain.js.map +1 -0
  29. package/dist/cloudflare/cloudflare-alarm-work.js +110 -0
  30. package/dist/cloudflare/cloudflare-alarm-work.js.map +1 -0
  31. package/dist/cloudflare/cloudflare-checkpoint-store.js +39 -0
  32. package/dist/cloudflare/cloudflare-checkpoint-store.js.map +1 -0
  33. package/dist/cloudflare/cloudflare-durable-object-fetch.d.ts +21 -0
  34. package/dist/cloudflare/cloudflare-durable-object-fetch.js +11 -0
  35. package/dist/cloudflare/cloudflare-durable-object-fetch.js.map +1 -0
  36. package/dist/cloudflare/cloudflare-event-store.js +33 -0
  37. package/dist/cloudflare/cloudflare-event-store.js.map +1 -0
  38. package/dist/cloudflare/cloudflare-execution-session-store.js +40 -0
  39. package/dist/cloudflare/cloudflare-execution-session-store.js.map +1 -0
  40. package/dist/cloudflare/cloudflare-execution-store.js +35 -0
  41. package/dist/cloudflare/cloudflare-execution-store.js.map +1 -0
  42. package/dist/cloudflare/cloudflare-host.d.ts +61 -0
  43. package/dist/cloudflare/cloudflare-host.js +113 -0
  44. package/dist/cloudflare/cloudflare-host.js.map +1 -0
  45. package/dist/cloudflare/cloudflare-notification-store.js +59 -0
  46. package/dist/cloudflare/cloudflare-notification-store.js.map +1 -0
  47. package/dist/cloudflare/cloudflare-run-store.js +81 -0
  48. package/dist/cloudflare/cloudflare-run-store.js.map +1 -0
  49. package/dist/cloudflare/cloudflare-store-utils.js +43 -0
  50. package/dist/cloudflare/cloudflare-store-utils.js.map +1 -0
  51. package/dist/cloudflare/durable-object-storage.d.ts +20 -0
  52. package/dist/cloudflare/durable-object-storage.js +76 -0
  53. package/dist/cloudflare/durable-object-storage.js.map +1 -0
  54. package/dist/cloudflare/index.d.ts +7 -0
  55. package/dist/cloudflare/index.js +6 -0
  56. package/dist/execution/capabilities.d.ts +40 -0
  57. package/dist/execution/host.d.ts +9 -0
  58. package/dist/execution/host.js +49 -1
  59. package/dist/execution/host.js.map +1 -1
  60. package/dist/execution/index.d.ts +3 -1
  61. package/dist/execution/index.js +2 -1
  62. package/dist/execution/memory.js +1 -1
  63. package/dist/execution/memory.js.map +1 -1
  64. package/dist/execution/types.d.ts +5 -10
  65. package/dist/index.d.ts +9 -5
  66. package/dist/index.js +6 -2
  67. package/dist/llm-tool-execution.js.map +1 -1
  68. package/dist/llm.d.ts +1 -21
  69. package/dist/llm.js +12 -14
  70. package/dist/llm.js.map +1 -1
  71. package/dist/plugins.d.ts +27 -5
  72. package/dist/plugins.js +35 -6
  73. package/dist/plugins.js.map +1 -1
  74. package/dist/session/delegate-input.d.ts +9 -0
  75. package/dist/session/delegate-input.js +16 -0
  76. package/dist/session/delegate-input.js.map +1 -0
  77. package/dist/session/events.d.ts +43 -25
  78. package/dist/session/events.js +41 -0
  79. package/dist/session/events.js.map +1 -0
  80. package/dist/session/input-meta-types.d.ts +10 -0
  81. package/dist/session/input-meta.d.ts +13 -0
  82. package/dist/session/input-meta.js +45 -0
  83. package/dist/session/input-meta.js.map +1 -0
  84. package/dist/session/input.d.ts +4 -0
  85. package/dist/session/mapping.js +4 -2
  86. package/dist/session/mapping.js.map +1 -1
  87. package/dist/session/runtime-input-emit.js +41 -0
  88. package/dist/session/runtime-input-emit.js.map +1 -0
  89. package/dist/session/runtime-input.js +5 -1
  90. package/dist/session/runtime-input.js.map +1 -1
  91. package/dist/session/session-events.js +20 -6
  92. package/dist/session/session-events.js.map +1 -1
  93. package/dist/session/session-notification.js +3 -2
  94. package/dist/session/session-notification.js.map +1 -1
  95. package/dist/session/session-runtime-drain.js +3 -9
  96. package/dist/session/session-runtime-drain.js.map +1 -1
  97. package/dist/session/session-turn-processor.js +10 -20
  98. package/dist/session/session-turn-processor.js.map +1 -1
  99. package/dist/session/session.js +15 -8
  100. package/dist/session/session.js.map +1 -1
  101. package/package.json +6 -1
  102. package/dist/agent-child-runs.js +0 -16
  103. package/dist/agent-child-runs.js.map +0 -1
  104. package/dist/agent-host-capabilities.js +0 -9
  105. package/dist/agent-host-capabilities.js.map +0 -1
  106. package/dist/agent-validation.js +0 -35
  107. package/dist/agent-validation.js.map +0 -1
  108. package/dist/child-session-cleanups.js +0 -61
  109. package/dist/child-session-cleanups.js.map +0 -1
  110. package/dist/execution/run.js +0 -55
  111. package/dist/execution/run.js.map +0 -1
  112. package/dist/subagent-background-child-run-state.js +0 -51
  113. package/dist/subagent-background-child-run-state.js.map +0 -1
  114. package/dist/subagent-background-child-run.js +0 -103
  115. package/dist/subagent-background-child-run.js.map +0 -1
  116. package/dist/subagent-background-in-process.js +0 -98
  117. package/dist/subagent-background-in-process.js.map +0 -1
  118. package/dist/subagent-background-notification-inbox.js +0 -106
  119. package/dist/subagent-background-notification-inbox.js.map +0 -1
  120. package/dist/subagent-background-notify.js +0 -136
  121. package/dist/subagent-background-notify.js.map +0 -1
  122. package/dist/subagent-background-resume-group.js +0 -99
  123. package/dist/subagent-background-resume-group.js.map +0 -1
  124. package/dist/subagent-background-runner.js +0 -115
  125. package/dist/subagent-background-runner.js.map +0 -1
  126. package/dist/subagent-background-schedule.js +0 -43
  127. package/dist/subagent-background-schedule.js.map +0 -1
  128. package/dist/subagent-child-run.js +0 -68
  129. package/dist/subagent-child-run.js.map +0 -1
  130. package/dist/subagent-job-cancel.js +0 -84
  131. package/dist/subagent-job-cancel.js.map +0 -1
  132. package/dist/subagent-job-observer.js +0 -19
  133. package/dist/subagent-job-observer.js.map +0 -1
  134. package/dist/subagent-job-output.js +0 -87
  135. package/dist/subagent-job-output.js.map +0 -1
  136. package/dist/subagent-job-state.js +0 -66
  137. package/dist/subagent-job-state.js.map +0 -1
  138. package/dist/subagent-jobs.js +0 -96
  139. package/dist/subagent-jobs.js.map +0 -1
  140. package/dist/subagent-prompt-schema.js +0 -114
  141. package/dist/subagent-prompt-schema.js.map +0 -1
  142. package/dist/subagent-run.js +0 -111
  143. package/dist/subagent-run.js.map +0 -1
  144. package/dist/subagents.js +0 -125
  145. package/dist/subagents.js.map +0 -1
package/dist/subagents.js DELETED
@@ -1,125 +0,0 @@
1
- import { scopedChildSessionKey } from "./subagent-run.js";
2
- import { normalizeAgentInput } from "./session/input-normalization.js";
3
- import { blockingSubagentDedupeKey, runBlockingChild } from "./subagent-child-run.js";
4
- import { createBackgroundCancelTool } from "./subagent-job-cancel.js";
5
- import { createBackgroundOutputTool } from "./subagent-job-output.js";
6
- import { startBackgroundJob } from "./subagent-jobs.js";
7
- import { delegatePromptSchema } from "./subagent-prompt-schema.js";
8
- import { jsonSchema, tool } from "ai";
9
- //#region src/subagents.ts
10
- function createSubagentTools({ backgroundSubagents, executionHost, parentAgentNamespace, parentSession, parentSessionKey, registerChildSession, subagents }) {
11
- if (subagents.length === 0) return {};
12
- const jobs = /* @__PURE__ */ new Map();
13
- const groups = /* @__PURE__ */ new Map();
14
- const blockingRuns = /* @__PURE__ */ new Map();
15
- const backgroundToolScope = { childSessionKeyPrefix: `parent:${parentAgentNamespace}:${parentSessionKey}:subagent:` };
16
- const generatedTools = backgroundSubagents ? {
17
- background_cancel: createBackgroundCancelTool(jobs, executionHost, backgroundToolScope),
18
- background_output: createBackgroundOutputTool(jobs, executionHost, backgroundToolScope)
19
- } : {};
20
- for (const subagent of subagents) {
21
- const name = subagent.name;
22
- if (!name) continue;
23
- generatedTools[`delegate_to_${name.replaceAll("-", "_")}`] = createDelegateTool({
24
- jobs,
25
- groups,
26
- backgroundSubagents,
27
- blockingRuns,
28
- executionHost,
29
- parentAgentNamespace,
30
- parentSession,
31
- parentSessionKey,
32
- registerChildSession,
33
- subagent
34
- });
35
- }
36
- return generatedTools;
37
- }
38
- function createDelegateTool({ jobs, groups, backgroundSubagents, blockingRuns, executionHost, parentAgentNamespace, parentSession, parentSessionKey, registerChildSession, subagent }) {
39
- return tool({
40
- description: `Delegate work to ${subagent.name}: ${subagent.description}`,
41
- execute: async (input, { abortSignal, toolCallId }) => {
42
- const prompt = normalizeAgentInput(input.prompt);
43
- const sessionKey = scopedChildSessionKey({
44
- parentAgentNamespace,
45
- parentSessionKey,
46
- sessionKey: input.sessionKey,
47
- subagent: subagent.name ?? "subagent"
48
- });
49
- if (input.run_in_background === true) {
50
- if (!backgroundSubagents) throw new Error("Background subagent delegation is not available for this host.");
51
- return await startBackgroundJob({
52
- abortSignal: abortSignal ?? new AbortController().signal,
53
- description: input.description,
54
- executionHost,
55
- groupId: parentSession.currentBackgroundGroupId?.(),
56
- groups,
57
- jobs,
58
- delegateToolCallId: toolCallId,
59
- parentSession,
60
- parentRunId: parentSession.currentRunId?.() ?? parentAgentNamespace,
61
- parentSessionKey,
62
- ownerNamespace: parentAgentNamespace,
63
- prompt,
64
- registerCleanup: (cleanup) => registerChildSession(parentSessionKey, cleanup),
65
- sessionKey,
66
- subagent
67
- });
68
- }
69
- registerChildSession(parentSessionKey, () => subagent.session(sessionKey).delete());
70
- await parentSession.emitObserverEvent({
71
- description: input.description,
72
- delegateToolCallId: toolCallId,
73
- run_in_background: false,
74
- subagent: subagent.name ?? "subagent",
75
- type: "subagent-job-start"
76
- });
77
- const dedupeKey = blockingSubagentDedupeKey(parentAgentNamespace, toolCallId);
78
- const result = blockingRuns.get(dedupeKey) ?? runBlockingChild({
79
- abortSignal,
80
- dedupeKey,
81
- executionHost,
82
- parentRunId: parentSession.currentRunId?.() ?? parentAgentNamespace,
83
- prompt,
84
- sessionKey,
85
- subagent
86
- });
87
- blockingRuns.set(dedupeKey, result);
88
- const awaitedResult = await result;
89
- await parentSession.emitObserverEvent({
90
- error: awaitedResult.error,
91
- eventCount: awaitedResult.eventCount,
92
- delegateToolCallId: toolCallId,
93
- status: awaitedResult.result,
94
- subagent: subagent.name ?? "subagent",
95
- type: "subagent-job-end"
96
- });
97
- return awaitedResult;
98
- },
99
- inputSchema: jsonSchema({
100
- additionalProperties: false,
101
- properties: createDelegateToolProperties(backgroundSubagents),
102
- required: ["prompt"],
103
- type: "object"
104
- })
105
- });
106
- }
107
- function createDelegateToolProperties(backgroundSubagents) {
108
- const baseProperties = {
109
- description: { type: "string" },
110
- prompt: delegatePromptSchema,
111
- sessionKey: { type: "string" }
112
- };
113
- if (!backgroundSubagents) return baseProperties;
114
- return {
115
- ...baseProperties,
116
- run_in_background: {
117
- default: false,
118
- type: "boolean"
119
- }
120
- };
121
- }
122
- //#endregion
123
- export { createSubagentTools };
124
-
125
- //# sourceMappingURL=subagents.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subagents.js","names":[],"sources":["../src/subagents.ts"],"sourcesContent":["import { jsonSchema, type ToolSet, tool } from \"ai\";\nimport type { ExecutionHost } from \"./execution/types\";\nimport { normalizeAgentInput } from \"./session/input-normalization\";\nimport {\n type BlockingSubagentRunCache,\n blockingSubagentDedupeKey,\n runBlockingChild,\n} from \"./subagent-child-run\";\nimport { createBackgroundCancelTool } from \"./subagent-job-cancel\";\nimport { createBackgroundOutputTool } from \"./subagent-job-output\";\nimport { startBackgroundJob } from \"./subagent-jobs\";\nimport { delegatePromptSchema } from \"./subagent-prompt-schema\";\nimport { scopedChildSessionKey } from \"./subagent-run\";\nimport type {\n CreateSubagentToolsOptions,\n DelegateInput,\n RuntimeInputSink,\n Subagent,\n SubagentJob,\n SubagentJobGroup,\n} from \"./subagent-types\";\n\nexport function createSubagentTools({\n backgroundSubagents,\n executionHost,\n parentAgentNamespace,\n parentSession,\n parentSessionKey,\n registerChildSession,\n subagents,\n}: CreateSubagentToolsOptions): ToolSet {\n if (subagents.length === 0) {\n return {};\n }\n\n const jobs = new Map<string, SubagentJob>();\n const groups = new Map<string, SubagentJobGroup>();\n const blockingRuns: BlockingSubagentRunCache = new Map();\n const backgroundToolScope = {\n childSessionKeyPrefix: `parent:${parentAgentNamespace}:${parentSessionKey}:subagent:`,\n };\n const generatedTools: Record<string, unknown> = backgroundSubagents\n ? {\n background_cancel: createBackgroundCancelTool(\n jobs,\n executionHost,\n backgroundToolScope\n ),\n background_output: createBackgroundOutputTool(\n jobs,\n executionHost,\n backgroundToolScope\n ),\n }\n : {};\n\n for (const subagent of subagents) {\n const name = subagent.name;\n if (!name) {\n continue;\n }\n\n generatedTools[`delegate_to_${name.replaceAll(\"-\", \"_\")}`] =\n createDelegateTool({\n jobs,\n groups,\n backgroundSubagents,\n blockingRuns,\n executionHost,\n parentAgentNamespace,\n parentSession,\n parentSessionKey,\n registerChildSession,\n subagent,\n });\n }\n\n return generatedTools as ToolSet;\n}\n\nfunction createDelegateTool({\n jobs,\n groups,\n backgroundSubagents,\n blockingRuns,\n executionHost,\n parentAgentNamespace,\n parentSession,\n parentSessionKey,\n registerChildSession,\n subagent,\n}: {\n readonly jobs: Map<string, SubagentJob>;\n readonly groups: Map<string, SubagentJobGroup>;\n readonly backgroundSubagents: boolean;\n readonly blockingRuns: BlockingSubagentRunCache;\n readonly executionHost?: ExecutionHost;\n readonly parentAgentNamespace: string;\n readonly parentSession: RuntimeInputSink;\n readonly parentSessionKey: string;\n readonly registerChildSession: CreateSubagentToolsOptions[\"registerChildSession\"];\n readonly subagent: Subagent;\n}) {\n return tool<DelegateInput, unknown, Record<string, unknown>>({\n description: `Delegate work to ${subagent.name}: ${subagent.description}`,\n execute: async (input: DelegateInput, { abortSignal, toolCallId }) => {\n const prompt = normalizeAgentInput(input.prompt);\n const sessionKey = scopedChildSessionKey({\n parentAgentNamespace,\n parentSessionKey,\n sessionKey: input.sessionKey,\n subagent: subagent.name ?? \"subagent\",\n });\n if (input.run_in_background === true) {\n if (!backgroundSubagents) {\n throw new Error(\n \"Background subagent delegation is not available for this host.\"\n );\n }\n\n return await startBackgroundJob({\n abortSignal: abortSignal ?? new AbortController().signal,\n description: input.description,\n executionHost,\n groupId: parentSession.currentBackgroundGroupId?.(),\n groups,\n jobs,\n delegateToolCallId: toolCallId,\n parentSession,\n parentRunId: parentSession.currentRunId?.() ?? parentAgentNamespace,\n parentSessionKey,\n ownerNamespace: parentAgentNamespace,\n prompt,\n registerCleanup: (cleanup) =>\n registerChildSession(parentSessionKey, cleanup),\n sessionKey,\n subagent,\n });\n }\n\n registerChildSession(parentSessionKey, () =>\n subagent.session(sessionKey).delete()\n );\n await parentSession.emitObserverEvent({\n description: input.description,\n delegateToolCallId: toolCallId,\n run_in_background: false,\n subagent: subagent.name ?? \"subagent\",\n type: \"subagent-job-start\",\n });\n const dedupeKey = blockingSubagentDedupeKey(\n parentAgentNamespace,\n toolCallId\n );\n const existing = blockingRuns.get(dedupeKey);\n const result =\n existing ??\n runBlockingChild({\n abortSignal,\n dedupeKey,\n executionHost,\n parentRunId: parentSession.currentRunId?.() ?? parentAgentNamespace,\n prompt,\n sessionKey,\n subagent,\n });\n blockingRuns.set(dedupeKey, result);\n const awaitedResult = await result;\n await parentSession.emitObserverEvent({\n error: awaitedResult.error,\n eventCount: awaitedResult.eventCount,\n delegateToolCallId: toolCallId,\n status: awaitedResult.result,\n subagent: subagent.name ?? \"subagent\",\n type: \"subagent-job-end\",\n });\n return awaitedResult;\n },\n inputSchema: jsonSchema<DelegateInput>({\n additionalProperties: false,\n properties: createDelegateToolProperties(backgroundSubagents),\n required: [\"prompt\"],\n type: \"object\",\n }),\n });\n}\n\nfunction createDelegateToolProperties(backgroundSubagents: boolean) {\n const baseProperties = {\n description: { type: \"string\" },\n prompt: delegatePromptSchema,\n sessionKey: { type: \"string\" },\n };\n\n if (!backgroundSubagents) {\n return baseProperties;\n }\n\n return {\n ...baseProperties,\n run_in_background: { default: false, type: \"boolean\" },\n };\n}\n"],"mappings":";;;;;;;;;AAsBA,SAAgB,oBAAoB,EAClC,qBACA,eACA,sBACA,eACA,kBACA,sBACA,aACsC;CACtC,IAAI,UAAU,WAAW,GACvB,OAAO,CAAC;CAGV,MAAM,uBAAO,IAAI,IAAyB;CAC1C,MAAM,yBAAS,IAAI,IAA8B;CACjD,MAAM,+BAAyC,IAAI,IAAI;CACvD,MAAM,sBAAsB,EAC1B,uBAAuB,UAAU,qBAAqB,GAAG,iBAAiB,YAC5E;CACA,MAAM,iBAA0C,sBAC5C;EACE,mBAAmB,2BACjB,MACA,eACA,mBACF;EACA,mBAAmB,2BACjB,MACA,eACA,mBACF;CACF,IACA,CAAC;CAEL,KAAK,MAAM,YAAY,WAAW;EAChC,MAAM,OAAO,SAAS;EACtB,IAAI,CAAC,MACH;EAGF,eAAe,eAAe,KAAK,WAAW,KAAK,GAAG,OACpD,mBAAmB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC;CACL;CAEA,OAAO;AACT;AAEA,SAAS,mBAAmB,EAC1B,MACA,QACA,qBACA,cACA,eACA,sBACA,eACA,kBACA,sBACA,YAYC;CACD,OAAO,KAAsD;EAC3D,aAAa,oBAAoB,SAAS,KAAK,IAAI,SAAS;EAC5D,SAAS,OAAO,OAAsB,EAAE,aAAa,iBAAiB;GACpE,MAAM,SAAS,oBAAoB,MAAM,MAAM;GAC/C,MAAM,aAAa,sBAAsB;IACvC;IACA;IACA,YAAY,MAAM;IAClB,UAAU,SAAS,QAAQ;GAC7B,CAAC;GACD,IAAI,MAAM,sBAAsB,MAAM;IACpC,IAAI,CAAC,qBACH,MAAM,IAAI,MACR,gEACF;IAGF,OAAO,MAAM,mBAAmB;KAC9B,aAAa,eAAe,IAAI,gBAAgB,EAAE;KAClD,aAAa,MAAM;KACnB;KACA,SAAS,cAAc,2BAA2B;KAClD;KACA;KACA,oBAAoB;KACpB;KACA,aAAa,cAAc,eAAe,KAAK;KAC/C;KACA,gBAAgB;KAChB;KACA,kBAAkB,YAChB,qBAAqB,kBAAkB,OAAO;KAChD;KACA;IACF,CAAC;GACH;GAEA,qBAAqB,wBACnB,SAAS,QAAQ,UAAU,EAAE,OAAO,CACtC;GACA,MAAM,cAAc,kBAAkB;IACpC,aAAa,MAAM;IACnB,oBAAoB;IACpB,mBAAmB;IACnB,UAAU,SAAS,QAAQ;IAC3B,MAAM;GACR,CAAC;GACD,MAAM,YAAY,0BAChB,sBACA,UACF;GAEA,MAAM,SADW,aAAa,IAAI,SAEzB,KACP,iBAAiB;IACf;IACA;IACA;IACA,aAAa,cAAc,eAAe,KAAK;IAC/C;IACA;IACA;GACF,CAAC;GACH,aAAa,IAAI,WAAW,MAAM;GAClC,MAAM,gBAAgB,MAAM;GAC5B,MAAM,cAAc,kBAAkB;IACpC,OAAO,cAAc;IACrB,YAAY,cAAc;IAC1B,oBAAoB;IACpB,QAAQ,cAAc;IACtB,UAAU,SAAS,QAAQ;IAC3B,MAAM;GACR,CAAC;GACD,OAAO;EACT;EACA,aAAa,WAA0B;GACrC,sBAAsB;GACtB,YAAY,6BAA6B,mBAAmB;GAC5D,UAAU,CAAC,QAAQ;GACnB,MAAM;EACR,CAAC;CACH,CAAC;AACH;AAEA,SAAS,6BAA6B,qBAA8B;CAClE,MAAM,iBAAiB;EACrB,aAAa,EAAE,MAAM,SAAS;EAC9B,QAAQ;EACR,YAAY,EAAE,MAAM,SAAS;CAC/B;CAEA,IAAI,CAAC,qBACH,OAAO;CAGT,OAAO;EACL,GAAG;EACH,mBAAmB;GAAE,SAAS;GAAO,MAAM;EAAU;CACvD;AACF"}