termify-agent 1.0.12 → 1.0.13
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/dist/agent.d.ts +3 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +45 -2
- package/dist/agent.js.map +1 -1
- package/dist/daemon-client.d.ts +80 -0
- package/dist/daemon-client.d.ts.map +1 -0
- package/dist/daemon-client.js +319 -0
- package/dist/daemon-client.js.map +1 -0
- package/dist/git-service.d.ts +34 -0
- package/dist/git-service.d.ts.map +1 -0
- package/dist/git-service.js +99 -0
- package/dist/git-service.js.map +1 -0
- package/dist/pty-manager.d.ts +43 -0
- package/dist/pty-manager.d.ts.map +1 -1
- package/dist/pty-manager.js +121 -4
- package/dist/pty-manager.js.map +1 -1
- package/dist/ws-client.d.ts +42 -0
- package/dist/ws-client.d.ts.map +1 -1
- package/dist/ws-client.js +46 -0
- package/dist/ws-client.js.map +1 -1
- package/package.json +2 -1
- package/scripts/postinstall.js +102 -12
package/dist/agent.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export declare class Agent extends EventEmitter {
|
|
|
10
10
|
private ptyManager;
|
|
11
11
|
private sshManager;
|
|
12
12
|
private statsManager;
|
|
13
|
+
private daemonClient;
|
|
14
|
+
private useDaemonForStats;
|
|
13
15
|
private isRunning;
|
|
14
16
|
private agentId;
|
|
15
17
|
private agentName;
|
|
@@ -21,7 +23,7 @@ export declare class Agent extends EventEmitter {
|
|
|
21
23
|
/**
|
|
22
24
|
* Start the agent
|
|
23
25
|
*/
|
|
24
|
-
start(options?: AgentOptions): boolean
|
|
26
|
+
start(options?: AgentOptions): Promise<boolean>;
|
|
25
27
|
/**
|
|
26
28
|
* Stop the agent
|
|
27
29
|
*/
|
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,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAStC,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,KAAM,SAAQ,YAAY;IACrC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAuB;;IAmBxC;;OAEG;IACH,OAAO,CAAC,aAAa;IAgHrB;;OAEG;IACG,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiCzD;;OAEG;IACH,IAAI,IAAI,IAAI;IAuBZ;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0C5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,IAAI,EAAE,IAAI,MAAM,GAAG,IAAI,CAEtB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAExB;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE;YACN,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;YAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;SAC9B,CAAC;KACH;CAeF"}
|
package/dist/agent.js
CHANGED
|
@@ -3,6 +3,7 @@ import { WSClient } from './ws-client.js';
|
|
|
3
3
|
import { PTYManager } from './pty-manager.js';
|
|
4
4
|
import { SSHManager } from './ssh-manager.js';
|
|
5
5
|
import { StatsManager } from './stats-manager.js';
|
|
6
|
+
import { getDaemonClient } from './daemon-client.js';
|
|
6
7
|
import { getConfig, isConfigured } from './config.js';
|
|
7
8
|
import { logger } from './utils/logger.js';
|
|
8
9
|
/**
|
|
@@ -13,6 +14,8 @@ export class Agent extends EventEmitter {
|
|
|
13
14
|
ptyManager;
|
|
14
15
|
sshManager;
|
|
15
16
|
statsManager;
|
|
17
|
+
daemonClient;
|
|
18
|
+
useDaemonForStats = false;
|
|
16
19
|
isRunning = false;
|
|
17
20
|
agentId = null;
|
|
18
21
|
agentName = null;
|
|
@@ -22,6 +25,11 @@ export class Agent extends EventEmitter {
|
|
|
22
25
|
this.ptyManager = new PTYManager();
|
|
23
26
|
this.sshManager = new SSHManager();
|
|
24
27
|
this.statsManager = new StatsManager(5); // Collect stats every 5 seconds
|
|
28
|
+
this.daemonClient = getDaemonClient();
|
|
29
|
+
// Pass wsClient to PTYManager for git updates
|
|
30
|
+
this.ptyManager.setWSClient(this.wsClient);
|
|
31
|
+
// Pass daemon client to PTYManager for process monitoring
|
|
32
|
+
this.ptyManager.setDaemonClient(this.daemonClient);
|
|
25
33
|
this.setupHandlers();
|
|
26
34
|
}
|
|
27
35
|
/**
|
|
@@ -129,7 +137,7 @@ export class Agent extends EventEmitter {
|
|
|
129
137
|
/**
|
|
130
138
|
* Start the agent
|
|
131
139
|
*/
|
|
132
|
-
start(options = {}) {
|
|
140
|
+
async start(options = {}) {
|
|
133
141
|
if (!isConfigured()) {
|
|
134
142
|
logger.error('Agent not configured. Run `termify-agent login` first.');
|
|
135
143
|
return false;
|
|
@@ -143,6 +151,15 @@ export class Agent extends EventEmitter {
|
|
|
143
151
|
// Setup signal handlers for graceful shutdown
|
|
144
152
|
process.on('SIGINT', () => this.handleShutdown('SIGINT'));
|
|
145
153
|
process.on('SIGTERM', () => this.handleShutdown('SIGTERM'));
|
|
154
|
+
// Connect to termify-daemon for process monitoring and stats
|
|
155
|
+
const daemonConnected = await this.daemonClient.connect();
|
|
156
|
+
if (daemonConnected) {
|
|
157
|
+
logger.info('Connected to termify-daemon for process monitoring');
|
|
158
|
+
this.useDaemonForStats = true;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
logger.warn('termify-daemon not available, falling back to stats-agent and pgrep');
|
|
162
|
+
}
|
|
146
163
|
// Connect to server
|
|
147
164
|
this.wsClient.connect();
|
|
148
165
|
return true;
|
|
@@ -158,6 +175,8 @@ export class Agent extends EventEmitter {
|
|
|
158
175
|
this.isRunning = false;
|
|
159
176
|
// Stop stats collection
|
|
160
177
|
this.statsManager.stop();
|
|
178
|
+
this.daemonClient.stopStatsCollection();
|
|
179
|
+
this.daemonClient.disconnect();
|
|
161
180
|
// Kill all terminals (both local and SSH)
|
|
162
181
|
this.ptyManager.killAll();
|
|
163
182
|
this.sshManager.killAll();
|
|
@@ -169,6 +188,30 @@ export class Agent extends EventEmitter {
|
|
|
169
188
|
* Start collecting and sending system stats
|
|
170
189
|
*/
|
|
171
190
|
startStatsCollection() {
|
|
191
|
+
// Try daemon first for stats (more efficient)
|
|
192
|
+
if (this.useDaemonForStats && this.daemonClient.isConnected()) {
|
|
193
|
+
logger.info('Using termify-daemon for stats collection');
|
|
194
|
+
this.daemonClient.on('stats', (stats) => {
|
|
195
|
+
// Convert daemon stats to full stats format
|
|
196
|
+
// Note: daemon provides basic CPU/RAM, for full stats we still use stats-agent
|
|
197
|
+
this.wsClient.sendStats({
|
|
198
|
+
cpu: [],
|
|
199
|
+
cpuAvg: stats.cpuPercent,
|
|
200
|
+
memory: {
|
|
201
|
+
total: stats.memTotal,
|
|
202
|
+
used: stats.memUsed,
|
|
203
|
+
swapTotal: 0,
|
|
204
|
+
swapUsed: 0,
|
|
205
|
+
},
|
|
206
|
+
disks: [],
|
|
207
|
+
network: [],
|
|
208
|
+
processes: [],
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
this.daemonClient.startStatsCollection(5000);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
// Fall back to stats-agent for full stats
|
|
172
215
|
// Set up callback to send stats via WebSocket
|
|
173
216
|
this.statsManager.setStatsCallback((stats) => {
|
|
174
217
|
this.wsClient.sendStats(stats);
|
|
@@ -176,7 +219,7 @@ export class Agent extends EventEmitter {
|
|
|
176
219
|
// Start the stats-agent process
|
|
177
220
|
const started = this.statsManager.start();
|
|
178
221
|
if (started) {
|
|
179
|
-
logger.info('Stats collection started');
|
|
222
|
+
logger.info('Stats collection started via stats-agent');
|
|
180
223
|
}
|
|
181
224
|
else {
|
|
182
225
|
logger.warn('Stats collection not available (stats-agent not found)');
|
package/dist/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAM3C;;GAEG;AACH,MAAM,OAAO,KAAM,SAAQ,YAAY;IAC7B,QAAQ,CAAW;IACnB,UAAU,CAAa;IACvB,UAAU,CAAa;IACvB,YAAY,CAAe;IAC3B,SAAS,GAAG,KAAK,CAAC;IAClB,OAAO,GAAkB,IAAI,CAAC;IAC9B,SAAS,GAAkB,IAAI,CAAC;IAExC;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC;QACzE,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,mDAAmD;QACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,CAAC,IAAI,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE;gBACjD,IAAI;gBACJ,IAAI;gBACJ,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;YAEH,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,2BAA2B,CAAC,CAAC;YACvF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,mEAAmE;QACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YAChF,MAAM,CAAC,IAAI,CAAC,yBAAyB,UAAU,OAAO,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YAE1F,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAEnF,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,wBAAwB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YACpG,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,gDAAgD;QAChD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;YACrD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,iDAAiD;QACjD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC5D,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,+CAA+C;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,UAAU,EAAE,EAAE;YAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;YAClD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;YACtD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,2EAA2E;QAC3E,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE;YACzE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;YAClD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;YACtD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;YACpD,MAAM,CAAC,KAAK,CAAC,iBAAiB,UAAU,KAAK,KAAK,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;YACnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAE3C,wCAAwC;YACxC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE;YAC1C,0CAA0C;YAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;YACvC,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAwB,EAAE;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
export declare enum TerminalState {
|
|
3
|
+
Idle = 0,
|
|
4
|
+
Working = 1,
|
|
5
|
+
NeedsInput = 2,
|
|
6
|
+
Finished = 3,
|
|
7
|
+
Error = 4
|
|
8
|
+
}
|
|
9
|
+
export interface SystemStats {
|
|
10
|
+
cpuPercent: number;
|
|
11
|
+
memUsed: number;
|
|
12
|
+
memTotal: number;
|
|
13
|
+
}
|
|
14
|
+
export interface StateChangeEvent {
|
|
15
|
+
terminalId: string;
|
|
16
|
+
state: TerminalState;
|
|
17
|
+
processName: string | null;
|
|
18
|
+
}
|
|
19
|
+
export declare class DaemonClient extends EventEmitter {
|
|
20
|
+
private socket;
|
|
21
|
+
private connected;
|
|
22
|
+
private reconnectTimer;
|
|
23
|
+
private buffer;
|
|
24
|
+
private daemonProcess;
|
|
25
|
+
private statsInterval;
|
|
26
|
+
private statsIntervalMs;
|
|
27
|
+
constructor();
|
|
28
|
+
/**
|
|
29
|
+
* Find the daemon binary
|
|
30
|
+
*/
|
|
31
|
+
private findDaemonBinary;
|
|
32
|
+
/**
|
|
33
|
+
* Start the daemon process if not already running
|
|
34
|
+
*/
|
|
35
|
+
private startDaemon;
|
|
36
|
+
/**
|
|
37
|
+
* Connect to the daemon (starting it if necessary)
|
|
38
|
+
*/
|
|
39
|
+
connect(): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Disconnect from the daemon
|
|
42
|
+
*/
|
|
43
|
+
disconnect(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Watch a terminal's shell process
|
|
46
|
+
*/
|
|
47
|
+
watch(terminalId: string, shellPid: number): void;
|
|
48
|
+
/**
|
|
49
|
+
* Stop watching a terminal
|
|
50
|
+
*/
|
|
51
|
+
unwatch(terminalId: string): void;
|
|
52
|
+
/**
|
|
53
|
+
* Request system stats
|
|
54
|
+
*/
|
|
55
|
+
requestStats(): void;
|
|
56
|
+
/**
|
|
57
|
+
* Start periodic stats collection
|
|
58
|
+
*/
|
|
59
|
+
startStatsCollection(intervalMs?: number): void;
|
|
60
|
+
/**
|
|
61
|
+
* Stop periodic stats collection
|
|
62
|
+
*/
|
|
63
|
+
stopStatsCollection(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Ping the daemon
|
|
66
|
+
*/
|
|
67
|
+
ping(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Check if connected
|
|
70
|
+
*/
|
|
71
|
+
isConnected(): boolean;
|
|
72
|
+
private handleData;
|
|
73
|
+
private parseMessage;
|
|
74
|
+
private scheduleReconnect;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the shared daemon client instance
|
|
78
|
+
*/
|
|
79
|
+
export declare function getDaemonClient(): DaemonClient;
|
|
80
|
+
//# sourceMappingURL=daemon-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-client.d.ts","sourceRoot":"","sources":["../src/daemon-client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAoBtC,oBAAY,aAAa;IACvB,IAAI,IAAI;IACR,OAAO,IAAI;IACX,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,KAAK,IAAI;CACV;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,eAAe,CAAQ;;IAM/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;YACW,WAAW;IAgDzB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAiDjC;;OAEG;IACH,UAAU,IAAI,IAAI;IAgBlB;;OAEG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAejD;;OAEG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAcjC;;OAEG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,oBAAoB,CAAC,UAAU,SAAO,GAAG,IAAI;IAe7C;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAO3B;;OAEG;IACH,IAAI,IAAI,IAAI;IAKZ;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,YAAY;IAsDpB,OAAO,CAAC,iBAAiB;CAU1B;AAKD;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAK9C"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
// packages/termify-agent/src/daemon-client.ts
|
|
2
|
+
import * as net from 'net';
|
|
3
|
+
import { EventEmitter } from 'events';
|
|
4
|
+
import { spawn } from 'child_process';
|
|
5
|
+
import { existsSync } from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import * as os from 'os';
|
|
8
|
+
import { logger } from './utils/logger.js';
|
|
9
|
+
const SOCKET_PATH = '/tmp/termify-daemon.sock';
|
|
10
|
+
// Protocol commands
|
|
11
|
+
const CMD_WATCH = 0x01;
|
|
12
|
+
const CMD_UNWATCH = 0x02;
|
|
13
|
+
const CMD_GET_STATS = 0x03;
|
|
14
|
+
const CMD_PING = 0x04;
|
|
15
|
+
// Response types
|
|
16
|
+
const RESP_STATE_CHANGE = 0x01;
|
|
17
|
+
const RESP_STATS = 0x02;
|
|
18
|
+
const RESP_PONG = 0x03;
|
|
19
|
+
export var TerminalState;
|
|
20
|
+
(function (TerminalState) {
|
|
21
|
+
TerminalState[TerminalState["Idle"] = 0] = "Idle";
|
|
22
|
+
TerminalState[TerminalState["Working"] = 1] = "Working";
|
|
23
|
+
TerminalState[TerminalState["NeedsInput"] = 2] = "NeedsInput";
|
|
24
|
+
TerminalState[TerminalState["Finished"] = 3] = "Finished";
|
|
25
|
+
TerminalState[TerminalState["Error"] = 4] = "Error";
|
|
26
|
+
})(TerminalState || (TerminalState = {}));
|
|
27
|
+
export class DaemonClient extends EventEmitter {
|
|
28
|
+
socket = null;
|
|
29
|
+
connected = false;
|
|
30
|
+
reconnectTimer = null;
|
|
31
|
+
buffer = Buffer.alloc(0);
|
|
32
|
+
daemonProcess = null;
|
|
33
|
+
statsInterval = null;
|
|
34
|
+
statsIntervalMs = 5000;
|
|
35
|
+
constructor() {
|
|
36
|
+
super();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Find the daemon binary
|
|
40
|
+
*/
|
|
41
|
+
findDaemonBinary() {
|
|
42
|
+
const homeDir = os.homedir();
|
|
43
|
+
const searchPaths = [
|
|
44
|
+
// User's termify directory
|
|
45
|
+
path.join(homeDir, '.termify', 'termify-daemon'),
|
|
46
|
+
// Development paths
|
|
47
|
+
path.join(process.cwd(), '..', 'termify-daemon', 'target', 'release', 'termify-daemon'),
|
|
48
|
+
path.join(process.cwd(), '..', 'termify-daemon', 'target', 'debug', 'termify-daemon'),
|
|
49
|
+
// Global
|
|
50
|
+
'/usr/local/bin/termify-daemon',
|
|
51
|
+
];
|
|
52
|
+
for (const p of searchPaths) {
|
|
53
|
+
if (existsSync(p)) {
|
|
54
|
+
return p;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Start the daemon process if not already running
|
|
61
|
+
*/
|
|
62
|
+
async startDaemon() {
|
|
63
|
+
// Check if socket already exists (daemon might be running)
|
|
64
|
+
if (existsSync(SOCKET_PATH)) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
const binaryPath = this.findDaemonBinary();
|
|
68
|
+
if (!binaryPath) {
|
|
69
|
+
logger.warn('termify-daemon binary not found. Process monitoring disabled.');
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
logger.info(`Starting termify-daemon from ${binaryPath}`);
|
|
73
|
+
return new Promise((resolve) => {
|
|
74
|
+
this.daemonProcess = spawn(binaryPath, [], {
|
|
75
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
76
|
+
detached: true,
|
|
77
|
+
});
|
|
78
|
+
this.daemonProcess.unref();
|
|
79
|
+
this.daemonProcess.stderr?.on('data', (data) => {
|
|
80
|
+
const msg = data.toString().trim();
|
|
81
|
+
if (msg.includes('Started on')) {
|
|
82
|
+
resolve(true);
|
|
83
|
+
}
|
|
84
|
+
else if (msg) {
|
|
85
|
+
logger.debug(`[termify-daemon] ${msg}`);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
this.daemonProcess.on('error', (err) => {
|
|
89
|
+
logger.error(`Failed to start termify-daemon: ${err.message}`);
|
|
90
|
+
resolve(false);
|
|
91
|
+
});
|
|
92
|
+
this.daemonProcess.on('close', (code) => {
|
|
93
|
+
if (code !== 0) {
|
|
94
|
+
logger.warn(`termify-daemon exited with code ${code}`);
|
|
95
|
+
}
|
|
96
|
+
this.daemonProcess = null;
|
|
97
|
+
});
|
|
98
|
+
// Give it a moment to start
|
|
99
|
+
setTimeout(() => resolve(existsSync(SOCKET_PATH)), 500);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Connect to the daemon (starting it if necessary)
|
|
104
|
+
*/
|
|
105
|
+
async connect() {
|
|
106
|
+
if (this.connected) {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
// Try to start daemon if socket doesn't exist
|
|
110
|
+
if (!existsSync(SOCKET_PATH)) {
|
|
111
|
+
const started = await this.startDaemon();
|
|
112
|
+
if (!started) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
this.socket = net.createConnection(SOCKET_PATH, () => {
|
|
118
|
+
this.connected = true;
|
|
119
|
+
logger.info('Connected to termify-daemon');
|
|
120
|
+
this.emit('connected');
|
|
121
|
+
resolve(true);
|
|
122
|
+
});
|
|
123
|
+
this.socket.on('data', (data) => {
|
|
124
|
+
this.handleData(data);
|
|
125
|
+
});
|
|
126
|
+
this.socket.on('error', (err) => {
|
|
127
|
+
if (!this.connected) {
|
|
128
|
+
logger.warn(`Daemon connection error: ${err.message}`);
|
|
129
|
+
resolve(false);
|
|
130
|
+
}
|
|
131
|
+
this.emit('error', err);
|
|
132
|
+
});
|
|
133
|
+
this.socket.on('close', () => {
|
|
134
|
+
this.connected = false;
|
|
135
|
+
this.emit('disconnected');
|
|
136
|
+
this.scheduleReconnect();
|
|
137
|
+
});
|
|
138
|
+
// Timeout for connection
|
|
139
|
+
setTimeout(() => {
|
|
140
|
+
if (!this.connected) {
|
|
141
|
+
this.socket?.destroy();
|
|
142
|
+
resolve(false);
|
|
143
|
+
}
|
|
144
|
+
}, 2000);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Disconnect from the daemon
|
|
149
|
+
*/
|
|
150
|
+
disconnect() {
|
|
151
|
+
if (this.reconnectTimer) {
|
|
152
|
+
clearTimeout(this.reconnectTimer);
|
|
153
|
+
this.reconnectTimer = null;
|
|
154
|
+
}
|
|
155
|
+
if (this.statsInterval) {
|
|
156
|
+
clearInterval(this.statsInterval);
|
|
157
|
+
this.statsInterval = null;
|
|
158
|
+
}
|
|
159
|
+
if (this.socket) {
|
|
160
|
+
this.socket.destroy();
|
|
161
|
+
this.socket = null;
|
|
162
|
+
}
|
|
163
|
+
this.connected = false;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Watch a terminal's shell process
|
|
167
|
+
*/
|
|
168
|
+
watch(terminalId, shellPid) {
|
|
169
|
+
if (!this.connected || !this.socket)
|
|
170
|
+
return;
|
|
171
|
+
const idBytes = Buffer.from(terminalId, 'utf8');
|
|
172
|
+
const buf = Buffer.alloc(1 + 1 + idBytes.length + 4);
|
|
173
|
+
buf[0] = CMD_WATCH;
|
|
174
|
+
buf[1] = idBytes.length;
|
|
175
|
+
idBytes.copy(buf, 2);
|
|
176
|
+
buf.writeUInt32LE(shellPid, 2 + idBytes.length);
|
|
177
|
+
this.socket.write(buf);
|
|
178
|
+
logger.debug(`Watching terminal ${terminalId} (pid ${shellPid})`);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Stop watching a terminal
|
|
182
|
+
*/
|
|
183
|
+
unwatch(terminalId) {
|
|
184
|
+
if (!this.connected || !this.socket)
|
|
185
|
+
return;
|
|
186
|
+
const idBytes = Buffer.from(terminalId, 'utf8');
|
|
187
|
+
const buf = Buffer.alloc(1 + 1 + idBytes.length);
|
|
188
|
+
buf[0] = CMD_UNWATCH;
|
|
189
|
+
buf[1] = idBytes.length;
|
|
190
|
+
idBytes.copy(buf, 2);
|
|
191
|
+
this.socket.write(buf);
|
|
192
|
+
logger.debug(`Unwatching terminal ${terminalId}`);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Request system stats
|
|
196
|
+
*/
|
|
197
|
+
requestStats() {
|
|
198
|
+
if (!this.connected || !this.socket)
|
|
199
|
+
return;
|
|
200
|
+
this.socket.write(Buffer.from([CMD_GET_STATS]));
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Start periodic stats collection
|
|
204
|
+
*/
|
|
205
|
+
startStatsCollection(intervalMs = 5000) {
|
|
206
|
+
this.statsIntervalMs = intervalMs;
|
|
207
|
+
if (this.statsInterval) {
|
|
208
|
+
clearInterval(this.statsInterval);
|
|
209
|
+
}
|
|
210
|
+
// Request stats immediately
|
|
211
|
+
this.requestStats();
|
|
212
|
+
// Then periodically
|
|
213
|
+
this.statsInterval = setInterval(() => {
|
|
214
|
+
this.requestStats();
|
|
215
|
+
}, this.statsIntervalMs);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Stop periodic stats collection
|
|
219
|
+
*/
|
|
220
|
+
stopStatsCollection() {
|
|
221
|
+
if (this.statsInterval) {
|
|
222
|
+
clearInterval(this.statsInterval);
|
|
223
|
+
this.statsInterval = null;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Ping the daemon
|
|
228
|
+
*/
|
|
229
|
+
ping() {
|
|
230
|
+
if (!this.connected || !this.socket)
|
|
231
|
+
return;
|
|
232
|
+
this.socket.write(Buffer.from([CMD_PING]));
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Check if connected
|
|
236
|
+
*/
|
|
237
|
+
isConnected() {
|
|
238
|
+
return this.connected;
|
|
239
|
+
}
|
|
240
|
+
handleData(data) {
|
|
241
|
+
// Append to buffer
|
|
242
|
+
this.buffer = Buffer.concat([this.buffer, data]);
|
|
243
|
+
// Process complete messages
|
|
244
|
+
while (this.buffer.length > 0) {
|
|
245
|
+
const consumed = this.parseMessage();
|
|
246
|
+
if (consumed === 0)
|
|
247
|
+
break;
|
|
248
|
+
this.buffer = this.buffer.subarray(consumed);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
parseMessage() {
|
|
252
|
+
if (this.buffer.length === 0)
|
|
253
|
+
return 0;
|
|
254
|
+
const type = this.buffer[0];
|
|
255
|
+
switch (type) {
|
|
256
|
+
case RESP_STATE_CHANGE: {
|
|
257
|
+
// terminal_id_len(1) + terminal_id + state(1) + process_len(1) + process_name
|
|
258
|
+
if (this.buffer.length < 3)
|
|
259
|
+
return 0;
|
|
260
|
+
const idLen = this.buffer[1];
|
|
261
|
+
if (this.buffer.length < 2 + idLen + 2)
|
|
262
|
+
return 0;
|
|
263
|
+
const terminalId = this.buffer.subarray(2, 2 + idLen).toString('utf8');
|
|
264
|
+
const state = this.buffer[2 + idLen];
|
|
265
|
+
const processLen = this.buffer[2 + idLen + 1];
|
|
266
|
+
if (this.buffer.length < 2 + idLen + 2 + processLen)
|
|
267
|
+
return 0;
|
|
268
|
+
const processName = processLen > 0
|
|
269
|
+
? this.buffer.subarray(2 + idLen + 2, 2 + idLen + 2 + processLen).toString('utf8')
|
|
270
|
+
: null;
|
|
271
|
+
this.emit('stateChange', { terminalId, state, processName });
|
|
272
|
+
return 1 + 1 + idLen + 1 + 1 + processLen;
|
|
273
|
+
}
|
|
274
|
+
case RESP_STATS: {
|
|
275
|
+
// cpu(4 f32) + mem_used(8 u64) + mem_total(8 u64)
|
|
276
|
+
if (this.buffer.length < 21)
|
|
277
|
+
return 0;
|
|
278
|
+
const cpuPercent = this.buffer.readFloatLE(1);
|
|
279
|
+
const memUsed = this.buffer.readBigUInt64LE(5);
|
|
280
|
+
const memTotal = this.buffer.readBigUInt64LE(13);
|
|
281
|
+
this.emit('stats', {
|
|
282
|
+
cpuPercent,
|
|
283
|
+
memUsed: Number(memUsed),
|
|
284
|
+
memTotal: Number(memTotal),
|
|
285
|
+
});
|
|
286
|
+
return 21;
|
|
287
|
+
}
|
|
288
|
+
case RESP_PONG: {
|
|
289
|
+
this.emit('pong');
|
|
290
|
+
return 1;
|
|
291
|
+
}
|
|
292
|
+
default:
|
|
293
|
+
// Unknown message, skip 1 byte
|
|
294
|
+
return 1;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
scheduleReconnect() {
|
|
298
|
+
if (this.reconnectTimer)
|
|
299
|
+
return;
|
|
300
|
+
this.reconnectTimer = setTimeout(() => {
|
|
301
|
+
this.reconnectTimer = null;
|
|
302
|
+
this.connect().catch(() => {
|
|
303
|
+
// Will retry via close event
|
|
304
|
+
});
|
|
305
|
+
}, 2000);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// Singleton instance
|
|
309
|
+
let daemonClientInstance = null;
|
|
310
|
+
/**
|
|
311
|
+
* Get the shared daemon client instance
|
|
312
|
+
*/
|
|
313
|
+
export function getDaemonClient() {
|
|
314
|
+
if (!daemonClientInstance) {
|
|
315
|
+
daemonClientInstance = new DaemonClient();
|
|
316
|
+
}
|
|
317
|
+
return daemonClientInstance;
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=daemon-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-client.js","sourceRoot":"","sources":["../src/daemon-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
export interface GitBranchInfo {
|
|
3
|
+
current: string;
|
|
4
|
+
branches: string[];
|
|
5
|
+
isGitRepo: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface GitCommitInfo {
|
|
8
|
+
hash: string;
|
|
9
|
+
shortHash: string;
|
|
10
|
+
parentHashes: string[];
|
|
11
|
+
authorName: string;
|
|
12
|
+
authorEmail: string;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
summary: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class GitService extends EventEmitter {
|
|
17
|
+
private git;
|
|
18
|
+
private cwd;
|
|
19
|
+
private isRepo;
|
|
20
|
+
constructor(cwd: string);
|
|
21
|
+
init(): Promise<boolean>;
|
|
22
|
+
getBranchInfo(): Promise<GitBranchInfo>;
|
|
23
|
+
checkout(branch: string): Promise<{
|
|
24
|
+
success: boolean;
|
|
25
|
+
error?: string;
|
|
26
|
+
}>;
|
|
27
|
+
createBranch(name: string, checkout?: boolean): Promise<{
|
|
28
|
+
success: boolean;
|
|
29
|
+
error?: string;
|
|
30
|
+
}>;
|
|
31
|
+
getCommitLog(maxCount?: number): Promise<GitCommitInfo[]>;
|
|
32
|
+
setCwd(cwd: string): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=git-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-service.d.ts","sourceRoot":"","sources":["../src/git-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAYD,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAkB;gBAEpB,GAAG,EAAE,MAAM;IAMjB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAWxB,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAkBvC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAUvE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAYnG,YAAY,CAAC,QAAQ,GAAE,MAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgCpE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAK1B"}
|