ds4-context-core 0.1.0

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 (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/dist/artifacts/artifact-manager.d.ts +58 -0
  4. package/dist/artifacts/artifact-manager.d.ts.map +1 -0
  5. package/dist/artifacts/artifact-manager.js +445 -0
  6. package/dist/artifacts/artifact-manager.js.map +1 -0
  7. package/dist/artifacts/artifact-store.d.ts +33 -0
  8. package/dist/artifacts/artifact-store.d.ts.map +1 -0
  9. package/dist/artifacts/artifact-store.js +116 -0
  10. package/dist/artifacts/artifact-store.js.map +1 -0
  11. package/dist/compaction/compaction-record.d.ts +74 -0
  12. package/dist/compaction/compaction-record.d.ts.map +1 -0
  13. package/dist/compaction/compaction-record.js +113 -0
  14. package/dist/compaction/compaction-record.js.map +1 -0
  15. package/dist/compaction/summary-contract.d.ts +68 -0
  16. package/dist/compaction/summary-contract.d.ts.map +1 -0
  17. package/dist/compaction/summary-contract.js +315 -0
  18. package/dist/compaction/summary-contract.js.map +1 -0
  19. package/dist/compaction/summary-graph.d.ts +48 -0
  20. package/dist/compaction/summary-graph.d.ts.map +1 -0
  21. package/dist/compaction/summary-graph.js +123 -0
  22. package/dist/compaction/summary-graph.js.map +1 -0
  23. package/dist/config/config-loader.d.ts +18 -0
  24. package/dist/config/config-loader.d.ts.map +1 -0
  25. package/dist/config/config-loader.js +305 -0
  26. package/dist/config/config-loader.js.map +1 -0
  27. package/dist/config/config.d.ts +113 -0
  28. package/dist/config/config.d.ts.map +1 -0
  29. package/dist/config/config.js +89 -0
  30. package/dist/config/config.js.map +1 -0
  31. package/dist/continuation/native-continuation.d.ts +107 -0
  32. package/dist/continuation/native-continuation.d.ts.map +1 -0
  33. package/dist/continuation/native-continuation.js +374 -0
  34. package/dist/continuation/native-continuation.js.map +1 -0
  35. package/dist/core/budget-manager.d.ts +26 -0
  36. package/dist/core/budget-manager.d.ts.map +1 -0
  37. package/dist/core/budget-manager.js +42 -0
  38. package/dist/core/budget-manager.js.map +1 -0
  39. package/dist/core/canonical-message.d.ts +69 -0
  40. package/dist/core/canonical-message.d.ts.map +1 -0
  41. package/dist/core/canonical-message.js +2 -0
  42. package/dist/core/canonical-message.js.map +1 -0
  43. package/dist/core/model-awareness.d.ts +59 -0
  44. package/dist/core/model-awareness.d.ts.map +1 -0
  45. package/dist/core/model-awareness.js +177 -0
  46. package/dist/core/model-awareness.js.map +1 -0
  47. package/dist/core/model-profile.d.ts +27 -0
  48. package/dist/core/model-profile.d.ts.map +1 -0
  49. package/dist/core/model-profile.js +29 -0
  50. package/dist/core/model-profile.js.map +1 -0
  51. package/dist/core/token-estimator.d.ts +4 -0
  52. package/dist/core/token-estimator.d.ts.map +1 -0
  53. package/dist/core/token-estimator.js +64 -0
  54. package/dist/core/token-estimator.js.map +1 -0
  55. package/dist/index.d.ts +37 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +37 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/manifest/context-manifest.d.ts +163 -0
  60. package/dist/manifest/context-manifest.d.ts.map +1 -0
  61. package/dist/manifest/context-manifest.js +2 -0
  62. package/dist/manifest/context-manifest.js.map +1 -0
  63. package/dist/manifest/observer.d.ts +63 -0
  64. package/dist/manifest/observer.d.ts.map +1 -0
  65. package/dist/manifest/observer.js +150 -0
  66. package/dist/manifest/observer.js.map +1 -0
  67. package/dist/memory/memory-manager.d.ts +112 -0
  68. package/dist/memory/memory-manager.d.ts.map +1 -0
  69. package/dist/memory/memory-manager.js +499 -0
  70. package/dist/memory/memory-manager.js.map +1 -0
  71. package/dist/memory/memory-types.d.ts +126 -0
  72. package/dist/memory/memory-types.d.ts.map +1 -0
  73. package/dist/memory/memory-types.js +73 -0
  74. package/dist/memory/memory-types.js.map +1 -0
  75. package/dist/persistence/migrations.d.ts +17 -0
  76. package/dist/persistence/migrations.d.ts.map +1 -0
  77. package/dist/persistence/migrations.js +588 -0
  78. package/dist/persistence/migrations.js.map +1 -0
  79. package/dist/persistence/repositories/artifact-repository.d.ts +50 -0
  80. package/dist/persistence/repositories/artifact-repository.d.ts.map +1 -0
  81. package/dist/persistence/repositories/artifact-repository.js +186 -0
  82. package/dist/persistence/repositories/artifact-repository.js.map +1 -0
  83. package/dist/persistence/repositories/context-manifest-repository.d.ts +19 -0
  84. package/dist/persistence/repositories/context-manifest-repository.d.ts.map +1 -0
  85. package/dist/persistence/repositories/context-manifest-repository.js +144 -0
  86. package/dist/persistence/repositories/context-manifest-repository.js.map +1 -0
  87. package/dist/persistence/repositories/memory-repository.d.ts +33 -0
  88. package/dist/persistence/repositories/memory-repository.d.ts.map +1 -0
  89. package/dist/persistence/repositories/memory-repository.js +429 -0
  90. package/dist/persistence/repositories/memory-repository.js.map +1 -0
  91. package/dist/persistence/repositories/project-knowledge-repository.d.ts +65 -0
  92. package/dist/persistence/repositories/project-knowledge-repository.d.ts.map +1 -0
  93. package/dist/persistence/repositories/project-knowledge-repository.js +248 -0
  94. package/dist/persistence/repositories/project-knowledge-repository.js.map +1 -0
  95. package/dist/persistence/repositories/session-index-repository.d.ts +81 -0
  96. package/dist/persistence/repositories/session-index-repository.d.ts.map +1 -0
  97. package/dist/persistence/repositories/session-index-repository.js +220 -0
  98. package/dist/persistence/repositories/session-index-repository.js.map +1 -0
  99. package/dist/persistence/repositories/summary-repository.d.ts +16 -0
  100. package/dist/persistence/repositories/summary-repository.d.ts.map +1 -0
  101. package/dist/persistence/repositories/summary-repository.js +242 -0
  102. package/dist/persistence/repositories/summary-repository.js.map +1 -0
  103. package/dist/persistence/sqlite.d.ts +45 -0
  104. package/dist/persistence/sqlite.d.ts.map +1 -0
  105. package/dist/persistence/sqlite.js +137 -0
  106. package/dist/persistence/sqlite.js.map +1 -0
  107. package/dist/planner/atomic-groups.d.ts +15 -0
  108. package/dist/planner/atomic-groups.d.ts.map +1 -0
  109. package/dist/planner/atomic-groups.js +177 -0
  110. package/dist/planner/atomic-groups.js.map +1 -0
  111. package/dist/planner/context-planner.d.ts +49 -0
  112. package/dist/planner/context-planner.d.ts.map +1 -0
  113. package/dist/planner/context-planner.js +367 -0
  114. package/dist/planner/context-planner.js.map +1 -0
  115. package/dist/privacy/privacy-policy.d.ts +58 -0
  116. package/dist/privacy/privacy-policy.d.ts.map +1 -0
  117. package/dist/privacy/privacy-policy.js +412 -0
  118. package/dist/privacy/privacy-policy.js.map +1 -0
  119. package/dist/project/file-indexer.d.ts +32 -0
  120. package/dist/project/file-indexer.d.ts.map +1 -0
  121. package/dist/project/file-indexer.js +374 -0
  122. package/dist/project/file-indexer.js.map +1 -0
  123. package/dist/project/git-state.d.ts +12 -0
  124. package/dist/project/git-state.d.ts.map +1 -0
  125. package/dist/project/git-state.js +109 -0
  126. package/dist/project/git-state.js.map +1 -0
  127. package/dist/project/project-knowledge.d.ts +63 -0
  128. package/dist/project/project-knowledge.d.ts.map +1 -0
  129. package/dist/project/project-knowledge.js +332 -0
  130. package/dist/project/project-knowledge.js.map +1 -0
  131. package/dist/retrieval/retrieval-engine.d.ts +55 -0
  132. package/dist/retrieval/retrieval-engine.d.ts.map +1 -0
  133. package/dist/retrieval/retrieval-engine.js +290 -0
  134. package/dist/retrieval/retrieval-engine.js.map +1 -0
  135. package/dist/retrieval/task-descriptor.d.ts +17 -0
  136. package/dist/retrieval/task-descriptor.d.ts.map +1 -0
  137. package/dist/retrieval/task-descriptor.js +107 -0
  138. package/dist/retrieval/task-descriptor.js.map +1 -0
  139. package/dist/shared/hash.d.ts +2 -0
  140. package/dist/shared/hash.d.ts.map +1 -0
  141. package/dist/shared/hash.js +5 -0
  142. package/dist/shared/hash.js.map +1 -0
  143. package/dist/shared/logging.d.ts +27 -0
  144. package/dist/shared/logging.d.ts.map +1 -0
  145. package/dist/shared/logging.js +83 -0
  146. package/dist/shared/logging.js.map +1 -0
  147. package/dist/shared/stable-json.d.ts +2 -0
  148. package/dist/shared/stable-json.d.ts.map +1 -0
  149. package/dist/shared/stable-json.js +38 -0
  150. package/dist/shared/stable-json.js.map +1 -0
  151. package/package.json +56 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-continuation.d.ts","sourceRoot":"","sources":["../../src/continuation/native-continuation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,374 @@
1
+ import { sha256 } from "../shared/hash.js";
2
+ import { stableStringify } from "../shared/stable-json.js";
3
+ export const NATIVE_CONTINUATION_STRATEGY = "openai-previous-response-v1";
4
+ function isRecord(value) {
5
+ return value !== null && typeof value === "object" && !Array.isArray(value);
6
+ }
7
+ function profileKey(provider, model) {
8
+ return `${provider}/${model}`;
9
+ }
10
+ function stateKey(sessionId, provider, model) {
11
+ return `${sessionId}\0${provider}\0${model}`;
12
+ }
13
+ function hashValue(value) {
14
+ return sha256(stableStringify(value));
15
+ }
16
+ function requestBodyHash(payload) {
17
+ const { input: _input, previous_response_id: _previousResponseId, ...body } = payload;
18
+ return hashValue({ ...body, store: true });
19
+ }
20
+ function prefixMatches(current, expected) {
21
+ if (current.length < expected.length)
22
+ return false;
23
+ for (let index = 0; index < expected.length; index++) {
24
+ if (current[index] !== expected[index])
25
+ return false;
26
+ }
27
+ return true;
28
+ }
29
+ function cloneManifest(value) {
30
+ return { ...value };
31
+ }
32
+ export function nativeContinuationProfileMatches(profiles, provider, model) {
33
+ const exact = profileKey(provider, model);
34
+ return profiles.includes(exact) || profiles.includes(`${provider}/*`);
35
+ }
36
+ export function nativeContinuationProviderIds(profiles) {
37
+ return [...new Set(profiles.flatMap((profile) => {
38
+ const separator = profile.indexOf("/");
39
+ return separator > 0 ? [profile.slice(0, separator)] : [];
40
+ }))].sort();
41
+ }
42
+ export function continuationItemHashes(items) {
43
+ return items.map(hashValue);
44
+ }
45
+ export function disabledNativeContinuationDiagnostics(config) {
46
+ return {
47
+ enabled: config?.enabled ?? false,
48
+ allowProviderStorage: config?.allowProviderStorage ?? false,
49
+ strategy: NATIVE_CONTINUATION_STRATEGY,
50
+ profiles: [...(config?.profiles ?? [])],
51
+ registeredProviders: [],
52
+ status: "disabled",
53
+ stateAvailable: false,
54
+ requests: 0,
55
+ fullReplayRequests: 0,
56
+ continuationRequests: 0,
57
+ continuationSuccesses: 0,
58
+ invalidations: 0,
59
+ retryAttempts: 0,
60
+ retrySuccesses: 0,
61
+ retryFailures: 0,
62
+ warnings: [],
63
+ };
64
+ }
65
+ export class NativeContinuationManager {
66
+ config;
67
+ now;
68
+ state;
69
+ sequence = 0;
70
+ pendingSequence;
71
+ registeredProviders = new Set();
72
+ registrationWarnings = new Set();
73
+ diagnosticsValue;
74
+ constructor(config, now = Date.now) {
75
+ this.config = config;
76
+ this.now = now;
77
+ this.diagnosticsValue = disabledNativeContinuationDiagnostics(config);
78
+ this.diagnosticsValue.status = config.enabled ? "idle" : "disabled";
79
+ }
80
+ providerIds() {
81
+ if (!this.config.enabled || !this.config.allowProviderStorage)
82
+ return [];
83
+ return nativeContinuationProviderIds(this.config.profiles);
84
+ }
85
+ registerProvider(provider) {
86
+ this.registeredProviders.add(provider);
87
+ this.registrationWarnings.delete(provider);
88
+ this.refreshRegistrationDiagnostics();
89
+ }
90
+ providerRegistrationFailed(provider) {
91
+ this.registrationWarnings.add(provider);
92
+ this.refreshRegistrationDiagnostics();
93
+ }
94
+ refreshRegistrationDiagnostics() {
95
+ this.diagnosticsValue = {
96
+ ...this.diagnosticsValue,
97
+ registeredProviders: [...this.registeredProviders].sort(),
98
+ warnings: [...this.registrationWarnings]
99
+ .sort()
100
+ .map((provider) => `Native continuation provider wrapper unavailable for ${provider}`),
101
+ status: this.registrationWarnings.size > 0
102
+ ? "error"
103
+ : !this.config.enabled
104
+ ? "disabled"
105
+ : this.state
106
+ ? "ready"
107
+ : "idle",
108
+ };
109
+ }
110
+ initialManifest(provider, model, managed, api = "openai-responses") {
111
+ const profileEligible = nativeContinuationProfileMatches(this.config.profiles, provider, model);
112
+ const registered = this.registeredProviders.has(provider);
113
+ const apiEligible = api === "openai-responses";
114
+ const enabled = this.config.enabled && this.config.allowProviderStorage;
115
+ const eligible = enabled && managed && profileEligible && registered && apiEligible;
116
+ return {
117
+ enabled,
118
+ eligible,
119
+ strategy: NATIVE_CONTINUATION_STRATEGY,
120
+ providerStorage: enabled ? "opt-in" : "disabled",
121
+ mode: eligible ? "pending" : enabled ? "managed-replay" : "disabled",
122
+ attempted: false,
123
+ stateReused: false,
124
+ fullInputItems: 0,
125
+ sentInputItems: 0,
126
+ omittedInputItems: 0,
127
+ retry: "none",
128
+ ...(!eligible ? {
129
+ fallbackReason: !enabled
130
+ ? "disabled"
131
+ : !managed
132
+ ? "managed-context-required"
133
+ : !profileEligible
134
+ ? "profile-not-enabled"
135
+ : !apiEligible
136
+ ? "openai-responses-api-required"
137
+ : "provider-wrapper-unavailable",
138
+ } : {}),
139
+ };
140
+ }
141
+ prepare(request) {
142
+ if (request.requestSessionId !== request.canonicalSessionId) {
143
+ return { payload: request.payload, tracked: false };
144
+ }
145
+ const initial = this.initialManifest(request.provider, request.model, request.managed, request.api);
146
+ if (!initial.eligible) {
147
+ this.recordDecision(initial, request.provider, request.model);
148
+ return { payload: request.payload, tracked: true, decision: initial };
149
+ }
150
+ this.diagnosticsValue.requests++;
151
+ if (!isRecord(request.payload)
152
+ || !Array.isArray(request.payload.input)
153
+ || request.payload.model !== request.model
154
+ || request.payload.stream !== true) {
155
+ const decision = {
156
+ ...initial,
157
+ mode: "managed-replay",
158
+ fallbackReason: "unsupported-provider-payload",
159
+ };
160
+ this.recordDecision(decision, request.provider, request.model, "fallback");
161
+ return { payload: request.payload, tracked: true, decision };
162
+ }
163
+ const existingContinuation = request.payload.previous_response_id;
164
+ if (typeof existingContinuation === "string" && existingContinuation.length > 0) {
165
+ this.invalidateState("external-continuation-detected");
166
+ const decision = {
167
+ ...initial,
168
+ mode: "external-continuation",
169
+ fallbackReason: "provider-payload-already-continued",
170
+ };
171
+ this.recordDecision(decision, request.provider, request.model, "fallback");
172
+ return { payload: request.payload, tracked: true, decision };
173
+ }
174
+ const { previous_response_id: _previousResponseId, ...payloadWithoutContinuation } = request.payload;
175
+ const fullPayload = {
176
+ ...payloadWithoutContinuation,
177
+ input: request.payload.input,
178
+ store: true,
179
+ };
180
+ const itemHashes = continuationItemHashes(request.payload.input);
181
+ const bodyHash = requestBodyHash(fullPayload);
182
+ const key = stateKey(request.canonicalSessionId, request.provider, request.model);
183
+ let invalidationReason;
184
+ let stateAgeMs;
185
+ let deltaStart;
186
+ if (request.forceManagedReplay) {
187
+ invalidationReason = this.invalidateState(request.fallbackReason ?? "forced-managed-replay");
188
+ }
189
+ else if (this.state) {
190
+ if (this.state.key !== key) {
191
+ invalidationReason = this.invalidateState("continuation-identity-changed");
192
+ }
193
+ else {
194
+ stateAgeMs = Math.max(0, this.now() - this.state.completedAt);
195
+ if (stateAgeMs > this.config.maxStateAgeMs) {
196
+ invalidationReason = this.invalidateState("continuation-state-expired");
197
+ }
198
+ else if (this.state.requestBodyHash !== bodyHash) {
199
+ invalidationReason = this.invalidateState("provider-request-options-changed");
200
+ }
201
+ else {
202
+ const baseline = [
203
+ ...this.state.requestItemHashes,
204
+ ...this.state.responseItemHashes,
205
+ ];
206
+ if (!prefixMatches(itemHashes, baseline)) {
207
+ invalidationReason = this.invalidateState("managed-context-prefix-changed");
208
+ }
209
+ else if (itemHashes.length === baseline.length) {
210
+ invalidationReason = this.invalidateState("continuation-delta-empty");
211
+ }
212
+ else {
213
+ deltaStart = baseline.length;
214
+ }
215
+ }
216
+ }
217
+ }
218
+ const usedContinuation = deltaStart !== undefined && this.state !== undefined;
219
+ const sentInput = usedContinuation
220
+ ? request.payload.input.slice(deltaStart)
221
+ : request.payload.input;
222
+ const sentPayload = usedContinuation
223
+ ? {
224
+ ...fullPayload,
225
+ input: sentInput,
226
+ previous_response_id: this.state.responseId,
227
+ }
228
+ : fullPayload;
229
+ const retry = request.retryOfContinuation ? "pending" : "none";
230
+ const fallbackReason = usedContinuation
231
+ ? undefined
232
+ : request.fallbackReason
233
+ ?? invalidationReason
234
+ ?? "continuation-cold-start";
235
+ const decision = {
236
+ ...initial,
237
+ mode: usedContinuation ? "native-continuation" : "managed-replay",
238
+ attempted: usedContinuation || Boolean(request.retryOfContinuation),
239
+ stateReused: usedContinuation,
240
+ fullInputItems: request.payload.input.length,
241
+ sentInputItems: sentInput.length,
242
+ omittedInputItems: request.payload.input.length - sentInput.length,
243
+ retry,
244
+ ...(stateAgeMs !== undefined ? { stateAgeMs } : {}),
245
+ ...(fallbackReason ? { fallbackReason } : {}),
246
+ ...(invalidationReason ? { invalidationReason } : {}),
247
+ };
248
+ const attempt = {
249
+ sequence: ++this.sequence,
250
+ key,
251
+ ...(request.manifestId ? { manifestId: request.manifestId } : {}),
252
+ ...(request.branchLeafId ? { branchLeafId: request.branchLeafId } : {}),
253
+ provider: request.provider,
254
+ model: request.model,
255
+ requestItemHashes: itemHashes,
256
+ requestBodyHash: bodyHash,
257
+ fullInputItems: request.payload.input.length,
258
+ sentInputItems: sentInput.length,
259
+ usedContinuation,
260
+ retryOfContinuation: Boolean(request.retryOfContinuation),
261
+ decision,
262
+ };
263
+ this.pendingSequence = attempt.sequence;
264
+ if (!usedContinuation)
265
+ this.state = undefined;
266
+ if (usedContinuation)
267
+ this.diagnosticsValue.continuationRequests++;
268
+ else
269
+ this.diagnosticsValue.fullReplayRequests++;
270
+ this.recordDecision(decision, request.provider, request.model, usedContinuation ? "continuing" : "fallback");
271
+ return { payload: sentPayload, tracked: true, attempt, decision };
272
+ }
273
+ beginManagedReplayRetry(attempt) {
274
+ if (!attempt.usedContinuation)
275
+ return;
276
+ this.diagnosticsValue.retryAttempts++;
277
+ this.invalidateState("provider-rejected-continuation");
278
+ }
279
+ complete(attempt, responseId, responseItemHashes) {
280
+ if (this.pendingSequence !== attempt.sequence)
281
+ return cloneManifest(attempt.decision);
282
+ this.pendingSequence = undefined;
283
+ const normalizedResponseId = responseId?.trim();
284
+ if (!normalizedResponseId || responseItemHashes.length === 0) {
285
+ const reason = !normalizedResponseId ? "provider-response-id-missing" : "provider-response-items-missing";
286
+ this.invalidateState(reason);
287
+ if (attempt.retryOfContinuation)
288
+ this.diagnosticsValue.retryFailures++;
289
+ const decision = {
290
+ ...attempt.decision,
291
+ mode: "managed-replay",
292
+ stateReused: false,
293
+ retry: attempt.retryOfContinuation ? "failed" : attempt.decision.retry,
294
+ fallbackReason: reason,
295
+ invalidationReason: reason,
296
+ };
297
+ this.recordDecision(decision, attempt.provider, attempt.model, "fallback");
298
+ return decision;
299
+ }
300
+ this.state = {
301
+ key: attempt.key,
302
+ responseId: normalizedResponseId,
303
+ requestItemHashes: [...attempt.requestItemHashes],
304
+ responseItemHashes: [...responseItemHashes],
305
+ requestBodyHash: attempt.requestBodyHash,
306
+ completedAt: this.now(),
307
+ };
308
+ if (attempt.usedContinuation)
309
+ this.diagnosticsValue.continuationSuccesses++;
310
+ if (attempt.retryOfContinuation)
311
+ this.diagnosticsValue.retrySuccesses++;
312
+ const decision = {
313
+ ...attempt.decision,
314
+ retry: attempt.retryOfContinuation ? "succeeded" : attempt.decision.retry,
315
+ };
316
+ this.recordDecision(decision, attempt.provider, attempt.model, "ready");
317
+ return decision;
318
+ }
319
+ fail(attempt, reason) {
320
+ if (this.pendingSequence === attempt.sequence)
321
+ this.pendingSequence = undefined;
322
+ this.invalidateState(reason);
323
+ if (attempt.retryOfContinuation)
324
+ this.diagnosticsValue.retryFailures++;
325
+ const decision = {
326
+ ...attempt.decision,
327
+ mode: attempt.usedContinuation ? "native-continuation" : "managed-replay",
328
+ retry: attempt.retryOfContinuation ? "failed" : attempt.decision.retry,
329
+ fallbackReason: reason,
330
+ invalidationReason: reason,
331
+ };
332
+ this.recordDecision(decision, attempt.provider, attempt.model, "fallback");
333
+ return decision;
334
+ }
335
+ invalidate(reason) {
336
+ this.pendingSequence = undefined;
337
+ this.invalidateState(reason);
338
+ }
339
+ shouldRetryManagedReplay() {
340
+ return this.config.retryManagedReplay;
341
+ }
342
+ diagnostics() {
343
+ return {
344
+ ...this.diagnosticsValue,
345
+ profiles: [...this.diagnosticsValue.profiles],
346
+ registeredProviders: [...this.diagnosticsValue.registeredProviders],
347
+ ...(this.diagnosticsValue.last ? { last: cloneManifest(this.diagnosticsValue.last) } : {}),
348
+ warnings: [...this.diagnosticsValue.warnings],
349
+ stateAvailable: Boolean(this.state),
350
+ };
351
+ }
352
+ invalidateState(reason) {
353
+ const hadState = Boolean(this.state);
354
+ this.state = undefined;
355
+ if (hadState)
356
+ this.diagnosticsValue.invalidations++;
357
+ this.diagnosticsValue.lastInvalidationReason = reason;
358
+ this.diagnosticsValue.stateAvailable = false;
359
+ return hadState ? reason : undefined;
360
+ }
361
+ recordDecision(decision, provider, model, status) {
362
+ this.diagnosticsValue = {
363
+ ...this.diagnosticsValue,
364
+ enabled: this.config.enabled,
365
+ allowProviderStorage: this.config.allowProviderStorage,
366
+ status: status ?? this.diagnosticsValue.status,
367
+ stateAvailable: Boolean(this.state),
368
+ last: cloneManifest(decision),
369
+ lastProvider: provider,
370
+ lastModel: model,
371
+ };
372
+ }
373
+ }
374
+ //# sourceMappingURL=native-continuation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-continuation.js","sourceRoot":"","sources":["../../src/continuation/native-continuation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { ContextConfig } from "../config/config.ts";
2
+ import type { ModelProfile } from "./model-profile.ts";
3
+ export interface ContextBudget {
4
+ contextWindow: number;
5
+ outputReserve: number;
6
+ safetyMargin: number;
7
+ /** Provider-token capacity before estimator calibration. */
8
+ modelInputHardLimit: number;
9
+ nominalHardInputLimit?: number;
10
+ nominalSoftInputLimit?: number;
11
+ nominalPreferredInputTarget?: number;
12
+ /** Limits below are expressed in local estimator units. */
13
+ hardInputLimit: number;
14
+ softInputLimit: number;
15
+ preferredInputTarget: number;
16
+ activeInputBudget: number;
17
+ calibrationRatio?: number;
18
+ calibrationSamples?: number;
19
+ }
20
+ export interface BudgetCalibration {
21
+ appliedRatio: number;
22
+ acceptedSamples: number;
23
+ calibrated: boolean;
24
+ }
25
+ export declare function calculateContextBudget(profile: ModelProfile, config: ContextConfig, calibration?: BudgetCalibration): ContextBudget;
26
+ //# sourceMappingURL=budget-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget-manager.d.ts","sourceRoot":"","sources":["../../src/core/budget-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAOD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,aAAa,CA2Cf"}
@@ -0,0 +1,42 @@
1
+ function estimatorLimit(providerTokens, ratio) {
2
+ if (providerTokens <= 0)
3
+ return 0;
4
+ return Math.max(0, Math.floor(providerTokens / ratio));
5
+ }
6
+ export function calculateContextBudget(profile, config, calibration) {
7
+ const outputCeiling = profile.maxOutputTokens ?? config.preferredOutputReserve;
8
+ const preferredReserve = Math.min(config.preferredOutputReserve, outputCeiling);
9
+ const minimumReserve = Math.min(config.minimumOutputReserve, outputCeiling);
10
+ const outputReserve = Math.max(minimumReserve, preferredReserve);
11
+ const safetyMargin = Math.min(profile.safetyMarginTokens, Math.max(0, profile.contextWindow - outputReserve));
12
+ const modelInputHardLimit = Math.max(0, profile.contextWindow - outputReserve - safetyMargin);
13
+ const policyHardLimit = Math.floor(profile.contextWindow * config.hardLimitRatio);
14
+ const nominalHardInputLimit = Math.min(modelInputHardLimit, policyHardLimit);
15
+ const nominalSoftInputLimit = Math.min(nominalHardInputLimit, Math.floor(profile.contextWindow * config.softLimitRatio));
16
+ const nominalPreferredInputTarget = Math.floor(profile.contextWindow * config.targetFillRatio);
17
+ const calibrationRatio = calibration?.calibrated
18
+ && Number.isFinite(calibration.appliedRatio)
19
+ && calibration.appliedRatio > 0
20
+ ? calibration.appliedRatio
21
+ : 1;
22
+ const hardInputLimit = estimatorLimit(nominalHardInputLimit, calibrationRatio);
23
+ const softInputLimit = Math.min(hardInputLimit, estimatorLimit(nominalSoftInputLimit, calibrationRatio));
24
+ const preferredInputTarget = estimatorLimit(nominalPreferredInputTarget, calibrationRatio);
25
+ const activeInputBudget = Math.min(hardInputLimit, preferredInputTarget);
26
+ return {
27
+ contextWindow: profile.contextWindow,
28
+ outputReserve,
29
+ safetyMargin,
30
+ modelInputHardLimit,
31
+ nominalHardInputLimit,
32
+ nominalSoftInputLimit,
33
+ nominalPreferredInputTarget,
34
+ hardInputLimit,
35
+ softInputLimit,
36
+ preferredInputTarget,
37
+ activeInputBudget,
38
+ calibrationRatio,
39
+ calibrationSamples: calibration?.acceptedSamples ?? 0,
40
+ };
41
+ }
42
+ //# sourceMappingURL=budget-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget-manager.js","sourceRoot":"","sources":["../../src/core/budget-manager.ts"],"names":[],"mappings":"AA2BA,SAAS,cAAc,CAAC,cAAsB,EAAE,KAAa;IAC3D,IAAI,cAAc,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAqB,EACrB,MAAqB,EACrB,WAA+B;IAE/B,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,sBAAsB,CAAC;IAC/E,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC;IAE9G,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC;IAC9F,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAClF,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAC7E,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CACpC,qBAAqB,EACrB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,CAC1D,CAAC;IACF,MAAM,2BAA2B,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/F,MAAM,gBAAgB,GAAG,WAAW,EAAE,UAAU;WAC3C,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC;WACzC,WAAW,CAAC,YAAY,GAAG,CAAC;QAC/B,CAAC,CAAC,WAAW,CAAC,YAAY;QAC1B,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,cAAc,GAAG,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;IAC/E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,cAAc,EACd,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CACxD,CAAC;IACF,MAAM,oBAAoB,GAAG,cAAc,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAAC;IAC3F,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;IAEzE,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa;QACb,YAAY;QACZ,mBAAmB;QACnB,qBAAqB;QACrB,qBAAqB;QACrB,2BAA2B;QAC3B,cAAc;QACd,cAAc;QACd,oBAAoB;QACpB,iBAAiB;QACjB,gBAAgB;QAChB,kBAAkB,EAAE,WAAW,EAAE,eAAe,IAAI,CAAC;KACtD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,69 @@
1
+ export type CanonicalRole = "system" | "user" | "assistant" | "tool" | "custom";
2
+ export interface Provenance {
3
+ source: "pi-session";
4
+ sessionId: string;
5
+ entryId: string;
6
+ originalRole?: string;
7
+ }
8
+ export interface TextBlock {
9
+ type: "text";
10
+ text: string;
11
+ }
12
+ export interface ThinkingBlock {
13
+ type: "thinking";
14
+ thinking: string;
15
+ }
16
+ export interface ToolCallBlock {
17
+ type: "toolCall";
18
+ id: string;
19
+ name: string;
20
+ arguments: unknown;
21
+ }
22
+ export interface ToolResultBlock {
23
+ type: "toolResult";
24
+ toolCallId: string;
25
+ toolName: string;
26
+ content: string;
27
+ isError: boolean;
28
+ }
29
+ export interface ImageBlock {
30
+ type: "image";
31
+ mimeType?: string;
32
+ data?: string;
33
+ }
34
+ export interface FileReferenceBlock {
35
+ type: "fileReference";
36
+ path: string;
37
+ }
38
+ export interface ArtifactReferenceBlock {
39
+ type: "artifactReference";
40
+ artifactId: string;
41
+ }
42
+ export interface SummaryReferenceBlock {
43
+ type: "summaryReference";
44
+ summaryId: string;
45
+ }
46
+ export interface OpaqueProviderBlock {
47
+ type: "opaqueProvider";
48
+ originalType?: string;
49
+ value: unknown;
50
+ }
51
+ export type CanonicalBlock = TextBlock | ThinkingBlock | ToolCallBlock | ToolResultBlock | ImageBlock | FileReferenceBlock | ArtifactReferenceBlock | SummaryReferenceBlock | OpaqueProviderBlock;
52
+ export interface CanonicalMessage {
53
+ id: string;
54
+ sourceEntryId: string;
55
+ role: CanonicalRole;
56
+ blocks: CanonicalBlock[];
57
+ createdAt?: number;
58
+ provider?: string;
59
+ model?: string;
60
+ provenance: Provenance;
61
+ tokenEstimate?: number;
62
+ flags: {
63
+ pinned?: boolean;
64
+ atomic?: boolean;
65
+ localOnly?: boolean;
66
+ synthetic?: boolean;
67
+ };
68
+ }
69
+ //# sourceMappingURL=canonical-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-message.d.ts","sourceRoot":"","sources":["../../src/core/canonical-message.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,gBAAgB,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,aAAa,GACb,aAAa,GACb,eAAe,GACf,UAAU,GACV,kBAAkB,GAClB,sBAAsB,GACtB,qBAAqB,GACrB,mBAAmB,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QACL,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=canonical-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-message.js","sourceRoot":"","sources":["../../src/core/canonical-message.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ import type { ContextConfig, ModelAwarenessConfig } from "../config/config.ts";
2
+ import { type ModelDescriptor, type ModelProfile } from "./model-profile.ts";
3
+ export interface TokenCalibrationSample {
4
+ estimatedTokens: number;
5
+ actualInputTokens: number;
6
+ inputTokens: number;
7
+ cacheReadTokens: number;
8
+ cacheWriteTokens: number;
9
+ createdAt: number;
10
+ }
11
+ export interface ProviderCacheMetrics {
12
+ sampleCount: number;
13
+ inputTokens: number;
14
+ cacheReadTokens: number;
15
+ cacheWriteTokens: number;
16
+ totalInputTokens: number;
17
+ cacheReadShare: number;
18
+ cacheWriteShare: number;
19
+ }
20
+ export interface ModelCalibrationAnalysis {
21
+ enabled: boolean;
22
+ estimator: "chars-v1";
23
+ windowSize: number;
24
+ observedSamples: number;
25
+ boundedSamples: number;
26
+ acceptedSamples: number;
27
+ rejectedSamples: number;
28
+ outlierSamples: number;
29
+ minimumSamples: number;
30
+ lowerRatioBound: number;
31
+ upperRatioBound: number;
32
+ medianRatio?: number;
33
+ appliedRatio: number;
34
+ calibrated: boolean;
35
+ cache: ProviderCacheMetrics;
36
+ }
37
+ export interface AdaptiveModelLimits {
38
+ nominalRecentTailTokens: number;
39
+ nominalRetrievedHistoryTokens: number;
40
+ nominalProjectTokens: number;
41
+ recentTailTokens: number;
42
+ maxRetrievedHistoryTokens: number;
43
+ maxProjectTokens: number;
44
+ }
45
+ export interface ResolvedModelAwareness {
46
+ profileKey: string;
47
+ profile: ModelProfile;
48
+ overrideKeys: string[];
49
+ calibration: ModelCalibrationAnalysis;
50
+ limits: AdaptiveModelLimits;
51
+ contextConfig: ContextConfig;
52
+ }
53
+ export declare function analyzeModelCalibration(samples: readonly TokenCalibrationSample[], config: ModelAwarenessConfig): ModelCalibrationAnalysis;
54
+ export declare function modelProfileKey(provider: string, modelId: string): string;
55
+ export declare function automaticRecentTailCeiling(contextWindow: number): number;
56
+ export declare function automaticHistoryRetrievalCeiling(contextWindow: number): number;
57
+ export declare function automaticProjectRetrievalCeiling(contextWindow: number): number;
58
+ export declare function resolveModelAwareness(model: ModelDescriptor, context: ContextConfig, config: ModelAwarenessConfig, samples?: readonly TokenCalibrationSample[]): ResolvedModelAwareness;
59
+ //# sourceMappingURL=model-awareness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-awareness.d.ts","sourceRoot":"","sources":["../../src/core/model-awareness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EAErB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,uBAAuB,EAAE,MAAM,CAAC;IAChC,6BAA6B,EAAE,MAAM,CAAC;IACtC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,wBAAwB,CAAC;IACtC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,aAAa,EAAE,aAAa,CAAC;CAC9B;AAiDD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,sBAAsB,EAAE,EAC1C,MAAM,EAAE,oBAAoB,GAC3B,wBAAwB,CAmD1B;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AAgBD,wBAAgB,0BAA0B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQxE;AAED,wBAAgB,gCAAgC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQ9E;AAED,wBAAgB,gCAAgC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQ9E;AAOD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,SAAS,sBAAsB,EAAO,GAC9C,sBAAsB,CAqDxB"}