@pellux/goodvibes-sdk 0.25.6 → 0.25.8

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 (114) hide show
  1. package/dist/_internal/contracts/artifacts/operator-contract.json +280 -4
  2. package/dist/_internal/contracts/generated/foundation-metadata.d.ts +2 -2
  3. package/dist/_internal/contracts/generated/foundation-metadata.js +2 -2
  4. package/dist/_internal/contracts/generated/operator-contract.d.ts.map +1 -1
  5. package/dist/_internal/contracts/generated/operator-contract.js +280 -4
  6. package/dist/_internal/contracts/generated/operator-method-ids.d.ts +1 -1
  7. package/dist/_internal/contracts/generated/operator-method-ids.d.ts.map +1 -1
  8. package/dist/_internal/contracts/generated/operator-method-ids.js +2 -0
  9. package/dist/_internal/contracts/zod-schemas/providers.d.ts +132 -0
  10. package/dist/_internal/contracts/zod-schemas/providers.d.ts.map +1 -1
  11. package/dist/_internal/contracts/zod-schemas/providers.js +16 -0
  12. package/dist/_internal/daemon/context.d.ts +1 -0
  13. package/dist/_internal/daemon/context.d.ts.map +1 -1
  14. package/dist/_internal/daemon/media-route-types.d.ts +10 -0
  15. package/dist/_internal/daemon/media-route-types.d.ts.map +1 -1
  16. package/dist/_internal/daemon/media-routes.d.ts +1 -1
  17. package/dist/_internal/daemon/media-routes.d.ts.map +1 -1
  18. package/dist/_internal/daemon/media-routes.js +91 -10
  19. package/dist/_internal/daemon/operator.d.ts +1 -1
  20. package/dist/_internal/daemon/operator.d.ts.map +1 -1
  21. package/dist/_internal/daemon/operator.js +2 -0
  22. package/dist/_internal/platform/adapters/ntfy/index.js +13 -2
  23. package/dist/_internal/platform/adapters/types.d.ts +2 -0
  24. package/dist/_internal/platform/adapters/types.d.ts.map +1 -1
  25. package/dist/_internal/platform/batch/index.d.ts +4 -0
  26. package/dist/_internal/platform/batch/index.d.ts.map +1 -0
  27. package/dist/_internal/platform/batch/index.js +2 -0
  28. package/dist/_internal/platform/batch/manager.d.ts +41 -0
  29. package/dist/_internal/platform/batch/manager.d.ts.map +1 -0
  30. package/dist/_internal/platform/batch/manager.js +400 -0
  31. package/dist/_internal/platform/batch/types.d.ts +85 -0
  32. package/dist/_internal/platform/batch/types.d.ts.map +1 -0
  33. package/dist/_internal/platform/batch/types.js +10 -0
  34. package/dist/_internal/platform/channels/builtin/plugins.d.ts.map +1 -1
  35. package/dist/_internal/platform/channels/builtin/plugins.js +1 -0
  36. package/dist/_internal/platform/channels/reply-pipeline.d.ts +9 -1
  37. package/dist/_internal/platform/channels/reply-pipeline.d.ts.map +1 -1
  38. package/dist/_internal/platform/channels/reply-pipeline.js +156 -6
  39. package/dist/_internal/platform/companion/companion-chat-manager.d.ts +2 -1
  40. package/dist/_internal/platform/companion/companion-chat-manager.d.ts.map +1 -1
  41. package/dist/_internal/platform/companion/companion-chat-manager.js +21 -0
  42. package/dist/_internal/platform/companion/companion-chat-routes.d.ts +1 -0
  43. package/dist/_internal/platform/companion/companion-chat-routes.d.ts.map +1 -1
  44. package/dist/_internal/platform/companion/companion-chat-routes.js +76 -0
  45. package/dist/_internal/platform/companion/companion-chat-types.d.ts +9 -0
  46. package/dist/_internal/platform/companion/companion-chat-types.d.ts.map +1 -1
  47. package/dist/_internal/platform/companion/index.d.ts +1 -1
  48. package/dist/_internal/platform/companion/index.d.ts.map +1 -1
  49. package/dist/_internal/platform/config/schema-domain-core.d.ts +6 -0
  50. package/dist/_internal/platform/config/schema-domain-core.d.ts.map +1 -1
  51. package/dist/_internal/platform/config/schema-domain-core.js +30 -0
  52. package/dist/_internal/platform/config/schema-domain-runtime.d.ts +19 -0
  53. package/dist/_internal/platform/config/schema-domain-runtime.d.ts.map +1 -1
  54. package/dist/_internal/platform/config/schema-domain-runtime.js +118 -0
  55. package/dist/_internal/platform/config/schema-types.d.ts +33 -2
  56. package/dist/_internal/platform/config/schema-types.d.ts.map +1 -1
  57. package/dist/_internal/platform/config/schema.d.ts.map +1 -1
  58. package/dist/_internal/platform/config/schema.js +3 -0
  59. package/dist/_internal/platform/control-plane/method-catalog-control-core.d.ts.map +1 -1
  60. package/dist/_internal/platform/control-plane/method-catalog-control-core.js +17 -0
  61. package/dist/_internal/platform/control-plane/method-catalog-media.d.ts.map +1 -1
  62. package/dist/_internal/platform/control-plane/method-catalog-media.js +17 -0
  63. package/dist/_internal/platform/control-plane/routes/operator.d.ts +1 -1
  64. package/dist/_internal/platform/control-plane/routes/operator.d.ts.map +1 -1
  65. package/dist/_internal/platform/control-plane/routes/operator.js +2 -0
  66. package/dist/_internal/platform/daemon/facade-composition.d.ts +2 -0
  67. package/dist/_internal/platform/daemon/facade-composition.d.ts.map +1 -1
  68. package/dist/_internal/platform/daemon/facade-composition.js +10 -0
  69. package/dist/_internal/platform/daemon/http/batch-routes.d.ts +8 -0
  70. package/dist/_internal/platform/daemon/http/batch-routes.d.ts.map +1 -0
  71. package/dist/_internal/platform/daemon/http/batch-routes.js +113 -0
  72. package/dist/_internal/platform/daemon/http/provider-routes.d.ts +3 -0
  73. package/dist/_internal/platform/daemon/http/provider-routes.d.ts.map +1 -1
  74. package/dist/_internal/platform/daemon/http/provider-routes.js +79 -20
  75. package/dist/_internal/platform/daemon/http/router-route-contexts.d.ts.map +1 -1
  76. package/dist/_internal/platform/daemon/http/router-route-contexts.js +1 -0
  77. package/dist/_internal/platform/daemon/http/router.d.ts +4 -0
  78. package/dist/_internal/platform/daemon/http/router.d.ts.map +1 -1
  79. package/dist/_internal/platform/daemon/http/router.js +15 -0
  80. package/dist/_internal/platform/daemon/http/runtime-route-types.d.ts +2 -0
  81. package/dist/_internal/platform/daemon/http/runtime-route-types.d.ts.map +1 -1
  82. package/dist/_internal/platform/daemon/surface-actions.d.ts +6 -0
  83. package/dist/_internal/platform/daemon/surface-actions.d.ts.map +1 -1
  84. package/dist/_internal/platform/daemon/surface-actions.js +13 -0
  85. package/dist/_internal/platform/daemon/surface-delivery.d.ts +3 -0
  86. package/dist/_internal/platform/daemon/surface-delivery.d.ts.map +1 -1
  87. package/dist/_internal/platform/daemon/surface-delivery.js +42 -6
  88. package/dist/_internal/platform/daemon/types.d.ts +2 -0
  89. package/dist/_internal/platform/daemon/types.d.ts.map +1 -1
  90. package/dist/_internal/platform/providers/anthropic.d.ts +13 -1
  91. package/dist/_internal/platform/providers/anthropic.d.ts.map +1 -1
  92. package/dist/_internal/platform/providers/anthropic.js +219 -1
  93. package/dist/_internal/platform/providers/interface.d.ts +48 -0
  94. package/dist/_internal/platform/providers/interface.d.ts.map +1 -1
  95. package/dist/_internal/platform/providers/openai.d.ts +13 -1
  96. package/dist/_internal/platform/providers/openai.d.ts.map +1 -1
  97. package/dist/_internal/platform/providers/openai.js +189 -1
  98. package/dist/_internal/platform/version.js +1 -1
  99. package/dist/_internal/platform/voice/index.d.ts +1 -1
  100. package/dist/_internal/platform/voice/index.d.ts.map +1 -1
  101. package/dist/_internal/platform/voice/providers/elevenlabs.d.ts.map +1 -1
  102. package/dist/_internal/platform/voice/providers/elevenlabs.js +150 -4
  103. package/dist/_internal/platform/voice/service.d.ts +2 -1
  104. package/dist/_internal/platform/voice/service.d.ts.map +1 -1
  105. package/dist/_internal/platform/voice/service.js +7 -0
  106. package/dist/_internal/platform/voice/types.d.ts +18 -1
  107. package/dist/_internal/platform/voice/types.d.ts.map +1 -1
  108. package/dist/index.d.ts +2 -0
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +1 -0
  111. package/dist/workers.d.ts +40 -0
  112. package/dist/workers.d.ts.map +1 -0
  113. package/dist/workers.js +144 -0
  114. package/package.json +5 -1
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/adapters/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/adapters/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { DaemonBatchManager } from './manager.js';
2
+ export type { CreateDaemonBatchJobInput, DaemonBatchChatRequest, DaemonBatchFallback, DaemonBatchJob, DaemonBatchJobStatus, DaemonBatchMode, DaemonBatchQueueBackend, DaemonBatchRuntimeSnapshot, DaemonBatchTickResult, } from './types.js';
3
+ export { DaemonBatchError } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/batch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EACV,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DaemonBatchManager } from './manager.js';
2
+ export { DaemonBatchError } from './types.js';
@@ -0,0 +1,41 @@
1
+ import type { ConfigManager } from '../config/manager.js';
2
+ import type { ProviderRegistry } from '../providers/registry.js';
3
+ import type { CreateDaemonBatchJobInput, DaemonBatchJob, DaemonBatchRuntimeSnapshot, DaemonBatchTickResult } from './types.js';
4
+ export declare class DaemonBatchManager {
5
+ private readonly options;
6
+ private readonly store;
7
+ private data;
8
+ private interval;
9
+ private ticking;
10
+ constructor(options: {
11
+ readonly configManager: Pick<ConfigManager, 'get' | 'getControlPlaneConfigDir'>;
12
+ readonly providerRegistry: Pick<ProviderRegistry, 'getCurrentModel' | 'getForModel' | 'getRegistered' | 'listProviders'>;
13
+ readonly storePath?: string;
14
+ });
15
+ start(): void;
16
+ dispose(): void;
17
+ describeRuntime(): Promise<DaemonBatchRuntimeSnapshot>;
18
+ createJob(input: CreateDaemonBatchJobInput): Promise<DaemonBatchJob>;
19
+ getJob(jobId: string): Promise<DaemonBatchJob | null>;
20
+ listJobs(limit?: number): Promise<readonly DaemonBatchJob[]>;
21
+ cancelJob(jobId: string): Promise<DaemonBatchJob>;
22
+ tick(options?: {
23
+ readonly forceSubmit?: boolean;
24
+ }): Promise<DaemonBatchTickResult>;
25
+ private runTick;
26
+ private submitQueuedJobs;
27
+ private submitProviderBatch;
28
+ private pollProviderBatches;
29
+ private applyProviderResults;
30
+ private getBatchProvider;
31
+ private requireProviderBatchSupport;
32
+ private load;
33
+ private persist;
34
+ private getMode;
35
+ private getFallback;
36
+ private getQueueBackend;
37
+ private getNumberConfig;
38
+ private getBooleanConfig;
39
+ private getStringConfig;
40
+ }
41
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/batch/manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,KAAK,EACV,yBAAyB,EACzB,cAAc,EACd,0BAA0B,EAE1B,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAuBpB,qBAAa,kBAAkB;IAO3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;IAC9D,OAAO,CAAC,IAAI,CAAqC;IACjD,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,OAAO,CAA+C;gBAG3C,OAAO,EAAE;QACxB,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,0BAA0B,CAAC,CAAC;QAChF,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC,CAAC;QACzH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B;IAOH,KAAK,IAAI,IAAI;IAOb,OAAO,IAAI,IAAI;IAOT,eAAe,IAAI,OAAO,CAAC,0BAA0B,CAAC;IA8BtD,SAAS,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,CAAC;IAyDpE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKrD,QAAQ,CAAC,KAAK,SAAM,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IAOzD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAkBjD,IAAI,CAAC,OAAO,GAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC;YAQ9E,OAAO;YAgBP,gBAAgB;YA2BhB,mBAAmB;YA+DnB,mBAAmB;IA6DjC,OAAO,CAAC,oBAAoB;IAoC5B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,2BAA2B;YASrB,IAAI;YAOJ,OAAO;IAIrB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,eAAe;CAIxB"}
@@ -0,0 +1,400 @@
1
+ import { join } from 'node:path';
2
+ import { PersistentStore } from '../state/persistent-store.js';
3
+ import { summarizeError } from '../utils/error-display.js';
4
+ import { DaemonBatchError } from './types.js';
5
+ const TERMINAL_JOB_STATUSES = new Set([
6
+ 'completed',
7
+ 'failed',
8
+ 'cancelled',
9
+ 'expired',
10
+ 'dead_lettered',
11
+ ]);
12
+ function now() {
13
+ return Date.now();
14
+ }
15
+ function makeEmptyStore() {
16
+ return { version: 1, jobs: {} };
17
+ }
18
+ function estimateJsonBytes(value) {
19
+ return new TextEncoder().encode(JSON.stringify(value)).byteLength;
20
+ }
21
+ export class DaemonBatchManager {
22
+ options;
23
+ store;
24
+ data = null;
25
+ interval = null;
26
+ ticking = null;
27
+ constructor(options) {
28
+ this.options = options;
29
+ this.store = new PersistentStore(options.storePath ?? join(options.configManager.getControlPlaneConfigDir(), 'batch-jobs.json'));
30
+ }
31
+ start() {
32
+ if (this.interval !== null)
33
+ return;
34
+ this.interval = setInterval(() => {
35
+ void this.tick().catch(() => undefined);
36
+ }, this.getNumberConfig('batch.tickIntervalMs', 60_000));
37
+ }
38
+ dispose() {
39
+ if (this.interval !== null) {
40
+ clearInterval(this.interval);
41
+ this.interval = null;
42
+ }
43
+ }
44
+ async describeRuntime() {
45
+ return {
46
+ mode: this.getMode(),
47
+ fallback: this.getFallback(),
48
+ queueBackend: this.getQueueBackend(),
49
+ cloudflare: {
50
+ enabled: this.getBooleanConfig('cloudflare.enabled', false),
51
+ freeTierMode: this.getBooleanConfig('cloudflare.freeTierMode', true),
52
+ queueName: this.getStringConfig('cloudflare.queueName', 'goodvibes-batch'),
53
+ deadLetterQueueName: this.getStringConfig('cloudflare.deadLetterQueueName', 'goodvibes-batch-dlq'),
54
+ maxQueueOpsPerDay: this.getNumberConfig('cloudflare.maxQueueOpsPerDay', 10_000),
55
+ },
56
+ limits: {
57
+ tickIntervalMs: this.getNumberConfig('batch.tickIntervalMs', 60_000),
58
+ maxDelayMs: this.getNumberConfig('batch.maxDelayMs', 5 * 60 * 1000),
59
+ maxJobsPerProviderBatch: this.getNumberConfig('batch.maxJobsPerProviderBatch', 100),
60
+ maxQueuePayloadBytes: this.getNumberConfig('batch.maxQueuePayloadBytes', 16 * 1024),
61
+ maxQueueMessagesPerDay: this.getNumberConfig('batch.maxQueueMessagesPerDay', 1_000),
62
+ },
63
+ supportedProviders: this.options.providerRegistry
64
+ .listProviders()
65
+ .filter((provider) => Boolean(provider.batch?.endpoints.includes('/v1/chat/completions') ||
66
+ provider.batch?.endpoints.includes('/v1/messages/batches')))
67
+ .map((provider) => provider.name)
68
+ .sort(),
69
+ };
70
+ }
71
+ async createJob(input) {
72
+ if (this.getMode() === 'off') {
73
+ throw new DaemonBatchError('Daemon batch mode is off.', 'BATCH_DISABLED', 409);
74
+ }
75
+ if (input.executionMode === 'live') {
76
+ throw new DaemonBatchError('This endpoint only accepts batch jobs. Use the live daemon route for immediate execution.', 'LIVE_REQUEST_NOT_ACCEPTED', 400);
77
+ }
78
+ if (!input.request || !Array.isArray(input.request.messages) || input.request.messages.length === 0) {
79
+ throw new DaemonBatchError('Batch jobs require request.messages.', 'INVALID_BATCH_REQUEST', 400);
80
+ }
81
+ const defaults = this.options.providerRegistry.getCurrentModel();
82
+ const provider = input.provider?.trim() || defaults.provider;
83
+ const model = input.model?.trim() || defaults.id;
84
+ const providerInstance = this.getBatchProvider(model, provider);
85
+ this.requireProviderBatchSupport(providerInstance, provider);
86
+ const payloadBytes = estimateJsonBytes(input);
87
+ if (input.source?.kind === 'cloudflare-queue') {
88
+ const maxPayload = this.getNumberConfig('batch.maxQueuePayloadBytes', 16 * 1024);
89
+ if (payloadBytes > maxPayload) {
90
+ throw new DaemonBatchError(`Cloudflare queue batch signal is ${payloadBytes} bytes, above configured limit ${maxPayload}. Store the payload in the daemon and queue only a signal.`, 'QUEUE_PAYLOAD_TOO_LARGE', 413);
91
+ }
92
+ }
93
+ const loaded = await this.load();
94
+ const timestamp = now();
95
+ const job = {
96
+ id: `batch-job-${crypto.randomUUID()}`,
97
+ provider,
98
+ model,
99
+ status: 'queued',
100
+ createdAt: timestamp,
101
+ updatedAt: timestamp,
102
+ request: {
103
+ messages: [...input.request.messages],
104
+ ...(input.request.tools ? { tools: [...input.request.tools] } : {}),
105
+ ...(input.request.systemPrompt ? { systemPrompt: input.request.systemPrompt } : {}),
106
+ ...(input.request.maxTokens !== undefined ? { maxTokens: input.request.maxTokens } : {}),
107
+ ...(input.request.reasoningEffort ? { reasoningEffort: input.request.reasoningEffort } : {}),
108
+ ...(input.request.reasoningSummary !== undefined ? { reasoningSummary: input.request.reasoningSummary } : {}),
109
+ },
110
+ ...(input.source ? { source: input.source } : {}),
111
+ ...(input.metadata ? { metadata: { ...input.metadata } } : {}),
112
+ attempts: 0,
113
+ };
114
+ loaded.jobs[job.id] = job;
115
+ await this.persist();
116
+ if (input.flush) {
117
+ await this.tick({ forceSubmit: true });
118
+ return (await this.getJob(job.id)) ?? job;
119
+ }
120
+ return job;
121
+ }
122
+ async getJob(jobId) {
123
+ const loaded = await this.load();
124
+ return loaded.jobs[jobId] ?? null;
125
+ }
126
+ async listJobs(limit = 100) {
127
+ const loaded = await this.load();
128
+ return Object.values(loaded.jobs)
129
+ .sort((a, b) => b.createdAt - a.createdAt)
130
+ .slice(0, Math.max(1, Math.min(limit, 1000)));
131
+ }
132
+ async cancelJob(jobId) {
133
+ const loaded = await this.load();
134
+ const job = loaded.jobs[jobId];
135
+ if (!job)
136
+ throw new DaemonBatchError(`Batch job '${jobId}' was not found.`, 'BATCH_JOB_NOT_FOUND', 404);
137
+ if (TERMINAL_JOB_STATUSES.has(job.status))
138
+ return job;
139
+ if (job.status !== 'queued') {
140
+ throw new DaemonBatchError('Submitted provider batches are cancelled at provider-batch granularity; wait for the result or cancel the provider batch outside this per-job route.', 'BATCH_JOB_ALREADY_SUBMITTED', 409);
141
+ }
142
+ const updated = { ...job, status: 'cancelled', updatedAt: now(), completedAt: now() };
143
+ loaded.jobs[jobId] = updated;
144
+ await this.persist();
145
+ return updated;
146
+ }
147
+ async tick(options = {}) {
148
+ if (this.ticking)
149
+ return this.ticking;
150
+ this.ticking = this.runTick(options).finally(() => {
151
+ this.ticking = null;
152
+ });
153
+ return this.ticking;
154
+ }
155
+ async runTick(options) {
156
+ const result = {
157
+ submittedProviderBatches: 0,
158
+ submittedJobs: 0,
159
+ polledProviderBatches: 0,
160
+ completedJobs: 0,
161
+ failedJobs: 0,
162
+ };
163
+ if (this.getMode() === 'off')
164
+ return result;
165
+ const loaded = await this.load();
166
+ await this.submitQueuedJobs(loaded, result, options.forceSubmit === true);
167
+ await this.pollProviderBatches(loaded, result);
168
+ await this.persist();
169
+ return result;
170
+ }
171
+ async submitQueuedJobs(data, result, forceSubmit) {
172
+ const queued = Object.values(data.jobs).filter((job) => job.status === 'queued');
173
+ if (queued.length === 0)
174
+ return;
175
+ const maxDelayMs = this.getNumberConfig('batch.maxDelayMs', 5 * 60 * 1000);
176
+ const maxJobs = this.getNumberConfig('batch.maxJobsPerProviderBatch', 100);
177
+ const grouped = new Map();
178
+ for (const job of queued) {
179
+ const ageMs = now() - job.createdAt;
180
+ if (!forceSubmit && maxDelayMs > 0 && ageMs < maxDelayMs)
181
+ continue;
182
+ const key = `${job.provider}\u0000${job.model}`;
183
+ const bucket = grouped.get(key) ?? [];
184
+ bucket.push(job);
185
+ grouped.set(key, bucket);
186
+ }
187
+ for (const jobs of grouped.values()) {
188
+ for (let i = 0; i < jobs.length; i += maxJobs) {
189
+ const slice = jobs.slice(i, i + maxJobs);
190
+ if (slice.length === 0)
191
+ continue;
192
+ await this.submitProviderBatch(data, slice, result);
193
+ }
194
+ }
195
+ }
196
+ async submitProviderBatch(data, jobs, result) {
197
+ const first = jobs[0];
198
+ if (!first)
199
+ return;
200
+ try {
201
+ const provider = this.getBatchProvider(first.model, first.provider);
202
+ this.requireProviderBatchSupport(provider, first.provider);
203
+ const created = await provider.batch.createChatBatch({
204
+ requests: jobs.map((job) => ({
205
+ customId: job.id,
206
+ params: {
207
+ model: job.model,
208
+ messages: [...job.request.messages],
209
+ ...(job.request.tools ? { tools: [...job.request.tools] } : {}),
210
+ ...(job.request.systemPrompt ? { systemPrompt: job.request.systemPrompt } : {}),
211
+ ...(job.request.maxTokens !== undefined ? { maxTokens: job.request.maxTokens } : {}),
212
+ ...(job.request.reasoningEffort ? { reasoningEffort: job.request.reasoningEffort } : {}),
213
+ ...(job.request.reasoningSummary !== undefined ? { reasoningSummary: job.request.reasoningSummary } : {}),
214
+ },
215
+ })),
216
+ metadata: {
217
+ source: 'goodvibes-sdk',
218
+ provider: first.provider,
219
+ model: first.model,
220
+ },
221
+ completionWindow: '24h',
222
+ });
223
+ const timestamp = now();
224
+ for (const job of jobs) {
225
+ data.jobs[job.id] = {
226
+ ...job,
227
+ status: created.status === 'completed' ? 'running' : created.status === 'failed' ? 'failed' : 'submitted',
228
+ updatedAt: timestamp,
229
+ attempts: job.attempts + 1,
230
+ providerBatchId: created.providerBatchId,
231
+ providerBatchStatus: created.status,
232
+ submittedAt: timestamp,
233
+ ...(created.status === 'failed'
234
+ ? { completedAt: timestamp, error: { message: 'Provider failed to create batch.', raw: created.raw } }
235
+ : {}),
236
+ };
237
+ }
238
+ result.submittedProviderBatches += 1;
239
+ result.submittedJobs += jobs.length;
240
+ }
241
+ catch (error) {
242
+ const timestamp = now();
243
+ for (const job of jobs) {
244
+ data.jobs[job.id] = {
245
+ ...job,
246
+ status: 'dead_lettered',
247
+ updatedAt: timestamp,
248
+ completedAt: timestamp,
249
+ attempts: job.attempts + 1,
250
+ error: { message: summarizeError(error) },
251
+ };
252
+ }
253
+ result.failedJobs += jobs.length;
254
+ }
255
+ }
256
+ async pollProviderBatches(data, result) {
257
+ const pendingByProviderBatch = new Map();
258
+ for (const job of Object.values(data.jobs)) {
259
+ if (!job.providerBatchId || TERMINAL_JOB_STATUSES.has(job.status))
260
+ continue;
261
+ const key = `${job.provider}\u0000${job.model}\u0000${job.providerBatchId}`;
262
+ const bucket = pendingByProviderBatch.get(key) ?? [];
263
+ bucket.push(job);
264
+ pendingByProviderBatch.set(key, bucket);
265
+ }
266
+ for (const jobs of pendingByProviderBatch.values()) {
267
+ const first = jobs[0];
268
+ if (!first?.providerBatchId)
269
+ continue;
270
+ try {
271
+ const provider = this.getBatchProvider(first.model, first.provider);
272
+ this.requireProviderBatchSupport(provider, first.provider);
273
+ const polled = await provider.batch.retrieveBatch(first.providerBatchId);
274
+ result.polledProviderBatches += 1;
275
+ const timestamp = now();
276
+ for (const job of jobs) {
277
+ data.jobs[job.id] = {
278
+ ...job,
279
+ status: polled.status === 'running' || polled.status === 'submitted' ? 'running' : job.status,
280
+ updatedAt: timestamp,
281
+ providerBatchStatus: polled.status,
282
+ };
283
+ }
284
+ if (polled.resultAvailable || polled.status === 'completed') {
285
+ const providerResults = await provider.batch.getResults(first.providerBatchId);
286
+ this.applyProviderResults(data, providerResults, result);
287
+ }
288
+ else if (polled.status === 'failed' || polled.status === 'cancelled' || polled.status === 'expired') {
289
+ for (const job of jobs) {
290
+ const status = polled.status === 'cancelled' ? 'cancelled' : polled.status === 'expired' ? 'expired' : 'failed';
291
+ data.jobs[job.id] = {
292
+ ...data.jobs[job.id],
293
+ status,
294
+ updatedAt: timestamp,
295
+ completedAt: timestamp,
296
+ error: status === 'failed' ? { message: 'Provider batch failed.', raw: polled.raw } : data.jobs[job.id].error,
297
+ };
298
+ if (status === 'failed')
299
+ result.failedJobs += 1;
300
+ }
301
+ }
302
+ }
303
+ catch (error) {
304
+ const timestamp = now();
305
+ for (const job of jobs) {
306
+ data.jobs[job.id] = {
307
+ ...job,
308
+ status: 'dead_lettered',
309
+ updatedAt: timestamp,
310
+ completedAt: timestamp,
311
+ error: { message: summarizeError(error) },
312
+ };
313
+ result.failedJobs += 1;
314
+ }
315
+ }
316
+ }
317
+ }
318
+ applyProviderResults(data, providerResults, tickResult) {
319
+ const timestamp = now();
320
+ for (const providerResult of providerResults) {
321
+ const job = data.jobs[providerResult.customId];
322
+ if (!job || TERMINAL_JOB_STATUSES.has(job.status))
323
+ continue;
324
+ if (providerResult.status === 'succeeded' && providerResult.response) {
325
+ data.jobs[job.id] = {
326
+ ...job,
327
+ status: 'completed',
328
+ updatedAt: timestamp,
329
+ completedAt: timestamp,
330
+ result: providerResult.response,
331
+ };
332
+ tickResult.completedJobs += 1;
333
+ continue;
334
+ }
335
+ const status = providerResult.status === 'cancelled'
336
+ ? 'cancelled'
337
+ : providerResult.status === 'expired'
338
+ ? 'expired'
339
+ : 'failed';
340
+ data.jobs[job.id] = {
341
+ ...job,
342
+ status,
343
+ updatedAt: timestamp,
344
+ completedAt: timestamp,
345
+ error: providerResult.error ?? { message: `Provider batch request ${status}.`, raw: providerResult.raw },
346
+ };
347
+ if (status === 'failed')
348
+ tickResult.failedJobs += 1;
349
+ }
350
+ }
351
+ getBatchProvider(model, providerId) {
352
+ if (providerId === 'openai')
353
+ return this.options.providerRegistry.getRegistered('openai');
354
+ return this.options.providerRegistry.getForModel(model, providerId);
355
+ }
356
+ requireProviderBatchSupport(provider, providerId) {
357
+ if (!provider.batch) {
358
+ throw new DaemonBatchError(`Provider '${providerId}' does not expose a provider Batch API adapter.`, 'BATCH_PROVIDER_UNSUPPORTED', 409);
359
+ }
360
+ if (typeof provider.isConfigured === 'function' && !provider.isConfigured()) {
361
+ throw new DaemonBatchError(`Provider '${providerId}' is not configured for Batch API use. Batch API routes require provider API-key credentials.`, 'BATCH_PROVIDER_NOT_CONFIGURED', 409);
362
+ }
363
+ }
364
+ async load() {
365
+ if (this.data)
366
+ return this.data;
367
+ this.data = await this.store.load() ?? makeEmptyStore();
368
+ if (this.data.version !== 1 || !this.data.jobs)
369
+ this.data = makeEmptyStore();
370
+ return this.data;
371
+ }
372
+ async persist() {
373
+ if (this.data)
374
+ await this.store.persist(this.data);
375
+ }
376
+ getMode() {
377
+ const value = this.options.configManager.get('batch.mode');
378
+ return value === 'explicit' || value === 'eligible-by-default' ? value : 'off';
379
+ }
380
+ getFallback() {
381
+ const value = this.options.configManager.get('batch.fallback');
382
+ return value === 'fail' ? 'fail' : 'live';
383
+ }
384
+ getQueueBackend() {
385
+ const value = this.options.configManager.get('batch.queueBackend');
386
+ return value === 'cloudflare' ? 'cloudflare' : 'local';
387
+ }
388
+ getNumberConfig(key, fallback) {
389
+ const value = this.options.configManager.get(key);
390
+ return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
391
+ }
392
+ getBooleanConfig(key, fallback) {
393
+ const value = this.options.configManager.get(key);
394
+ return typeof value === 'boolean' ? value : fallback;
395
+ }
396
+ getStringConfig(key, fallback) {
397
+ const value = this.options.configManager.get(key);
398
+ return typeof value === 'string' ? value : fallback;
399
+ }
400
+ }
@@ -0,0 +1,85 @@
1
+ import type { ChatRequest, ChatResponse, ProviderBatchStatus, ProviderMessage } from '../providers/interface.js';
2
+ import type { ToolDefinition } from '../types/tools.js';
3
+ export type DaemonBatchMode = 'off' | 'explicit' | 'eligible-by-default';
4
+ export type DaemonBatchFallback = 'live' | 'fail';
5
+ export type DaemonBatchQueueBackend = 'local' | 'cloudflare';
6
+ export type DaemonBatchJobStatus = 'queued' | 'submitted' | 'running' | 'completed' | 'failed' | 'cancelled' | 'expired' | 'dead_lettered';
7
+ export interface DaemonBatchChatRequest {
8
+ readonly messages: readonly ProviderMessage[];
9
+ readonly tools?: readonly ToolDefinition[];
10
+ readonly systemPrompt?: string;
11
+ readonly maxTokens?: number;
12
+ readonly reasoningEffort?: ChatRequest['reasoningEffort'];
13
+ readonly reasoningSummary?: boolean;
14
+ }
15
+ export interface CreateDaemonBatchJobInput {
16
+ readonly provider?: string;
17
+ readonly model?: string;
18
+ readonly request: DaemonBatchChatRequest;
19
+ readonly executionMode?: 'batch' | 'live';
20
+ readonly source?: {
21
+ readonly kind: 'daemon-api' | 'cloudflare-worker' | 'cloudflare-queue' | 'automation' | 'client';
22
+ readonly id?: string;
23
+ };
24
+ readonly metadata?: Record<string, string>;
25
+ readonly flush?: boolean;
26
+ }
27
+ export interface DaemonBatchJob {
28
+ readonly id: string;
29
+ readonly provider: string;
30
+ readonly model: string;
31
+ readonly status: DaemonBatchJobStatus;
32
+ readonly createdAt: number;
33
+ readonly updatedAt: number;
34
+ readonly request: DaemonBatchChatRequest;
35
+ readonly source?: CreateDaemonBatchJobInput['source'];
36
+ readonly metadata?: Record<string, string>;
37
+ readonly attempts: number;
38
+ readonly providerBatchId?: string;
39
+ readonly providerBatchStatus?: ProviderBatchStatus;
40
+ readonly submittedAt?: number;
41
+ readonly completedAt?: number;
42
+ readonly result?: ChatResponse;
43
+ readonly error?: {
44
+ readonly message: string;
45
+ readonly code?: string;
46
+ readonly raw?: unknown;
47
+ };
48
+ }
49
+ export interface DaemonBatchTickResult {
50
+ submittedProviderBatches: number;
51
+ submittedJobs: number;
52
+ polledProviderBatches: number;
53
+ completedJobs: number;
54
+ failedJobs: number;
55
+ }
56
+ export interface DaemonBatchRuntimeSnapshot {
57
+ readonly mode: DaemonBatchMode;
58
+ readonly fallback: DaemonBatchFallback;
59
+ readonly queueBackend: DaemonBatchQueueBackend;
60
+ readonly cloudflare: {
61
+ readonly enabled: boolean;
62
+ readonly freeTierMode: boolean;
63
+ readonly queueName: string;
64
+ readonly deadLetterQueueName: string;
65
+ readonly maxQueueOpsPerDay: number;
66
+ };
67
+ readonly limits: {
68
+ readonly tickIntervalMs: number;
69
+ readonly maxDelayMs: number;
70
+ readonly maxJobsPerProviderBatch: number;
71
+ readonly maxQueuePayloadBytes: number;
72
+ readonly maxQueueMessagesPerDay: number;
73
+ };
74
+ readonly supportedProviders: readonly string[];
75
+ }
76
+ export interface DaemonBatchStoreData extends Record<string, unknown> {
77
+ version: 1;
78
+ jobs: Record<string, DaemonBatchJob>;
79
+ }
80
+ export declare class DaemonBatchError extends Error {
81
+ readonly status: number;
82
+ readonly code: string;
83
+ constructor(message: string, code: string, status?: number);
84
+ }
85
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/batch/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export class DaemonBatchError extends Error {
2
+ status;
3
+ code;
4
+ constructor(message, code, status = 400) {
5
+ super(message);
6
+ this.name = 'DaemonBatchError';
7
+ this.code = code;
8
+ this.status = status;
9
+ }
10
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/channels/builtin/plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/channels/builtin/plugins.ts"],"names":[],"mappings":"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"}
@@ -126,6 +126,7 @@ export function registerBuiltinChannelPlugins(context) {
126
126
  webhookPath: '/webhook/ntfy',
127
127
  handleInbound: (req) => handleNtfySurfaceWebhook(req, context.deps.buildSurfaceAdapterContext()),
128
128
  deliverReply: (pending, message) => context.deps.deliverNtfyAgentReply(pending, message),
129
+ deliverProgress: (pending, progress) => context.deps.deliverSurfaceProgress(pending, progress),
129
130
  notifyApproval: (approval, binding) => context.deps.deliverNtfyApprovalUpdate(approval, binding),
130
131
  getStatus: async () => ({
131
132
  id: 'surface:ntfy',
@@ -6,6 +6,8 @@ export interface TrackedChannelReply {
6
6
  readonly agentId: string;
7
7
  readonly surfaceKind: ChannelSurface;
8
8
  readonly task: string;
9
+ readonly agentTask?: string;
10
+ readonly workflowChainId?: string;
9
11
  readonly createdAt: number;
10
12
  readonly sessionId?: string;
11
13
  readonly routeId?: string;
@@ -23,6 +25,7 @@ export declare class ChannelReplyPipeline {
23
25
  private readonly routeBindings;
24
26
  private readonly now;
25
27
  private readonly buffers;
28
+ private readonly workflowChains;
26
29
  private readonly unsubscribers;
27
30
  constructor(deps: ReplyPipelineDeps);
28
31
  attachRuntimeBus(runtimeBus: RuntimeEventBus | null): void;
@@ -32,9 +35,14 @@ export declare class ChannelReplyPipeline {
32
35
  has(agentId: string): boolean;
33
36
  getPending(agentId: string): TrackedChannelReply | null;
34
37
  deliverProgress(agentId: string, explicitText?: string, force?: boolean): Promise<ChannelRenderResult | null>;
35
- deliverFinal(agentId: string, explicitText: string): Promise<ChannelRenderResult | null>;
38
+ deliverFinal(agentId: string, explicitText: string, options?: {
39
+ readonly keepTracking?: boolean;
40
+ }): Promise<ChannelRenderResult | null>;
36
41
  private handleEnvelope;
42
+ private handleWorkflowEnvelope;
37
43
  private trackChildPendingReply;
44
+ private findPendingForWorkflowTask;
45
+ private associateWorkflowChain;
38
46
  private resolvePolicy;
39
47
  private dispatch;
40
48
  private disposeSubscriptions;
@@ -1 +1 @@
1
- {"version":3,"file":"reply-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/channels/reply-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACzG,OAAO,KAAK,EACV,kBAAkB,EAIlB,mBAAmB,EAEnB,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAK9D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AA+OD,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,oBAAoB,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,GACvE,kBAAkB,EAAE,CAyFtB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;gBAE3C,IAAI,EAAE,iBAAiB;IAOnC,gBAAgB,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAmB1D,OAAO,IAAI,IAAI;IAKf,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAOhD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAIjD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAe3G,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAwBhF,cAAc;IAsC5B,OAAO,CAAC,sBAAsB;YAmBhB,aAAa;YAIb,QAAQ;IAgCtB,OAAO,CAAC,oBAAoB;CAK7B"}
1
+ {"version":3,"file":"reply-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/channels/reply-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAiB,MAAM,4BAA4B,CAAC;AACxH,OAAO,KAAK,EACV,kBAAkB,EAIlB,mBAAmB,EAEnB,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAK9D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AA+PD,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,oBAAoB,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,GACvE,kBAAkB,EAAE,CAqItB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;gBAE3C,IAAI,EAAE,iBAAiB;IAOnC,gBAAgB,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAoB1D,OAAO,IAAI,IAAI;IAMf,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAUhD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS9B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAIjD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAe3G,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;QAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO,GAChD,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;YA0BxB,cAAc;YAiDd,sBAAsB;IAsCpC,OAAO,CAAC,sBAAsB;IAmB9B,OAAO,CAAC,0BAA0B;IAgBlC,OAAO,CAAC,sBAAsB;YAahB,aAAa;YAIb,QAAQ;IAgCtB,OAAO,CAAC,oBAAoB;CAK7B"}