wave-agent-sdk 0.18.7 → 0.19.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/builtin/skills/settings/ENV.md +0 -1
- package/builtin/skills/settings/HOOKS.md +10 -0
- package/builtin/skills/settings/MODELS.md +37 -0
- package/builtin/skills/settings/SKILLS.md +6 -4
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +12 -5
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +20 -4
- package/dist/managers/mcpManager.d.ts.map +1 -1
- package/dist/managers/mcpManager.js +7 -2
- package/dist/managers/messageManager.d.ts +3 -5
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +17 -77
- package/dist/managers/skillManager.d.ts +1 -0
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +11 -2
- package/dist/prompts/index.d.ts +3 -2
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +5 -1
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +13 -9
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +22 -9
- package/dist/services/hook.d.ts.map +1 -1
- package/dist/services/hook.js +6 -0
- package/dist/services/initializationService.d.ts.map +1 -1
- package/dist/services/initializationService.js +1 -1
- package/dist/services/interactionService.js +1 -1
- package/dist/services/reversionService.d.ts +5 -1
- package/dist/services/reversionService.d.ts.map +1 -1
- package/dist/services/reversionService.js +50 -22
- package/dist/services/session.d.ts +4 -13
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +59 -215
- package/dist/telemetry/sessionTracing.d.ts +14 -4
- package/dist/telemetry/sessionTracing.d.ts.map +1 -1
- package/dist/telemetry/sessionTracing.js +134 -8
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +16 -1
- package/dist/types/config.d.ts +7 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +1 -0
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/messaging.d.ts +0 -1
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/types/skills.d.ts +1 -0
- package/dist/types/skills.d.ts.map +1 -1
- package/dist/types/telemetry.d.ts +14 -1
- package/dist/types/telemetry.d.ts.map +1 -1
- package/dist/utils/atomicWrite.d.ts +15 -0
- package/dist/utils/atomicWrite.d.ts.map +1 -0
- package/dist/utils/atomicWrite.js +59 -0
- package/dist/utils/cacheControlUtils.d.ts +3 -15
- package/dist/utils/cacheControlUtils.d.ts.map +1 -1
- package/dist/utils/cacheControlUtils.js +4 -35
- package/dist/utils/containerSetup.d.ts.map +1 -1
- package/dist/utils/containerSetup.js +5 -1
- package/dist/utils/convertMessagesForAPI.d.ts +9 -1
- package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
- package/dist/utils/convertMessagesForAPI.js +74 -55
- package/dist/utils/mcpUtils.d.ts.map +1 -1
- package/dist/utils/mcpUtils.js +2 -1
- package/dist/utils/modelCapabilities.d.ts +22 -0
- package/dist/utils/modelCapabilities.d.ts.map +1 -0
- package/dist/utils/modelCapabilities.js +24 -0
- package/dist/utils/skillParser.d.ts.map +1 -1
- package/dist/utils/skillParser.js +3 -1
- package/package.json +1 -1
- package/src/agent.ts +11 -5
- package/src/index.ts +1 -0
- package/src/managers/aiManager.ts +22 -2
- package/src/managers/mcpManager.ts +8 -2
- package/src/managers/messageManager.ts +22 -104
- package/src/managers/skillManager.ts +16 -2
- package/src/prompts/index.ts +6 -1
- package/src/services/aiService.ts +12 -5
- package/src/services/configurationService.ts +24 -24
- package/src/services/hook.ts +7 -0
- package/src/services/initializationService.ts +1 -3
- package/src/services/interactionService.ts +1 -1
- package/src/services/reversionService.ts +50 -27
- package/src/services/session.ts +63 -262
- package/src/telemetry/sessionTracing.ts +167 -12
- package/src/tools/bashTool.ts +23 -1
- package/src/types/config.ts +8 -0
- package/src/types/hooks.ts +1 -0
- package/src/types/messaging.ts +0 -1
- package/src/types/skills.ts +1 -0
- package/src/types/telemetry.ts +17 -1
- package/src/utils/atomicWrite.ts +61 -0
- package/src/utils/cacheControlUtils.ts +5 -38
- package/src/utils/containerSetup.ts +5 -1
- package/src/utils/convertMessagesForAPI.ts +87 -57
- package/src/utils/mcpUtils.ts +2 -1
- package/src/utils/modelCapabilities.ts +30 -0
- package/src/utils/skillParser.ts +3 -1
|
@@ -32,7 +32,6 @@ Wave uses several environment variables to control its core functionality.
|
|
|
32
32
|
| `WAVE_DISABLE_AUTO_MEMORY` | Set to `1` or `true` to disable the auto-memory feature. | `false` |
|
|
33
33
|
| `WAVE_AUTO_MEMORY_FREQUENCY` | Auto memory update frequency. `1` = every turn, `2` = every 2 turns, etc. | `1` |
|
|
34
34
|
| `WAVE_TASK_LIST_ID` | Explicitly set the task list ID for the session. | (Session ID) |
|
|
35
|
-
| `WAVE_PROMPT_CACHE_REGEX` | Regex pattern to match model names that support prompt caching. Models matching this pattern will have cache control markers applied. | `claude` |
|
|
36
35
|
| `WAVE_PLUGIN_GIT_TIMEOUT_MS` | Timeout in milliseconds for git operations when installing plugins. | `300000` |
|
|
37
36
|
|
|
38
37
|
## Configuration Scopes
|
|
@@ -13,8 +13,12 @@ Wave supports the following hook events:
|
|
|
13
13
|
- `Stop`: Triggered when Wave finishes its response cycle (no more tool calls).
|
|
14
14
|
- `SubagentStop`: Triggered when a subagent finishes its response cycle.
|
|
15
15
|
- `WorktreeCreate`: Triggered when a new worktree is created.
|
|
16
|
+
- `WorktreeRemove`: Triggered when a worktree is removed (e.g., via ExitWorktree with `action: "remove"`). Non-blocking. The hook receives `worktree_path` in the JSON input. Useful for cleanup tasks (e.g., `docker compose -p $(basename "$worktree_path") down`) after worktree deletion.
|
|
17
|
+
- `CwdChanged`: Triggered when the working directory changes (e.g., entering/exiting a worktree). Non-blocking.
|
|
16
18
|
- `SessionStart`: Triggered during session initialization. Hooks can inject `additionalContext` and `initialUserMessage` via stdout.
|
|
17
19
|
- `SessionEnd`: Triggered during agent destruction (fire-and-forget, non-blocking). Useful for cleanup, resource teardown, and analytics.
|
|
20
|
+
- `PreCompact`: Triggered before conversation compaction. Hook stdout is captured as additional instructions and merged into the compaction prompt.
|
|
21
|
+
- `PostCompact`: Triggered after conversation compaction completes. Receives the compact summary text.
|
|
18
22
|
|
|
19
23
|
## Hook Configuration Structure
|
|
20
24
|
|
|
@@ -75,6 +79,11 @@ Wave provides detailed context to hook processes via `stdin` as a JSON object. T
|
|
|
75
79
|
- `user_prompt`: (UserPromptSubmit) The text submitted by the user.
|
|
76
80
|
- `subagent_type`: (If executed by a subagent) The type of the subagent.
|
|
77
81
|
- `name`: (WorktreeCreate) The name of the new worktree.
|
|
82
|
+
- `worktree_path`: (WorktreeRemove) The absolute path to the removed worktree.
|
|
83
|
+
- `old_cwd`: (CwdChanged) The previous working directory.
|
|
84
|
+
- `new_cwd`: (CwdChanged) The new working directory.
|
|
85
|
+
- `compact_instructions`: (PreCompact) Custom instructions for the compaction, if any.
|
|
86
|
+
- `compact_summary`: (PostCompact) The AI-generated compaction summary text.
|
|
78
87
|
- `source`: (SessionStart) The session start source: `"startup"`, `"resume"`, or `"compact"`.
|
|
79
88
|
- `agent_type`: (SessionStart) The agent type identifier.
|
|
80
89
|
- `end_source`: (SessionEnd) The session end source: `"exit"`, `"stop"`, or `"compact"`.
|
|
@@ -89,6 +98,7 @@ Hooks can communicate status and control Wave's behavior using exit codes:
|
|
|
89
98
|
- `PreToolUse`: Blocks tool execution and provides `stderr` to the agent as feedback.
|
|
90
99
|
- `PostToolUse`: Appends `stderr` to the tool result as feedback for the agent.
|
|
91
100
|
- `Stop`: Blocks the stop operation and provides `stderr` to the agent.
|
|
101
|
+
- `WorktreeCreate` / `WorktreeRemove` / `CwdChanged` / `PreCompact` / `PostCompact`: Shows `stderr` in an error block, but does not block the operation.
|
|
92
102
|
- `SessionStart` / `SessionEnd`: Shows `stderr` in an error block, but does not block startup or shutdown.
|
|
93
103
|
- **Other Exits (e.g., Exit 1)**: Non-blocking error. Wave continues execution but shows `stderr` as a warning to the user.
|
|
94
104
|
|
|
@@ -37,6 +37,43 @@ Wave supports passing arbitrary parameters to the underlying AI provider. Common
|
|
|
37
37
|
- `type`: `"enabled"` or `"disabled"`.
|
|
38
38
|
- `budget_tokens`: Maximum tokens to use for thinking.
|
|
39
39
|
|
|
40
|
+
## Model Capabilities
|
|
41
|
+
|
|
42
|
+
Wave needs to know whether a model supports certain features. Instead of guessing from the model name, you declare these explicitly via the `capabilities` field:
|
|
43
|
+
|
|
44
|
+
- `vision` (default: `true`): Whether the model can accept image inputs. When `false`, images are stripped and replaced with text placeholders.
|
|
45
|
+
- `promptCaching` (default: `false`): Whether the model supports ephemeral prompt caching (e.g., Anthropic's `cache_control` markers). When `true`, Wave injects cache markers on the system prompt and last user message.
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"models": {
|
|
50
|
+
"claude-3-7-sonnet-20250219": {
|
|
51
|
+
"capabilities": {
|
|
52
|
+
"vision": true,
|
|
53
|
+
"promptCaching": true
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"deepseek-r1": {
|
|
57
|
+
"capabilities": {
|
|
58
|
+
"vision": false,
|
|
59
|
+
"promptCaching": false
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
You can also set `capabilities` at the top level of `settings.json` to apply to the default model:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"capabilities": {
|
|
71
|
+
"vision": true,
|
|
72
|
+
"promptCaching": false
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
40
77
|
## Unsetting Default Parameters
|
|
41
78
|
|
|
42
79
|
If a model does not support a default parameter (like `temperature` for some reasoning models), you can explicitly set it to `null` to ensure it is not sent to the provider.
|
|
@@ -48,12 +48,14 @@ When this skill is invoked, follow these steps:
|
|
|
48
48
|
|
|
49
49
|
## Skill Locations
|
|
50
50
|
|
|
51
|
-
Wave looks for skills in
|
|
51
|
+
Wave looks for skills in multiple locations, with later sources overriding earlier ones for same-named skills:
|
|
52
52
|
|
|
53
|
-
1. **User Skills**: `~/.wave/skills/` (Available in all projects)
|
|
54
|
-
2. **Project Skills**: `.wave/skills/` (Specific to the current project)
|
|
53
|
+
1. **User Skills**: `~/.agents/skills/` → `~/.claude/skills/` → `~/.wave/skills/` (Available in all projects)
|
|
54
|
+
2. **Project Skills**: `.agents/skills/` → `.claude/skills/` → `.wave/skills/` (Specific to the current project)
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
The `.agents/skills` directory is the cross-tool standard adopted by Codex, Cursor, Cline, Gemini CLI, GitHub Copilot, and OpenCode, so a single skill directory can be shared across all your AI tools.
|
|
57
|
+
|
|
58
|
+
Project skills take precedence over user skills with the same name. Within each level, `.wave` overrides `.claude`, which overrides `.agents`.
|
|
57
59
|
|
|
58
60
|
## Invoking Skills
|
|
59
61
|
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAaA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAO9E,OAAO,EACL,YAAY,EACZ,kBAAkB,EAElB,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,OAAO,EAEP,eAAe,EACf,aAAa,EACb,WAAW,EACX,KAAK,EACL,cAAc,EACd,cAAc,EACf,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -2,6 +2,7 @@ import { LspManager } from "./managers/lspManager.js";
|
|
|
2
2
|
import { configValidator } from "./utils/configValidator.js";
|
|
3
3
|
import { btw } from "./services/aiService.js";
|
|
4
4
|
import { convertMessagesForAPI } from "./utils/convertMessagesForAPI.js";
|
|
5
|
+
import { supportsVision } from "./utils/modelCapabilities.js";
|
|
5
6
|
import { parseTaskNotificationXml } from "./utils/notificationXml.js";
|
|
6
7
|
import { InitializationService } from "./services/initializationService.js";
|
|
7
8
|
import { InteractionService } from "./services/interactionService.js";
|
|
@@ -421,16 +422,20 @@ export class Agent {
|
|
|
421
422
|
taskManager: this.taskManager,
|
|
422
423
|
resolveAndValidateConfig: () => this.resolveAndValidateConfig(),
|
|
423
424
|
}, options);
|
|
424
|
-
// Initialize OpenTelemetry (
|
|
425
|
+
// Initialize OpenTelemetry (awaited to ensure ALS context is ready before
|
|
426
|
+
// startInteractionSpan is called, preventing trace context fragmentation)
|
|
425
427
|
const telemetryConfig = this.configurationService.resolveTelemetryConfig();
|
|
426
|
-
|
|
428
|
+
try {
|
|
429
|
+
await initializeTelemetry(telemetryConfig);
|
|
430
|
+
}
|
|
431
|
+
catch (error) {
|
|
427
432
|
this.logger?.warn("Telemetry initialization failed:", error);
|
|
428
|
-
}
|
|
433
|
+
}
|
|
429
434
|
// Log session_start event
|
|
430
435
|
try {
|
|
431
436
|
const modelConfig = this.getModelConfig();
|
|
432
437
|
if (modelConfig.model) {
|
|
433
|
-
logOTelEvent("session_start", {
|
|
438
|
+
await logOTelEvent("session_start", {
|
|
434
439
|
sessionId: this.messageManager.getSessionId(),
|
|
435
440
|
model: modelConfig.model,
|
|
436
441
|
workdir: this.workdir,
|
|
@@ -749,7 +754,9 @@ export class Agent {
|
|
|
749
754
|
* @returns Promise that resolves to the AI's answer
|
|
750
755
|
*/
|
|
751
756
|
async askBtw(question) {
|
|
752
|
-
const messages = convertMessagesForAPI(this.messageManager.getMessages()
|
|
757
|
+
const messages = convertMessagesForAPI(this.messageManager.getMessages(), {
|
|
758
|
+
supportsVision: supportsVision(this.getModelConfig().capabilities),
|
|
759
|
+
});
|
|
753
760
|
const result = await btw({
|
|
754
761
|
gatewayConfig: this.getGatewayConfig(),
|
|
755
762
|
modelConfig: this.getModelConfig(),
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export * from "./managers/cronManager.js";
|
|
|
7
7
|
export * from "./managers/messageQueue.js";
|
|
8
8
|
export * from "./utils/bashParser.js";
|
|
9
9
|
export * from "./utils/convertMessagesForAPI.js";
|
|
10
|
+
export * from "./utils/modelCapabilities.js";
|
|
10
11
|
export * from "./utils/fileSearch.js";
|
|
11
12
|
export * from "./utils/globalLogger.js";
|
|
12
13
|
export * from "./utils/mcpUtils.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAG3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAG3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AAGjC,cAAc,sBAAsB,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@ export * from "./managers/messageQueue.js";
|
|
|
11
11
|
// Export all utilities
|
|
12
12
|
export * from "./utils/bashParser.js";
|
|
13
13
|
export * from "./utils/convertMessagesForAPI.js";
|
|
14
|
+
export * from "./utils/modelCapabilities.js";
|
|
14
15
|
export * from "./utils/fileSearch.js";
|
|
15
16
|
export * from "./utils/globalLogger.js";
|
|
16
17
|
export * from "./utils/mcpUtils.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as aiService from "../services/aiService.js";
|
|
2
2
|
import { convertMessagesForAPI } from "../utils/convertMessagesForAPI.js";
|
|
3
|
+
import { supportsVision } from "../utils/modelCapabilities.js";
|
|
3
4
|
import { parseTaskNotificationXml } from "../utils/notificationXml.js";
|
|
4
5
|
import { calculateComprehensiveTotalTokens } from "../utils/tokenCalculation.js";
|
|
5
6
|
import { estimateTokens } from "../utils/tokenEstimate.js";
|
|
@@ -9,7 +10,7 @@ import { buildSystemPrompt } from "../prompts/index.js";
|
|
|
9
10
|
import { buildPlanModeReminder, buildPlanModeReEntryReminder, buildExitedPlanModeReminder, } from "../prompts/planModeReminders.js";
|
|
10
11
|
import { recoverTruncatedJson } from "../utils/stringUtils.js";
|
|
11
12
|
import { logger } from "../utils/globalLogger.js";
|
|
12
|
-
import { startInteractionSpan, endInteractionSpan, startLLMRequestSpan, endLLMRequestSpan, } from "../telemetry/sessionTracing.js";
|
|
13
|
+
import { startInteractionSpan, endInteractionSpan, startLLMRequestSpan, endLLMRequestSpan, resetTracingState, } from "../telemetry/sessionTracing.js";
|
|
13
14
|
import { logOTelEvent } from "../telemetry/events.js";
|
|
14
15
|
export class AIManager {
|
|
15
16
|
// Service overrides
|
|
@@ -312,7 +313,7 @@ export class AIManager {
|
|
|
312
313
|
// 6. Build post-compact context restoration
|
|
313
314
|
const enhancedSummary = await this.buildPostCompactContext(compactResult.content);
|
|
314
315
|
// 7. Execute message reconstruction
|
|
315
|
-
this.messageManager.compactMessagesAndUpdateSession(enhancedSummary, compactUsage);
|
|
316
|
+
await this.messageManager.compactMessagesAndUpdateSession(enhancedSummary, compactUsage);
|
|
316
317
|
// Re-add plan mode reminder as persistent meta message after compaction
|
|
317
318
|
const postCompactMode = this.permissionManager?.getCurrentEffectiveMode(this.getModelConfig().permissionMode);
|
|
318
319
|
if (postCompactMode === "plan") {
|
|
@@ -330,6 +331,8 @@ export class AIManager {
|
|
|
330
331
|
this.callbacks.onUsageAdded(compactUsage);
|
|
331
332
|
}
|
|
332
333
|
this.consecutiveCompactionFailures = 0;
|
|
334
|
+
// Reset incremental tracing state after compaction
|
|
335
|
+
resetTracingState();
|
|
333
336
|
// 9. Log OTEL event
|
|
334
337
|
logOTelEvent("compaction", {
|
|
335
338
|
beforeTokens: String(messagesToCompact.length),
|
|
@@ -580,7 +583,10 @@ export class AIManager {
|
|
|
580
583
|
}
|
|
581
584
|
// Get recent message history
|
|
582
585
|
const rawMessages = this.messageManager.getMessages();
|
|
583
|
-
const
|
|
586
|
+
const currentModelConfig = this.getModelConfig();
|
|
587
|
+
const recentMessages = convertMessagesForAPI(rawMessages, {
|
|
588
|
+
supportsVision: supportsVision(currentModelConfig.capabilities),
|
|
589
|
+
});
|
|
584
590
|
// Track if assistant message has been created
|
|
585
591
|
let assistantMessageCreated = false;
|
|
586
592
|
logger?.debug("modelConfig in sendAIMessage", this.getModelConfig());
|
|
@@ -668,7 +674,16 @@ export class AIManager {
|
|
|
668
674
|
this.messageManager.updateCurrentMessageReasoning(reasoning);
|
|
669
675
|
};
|
|
670
676
|
}
|
|
671
|
-
llmSpan = startLLMRequestSpan(model || this.getModelConfig().model || ""
|
|
677
|
+
llmSpan = startLLMRequestSpan(model || this.getModelConfig().model || "", {
|
|
678
|
+
context: "interaction",
|
|
679
|
+
systemPrompt: typeof callAgentOptions.systemPrompt === "string"
|
|
680
|
+
? callAgentOptions.systemPrompt
|
|
681
|
+
: undefined,
|
|
682
|
+
inputMessages: callAgentOptions.messages,
|
|
683
|
+
toolsSchema: callAgentOptions.tools
|
|
684
|
+
? JSON.stringify(callAgentOptions.tools)
|
|
685
|
+
: undefined,
|
|
686
|
+
});
|
|
672
687
|
const result = await aiService.callAgent(callAgentOptions);
|
|
673
688
|
// End LLM span with usage data
|
|
674
689
|
endLLMRequestSpan(llmSpan, {
|
|
@@ -679,6 +694,7 @@ export class AIManager {
|
|
|
679
694
|
outputTokens: result.usage?.completion_tokens,
|
|
680
695
|
cacheReadTokens: result.usage?.cache_read_input_tokens,
|
|
681
696
|
cacheCreationTokens: result.usage?.cache_creation_input_tokens,
|
|
697
|
+
modelOutput: result.content,
|
|
682
698
|
});
|
|
683
699
|
const createdByStreaming = assistantMessageCreated;
|
|
684
700
|
// For non-streaming mode, create assistant message after callAgent returns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EACV,MAAM,EACN,eAAe,EACf,SAAS,EACT,OAAO,EACP,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAQ3B,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CAC3D;AAID,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9C;AAQD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAsC7D;AAED,qBAAa,UAAU;IAanB,OAAO,CAAC,SAAS;IAZnB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAA2C;IAC1D,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,UAAU,CAA8C;IAEhE,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,iBAAiB,CAAkC;gBAGjD,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,iBAAsB;IAMjC;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,OAAe,GAC3B,OAAO,CAAC,IAAI,CAAC;IAgDV,kBAAkB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAO/C,UAAU,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAgEvC,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrD,SAAS,IAAI,SAAS,GAAG,IAAI;IAI7B,aAAa,IAAI,eAAe,EAAE;IAIlC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIpD,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IASzE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO;IAuDzD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAgB7B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkQnD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;;OAGG;YACW,qBAAqB;IA4CnC,OAAO,CAAC,eAAe;IASjB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"mcpManager.d.ts","sourceRoot":"","sources":["../../src/managers/mcpManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -570,11 +570,16 @@ export class McpManager {
|
|
|
570
570
|
return false;
|
|
571
571
|
}
|
|
572
572
|
}
|
|
573
|
-
// Get all tools from connected servers
|
|
573
|
+
// Get all tools from connected servers.
|
|
574
|
+
// "reconnecting" servers retain their last-known tool snapshot so that
|
|
575
|
+
// transient SSE disconnects don't churn the tool list (which would bust
|
|
576
|
+
// the prompt cache). Tools are only dropped once the server truly fails
|
|
577
|
+
// (status "error"/"disconnected").
|
|
574
578
|
getAllConnectedTools() {
|
|
575
579
|
const allTools = [];
|
|
576
580
|
for (const server of this.servers.values()) {
|
|
577
|
-
|
|
581
|
+
const usable = server.status === "connected" || server.status === "reconnecting";
|
|
582
|
+
if (usable && server.tools) {
|
|
578
583
|
allTools.push(...server.tools);
|
|
579
584
|
}
|
|
580
585
|
}
|
|
@@ -49,8 +49,6 @@ export interface MessageManagerOptions {
|
|
|
49
49
|
export declare class MessageManager {
|
|
50
50
|
private container;
|
|
51
51
|
private sessionId;
|
|
52
|
-
private rootSessionId;
|
|
53
|
-
private parentSessionId?;
|
|
54
52
|
private messages;
|
|
55
53
|
private latestTotalTokens;
|
|
56
54
|
private workdir;
|
|
@@ -70,7 +68,6 @@ export declare class MessageManager {
|
|
|
70
68
|
private get memoryService();
|
|
71
69
|
getSessionId(): string;
|
|
72
70
|
getRootSessionId(): string;
|
|
73
|
-
getParentSessionId(): string | undefined;
|
|
74
71
|
getMessages(): Message[];
|
|
75
72
|
getUsages(): Usage[];
|
|
76
73
|
getLatestTotalTokens(): number;
|
|
@@ -146,9 +143,10 @@ export declare class MessageManager {
|
|
|
146
143
|
addErrorBlock(error: string): void;
|
|
147
144
|
addInfoBlock(content: string): void;
|
|
148
145
|
/**
|
|
149
|
-
* Compact messages and update session
|
|
146
|
+
* Compact messages and update session — append compact message to same file (append-only).
|
|
147
|
+
* After compaction, in-memory messages are [compactMessage, ...lastThreeMessages].
|
|
150
148
|
*/
|
|
151
|
-
compactMessagesAndUpdateSession(compactedContent: string, usage?: Usage): void
|
|
149
|
+
compactMessagesAndUpdateSession(compactedContent: string, usage?: Usage): Promise<void>;
|
|
152
150
|
addFileHistoryBlock(snapshots: import("../types/reversion.js").FileSnapshot[]): void;
|
|
153
151
|
addBangMessage(command: string): void;
|
|
154
152
|
updateBangMessage(command: string, output: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,6 @@ export class MessageManager {
|
|
|
15
15
|
this.invokedSkills = new Map(); // Track invoked skill names
|
|
16
16
|
this._usages = [];
|
|
17
17
|
this.sessionId = generateSessionId();
|
|
18
|
-
this.rootSessionId = this.sessionId;
|
|
19
18
|
this.messages = [];
|
|
20
19
|
this.latestTotalTokens = 0;
|
|
21
20
|
this.workdir = options.workdir;
|
|
@@ -44,10 +43,7 @@ export class MessageManager {
|
|
|
44
43
|
return this.sessionId;
|
|
45
44
|
}
|
|
46
45
|
getRootSessionId() {
|
|
47
|
-
return this.
|
|
48
|
-
}
|
|
49
|
-
getParentSessionId() {
|
|
50
|
-
return this.parentSessionId;
|
|
46
|
+
return this.sessionId;
|
|
51
47
|
}
|
|
52
48
|
getMessages() {
|
|
53
49
|
return [...this.messages];
|
|
@@ -204,7 +200,7 @@ export class MessageManager {
|
|
|
204
200
|
await this.createSessionIfNeeded();
|
|
205
201
|
}
|
|
206
202
|
// Use JSONL format for new sessions
|
|
207
|
-
await appendMessages(this.sessionId, unsavedMessages, this.workdir, this.sessionType
|
|
203
|
+
await appendMessages(this.sessionId, unsavedMessages, this.workdir, this.sessionType);
|
|
208
204
|
// Update the saved message count
|
|
209
205
|
this.savedMessageCount = this.messages.length;
|
|
210
206
|
}
|
|
@@ -224,7 +220,6 @@ export class MessageManager {
|
|
|
224
220
|
clearMessages() {
|
|
225
221
|
this.setMessages([]);
|
|
226
222
|
const newSessionId = generateSessionId();
|
|
227
|
-
this.rootSessionId = newSessionId;
|
|
228
223
|
this.setSessionId(newSessionId);
|
|
229
224
|
this.setlatestTotalTokens(0);
|
|
230
225
|
this.savedMessageCount = 0; // Reset saved message count
|
|
@@ -238,8 +233,6 @@ export class MessageManager {
|
|
|
238
233
|
// Initialize state from session data
|
|
239
234
|
initializeFromSession(sessionData) {
|
|
240
235
|
this.setSessionId(sessionData.id);
|
|
241
|
-
this.rootSessionId = sessionData.rootSessionId || sessionData.id;
|
|
242
|
-
this.parentSessionId = sessionData.parentSessionId;
|
|
243
236
|
this.setMessages([...sessionData.messages]);
|
|
244
237
|
this.setlatestTotalTokens(sessionData.metadata.latestTotalTokens);
|
|
245
238
|
// Rebuild loadedRuleIds from persisted meta messages (session restore)
|
|
@@ -357,9 +350,10 @@ export class MessageManager {
|
|
|
357
350
|
}
|
|
358
351
|
}
|
|
359
352
|
/**
|
|
360
|
-
* Compact messages and update session
|
|
353
|
+
* Compact messages and update session — append compact message to same file (append-only).
|
|
354
|
+
* After compaction, in-memory messages are [compactMessage, ...lastThreeMessages].
|
|
361
355
|
*/
|
|
362
|
-
compactMessagesAndUpdateSession(compactedContent, usage) {
|
|
356
|
+
async compactMessagesAndUpdateSession(compactedContent, usage) {
|
|
363
357
|
// Get last 2 API rounds to preserve (structurally safe boundary)
|
|
364
358
|
const lastThreeMessages = getLastApiRounds(this.messages, 2);
|
|
365
359
|
// Create compacted message
|
|
@@ -370,20 +364,19 @@ export class MessageManager {
|
|
|
370
364
|
{
|
|
371
365
|
type: "compact",
|
|
372
366
|
content: compactedContent,
|
|
373
|
-
sessionId: this.sessionId,
|
|
374
367
|
},
|
|
375
368
|
],
|
|
376
369
|
timestamp: new Date().toISOString(),
|
|
377
370
|
...(usage && { usage }),
|
|
378
371
|
};
|
|
379
|
-
// Build new message array: keep the compacted message and last
|
|
372
|
+
// Build new message array: keep the compacted message and last messages
|
|
380
373
|
const newMessages = [compactMessage, ...lastThreeMessages];
|
|
381
|
-
//
|
|
382
|
-
const
|
|
383
|
-
this.
|
|
384
|
-
|
|
385
|
-
// Set new message list
|
|
374
|
+
// APPEND to the same session file (append-only, like Claude Code)
|
|
375
|
+
const { appendMessages } = await import("../services/session.js");
|
|
376
|
+
await appendMessages(this.sessionId, newMessages, this.workdir, this.sessionType);
|
|
377
|
+
// Update in-memory state
|
|
386
378
|
this.setMessages(newMessages);
|
|
379
|
+
this.savedMessageCount = newMessages.length;
|
|
387
380
|
// Clear and rebuild loaded rule IDs from remaining meta messages
|
|
388
381
|
this.clearLoadedRuleIds();
|
|
389
382
|
this.rebuildLoadedRuleIds();
|
|
@@ -629,75 +622,22 @@ export class MessageManager {
|
|
|
629
622
|
* @param reversionManager - Optional ReversionManager to handle file rollbacks.
|
|
630
623
|
*/
|
|
631
624
|
async truncateHistory(index, reversionManager) {
|
|
632
|
-
const { messages
|
|
625
|
+
const { messages } = await this.getFullMessageThread();
|
|
633
626
|
if (index < 0 || index >= messages.length) {
|
|
634
627
|
throw new Error(`Invalid message index: ${index}`);
|
|
635
628
|
}
|
|
636
|
-
|
|
637
|
-
let targetSessionId = this.sessionId;
|
|
638
|
-
let targetIndexInSession = index;
|
|
639
|
-
// We need to be careful here because loadFullMessageThread might have removed "compact" blocks
|
|
640
|
-
// Let's re-calculate based on the actual messages returned.
|
|
641
|
-
// Actually, it's easier to just load sessions one by one again or keep track of counts.
|
|
642
|
-
// For simplicity, let's assume we want to truncate the WHOLE thread.
|
|
643
|
-
// If the index is in a previous session, we need to:
|
|
644
|
-
// 1. Load that session.
|
|
645
|
-
// 2. Truncate it.
|
|
646
|
-
// 3. Make it the current session.
|
|
647
|
-
// 4. Delete/Invalidate subsequent sessions.
|
|
648
|
-
// To correctly map 'index' to a session, we need to know the message count of each session
|
|
649
|
-
// as they appear in the concatenated 'messages' array.
|
|
650
|
-
let remainingIndex = index;
|
|
651
|
-
const { loadSessionFromJsonl } = await import("../services/session.js");
|
|
652
|
-
for (const sid of sessionIds) {
|
|
653
|
-
const sessionData = await loadSessionFromJsonl(sid, this.workdir);
|
|
654
|
-
if (!sessionData)
|
|
655
|
-
continue;
|
|
656
|
-
const sessionMessages = sessionData.messages;
|
|
657
|
-
// If this is not the first session in the thread, it might have a compact block at the start
|
|
658
|
-
// that was removed in getFullMessageThread.
|
|
659
|
-
const hasCompactBlock = sessionMessages[0]?.blocks.some((b) => b.type === "compact");
|
|
660
|
-
const effectiveMessages = hasCompactBlock && sid !== sessionIds[0]
|
|
661
|
-
? sessionMessages.slice(1)
|
|
662
|
-
: sessionMessages;
|
|
663
|
-
if (remainingIndex < effectiveMessages.length) {
|
|
664
|
-
targetSessionId = sid;
|
|
665
|
-
targetIndexInSession = hasCompactBlock
|
|
666
|
-
? remainingIndex + 1
|
|
667
|
-
: remainingIndex;
|
|
668
|
-
break;
|
|
669
|
-
}
|
|
670
|
-
remainingIndex -= effectiveMessages.length;
|
|
671
|
-
}
|
|
672
|
-
// Load the target session to perform truncation
|
|
673
|
-
const targetSessionData = await loadSessionFromJsonl(targetSessionId, this.workdir);
|
|
674
|
-
if (!targetSessionData)
|
|
675
|
-
throw new Error(`Target session ${targetSessionId} not found`);
|
|
676
|
-
// Identify messages to be removed (from the whole thread)
|
|
629
|
+
const newMessages = messages.slice(0, index);
|
|
677
630
|
const messagesToRemove = messages.slice(index);
|
|
678
631
|
const messageIdsToRemove = messagesToRemove
|
|
679
632
|
.map((m) => m.id)
|
|
680
633
|
.filter((id) => !!id);
|
|
681
|
-
// Revert file changes if manager is provided
|
|
682
634
|
if (reversionManager && messageIdsToRemove.length > 0) {
|
|
683
635
|
await reversionManager.revertTo(messageIdsToRemove, messages);
|
|
684
636
|
}
|
|
685
|
-
//
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
this.
|
|
689
|
-
this.rootSessionId = targetSessionData.rootSessionId || targetSessionId;
|
|
690
|
-
this.parentSessionId = targetSessionData.parentSessionId;
|
|
691
|
-
this.transcriptPath = this.computeTranscriptPath();
|
|
692
|
-
await this.rewriteSessionFile(newMessagesInSession);
|
|
693
|
-
// Update in-memory messages to the truncated session messages
|
|
694
|
-
// We do NOT include ancestor messages here to avoid exceeding context limits.
|
|
695
|
-
// The 'compact' block at the start of the session (if any) already summarizes them.
|
|
696
|
-
this.setMessages(newMessagesInSession);
|
|
697
|
-
// Update saved message count
|
|
698
|
-
this.savedMessageCount = newMessagesInSession.length;
|
|
699
|
-
// Notify session ID change if it changed
|
|
700
|
-
this.callbacks.onSessionIdChange?.(this.sessionId);
|
|
637
|
+
// Rewrite file with truncated messages
|
|
638
|
+
await this.rewriteSessionFile(newMessages);
|
|
639
|
+
this.setMessages(newMessages);
|
|
640
|
+
this.savedMessageCount = newMessages.length;
|
|
701
641
|
}
|
|
702
642
|
/**
|
|
703
643
|
* Rewrite the session file with the current messages.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAgB1C,OAAO,CAAC,SAAS;IAfnB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,YAAY,CAAU;gBAGpB,SAAS,EAAE,SAAS,EAC5B,OAAO,GAAE,mBAAwB;IAcnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC;;OAEG;YACW,aAAa;IAqC3B;;OAEG;YACW,YAAY;IAsC1B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAQrC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAQzD;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBzD;;OAEG;YACW,cAAc;IA4C5B;;OAEG;YACW,uBAAuB;YA0BvB,aAAa;YAiBb,gBAAgB;IAsD9B;;OAEG;YACW,oBAAoB;IA4BlC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,sBAAsB,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IA8BF;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAC5C;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC;KACd,GACD;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,CACzC;IA6BD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkC3B;;OAEG;YACW,yBAAyB;IAWvC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;CA8BhE"}
|