@a5c-ai/agent-mux-gateway 0.0.0 → 0.4.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 +10 -3
- package/dist/auth/hashing.d.ts +3 -0
- package/dist/auth/hashing.d.ts.map +1 -0
- package/dist/auth/hashing.js +25 -0
- package/dist/auth/hashing.js.map +1 -0
- package/dist/auth/middleware.d.ts +4 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +17 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/tokens.d.ts +45 -0
- package/dist/auth/tokens.d.ts.map +1 -0
- package/dist/auth/tokens.js +182 -0
- package/dist/auth/tokens.js.map +1 -0
- package/dist/builtin-adapters.d.ts +15 -0
- package/dist/builtin-adapters.d.ts.map +1 -0
- package/dist/builtin-adapters.js +110 -0
- package/dist/builtin-adapters.js.map +1 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -0
- package/dist/config.js.map +1 -1
- package/dist/fanout/client-conn.d.ts +21 -0
- package/dist/fanout/client-conn.d.ts.map +1 -0
- package/dist/fanout/client-conn.js +53 -0
- package/dist/fanout/client-conn.js.map +1 -0
- package/dist/fanout/subscriber.d.ts +13 -0
- package/dist/fanout/subscriber.d.ts.map +1 -0
- package/dist/fanout/subscriber.js +40 -0
- package/dist/fanout/subscriber.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/logging.d.ts.map +1 -1
- package/dist/logging.js +1 -12
- package/dist/logging.js.map +1 -1
- package/dist/notifications/types.d.ts +19 -0
- package/dist/notifications/types.d.ts.map +1 -0
- package/dist/notifications/types.js +2 -0
- package/dist/notifications/types.js.map +1 -0
- package/dist/notifications/webhook-out.d.ts +4 -0
- package/dist/notifications/webhook-out.d.ts.map +1 -0
- package/dist/notifications/webhook-out.js +55 -0
- package/dist/notifications/webhook-out.js.map +1 -0
- package/dist/pairing/short-code.d.ts +21 -0
- package/dist/pairing/short-code.d.ts.map +1 -0
- package/dist/pairing/short-code.js +50 -0
- package/dist/pairing/short-code.js.map +1 -0
- package/dist/protocol/errors.d.ts +11 -0
- package/dist/protocol/errors.d.ts.map +1 -0
- package/dist/protocol/errors.js +15 -0
- package/dist/protocol/errors.js.map +1 -0
- package/dist/protocol/frames.d.ts +93 -0
- package/dist/protocol/frames.d.ts.map +1 -0
- package/dist/protocol/frames.js +139 -0
- package/dist/protocol/frames.js.map +1 -0
- package/dist/protocol/v1.d.ts +104 -0
- package/dist/protocol/v1.d.ts.map +1 -0
- package/dist/protocol/v1.js +2 -0
- package/dist/protocol/v1.js.map +1 -0
- package/dist/runs/event-log-index.d.ts +29 -0
- package/dist/runs/event-log-index.d.ts.map +1 -0
- package/dist/runs/event-log-index.js +195 -0
- package/dist/runs/event-log-index.js.map +1 -0
- package/dist/runs/event-log.d.ts +26 -0
- package/dist/runs/event-log.d.ts.map +1 -0
- package/dist/runs/event-log.js +104 -0
- package/dist/runs/event-log.js.map +1 -0
- package/dist/runs/hook-broker.d.ts +19 -0
- package/dist/runs/hook-broker.d.ts.map +1 -0
- package/dist/runs/hook-broker.js +97 -0
- package/dist/runs/hook-broker.js.map +1 -0
- package/dist/runs/manager.d.ts +51 -0
- package/dist/runs/manager.d.ts.map +1 -0
- package/dist/runs/manager.js +575 -0
- package/dist/runs/manager.js.map +1 -0
- package/dist/runs/types.d.ts +49 -0
- package/dist/runs/types.d.ts.map +1 -0
- package/dist/runs/types.js +2 -0
- package/dist/runs/types.js.map +1 -0
- package/dist/server.d.ts +16 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +500 -0
- package/dist/server.js.map +1 -0
- package/dist/static/webui-server.d.ts +3 -0
- package/dist/static/webui-server.d.ts.map +1 -0
- package/dist/static/webui-server.js +97 -0
- package/dist/static/webui-server.js.map +1 -0
- package/package.json +10 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
function asRunFrame(runId, event) {
|
|
2
|
+
return {
|
|
3
|
+
type: 'run.event',
|
|
4
|
+
runId,
|
|
5
|
+
seq: event.seq,
|
|
6
|
+
source: event.source,
|
|
7
|
+
event: event.event,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export class RunSubscriber {
|
|
11
|
+
conn;
|
|
12
|
+
runId;
|
|
13
|
+
queuedLiveEvents = [];
|
|
14
|
+
catchUpTailSeq;
|
|
15
|
+
constructor(conn, runId, catchUpTailSeq) {
|
|
16
|
+
this.conn = conn;
|
|
17
|
+
this.runId = runId;
|
|
18
|
+
this.catchUpTailSeq = catchUpTailSeq;
|
|
19
|
+
}
|
|
20
|
+
replay(events) {
|
|
21
|
+
for (const event of events) {
|
|
22
|
+
this.conn.send(asRunFrame(this.runId, event));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
sendLive(event) {
|
|
26
|
+
if (this.catchUpTailSeq !== null && event.seq > this.catchUpTailSeq) {
|
|
27
|
+
this.queuedLiveEvents.push(event);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.conn.send(asRunFrame(this.runId, event));
|
|
31
|
+
}
|
|
32
|
+
finishCatchUp() {
|
|
33
|
+
this.catchUpTailSeq = null;
|
|
34
|
+
this.queuedLiveEvents.sort((left, right) => left.seq - right.seq);
|
|
35
|
+
for (const event of this.queuedLiveEvents.splice(0, this.queuedLiveEvents.length)) {
|
|
36
|
+
this.conn.send(asRunFrame(this.runId, event));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=subscriber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriber.js","sourceRoot":"","sources":["../../src/fanout/subscriber.ts"],"names":[],"mappings":"AAIA,SAAS,UAAU,CAAC,KAAa,EAAE,KAAqB;IACtD,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,KAAK;QACL,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,aAAa;IAKb;IACA;IALM,gBAAgB,GAAqB,EAAE,CAAC;IACjD,cAAc,CAAgB;IAEtC,YACW,IAAgB,EAChB,KAAa,EACtB,cAAsB;QAFb,SAAI,GAAJ,IAAI,CAAY;QAChB,UAAK,GAAL,KAAK,CAAQ;QAGtB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,MAAiC;QACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,KAAqB;QAC5B,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACpE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,aAAa;QACX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAClE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAClF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
import { GatewayConfig } from './config.js';
|
|
2
2
|
import { GatewayLogger } from './logging.js';
|
|
3
|
+
import { type GatewayServer } from './server.js';
|
|
4
|
+
import type { RunManager } from './runs/manager.js';
|
|
3
5
|
export type { GatewayConfig } from './config.js';
|
|
4
6
|
export { DEFAULT_GATEWAY_CONFIG, resolveGatewayConfig, } from './config.js';
|
|
7
|
+
export type { GatewayRunClient } from './config.js';
|
|
5
8
|
export type { GatewayLogger } from './logging.js';
|
|
6
9
|
export { createGatewayLogger } from './logging.js';
|
|
10
|
+
export type { TokenStore, TokenRecord, TokenIssueResult } from './auth/tokens.js';
|
|
11
|
+
export { MemoryTokenStore, SqliteTokenStore } from './auth/tokens.js';
|
|
12
|
+
export { encodeFrame, decodeFrame, gatewayFrameSchema } from './protocol/frames.js';
|
|
13
|
+
export { GATEWAY_CLOSE_CODES, GatewayProtocolError } from './protocol/errors.js';
|
|
14
|
+
export type * from './protocol/v1.js';
|
|
15
|
+
export type { RunEntry, RunOwner, RunStartInput, RunStatus } from './runs/types.js';
|
|
16
|
+
export { RunManager } from './runs/manager.js';
|
|
17
|
+
export { resolveWebuiRoot, serveWebuiRequest } from './static/webui-server.js';
|
|
18
|
+
export type { NotificationWebhookConfig, HookRequestWebhookPayload, PushTarget } from './notifications/types.js';
|
|
19
|
+
export { createHookWebhookPayload, emitHookWebhook } from './notifications/webhook-out.js';
|
|
7
20
|
export interface Gateway {
|
|
8
21
|
readonly config: GatewayConfig;
|
|
9
22
|
readonly logger: GatewayLogger;
|
|
23
|
+
readonly server: GatewayServer;
|
|
24
|
+
readonly runManager: RunManager;
|
|
10
25
|
readonly started: boolean;
|
|
11
26
|
start(): Promise<void>;
|
|
12
27
|
stop(): Promise<void>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAGd,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,aAAa,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,mBAAmB,kBAAkB,CAAC;AACtC,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,YAAY,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjH,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAE3F,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,wBAAgB,aAAa,CAAC,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,OAAO,CAwC1E"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
import { resolveGatewayConfig, } from './config.js';
|
|
2
2
|
import { createGatewayLogger, } from './logging.js';
|
|
3
|
+
import { createGatewayServer } from './server.js';
|
|
3
4
|
export { DEFAULT_GATEWAY_CONFIG, resolveGatewayConfig, } from './config.js';
|
|
4
5
|
export { createGatewayLogger } from './logging.js';
|
|
6
|
+
export { MemoryTokenStore, SqliteTokenStore } from './auth/tokens.js';
|
|
7
|
+
export { encodeFrame, decodeFrame, gatewayFrameSchema } from './protocol/frames.js';
|
|
8
|
+
export { GATEWAY_CLOSE_CODES, GatewayProtocolError } from './protocol/errors.js';
|
|
9
|
+
export { RunManager } from './runs/manager.js';
|
|
10
|
+
export { resolveWebuiRoot, serveWebuiRequest } from './static/webui-server.js';
|
|
11
|
+
export { createHookWebhookPayload, emitHookWebhook } from './notifications/webhook-out.js';
|
|
5
12
|
export function createGateway(config = {}) {
|
|
6
13
|
const resolvedConfig = resolveGatewayConfig(config);
|
|
7
14
|
const logger = createGatewayLogger();
|
|
15
|
+
const server = createGatewayServer(resolvedConfig, logger);
|
|
8
16
|
let started = false;
|
|
9
17
|
return {
|
|
10
18
|
config: resolvedConfig,
|
|
11
19
|
logger,
|
|
20
|
+
server,
|
|
21
|
+
get runManager() {
|
|
22
|
+
return server.runManager;
|
|
23
|
+
},
|
|
12
24
|
get started() {
|
|
13
25
|
return started;
|
|
14
26
|
},
|
|
@@ -16,6 +28,7 @@ export function createGateway(config = {}) {
|
|
|
16
28
|
if (started) {
|
|
17
29
|
return;
|
|
18
30
|
}
|
|
31
|
+
await server.start();
|
|
19
32
|
started = true;
|
|
20
33
|
logger.info('Gateway started', {
|
|
21
34
|
host: resolvedConfig.host,
|
|
@@ -27,6 +40,7 @@ export function createGateway(config = {}) {
|
|
|
27
40
|
if (!started) {
|
|
28
41
|
return;
|
|
29
42
|
}
|
|
43
|
+
await server.stop();
|
|
30
44
|
started = false;
|
|
31
45
|
logger.info('Gateway stopped', {
|
|
32
46
|
host: resolvedConfig.host,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,GAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AAMtE,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAY3F,MAAM,UAAU,aAAa,CAAC,SAAiC,EAAE;IAC/D,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,mBAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO;QACL,MAAM,EAAE,cAAc;QACtB,MAAM;QACN,MAAM;QACN,IAAI,UAAU;YACZ,OAAO,MAAM,CAAC,UAAU,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO;YACT,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,KAAK;YACT,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC7B,IAAI,EAAE,cAAc,CAAC,IAAI;gBACzB,IAAI,EAAE,cAAc,CAAC,IAAI;gBACzB,WAAW,EAAE,cAAc,CAAC,WAAW;aACxC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI;YACR,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YACD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC7B,IAAI,EAAE,cAAc,CAAC,IAAI;gBACzB,IAAI,EAAE,cAAc,CAAC,IAAI;aAC1B,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/logging.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9D;
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9D;AAQD,wBAAgB,mBAAmB,IAAI,aAAa,CAenD"}
|
package/dist/logging.js
CHANGED
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
function write(level, message, meta) {
|
|
2
2
|
const suffix = meta ? ` ${JSON.stringify(meta)}` : '';
|
|
3
3
|
const line = `[agent-mux-gateway:${level}] ${message}${suffix}`;
|
|
4
|
-
|
|
5
|
-
case 'debug':
|
|
6
|
-
case 'info':
|
|
7
|
-
console.log(line);
|
|
8
|
-
return;
|
|
9
|
-
case 'warn':
|
|
10
|
-
console.warn(line);
|
|
11
|
-
return;
|
|
12
|
-
case 'error':
|
|
13
|
-
console.error(line);
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
4
|
+
process.stderr.write(`${line}\n`);
|
|
16
5
|
}
|
|
17
6
|
export function createGatewayLogger() {
|
|
18
7
|
return {
|
package/dist/logging.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAOA,SAAS,KAAK,CAAC,KAA0C,EAAE,OAAe,EAAE,IAA8B;IACxG,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,sBAAsB,KAAK,KAAK,OAAO,GAAG,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAOA,SAAS,KAAK,CAAC,KAA0C,EAAE,OAAe,EAAE,IAA8B;IACxG,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,sBAAsB,KAAK,KAAK,OAAO,GAAG,MAAM,EAAE,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,KAAK,CAAC,OAAO,EAAE,IAAI;YACjB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,IAAI;YAChB,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,IAAI;YAChB,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,CAAC,OAAO,EAAE,IAAI;YACjB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface PushTarget {
|
|
2
|
+
platform: 'ios';
|
|
3
|
+
deviceToken?: string;
|
|
4
|
+
topic?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface HookRequestWebhookPayload {
|
|
7
|
+
type: 'hook.request';
|
|
8
|
+
runId: string;
|
|
9
|
+
hookRequestId: string;
|
|
10
|
+
kind: string;
|
|
11
|
+
compact: string;
|
|
12
|
+
pushTargets: PushTarget[];
|
|
13
|
+
}
|
|
14
|
+
export interface NotificationWebhookConfig {
|
|
15
|
+
url: string;
|
|
16
|
+
token?: string;
|
|
17
|
+
timeoutMs?: number;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/notifications/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,KAAK,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/notifications/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { HookRequestWebhookPayload, NotificationWebhookConfig } from './types.js';
|
|
2
|
+
export declare function createHookWebhookPayload(runId: string, hookRequestId: string, kind: string, payload: Record<string, unknown>): HookRequestWebhookPayload;
|
|
3
|
+
export declare function emitHookWebhook(config: NotificationWebhookConfig, payload: HookRequestWebhookPayload): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=webhook-out.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-out.d.ts","sourceRoot":"","sources":["../../src/notifications/webhook-out.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,yBAAyB,EAAc,MAAM,YAAY,CAAC;AA2BnG,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,yBAAyB,CAS3B;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,yBAAyB,EAAE,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB1H"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
function compactSummary(kind, payload) {
|
|
2
|
+
const command = typeof payload['command'] === 'string' ? payload['command'] : null;
|
|
3
|
+
const toolName = typeof payload['toolName'] === 'string' ? payload['toolName'] : null;
|
|
4
|
+
const input = typeof payload['input'] === 'string' ? payload['input'] : null;
|
|
5
|
+
return [toolName ?? kind, command, input].filter(Boolean).join(' | ').slice(0, 220);
|
|
6
|
+
}
|
|
7
|
+
function normalizePushTargets(payload) {
|
|
8
|
+
const targets = payload['pushTargets'];
|
|
9
|
+
if (!Array.isArray(targets)) {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
return targets.reduce((acc, target) => {
|
|
13
|
+
if (!target || typeof target !== 'object') {
|
|
14
|
+
return acc;
|
|
15
|
+
}
|
|
16
|
+
acc.push({
|
|
17
|
+
platform: 'ios',
|
|
18
|
+
deviceToken: typeof target['deviceToken'] === 'string' ? target['deviceToken'] : undefined,
|
|
19
|
+
topic: typeof target['topic'] === 'string' ? target['topic'] : undefined,
|
|
20
|
+
});
|
|
21
|
+
return acc;
|
|
22
|
+
}, []);
|
|
23
|
+
}
|
|
24
|
+
export function createHookWebhookPayload(runId, hookRequestId, kind, payload) {
|
|
25
|
+
return {
|
|
26
|
+
type: 'hook.request',
|
|
27
|
+
runId,
|
|
28
|
+
hookRequestId,
|
|
29
|
+
kind,
|
|
30
|
+
compact: compactSummary(kind, payload),
|
|
31
|
+
pushTargets: normalizePushTargets(payload),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export async function emitHookWebhook(config, payload) {
|
|
35
|
+
const controller = new AbortController();
|
|
36
|
+
const timer = setTimeout(() => controller.abort(), config.timeoutMs ?? 5000);
|
|
37
|
+
try {
|
|
38
|
+
const response = await fetch(config.url, {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: {
|
|
41
|
+
'content-type': 'application/json',
|
|
42
|
+
...(config.token ? { authorization: `Bearer ${config.token}` } : {}),
|
|
43
|
+
},
|
|
44
|
+
body: JSON.stringify(payload),
|
|
45
|
+
signal: controller.signal,
|
|
46
|
+
});
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
throw new Error(`Notification webhook failed: ${response.status}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=webhook-out.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-out.js","sourceRoot":"","sources":["../../src/notifications/webhook-out.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface PairingRecord {
|
|
2
|
+
code: string;
|
|
3
|
+
url: string;
|
|
4
|
+
token: string;
|
|
5
|
+
expiresAt: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class ShortCodeStore {
|
|
8
|
+
private readonly ttlMs;
|
|
9
|
+
private readonly records;
|
|
10
|
+
constructor(ttlMs?: number);
|
|
11
|
+
generateCode(length?: number): string;
|
|
12
|
+
register(input: {
|
|
13
|
+
code?: string;
|
|
14
|
+
url: string;
|
|
15
|
+
token: string;
|
|
16
|
+
ttlMs?: number;
|
|
17
|
+
}): PairingRecord;
|
|
18
|
+
consume(code: string): PairingRecord | null;
|
|
19
|
+
cleanup(): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=short-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"short-code.d.ts","sourceRoot":"","sources":["../../src/pairing/short-code.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,cAAc;IAGb,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;gBAE/B,KAAK,GAAE,MAAsB;IAE1D,YAAY,CAAC,MAAM,GAAE,MAAU,GAAG,MAAM;IAaxC,QAAQ,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa;IAY7F,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAY3C,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export class ShortCodeStore {
|
|
2
|
+
ttlMs;
|
|
3
|
+
records = new Map();
|
|
4
|
+
constructor(ttlMs = 5 * 60 * 1000) {
|
|
5
|
+
this.ttlMs = ttlMs;
|
|
6
|
+
}
|
|
7
|
+
generateCode(length = 8) {
|
|
8
|
+
const digits = '0123456789';
|
|
9
|
+
let code = '';
|
|
10
|
+
do {
|
|
11
|
+
code = '';
|
|
12
|
+
for (let index = 0; index < length; index += 1) {
|
|
13
|
+
code += digits[Math.floor(Math.random() * digits.length)];
|
|
14
|
+
}
|
|
15
|
+
this.cleanup();
|
|
16
|
+
} while (this.records.has(code));
|
|
17
|
+
return code;
|
|
18
|
+
}
|
|
19
|
+
register(input) {
|
|
20
|
+
const code = input.code?.trim() || this.generateCode();
|
|
21
|
+
const record = {
|
|
22
|
+
code,
|
|
23
|
+
url: input.url,
|
|
24
|
+
token: input.token,
|
|
25
|
+
expiresAt: Date.now() + (input.ttlMs ?? this.ttlMs),
|
|
26
|
+
};
|
|
27
|
+
this.records.set(code, record);
|
|
28
|
+
return record;
|
|
29
|
+
}
|
|
30
|
+
consume(code) {
|
|
31
|
+
const record = this.records.get(code);
|
|
32
|
+
if (!record) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
this.records.delete(code);
|
|
36
|
+
if (record.expiresAt <= Date.now()) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
return record;
|
|
40
|
+
}
|
|
41
|
+
cleanup() {
|
|
42
|
+
const now = Date.now();
|
|
43
|
+
for (const [code, record] of this.records.entries()) {
|
|
44
|
+
if (record.expiresAt <= now) {
|
|
45
|
+
this.records.delete(code);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=short-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"short-code.js","sourceRoot":"","sources":["../../src/pairing/short-code.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,cAAc;IAGI;IAFZ,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE5D,YAA6B,QAAgB,CAAC,GAAG,EAAE,GAAG,IAAI;QAA7B,UAAK,GAAL,KAAK,CAAwB;IAAG,CAAC;IAE9D,YAAY,CAAC,SAAiB,CAAC;QAC7B,MAAM,MAAM,GAAG,YAAY,CAAC;QAC5B,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,GAAG,CAAC;YACF,IAAI,GAAG,EAAE,CAAC;YACV,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC/C,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAE,CAAC;YAC7D,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,KAAoE;QAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACvD,MAAM,MAAM,GAAkB;YAC5B,IAAI;YACJ,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;SACpD,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACpD,IAAI,MAAM,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const GATEWAY_CLOSE_CODES: Readonly<{
|
|
2
|
+
invalidFrame: 4400;
|
|
3
|
+
unauthorized: 4401;
|
|
4
|
+
backpressure: 4008;
|
|
5
|
+
rateLimit: 4029;
|
|
6
|
+
}>;
|
|
7
|
+
export declare class GatewayProtocolError extends Error {
|
|
8
|
+
readonly closeCode: number;
|
|
9
|
+
constructor(message: string, closeCode: number);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/protocol/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB;;;;;EAK9B,CAAC;AAEH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAK/C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const GATEWAY_CLOSE_CODES = Object.freeze({
|
|
2
|
+
invalidFrame: 4400,
|
|
3
|
+
unauthorized: 4401,
|
|
4
|
+
backpressure: 4008,
|
|
5
|
+
rateLimit: 4029,
|
|
6
|
+
});
|
|
7
|
+
export class GatewayProtocolError extends Error {
|
|
8
|
+
closeCode;
|
|
9
|
+
constructor(message, closeCode) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = 'GatewayProtocolError';
|
|
12
|
+
this.closeCode = closeCode;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/protocol/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/C,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,IAAI;CAChB,CAAC,CAAC;AAEH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,SAAS,CAAS;IAE3B,YAAY,OAAe,EAAE,SAAiB;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { GatewayFrame } from './v1.js';
|
|
3
|
+
export declare const gatewayFrameSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
4
|
+
type: z.ZodLiteral<"auth">;
|
|
5
|
+
token: z.ZodString;
|
|
6
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
7
|
+
type: z.ZodLiteral<"hello">;
|
|
8
|
+
protocolVersions: z.ZodArray<z.ZodLiteral<"1">>;
|
|
9
|
+
serverVersion: z.ZodString;
|
|
10
|
+
serverTime: z.ZodString;
|
|
11
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
12
|
+
type: z.ZodLiteral<"error">;
|
|
13
|
+
code: z.ZodString;
|
|
14
|
+
message: z.ZodString;
|
|
15
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
16
|
+
tailSeq: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
18
|
+
type: z.ZodLiteral<"subscribe">;
|
|
19
|
+
runId: z.ZodString;
|
|
20
|
+
sinceSeq: z.ZodOptional<z.ZodNumber>;
|
|
21
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
22
|
+
type: z.ZodLiteral<"unsubscribe">;
|
|
23
|
+
runId: z.ZodString;
|
|
24
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
25
|
+
type: z.ZodLiteral<"session.subscribe">;
|
|
26
|
+
sessionId: z.ZodString;
|
|
27
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
28
|
+
type: z.ZodLiteral<"session.unsubscribe">;
|
|
29
|
+
sessionId: z.ZodString;
|
|
30
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
31
|
+
type: z.ZodLiteral<"session.start">;
|
|
32
|
+
agent: z.ZodString;
|
|
33
|
+
prompt: z.ZodString;
|
|
34
|
+
model: z.ZodOptional<z.ZodString>;
|
|
35
|
+
sessionId: z.ZodOptional<z.ZodString>;
|
|
36
|
+
runId: z.ZodOptional<z.ZodString>;
|
|
37
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
38
|
+
type: z.ZodLiteral<"session.message">;
|
|
39
|
+
sessionId: z.ZodString;
|
|
40
|
+
prompt: z.ZodString;
|
|
41
|
+
agent: z.ZodOptional<z.ZodString>;
|
|
42
|
+
model: z.ZodOptional<z.ZodString>;
|
|
43
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
44
|
+
type: z.ZodLiteral<"ping">;
|
|
45
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
46
|
+
type: z.ZodLiteral<"pong">;
|
|
47
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
48
|
+
type: z.ZodLiteral<"run.event">;
|
|
49
|
+
runId: z.ZodString;
|
|
50
|
+
seq: z.ZodNumber;
|
|
51
|
+
source: z.ZodString;
|
|
52
|
+
event: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
53
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
54
|
+
type: z.ZodLiteral<"hook.request">;
|
|
55
|
+
hookRequestId: z.ZodString;
|
|
56
|
+
runId: z.ZodString;
|
|
57
|
+
hookKind: z.ZodString;
|
|
58
|
+
payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
59
|
+
deadlineTs: z.ZodNumber;
|
|
60
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
61
|
+
type: z.ZodLiteral<"hook.decision">;
|
|
62
|
+
hookRequestId: z.ZodString;
|
|
63
|
+
decision: z.ZodEnum<{
|
|
64
|
+
allow: "allow";
|
|
65
|
+
deny: "deny";
|
|
66
|
+
}>;
|
|
67
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
68
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
69
|
+
type: z.ZodLiteral<"hook.resolved">;
|
|
70
|
+
hookRequestId: z.ZodString;
|
|
71
|
+
resolvedBy: z.ZodString;
|
|
72
|
+
decision: z.ZodEnum<{
|
|
73
|
+
allow: "allow";
|
|
74
|
+
deny: "deny";
|
|
75
|
+
}>;
|
|
76
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
77
|
+
type: z.ZodLiteral<"pairing.register">;
|
|
78
|
+
code: z.ZodString;
|
|
79
|
+
url: z.ZodString;
|
|
80
|
+
token: z.ZodString;
|
|
81
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
82
|
+
type: z.ZodLiteral<"pairing.consume">;
|
|
83
|
+
code: z.ZodString;
|
|
84
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
85
|
+
type: z.ZodLiteral<"pairing.consumed">;
|
|
86
|
+
code: z.ZodString;
|
|
87
|
+
url: z.ZodString;
|
|
88
|
+
token: z.ZodString;
|
|
89
|
+
expiresAt: z.ZodNumber;
|
|
90
|
+
}, z.core.$strip>], "type">;
|
|
91
|
+
export declare function encodeFrame(frame: GatewayFrame): string;
|
|
92
|
+
export declare function decodeFrame(input: string): GatewayFrame;
|
|
93
|
+
//# sourceMappingURL=frames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../src/protocol/frames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAwH5C,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAmB7B,CAAC;AAEH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAEvD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAgBvD"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { GATEWAY_CLOSE_CODES, GatewayProtocolError } from './errors.js';
|
|
3
|
+
const authFrameSchema = z.object({
|
|
4
|
+
type: z.literal('auth'),
|
|
5
|
+
token: z.string().min(1),
|
|
6
|
+
});
|
|
7
|
+
const helloFrameSchema = z.object({
|
|
8
|
+
type: z.literal('hello'),
|
|
9
|
+
protocolVersions: z.array(z.literal('1')).min(1),
|
|
10
|
+
serverVersion: z.string().min(1),
|
|
11
|
+
serverTime: z.string().min(1),
|
|
12
|
+
});
|
|
13
|
+
const errorFrameSchema = z.object({
|
|
14
|
+
type: z.literal('error'),
|
|
15
|
+
code: z.string().min(1),
|
|
16
|
+
message: z.string().min(1),
|
|
17
|
+
runId: z.string().optional(),
|
|
18
|
+
tailSeq: z.number().int().nonnegative().optional(),
|
|
19
|
+
});
|
|
20
|
+
const subscribeFrameSchema = z.object({
|
|
21
|
+
type: z.literal('subscribe'),
|
|
22
|
+
runId: z.string().min(1),
|
|
23
|
+
sinceSeq: z.number().int().nonnegative().optional(),
|
|
24
|
+
});
|
|
25
|
+
const unsubscribeFrameSchema = z.object({
|
|
26
|
+
type: z.literal('unsubscribe'),
|
|
27
|
+
runId: z.string().min(1),
|
|
28
|
+
});
|
|
29
|
+
const sessionSubscribeFrameSchema = z.object({
|
|
30
|
+
type: z.literal('session.subscribe'),
|
|
31
|
+
sessionId: z.string().min(1),
|
|
32
|
+
});
|
|
33
|
+
const sessionUnsubscribeFrameSchema = z.object({
|
|
34
|
+
type: z.literal('session.unsubscribe'),
|
|
35
|
+
sessionId: z.string().min(1),
|
|
36
|
+
});
|
|
37
|
+
const sessionStartFrameSchema = z.object({
|
|
38
|
+
type: z.literal('session.start'),
|
|
39
|
+
agent: z.string().min(1),
|
|
40
|
+
prompt: z.string(),
|
|
41
|
+
model: z.string().optional(),
|
|
42
|
+
sessionId: z.string().optional(),
|
|
43
|
+
runId: z.string().optional(),
|
|
44
|
+
});
|
|
45
|
+
const sessionMessageFrameSchema = z.object({
|
|
46
|
+
type: z.literal('session.message'),
|
|
47
|
+
sessionId: z.string().min(1),
|
|
48
|
+
prompt: z.string(),
|
|
49
|
+
agent: z.string().optional(),
|
|
50
|
+
model: z.string().optional(),
|
|
51
|
+
});
|
|
52
|
+
const pingFrameSchema = z.object({
|
|
53
|
+
type: z.literal('ping'),
|
|
54
|
+
});
|
|
55
|
+
const pongFrameSchema = z.object({
|
|
56
|
+
type: z.literal('pong'),
|
|
57
|
+
});
|
|
58
|
+
const runEventFrameSchema = z.object({
|
|
59
|
+
type: z.literal('run.event'),
|
|
60
|
+
runId: z.string().min(1),
|
|
61
|
+
seq: z.number().int().nonnegative(),
|
|
62
|
+
source: z.string().min(1),
|
|
63
|
+
event: z.record(z.string(), z.unknown()),
|
|
64
|
+
});
|
|
65
|
+
const hookRequestFrameSchema = z.object({
|
|
66
|
+
type: z.literal('hook.request'),
|
|
67
|
+
hookRequestId: z.string().min(1),
|
|
68
|
+
runId: z.string().min(1),
|
|
69
|
+
hookKind: z.string().min(1),
|
|
70
|
+
payload: z.record(z.string(), z.unknown()),
|
|
71
|
+
deadlineTs: z.number().int(),
|
|
72
|
+
});
|
|
73
|
+
const hookDecisionFrameSchema = z.object({
|
|
74
|
+
type: z.literal('hook.decision'),
|
|
75
|
+
hookRequestId: z.string().min(1),
|
|
76
|
+
decision: z.enum(['allow', 'deny']),
|
|
77
|
+
reason: z.string().optional(),
|
|
78
|
+
});
|
|
79
|
+
const hookResolvedFrameSchema = z.object({
|
|
80
|
+
type: z.literal('hook.resolved'),
|
|
81
|
+
hookRequestId: z.string().min(1),
|
|
82
|
+
resolvedBy: z.string().min(1),
|
|
83
|
+
decision: z.enum(['allow', 'deny']),
|
|
84
|
+
});
|
|
85
|
+
const pairingRegisterFrameSchema = z.object({
|
|
86
|
+
type: z.literal('pairing.register'),
|
|
87
|
+
code: z.string().min(1),
|
|
88
|
+
url: z.string().min(1),
|
|
89
|
+
token: z.string().min(1),
|
|
90
|
+
});
|
|
91
|
+
const pairingConsumeFrameSchema = z.object({
|
|
92
|
+
type: z.literal('pairing.consume'),
|
|
93
|
+
code: z.string().min(1),
|
|
94
|
+
});
|
|
95
|
+
const pairingConsumedFrameSchema = z.object({
|
|
96
|
+
type: z.literal('pairing.consumed'),
|
|
97
|
+
code: z.string().min(1),
|
|
98
|
+
url: z.string().min(1),
|
|
99
|
+
token: z.string().min(1),
|
|
100
|
+
expiresAt: z.number().int().positive(),
|
|
101
|
+
});
|
|
102
|
+
export const gatewayFrameSchema = z.discriminatedUnion('type', [
|
|
103
|
+
authFrameSchema,
|
|
104
|
+
helloFrameSchema,
|
|
105
|
+
errorFrameSchema,
|
|
106
|
+
subscribeFrameSchema,
|
|
107
|
+
unsubscribeFrameSchema,
|
|
108
|
+
sessionSubscribeFrameSchema,
|
|
109
|
+
sessionUnsubscribeFrameSchema,
|
|
110
|
+
sessionStartFrameSchema,
|
|
111
|
+
sessionMessageFrameSchema,
|
|
112
|
+
pingFrameSchema,
|
|
113
|
+
pongFrameSchema,
|
|
114
|
+
runEventFrameSchema,
|
|
115
|
+
hookRequestFrameSchema,
|
|
116
|
+
hookDecisionFrameSchema,
|
|
117
|
+
hookResolvedFrameSchema,
|
|
118
|
+
pairingRegisterFrameSchema,
|
|
119
|
+
pairingConsumeFrameSchema,
|
|
120
|
+
pairingConsumedFrameSchema,
|
|
121
|
+
]);
|
|
122
|
+
export function encodeFrame(frame) {
|
|
123
|
+
return JSON.stringify(gatewayFrameSchema.parse(frame));
|
|
124
|
+
}
|
|
125
|
+
export function decodeFrame(input) {
|
|
126
|
+
let parsed;
|
|
127
|
+
try {
|
|
128
|
+
parsed = JSON.parse(input);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
throw new GatewayProtocolError(error instanceof Error ? error.message : 'Invalid JSON frame', GATEWAY_CLOSE_CODES.invalidFrame);
|
|
132
|
+
}
|
|
133
|
+
const result = gatewayFrameSchema.safeParse(parsed);
|
|
134
|
+
if (!result.success) {
|
|
135
|
+
throw new GatewayProtocolError(result.error.message, GATEWAY_CLOSE_CODES.invalidFrame);
|
|
136
|
+
}
|
|
137
|
+
return result.data;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=frames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/protocol/frames.ts"],"names":[],"mappings":"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"}
|