@pellux/goodvibes-sdk 0.34.2 → 0.36.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.
- package/README.md +11 -1
- package/dist/contracts/artifacts/operator-contract.json +4 -1
- package/dist/events/agents.d.ts +14 -0
- package/dist/events/agents.d.ts.map +1 -1
- package/dist/events/index.d.ts +1 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/turn.d.ts +17 -0
- package/dist/events/turn.d.ts.map +1 -1
- package/dist/events/workflows.d.ts +8 -0
- package/dist/events/workflows.d.ts.map +1 -1
- package/dist/platform/acp/connection.d.ts +16 -0
- package/dist/platform/acp/connection.d.ts.map +1 -1
- package/dist/platform/acp/connection.js +17 -0
- package/dist/platform/agents/orchestrator-runner.d.ts +1 -1
- package/dist/platform/agents/orchestrator-runner.d.ts.map +1 -1
- package/dist/platform/agents/orchestrator-runner.js +20 -24
- package/dist/platform/agents/orchestrator.d.ts.map +1 -1
- package/dist/platform/agents/orchestrator.js +3 -2
- package/dist/platform/agents/worktree.d.ts +11 -1
- package/dist/platform/agents/worktree.d.ts.map +1 -1
- package/dist/platform/agents/worktree.js +48 -14
- package/dist/platform/agents/wrfc-config.d.ts +23 -0
- package/dist/platform/agents/wrfc-config.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-config.js +24 -0
- package/dist/platform/agents/wrfc-controller.d.ts +49 -1
- package/dist/platform/agents/wrfc-controller.d.ts.map +1 -1
- package/dist/platform/agents/wrfc-controller.js +271 -16
- package/dist/platform/agents/wrfc-types.d.ts +48 -1
- package/dist/platform/agents/wrfc-types.d.ts.map +1 -1
- package/dist/platform/automation/manager-runtime-delivery.d.ts +1 -1
- package/dist/platform/automation/manager-runtime-delivery.d.ts.map +1 -1
- package/dist/platform/automation/manager-runtime-delivery.js +4 -3
- package/dist/platform/channels/policy-manager.d.ts +8 -0
- package/dist/platform/channels/policy-manager.d.ts.map +1 -1
- package/dist/platform/channels/policy-manager.js +43 -1
- package/dist/platform/companion/companion-chat-manager.d.ts +1 -0
- package/dist/platform/companion/companion-chat-manager.d.ts.map +1 -1
- package/dist/platform/companion/companion-chat-manager.js +10 -0
- package/dist/platform/companion/companion-chat-routes.js +1 -0
- package/dist/platform/companion/companion-chat-types.d.ts +1 -0
- package/dist/platform/companion/companion-chat-types.d.ts.map +1 -1
- package/dist/platform/config/schema-domain-core.d.ts +3 -0
- package/dist/platform/config/schema-domain-core.d.ts.map +1 -1
- package/dist/platform/config/schema-domain-core.js +24 -0
- package/dist/platform/config/schema-types.d.ts +6 -2
- package/dist/platform/config/schema-types.d.ts.map +1 -1
- package/dist/platform/control-plane/approval-broker.d.ts +7 -0
- package/dist/platform/control-plane/approval-broker.d.ts.map +1 -1
- package/dist/platform/control-plane/approval-broker.js +30 -0
- package/dist/platform/control-plane/method-catalog-channels.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-channels.js +2 -0
- package/dist/platform/control-plane/method-catalog-email.d.ts.map +1 -1
- package/dist/platform/control-plane/method-catalog-email.js +1 -0
- package/dist/platform/core/compaction-sections.d.ts.map +1 -1
- package/dist/platform/core/compaction-sections.js +16 -5
- package/dist/platform/core/compaction-types.d.ts +7 -1
- package/dist/platform/core/compaction-types.d.ts.map +1 -1
- package/dist/platform/core/compaction-types.js +6 -0
- package/dist/platform/core/context-compaction.d.ts +20 -4
- package/dist/platform/core/context-compaction.d.ts.map +1 -1
- package/dist/platform/core/context-compaction.js +34 -7
- package/dist/platform/core/conversation-utils.js +1 -1
- package/dist/platform/core/conversation.d.ts.map +1 -1
- package/dist/platform/core/conversation.js +9 -4
- package/dist/platform/core/orchestrator-turn-loop.d.ts.map +1 -1
- package/dist/platform/core/orchestrator-turn-loop.js +22 -3
- package/dist/platform/core/orchestrator.d.ts +12 -0
- package/dist/platform/core/orchestrator.d.ts.map +1 -1
- package/dist/platform/core/orchestrator.js +36 -8
- package/dist/platform/daemon/http/home-graph-routes.d.ts.map +1 -1
- package/dist/platform/daemon/http/home-graph-routes.js +2 -1
- package/dist/platform/daemon/http/project-planning-routes.d.ts.map +1 -1
- package/dist/platform/daemon/http/project-planning-routes.js +2 -1
- package/dist/platform/hooks/dispatcher.d.ts.map +1 -1
- package/dist/platform/hooks/dispatcher.js +4 -0
- package/dist/platform/hooks/runners/command.d.ts.map +1 -1
- package/dist/platform/hooks/runners/command.js +11 -2
- package/dist/platform/integrations/delivery.d.ts.map +1 -1
- package/dist/platform/integrations/delivery.js +0 -2
- package/dist/platform/intelligence/import-graph.d.ts.map +1 -1
- package/dist/platform/intelligence/import-graph.js +8 -0
- package/dist/platform/knowledge/extractors.d.ts.map +1 -1
- package/dist/platform/knowledge/extractors.js +30 -4
- package/dist/platform/mcp/client.d.ts +2 -0
- package/dist/platform/mcp/client.d.ts.map +1 -1
- package/dist/platform/mcp/client.js +17 -3
- package/dist/platform/mcp/registry.d.ts.map +1 -1
- package/dist/platform/mcp/registry.js +4 -0
- package/dist/platform/media/builtin-generation-providers.d.ts.map +1 -1
- package/dist/platform/media/builtin-generation-providers.js +2 -3
- package/dist/platform/media/provider-registry.d.ts.map +1 -1
- package/dist/platform/media/provider-registry.js +3 -1
- package/dist/platform/multimodal/service.d.ts.map +1 -1
- package/dist/platform/multimodal/service.js +18 -3
- package/dist/platform/providers/anthropic-compat.js +2 -2
- package/dist/platform/providers/anthropic-sdk-provider.js +1 -1
- package/dist/platform/providers/anthropic-sse-assembler.d.ts.map +1 -1
- package/dist/platform/providers/anthropic-sse-assembler.js +24 -0
- package/dist/platform/providers/anthropic.js +2 -2
- package/dist/platform/providers/capabilities.d.ts +6 -0
- package/dist/platform/providers/capabilities.d.ts.map +1 -1
- package/dist/platform/providers/capabilities.js +20 -1
- package/dist/platform/providers/gemini.d.ts.map +1 -1
- package/dist/platform/providers/gemini.js +57 -48
- package/dist/platform/providers/index.d.ts +1 -0
- package/dist/platform/providers/index.d.ts.map +1 -1
- package/dist/platform/providers/index.js +1 -0
- package/dist/platform/providers/interface.d.ts +9 -1
- package/dist/platform/providers/interface.d.ts.map +1 -1
- package/dist/platform/providers/llama-cpp.js +1 -1
- package/dist/platform/providers/lm-studio.js +1 -1
- package/dist/platform/providers/model-limits.d.ts.map +1 -1
- package/dist/platform/providers/model-limits.js +14 -2
- package/dist/platform/providers/ollama.js +1 -1
- package/dist/platform/providers/openai-codex.js +1 -1
- package/dist/platform/providers/openai-compat.d.ts.map +1 -1
- package/dist/platform/providers/openai-compat.js +2 -2
- package/dist/platform/providers/openai.js +2 -2
- package/dist/platform/runtime/emitters/agents.d.ts +2 -0
- package/dist/platform/runtime/emitters/agents.d.ts.map +1 -1
- package/dist/platform/runtime/emitters/turn.d.ts +9 -0
- package/dist/platform/runtime/emitters/turn.d.ts.map +1 -1
- package/dist/platform/runtime/emitters/turn.js +4 -0
- package/dist/platform/runtime/emitters/workflows.d.ts +1 -0
- package/dist/platform/runtime/emitters/workflows.d.ts.map +1 -1
- package/dist/platform/runtime/store/domains/agents.d.ts +7 -0
- package/dist/platform/runtime/store/domains/agents.d.ts.map +1 -1
- package/dist/platform/runtime/store/domains/conversation.d.ts +0 -2
- package/dist/platform/runtime/store/domains/conversation.d.ts.map +1 -1
- package/dist/platform/runtime/store/domains/conversation.js +0 -1
- package/dist/platform/runtime/store/helpers/reducers/conversation.d.ts.map +1 -1
- package/dist/platform/runtime/store/helpers/reducers/conversation.js +20 -2
- package/dist/platform/runtime/store/helpers/reducers/lifecycle.d.ts.map +1 -1
- package/dist/platform/runtime/store/helpers/reducers/lifecycle.js +6 -0
- package/dist/platform/runtime/store/helpers/reducers/sync.d.ts.map +1 -1
- package/dist/platform/runtime/store/helpers/reducers/sync.js +7 -1
- package/dist/platform/runtime/tools/phases/execute.d.ts.map +1 -1
- package/dist/platform/runtime/tools/phases/execute.js +11 -1
- package/dist/platform/runtime/ui-read-models-core.d.ts.map +1 -1
- package/dist/platform/runtime/ui-read-models-core.js +4 -1
- package/dist/platform/tools/exec/runtime.d.ts.map +1 -1
- package/dist/platform/tools/exec/runtime.js +9 -0
- package/dist/platform/tools/shared/overflow.d.ts.map +1 -1
- package/dist/platform/tools/shared/overflow.js +21 -2
- package/dist/platform/types/errors.d.ts +26 -0
- package/dist/platform/types/errors.d.ts.map +1 -1
- package/dist/platform/types/errors.js +63 -1
- package/dist/platform/utils/error-display.d.ts.map +1 -1
- package/dist/platform/utils/error-display.js +14 -6
- package/dist/platform/utils/retry.d.ts +4 -2
- package/dist/platform/utils/retry.d.ts.map +1 -1
- package/dist/platform/utils/retry.js +4 -2
- package/dist/platform/version.js +1 -1
- package/dist/platform/voice/providers/shared.d.ts.map +1 -1
- package/dist/platform/voice/providers/shared.js +2 -3
- package/package.json +9 -9
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Agents domain state — tracks all spawned agent sessions including
|
|
4
4
|
* subagents, WRFC chain agents, and orchestrator agents.
|
|
5
5
|
*/
|
|
6
|
+
import type { AgentUsage } from '../../../../events/agents.js';
|
|
6
7
|
/** States for the agent lifecycle machine. */
|
|
7
8
|
export type AgentLifecycleState = 'spawning' | 'running' | 'awaiting_message' | 'awaiting_tool' | 'finalizing' | 'completed' | 'failed' | 'cancelled';
|
|
8
9
|
/** Classification of the agent's role. */
|
|
@@ -46,6 +47,12 @@ export interface RuntimeAgent {
|
|
|
46
47
|
turnCount: number;
|
|
47
48
|
/** Number of tool calls made by this agent. */
|
|
48
49
|
toolCallCount: number;
|
|
50
|
+
/**
|
|
51
|
+
* Accumulated token usage for this agent's run. Undefined means no usage
|
|
52
|
+
* data has landed yet — never fabricated as zeros (honest-UX: an agent
|
|
53
|
+
* that hasn't reported usage is distinct from one that used zero tokens).
|
|
54
|
+
*/
|
|
55
|
+
usage?: AgentUsage | undefined;
|
|
49
56
|
/** Latest accumulated output from the agent (for live display). */
|
|
50
57
|
latestOutput: string;
|
|
51
58
|
/** Latest progress string emitted by the agent. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/store/domains/agents.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF;;;GAGG;AAEH,8CAA8C;AAC9C,MAAM,MAAM,mBAAmB,GAC3B,UAAU,GACV,SAAS,GACT,kBAAkB,GAClB,eAAe,GACf,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEhB,0CAA0C;AAC1C,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,UAAU,GACV,UAAU,GACV,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,YAAY,CAAC;AAEjB,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,SAAS,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,CAAC;IACpG,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,IAAI,EAAE,SAAS,CAAC;IAChB,+BAA+B;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAG5B,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAGhB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,2CAA2C;IAC3C,aAAa,EAAE,MAAM,EAAE,CAAC;IAGxB,qEAAqE;IACrE,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAGnC,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAG5B,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/store/domains/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,8 +97,6 @@ export interface ConversationDomainState {
|
|
|
97
97
|
sessionUsage: TurnUsage;
|
|
98
98
|
/** Estimated token count of the current context window. */
|
|
99
99
|
estimatedContextTokens: number;
|
|
100
|
-
/** Whether a context warning threshold has been crossed. */
|
|
101
|
-
contextWarningActive: boolean;
|
|
102
100
|
/** Message count in the current session conversation. */
|
|
103
101
|
messageCount: number;
|
|
104
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/store/domains/conversation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/store/domains/conversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../../../../src/platform/runtime/store/helpers/reducers/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../../../../src/platform/runtime/store/helpers/reducers/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAiD,MAAM,+BAA+B,CAAC;AAwB5H,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE,SAAS,GAAG,SAAS,GAC3B,uBAAuB,CA0NzB"}
|
|
@@ -5,6 +5,18 @@ function formatToolArgs(event) {
|
|
|
5
5
|
}
|
|
6
6
|
return '{}';
|
|
7
7
|
}
|
|
8
|
+
function makeEmptyUsage() {
|
|
9
|
+
return { inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, reasoningTokens: 0 };
|
|
10
|
+
}
|
|
11
|
+
function addUsage(usage, event) {
|
|
12
|
+
return {
|
|
13
|
+
inputTokens: usage.inputTokens + event.inputTokens,
|
|
14
|
+
outputTokens: usage.outputTokens + event.outputTokens,
|
|
15
|
+
cacheReadTokens: usage.cacheReadTokens + (event.cacheReadTokens ?? 0),
|
|
16
|
+
cacheWriteTokens: usage.cacheWriteTokens + (event.cacheWriteTokens ?? 0),
|
|
17
|
+
reasoningTokens: usage.reasoningTokens,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
8
20
|
export function updateConversationState(domain, event) {
|
|
9
21
|
const source = event.type;
|
|
10
22
|
if ('callId' in event) {
|
|
@@ -76,6 +88,8 @@ export function updateConversationState(domain, event) {
|
|
|
76
88
|
activeToolCalls: new Map(),
|
|
77
89
|
toolCallsThisTurn: 0,
|
|
78
90
|
lastToolReconciliation: undefined,
|
|
91
|
+
currentTurnUsage: makeEmptyUsage(),
|
|
92
|
+
messageCount: domain.messageCount + 1,
|
|
79
93
|
};
|
|
80
94
|
case 'PREFLIGHT_OK':
|
|
81
95
|
if (!isCurrentTurnEvent(domain, event.turnId) || domain.turnState !== 'preflight')
|
|
@@ -140,14 +154,17 @@ export function updateConversationState(domain, event) {
|
|
|
140
154
|
return {
|
|
141
155
|
...updateDomainMetadata(domain, source),
|
|
142
156
|
currentTurnId: event.turnId,
|
|
157
|
+
currentTurnUsage: addUsage(domain.currentTurnUsage, event),
|
|
158
|
+
sessionUsage: addUsage(domain.sessionUsage, event),
|
|
159
|
+
estimatedContextTokens: event.inputTokens,
|
|
143
160
|
};
|
|
144
161
|
case 'TOOL_BATCH_READY':
|
|
145
|
-
if (!isCurrentTurnEvent(domain, event.turnId) || domain.turnState !== '
|
|
162
|
+
if (!isCurrentTurnEvent(domain, event.turnId) || domain.turnState !== 'streaming')
|
|
146
163
|
return domain;
|
|
147
164
|
return {
|
|
148
165
|
...updateDomainMetadata(domain, source),
|
|
149
166
|
currentTurnId: event.turnId,
|
|
150
|
-
turnState: '
|
|
167
|
+
turnState: 'tool_dispatch',
|
|
151
168
|
};
|
|
152
169
|
case 'TOOLS_DONE':
|
|
153
170
|
if (!isCurrentTurnEvent(domain, event.turnId) || domain.turnState !== 'tool_dispatch')
|
|
@@ -189,6 +206,7 @@ export function updateConversationState(domain, event) {
|
|
|
189
206
|
turnState: 'completed',
|
|
190
207
|
turnEndedAt: now(),
|
|
191
208
|
totalTurns: domain.totalTurns + 1,
|
|
209
|
+
messageCount: domain.messageCount + 1,
|
|
192
210
|
lastTurnResponse: event.response,
|
|
193
211
|
lastTurnStopReason: event.stopReason,
|
|
194
212
|
stream: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../../../../src/platform/runtime/store/helpers/reducers/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAChH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EACV,qBAAqB,EAGtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,gCAAgC,CAAC;AA+BxC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,eAAe,GACrB,kBAAkB,CAyBpB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,eAAe,GACrB,qBAAqB,CAmCvB;AAiCD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,eAAe,CA0D1F;AAED,iBAAS,0BAA0B,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAQ/G;AAED,iBAAS,0BAA0B,CACjC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,GACb,eAAe,CAIjB;AAkED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../../../../src/platform/runtime/store/helpers/reducers/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAChH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EACV,qBAAqB,EAGtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,KAAK,EACV,wBAAwB,EAGzB,MAAM,gCAAgC,CAAC;AA+BxC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,eAAe,GACrB,kBAAkB,CAyBpB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,eAAe,GACrB,qBAAqB,CAmCvB;AAiCD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,eAAe,CA0D1F;AAED,iBAAS,0BAA0B,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAQ/G;AAED,iBAAS,0BAA0B,CACjC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,EACvC,MAAM,EAAE,MAAM,GACb,eAAe,CAIjB;AAkED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,GAAG,gBAAgB,CAoF9F;AAED,iBAAS,2BAA2B,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,mBAAmB,EAC3B,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,GACb,gBAAgB,CAYlB;AAmBD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,kBAAkB,GACxB,wBAAwB,CA4G1B;AAED,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -294,6 +294,9 @@ export function updateAgentState(domain, event) {
|
|
|
294
294
|
toolCallCount: event.type === 'AGENT_COMPLETED' && event.toolCallsMade !== undefined
|
|
295
295
|
? event.toolCallsMade
|
|
296
296
|
: agent.toolCallCount,
|
|
297
|
+
usage: event.type === 'AGENT_COMPLETED' && event.usage !== undefined
|
|
298
|
+
? event.usage
|
|
299
|
+
: agent.usage,
|
|
297
300
|
result: event.type === 'AGENT_COMPLETED'
|
|
298
301
|
? {
|
|
299
302
|
durationMs: event.durationMs,
|
|
@@ -340,6 +343,9 @@ function orchestrationGraphStatus(graph) {
|
|
|
340
343
|
if (nodes.every((node) => node.status === 'pending' || node.status === 'ready')) {
|
|
341
344
|
return nodes.some((node) => node.status === 'ready') ? 'ready' : 'planning';
|
|
342
345
|
}
|
|
346
|
+
if (nodes.every((node) => node.status === 'completed' || node.status === 'cancelled')) {
|
|
347
|
+
return nodes.some((node) => node.status === 'completed') ? 'completed' : 'cancelled';
|
|
348
|
+
}
|
|
343
349
|
return 'running';
|
|
344
350
|
}
|
|
345
351
|
export function updateOrchestrationState(domain, event) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../../../src/platform/runtime/store/helpers/reducers/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAqB,MAAM,+BAA+B,CAAC;AAClH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AACxG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,KAAK,EAAE,wBAAwB,EAA8B,MAAM,gCAAgC,CAAC;AAC3G,OAAO,KAAK,EAAE,iBAAiB,EAAuC,MAAM,0BAA0B,CAAC;AACvG,OAAO,KAAK,EAAE,cAAc,EAA4C,MAAM,sBAAsB,CAAC;AACrG,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,kBAAkB,GACxB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../../../src/platform/runtime/store/helpers/reducers/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,9 +33,15 @@ export function updateCommunicationState(domain, event) {
|
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
const recentRecordIds = uniq([event.messageId, ...domain.recentRecordIds]).slice(0, 200);
|
|
36
|
+
const retainedRecords = new Map();
|
|
37
|
+
for (const id of recentRecordIds) {
|
|
38
|
+
const record = records.get(id);
|
|
39
|
+
if (record)
|
|
40
|
+
retainedRecords.set(id, record);
|
|
41
|
+
}
|
|
36
42
|
return {
|
|
37
43
|
...updateDomainMetadata(domain, event.type),
|
|
38
|
-
records,
|
|
44
|
+
records: retainedRecords,
|
|
39
45
|
recentRecordIds,
|
|
40
46
|
totalSent: domain.totalSent + (event.type === 'COMMUNICATION_SENT' ? 1 : 0),
|
|
41
47
|
totalDelivered: domain.totalDelivered + (event.type === 'COMMUNICATION_DELIVERED' ? 1 : 0),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/tools/phases/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMpF;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,mBAAmB,EAC3B,MAAM,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,WAAW,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../../src/platform/runtime/tools/phases/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAMpF;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,mBAAmB,EAC3B,MAAM,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,WAAW,GAAG;IAAE,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC,CAuDpD"}
|
|
@@ -16,7 +16,17 @@ export async function executePhase(call, tool, context, record, config) {
|
|
|
16
16
|
const start = performance.now();
|
|
17
17
|
const effectiveArgs = record._updatedArgs ?? call.arguments;
|
|
18
18
|
// Resolve timeout: per-phase override → budget → default
|
|
19
|
-
|
|
19
|
+
let timeoutMs = config?.phaseTimeouts?.['executing'] ?? context.budget?.maxMs ?? DEFAULT_EXECUTE_TIMEOUT_MS;
|
|
20
|
+
// The exec tool accepts its own `timeout_ms` input for long-running commands
|
|
21
|
+
// (e.g. a full test suite). Never let the phase deadline undercut a caller-
|
|
22
|
+
// requested exec timeout — otherwise the phase times out the call while the
|
|
23
|
+
// underlying command legitimately still has time left to run.
|
|
24
|
+
if (call.name === 'exec') {
|
|
25
|
+
const requestedTimeoutMs = effectiveArgs['timeout_ms'];
|
|
26
|
+
if (typeof requestedTimeoutMs === 'number' && requestedTimeoutMs > timeoutMs) {
|
|
27
|
+
timeoutMs = requestedTimeoutMs;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
20
30
|
let timer;
|
|
21
31
|
try {
|
|
22
32
|
// Race between the tool and a timeout; clear the timer regardless of outcome
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-read-models-core.d.ts","sourceRoot":"","sources":["../../../src/platform/runtime/ui-read-models-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"ui-read-models-core.d.ts","sourceRoot":"","sources":["../../../src/platform/runtime/ui-read-models-core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK5D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;CAC9C;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,eAAe,GAAG,gBAAgB,CAmDvF"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { createStoreBackedReadModel, listProviderIds, projectRecords, projectValues } from './ui-read-model-helpers.js';
|
|
2
|
+
/** Fraction of the model context window at which the context-warning flag activates. */
|
|
3
|
+
const CONTEXT_WARNING_THRESHOLD = 0.85;
|
|
2
4
|
export function createCoreReadModels(runtimeServices) {
|
|
3
5
|
const { runtimeStore } = runtimeServices;
|
|
4
6
|
return {
|
|
@@ -22,7 +24,8 @@ export function createCoreReadModels(runtimeServices) {
|
|
|
22
24
|
contextWindow: state.model.tokenLimits.contextWindow,
|
|
23
25
|
turnState: state.conversation.turnState,
|
|
24
26
|
streamToolPreview: state.conversation.stream.partialToolPreview,
|
|
25
|
-
contextWarningActive: state.
|
|
27
|
+
contextWarningActive: state.model.tokenLimits.contextWindow > 0 &&
|
|
28
|
+
state.conversation.estimatedContextTokens >= state.model.tokenLimits.contextWindow * CONTEXT_WARNING_THRESHOLD,
|
|
26
29
|
pendingApproval: state.permissions.awaitingDecision,
|
|
27
30
|
denialCount: state.permissions.denialCount,
|
|
28
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/exec/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAqB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAA+B,iBAAiB,EAAiB,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAse/E;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,GAC3D,OAAO,CA2CT;AA8ID,wBAAgB,cAAc,CAC5B,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE;IACP,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACjF,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;CACnD,GACL,IAAI,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/exec/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAGjD,OAAO,EAAqB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAA+B,iBAAiB,EAAiB,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAse/E;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,GAC3D,OAAO,CA2CT;AA8ID,wBAAgB,cAAc,CAC5B,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE;IACP,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACjF,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;CACnD,GACL,IAAI,CA6FN"}
|
|
@@ -635,9 +635,18 @@ export function createExecTool(processManager, options = {}) {
|
|
|
635
635
|
responseData.file_ops = fileOpResults;
|
|
636
636
|
if (fileOpWarnings && fileOpWarnings.length > 0)
|
|
637
637
|
responseData.warnings = fileOpWarnings;
|
|
638
|
+
// Populate a top-level error summary on failure so any consumer keying off
|
|
639
|
+
// `.error` alone (not just `.output`) still gets a coherent signal — the
|
|
640
|
+
// per-command diagnostics remain in `output` in full.
|
|
641
|
+
const failed = results.filter((r) => !r.success);
|
|
642
|
+
const errorSummary = failed.length > 0
|
|
643
|
+
? `${failed.length} of ${results.length} command(s) failed: `
|
|
644
|
+
+ failed.map((r) => `'${r.cmd}'${r.skipped ? ' (skipped)' : ` exit ${r.exit_code}${r.timed_out ? ' (timed out)' : ''}`}`).join('; ')
|
|
645
|
+
: undefined;
|
|
638
646
|
return {
|
|
639
647
|
success: allSuccess,
|
|
640
648
|
output: JSON.stringify(responseData),
|
|
649
|
+
...(errorSummary ? { error: errorSummary } : {}),
|
|
641
650
|
...(fileOpWarnings && fileOpWarnings.length > 0 ? { warnings: fileOpWarnings } : {}),
|
|
642
651
|
};
|
|
643
652
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overflow.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/shared/overflow.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"overflow.d.ts","sourceRoot":"","sources":["../../../../src/platform/tools/shared/overflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -305,6 +305,20 @@ export function createSpillBackend(type = 'file', baseDir) {
|
|
|
305
305
|
throw new Error(`Unknown spill backend: ${String(type)}`);
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
|
+
/**
|
|
309
|
+
* headAndTail — keeps the first 20% and last 80% of `budget` characters from
|
|
310
|
+
* `content`, joined by a marker, instead of a head-only slice. The tail is
|
|
311
|
+
* weighted heavier because the most useful part of a long tool output (e.g.
|
|
312
|
+
* a failing test run's summary) is almost always at the end.
|
|
313
|
+
*/
|
|
314
|
+
function headAndTail(content, budget) {
|
|
315
|
+
const headChars = Math.floor(budget * 0.2);
|
|
316
|
+
const tailChars = budget - headChars;
|
|
317
|
+
const head = content.slice(0, headChars);
|
|
318
|
+
const tail = content.slice(-tailChars);
|
|
319
|
+
const skipped = content.length - headChars - tailChars;
|
|
320
|
+
return `${head}\n[... ${skipped} chars omitted ...]\n${tail}`;
|
|
321
|
+
}
|
|
308
322
|
// ─── OverflowHandler ────────────────────────────────────────────────────────
|
|
309
323
|
/**
|
|
310
324
|
* Handles large tool output by delegating overflow content to a pluggable
|
|
@@ -366,9 +380,14 @@ export class OverflowHandler {
|
|
|
366
380
|
logger.info(`[overflow] Backend write error: ${summarizeError(err)}`);
|
|
367
381
|
entry = null;
|
|
368
382
|
}
|
|
383
|
+
// Keep head + tail rather than head-only: test runners (bun test, vitest,
|
|
384
|
+
// jest) print their failure summary at the very end of output, so a
|
|
385
|
+
// head-only truncation silently drops the actually-informative part of a
|
|
386
|
+
// long failing run.
|
|
387
|
+
const kept = headAndTail(content, maxChars);
|
|
369
388
|
if (!entry) {
|
|
370
389
|
return {
|
|
371
|
-
content:
|
|
390
|
+
content: kept + `\n[... truncated at ${maxChars} chars]`,
|
|
372
391
|
};
|
|
373
392
|
}
|
|
374
393
|
const ref = this.buildRef(filename);
|
|
@@ -376,7 +395,7 @@ export class OverflowHandler {
|
|
|
376
395
|
? `Full output: ${ref.replace(/^file:/, '')}`
|
|
377
396
|
: `Spilled to ${this.backend.type} backend (ref: ${ref})`;
|
|
378
397
|
return {
|
|
379
|
-
content:
|
|
398
|
+
content: kept + `\n[... truncated. ${notice}]`,
|
|
380
399
|
overflowRef: ref,
|
|
381
400
|
spillBackend: this.backend.type,
|
|
382
401
|
};
|
|
@@ -79,6 +79,32 @@ export declare function isRateLimitOrQuotaError(err: unknown): boolean;
|
|
|
79
79
|
* Covers OpenAI, Anthropic, and generic provider error messages.
|
|
80
80
|
*/
|
|
81
81
|
export declare function isContextSizeExceededError(err: unknown): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Returns true when an error message (already reduced to a plain string, e.g. after
|
|
84
|
+
* having crossed an event-bus boundary) looks like a transient network/transport
|
|
85
|
+
* failure. This is a best-effort, message-only heuristic — prefer
|
|
86
|
+
* {@link isNetworkTransportError} whenever the original error object is still
|
|
87
|
+
* available, since it trusts the structured classification instead of guessing
|
|
88
|
+
* from text.
|
|
89
|
+
*/
|
|
90
|
+
export declare function isTransportFailureMessage(message: string): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Returns true when the error indicates a transient network/transport failure
|
|
93
|
+
* (as opposed to a programmer error or a permanent provider rejection).
|
|
94
|
+
*
|
|
95
|
+
* When the error is an `HttpStatusError` (e.g. produced by
|
|
96
|
+
* `createNetworkTransportError` in `@pellux/transport-http`), its structured
|
|
97
|
+
* `category`/`recoverable` fields are trusted directly rather than re-derived
|
|
98
|
+
* from the message text — that classification already accounts for TypeErrors,
|
|
99
|
+
* POSIX network errno codes, and undici `UND_ERR_*` codes. The `instanceof`
|
|
100
|
+
* check is branded (see HttpStatusError's Symbol.hasInstance), so a plain object
|
|
101
|
+
* that merely happens to carry `recoverable`/`category` properties will not be
|
|
102
|
+
* mistaken for one and trigger a false-positive retry.
|
|
103
|
+
*
|
|
104
|
+
* Falls back to {@link isTransportFailureMessage} for errors that are not an
|
|
105
|
+
* HttpStatusError instance.
|
|
106
|
+
*/
|
|
107
|
+
export declare function isNetworkTransportError(err: unknown): boolean;
|
|
82
108
|
/**
|
|
83
109
|
* Returns true when the error indicates the provider is non-transient
|
|
84
110
|
* (auth failures, connection refused, host not found, timeout).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/platform/types/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/platform/types/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GoodVibesSdkError, RETRYABLE_STATUS_CODES } from '@pellux/goodvibes-errors';
|
|
1
|
+
import { GoodVibesSdkError, HttpStatusError, RETRYABLE_STATUS_CODES } from '@pellux/goodvibes-errors';
|
|
2
2
|
/** SDK-owned platform module. This implementation is maintained in goodvibes-sdk. */
|
|
3
3
|
export { RETRYABLE_STATUS_CODES };
|
|
4
4
|
function inferErrorCategory(message, statusCode) {
|
|
@@ -219,6 +219,68 @@ export function isContextSizeExceededError(err) {
|
|
|
219
219
|
msg.includes('exceeds the model') ||
|
|
220
220
|
(msg.includes('context') && msg.includes('exceed')));
|
|
221
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* Message substrings that indicate a transient network/transport failure when the
|
|
224
|
+
* error object itself carries no structured classification (e.g. a plain Error
|
|
225
|
+
* surfaced through a code path that doesn't go through transport-http). Kept
|
|
226
|
+
* narrow-ish but includes the bare "socket" and "closed unexpectedly" wording seen
|
|
227
|
+
* in practice for abrupt connection-closure failures that the older, stricter
|
|
228
|
+
* substring list did not recognize.
|
|
229
|
+
*/
|
|
230
|
+
const TRANSPORT_FAILURE_MESSAGE_PATTERNS = [
|
|
231
|
+
'fetch failed',
|
|
232
|
+
'econnrefused',
|
|
233
|
+
'enotfound',
|
|
234
|
+
'network error',
|
|
235
|
+
'network timeout',
|
|
236
|
+
'networkerror',
|
|
237
|
+
'econnreset',
|
|
238
|
+
'etimedout',
|
|
239
|
+
'socket hang up',
|
|
240
|
+
'dns',
|
|
241
|
+
'connection lost',
|
|
242
|
+
'epipe',
|
|
243
|
+
'ehostunreach',
|
|
244
|
+
'socket connection closure',
|
|
245
|
+
'closed unexpectedly',
|
|
246
|
+
'socket',
|
|
247
|
+
];
|
|
248
|
+
/**
|
|
249
|
+
* Returns true when an error message (already reduced to a plain string, e.g. after
|
|
250
|
+
* having crossed an event-bus boundary) looks like a transient network/transport
|
|
251
|
+
* failure. This is a best-effort, message-only heuristic — prefer
|
|
252
|
+
* {@link isNetworkTransportError} whenever the original error object is still
|
|
253
|
+
* available, since it trusts the structured classification instead of guessing
|
|
254
|
+
* from text.
|
|
255
|
+
*/
|
|
256
|
+
export function isTransportFailureMessage(message) {
|
|
257
|
+
const msg = message.toLowerCase();
|
|
258
|
+
return TRANSPORT_FAILURE_MESSAGE_PATTERNS.some((pattern) => msg.includes(pattern));
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Returns true when the error indicates a transient network/transport failure
|
|
262
|
+
* (as opposed to a programmer error or a permanent provider rejection).
|
|
263
|
+
*
|
|
264
|
+
* When the error is an `HttpStatusError` (e.g. produced by
|
|
265
|
+
* `createNetworkTransportError` in `@pellux/transport-http`), its structured
|
|
266
|
+
* `category`/`recoverable` fields are trusted directly rather than re-derived
|
|
267
|
+
* from the message text — that classification already accounts for TypeErrors,
|
|
268
|
+
* POSIX network errno codes, and undici `UND_ERR_*` codes. The `instanceof`
|
|
269
|
+
* check is branded (see HttpStatusError's Symbol.hasInstance), so a plain object
|
|
270
|
+
* that merely happens to carry `recoverable`/`category` properties will not be
|
|
271
|
+
* mistaken for one and trigger a false-positive retry.
|
|
272
|
+
*
|
|
273
|
+
* Falls back to {@link isTransportFailureMessage} for errors that are not an
|
|
274
|
+
* HttpStatusError instance.
|
|
275
|
+
*/
|
|
276
|
+
export function isNetworkTransportError(err) {
|
|
277
|
+
if (err instanceof HttpStatusError) {
|
|
278
|
+
return err.category === 'network' && err.recoverable === true;
|
|
279
|
+
}
|
|
280
|
+
if (!(err instanceof Error))
|
|
281
|
+
return false;
|
|
282
|
+
return isTransportFailureMessage(err.message);
|
|
283
|
+
}
|
|
222
284
|
/**
|
|
223
285
|
* Returns true when the error indicates the provider is non-transient
|
|
224
286
|
* (auth failures, connection refused, host not found, timeout).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-display.d.ts","sourceRoot":"","sources":["../../../src/platform/utils/error-display.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,aAAa,EAAE,KAAK,qBAAqB,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9I,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"error-display.d.ts","sourceRoot":"","sources":["../../../src/platform/utils/error-display.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,aAAa,EAAE,KAAK,qBAAqB,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9I,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AA8BnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,iCAAkC,SAAQ,oBAAoB;IAC7E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/C;AAoJD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE3D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,yBAA8B,GAAG,eAAe,CA6CvG;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,yBAA8B,GAAG,MAAM,CAE9F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,yBAA8B,GAAG,MAAM,CAU3F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,yBAA8B,GAAG,yBAAyB,CAkBzH;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,iCAAsC,GAAG,aAAa,CA0D9G;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnF"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { AppError, ProviderError } from '../types/errors.js';
|
|
2
2
|
import { redactSensitiveData } from './redaction.js';
|
|
3
3
|
const MAX_ERROR_LENGTH = 240;
|
|
4
|
+
// NOTE: The error classifier below (NETWORK_ERROR_PATTERNS, inferCategory, inferHint,
|
|
5
|
+
// buildSummary, getNetworkErrorMessage) is intentionally duplicated from
|
|
6
|
+
// packages/daemon-sdk/src/error-response.ts. The two copies operate on different error
|
|
7
|
+
// hierarchies (platform AppError/NormalizedError vs daemon GoodVibesSdkError) and are
|
|
8
|
+
// deliberately NOT extracted into @pellux/goodvibes-errors in this patch to avoid a
|
|
9
|
+
// risky cross-package move in a published library. Keep this classifier in sync with
|
|
10
|
+
// that twin so the two cannot drift further.
|
|
4
11
|
const NETWORK_ERROR_PATTERNS = [
|
|
5
12
|
{
|
|
6
13
|
pattern: /ECONNREFUSED/i,
|
|
@@ -8,7 +15,7 @@ const NETWORK_ERROR_PATTERNS = [
|
|
|
8
15
|
message: (provider) => `Cannot connect to ${provider ?? 'the provider'}. Check whether the service is reachable.`,
|
|
9
16
|
},
|
|
10
17
|
{
|
|
11
|
-
pattern: /ETIMEDOUT|ECONNABORTED
|
|
18
|
+
pattern: /ETIMEDOUT|ECONNABORTED/i,
|
|
12
19
|
category: 'timeout',
|
|
13
20
|
message: () => 'Connection timed out before the request completed.',
|
|
14
21
|
},
|
|
@@ -79,7 +86,7 @@ function inferCategory(message, statusCode) {
|
|
|
79
86
|
return 'authorization';
|
|
80
87
|
if (statusCode === 404)
|
|
81
88
|
return 'not_found';
|
|
82
|
-
if (statusCode === 408)
|
|
89
|
+
if (statusCode === 408 || statusCode === 504)
|
|
83
90
|
return 'timeout';
|
|
84
91
|
if (statusCode === 429)
|
|
85
92
|
return 'rate_limit';
|
|
@@ -87,7 +94,8 @@ function inferCategory(message, statusCode) {
|
|
|
87
94
|
return 'bad_request';
|
|
88
95
|
if (statusCode !== undefined && statusCode >= 500)
|
|
89
96
|
return 'service';
|
|
90
|
-
|
|
97
|
+
// Word boundaries avoid false positives on "authorization"/"author"/"authority" (matches the daemon-sdk twin).
|
|
98
|
+
if (/api[_\s-]?key|\bauth\b|\btoken\b|credential|\bjwt\b|unauthoriz/.test(msg))
|
|
91
99
|
return 'authentication';
|
|
92
100
|
if (/forbidden|access denied|permission denied|not allowed/.test(msg))
|
|
93
101
|
return 'authorization';
|
|
@@ -112,9 +120,9 @@ function inferHint(category, statusCode) {
|
|
|
112
120
|
case 'rate_limit':
|
|
113
121
|
return 'The caller may retry automatically. If this persists, wait, lower request volume, or switch models/providers.';
|
|
114
122
|
case 'authentication':
|
|
115
|
-
return 'Possible causes
|
|
123
|
+
return 'The provider rejected authentication. Possible causes include invalid or expired credentials, missing account/session state, account restrictions, or the wrong provider/endpoint receiving the request.';
|
|
116
124
|
case 'authorization':
|
|
117
|
-
return 'Possible causes
|
|
125
|
+
return 'Possible causes include missing model access, account permissions, safety/policy restrictions, or provider routing to a service that does not expose this model.';
|
|
118
126
|
case 'billing':
|
|
119
127
|
return 'Check credits, subscription status, usage limits, or account entitlements.';
|
|
120
128
|
case 'timeout':
|
|
@@ -310,7 +318,7 @@ export function toProviderError(error, options = {}) {
|
|
|
310
318
|
...(options.requestId ?? normalized.requestId ? { requestId: options.requestId ?? normalized.requestId } : {}),
|
|
311
319
|
...(options.providerCode ?? normalized.providerCode ? { providerCode: options.providerCode ?? normalized.providerCode } : {}),
|
|
312
320
|
...(options.providerType ?? normalized.providerType ? { providerType: options.providerType ?? normalized.providerType } : {}),
|
|
313
|
-
...(options.retryAfterMs ?? normalized.retryAfterMs !== undefined
|
|
321
|
+
...((options.retryAfterMs ?? normalized.retryAfterMs) !== undefined
|
|
314
322
|
? { retryAfterMs: options.retryAfterMs ?? normalized.retryAfterMs }
|
|
315
323
|
: {}),
|
|
316
324
|
...(options.rawMessage
|
|
@@ -24,7 +24,9 @@ export declare function isRetryableError(error: unknown): boolean;
|
|
|
24
24
|
*
|
|
25
25
|
* @param fn - Async function to execute.
|
|
26
26
|
* @param config - Optional overrides for retry behaviour.
|
|
27
|
-
* @param onRetry - Optional callback invoked before each retry.
|
|
27
|
+
* @param onRetry - Optional callback invoked before each retry. Argument order
|
|
28
|
+
* (attempt, maxAttempts, delayMs, error) matches `ChatRequest.onRetry` so
|
|
29
|
+
* providers can pass it straight through without an adapter.
|
|
28
30
|
*/
|
|
29
|
-
export declare function withRetry<T>(fn: () => Promise<T>, config?: Partial<RetryConfig>, onRetry?: (attempt: number,
|
|
31
|
+
export declare function withRetry<T>(fn: () => Promise<T>, config?: Partial<RetryConfig>, onRetry?: (attempt: number, maxAttempts: number, delayMs: number, error: Error) => void): Promise<T>;
|
|
30
32
|
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/platform/utils/retry.ts"],"names":[],"mappings":"AAKA,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAOzE;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAOjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAaxD;AASD
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/platform/utils/retry.ts"],"names":[],"mappings":"AAKA,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAOzE;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAOjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAaxD;AASD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,GACtF,OAAO,CAAC,CAAC,CAAC,CAyBZ"}
|
|
@@ -52,7 +52,9 @@ function computeDelay(attempt, initialDelayMs, maxDelayMs) {
|
|
|
52
52
|
*
|
|
53
53
|
* @param fn - Async function to execute.
|
|
54
54
|
* @param config - Optional overrides for retry behaviour.
|
|
55
|
-
* @param onRetry - Optional callback invoked before each retry.
|
|
55
|
+
* @param onRetry - Optional callback invoked before each retry. Argument order
|
|
56
|
+
* (attempt, maxAttempts, delayMs, error) matches `ChatRequest.onRetry` so
|
|
57
|
+
* providers can pass it straight through without an adapter.
|
|
56
58
|
*/
|
|
57
59
|
export async function withRetry(fn, config, onRetry) {
|
|
58
60
|
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
@@ -70,7 +72,7 @@ export async function withRetry(fn, config, onRetry) {
|
|
|
70
72
|
throw lastError;
|
|
71
73
|
}
|
|
72
74
|
const delayMs = computeDelay(attempt, cfg.initialDelayMs, cfg.maxDelayMs);
|
|
73
|
-
onRetry?.(attempt + 1,
|
|
75
|
+
onRetry?.(attempt + 1, cfg.maxRetries, delayMs, lastError);
|
|
74
76
|
await sleep(delayMs);
|
|
75
77
|
}
|
|
76
78
|
}
|
package/dist/platform/version.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
let version = '0.
|
|
3
|
+
let version = '0.36.0';
|
|
4
4
|
try {
|
|
5
5
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
|
|
6
6
|
version = pkg.version ?? version;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/platform/voice/providers/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACpB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/platform/voice/providers/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAIrB,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAElE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAE5E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAMtE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG3F;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBnD;AAED,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC,EAC3C,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,mBAAmB,CAUrB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiB1D;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CASrE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAKpF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAe7D;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAInF"}
|