@ai-support-agent/cli 0.0.5 → 0.0.6
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-runner.d.ts +2 -2
- package/dist/agent-runner.d.ts.map +1 -1
- package/dist/agent-runner.js +2 -2
- package/dist/agent-runner.js.map +1 -1
- package/dist/appsync-subscriber.d.ts +15 -9
- package/dist/appsync-subscriber.d.ts.map +1 -1
- package/dist/appsync-subscriber.js +47 -89
- package/dist/appsync-subscriber.js.map +1 -1
- package/dist/base-websocket.d.ts +40 -0
- package/dist/base-websocket.d.ts.map +1 -0
- package/dist/base-websocket.js +95 -0
- package/dist/base-websocket.js.map +1 -0
- package/dist/child-process-manager.d.ts +20 -0
- package/dist/child-process-manager.d.ts.map +1 -0
- package/dist/child-process-manager.js +125 -0
- package/dist/child-process-manager.js.map +1 -0
- package/dist/commands/api-chat-executor.d.ts.map +1 -1
- package/dist/commands/api-chat-executor.js +46 -56
- package/dist/commands/api-chat-executor.js.map +1 -1
- package/dist/commands/chat-executor.d.ts.map +1 -1
- package/dist/commands/chat-executor.js +1 -2
- package/dist/commands/chat-executor.js.map +1 -1
- package/dist/commands/claude-code-args.d.ts +12 -0
- package/dist/commands/claude-code-args.d.ts.map +1 -0
- package/dist/commands/claude-code-args.js +78 -0
- package/dist/commands/claude-code-args.js.map +1 -0
- package/dist/commands/claude-code-runner.d.ts +3 -72
- package/dist/commands/claude-code-runner.d.ts.map +1 -1
- package/dist/commands/claude-code-runner.js +24 -288
- package/dist/commands/claude-code-runner.js.map +1 -1
- package/dist/commands/claude-code-stream.d.ts +63 -0
- package/dist/commands/claude-code-stream.d.ts.map +1 -0
- package/dist/commands/claude-code-stream.js +179 -0
- package/dist/commands/claude-code-stream.js.map +1 -0
- package/dist/commands/shared-chat-utils.d.ts +4 -0
- package/dist/commands/shared-chat-utils.d.ts.map +1 -1
- package/dist/commands/shared-chat-utils.js +7 -0
- package/dist/commands/shared-chat-utils.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -1
- package/dist/constants.js.map +1 -1
- package/dist/process-manager.d.ts +1 -19
- package/dist/process-manager.d.ts.map +1 -1
- package/dist/process-manager.js +3 -121
- package/dist/process-manager.js.map +1 -1
- package/dist/terminal/terminal-websocket.d.ts +8 -9
- package/dist/terminal/terminal-websocket.d.ts.map +1 -1
- package/dist/terminal/terminal-websocket.js +30 -70
- package/dist/terminal/terminal-websocket.js.map +1 -1
- package/dist/utils/activity-timeout.d.ts +19 -0
- package/dist/utils/activity-timeout.d.ts.map +1 -0
- package/dist/utils/activity-timeout.js +28 -0
- package/dist/utils/activity-timeout.js.map +1 -0
- package/dist/utils/json-parse.d.ts +5 -0
- package/dist/utils/json-parse.d.ts.map +1 -0
- package/dist/utils/json-parse.js +15 -0
- package/dist/utils/json-parse.js.map +1 -0
- package/dist/utils/stream-parser.d.ts +14 -0
- package/dist/utils/stream-parser.d.ts.map +1 -0
- package/dist/utils/stream-parser.js +31 -0
- package/dist/utils/stream-parser.js.map +1 -0
- package/package.json +1 -1
package/dist/agent-runner.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AutoUpdaterHandle } from './auto-updater';
|
|
2
|
-
import {
|
|
2
|
+
import { ChildProcessManager } from './child-process-manager';
|
|
3
3
|
import type { AgentChatMode, AutoUpdateConfig, ProjectRegistration, ReleaseChannel } from './types';
|
|
4
4
|
export interface RunnerOptions {
|
|
5
5
|
token?: string;
|
|
@@ -26,7 +26,7 @@ export type ShutdownTarget = {
|
|
|
26
26
|
}[];
|
|
27
27
|
} | {
|
|
28
28
|
kind: 'processManager';
|
|
29
|
-
processManager:
|
|
29
|
+
processManager: ChildProcessManager;
|
|
30
30
|
};
|
|
31
31
|
export declare function setupShutdownHandlers(target: ShutdownTarget, updater?: AutoUpdaterHandle): void;
|
|
32
32
|
export declare function resolveAutoUpdateConfig(options: RunnerOptions, config?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runner.d.ts","sourceRoot":"","sources":["../src/agent-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAoB,MAAM,gBAAgB,CAAA;AAKzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"agent-runner.d.ts","sourceRoot":"","sources":["../src/agent-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAoB,MAAM,gBAAgB,CAAA;AAKzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAI7D,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAKnG,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,aAAa,CAAC,EAAE,cAAc,CAAA;CAC/B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,GACA;IAAE,IAAI,EAAE,MAAM,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,cAAc,EAAE,SAAS,CAAA;CAAE,CAOhE;AAYD,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE,EAAE,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,cAAc,EAAE,mBAAmB,CAAA;CAAE,CAAA;AAEnE,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,IAAI,CAkBN;AAiCD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,GAAG,gBAAgB,CAWnI;AAqBD,wBAAsB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GtE"}
|
package/dist/agent-runner.js
CHANGED
|
@@ -43,7 +43,7 @@ const constants_1 = require("./constants");
|
|
|
43
43
|
const config_manager_1 = require("./config-manager");
|
|
44
44
|
const i18n_1 = require("./i18n");
|
|
45
45
|
const logger_1 = require("./logger");
|
|
46
|
-
const
|
|
46
|
+
const child_process_manager_1 = require("./child-process-manager");
|
|
47
47
|
const project_agent_1 = require("./project-agent");
|
|
48
48
|
const sentry_1 = require("./sentry");
|
|
49
49
|
const system_info_1 = require("./system-info");
|
|
@@ -197,7 +197,7 @@ async function startAgent(options) {
|
|
|
197
197
|
return;
|
|
198
198
|
}
|
|
199
199
|
// Multiple projects: fork child processes for isolation
|
|
200
|
-
const processManager = new
|
|
200
|
+
const processManager = new child_process_manager_1.ChildProcessManager();
|
|
201
201
|
for (const project of projects) {
|
|
202
202
|
processManager.forkProject(project, agentId, {
|
|
203
203
|
pollInterval,
|
package/dist/agent-runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runner.js","sourceRoot":"","sources":["../src/agent-runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,8CAgBC;AAgBD,sDAqBC;AAiCD,0DAWC;AAqBD,gCA6GC;AA7PD,uCAAwB;AAExB,iDAAyE;AACzE,2CAAiJ;AACjJ,qDAAyE;AACzE,iCAA0B;AAC1B,qCAAiC;AACjC,
|
|
1
|
+
{"version":3,"file":"agent-runner.js","sourceRoot":"","sources":["../src/agent-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import { BaseWebSocketConnection } from './base-websocket';
|
|
1
3
|
export interface AppSyncNotification {
|
|
2
4
|
id: string;
|
|
3
5
|
table: string;
|
|
@@ -7,8 +9,12 @@ export interface AppSyncNotification {
|
|
|
7
9
|
action: string;
|
|
8
10
|
content: Record<string, unknown>;
|
|
9
11
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
interface AppSyncMessage {
|
|
13
|
+
id?: string;
|
|
14
|
+
type: string;
|
|
15
|
+
payload?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export declare class AppSyncSubscriber extends BaseWebSocketConnection<AppSyncMessage> {
|
|
12
18
|
private readonly realtimeUrl;
|
|
13
19
|
private readonly host;
|
|
14
20
|
private readonly apiKey;
|
|
@@ -16,21 +22,21 @@ export declare class AppSyncSubscriber {
|
|
|
16
22
|
private tenantCode;
|
|
17
23
|
private messageHandler;
|
|
18
24
|
private reconnectCallback;
|
|
19
|
-
private readonly reconnectAttemptsRef;
|
|
20
|
-
private closed;
|
|
21
25
|
private keepAliveTimer;
|
|
22
26
|
private keepAliveTimeoutMs;
|
|
23
27
|
constructor(appsyncUrl: string, apiKey: string);
|
|
24
|
-
connect(): Promise<void>;
|
|
25
28
|
subscribe(tenantCode: string, onMessage: (notification: AppSyncNotification) => void): void;
|
|
26
29
|
onReconnect(callback: () => void): void;
|
|
27
|
-
|
|
30
|
+
protected createWebSocket(): WebSocket;
|
|
31
|
+
protected onOpen(ws: WebSocket): void;
|
|
32
|
+
protected onParsedMessage(msg: AppSyncMessage, resolveConnect?: (value: void) => void): void;
|
|
33
|
+
protected onDisconnect(): void;
|
|
34
|
+
protected onWebSocketClose(): void;
|
|
35
|
+
protected onReconnected(): void;
|
|
28
36
|
private buildConnectionUrl;
|
|
29
|
-
private doConnect;
|
|
30
|
-
private handleMessage;
|
|
31
37
|
private sendSubscription;
|
|
32
|
-
private doReconnect;
|
|
33
38
|
private resetKeepAliveTimer;
|
|
34
39
|
private clearKeepAliveTimer;
|
|
35
40
|
}
|
|
41
|
+
export {};
|
|
36
42
|
//# sourceMappingURL=appsync-subscriber.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appsync-subscriber.d.ts","sourceRoot":"","sources":["../src/appsync-subscriber.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"appsync-subscriber.d.ts","sourceRoot":"","sources":["../src/appsync-subscriber.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAE1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAI1D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAcD,qBAAa,iBAAkB,SAAQ,uBAAuB,CAAC,cAAc,CAAC;IAC5E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,cAAc,CAA6D;IACnF,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,kBAAkB,CAAI;gBAElB,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAkB9C,SAAS,CACP,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,CAAC,YAAY,EAAE,mBAAmB,KAAK,IAAI,GACrD,IAAI;IAQP,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC,SAAS,CAAC,eAAe,IAAI,SAAS;IAKtC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAKrC,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;IA8C5F,SAAS,CAAC,YAAY,IAAI,IAAI;IAgB9B,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAIlC,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,mBAAmB;CAM5B"}
|
|
@@ -5,10 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.AppSyncSubscriber = void 0;
|
|
7
7
|
const ws_1 = __importDefault(require("ws"));
|
|
8
|
+
const base_websocket_1 = require("./base-websocket");
|
|
8
9
|
const constants_1 = require("./constants");
|
|
9
10
|
const logger_1 = require("./logger");
|
|
10
|
-
const utils_1 = require("./utils");
|
|
11
|
-
const ws_reconnect_1 = require("./ws-reconnect");
|
|
12
11
|
const SUBSCRIPTION_QUERY = `subscription OnMessage($tenantCode: String!) {
|
|
13
12
|
onMessage(tenantCode: $tenantCode) {
|
|
14
13
|
id
|
|
@@ -20,10 +19,7 @@ const SUBSCRIPTION_QUERY = `subscription OnMessage($tenantCode: String!) {
|
|
|
20
19
|
content
|
|
21
20
|
}
|
|
22
21
|
}`;
|
|
23
|
-
|
|
24
|
-
const RECONNECT_BASE_DELAY_MS = 1000;
|
|
25
|
-
class AppSyncSubscriber {
|
|
26
|
-
ws = null;
|
|
22
|
+
class AppSyncSubscriber extends base_websocket_1.BaseWebSocketConnection {
|
|
27
23
|
realtimeUrl;
|
|
28
24
|
host;
|
|
29
25
|
apiKey;
|
|
@@ -31,11 +27,14 @@ class AppSyncSubscriber {
|
|
|
31
27
|
tenantCode = null;
|
|
32
28
|
messageHandler = null;
|
|
33
29
|
reconnectCallback = null;
|
|
34
|
-
reconnectAttemptsRef = { current: 0 };
|
|
35
|
-
closed = false;
|
|
36
30
|
keepAliveTimer = null;
|
|
37
31
|
keepAliveTimeoutMs = 0;
|
|
38
32
|
constructor(appsyncUrl, apiKey) {
|
|
33
|
+
super({
|
|
34
|
+
maxReconnectRetries: constants_1.APPSYNC_MAX_RECONNECT_RETRIES,
|
|
35
|
+
reconnectBaseDelayMs: constants_1.APPSYNC_RECONNECT_BASE_DELAY_MS,
|
|
36
|
+
logPrefix: 'AppSync:',
|
|
37
|
+
});
|
|
39
38
|
this.apiKey = apiKey;
|
|
40
39
|
const url = new URL(appsyncUrl);
|
|
41
40
|
if (url.protocol !== 'https:' && url.protocol !== 'http:') {
|
|
@@ -45,12 +44,7 @@ class AppSyncSubscriber {
|
|
|
45
44
|
this.realtimeUrl = appsyncUrl
|
|
46
45
|
.replace('https://', 'wss://')
|
|
47
46
|
.replace('http://', 'ws://')
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
connect() {
|
|
51
|
-
this.closed = false;
|
|
52
|
-
this.reconnectAttemptsRef.current = 0;
|
|
53
|
-
return this.doConnect();
|
|
47
|
+
.replace('.appsync-api.', '.appsync-realtime-api.');
|
|
54
48
|
}
|
|
55
49
|
subscribe(tenantCode, onMessage) {
|
|
56
50
|
this.tenantCode = tenantCode;
|
|
@@ -62,73 +56,15 @@ class AppSyncSubscriber {
|
|
|
62
56
|
onReconnect(callback) {
|
|
63
57
|
this.reconnectCallback = callback;
|
|
64
58
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (this.ws) {
|
|
69
|
-
if (this.subscriptionId) {
|
|
70
|
-
const stopMessage = {
|
|
71
|
-
id: this.subscriptionId,
|
|
72
|
-
type: 'stop',
|
|
73
|
-
};
|
|
74
|
-
try {
|
|
75
|
-
this.ws.send(JSON.stringify(stopMessage));
|
|
76
|
-
}
|
|
77
|
-
catch {
|
|
78
|
-
// ignore send errors during disconnect
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
this.ws.close();
|
|
82
|
-
this.ws = null;
|
|
83
|
-
}
|
|
84
|
-
this.subscriptionId = null;
|
|
59
|
+
createWebSocket() {
|
|
60
|
+
const url = this.buildConnectionUrl();
|
|
61
|
+
return new ws_1.default(url, ['graphql-ws']);
|
|
85
62
|
}
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
'x-api-key': this.apiKey,
|
|
90
|
-
'content-type': 'application/json',
|
|
91
|
-
};
|
|
92
|
-
const encodedHeader = Buffer.from(JSON.stringify(header)).toString('base64');
|
|
93
|
-
const encodedPayload = Buffer.from(JSON.stringify({})).toString('base64');
|
|
94
|
-
return `${this.realtimeUrl}?header=${encodedHeader}&payload=${encodedPayload}`;
|
|
95
|
-
}
|
|
96
|
-
doConnect() {
|
|
97
|
-
return new Promise((resolve, reject) => {
|
|
98
|
-
const url = this.buildConnectionUrl();
|
|
99
|
-
const ws = new ws_1.default(url, ['graphql-ws']);
|
|
100
|
-
ws.on('open', () => {
|
|
101
|
-
const initMessage = { type: 'connection_init' };
|
|
102
|
-
ws.send(JSON.stringify(initMessage));
|
|
103
|
-
});
|
|
104
|
-
ws.on('message', (data) => {
|
|
105
|
-
let msg;
|
|
106
|
-
try {
|
|
107
|
-
msg = JSON.parse(data.toString());
|
|
108
|
-
}
|
|
109
|
-
catch {
|
|
110
|
-
logger_1.logger.debug('AppSync: Failed to parse message');
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
this.handleMessage(msg, resolve);
|
|
114
|
-
});
|
|
115
|
-
ws.on('error', (error) => {
|
|
116
|
-
logger_1.logger.debug(`AppSync WebSocket error: ${(0, utils_1.getErrorMessage)(error)}`);
|
|
117
|
-
if (this.reconnectAttemptsRef.current === 0 && !this.ws) {
|
|
118
|
-
reject(error);
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
ws.on('close', () => {
|
|
122
|
-
this.clearKeepAliveTimer();
|
|
123
|
-
if (!this.closed) {
|
|
124
|
-
logger_1.logger.debug('AppSync WebSocket closed unexpectedly');
|
|
125
|
-
void this.doReconnect();
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
this.ws = ws;
|
|
129
|
-
});
|
|
63
|
+
onOpen(ws) {
|
|
64
|
+
const initMessage = { type: 'connection_init' };
|
|
65
|
+
ws.send(JSON.stringify(initMessage));
|
|
130
66
|
}
|
|
131
|
-
|
|
67
|
+
onParsedMessage(msg, resolveConnect) {
|
|
132
68
|
switch (msg.type) {
|
|
133
69
|
case 'connection_ack': {
|
|
134
70
|
const timeoutMs = msg.payload?.connectionTimeoutMs ?? constants_1.DEFAULT_APPSYNC_TIMEOUT_MS;
|
|
@@ -166,6 +102,38 @@ class AppSyncSubscriber {
|
|
|
166
102
|
break;
|
|
167
103
|
}
|
|
168
104
|
}
|
|
105
|
+
onDisconnect() {
|
|
106
|
+
this.clearKeepAliveTimer();
|
|
107
|
+
if (this.ws && this.subscriptionId) {
|
|
108
|
+
const stopMessage = {
|
|
109
|
+
id: this.subscriptionId,
|
|
110
|
+
type: 'stop',
|
|
111
|
+
};
|
|
112
|
+
try {
|
|
113
|
+
this.ws.send(JSON.stringify(stopMessage));
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// ignore send errors during disconnect
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
this.subscriptionId = null;
|
|
120
|
+
}
|
|
121
|
+
onWebSocketClose() {
|
|
122
|
+
this.clearKeepAliveTimer();
|
|
123
|
+
}
|
|
124
|
+
onReconnected() {
|
|
125
|
+
this.reconnectCallback?.();
|
|
126
|
+
}
|
|
127
|
+
buildConnectionUrl() {
|
|
128
|
+
const header = {
|
|
129
|
+
host: this.host,
|
|
130
|
+
'x-api-key': this.apiKey,
|
|
131
|
+
'content-type': 'application/json',
|
|
132
|
+
};
|
|
133
|
+
const encodedHeader = Buffer.from(JSON.stringify(header)).toString('base64');
|
|
134
|
+
const encodedPayload = Buffer.from(JSON.stringify({})).toString('base64');
|
|
135
|
+
return `${this.realtimeUrl}?header=${encodedHeader}&payload=${encodedPayload}`;
|
|
136
|
+
}
|
|
169
137
|
sendSubscription(tenantCode) {
|
|
170
138
|
if (!this.ws || this.ws.readyState !== ws_1.default.OPEN)
|
|
171
139
|
return;
|
|
@@ -191,16 +159,6 @@ class AppSyncSubscriber {
|
|
|
191
159
|
};
|
|
192
160
|
this.ws.send(JSON.stringify(startMessage));
|
|
193
161
|
}
|
|
194
|
-
async doReconnect() {
|
|
195
|
-
await (0, ws_reconnect_1.attemptReconnect)(this.reconnectAttemptsRef, {
|
|
196
|
-
maxRetries: MAX_RECONNECT_RETRIES,
|
|
197
|
-
baseDelayMs: RECONNECT_BASE_DELAY_MS,
|
|
198
|
-
logPrefix: 'AppSync:',
|
|
199
|
-
connectFn: () => this.doConnect(),
|
|
200
|
-
onReconnectedFn: this.reconnectCallback ?? undefined,
|
|
201
|
-
isClosedFn: () => this.closed,
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
162
|
resetKeepAliveTimer() {
|
|
205
163
|
this.clearKeepAliveTimer();
|
|
206
164
|
if (this.keepAliveTimeoutMs > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appsync-subscriber.js","sourceRoot":"","sources":["../src/appsync-subscriber.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA0B;AAE1B,
|
|
1
|
+
{"version":3,"file":"appsync-subscriber.js","sourceRoot":"","sources":["../src/appsync-subscriber.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
export interface BaseWebSocketOptions {
|
|
3
|
+
maxReconnectRetries: number;
|
|
4
|
+
reconnectBaseDelayMs: number;
|
|
5
|
+
logPrefix: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* WebSocket 接続の共通ライフサイクル管理
|
|
9
|
+
* - 接続 / 再接続 / 切断
|
|
10
|
+
* - JSON メッセージパース
|
|
11
|
+
* - 再接続時のコールバック
|
|
12
|
+
*/
|
|
13
|
+
export declare abstract class BaseWebSocketConnection<TMessage> {
|
|
14
|
+
protected ws: WebSocket | null;
|
|
15
|
+
protected closed: boolean;
|
|
16
|
+
protected readonly reconnectAttemptsRef: {
|
|
17
|
+
current: number;
|
|
18
|
+
};
|
|
19
|
+
private readonly options;
|
|
20
|
+
constructor(options: BaseWebSocketOptions);
|
|
21
|
+
connect(): Promise<void>;
|
|
22
|
+
disconnect(): void;
|
|
23
|
+
/** WebSocket URL とオプションを返す */
|
|
24
|
+
protected abstract createWebSocket(): WebSocket;
|
|
25
|
+
/** 接続成功時の処理。Promise を resolve するタイミングはサブクラスが決める */
|
|
26
|
+
protected abstract onOpen(ws: WebSocket, resolve: (value: void) => void): void;
|
|
27
|
+
/** パースされたメッセージを処理する */
|
|
28
|
+
protected abstract onParsedMessage(msg: TMessage, resolve?: (value: void) => void): void;
|
|
29
|
+
/** 切断時のクリーンアップ(サブクラスでオーバーライド) */
|
|
30
|
+
protected onDisconnect(): void;
|
|
31
|
+
/** WebSocket を閉じる(サブクラスでオーバーライド可能) */
|
|
32
|
+
protected closeWebSocket(ws: WebSocket): void;
|
|
33
|
+
/** 再接続成功時のコールバック(サブクラスでオーバーライド可能) */
|
|
34
|
+
protected onReconnected(): void;
|
|
35
|
+
protected doConnect(): Promise<void>;
|
|
36
|
+
/** WebSocket close イベント時の追加処理(サブクラスでオーバーライド可能) */
|
|
37
|
+
protected onWebSocketClose(): void;
|
|
38
|
+
private doReconnect;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=base-websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-websocket.d.ts","sourceRoot":"","sources":["../src/base-websocket.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAA;AAM1B,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;;GAKG;AACH,8BAAsB,uBAAuB,CAAC,QAAQ;IACpD,SAAS,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAAO;IACrC,SAAS,CAAC,MAAM,UAAQ;IACxB,SAAS,CAAC,QAAQ,CAAC,oBAAoB;;MAAiB;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;gBAElC,OAAO,EAAE,oBAAoB;IAIzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,UAAU,IAAI,IAAI;IASlB,8BAA8B;IAC9B,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,SAAS;IAE/C,mDAAmD;IACnD,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;IAE9E,uBAAuB;IACvB,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI;IAExF,iCAAiC;IACjC,SAAS,CAAC,YAAY,IAAI,IAAI;IAI9B,sCAAsC;IACtC,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IAI7C,qCAAqC;IACrC,SAAS,CAAC,aAAa,IAAI,IAAI;IAI/B,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCpC,kDAAkD;IAClD,SAAS,CAAC,gBAAgB,IAAI,IAAI;YAIpB,WAAW;CAU1B"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseWebSocketConnection = void 0;
|
|
4
|
+
const logger_1 = require("./logger");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
const ws_reconnect_1 = require("./ws-reconnect");
|
|
7
|
+
/**
|
|
8
|
+
* WebSocket 接続の共通ライフサイクル管理
|
|
9
|
+
* - 接続 / 再接続 / 切断
|
|
10
|
+
* - JSON メッセージパース
|
|
11
|
+
* - 再接続時のコールバック
|
|
12
|
+
*/
|
|
13
|
+
class BaseWebSocketConnection {
|
|
14
|
+
ws = null;
|
|
15
|
+
closed = false;
|
|
16
|
+
reconnectAttemptsRef = { current: 0 };
|
|
17
|
+
options;
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this.options = options;
|
|
20
|
+
}
|
|
21
|
+
connect() {
|
|
22
|
+
this.closed = false;
|
|
23
|
+
this.reconnectAttemptsRef.current = 0;
|
|
24
|
+
return this.doConnect();
|
|
25
|
+
}
|
|
26
|
+
disconnect() {
|
|
27
|
+
this.closed = true;
|
|
28
|
+
this.onDisconnect();
|
|
29
|
+
if (this.ws) {
|
|
30
|
+
this.closeWebSocket(this.ws);
|
|
31
|
+
this.ws = null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/** 切断時のクリーンアップ(サブクラスでオーバーライド) */
|
|
35
|
+
onDisconnect() {
|
|
36
|
+
// default: no-op
|
|
37
|
+
}
|
|
38
|
+
/** WebSocket を閉じる(サブクラスでオーバーライド可能) */
|
|
39
|
+
closeWebSocket(ws) {
|
|
40
|
+
ws.close();
|
|
41
|
+
}
|
|
42
|
+
/** 再接続成功時のコールバック(サブクラスでオーバーライド可能) */
|
|
43
|
+
onReconnected() {
|
|
44
|
+
// default: no-op
|
|
45
|
+
}
|
|
46
|
+
doConnect() {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
const ws = this.createWebSocket();
|
|
49
|
+
ws.on('open', () => {
|
|
50
|
+
this.onOpen(ws, resolve);
|
|
51
|
+
});
|
|
52
|
+
ws.on('message', (data) => {
|
|
53
|
+
let msg;
|
|
54
|
+
try {
|
|
55
|
+
msg = JSON.parse(data.toString());
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
logger_1.logger.debug(`${this.options.logPrefix} Failed to parse message`);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.onParsedMessage(msg, resolve);
|
|
62
|
+
});
|
|
63
|
+
ws.on('error', (error) => {
|
|
64
|
+
logger_1.logger.debug(`${this.options.logPrefix} WebSocket error: ${(0, utils_1.getErrorMessage)(error)}`);
|
|
65
|
+
if (this.reconnectAttemptsRef.current === 0 && !this.ws) {
|
|
66
|
+
reject(error);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
ws.on('close', () => {
|
|
70
|
+
this.onWebSocketClose();
|
|
71
|
+
if (!this.closed) {
|
|
72
|
+
logger_1.logger.debug(`${this.options.logPrefix} Connection closed unexpectedly`);
|
|
73
|
+
void this.doReconnect();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
this.ws = ws;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/** WebSocket close イベント時の追加処理(サブクラスでオーバーライド可能) */
|
|
80
|
+
onWebSocketClose() {
|
|
81
|
+
// default: no-op
|
|
82
|
+
}
|
|
83
|
+
async doReconnect() {
|
|
84
|
+
await (0, ws_reconnect_1.attemptReconnect)(this.reconnectAttemptsRef, {
|
|
85
|
+
maxRetries: this.options.maxReconnectRetries,
|
|
86
|
+
baseDelayMs: this.options.reconnectBaseDelayMs,
|
|
87
|
+
logPrefix: this.options.logPrefix,
|
|
88
|
+
connectFn: () => this.doConnect(),
|
|
89
|
+
onReconnectedFn: () => this.onReconnected(),
|
|
90
|
+
isClosedFn: () => this.closed,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.BaseWebSocketConnection = BaseWebSocketConnection;
|
|
95
|
+
//# sourceMappingURL=base-websocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-websocket.js","sourceRoot":"","sources":["../src/base-websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AgentChatMode, ProjectRegistration } from './types';
|
|
2
|
+
export declare class ChildProcessManager {
|
|
3
|
+
private readonly processes;
|
|
4
|
+
private readonly restartTimers;
|
|
5
|
+
private stopping;
|
|
6
|
+
forkProject(project: ProjectRegistration, agentId: string, options: {
|
|
7
|
+
pollInterval: number;
|
|
8
|
+
heartbeatInterval: number;
|
|
9
|
+
agentChatMode?: AgentChatMode;
|
|
10
|
+
defaultProjectDir?: string;
|
|
11
|
+
}): void;
|
|
12
|
+
private spawnChild;
|
|
13
|
+
private resetRestartCount;
|
|
14
|
+
private handleChildMessage;
|
|
15
|
+
private handleChildExit;
|
|
16
|
+
sendUpdateToAll(): void;
|
|
17
|
+
stopAll(timeoutMs?: number): Promise<void>;
|
|
18
|
+
getRunningCount(): number;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=child-process-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-process-manager.d.ts","sourceRoot":"","sources":["../src/child-process-manager.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AASjE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmD;IACjF,OAAO,CAAC,QAAQ,CAAQ;IAExB,WAAW,CACT,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAA;QACpB,iBAAiB,EAAE,MAAM,CAAA;QACzB,aAAa,CAAC,EAAE,aAAa,CAAA;QAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAC3B,GACA,IAAI;IAWP,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,eAAe;IAyBvB,eAAe,IAAI,IAAI;IASjB,OAAO,CAAC,SAAS,GAAE,MAAsC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC/E,eAAe,IAAI,MAAM;CAG1B"}
|