@stateflowx/runtime 0.1.0
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 +38 -0
- package/dist/app.module.d.ts +2 -0
- package/dist/app.module.js +17 -0
- package/dist/app.module.js.map +1 -0
- package/dist/core/db.interface.d.ts +6 -0
- package/dist/core/db.interface.js +2 -0
- package/dist/core/db.interface.js.map +1 -0
- package/dist/core/logger/logger.d.ts +2 -0
- package/dist/core/logger/logger.js +14 -0
- package/dist/core/logger/logger.js.map +1 -0
- package/dist/core/protocol/json-rpc/json-rpc.protocol.d.ts +7 -0
- package/dist/core/protocol/json-rpc/json-rpc.protocol.js +13 -0
- package/dist/core/protocol/json-rpc/json-rpc.protocol.js.map +1 -0
- package/dist/core/provider/provider.config.interface.d.ts +6 -0
- package/dist/core/provider/provider.config.interface.js +2 -0
- package/dist/core/provider/provider.config.interface.js.map +1 -0
- package/dist/core/provider/provider.interface.d.ts +3 -0
- package/dist/core/provider/provider.interface.js +2 -0
- package/dist/core/provider/provider.interface.js.map +1 -0
- package/dist/core/provider/provider.manager.d.ts +10 -0
- package/dist/core/provider/provider.manager.js +24 -0
- package/dist/core/provider/provider.manager.js.map +1 -0
- package/dist/core/provider/providers/gemini.provider.d.ts +5 -0
- package/dist/core/provider/providers/gemini.provider.js +15 -0
- package/dist/core/provider/providers/gemini.provider.js.map +1 -0
- package/dist/core/provider/providers/mock-provider.provider.d.ts +4 -0
- package/dist/core/provider/providers/mock-provider.provider.js +9 -0
- package/dist/core/provider/providers/mock-provider.provider.js.map +1 -0
- package/dist/core/runtime/bootstrap.d.ts +3 -0
- package/dist/core/runtime/bootstrap.js +8 -0
- package/dist/core/runtime/bootstrap.js.map +1 -0
- package/dist/core/runtime/create-runtime-config.interface.d.ts +10 -0
- package/dist/core/runtime/create-runtime-config.interface.js +2 -0
- package/dist/core/runtime/create-runtime-config.interface.js.map +1 -0
- package/dist/core/runtime/create-runtime-context.d.ts +4 -0
- package/dist/core/runtime/create-runtime-context.js +19 -0
- package/dist/core/runtime/create-runtime-context.js.map +1 -0
- package/dist/core/runtime/create-runtime.d.ts +8 -0
- package/dist/core/runtime/create-runtime.js +47 -0
- package/dist/core/runtime/create-runtime.js.map +1 -0
- package/dist/core/runtime/runtime-app-init.d.ts +5 -0
- package/dist/core/runtime/runtime-app-init.js +51 -0
- package/dist/core/runtime/runtime-app-init.js.map +1 -0
- package/dist/core/runtime/runtime-app.interface.d.ts +4 -0
- package/dist/core/runtime/runtime-app.interface.js +2 -0
- package/dist/core/runtime/runtime-app.interface.js.map +1 -0
- package/dist/core/runtime/runtime-config.interface.d.ts +9 -0
- package/dist/core/runtime/runtime-config.interface.js +2 -0
- package/dist/core/runtime/runtime-config.interface.js.map +1 -0
- package/dist/core/runtime/runtime-context.interface.d.ts +15 -0
- package/dist/core/runtime/runtime-context.interface.js +2 -0
- package/dist/core/runtime/runtime-context.interface.js.map +1 -0
- package/dist/core/service/providers/http.service.d.ts +12 -0
- package/dist/core/service/providers/http.service.js +22 -0
- package/dist/core/service/providers/http.service.js.map +1 -0
- package/dist/core/service/runtime-service.interface.d.ts +4 -0
- package/dist/core/service/runtime-service.interface.js +2 -0
- package/dist/core/service/runtime-service.interface.js.map +1 -0
- package/dist/core/service/service-config.interface.d.ts +4 -0
- package/dist/core/service/service-config.interface.js +2 -0
- package/dist/core/service/service-config.interface.js.map +1 -0
- package/dist/core/service/service-definition.interface.d.ts +9 -0
- package/dist/core/service/service-definition.interface.js +2 -0
- package/dist/core/service/service-definition.interface.js.map +1 -0
- package/dist/core/service/service.manager.d.ts +7 -0
- package/dist/core/service/service.manager.js +15 -0
- package/dist/core/service/service.manager.js.map +1 -0
- package/dist/core/storage/in-memory.db.d.ts +8 -0
- package/dist/core/storage/in-memory.db.js +16 -0
- package/dist/core/storage/in-memory.db.js.map +1 -0
- package/dist/core/transport/transport.interface.d.ts +1 -0
- package/dist/core/transport/transport.interface.js +2 -0
- package/dist/core/transport/transport.interface.js.map +1 -0
- package/dist/core/transport/ws/connection-metadata.interface.d.ts +5 -0
- package/dist/core/transport/ws/connection-metadata.interface.js +2 -0
- package/dist/core/transport/ws/connection-metadata.interface.js.map +1 -0
- package/dist/core/transport/ws/events.gateway.d.ts +15 -0
- package/dist/core/transport/ws/events.gateway.js +120 -0
- package/dist/core/transport/ws/events.gateway.js.map +1 -0
- package/dist/core/transport/ws/utils.d.ts +5 -0
- package/dist/core/transport/ws/utils.js +74 -0
- package/dist/core/transport/ws/utils.js.map +1 -0
- package/dist/core/transport/ws/ws.client.interface.d.ts +4 -0
- package/dist/core/transport/ws/ws.client.interface.js +2 -0
- package/dist/core/transport/ws/ws.client.interface.js.map +1 -0
- package/dist/core/transport/ws/ws.interface.d.ts +10 -0
- package/dist/core/transport/ws/ws.interface.js +10 -0
- package/dist/core/transport/ws/ws.interface.js.map +1 -0
- package/dist/examples/ping-pong/client/client.d.ts +1 -0
- package/dist/examples/ping-pong/client/client.js +48 -0
- package/dist/examples/ping-pong/client/client.js.map +1 -0
- package/dist/examples/ping-pong/ping-pong.app.d.ts +4 -0
- package/dist/examples/ping-pong/ping-pong.app.js +20 -0
- package/dist/examples/ping-pong/ping-pong.app.js.map +1 -0
- package/dist/examples/ping-pong/ping-pong.app.spec.d.ts +1 -0
- package/dist/examples/ping-pong/ping-pong.app.spec.js +59 -0
- package/dist/examples/ping-pong/ping-pong.app.spec.js.map +1 -0
- package/dist/examples/relay-ops/agent/agent.service.d.ts +6 -0
- package/dist/examples/relay-ops/agent/agent.service.js +26 -0
- package/dist/examples/relay-ops/agent/agent.service.js.map +1 -0
- package/dist/examples/relay-ops/client/client.d.ts +1 -0
- package/dist/examples/relay-ops/client/client.js +27 -0
- package/dist/examples/relay-ops/client/client.js.map +1 -0
- package/dist/examples/relay-ops/relay-ops.app.d.ts +4 -0
- package/dist/examples/relay-ops/relay-ops.app.js +35 -0
- package/dist/examples/relay-ops/relay-ops.app.js.map +1 -0
- package/dist/examples/relay-ops/relay-ops.controller.d.ts +10 -0
- package/dist/examples/relay-ops/relay-ops.controller.js +39 -0
- package/dist/examples/relay-ops/relay-ops.controller.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +12 -0
- package/dist/main.js.map +1 -0
- package/dist/runtime/index.d.ts +7 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/index.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.manager.js","sourceRoot":"","sources":["../../../src/core/service/service.manager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IACjB,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEpD,YAAY,WAA4B,EAAE;QACxC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,OAAsB;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class InMemoryDB {
|
|
2
|
+
store = new Map();
|
|
3
|
+
get(key) {
|
|
4
|
+
return this.store.get(key);
|
|
5
|
+
}
|
|
6
|
+
set(key, value) {
|
|
7
|
+
this.store.set(key, value);
|
|
8
|
+
}
|
|
9
|
+
delete(key) {
|
|
10
|
+
this.store.delete(key);
|
|
11
|
+
}
|
|
12
|
+
clear() {
|
|
13
|
+
this.store.clear();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=in-memory.db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory.db.js","sourceRoot":"","sources":["../../../src/core/storage/in-memory.db.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACb,KAAK,GAAG,IAAI,GAAG,EAAe,CAAC;IAEvC,GAAG,CAAU,GAAW;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAU,GAAW,EAAE,KAAQ;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.interface.js","sourceRoot":"","sources":["../../../src/core/transport/transport.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-metadata.interface.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/connection-metadata.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { OnGatewayConnection, OnGatewayDisconnect, OnGatewayInit } from '@nestjs/websockets';
|
|
2
|
+
import { Server, WebSocket } from 'ws';
|
|
3
|
+
import { IWebSocket } from './ws.interface.js';
|
|
4
|
+
export default class EventsGateway implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect {
|
|
5
|
+
server: Server & {
|
|
6
|
+
clients: Set<IWebSocket>;
|
|
7
|
+
};
|
|
8
|
+
clientsMap: Map<string, IWebSocket>;
|
|
9
|
+
maxDataLength: number;
|
|
10
|
+
handleConnection(client: IWebSocket): void;
|
|
11
|
+
handleMessage(client: WebSocket, message: string): void;
|
|
12
|
+
handleDisconnect(clientWS: IWebSocket): void;
|
|
13
|
+
afterInit(): void;
|
|
14
|
+
isValidObject(value: unknown, client: IWebSocket): boolean;
|
|
15
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { ConnectedSocket, WebSocketGateway, WebSocketServer, } from '@nestjs/websockets';
|
|
14
|
+
import { randomUUID } from 'crypto';
|
|
15
|
+
import { isObject } from 'class-validator';
|
|
16
|
+
import { createRuntime } from '../../runtime/create-runtime.js';
|
|
17
|
+
import { applicationInputTypes } from './utils.js';
|
|
18
|
+
import { logger } from '../../logger/logger.js';
|
|
19
|
+
import { GeminiProvider } from '../../provider/providers/gemini.provider.js';
|
|
20
|
+
import { RuntimeInitializeApp } from '../../runtime/runtime-app-init.js';
|
|
21
|
+
let EventsGateway = class EventsGateway {
|
|
22
|
+
server;
|
|
23
|
+
clientsMap = new Map();
|
|
24
|
+
maxDataLength = 1500;
|
|
25
|
+
handleConnection(client) {
|
|
26
|
+
client.id = randomUUID();
|
|
27
|
+
logger.info({
|
|
28
|
+
clientId: client.id,
|
|
29
|
+
transport: 'websocket',
|
|
30
|
+
protocol: 'json-rpc',
|
|
31
|
+
connectedAt: Date.now(),
|
|
32
|
+
}, 'Client connected');
|
|
33
|
+
const runtime = createRuntime(client, {
|
|
34
|
+
apps: [new RuntimeInitializeApp()],
|
|
35
|
+
providers: [
|
|
36
|
+
{
|
|
37
|
+
name: 'default',
|
|
38
|
+
provider: new GeminiProvider(),
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
services: []
|
|
42
|
+
});
|
|
43
|
+
client.runtime = runtime;
|
|
44
|
+
client.on('message', async (msg) => {
|
|
45
|
+
const rawMessage = msg.toString();
|
|
46
|
+
logger.debug({
|
|
47
|
+
clientId: client.id,
|
|
48
|
+
size: rawMessage.length,
|
|
49
|
+
}, 'Incoming websocket message');
|
|
50
|
+
try {
|
|
51
|
+
const data = JSON.parse(rawMessage);
|
|
52
|
+
await runtime.receiveAndSend(data);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
logger.error({
|
|
56
|
+
clientId: client.id,
|
|
57
|
+
err,
|
|
58
|
+
}, 'Runtime execution failed');
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
handleMessage(client, message) {
|
|
63
|
+
return client.send(message);
|
|
64
|
+
}
|
|
65
|
+
handleDisconnect(clientWS) {
|
|
66
|
+
logger.info({
|
|
67
|
+
clientId: clientWS.id,
|
|
68
|
+
}, 'Client disconnected');
|
|
69
|
+
this.clientsMap.delete(clientWS.id);
|
|
70
|
+
}
|
|
71
|
+
afterInit() {
|
|
72
|
+
logger.info('WebSocketGateway initialized');
|
|
73
|
+
}
|
|
74
|
+
isValidObject(value, client) {
|
|
75
|
+
if (typeof value === 'object' && value !== null && 'data' in value) {
|
|
76
|
+
const data = value.data;
|
|
77
|
+
if (applicationInputTypes(data)) {
|
|
78
|
+
if (typeof data === 'string') {
|
|
79
|
+
const len = data.length;
|
|
80
|
+
if (len <= this.maxDataLength) {
|
|
81
|
+
return isObject(value);
|
|
82
|
+
}
|
|
83
|
+
client.terminate();
|
|
84
|
+
logger.warn({
|
|
85
|
+
clientId: client.id,
|
|
86
|
+
maxDataLength: this.maxDataLength,
|
|
87
|
+
}, 'Payload exceeded max length');
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
client.terminate();
|
|
91
|
+
logger.warn({
|
|
92
|
+
clientId: client.id,
|
|
93
|
+
reason: 'invalid-data-input',
|
|
94
|
+
}, 'Client terminated');
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
client.terminate();
|
|
99
|
+
logger.warn({
|
|
100
|
+
clientId: client.id,
|
|
101
|
+
reason: 'invalid-data-type',
|
|
102
|
+
}, 'Client terminated');
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
__decorate([
|
|
107
|
+
WebSocketServer(),
|
|
108
|
+
__metadata("design:type", Object)
|
|
109
|
+
], EventsGateway.prototype, "server", void 0);
|
|
110
|
+
__decorate([
|
|
111
|
+
__param(0, ConnectedSocket()),
|
|
112
|
+
__metadata("design:type", Function),
|
|
113
|
+
__metadata("design:paramtypes", [Object]),
|
|
114
|
+
__metadata("design:returntype", void 0)
|
|
115
|
+
], EventsGateway.prototype, "handleDisconnect", null);
|
|
116
|
+
EventsGateway = __decorate([
|
|
117
|
+
WebSocketGateway()
|
|
118
|
+
], EventsGateway);
|
|
119
|
+
export default EventsGateway;
|
|
120
|
+
//# sourceMappingURL=events.gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.gateway.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/events.gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IWebSocket } from './ws.interface.js';
|
|
2
|
+
export declare function parseJsonRPCData(d: any): any;
|
|
3
|
+
export declare function isJsonString(event: string, ws: IWebSocket): boolean;
|
|
4
|
+
export declare function isValidJSONRPCRequest(obj: any): boolean;
|
|
5
|
+
export declare function applicationInputTypes(obj: any): boolean;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export function parseJsonRPCData(d) {
|
|
2
|
+
const dataObj = JSON.parse(JSON.stringify(d));
|
|
3
|
+
return dataObj.data;
|
|
4
|
+
}
|
|
5
|
+
export function isJsonString(event, ws) {
|
|
6
|
+
try {
|
|
7
|
+
JSON.parse(event.toString());
|
|
8
|
+
}
|
|
9
|
+
catch (e) {
|
|
10
|
+
const message = e instanceof Error ? e.message : 'Unknown error';
|
|
11
|
+
ws.send(JSON.stringify({ error: { message } }));
|
|
12
|
+
}
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
export function isValidJSONRPCRequest(obj) {
|
|
16
|
+
let check;
|
|
17
|
+
if (typeof obj === 'string') {
|
|
18
|
+
try {
|
|
19
|
+
check = JSON.parse(obj);
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
23
|
+
console.log('input error: ', message);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else if (typeof obj === 'object') {
|
|
28
|
+
check = obj;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
//my other input types:
|
|
34
|
+
if (check && check.hasOwnProperty('type')) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
//valid json-rpc
|
|
39
|
+
if (check &&
|
|
40
|
+
(typeof check !== 'object' || check === null || Array.isArray(check))) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
if (check &&
|
|
44
|
+
(!check.hasOwnProperty('jsonrpc') || check.jsonrpc !== '2.0')) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
if (check &&
|
|
48
|
+
(!check.hasOwnProperty('method') || typeof check.method !== 'string')) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (check &&
|
|
52
|
+
(!check.hasOwnProperty('params') ||
|
|
53
|
+
(typeof check.params !== 'undefined' &&
|
|
54
|
+
!Array.isArray(check.params) &&
|
|
55
|
+
typeof check.params !== 'object'))) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
if (check &&
|
|
59
|
+
(!check.hasOwnProperty('id') ||
|
|
60
|
+
(typeof check.id !== 'string' &&
|
|
61
|
+
typeof check.id !== 'number' &&
|
|
62
|
+
check.id !== null))) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
export function applicationInputTypes(obj) {
|
|
69
|
+
if (isValidJSONRPCRequest(obj)) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws.client.interface.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/ws.client.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { WebSocket } from 'ws';
|
|
2
|
+
import { ConnectionMetadata } from './connection-metadata.interface.js';
|
|
3
|
+
export interface RuntimeInstance {
|
|
4
|
+
receiveAndSend(payload: unknown): void;
|
|
5
|
+
}
|
|
6
|
+
export interface IWebSocket extends WebSocket {
|
|
7
|
+
id: string;
|
|
8
|
+
runtime: RuntimeInstance;
|
|
9
|
+
metadata: ConnectionMetadata;
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
// import { WebSocket } from 'ws';
|
|
3
|
+
// import { JSONRPCServerAndClient } from 'json-rpc-2.0';
|
|
4
|
+
// import { ConnectionMetadata } from './connection-metadata.interface.js';
|
|
5
|
+
// export interface IWebSocket extends WebSocket {
|
|
6
|
+
// id: string;
|
|
7
|
+
// runtime: JSONRPCServerAndClient;
|
|
8
|
+
// metadata: ConnectionMetadata;
|
|
9
|
+
// }
|
|
10
|
+
//# sourceMappingURL=ws.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws.interface.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/ws.interface.ts"],"names":[],"mappings":";AA4BA,kCAAkC;AAClC,yDAAyD;AACzD,2EAA2E;AAE3E,kDAAkD;AAClD,gBAAgB;AAEhB,qCAAqC;AAErC,kCAAkC;AAClC,IAAI"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import readline from 'readline';
|
|
3
|
+
const ws = new WebSocket('ws://localhost:3000');
|
|
4
|
+
let id = 1;
|
|
5
|
+
const rl = readline.createInterface({
|
|
6
|
+
input: process.stdin,
|
|
7
|
+
output: process.stdout,
|
|
8
|
+
});
|
|
9
|
+
ws.on('open', () => {
|
|
10
|
+
console.log('Connected to server');
|
|
11
|
+
console.log('Type: do: ping | do: increment');
|
|
12
|
+
});
|
|
13
|
+
rl.on('line', (input) => {
|
|
14
|
+
const command = input.trim();
|
|
15
|
+
if (!command.startsWith('do:')) {
|
|
16
|
+
console.log('Use format: do: <method>');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const method = command.replace('do:', '').trim();
|
|
20
|
+
const payload = {
|
|
21
|
+
jsonrpc: '2.0',
|
|
22
|
+
method,
|
|
23
|
+
id: id++,
|
|
24
|
+
};
|
|
25
|
+
ws.send(JSON.stringify(payload));
|
|
26
|
+
});
|
|
27
|
+
ws.on('message', (data) => {
|
|
28
|
+
try {
|
|
29
|
+
const parsed = JSON.parse(data.toString());
|
|
30
|
+
if (parsed.error) {
|
|
31
|
+
console.log('error:', parsed.error);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log('response:', parsed.data ?? parsed.result);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
console.log('Raw:', data.toString());
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
ws.on('close', () => {
|
|
42
|
+
console.log('Disconnected');
|
|
43
|
+
rl.close();
|
|
44
|
+
});
|
|
45
|
+
ws.on('error', (err) => {
|
|
46
|
+
console.error('WS Error:', err.message);
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/examples/ping-pong/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;AAEhD,IAAI,EAAE,GAAG,CAAC,CAAC;AAEX,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC,CAAC;AAEH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEjD,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,KAAK;QACd,MAAM;QACN,EAAE,EAAE,EAAE,EAAE;KACT,CAAC;IAEF,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE3C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class PingPongApp {
|
|
2
|
+
register(runtime) {
|
|
3
|
+
runtime.state.counter = 0;
|
|
4
|
+
runtime.prompt('ping', async () => {
|
|
5
|
+
return {
|
|
6
|
+
message: 'pong',
|
|
7
|
+
counter: runtime.state.counter,
|
|
8
|
+
time: Date.now(),
|
|
9
|
+
};
|
|
10
|
+
});
|
|
11
|
+
runtime.prompt('increment', async () => {
|
|
12
|
+
const currentCounter = typeof runtime.state.counter === 'number' ? runtime.state.counter : 0;
|
|
13
|
+
runtime.state.counter = currentCounter + 1;
|
|
14
|
+
return {
|
|
15
|
+
counter: runtime.state.counter,
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ping-pong.app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping-pong.app.js","sourceRoot":"","sources":["../../../src/examples/ping-pong/ping-pong.app.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,WAAW;IACtB,QAAQ,CAAC,OAAuB;QAC9B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QAE1B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YAChC,OAAO;gBACL,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;gBAC9B,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;aACjB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;YACrC,MAAM,cAAc,GACpB,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtE,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,GAAG,CAAC,CAAC;YAE3C,OAAO;gBACL,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;aAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { JSONRPCServer } from 'json-rpc-2.0';
|
|
2
|
+
import { describe, beforeEach, expect, it } from '@jest/globals';
|
|
3
|
+
import { JsonRpcProtocol } from '../../core/protocol/json-rpc/json-rpc.protocol.js';
|
|
4
|
+
import { InMemoryDB } from '../../core/storage/in-memory.db.js';
|
|
5
|
+
import { PingPongApp } from './ping-pong.app.js';
|
|
6
|
+
import { bootstrapRuntime } from '../../core/runtime/bootstrap.js';
|
|
7
|
+
//import { ProviderManager } from '../../core/provider/provider.manager.js';
|
|
8
|
+
describe('PingPongApp', () => {
|
|
9
|
+
let server;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
server = new JSONRPCServer();
|
|
12
|
+
bootstrapRuntime([new PingPongApp()], {
|
|
13
|
+
providers: [],
|
|
14
|
+
db: new InMemoryDB(),
|
|
15
|
+
protocol: new JsonRpcProtocol(server),
|
|
16
|
+
// transport: new WebSocketTransport({
|
|
17
|
+
// send: () => {},
|
|
18
|
+
// }),
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
it('should respond to ping', async () => {
|
|
22
|
+
const result = await server.receive({
|
|
23
|
+
jsonrpc: '2.0',
|
|
24
|
+
method: 'ping',
|
|
25
|
+
id: 1,
|
|
26
|
+
});
|
|
27
|
+
expect(result).toEqual({
|
|
28
|
+
jsonrpc: '2.0',
|
|
29
|
+
id: 1,
|
|
30
|
+
result: {
|
|
31
|
+
message: 'pong',
|
|
32
|
+
counter: 0,
|
|
33
|
+
time: expect.any(Number),
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
it('should increment counter', async () => {
|
|
38
|
+
await server.receive({
|
|
39
|
+
jsonrpc: '2.0',
|
|
40
|
+
method: 'increment',
|
|
41
|
+
id: 1,
|
|
42
|
+
});
|
|
43
|
+
const result = await server.receive({
|
|
44
|
+
jsonrpc: '2.0',
|
|
45
|
+
method: 'ping',
|
|
46
|
+
id: 2,
|
|
47
|
+
});
|
|
48
|
+
expect(result).toEqual({
|
|
49
|
+
jsonrpc: '2.0',
|
|
50
|
+
id: 2,
|
|
51
|
+
result: {
|
|
52
|
+
message: 'pong',
|
|
53
|
+
counter: 1,
|
|
54
|
+
time: expect.any(Number),
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=ping-pong.app.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping-pong.app.spec.js","sourceRoot":"","sources":["../../../src/examples/ping-pong/ping-pong.app.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,4EAA4E;AAE5E,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,MAAqB,CAAC;IAE1B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAE7B,gBAAgB,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE;YACpC,SAAS,EAAE,EAAE;YAEb,EAAE,EAAE,IAAI,UAAU,EAAE;YAEpB,QAAQ,EAAE,IAAI,eAAe,CAAC,MAAM,CAAC;YAErC,sCAAsC;YACtC,oBAAoB;YACpB,MAAM;SACP,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YAClC,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;YACd,EAAE,EAAE,CAAC;SACN,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;aACzB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,WAAW;YACnB,EAAE,EAAE,CAAC;SACN,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YAClC,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;YACd,EAAE,EAAE,CAAC;SACN,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;aACzB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Injectable } from '@nestjs/common';
|
|
11
|
+
import { ProviderManager } from '../../../core/provider/provider.manager.js';
|
|
12
|
+
let AgentService = class AgentService {
|
|
13
|
+
providers;
|
|
14
|
+
constructor(providers) {
|
|
15
|
+
this.providers = providers;
|
|
16
|
+
}
|
|
17
|
+
async prompt(prompt) {
|
|
18
|
+
return this.providers.get('gemini').generate(prompt);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
AgentService = __decorate([
|
|
22
|
+
Injectable(),
|
|
23
|
+
__metadata("design:paramtypes", [ProviderManager])
|
|
24
|
+
], AgentService);
|
|
25
|
+
export { AgentService };
|
|
26
|
+
//# sourceMappingURL=agent.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.service.js","sourceRoot":"","sources":["../../../../src/examples/relay-ops/agent/agent.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAGtE,IAAM,YAAY,GAAlB,MAAM,YAAY;IACM;IAA7B,YAA6B,SAA0B;QAA1B,cAAS,GAAT,SAAS,CAAiB;IAAG,CAAC;IAE3D,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;CACF,CAAA;AANY,YAAY;IADxB,UAAU,EAAE;qCAE6B,eAAe;GAD5C,YAAY,CAMxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
const socket = new WebSocket('ws://localhost:3000');
|
|
3
|
+
socket.on('open', () => {
|
|
4
|
+
console.log('Connected to server');
|
|
5
|
+
const payload = {
|
|
6
|
+
jsonrpc: '2.0',
|
|
7
|
+
method: 'relay-ops.prompt',
|
|
8
|
+
params: {
|
|
9
|
+
prompt: 'Explain what StateFlowX is in one sentence.',
|
|
10
|
+
},
|
|
11
|
+
id: 1,
|
|
12
|
+
};
|
|
13
|
+
console.log('sending:', JSON.stringify(payload, null, 2));
|
|
14
|
+
socket.send(JSON.stringify(payload));
|
|
15
|
+
});
|
|
16
|
+
socket.on('message', (data) => {
|
|
17
|
+
const response = JSON.parse(data.toString());
|
|
18
|
+
console.log('received:', JSON.stringify(response, null, 2));
|
|
19
|
+
socket.close();
|
|
20
|
+
});
|
|
21
|
+
socket.on('close', () => {
|
|
22
|
+
console.log('Disconnected');
|
|
23
|
+
});
|
|
24
|
+
socket.on('error', (error) => {
|
|
25
|
+
console.error('Socket error:', error);
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/examples/relay-ops/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAC;AAEpD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;IACrB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE;YACN,MAAM,EAAE,6CAA6C;SACtD;QACD,EAAE,EAAE,CAAC;KACN,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE7C,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5D,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IACtB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export class RelayOpsApp {
|
|
2
|
+
register(runtime) {
|
|
3
|
+
runtime.prompt('relay-ops.prompt', async (payload) => {
|
|
4
|
+
if (typeof payload !== 'object' ||
|
|
5
|
+
payload === null ||
|
|
6
|
+
!('prompt' in payload) ||
|
|
7
|
+
typeof payload.prompt !== 'string') {
|
|
8
|
+
throw new Error('Invalid payload');
|
|
9
|
+
}
|
|
10
|
+
return runtime.ai.generate(payload.prompt);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
// export class RelayOpsApp implements RuntimeApp {
|
|
15
|
+
// register(runtime: RuntimeContext) {
|
|
16
|
+
// runtime.prompt(
|
|
17
|
+
// 'relay-ops.prompt',
|
|
18
|
+
// async (payload: unknown) => {
|
|
19
|
+
// const { prompt } = payload as { prompt: string };
|
|
20
|
+
// return runtime.ai.generate(prompt);
|
|
21
|
+
// }
|
|
22
|
+
// );
|
|
23
|
+
// }
|
|
24
|
+
// }
|
|
25
|
+
// export class RelayOpsApp implements RuntimeApp {
|
|
26
|
+
// register(runtime: RuntimeContext) {
|
|
27
|
+
// runtime.prompt(
|
|
28
|
+
// 'relay-ops.prompt',
|
|
29
|
+
// async ({ prompt }: { prompt: string }) => {
|
|
30
|
+
// return runtime.ai.generate(prompt);
|
|
31
|
+
// }
|
|
32
|
+
// );
|
|
33
|
+
// }
|
|
34
|
+
// }
|
|
35
|
+
//# sourceMappingURL=relay-ops.app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay-ops.app.js","sourceRoot":"","sources":["../../../src/examples/relay-ops/relay-ops.app.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACtB,QAAQ,CAAC,OAAuB;QAC9B,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,EAAE,OAAgB,EAAE,EAAE;YAC5D,IACE,OAAO,OAAO,KAAK,QAAQ;gBAC3B,OAAO,KAAK,IAAI;gBAChB,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC;gBACtB,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAClC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC;YAED,OAAO,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,mDAAmD;AACnD,wCAAwC;AACxC,sBAAsB;AACtB,4BAA4B;AAC5B,sCAAsC;AACtC,4DAA4D;AAC5D,8CAA8C;AAC9C,UAAU;AACV,SAAS;AACT,MAAM;AACN,IAAI;AAEJ,mDAAmD;AACnD,wCAAwC;AACxC,sBAAsB;AACtB,4BAA4B;AAC5B,oDAAoD;AACpD,8CAA8C;AAC9C,UAAU;AACV,SAAS;AACT,MAAM;AACN,IAAI"}
|