@agentick/nestjs 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.
@@ -0,0 +1,83 @@
1
+ /**
2
+ * TentickleService - High-level service for Tentickle operations.
3
+ *
4
+ * Wraps App with NestJS-friendly patterns for multiplexed SSE sessions.
5
+ *
6
+ * @module @tentickle/nestjs/service
7
+ */
8
+ import type { Response } from "express";
9
+ import type { App } from "@tentickle/core";
10
+ import type { SendInput } from "@tentickle/shared";
11
+ import { type TentickleModuleOptions } from "./types";
12
+ /**
13
+ * High-level service for Tentickle operations.
14
+ *
15
+ * @example Injecting into your controller
16
+ * ```typescript
17
+ * @Controller('chat')
18
+ * export class ChatController {
19
+ * constructor(private readonly tentickle: TentickleService) {}
20
+ *
21
+ * @Post('send')
22
+ * async send(@Body() body: { message: string }, @Res() res: Response) {
23
+ * const { sessionId } = body;
24
+ * return this.tentickle.sendAndStream(sessionId, { message: body.message }, res);
25
+ * }
26
+ * }
27
+ * ```
28
+ */
29
+ export declare class TentickleService {
30
+ private readonly app;
31
+ private readonly options;
32
+ private readonly connections;
33
+ private readonly sessionSubscribers;
34
+ private readonly sessionListeners;
35
+ private readonly sessionChannelListeners;
36
+ constructor(app: App, options: TentickleModuleOptions);
37
+ /**
38
+ * Create an SSE connection.
39
+ * Returns a connection ID that the client will use for subscriptions.
40
+ */
41
+ createConnection(res: Response): string;
42
+ /**
43
+ * Subscribe a connection to one or more sessions.
44
+ */
45
+ subscribe(connectionId: string, sessionIds: string[]): Promise<void>;
46
+ /**
47
+ * Unsubscribe a connection from one or more sessions.
48
+ */
49
+ unsubscribe(connectionId: string, sessionIds: string[]): Promise<void>;
50
+ private ensureSessionListener;
51
+ private unsubscribeConnection;
52
+ /**
53
+ * Send a message and stream events via SSE.
54
+ * Mirrors Express POST /send endpoint.
55
+ */
56
+ sendAndStream(sessionId: string | undefined, input: SendInput, res: Response): Promise<void>;
57
+ /**
58
+ * Abort a session's current execution.
59
+ */
60
+ abort(sessionId: string, reason?: string): Promise<void>;
61
+ /**
62
+ * Close a session server-side.
63
+ */
64
+ close(sessionId: string): Promise<void>;
65
+ /**
66
+ * Submit tool confirmation result.
67
+ */
68
+ submitToolResult(sessionId: string, toolUseId: string, result: {
69
+ approved: boolean;
70
+ reason?: string;
71
+ modifiedArguments?: Record<string, unknown>;
72
+ }): Promise<void>;
73
+ /**
74
+ * Publish to a session-scoped channel.
75
+ */
76
+ publishToChannel(sessionId: string, channelName: string, eventType: string, payload: unknown): Promise<void>;
77
+ private ensureChannelListener;
78
+ /**
79
+ * Get the underlying App for direct access.
80
+ */
81
+ getApp(): App;
82
+ }
83
+ //# sourceMappingURL=tentickle.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tentickle.service.d.ts","sourceRoot":"","sources":["../src/tentickle.service.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAe,SAAS,EAAgB,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAoC,KAAK,sBAAsB,EAAE,MAAM,SAAS,CAAC;AASxF;;;;;;;;;;;;;;;;GAgBG;AACH,qBACa,gBAAgB;IAOF,OAAO,CAAC,QAAQ,CAAC,GAAG;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAkC;IACrE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmD;IACpF,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA8C;gBAG5C,GAAG,EAAE,GAAG,EACJ,OAAO,EAAE,sBAAsB;IAO7E;;;OAGG;IACH,gBAAgB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM;IAiCvC;;OAEG;IACG,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB1E;;OAEG;IACG,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5E,OAAO,CAAC,qBAAqB;IAgC7B,OAAO,CAAC,qBAAqB;IAyB7B;;;OAGG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,QAAQ,GACZ,OAAO,CAAC,IAAI,CAAC;IAwBhB;;OAEG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9D;;OAEG;IACG,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C;;OAEG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAC1F,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC;IAYhB,OAAO,CAAC,qBAAqB;IAmC7B;;OAEG;IACH,MAAM,IAAI,GAAG;CAGd"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * TentickleService - High-level service for Tentickle operations.
3
+ *
4
+ * Wraps App with NestJS-friendly patterns for multiplexed SSE sessions.
5
+ *
6
+ * @module @tentickle/nestjs/service
7
+ */
8
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ };
14
+ var __metadata = (this && this.__metadata) || function (k, v) {
15
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16
+ };
17
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
18
+ return function (target, key) { decorator(target, key, paramIndex); }
19
+ };
20
+ import { Injectable, Inject } from "@nestjs/common";
21
+ import { createSSEWriter, setSSEHeaders } from "@tentickle/server";
22
+ import { TENTICKLE_APP, TENTICKLE_OPTIONS } from "./types";
23
+ /**
24
+ * High-level service for Tentickle operations.
25
+ *
26
+ * @example Injecting into your controller
27
+ * ```typescript
28
+ * @Controller('chat')
29
+ * export class ChatController {
30
+ * constructor(private readonly tentickle: TentickleService) {}
31
+ *
32
+ * @Post('send')
33
+ * async send(@Body() body: { message: string }, @Res() res: Response) {
34
+ * const { sessionId } = body;
35
+ * return this.tentickle.sendAndStream(sessionId, { message: body.message }, res);
36
+ * }
37
+ * }
38
+ * ```
39
+ */
40
+ let TentickleService = class TentickleService {
41
+ app;
42
+ options;
43
+ connections = new Map();
44
+ sessionSubscribers = new Map();
45
+ sessionListeners = new Map();
46
+ sessionChannelListeners = new Map();
47
+ constructor(app, options) {
48
+ this.app = app;
49
+ this.options = options;
50
+ }
51
+ // ══════════════════════════════════════════════════════════════════════════
52
+ // SSE Connection Management
53
+ // ══════════════════════════════════════════════════════════════════════════
54
+ /**
55
+ * Create an SSE connection.
56
+ * Returns a connection ID that the client will use for subscriptions.
57
+ */
58
+ createConnection(res) {
59
+ setSSEHeaders(res);
60
+ const writer = createSSEWriter(res, {
61
+ keepaliveInterval: this.options.sseKeepaliveInterval ?? 15000,
62
+ });
63
+ const connectionId = `conn-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
64
+ const connection = {
65
+ id: connectionId,
66
+ writer,
67
+ subscriptions: new Set(),
68
+ closed: false,
69
+ };
70
+ this.connections.set(connectionId, connection);
71
+ writer.writeEvent({
72
+ type: "connection",
73
+ connectionId,
74
+ subscriptions: [],
75
+ });
76
+ res.on("close", () => {
77
+ connection.closed = true;
78
+ for (const sessionId of connection.subscriptions) {
79
+ this.unsubscribeConnection(connectionId, sessionId);
80
+ }
81
+ this.connections.delete(connectionId);
82
+ });
83
+ return connectionId;
84
+ }
85
+ /**
86
+ * Subscribe a connection to one or more sessions.
87
+ */
88
+ async subscribe(connectionId, sessionIds) {
89
+ const connection = this.connections.get(connectionId);
90
+ if (!connection || connection.closed) {
91
+ throw new Error("Connection not found or closed");
92
+ }
93
+ for (const sessionId of sessionIds) {
94
+ this.ensureSessionListener(sessionId);
95
+ connection.subscriptions.add(sessionId);
96
+ const subscribers = this.sessionSubscribers.get(sessionId) ?? new Set();
97
+ subscribers.add(connectionId);
98
+ this.sessionSubscribers.set(sessionId, subscribers);
99
+ }
100
+ }
101
+ /**
102
+ * Unsubscribe a connection from one or more sessions.
103
+ */
104
+ async unsubscribe(connectionId, sessionIds) {
105
+ for (const sessionId of sessionIds) {
106
+ this.unsubscribeConnection(connectionId, sessionId);
107
+ }
108
+ }
109
+ ensureSessionListener(sessionId) {
110
+ if (this.sessionListeners.has(sessionId))
111
+ return;
112
+ const session = this.app.session(sessionId);
113
+ const listener = (event) => {
114
+ const subscribers = this.sessionSubscribers.get(sessionId);
115
+ if (!subscribers)
116
+ return;
117
+ for (const connectionId of subscribers) {
118
+ const connection = this.connections.get(connectionId);
119
+ if (!connection || connection.closed)
120
+ continue;
121
+ connection.writer.writeEvent({ ...event, sessionId });
122
+ }
123
+ };
124
+ session.on("event", listener);
125
+ session.once("close", () => {
126
+ this.sessionListeners.delete(sessionId);
127
+ this.sessionSubscribers.delete(sessionId);
128
+ const channelListeners = this.sessionChannelListeners.get(sessionId);
129
+ if (channelListeners) {
130
+ for (const unsubscribe of channelListeners.values()) {
131
+ unsubscribe();
132
+ }
133
+ this.sessionChannelListeners.delete(sessionId);
134
+ }
135
+ });
136
+ this.sessionListeners.set(sessionId, listener);
137
+ }
138
+ unsubscribeConnection(connectionId, sessionId) {
139
+ const connection = this.connections.get(connectionId);
140
+ if (connection) {
141
+ connection.subscriptions.delete(sessionId);
142
+ }
143
+ const subscribers = this.sessionSubscribers.get(sessionId);
144
+ if (!subscribers)
145
+ return;
146
+ subscribers.delete(connectionId);
147
+ if (subscribers.size === 0) {
148
+ this.sessionSubscribers.delete(sessionId);
149
+ const listener = this.sessionListeners.get(sessionId);
150
+ if (listener && this.app.has(sessionId)) {
151
+ const session = this.app.session(sessionId);
152
+ session.off("event", listener);
153
+ }
154
+ this.sessionListeners.delete(sessionId);
155
+ }
156
+ }
157
+ // ══════════════════════════════════════════════════════════════════════════
158
+ // Session Operations
159
+ // ══════════════════════════════════════════════════════════════════════════
160
+ /**
161
+ * Send a message and stream events via SSE.
162
+ * Mirrors Express POST /send endpoint.
163
+ */
164
+ async sendAndStream(sessionId, input, res) {
165
+ setSSEHeaders(res);
166
+ const writer = createSSEWriter(res);
167
+ try {
168
+ const handle = await this.app.send(input, { sessionId });
169
+ for await (const event of handle) {
170
+ writer.writeEvent({ ...event, sessionId: handle.sessionId });
171
+ }
172
+ const result = await handle.result;
173
+ writer.writeEvent({ type: "result", sessionId: handle.sessionId, result });
174
+ }
175
+ catch (error) {
176
+ writer.writeEvent({
177
+ type: "error",
178
+ sessionId: sessionId ?? "unknown",
179
+ error: { message: error instanceof Error ? error.message : String(error) },
180
+ });
181
+ }
182
+ finally {
183
+ writer.close();
184
+ }
185
+ }
186
+ /**
187
+ * Abort a session's current execution.
188
+ */
189
+ async abort(sessionId, reason) {
190
+ if (!this.app.has(sessionId)) {
191
+ throw new Error(`Session ${sessionId} not found`);
192
+ }
193
+ const session = this.app.session(sessionId);
194
+ session.interrupt(undefined, reason);
195
+ }
196
+ /**
197
+ * Close a session server-side.
198
+ */
199
+ async close(sessionId) {
200
+ if (!this.app.has(sessionId)) {
201
+ throw new Error(`Session ${sessionId} not found`);
202
+ }
203
+ await this.app.close(sessionId);
204
+ }
205
+ /**
206
+ * Submit tool confirmation result.
207
+ */
208
+ async submitToolResult(sessionId, toolUseId, result) {
209
+ if (!this.app.has(sessionId)) {
210
+ throw new Error(`Session ${sessionId} not found`);
211
+ }
212
+ const session = this.app.session(sessionId);
213
+ session.submitToolResult(toolUseId, result);
214
+ }
215
+ /**
216
+ * Publish to a session-scoped channel.
217
+ */
218
+ async publishToChannel(sessionId, channelName, eventType, payload) {
219
+ if (!this.app.has(sessionId)) {
220
+ throw new Error(`Session ${sessionId} not found`);
221
+ }
222
+ this.ensureChannelListener(sessionId, channelName);
223
+ const session = this.app.session(sessionId);
224
+ const channel = session.channel(channelName);
225
+ channel.publish({ type: eventType, channel: channelName, payload });
226
+ }
227
+ ensureChannelListener(sessionId, channelName) {
228
+ let channelListeners = this.sessionChannelListeners.get(sessionId);
229
+ if (!channelListeners) {
230
+ channelListeners = new Map();
231
+ this.sessionChannelListeners.set(sessionId, channelListeners);
232
+ }
233
+ if (channelListeners.has(channelName))
234
+ return;
235
+ const session = this.app.session(sessionId);
236
+ const channel = session.channel(channelName);
237
+ const unsubscribe = channel.subscribe((event) => {
238
+ const subscribers = this.sessionSubscribers.get(sessionId);
239
+ if (!subscribers)
240
+ return;
241
+ const sseEvent = {
242
+ type: "channel",
243
+ sessionId,
244
+ channel: channelName,
245
+ event,
246
+ };
247
+ for (const connectionId of subscribers) {
248
+ const connection = this.connections.get(connectionId);
249
+ if (!connection || connection.closed)
250
+ continue;
251
+ connection.writer.writeEvent(sseEvent);
252
+ }
253
+ });
254
+ channelListeners.set(channelName, unsubscribe);
255
+ }
256
+ // ══════════════════════════════════════════════════════════════════════════
257
+ // Low-level Access
258
+ // ══════════════════════════════════════════════════════════════════════════
259
+ /**
260
+ * Get the underlying App for direct access.
261
+ */
262
+ getApp() {
263
+ return this.app;
264
+ }
265
+ };
266
+ TentickleService = __decorate([
267
+ Injectable(),
268
+ __param(0, Inject(TENTICKLE_APP)),
269
+ __param(1, Inject(TENTICKLE_OPTIONS)),
270
+ __metadata("design:paramtypes", [Object, Object])
271
+ ], TentickleService);
272
+ export { TentickleService };
273
+ //# sourceMappingURL=tentickle.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tentickle.service.js","sourceRoot":"","sources":["../src/tentickle.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * NestJS module types for Tentickle.
3
+ *
4
+ * @module @tentickle/nestjs/types
5
+ */
6
+ import type { ModuleMetadata, Type, InjectionToken } from "@nestjs/common";
7
+ import type { App } from "@tentickle/core";
8
+ /**
9
+ * Configuration for TentickleModule.
10
+ */
11
+ export interface TentickleModuleOptions {
12
+ /**
13
+ * The Tentickle App instance.
14
+ */
15
+ app: App;
16
+ /**
17
+ * Endpoint path overrides.
18
+ */
19
+ paths?: {
20
+ events?: string;
21
+ send?: string;
22
+ subscribe?: string;
23
+ abort?: string;
24
+ close?: string;
25
+ toolResponse?: string;
26
+ channel?: string;
27
+ };
28
+ /**
29
+ * SSE keepalive interval in ms.
30
+ * @default 15000
31
+ */
32
+ sseKeepaliveInterval?: number;
33
+ /**
34
+ * Whether to register the default controller.
35
+ * Set to false if you want to define your own routes.
36
+ * @default true
37
+ */
38
+ registerController?: boolean;
39
+ }
40
+ /**
41
+ * Async configuration factory.
42
+ */
43
+ export interface TentickleModuleOptionsFactory {
44
+ createTentickleOptions(): Promise<TentickleModuleOptions> | TentickleModuleOptions;
45
+ }
46
+ /**
47
+ * Async module configuration.
48
+ */
49
+ export interface TentickleModuleAsyncOptions extends Pick<ModuleMetadata, "imports"> {
50
+ /**
51
+ * Factory function for options.
52
+ */
53
+ useFactory?: (...args: unknown[]) => Promise<TentickleModuleOptions> | TentickleModuleOptions;
54
+ /**
55
+ * Dependencies to inject into factory.
56
+ */
57
+ inject?: InjectionToken[];
58
+ /**
59
+ * Class that implements TentickleModuleOptionsFactory.
60
+ */
61
+ useClass?: Type<TentickleModuleOptionsFactory>;
62
+ /**
63
+ * Existing provider to use.
64
+ */
65
+ useExisting?: Type<TentickleModuleOptionsFactory>;
66
+ /**
67
+ * Whether to register the default controller.
68
+ * Set to false if you want to define your own routes.
69
+ * @default true
70
+ */
71
+ registerController?: boolean;
72
+ }
73
+ /**
74
+ * Injection token for TentickleModuleOptions.
75
+ */
76
+ export declare const TENTICKLE_OPTIONS = "TENTICKLE_OPTIONS";
77
+ /**
78
+ * Injection token for App.
79
+ */
80
+ export declare const TENTICKLE_APP = "TENTICKLE_APP";
81
+ export type { SendInput } from "@tentickle/shared";
82
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAM3C;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,GAAG,EAAE,GAAG,CAAC;IAET;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,sBAAsB,IAAI,OAAO,CAAC,sBAAsB,CAAC,GAAG,sBAAsB,CAAC;CACpF;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;IAClF;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,sBAAsB,CAAC,GAAG,sBAAsB,CAAC;IAE9F;;OAEG;IACH,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAE/C;;OAEG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAElD;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAMD;;GAEG;AACH,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAM7C,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * NestJS module types for Tentickle.
3
+ *
4
+ * @module @tentickle/nestjs/types
5
+ */
6
+ // ============================================================================
7
+ // Injection Tokens
8
+ // ============================================================================
9
+ /**
10
+ * Injection token for TentickleModuleOptions.
11
+ */
12
+ export const TENTICKLE_OPTIONS = "TENTICKLE_OPTIONS";
13
+ /**
14
+ * Injection token for App.
15
+ */
16
+ export const TENTICKLE_APP = "TENTICKLE_APP";
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoFH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@agentick/nestjs",
3
+ "version": "0.0.1",
4
+ "description": "NestJS module for Agentick servers",
5
+ "keywords": [
6
+ "agent",
7
+ "agentick",
8
+ "ai",
9
+ "llm",
10
+ "nestjs"
11
+ ],
12
+ "license": "MIT",
13
+ "files": [
14
+ "dist",
15
+ "README.md"
16
+ ],
17
+ "type": "module",
18
+ "main": "./dist/index.js",
19
+ "types": "./dist/index.d.ts",
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
24
+ }
25
+ },
26
+ "dependencies": {
27
+ "@nestjs/common": "^10.4.15",
28
+ "@agentick/gateway": "0.0.1"
29
+ },
30
+ "devDependencies": {
31
+ "@nestjs/core": "^10.4.15",
32
+ "@nestjs/platform-express": "^10.4.15",
33
+ "@nestjs/testing": "^10.4.15",
34
+ "@types/express": "^4.17.25",
35
+ "reflect-metadata": "^0.2.2",
36
+ "rxjs": "^7.8.1",
37
+ "typescript": "^5.8.3",
38
+ "vitest": "^3.2.4"
39
+ },
40
+ "peerDependencies": {
41
+ "@nestjs/common": ">=9.0.0",
42
+ "@nestjs/core": ">=9.0.0",
43
+ "reflect-metadata": ">=0.1.0",
44
+ "rxjs": ">=7.0.0"
45
+ },
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.build.json",
48
+ "test": "vitest run",
49
+ "test:watch": "vitest"
50
+ }
51
+ }