@agentick/gateway 0.0.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.
Files changed (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +477 -0
  3. package/dist/agent-registry.d.ts +51 -0
  4. package/dist/agent-registry.d.ts.map +1 -0
  5. package/dist/agent-registry.js +78 -0
  6. package/dist/agent-registry.js.map +1 -0
  7. package/dist/app-registry.d.ts +51 -0
  8. package/dist/app-registry.d.ts.map +1 -0
  9. package/dist/app-registry.js +78 -0
  10. package/dist/app-registry.js.map +1 -0
  11. package/dist/bin.d.ts +8 -0
  12. package/dist/bin.d.ts.map +1 -0
  13. package/dist/bin.js +37 -0
  14. package/dist/bin.js.map +1 -0
  15. package/dist/gateway.d.ts +165 -0
  16. package/dist/gateway.d.ts.map +1 -0
  17. package/dist/gateway.js +1339 -0
  18. package/dist/gateway.js.map +1 -0
  19. package/dist/http-transport.d.ts +65 -0
  20. package/dist/http-transport.d.ts.map +1 -0
  21. package/dist/http-transport.js +517 -0
  22. package/dist/http-transport.js.map +1 -0
  23. package/dist/index.d.ts +16 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +23 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/protocol.d.ts +162 -0
  28. package/dist/protocol.d.ts.map +1 -0
  29. package/dist/protocol.js +16 -0
  30. package/dist/protocol.js.map +1 -0
  31. package/dist/session-manager.d.ts +101 -0
  32. package/dist/session-manager.d.ts.map +1 -0
  33. package/dist/session-manager.js +208 -0
  34. package/dist/session-manager.js.map +1 -0
  35. package/dist/testing.d.ts +92 -0
  36. package/dist/testing.d.ts.map +1 -0
  37. package/dist/testing.js +129 -0
  38. package/dist/testing.js.map +1 -0
  39. package/dist/transport-protocol.d.ts +162 -0
  40. package/dist/transport-protocol.d.ts.map +1 -0
  41. package/dist/transport-protocol.js +16 -0
  42. package/dist/transport-protocol.js.map +1 -0
  43. package/dist/transport.d.ts +115 -0
  44. package/dist/transport.d.ts.map +1 -0
  45. package/dist/transport.js +56 -0
  46. package/dist/transport.js.map +1 -0
  47. package/dist/types.d.ts +314 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +37 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/websocket-server.d.ts +87 -0
  52. package/dist/websocket-server.d.ts.map +1 -0
  53. package/dist/websocket-server.js +245 -0
  54. package/dist/websocket-server.js.map +1 -0
  55. package/dist/ws-transport.d.ts +17 -0
  56. package/dist/ws-transport.d.ts.map +1 -0
  57. package/dist/ws-transport.js +174 -0
  58. package/dist/ws-transport.js.map +1 -0
  59. package/package.json +51 -0
  60. package/src/__tests__/custom-methods.spec.ts +220 -0
  61. package/src/__tests__/gateway-methods.spec.ts +262 -0
  62. package/src/__tests__/gateway.spec.ts +404 -0
  63. package/src/__tests__/guards.spec.ts +235 -0
  64. package/src/__tests__/protocol.spec.ts +58 -0
  65. package/src/__tests__/session-manager.spec.ts +220 -0
  66. package/src/__tests__/ws-transport.spec.ts +246 -0
  67. package/src/app-registry.ts +103 -0
  68. package/src/bin.ts +38 -0
  69. package/src/gateway.ts +1712 -0
  70. package/src/http-transport.ts +623 -0
  71. package/src/index.ts +94 -0
  72. package/src/session-manager.ts +272 -0
  73. package/src/testing.ts +236 -0
  74. package/src/transport-protocol.ts +249 -0
  75. package/src/transport.ts +191 -0
  76. package/src/types.ts +392 -0
  77. package/src/websocket-server.ts +303 -0
  78. package/src/ws-transport.ts +205 -0
@@ -0,0 +1,78 @@
1
+ /**
2
+ * App Registry
3
+ *
4
+ * Manages available apps and their configurations.
5
+ */
6
+ export class AppRegistry {
7
+ apps = new Map();
8
+ defaultAppId;
9
+ constructor(apps, defaultApp) {
10
+ if (!apps[defaultApp]) {
11
+ throw new Error(`Default app "${defaultApp}" not found in apps: ${Object.keys(apps).join(", ")}`);
12
+ }
13
+ this.defaultAppId = defaultApp;
14
+ for (const [id, app] of Object.entries(apps)) {
15
+ this.apps.set(id, {
16
+ id,
17
+ app,
18
+ isDefault: id === defaultApp,
19
+ });
20
+ }
21
+ }
22
+ /**
23
+ * Get an app by ID
24
+ */
25
+ get(id) {
26
+ return this.apps.get(id);
27
+ }
28
+ /**
29
+ * Get the default app
30
+ */
31
+ getDefault() {
32
+ return this.apps.get(this.defaultAppId);
33
+ }
34
+ /**
35
+ * Get the default app ID
36
+ */
37
+ get defaultId() {
38
+ return this.defaultAppId;
39
+ }
40
+ /**
41
+ * Check if an app exists
42
+ */
43
+ has(id) {
44
+ return this.apps.has(id);
45
+ }
46
+ /**
47
+ * Get all app IDs
48
+ */
49
+ ids() {
50
+ return Array.from(this.apps.keys());
51
+ }
52
+ /**
53
+ * Get all apps
54
+ */
55
+ all() {
56
+ return Array.from(this.apps.values());
57
+ }
58
+ /**
59
+ * Get app count
60
+ */
61
+ get size() {
62
+ return this.apps.size;
63
+ }
64
+ /**
65
+ * Resolve an app ID, falling back to default
66
+ */
67
+ resolve(id) {
68
+ if (!id) {
69
+ return this.getDefault();
70
+ }
71
+ const app = this.apps.get(id);
72
+ if (!app) {
73
+ throw new Error(`Unknown app "${id}". Available: ${this.ids().join(", ")}`);
74
+ }
75
+ return app;
76
+ }
77
+ }
78
+ //# sourceMappingURL=app-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-registry.js","sourceRoot":"","sources":["../src/app-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,OAAO,WAAW;IACd,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;IAClC,YAAY,CAAS;IAE7B,YAAY,IAAyB,EAAE,UAAkB;QACvD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,gBAAgB,UAAU,wBAAwB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;QAE/B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;gBAChB,EAAE;gBACF,GAAG;gBACH,SAAS,EAAE,EAAE,KAAK,UAAU;aAC7B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,GAAG;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,GAAG;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,EAAW;QACjB,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,iBAAiB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
package/dist/bin.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Gateway CLI
4
+ *
5
+ * Run the gateway daemon from the command line.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
package/dist/bin.js ADDED
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Gateway CLI
4
+ *
5
+ * Run the gateway daemon from the command line.
6
+ */
7
+ import { createGateway } from "./gateway.js";
8
+ // For now, just a placeholder that shows usage
9
+ console.log("@agentick/gateway");
10
+ console.log("");
11
+ console.log("Usage:");
12
+ console.log(" The gateway is typically started programmatically:");
13
+ console.log("");
14
+ console.log(" ```typescript");
15
+ console.log(" import { createGateway } from '@agentick/gateway';");
16
+ console.log(" import { createApp } from '@agentick/core';");
17
+ console.log("");
18
+ console.log(" const Agent = () => (");
19
+ console.log(" <>");
20
+ console.log(" <Model model={gpt4} />");
21
+ console.log(" <System>You are a helpful assistant.</System>");
22
+ console.log(" <Timeline />");
23
+ console.log(" </>");
24
+ console.log(" );");
25
+ console.log("");
26
+ console.log(" const gateway = createGateway({");
27
+ console.log(" agents: { chat: createApp(Agent) },");
28
+ console.log(" defaultAgent: 'chat',");
29
+ console.log(" port: 18789,");
30
+ console.log(" });");
31
+ console.log("");
32
+ console.log(" await gateway.start();");
33
+ console.log(" ```");
34
+ console.log("");
35
+ console.log("Future versions will support a config file:");
36
+ console.log(" agentick-gateway --config ./gateway.config.ts");
37
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,+CAA+C;AAC/C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACtB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;AACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC/B,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;AACpE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;AAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACvC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC5C,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;AACnE,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAClC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AACjD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;AACvD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AACzC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAChC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAChB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;AAC3D,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Gateway
3
+ *
4
+ * Standalone daemon for multi-client, multi-app access.
5
+ * Transport-agnostic: supports both WebSocket and HTTP/SSE.
6
+ *
7
+ * Can run standalone or embedded in an external framework.
8
+ */
9
+ import { EventEmitter } from "events";
10
+ import type { IncomingMessage as NodeRequest, ServerResponse as NodeResponse } from "http";
11
+ import type { GatewayConfig, GatewayEvents } from "./types.js";
12
+ import type { StatusPayload } from "./transport-protocol.js";
13
+ export declare class Gateway extends EventEmitter {
14
+ private config;
15
+ private registry;
16
+ private sessions;
17
+ private transports;
18
+ private startTime;
19
+ private isRunning;
20
+ private embedded;
21
+ /** Pre-compiled map of method paths to procedures */
22
+ private methodProcedures;
23
+ /** Track open SSE connections for embedded mode */
24
+ private sseClients;
25
+ /** Track channel subscriptions: "sessionId:channelName" -> Set of clientIds */
26
+ private channelSubscriptions;
27
+ /** Track unsubscribe functions for core session channels */
28
+ private coreChannelUnsubscribes;
29
+ /** Track client connection times for duration calculation */
30
+ private clientConnectedAt;
31
+ /** Sequence counter for DevTools events */
32
+ private devToolsSequence;
33
+ constructor(config: GatewayConfig);
34
+ /**
35
+ * Walk the methods tree and wrap all handlers as procedures.
36
+ * Infers full path name (e.g., "tasks:admin:archive") automatically.
37
+ */
38
+ private initializeMethods;
39
+ /**
40
+ * Get a method's procedure by path (supports both ":" and "." separators)
41
+ */
42
+ private getMethodProcedure;
43
+ private initializeTransports;
44
+ private setupTransportHandlers;
45
+ /**
46
+ * Start the gateway (standalone mode only)
47
+ */
48
+ start(): Promise<void>;
49
+ /**
50
+ * Stop the gateway
51
+ */
52
+ stop(): Promise<void>;
53
+ /**
54
+ * Alias for stop() - useful for embedded mode cleanup
55
+ */
56
+ close(): Promise<void>;
57
+ /**
58
+ * Get gateway status
59
+ */
60
+ get status(): StatusPayload["gateway"];
61
+ /**
62
+ * Check if running
63
+ */
64
+ get running(): boolean;
65
+ /**
66
+ * Get the gateway ID
67
+ */
68
+ get id(): string;
69
+ /**
70
+ * Handle an HTTP request (embedded mode).
71
+ * This is the main entry point when Gateway is embedded in an external framework.
72
+ *
73
+ * @param req - Node.js IncomingMessage (or Express/Koa/etc request)
74
+ * @param res - Node.js ServerResponse (or Express/Koa/etc response)
75
+ * @returns Promise that resolves when request is handled (may reject on error)
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * // Express middleware
80
+ * app.use("/api", (req, res, next) => {
81
+ * gateway.handleRequest(req, res).catch(next);
82
+ * });
83
+ * ```
84
+ */
85
+ handleRequest(req: NodeRequest, res: NodeResponse): Promise<void>;
86
+ private handleSSE;
87
+ /**
88
+ * Clean up channel subscriptions for a disconnected client.
89
+ */
90
+ private cleanupClientChannelSubscriptions;
91
+ private handleSend;
92
+ private handleInvoke;
93
+ private handleSubscribe;
94
+ private handleAbort;
95
+ private handleCloseEndpoint;
96
+ /**
97
+ * Channel endpoint - handles channel pub/sub operations.
98
+ */
99
+ private handleChannel;
100
+ /**
101
+ * Subscribe a client to a session's channel.
102
+ * Sets up forwarding from core session channel to SSE clients.
103
+ */
104
+ private subscribeToChannel;
105
+ /**
106
+ * Forward a channel event to all subscribed SSE clients.
107
+ */
108
+ private forwardChannelEvent;
109
+ /**
110
+ * Publish an event to a session's channel.
111
+ */
112
+ private publishToChannel;
113
+ private parseBody;
114
+ private handleTransportRequest;
115
+ private executeMethod;
116
+ /**
117
+ * Execute a custom method within Agentick ALS context.
118
+ */
119
+ private executeCustomMethod;
120
+ private handleSendMethod;
121
+ /**
122
+ * Execute a message and stream events to subscribers.
123
+ *
124
+ * @param sessionId - The session key as provided by client (may be unnormalized)
125
+ * @param coreSession - The core session instance
126
+ * @param messageText - The message text to send
127
+ *
128
+ * IMPORTANT: Uses the original sessionId for events to ensure client matching.
129
+ */
130
+ private executeAndStream;
131
+ private sendEventToSubscribers;
132
+ /**
133
+ * Direct send handler for HTTP transport.
134
+ * Returns an async generator that yields events for streaming.
135
+ * Accepts full Message object to support multimodal content (images, audio, video, docs).
136
+ *
137
+ * IMPORTANT: Uses the original sessionId (as provided by client) for events,
138
+ * not the normalized internal ID. This ensures clients can match events to their sessions.
139
+ */
140
+ private directSend;
141
+ /**
142
+ * Invoke a custom method directly (for HTTP transport).
143
+ * Called with pre-authenticated user context.
144
+ */
145
+ private invokeMethod;
146
+ private handleAbortMethod;
147
+ private handleStatusMethod;
148
+ private handleHistoryMethod;
149
+ private handleResetMethod;
150
+ private handleCloseMethod;
151
+ private handleAppsMethod;
152
+ private handleSessionsMethod;
153
+ private handleSubscribeMethod;
154
+ private handleUnsubscribeMethod;
155
+ private createGatewayContext;
156
+ }
157
+ export interface Gateway {
158
+ on<K extends keyof GatewayEvents>(event: K, listener: (payload: GatewayEvents[K]) => void): this;
159
+ emit<K extends keyof GatewayEvents>(event: K, payload: GatewayEvents[K]): boolean;
160
+ }
161
+ /**
162
+ * Create a gateway instance
163
+ */
164
+ export declare function createGateway(config: GatewayConfig): Gateway;
165
+ //# sourceMappingURL=gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}