@defai.digital/ax-cli 3.6.1 → 3.7.1
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 +129 -16
- package/config-defaults/settings.yaml +24 -0
- package/dist/agent/llm-agent.d.ts +48 -3
- package/dist/agent/llm-agent.js +145 -40
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/subagent.d.ts +6 -0
- package/dist/agent/subagent.js +41 -24
- package/dist/agent/subagent.js.map +1 -1
- package/dist/constants.d.ts +13 -0
- package/dist/constants.js +28 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/mcp/client.js +2 -2
- package/dist/mcp/client.js.map +1 -1
- package/dist/schemas/settings-schemas.d.ts +17 -0
- package/dist/schemas/settings-schemas.js +15 -0
- package/dist/schemas/settings-schemas.js.map +1 -1
- package/dist/sdk/errors.d.ts +93 -0
- package/dist/sdk/errors.js +124 -0
- package/dist/sdk/errors.js.map +1 -0
- package/dist/sdk/index.d.ts +116 -46
- package/dist/sdk/index.js +178 -57
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/progress-reporter.d.ts +111 -0
- package/dist/sdk/progress-reporter.js +178 -0
- package/dist/sdk/progress-reporter.js.map +1 -0
- package/dist/sdk/testing.d.ts +184 -0
- package/dist/sdk/testing.js +291 -0
- package/dist/sdk/testing.js.map +1 -0
- package/dist/sdk/tool-registry.d.ts +163 -0
- package/dist/sdk/tool-registry.js +218 -0
- package/dist/sdk/tool-registry.js.map +1 -0
- package/dist/sdk/unified-logger.d.ts +163 -0
- package/dist/sdk/unified-logger.js +274 -0
- package/dist/sdk/unified-logger.js.map +1 -0
- package/dist/sdk/version.d.ts +59 -0
- package/dist/sdk/version.js +64 -0
- package/dist/sdk/version.js.map +1 -0
- package/dist/tools/bash.d.ts +4 -0
- package/dist/tools/bash.js +22 -2
- package/dist/tools/bash.js.map +1 -1
- package/dist/ui/components/chat-history.d.ts +2 -0
- package/dist/ui/components/chat-history.js +32 -81
- package/dist/ui/components/chat-history.js.map +1 -1
- package/dist/ui/components/chat-interface.js +3 -3
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/status-bar.d.ts +2 -0
- package/dist/ui/components/status-bar.js +33 -9
- package/dist/ui/components/status-bar.js.map +1 -1
- package/dist/ui/components/tool-group-display.d.ts +15 -0
- package/dist/ui/components/tool-group-display.js +91 -0
- package/dist/ui/components/tool-group-display.js.map +1 -0
- package/dist/ui/hooks/use-enhanced-input.js +43 -6
- package/dist/ui/hooks/use-enhanced-input.js.map +1 -1
- package/dist/ui/hooks/use-input-handler.d.ts +2 -0
- package/dist/ui/hooks/use-input-handler.js +13 -7
- package/dist/ui/hooks/use-input-handler.js.map +1 -1
- package/dist/ui/utils/change-summarizer.d.ts +20 -0
- package/dist/ui/utils/change-summarizer.js +193 -0
- package/dist/ui/utils/change-summarizer.js.map +1 -0
- package/dist/ui/utils/tool-grouper.d.ts +62 -0
- package/dist/ui/utils/tool-grouper.js +224 -0
- package/dist/ui/utils/tool-grouper.js.map +1 -0
- package/dist/utils/config-loader.d.ts +4 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/paste-utils.js +45 -19
- package/dist/utils/paste-utils.js.map +1 -1
- package/dist/utils/token-counter.d.ts +12 -0
- package/dist/utils/token-counter.js +32 -4
- package/dist/utils/token-counter.js.map +1 -1
- package/package.json +2 -2
- package/packages/schemas/package.json +1 -1
- package/.ax-cli/CUSTOM.md +0 -269
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-11e9e0ba-c39d-4fd2-aa77-bc818811c921.json +0 -69
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-2b260b98-b418-4c7c-9694-e2b94967e662.json +0 -24
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-2dd84869-e62d-46c8-9885-7e45f37f36e2.json +0 -69
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-484dc350-353f-4808-9ed1-ebb3cefdab37.json +0 -24
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-74a18b87-6172-4215-962b-44bb9f46a662.json +0 -69
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-7e03601e-e8ab-4cd7-9841-a74b66adf78f.json +0 -69
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-7f9c6562-771f-4fd0-adcf-9e7e9ac34ae8.json +0 -44
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-870a5fb9-6e82-4ff2-8ec8-af4c251cc514.json +0 -44
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-93946601-0e83-456c-ba47-def9713124dd.json +0 -24
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-e1ebe666-4c3a-4367-ba5c-27fe512a9c70.json +0 -24
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-15743e7d-430c-4d76-b6fc-955d7a5c250c.json +0 -44
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-25cf7679-0b3f-4988-83d7-704548fbba91.json +0 -69
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-54aedbac-6db0-464e-8ebb-dbb3979e6dca.json +0 -24
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-7658aed8-fe5d-4222-903f-1a7c63717ea7.json +0 -24
- package/.ax-cli/checkpoints/2025-11-21/checkpoint-c9c13497-40dc-4294-a327-6a5fc854eaa1.json +0 -69
- package/.ax-cli/checkpoints/metadata.json +0 -62
- package/.ax-cli/index.json +0 -44
- package/.ax-cli/memory.json +0 -62
- package/.ax-cli/settings.json +0 -1
- package/ax.config.json +0 -333
- package/dist/agent/chat-history-manager.d.ts +0 -56
- package/dist/agent/chat-history-manager.js +0 -150
- package/dist/agent/chat-history-manager.js.map +0 -1
- package/dist/agent/tool-manager.d.ts +0 -39
- package/dist/agent/tool-manager.js +0 -76
- package/dist/agent/tool-manager.js.map +0 -1
- package/dist/hooks/use-chat-reducer.d.ts +0 -61
- package/dist/hooks/use-chat-reducer.js +0 -118
- package/dist/hooks/use-chat-reducer.js.map +0 -1
- package/dist/hooks/use-enhanced-input.d.ts +0 -40
- package/dist/hooks/use-enhanced-input.js +0 -249
- package/dist/hooks/use-enhanced-input.js.map +0 -1
- package/dist/hooks/use-input-handler.d.ts +0 -46
- package/dist/hooks/use-input-handler.js +0 -1430
- package/dist/hooks/use-input-handler.js.map +0 -1
- package/dist/hooks/use-input-history.d.ts +0 -9
- package/dist/hooks/use-input-history.js +0 -112
- package/dist/hooks/use-input-history.js.map +0 -1
- package/dist/index.js.bak +0 -664
- package/dist/tools/web-search/engines/brave.d.ts +0 -16
- package/dist/tools/web-search/engines/brave.js +0 -99
- package/dist/tools/web-search/engines/brave.js.map +0 -1
- package/dist/tools/web-search/engines/tavily.d.ts +0 -17
- package/dist/tools/web-search/engines/tavily.js +0 -73
- package/dist/tools/web-search/engines/tavily.js.map +0 -1
- package/dist/utils/paste-collapse.d.ts +0 -46
- package/dist/utils/paste-collapse.js +0 -77
- package/dist/utils/paste-collapse.js.map +0 -1
- package/packages/schemas/dist/index.d.ts +0 -14
- package/packages/schemas/dist/index.d.ts.map +0 -1
- package/packages/schemas/dist/index.js +0 -19
- package/packages/schemas/dist/index.js.map +0 -1
- package/packages/schemas/dist/public/core/brand-types.d.ts +0 -308
- package/packages/schemas/dist/public/core/brand-types.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/brand-types.js +0 -243
- package/packages/schemas/dist/public/core/brand-types.js.map +0 -1
- package/packages/schemas/dist/public/core/enums.d.ts +0 -227
- package/packages/schemas/dist/public/core/enums.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/enums.js +0 -222
- package/packages/schemas/dist/public/core/enums.js.map +0 -1
- package/packages/schemas/dist/public/core/id-types.d.ts +0 -286
- package/packages/schemas/dist/public/core/id-types.d.ts.map +0 -1
- package/packages/schemas/dist/public/core/id-types.js +0 -136
- package/packages/schemas/dist/public/core/id-types.js.map +0 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress Reporter - Shared event system for AX <-> ax-cli integration
|
|
3
|
+
*
|
|
4
|
+
* Allows AutomatosX agents to report progress to ax-cli UI in real-time.
|
|
5
|
+
* This creates a unified progress visibility system across both applications.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
/**
|
|
9
|
+
* Progress event types
|
|
10
|
+
*/
|
|
11
|
+
export var ProgressEventType;
|
|
12
|
+
(function (ProgressEventType) {
|
|
13
|
+
/** Agent started a new task */
|
|
14
|
+
ProgressEventType["TASK_START"] = "task_start";
|
|
15
|
+
/** Agent made progress on current task */
|
|
16
|
+
ProgressEventType["TASK_PROGRESS"] = "task_progress";
|
|
17
|
+
/** Agent completed a task */
|
|
18
|
+
ProgressEventType["TASK_COMPLETE"] = "task_complete";
|
|
19
|
+
/** Agent encountered an error */
|
|
20
|
+
ProgressEventType["TASK_ERROR"] = "task_error";
|
|
21
|
+
/** Tool execution started */
|
|
22
|
+
ProgressEventType["TOOL_START"] = "tool_start";
|
|
23
|
+
/** Tool execution completed */
|
|
24
|
+
ProgressEventType["TOOL_COMPLETE"] = "tool_complete";
|
|
25
|
+
/** General status update */
|
|
26
|
+
ProgressEventType["STATUS_UPDATE"] = "status_update";
|
|
27
|
+
})(ProgressEventType || (ProgressEventType = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Progress Reporter - Singleton event emitter for progress tracking
|
|
30
|
+
*/
|
|
31
|
+
export class ProgressReporter extends EventEmitter {
|
|
32
|
+
static instance = null;
|
|
33
|
+
constructor() {
|
|
34
|
+
super();
|
|
35
|
+
// Allow more listeners (multiple agents can subscribe)
|
|
36
|
+
this.setMaxListeners(50);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get the singleton instance
|
|
40
|
+
*/
|
|
41
|
+
static getInstance() {
|
|
42
|
+
if (!ProgressReporter.instance) {
|
|
43
|
+
ProgressReporter.instance = new ProgressReporter();
|
|
44
|
+
}
|
|
45
|
+
return ProgressReporter.instance;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Reset the singleton (for testing)
|
|
49
|
+
*/
|
|
50
|
+
static reset() {
|
|
51
|
+
if (ProgressReporter.instance) {
|
|
52
|
+
ProgressReporter.instance.removeAllListeners();
|
|
53
|
+
ProgressReporter.instance = null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Report a progress event
|
|
58
|
+
*/
|
|
59
|
+
report(event) {
|
|
60
|
+
const fullEvent = {
|
|
61
|
+
...event,
|
|
62
|
+
timestamp: Date.now(),
|
|
63
|
+
};
|
|
64
|
+
this.emit('progress', fullEvent);
|
|
65
|
+
this.emit(event.type, fullEvent);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Report task start
|
|
69
|
+
*/
|
|
70
|
+
taskStart(agentId, name, message) {
|
|
71
|
+
this.report({
|
|
72
|
+
type: ProgressEventType.TASK_START,
|
|
73
|
+
agentId,
|
|
74
|
+
name,
|
|
75
|
+
message,
|
|
76
|
+
progress: 0,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Report task progress
|
|
81
|
+
*/
|
|
82
|
+
taskProgress(agentId, name, progress, message) {
|
|
83
|
+
this.report({
|
|
84
|
+
type: ProgressEventType.TASK_PROGRESS,
|
|
85
|
+
agentId,
|
|
86
|
+
name,
|
|
87
|
+
progress: Math.max(0, Math.min(100, progress)),
|
|
88
|
+
message,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Report task completion
|
|
93
|
+
*/
|
|
94
|
+
taskComplete(agentId, name, message) {
|
|
95
|
+
this.report({
|
|
96
|
+
type: ProgressEventType.TASK_COMPLETE,
|
|
97
|
+
agentId,
|
|
98
|
+
name,
|
|
99
|
+
message,
|
|
100
|
+
progress: 100,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Report task error
|
|
105
|
+
*/
|
|
106
|
+
taskError(agentId, name, error) {
|
|
107
|
+
this.report({
|
|
108
|
+
type: ProgressEventType.TASK_ERROR,
|
|
109
|
+
agentId,
|
|
110
|
+
name,
|
|
111
|
+
message: error,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Report tool execution start
|
|
116
|
+
*/
|
|
117
|
+
toolStart(agentId, toolName, message) {
|
|
118
|
+
this.report({
|
|
119
|
+
type: ProgressEventType.TOOL_START,
|
|
120
|
+
agentId,
|
|
121
|
+
name: toolName,
|
|
122
|
+
message,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Report tool execution completion
|
|
127
|
+
*/
|
|
128
|
+
toolComplete(agentId, toolName, message) {
|
|
129
|
+
this.report({
|
|
130
|
+
type: ProgressEventType.TOOL_COMPLETE,
|
|
131
|
+
agentId,
|
|
132
|
+
name: toolName,
|
|
133
|
+
message,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Report general status update
|
|
138
|
+
*/
|
|
139
|
+
statusUpdate(agentId, message, metadata) {
|
|
140
|
+
this.report({
|
|
141
|
+
type: ProgressEventType.STATUS_UPDATE,
|
|
142
|
+
agentId,
|
|
143
|
+
name: 'status',
|
|
144
|
+
message,
|
|
145
|
+
metadata,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Subscribe to all progress events
|
|
150
|
+
*/
|
|
151
|
+
onProgress(callback) {
|
|
152
|
+
this.on('progress', callback);
|
|
153
|
+
return () => this.off('progress', callback);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Subscribe to specific event type
|
|
157
|
+
*/
|
|
158
|
+
onEvent(type, callback) {
|
|
159
|
+
this.on(type, callback);
|
|
160
|
+
return () => this.off(type, callback);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get statistics about event emission
|
|
164
|
+
*/
|
|
165
|
+
getStats() {
|
|
166
|
+
return {
|
|
167
|
+
listenerCount: this.listenerCount('progress'),
|
|
168
|
+
maxListeners: this.getMaxListeners(),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get the global progress reporter instance
|
|
174
|
+
*/
|
|
175
|
+
export function getProgressReporter() {
|
|
176
|
+
return ProgressReporter.getInstance();
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=progress-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-reporter.js","sourceRoot":"","sources":["../../src/sdk/progress-reporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAN,IAAY,iBAeX;AAfD,WAAY,iBAAiB;IAC3B,+BAA+B;IAC/B,8CAAyB,CAAA;IACzB,0CAA0C;IAC1C,oDAA+B,CAAA;IAC/B,6BAA6B;IAC7B,oDAA+B,CAAA;IAC/B,iCAAiC;IACjC,8CAAyB,CAAA;IACzB,6BAA6B;IAC7B,8CAAyB,CAAA;IACzB,+BAA+B;IAC/B,oDAA+B,CAAA;IAC/B,4BAA4B;IAC5B,oDAA+B,CAAA;AACjC,CAAC,EAfW,iBAAiB,KAAjB,iBAAiB,QAe5B;AAsBD;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IACxC,MAAM,CAAC,QAAQ,GAA4B,IAAI,CAAC;IAExD;QACE,KAAK,EAAE,CAAC;QACR,uDAAuD;QACvD,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC/B,gBAAgB,CAAC,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK;QACV,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YAC9B,gBAAgB,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YAC/C,gBAAgB,CAAC,QAAQ,GAAG,IAAI,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAuC;QAC5C,MAAM,SAAS,GAAkB;YAC/B,GAAG,KAAK;YACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAe,EAAE,IAAY,EAAE,OAAgB;QACvD,IAAI,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,iBAAiB,CAAC,UAAU;YAClC,OAAO;YACP,IAAI;YACJ,OAAO;YACP,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAe,EAAE,IAAY,EAAE,QAAgB,EAAE,OAAgB;QAC5E,IAAI,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,iBAAiB,CAAC,aAAa;YACrC,OAAO;YACP,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC9C,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAe,EAAE,IAAY,EAAE,OAAgB;QAC1D,IAAI,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,iBAAiB,CAAC,aAAa;YACrC,OAAO;YACP,IAAI;YACJ,OAAO;YACP,QAAQ,EAAE,GAAG;SACd,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAe,EAAE,IAAY,EAAE,KAAa;QACpD,IAAI,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,iBAAiB,CAAC,UAAU;YAClC,OAAO;YACP,IAAI;YACJ,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAe,EAAE,QAAgB,EAAE,OAAgB;QAC3D,IAAI,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,iBAAiB,CAAC,UAAU;YAClC,OAAO;YACP,IAAI,EAAE,QAAQ;YACd,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAe,EAAE,QAAgB,EAAE,OAAgB;QAC9D,IAAI,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,iBAAiB,CAAC,aAAa;YACrC,OAAO;YACP,IAAI,EAAE,QAAQ;YACd,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAe,EAAE,OAAe,EAAE,QAAkC;QAC/E,IAAI,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,iBAAiB,CAAC,aAAa;YACrC,OAAO;YACP,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,QAAwC;QACjD,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAuB,EAAE,QAAwC;QACvE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,QAAQ;QAIN,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;YAC7C,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;SACrC,CAAC;IACJ,CAAC;;AAGH;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Testing utilities for AX CLI SDK
|
|
3
|
+
*
|
|
4
|
+
* This module provides mock implementations and test helpers to make
|
|
5
|
+
* it easy to test code that uses the AX CLI SDK.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from 'events';
|
|
10
|
+
import type { ChatEntry, StreamingChunk } from '../agent/llm-agent.js';
|
|
11
|
+
import type { ToolResult } from '../types/index.js';
|
|
12
|
+
/**
|
|
13
|
+
* Mock agent for testing
|
|
14
|
+
*
|
|
15
|
+
* Implements the same interface as LLMAgent but with predictable,
|
|
16
|
+
* controllable behavior for testing.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { MockAgent } from '@defai.digital/ax-cli/sdk/testing';
|
|
21
|
+
*
|
|
22
|
+
* test('my integration', async () => {
|
|
23
|
+
* const agent = new MockAgent({
|
|
24
|
+
* responses: ['First response', 'Second response']
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* const result = await agent.processUserMessage('Hello');
|
|
28
|
+
* expect(result[0].content).toBe('First response');
|
|
29
|
+
* });
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class MockAgent extends EventEmitter {
|
|
33
|
+
private responses;
|
|
34
|
+
private currentResponseIndex;
|
|
35
|
+
private history;
|
|
36
|
+
private disposed;
|
|
37
|
+
/**
|
|
38
|
+
* Create a new mock agent
|
|
39
|
+
*
|
|
40
|
+
* @param options - Configuration for mock behavior
|
|
41
|
+
*/
|
|
42
|
+
constructor(options?: {
|
|
43
|
+
/** Predefined responses to return (cycles through) */
|
|
44
|
+
responses?: string[];
|
|
45
|
+
});
|
|
46
|
+
/**
|
|
47
|
+
* Process a user message (mock implementation)
|
|
48
|
+
*
|
|
49
|
+
* Returns the next predefined response and adds it to history.
|
|
50
|
+
* Cycles through responses if called more times than responses available.
|
|
51
|
+
*
|
|
52
|
+
* @param message - User message (stored in history)
|
|
53
|
+
* @returns Mock chat history
|
|
54
|
+
*/
|
|
55
|
+
processUserMessage(message: string): Promise<ChatEntry[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Process user message with streaming (mock implementation)
|
|
58
|
+
*
|
|
59
|
+
* Yields mock stream chunks for the response.
|
|
60
|
+
*/
|
|
61
|
+
processUserMessageStream(message: string): AsyncGenerator<StreamingChunk>;
|
|
62
|
+
/**
|
|
63
|
+
* Get chat history (mock implementation)
|
|
64
|
+
*/
|
|
65
|
+
getChatHistory(): ChatEntry[];
|
|
66
|
+
/**
|
|
67
|
+
* Execute bash command (mock implementation)
|
|
68
|
+
*
|
|
69
|
+
* Always returns success with predefined output.
|
|
70
|
+
*/
|
|
71
|
+
executeBashCommand(command: string): Promise<ToolResult>;
|
|
72
|
+
/**
|
|
73
|
+
* Get current directory (mock implementation)
|
|
74
|
+
*/
|
|
75
|
+
getCurrentDirectory(): string;
|
|
76
|
+
/**
|
|
77
|
+
* Create checkpoint (mock implementation)
|
|
78
|
+
*/
|
|
79
|
+
createCheckpoint(_description?: string): Promise<string>;
|
|
80
|
+
/**
|
|
81
|
+
* Rewind conversation (mock implementation)
|
|
82
|
+
*/
|
|
83
|
+
rewindConversation(_checkpointId: string): Promise<{
|
|
84
|
+
success: boolean;
|
|
85
|
+
error?: string;
|
|
86
|
+
}>;
|
|
87
|
+
/**
|
|
88
|
+
* Check if bash is executing (mock implementation)
|
|
89
|
+
*/
|
|
90
|
+
isBashExecuting(): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Dispose of mock agent
|
|
93
|
+
*/
|
|
94
|
+
dispose(): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Reset mock agent state
|
|
97
|
+
*
|
|
98
|
+
* Clears history and resets response index.
|
|
99
|
+
* Useful for reusing the same mock across multiple tests.
|
|
100
|
+
*/
|
|
101
|
+
reset(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Set new responses
|
|
104
|
+
*
|
|
105
|
+
* @param responses - New responses to use
|
|
106
|
+
*/
|
|
107
|
+
setResponses(responses: string[]): void;
|
|
108
|
+
/**
|
|
109
|
+
* Get number of messages processed
|
|
110
|
+
*/
|
|
111
|
+
getMessageCount(): number;
|
|
112
|
+
private checkDisposed;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create a mock agent with predefined responses
|
|
116
|
+
*
|
|
117
|
+
* Convenience function for creating mock agents.
|
|
118
|
+
*
|
|
119
|
+
* @param responses - Predefined responses (optional)
|
|
120
|
+
* @returns Mock agent instance
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* import { createMockAgent } from '@defai.digital/ax-cli/sdk/testing';
|
|
125
|
+
*
|
|
126
|
+
* const agent = createMockAgent(['Hello!', 'How can I help?']);
|
|
127
|
+
* const result = await agent.processUserMessage('Hi');
|
|
128
|
+
* expect(result[0].content).toBe('Hello!');
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export declare function createMockAgent(responses?: string[]): MockAgent;
|
|
132
|
+
/**
|
|
133
|
+
* Mock settings manager for testing
|
|
134
|
+
*
|
|
135
|
+
* Allows tests to control what settings are returned without
|
|
136
|
+
* needing actual config files.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* import { MockSettingsManager } from '@defai.digital/ax-cli/sdk/testing';
|
|
141
|
+
*
|
|
142
|
+
* const settings = new MockSettingsManager({
|
|
143
|
+
* apiKey: 'test-key',
|
|
144
|
+
* baseURL: 'https://test.api.com',
|
|
145
|
+
* model: 'glm-4.6'
|
|
146
|
+
* });
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
export declare class MockSettingsManager {
|
|
150
|
+
private settings;
|
|
151
|
+
constructor(settings?: {
|
|
152
|
+
apiKey?: string;
|
|
153
|
+
baseURL?: string;
|
|
154
|
+
model?: string;
|
|
155
|
+
});
|
|
156
|
+
loadUserSettings(): void;
|
|
157
|
+
loadProjectSettings(): void;
|
|
158
|
+
getApiKey(): string | undefined;
|
|
159
|
+
getBaseURL(): string | undefined;
|
|
160
|
+
getCurrentModel(): string;
|
|
161
|
+
updateUserSetting(key: string, value: unknown): void;
|
|
162
|
+
saveUserSettings(): void;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Create a mock settings manager
|
|
166
|
+
*
|
|
167
|
+
* @param settings - Settings to return
|
|
168
|
+
* @returns Mock settings manager
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* ```typescript
|
|
172
|
+
* import { createMockSettings } from '@defai.digital/ax-cli/sdk/testing';
|
|
173
|
+
*
|
|
174
|
+
* const settings = createMockSettings({
|
|
175
|
+
* apiKey: 'test-key',
|
|
176
|
+
* model: 'glm-4.6'
|
|
177
|
+
* });
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
export declare function createMockSettings(settings?: {
|
|
181
|
+
apiKey?: string;
|
|
182
|
+
baseURL?: string;
|
|
183
|
+
model?: string;
|
|
184
|
+
}): MockSettingsManager;
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Testing utilities for AX CLI SDK
|
|
3
|
+
*
|
|
4
|
+
* This module provides mock implementations and test helpers to make
|
|
5
|
+
* it easy to test code that uses the AX CLI SDK.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from 'events';
|
|
10
|
+
/**
|
|
11
|
+
* Mock agent for testing
|
|
12
|
+
*
|
|
13
|
+
* Implements the same interface as LLMAgent but with predictable,
|
|
14
|
+
* controllable behavior for testing.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { MockAgent } from '@defai.digital/ax-cli/sdk/testing';
|
|
19
|
+
*
|
|
20
|
+
* test('my integration', async () => {
|
|
21
|
+
* const agent = new MockAgent({
|
|
22
|
+
* responses: ['First response', 'Second response']
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* const result = await agent.processUserMessage('Hello');
|
|
26
|
+
* expect(result[0].content).toBe('First response');
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export class MockAgent extends EventEmitter {
|
|
31
|
+
responses;
|
|
32
|
+
currentResponseIndex = 0;
|
|
33
|
+
history = [];
|
|
34
|
+
disposed = false;
|
|
35
|
+
/**
|
|
36
|
+
* Create a new mock agent
|
|
37
|
+
*
|
|
38
|
+
* @param options - Configuration for mock behavior
|
|
39
|
+
*/
|
|
40
|
+
constructor(options = {}) {
|
|
41
|
+
super();
|
|
42
|
+
this.responses = options.responses || ['Mock response'];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Process a user message (mock implementation)
|
|
46
|
+
*
|
|
47
|
+
* Returns the next predefined response and adds it to history.
|
|
48
|
+
* Cycles through responses if called more times than responses available.
|
|
49
|
+
*
|
|
50
|
+
* @param message - User message (stored in history)
|
|
51
|
+
* @returns Mock chat history
|
|
52
|
+
*/
|
|
53
|
+
async processUserMessage(message) {
|
|
54
|
+
this.checkDisposed();
|
|
55
|
+
// Add user message to history
|
|
56
|
+
const userEntry = {
|
|
57
|
+
type: 'user',
|
|
58
|
+
content: message,
|
|
59
|
+
timestamp: new Date(),
|
|
60
|
+
};
|
|
61
|
+
this.history.push(userEntry);
|
|
62
|
+
// Get next response (cycle through)
|
|
63
|
+
const response = this.responses[this.currentResponseIndex % this.responses.length];
|
|
64
|
+
this.currentResponseIndex++;
|
|
65
|
+
// Add assistant response to history
|
|
66
|
+
const assistantEntry = {
|
|
67
|
+
type: 'assistant',
|
|
68
|
+
content: response,
|
|
69
|
+
timestamp: new Date(),
|
|
70
|
+
};
|
|
71
|
+
this.history.push(assistantEntry);
|
|
72
|
+
// Emit stream event for compatibility
|
|
73
|
+
this.emit('stream', {
|
|
74
|
+
type: 'content',
|
|
75
|
+
content: response,
|
|
76
|
+
});
|
|
77
|
+
this.emit('stream', {
|
|
78
|
+
type: 'done',
|
|
79
|
+
});
|
|
80
|
+
return [...this.history];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Process user message with streaming (mock implementation)
|
|
84
|
+
*
|
|
85
|
+
* Yields mock stream chunks for the response.
|
|
86
|
+
*/
|
|
87
|
+
async *processUserMessageStream(message) {
|
|
88
|
+
this.checkDisposed();
|
|
89
|
+
// Add user message to history
|
|
90
|
+
const userEntry = {
|
|
91
|
+
type: 'user',
|
|
92
|
+
content: message,
|
|
93
|
+
timestamp: new Date(),
|
|
94
|
+
};
|
|
95
|
+
this.history.push(userEntry);
|
|
96
|
+
// Get next response
|
|
97
|
+
const response = this.responses[this.currentResponseIndex % this.responses.length];
|
|
98
|
+
this.currentResponseIndex++;
|
|
99
|
+
// Stream the response character by character (for realistic testing)
|
|
100
|
+
const words = response.split(' ');
|
|
101
|
+
for (const word of words) {
|
|
102
|
+
yield {
|
|
103
|
+
type: 'content',
|
|
104
|
+
content: word + ' ',
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Add assistant response to history
|
|
108
|
+
const assistantEntry = {
|
|
109
|
+
type: 'assistant',
|
|
110
|
+
content: response,
|
|
111
|
+
timestamp: new Date(),
|
|
112
|
+
};
|
|
113
|
+
this.history.push(assistantEntry);
|
|
114
|
+
yield {
|
|
115
|
+
type: 'done',
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get chat history (mock implementation)
|
|
120
|
+
*/
|
|
121
|
+
getChatHistory() {
|
|
122
|
+
this.checkDisposed();
|
|
123
|
+
return [...this.history];
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Execute bash command (mock implementation)
|
|
127
|
+
*
|
|
128
|
+
* Always returns success with predefined output.
|
|
129
|
+
*/
|
|
130
|
+
async executeBashCommand(command) {
|
|
131
|
+
this.checkDisposed();
|
|
132
|
+
return {
|
|
133
|
+
success: true,
|
|
134
|
+
output: `Mock output for command: ${command}`,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get current directory (mock implementation)
|
|
139
|
+
*/
|
|
140
|
+
getCurrentDirectory() {
|
|
141
|
+
this.checkDisposed();
|
|
142
|
+
return '/mock/directory';
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Create checkpoint (mock implementation)
|
|
146
|
+
*/
|
|
147
|
+
async createCheckpoint(_description) {
|
|
148
|
+
this.checkDisposed();
|
|
149
|
+
return `mock-checkpoint-${Date.now()}`;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Rewind conversation (mock implementation)
|
|
153
|
+
*/
|
|
154
|
+
async rewindConversation(_checkpointId) {
|
|
155
|
+
this.checkDisposed();
|
|
156
|
+
this.history = [];
|
|
157
|
+
return { success: true };
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if bash is executing (mock implementation)
|
|
161
|
+
*/
|
|
162
|
+
isBashExecuting() {
|
|
163
|
+
this.checkDisposed();
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Dispose of mock agent
|
|
168
|
+
*/
|
|
169
|
+
async dispose() {
|
|
170
|
+
if (this.disposed)
|
|
171
|
+
return;
|
|
172
|
+
this.disposed = true;
|
|
173
|
+
this.removeAllListeners();
|
|
174
|
+
this.history = [];
|
|
175
|
+
this.responses = [];
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Reset mock agent state
|
|
179
|
+
*
|
|
180
|
+
* Clears history and resets response index.
|
|
181
|
+
* Useful for reusing the same mock across multiple tests.
|
|
182
|
+
*/
|
|
183
|
+
reset() {
|
|
184
|
+
this.history = [];
|
|
185
|
+
this.currentResponseIndex = 0;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Set new responses
|
|
189
|
+
*
|
|
190
|
+
* @param responses - New responses to use
|
|
191
|
+
*/
|
|
192
|
+
setResponses(responses) {
|
|
193
|
+
this.responses = responses;
|
|
194
|
+
this.currentResponseIndex = 0;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get number of messages processed
|
|
198
|
+
*/
|
|
199
|
+
getMessageCount() {
|
|
200
|
+
return this.history.filter(entry => entry.type === 'user').length;
|
|
201
|
+
}
|
|
202
|
+
checkDisposed() {
|
|
203
|
+
if (this.disposed) {
|
|
204
|
+
throw new Error('MockAgent has been disposed and cannot be used');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Create a mock agent with predefined responses
|
|
210
|
+
*
|
|
211
|
+
* Convenience function for creating mock agents.
|
|
212
|
+
*
|
|
213
|
+
* @param responses - Predefined responses (optional)
|
|
214
|
+
* @returns Mock agent instance
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* import { createMockAgent } from '@defai.digital/ax-cli/sdk/testing';
|
|
219
|
+
*
|
|
220
|
+
* const agent = createMockAgent(['Hello!', 'How can I help?']);
|
|
221
|
+
* const result = await agent.processUserMessage('Hi');
|
|
222
|
+
* expect(result[0].content).toBe('Hello!');
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
export function createMockAgent(responses) {
|
|
226
|
+
return new MockAgent({ responses });
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Mock settings manager for testing
|
|
230
|
+
*
|
|
231
|
+
* Allows tests to control what settings are returned without
|
|
232
|
+
* needing actual config files.
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```typescript
|
|
236
|
+
* import { MockSettingsManager } from '@defai.digital/ax-cli/sdk/testing';
|
|
237
|
+
*
|
|
238
|
+
* const settings = new MockSettingsManager({
|
|
239
|
+
* apiKey: 'test-key',
|
|
240
|
+
* baseURL: 'https://test.api.com',
|
|
241
|
+
* model: 'glm-4.6'
|
|
242
|
+
* });
|
|
243
|
+
* ```
|
|
244
|
+
*/
|
|
245
|
+
export class MockSettingsManager {
|
|
246
|
+
settings;
|
|
247
|
+
constructor(settings = {}) {
|
|
248
|
+
this.settings = settings;
|
|
249
|
+
}
|
|
250
|
+
loadUserSettings() {
|
|
251
|
+
// No-op for mock
|
|
252
|
+
}
|
|
253
|
+
loadProjectSettings() {
|
|
254
|
+
// No-op for mock
|
|
255
|
+
}
|
|
256
|
+
getApiKey() {
|
|
257
|
+
return this.settings.apiKey;
|
|
258
|
+
}
|
|
259
|
+
getBaseURL() {
|
|
260
|
+
return this.settings.baseURL;
|
|
261
|
+
}
|
|
262
|
+
getCurrentModel() {
|
|
263
|
+
return this.settings.model || 'glm-4.6';
|
|
264
|
+
}
|
|
265
|
+
updateUserSetting(key, value) {
|
|
266
|
+
this.settings[key] = value;
|
|
267
|
+
}
|
|
268
|
+
saveUserSettings() {
|
|
269
|
+
// No-op for mock
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Create a mock settings manager
|
|
274
|
+
*
|
|
275
|
+
* @param settings - Settings to return
|
|
276
|
+
* @returns Mock settings manager
|
|
277
|
+
*
|
|
278
|
+
* @example
|
|
279
|
+
* ```typescript
|
|
280
|
+
* import { createMockSettings } from '@defai.digital/ax-cli/sdk/testing';
|
|
281
|
+
*
|
|
282
|
+
* const settings = createMockSettings({
|
|
283
|
+
* apiKey: 'test-key',
|
|
284
|
+
* model: 'glm-4.6'
|
|
285
|
+
* });
|
|
286
|
+
* ```
|
|
287
|
+
*/
|
|
288
|
+
export function createMockSettings(settings) {
|
|
289
|
+
return new MockSettingsManager(settings);
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/sdk/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,SAAU,SAAQ,YAAY;IACjC,SAAS,CAAW;IACpB,oBAAoB,GAAG,CAAC,CAAC;IACzB,OAAO,GAAgB,EAAE,CAAC;IAC1B,QAAQ,GAAG,KAAK,CAAC;IAEzB;;;;OAIG;IACH,YAAY,UAGR,EAAE;QACJ,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAAe;QACtC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,8BAA8B;QAC9B,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7B,oCAAoC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnF,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,oCAAoC;QACpC,MAAM,cAAc,GAAc;YAChC,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAElC,sCAAsC;QACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,QAAQ;SACA,CAAC,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,EAAE,MAAM;SACK,CAAC,CAAC;QAErB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,CAAC,wBAAwB,CAAC,OAAe;QAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,8BAA8B;QAC9B,MAAM,SAAS,GAAc;YAC3B,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7B,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnF,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,qEAAqE;QACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM;gBACJ,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI,GAAG,GAAG;aACF,CAAC;QACtB,CAAC;QAED,oCAAoC;QACpC,MAAM,cAAc,GAAc;YAChC,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAElC,MAAM;YACJ,IAAI,EAAE,MAAM;SACK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,OAAe;QACtC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,4BAA4B,OAAO,EAAE;SAC9C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,YAAqB;QAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,mBAAmB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,aAAqB;QAC5C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,SAAmB;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IACpE,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,SAAoB;IAClD,OAAO,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,mBAAmB;IACtB,QAAQ,CAId;IAEF,YAAY,WAIR,EAAE;QACJ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,gBAAgB;QACd,iBAAiB;IACnB,CAAC;IAED,mBAAmB;QACjB,iBAAiB;IACnB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,SAAS,CAAC;IAC1C,CAAC;IAED,iBAAiB,CAAC,GAAW,EAAE,KAAc;QAC1C,IAAI,CAAC,QAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtC,CAAC;IAED,gBAAgB;QACd,iBAAiB;IACnB,CAAC;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAIlC;IACC,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC"}
|