@qilin-agent/remote-mock 0.0.0-stage → 3.1.4

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,18 @@
1
+ /**
2
+ * Endpoint-named mock for Typert Remote traffic: a table of unary answers and
3
+ * stream scripts keyed by `<namespace>/<method>`, scripted-stream control, a
4
+ * carrier log, and the Connection carrier face the `connection` plugin
5
+ * accepts through explicit installation or a page transport. Values are whatever the test
6
+ * registers; the only declaration is whether an endpoint is unary or a
7
+ * stream. Browser-safe: no DOM, React, or Node imports, no runtime import
8
+ * from another harness package.
9
+ * @module @qilin-agent/remote-mock
10
+ */
11
+ export { RemoteMock, ok } from './remote-mock.ts';
12
+ export type { OpenStreams, RemoteMockOptions, RemoteTable, StreamFilter, UnaryRuleFn } from './remote-mock.ts';
13
+ export { frames, openStream, streamHandle, streamMethod } from './streams.ts';
14
+ export type { StreamHandle, StreamScript } from './streams.ts';
15
+ export { MockClientStream } from './streams.ts';
16
+ export type { LoggedCall, LoggedMiss, LoggedStream, MockLog } from './log.ts';
17
+ export type { MockedRemote } from './remote-proxy.ts';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,96 @@
1
+ /** What a `RemoteMock` saw: answered calls, opened streams, and requests without a rule. */
2
+ /** One unary call, logged when its rule is selected and settled when the rule does. */
3
+ export interface LoggedCall {
4
+ readonly endpoint: string;
5
+ /** Positional args as the caller passed them. */
6
+ readonly args: readonly unknown[];
7
+ /** `pending` until the rule settles, then `answered` or `failed`. */
8
+ readonly state: 'pending' | 'answered' | 'failed';
9
+ /** The answer once `answered`, the thrown error once `failed`. */
10
+ readonly result: unknown;
11
+ /** Global order across calls and stream opens. */
12
+ readonly seq: number;
13
+ }
14
+ /** One stream open and its current state. */
15
+ export interface LoggedStream {
16
+ readonly endpoint: string;
17
+ /** Positional args the stream was opened with. */
18
+ readonly args: readonly unknown[];
19
+ readonly state: 'open' | 'ended' | 'failed' | 'cancelled';
20
+ /** Items delivered to the consumer so far. */
21
+ readonly pushed: number;
22
+ /** Global order across calls and stream opens. */
23
+ readonly seq: number;
24
+ }
25
+ /** One request that found no rule. */
26
+ export interface LoggedMiss {
27
+ readonly endpoint: string;
28
+ readonly mode: 'unary' | 'stream';
29
+ }
30
+ /** Read side of the log. */
31
+ export interface MockLog {
32
+ /**
33
+ * Unary calls, oldest first, with their live state.
34
+ * @param endpoint - restrict to one endpoint.
35
+ * @returns matching entries.
36
+ */
37
+ calls(endpoint?: string): readonly LoggedCall[];
38
+ /**
39
+ * Stream opens, oldest first, with their live state.
40
+ * @param endpoint - restrict to one endpoint.
41
+ * @returns matching entries.
42
+ */
43
+ streams(endpoint?: string): readonly LoggedStream[];
44
+ /**
45
+ * The first positional arg of every unary call and stream open, oldest first: the request object of the Gateway's
46
+ * one-parameter endpoints. Without `endpoint`, every endpoint the client asked the Host for, except the Gateway's
47
+ * own `$`-prefixed ones (`$events`).
48
+ * @param endpoint - restrict to one endpoint.
49
+ * @returns the requests.
50
+ */
51
+ requests(endpoint?: string): readonly unknown[];
52
+ /** Requests that found no rule, oldest first. */
53
+ unmatched(): readonly LoggedMiss[];
54
+ }
55
+ /** Mutable call entry the dispatcher settles. */
56
+ export interface CallRecord extends LoggedCall {
57
+ state: LoggedCall['state'];
58
+ result: unknown;
59
+ }
60
+ /** Mutable stream entry shared with the live stream. */
61
+ export interface StreamRecord extends LoggedStream {
62
+ state: LoggedStream['state'];
63
+ pushed: number;
64
+ }
65
+ /** The mock's log store. */
66
+ export declare class MockLogStore implements MockLog {
67
+ private readonly callEntries;
68
+ private readonly streamEntries;
69
+ private readonly missEntries;
70
+ private seq;
71
+ calls(endpoint?: string): readonly LoggedCall[];
72
+ streams(endpoint?: string): readonly LoggedStream[];
73
+ requests(endpoint?: string): readonly unknown[];
74
+ unmatched(): readonly LoggedMiss[];
75
+ /**
76
+ * Record one call whose rule was selected.
77
+ * @param endpoint - endpoint.
78
+ * @param args - positional args.
79
+ * @returns the mutable entry the dispatcher settles.
80
+ */
81
+ call(endpoint: string, args: readonly unknown[]): CallRecord;
82
+ /**
83
+ * Record one stream open.
84
+ * @param endpoint - endpoint.
85
+ * @param args - positional args.
86
+ * @returns the mutable entry the stream updates.
87
+ */
88
+ stream(endpoint: string, args: readonly unknown[]): StreamRecord;
89
+ /**
90
+ * Record one request without a rule.
91
+ * @param endpoint - endpoint.
92
+ * @param mode - how it was requested.
93
+ */
94
+ miss(endpoint: string, mode: 'unary' | 'stream'): void;
95
+ }
96
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1,190 @@
1
+ /** `RemoteMock`: an endpoint table (unary answers or stream scripts), live stream control, a log, and the Connection carrier face. */
2
+ import type { ClientConnectionRpc } from '@qilin-agent/client-connection/client';
3
+ import { type MockLog } from './log.ts';
4
+ import { type StreamScript } from './streams.ts';
5
+ import { type MockedRemote } from './remote-proxy.ts';
6
+ /** A unary handler receives the caller's positional arguments, without its trailing `AbortSignal`. */
7
+ export type UnaryRuleFn<Args extends readonly unknown[] = readonly unknown[], Result = unknown> = (...args: Args) => Result;
8
+ /** Endpoint defaults: unary values or positional handlers, stream scripts, and stream declarations. */
9
+ export interface RemoteTable {
10
+ readonly unary?: Readonly<Record<string, unknown>>;
11
+ readonly stream?: Readonly<Record<string, StreamScript>>;
12
+ /** Endpoints declared as streams without a script, so an open finds a stream miss rather than a unary one. */
13
+ readonly streams?: readonly string[];
14
+ }
15
+ /** Construction options. */
16
+ export interface RemoteMockOptions {
17
+ /** Host facts the built-in `$events` ready frame carries; default `{ home: '/home/mock' }`. */
18
+ readonly host?: {
19
+ readonly home: string;
20
+ };
21
+ }
22
+ /** Filter over the args a stream was opened with. */
23
+ export type StreamFilter = (args: readonly unknown[]) => boolean;
24
+ /** Control and synchronization for streams opened by registered scripts; native overrides are excluded. */
25
+ export interface OpenStreams {
26
+ /**
27
+ * Push one item into every open stream on `endpoint`, optionally filtered by its open args.
28
+ * @param endpoint - endpoint.
29
+ * @param item - item to deliver.
30
+ * @param where - filter over open args.
31
+ * @returns how many streams received it.
32
+ */
33
+ push(endpoint: string, item: unknown, where?: StreamFilter): number;
34
+ /**
35
+ * End every matching open stream.
36
+ * @param endpoint - endpoint.
37
+ * @param where - filter over open args.
38
+ * @returns how many streams ended.
39
+ */
40
+ end(endpoint: string, where?: StreamFilter): number;
41
+ /**
42
+ * Fail every matching open stream with `error`.
43
+ * @param endpoint - endpoint.
44
+ * @param error - error the consumer's read rejects with.
45
+ * @param where - filter over open args.
46
+ * @returns how many streams failed.
47
+ */
48
+ fail(endpoint: string, error: Error, where?: StreamFilter): number;
49
+ /**
50
+ * Resolve once registered scripts have opened `endpoint` at least `count` times in total.
51
+ * @param endpoint - endpoint.
52
+ * @param count - opens to wait for.
53
+ */
54
+ opened(endpoint: string, count: number): Promise<void>;
55
+ /**
56
+ * Resolve once the consumer of every matching stream has pulled everything pushed so far and, for a stream still
57
+ * open, waits for more; a settled stream counts once its queue is empty, and a stream nobody reads never drains.
58
+ * Pulled means taken from the queue: a consumer that processes items asynchronously after pulling them may still
59
+ * be working on the last one.
60
+ * @param endpoint - endpoint.
61
+ * @param where - filter over open args.
62
+ */
63
+ drained(endpoint: string, where?: StreamFilter): Promise<void>;
64
+ }
65
+ /**
66
+ * The success envelope the Client's Remote callers read: `{ ok: true, value }`.
67
+ * @param value - success value.
68
+ * @returns the envelope.
69
+ */
70
+ export declare function ok<T>(value: T): {
71
+ readonly ok: true;
72
+ readonly value: T;
73
+ };
74
+ /**
75
+ * Endpoint-named Remote mock. `dispatch` / `open` are the core; `rpc` is the
76
+ * same core as the decoded carrier accepted by the Connection installer.
77
+ */
78
+ export declare class RemoteMock {
79
+ /**
80
+ * Create a mock whose `$events` stream answers the Gateway client's opening
81
+ * with one ready frame and then stays open, so the assembled client connects.
82
+ * @param options - host facts for the ready frame.
83
+ * @returns the mock.
84
+ */
85
+ static create(options?: RemoteMockOptions): RemoteMock;
86
+ private readonly unaryDefaults;
87
+ private readonly scripts;
88
+ private live;
89
+ private openWaiters;
90
+ private readonly logStore;
91
+ private readonly unaryMocks;
92
+ private readonly streamMocks;
93
+ /** The carrier's uplink for the open in progress through {@link open}; a direct call has none. */
94
+ private carrierUplink;
95
+ private readonly proxy;
96
+ /**
97
+ * Native mock functions for every namespace: configure answers and inspect calls without declaring method names.
98
+ * Explicit stream registrations select stream mocks; all other methods use unary mocks.
99
+ * Native overrides belong to this instance; `mockReset()` restores the implementation reading current defaults.
100
+ * Generated declarations provide exact signatures; absent declarations weaken only this test-owned proxy.
101
+ */
102
+ readonly remote: MockedRemote;
103
+ /** Everything observed so far. */
104
+ readonly log: MockLog;
105
+ /** Control over streams opened by registered scripts. */
106
+ readonly streams: OpenStreams;
107
+ /**
108
+ * The Connection carrier face: `call` dispatches, `open` opens; payloads carry
109
+ * `{ args }` as the whole-client proxies (an array) or the Gateway's own
110
+ * endpoints (one object) send them, and a call aborted by its signal rejects.
111
+ */
112
+ readonly rpc: ClientConnectionRpc;
113
+ private constructor();
114
+ /**
115
+ * Set the endpoint's default positional-argument handler without changing its native mock overrides.
116
+ * @param endpoint - `<namespace>/<method>`.
117
+ * @param rule - handler computing the answer.
118
+ * @returns this.
119
+ */
120
+ unary<Args extends readonly unknown[]>(endpoint: string, rule: UnaryRuleFn<Args>): this;
121
+ /**
122
+ * Set the endpoint's default answer, including explicit `undefined`, without changing its native mock overrides.
123
+ * @param endpoint - `<namespace>/<method>`.
124
+ * @param rule - default answer.
125
+ * @returns this.
126
+ */
127
+ unary(endpoint: string, rule: unknown): this;
128
+ /**
129
+ * Declare `endpoint` as a stream and replace its default script when supplied. A declaration without a script
130
+ * preserves any existing script; an endpoint declared without one fails an open as a stream miss.
131
+ * @param endpoint - `<namespace>/<method>`.
132
+ * @param script - script (`frames` / `openStream` build the common ones).
133
+ * @returns this.
134
+ */
135
+ stream(endpoint: string, script?: StreamScript): this;
136
+ /**
137
+ * Register endpoint defaults without changing native mock overrides.
138
+ * @param table - unary answers and stream scripts.
139
+ * @returns this.
140
+ */
141
+ load(table: RemoteTable): this;
142
+ /**
143
+ * Whether `endpoint` is declared a stream (with or without a script) or has a unary rule — the one declaration
144
+ * the whole-client proxies need; an endpoint neither declared nor ruled is dispatched as a unary call.
145
+ * @param endpoint - endpoint.
146
+ * @returns the mode, or undefined when nothing is registered.
147
+ */
148
+ modeOf(endpoint: string): 'unary' | 'stream' | undefined;
149
+ /**
150
+ * Registered endpoints and accessed proxy methods, sorted.
151
+ * @returns endpoint names.
152
+ */
153
+ endpoints(): readonly string[];
154
+ /**
155
+ * Answer one unary call with the registered rule's value, verbatim. The call
156
+ * is logged as soon as its rule is selected and settles with the rule: a
157
+ * rule that throws or rejects fails the call with that error.
158
+ * @param endpoint - endpoint.
159
+ * @param args - positional args.
160
+ * @returns the answer.
161
+ * @throws {Error} when no rule is registered (logged as unmatched).
162
+ */
163
+ dispatch(endpoint: string, args: readonly unknown[]): Promise<unknown>;
164
+ private unaryMock;
165
+ private unaryAnswer;
166
+ /**
167
+ * Open through the endpoint's native mock, which is called with the generated
168
+ * signature's arguments only; its default runs the registered script as a
169
+ * controlled stream. A native override returns its own iterable: the caller
170
+ * owns consumption and cancellation, outside `OpenStreams`.
171
+ * @param endpoint - endpoint.
172
+ * @param args - positional args.
173
+ * @param signal - consumer cancellation.
174
+ * @param uplink - the carrier's uplink for this open, which the script reads as `StreamHandle.uplink`;
175
+ * absent for a direct call, whose returned handle owns the uplink.
176
+ * @returns the controlled script stream or the native override's caller-owned iterable.
177
+ * @throws {Error} when the default runs without a registered script (logged as unmatched).
178
+ */
179
+ open(endpoint: string, args: readonly unknown[], signal: AbortSignal, uplink?: AsyncIterable<unknown>): AsyncIterable<unknown>;
180
+ private streamMock;
181
+ private openScript;
182
+ /** Throw when any request found no rule, naming the endpoints and the registered ones. */
183
+ assertNoUnmatched(): void;
184
+ private noRuleMessage;
185
+ /** Streams on `endpoint` still open or still holding items their consumer has not pulled; the rest are forgotten. */
186
+ private matching;
187
+ private forEachOpen;
188
+ private wakeOpened;
189
+ }
190
+ //# sourceMappingURL=remote-mock.d.ts.map
@@ -0,0 +1,15 @@
1
+ /** Lazy namespace access for native Remote mocks; production Remote declarations stay unchanged. */
2
+ import type { MaybeMockedDeep } from '@vitest/spy';
3
+ import type { TypertRemoteNamespaceMap } from '@qilin-agent/typert-protocol';
4
+ /**
5
+ * Native mocks for every generated Remote namespace, or an unrestricted local proxy without generated types.
6
+ * @template Api - generated namespace map available in the caller's TypeScript program.
7
+ */
8
+ export type MockedRemote<Api = TypertRemoteNamespaceMap> = keyof Api extends never ? any : MaybeMockedDeep<Api>;
9
+ /**
10
+ * Cache accessed namespaces and expose the current native mock for each method.
11
+ * @param method - selects a stable endpoint mock for its configured invocation mode.
12
+ * @returns enumerable accessed namespaces and methods; symbols and thenable probes remain inert.
13
+ */
14
+ export declare function createRemoteProxy(method: (endpoint: string) => unknown): Record<string, object>;
15
+ //# sourceMappingURL=remote-proxy.d.ts.map
@@ -0,0 +1,153 @@
1
+ /** Stream scripts and the pushable, abort-aware stream a script drives. */
2
+ import { type RemoteStreamHandle } from '@qilin-agent/typert-protocol';
3
+ import type { StreamRecord } from './log.ts';
4
+ /**
5
+ * Type a fake stream method's result as the handle a generated Client method
6
+ * returns. The uplink members are inert: a fake built on it drives the downlink only.
7
+ * @param source - downlink items the fake yields.
8
+ * @returns a handle that iterates `source`.
9
+ */
10
+ export declare function streamHandle<Out, In = never>(source: AsyncIterable<Out>): RemoteStreamHandle<Out, In>;
11
+ /** Downlink item type of one generated stream method. */
12
+ type StreamItem<Method> = Method extends (...args: never[]) => RemoteStreamHandle<infer Out, unknown> ? Out : never;
13
+ /**
14
+ * Lift a fake stream method written as an async generator function into the
15
+ * signature of the generated method it stands in for.
16
+ * @param method - fake taking the method's arguments and yielding its downlink items.
17
+ * @returns the fake returning {@link streamHandle} of each call.
18
+ */
19
+ export declare function streamMethod<Method extends (...args: never[]) => RemoteStreamHandle<unknown, unknown>>(method: (...args: Parameters<Method>) => AsyncIterable<StreamItem<Method>>): Method;
20
+ /** Test-side controls over one open stream. */
21
+ export interface StreamHandle {
22
+ /** Queue one item for the consumer. */
23
+ push(item: unknown): void;
24
+ /** End the stream after the queued items drain. */
25
+ end(): void;
26
+ /** Fail the consumer's next read with `error` after the queued items drain. */
27
+ fail(error: Error): void;
28
+ /** Aborts when the opening signal aborts or the consumer returns early. */
29
+ readonly signal: AbortSignal;
30
+ /**
31
+ * Uplink items for the script: the carrier's iterable when the open came
32
+ * through `rpc.open`, otherwise what the returned handle's `send()` and
33
+ * `end()` feed.
34
+ */
35
+ readonly uplink: AsyncIterable<unknown>;
36
+ }
37
+ /**
38
+ * How a stream endpoint answers an open: receives the open args and the
39
+ * handle; the stream stays open after the script returns until `end()` or
40
+ * `fail()`. A script that throws or rejects fails the stream with that error.
41
+ */
42
+ export type StreamScript = (args: readonly unknown[], stream: StreamHandle) => void | Promise<void>;
43
+ /**
44
+ * Script yielding `items`, then ending.
45
+ * @param items - items in order.
46
+ * @returns the script.
47
+ */
48
+ export declare function frames(items: readonly unknown[]): StreamScript;
49
+ /**
50
+ * Script yielding `initial`, then staying open for `streams.push`.
51
+ * @param initial - items yielded on open.
52
+ * @returns the script.
53
+ */
54
+ export declare function openStream(initial?: readonly unknown[]): StreamScript;
55
+ /** One open stream: a queue the script pushes into and a single consumer reads from; the log entry tracks its state. */
56
+ export declare class MockStream implements StreamHandle, AsyncIterable<unknown> {
57
+ readonly record: StreamRecord;
58
+ private readonly sourceSignal;
59
+ readonly uplink: AsyncIterable<unknown>;
60
+ private readonly release;
61
+ private readonly queue;
62
+ private settled;
63
+ private waiting;
64
+ private drainWaiters;
65
+ private readonly cancellation;
66
+ readonly signal: AbortSignal;
67
+ /** Consumer cancellation listener; attached while the stream is open, removed when it settles or cancels. */
68
+ private readonly onAbort;
69
+ /** Items pushed but not yet pulled by the consumer. */
70
+ get queued(): number;
71
+ /**
72
+ * @param record - log entry this stream updates.
73
+ * @param sourceSignal - cancellation from the caller that opened the stream.
74
+ * @param uplink - the uplink the script reads.
75
+ * @param release - closes the uplink this stream owns; called once, when the stream settles, is cancelled, or the consumer leaves.
76
+ */
77
+ constructor(record: StreamRecord, sourceSignal: AbortSignal, uplink: AsyncIterable<unknown>, release: () => void);
78
+ push(item: unknown): void;
79
+ end(): void;
80
+ fail(error: Error): void;
81
+ /** The consumer left: cancel the stream and drop what it left. */
82
+ dispose(): void;
83
+ /**
84
+ * Start `script` on this stream.
85
+ * @param script - the registered script.
86
+ * @param args - open args.
87
+ */
88
+ run(script: StreamScript, args: readonly unknown[]): void;
89
+ /**
90
+ * Resolve once the consumer has pulled every queued item and waits for the next one, or the stream is no longer
91
+ * open and holds nothing the consumer could still pull (a consumer that returns discards what it left).
92
+ * @returns settles when drained.
93
+ */
94
+ drained(): Promise<void>;
95
+ [Symbol.asyncIterator](): AsyncIterator<unknown>;
96
+ private next;
97
+ private pull;
98
+ private finish;
99
+ private settle;
100
+ private cancel;
101
+ private isDrained;
102
+ private wakeDrained;
103
+ }
104
+ /**
105
+ * The uplink a direct handle owns: `send()` pushes, `end()` half-closes, and
106
+ * `close()` ends it and drops unread items once the stream settles, is
107
+ * cancelled, or the consumer leaves. The script reads it as `StreamHandle.uplink`.
108
+ */
109
+ export declare class HandleUplink implements AsyncIterable<unknown> {
110
+ private readonly items;
111
+ private done;
112
+ private waiter;
113
+ /**
114
+ * Queues one uplink item for the script, or completes the read waiting for it.
115
+ * @param item - the item the handle's `send()` carried.
116
+ * @throws {Error} after `end()`.
117
+ */
118
+ push(item: unknown): void;
119
+ /** Half-closes the uplink: pending and later reads complete as done; repeated calls are no-ops. */
120
+ end(): void;
121
+ /** Ends the uplink and drops unread items; the owning stream calls it on settle or cancel, the script's iterator on `return()`. */
122
+ close(): void;
123
+ [Symbol.asyncIterator](): AsyncIterator<unknown>;
124
+ }
125
+ /**
126
+ * The handle a direct `mock.remote` stream call returns, as a generated method
127
+ * would: iterate it for the script's downlink, `send()` and `end()` feed
128
+ * `StreamHandle.uplink`, `dispose()` cancels the stream. `send()` applies the
129
+ * real handle's check, so a non-lossless JSON item throws and a top-level
130
+ * `undefined` passes. A stream opened through `rpc.open` reads the carrier's
131
+ * uplink instead, and this handle owns none.
132
+ */
133
+ export declare class MockClientStream implements RemoteStreamHandle<unknown, unknown> {
134
+ private readonly stream;
135
+ private readonly uplink;
136
+ /**
137
+ * @param stream - the script-side stream.
138
+ * @param uplink - the uplink this handle feeds; absent when the carrier supplied one.
139
+ */
140
+ constructor(stream: MockStream, uplink: HandleUplink | undefined);
141
+ send(item: unknown): void;
142
+ end(): void;
143
+ dispose(): void;
144
+ [Symbol.asyncIterator](): AsyncIterator<unknown>;
145
+ }
146
+ /**
147
+ * The `Error` a thrown value stands for: itself, or a new Error carrying its string form.
148
+ * @param reason - thrown value.
149
+ * @returns the error.
150
+ */
151
+ export declare function toError(reason: unknown): Error;
152
+ export {};
153
+ //# sourceMappingURL=streams.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,46 @@
1
1
  {
2
2
  "name": "@qilin-agent/remote-mock",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "description": "Endpoint-named mock for Typert Remote traffic: unary answers and stream scripts per <namespace>/<method>, live stream control, a log, and the Connection carrier face whole-client specs install",
4
+ "version": "3.1.4",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/kkutysllb/QiLin.git",
11
+ "directory": "packages/test-support/remote-mock"
12
+ },
13
+ "engines": {
14
+ "node": "^22.19.0 || >=24.0.0"
15
+ },
16
+ "type": "module",
17
+ "main": "lib/index.js",
18
+ "types": "lib/types/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./lib/types/index.d.ts",
22
+ "default": "./lib/index.js"
23
+ },
24
+ "./src/*": "./src/*",
25
+ "./package.json": "./package.json"
26
+ },
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "@vitest/spy": "^4.1.8"
30
+ },
31
+ "peerDependencies": {
32
+ "@qilin-agent/typert-protocol": "3.1.4",
33
+ "@qilin-agent/kylin": "~4.0.3"
34
+ },
35
+ "devDependencies": {
36
+ "typescript": "^6.0.3",
37
+ "@qilin-agent/typert-protocol": "3.1.4",
38
+ "@qilin-agent/api-settings-controller": "3.1.4",
39
+ "@qilin-agent/kylin": "~4.0.3",
40
+ "@qilin-agent/client-connection": "3.1.4"
41
+ },
42
+ "files": [
43
+ "lib/index.js",
44
+ "lib/types/**/*.d.ts"
45
+ ]
6
46
  }