@stateflowx/runtime 0.1.6 → 0.1.8

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 CHANGED
@@ -8,38 +8,105 @@ StateFlowX Runtime is a lightweight orchestration runtime for building operation
8
8
  - Runtime composition
9
9
  - Pluggable provider architecture
10
10
  - Transport abstraction
11
+ - Dynamic workflow registration
11
12
  - Service orchestration foundation
12
13
  - Realtime execution flow
13
14
  - NestJS-based runtime infrastructure
14
15
 
16
+ ---
17
+
15
18
  ## Installation
16
19
 
17
20
  ```bash
18
21
  npm install @stateflowx/runtime
19
22
  ```
20
23
 
21
- ## Basic Example
24
+ ---
22
25
 
23
- ```ts
24
- import { createRuntime } from '@stateflowx/runtime';
26
+ ## Runtime Host Example
25
27
 
26
- const runtime = createRuntime({
27
- providers: [
28
- gemini({
29
- priority: 1,
30
- }),
31
- ],
32
- });
28
+ Minimal external runtime host example:
33
29
 
34
- ```
30
+ <https://github.com/bws9000/stateflowx-runtime-host-example>
35
31
 
36
- ## Demo Application
32
+ This demonstrates:
33
+
34
+ - external npm package consumption
35
+ - WebSocket runtime hosting
36
+ - JSON-RPC transport
37
+ - dynamic runtime initialization
38
+ - Gemini provider integration
39
+ - remote workflow execution
40
+
41
+ ---
42
+
43
+ ## Demo Client Application
37
44
 
38
45
  Example Angular client implementation:
39
46
 
40
- https://github.com/bws9000/stateflowx-client-demo
47
+ <https://github.com/bws9000/stateflowx-client-demo>
48
+
49
+ ## Demo Host Application
41
50
 
42
- ## Example Runtime Configuration
51
+ <https://github.com/bws9000/stateflowx-runtime-host-example>
52
+
53
+ ---
54
+
55
+ ## Basic Runtime Host Example
56
+
57
+ ```ts
58
+ import 'dotenv/config';
59
+
60
+ import { WebSocketServer } from 'ws';
61
+
62
+ import {
63
+ createRuntime,
64
+ RuntimeInitializeApp,
65
+ GeminiProvider,
66
+ } from '@stateflowx/runtime';
67
+
68
+ const wss = new WebSocketServer({
69
+ port: 3000,
70
+ });
71
+
72
+ wss.on('connection', (socket) => {
73
+ const runtime = createRuntime(
74
+ {
75
+ send(data) {
76
+ socket.send(data);
77
+ },
78
+ },
79
+ {
80
+ apps: [
81
+ new RuntimeInitializeApp(),
82
+ ],
83
+
84
+ providers: [
85
+ {
86
+ name: 'default',
87
+ provider: new GeminiProvider(),
88
+ },
89
+ ],
90
+
91
+ services: [],
92
+ }
93
+ );
94
+
95
+ socket.on('message', async (message) => {
96
+ const payload = JSON.parse(message.toString());
97
+
98
+ await runtime.receiveAndSend(payload);
99
+ });
100
+ });
101
+
102
+ console.log(
103
+ 'StateFlowX runtime listening on ws://localhost:3000'
104
+ );
105
+ ```
106
+
107
+ ---
108
+
109
+ ## Example Client Runtime Configuration
43
110
 
44
111
  ```ts
45
112
  const config = defineConfig({
@@ -79,6 +146,30 @@ const config = defineConfig({
79
146
  });
80
147
  ```
81
148
 
149
+ ---
150
+
151
+ ## Architecture
152
+
153
+ ```text
154
+ Angular Client
155
+ ->
156
+ WebSocket
157
+ ->
158
+ JSON-RPC Runtime
159
+ ->
160
+ Dynamic Runtime Initialization
161
+ ->
162
+ Workflow Registration
163
+ ->
164
+ HTTP Services
165
+ ->
166
+ AI Providers
167
+ ->
168
+ Structured Response
169
+ ```
170
+
171
+ ---
172
+
82
173
  ## Current Status
83
174
 
84
175
  StateFlowX Runtime is currently experimental and under active development.
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/core/runtime/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAQnE,MAAM,UAAU,gBAAgB,CAC9B,IAAkB,EAClB,MAAqB;IAIrB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,oBAAoB,CAClC,GAAG,EACH,MAAM,CACP,CAAC;QAEF,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../src/core/runtime/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAQnE,MAAM,UAAU,gBAAgB,CAC9B,IAAkB,EAClB,MAAqB;IAIrB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,oBAAoB,CAClC,GAAG,EACH,MAAM,CACP,CAAC;QAEF,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,10 +1,2 @@
1
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
2
  //# sourceMappingURL=ws.interface.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"ws.interface.js","sourceRoot":"","sources":["../../../../src/core/transport/ws/ws.interface.ts"],"names":[],"mappings":""}
@@ -4,7 +4,6 @@ import { JsonRpcProtocol } from '../../core/protocol/json-rpc/json-rpc.protocol.
4
4
  import { InMemoryDB } from '../../core/storage/in-memory.db.js';
5
5
  import { PingPongApp } from './ping-pong.app.js';
6
6
  import { bootstrapRuntime } from '../../core/runtime/bootstrap.js';
7
- //import { ProviderManager } from '../../core/provider/provider.manager.js';
8
7
  describe('PingPongApp', () => {
9
8
  let server;
10
9
  beforeEach(() => {
@@ -13,9 +12,6 @@ describe('PingPongApp', () => {
13
12
  providers: [],
14
13
  db: new InMemoryDB(),
15
14
  protocol: new JsonRpcProtocol(server),
16
- // transport: new WebSocketTransport({
17
- // send: () => {},
18
- // }),
19
15
  });
20
16
  });
21
17
  it('should respond to ping', async () => {
@@ -1 +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"}
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;AAEnE,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;SAEtC,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"}
@@ -11,25 +11,4 @@ export class RelayOpsApp {
11
11
  });
12
12
  }
13
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
14
  //# sourceMappingURL=relay-ops.app.js.map
@@ -1 +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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stateflowx/runtime",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "Realtime orchestration runtime framework for AI workflows and distributed systems.",
5
5
  "author": "Burt Snyder <snyder.burt@gmail.com>",
6
6
  "repository": {