@kapeta/local-cluster-service 0.71.5 → 0.72.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/CHANGELOG.md +14 -0
- package/dist/cjs/src/storm/routes.js +18 -10
- package/dist/esm/src/storm/routes.js +18 -10
- package/package.json +1 -1
- package/src/storm/routes.ts +38 -23
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# [0.72.0](https://github.com/kapetacom/local-cluster-service/compare/v0.71.6...v0.72.0) (2024-09-24)
|
2
|
+
|
3
|
+
|
4
|
+
### Features
|
5
|
+
|
6
|
+
* Add redirect endpoint for opening conversation ([#258](https://github.com/kapetacom/local-cluster-service/issues/258)) ([2b400ac](https://github.com/kapetacom/local-cluster-service/commit/2b400ac0066813a9e18c105628743650646c83c6))
|
7
|
+
|
8
|
+
## [0.71.6](https://github.com/kapetacom/local-cluster-service/compare/v0.71.5...v0.71.6) (2024-09-19)
|
9
|
+
|
10
|
+
|
11
|
+
### Bug Fixes
|
12
|
+
|
13
|
+
* Change to simple json response for now ([#256](https://github.com/kapetacom/local-cluster-service/issues/256)) ([7d8ae48](https://github.com/kapetacom/local-cluster-service/commit/7d8ae4813b78f478a0f719195ea33dc2890f1d2a))
|
14
|
+
|
1
15
|
## [0.71.5](https://github.com/kapetacom/local-cluster-service/compare/v0.71.4...v0.71.5) (2024-09-19)
|
2
16
|
|
3
17
|
|
@@ -25,6 +25,7 @@ const UIServer_1 = require("./UIServer");
|
|
25
25
|
const crypto_1 = require("crypto");
|
26
26
|
const PageGenerator_1 = require("./PageGenerator");
|
27
27
|
const utils_1 = require("./utils");
|
28
|
+
const utils_2 = require("../utils/utils");
|
28
29
|
const UI_SERVERS = {};
|
29
30
|
const router = (0, express_promise_router_1.default)();
|
30
31
|
router.use('/', cors_1.corsHandler);
|
@@ -106,17 +107,17 @@ router.post('/ui/create-system-simple/:handle/:systemId', async (req, res) => {
|
|
106
107
|
const handle = req.params.handle;
|
107
108
|
const systemId = req.params.systemId;
|
108
109
|
const srcDir = (0, page_utils_1.getSystemBaseDir)(systemId);
|
109
|
-
res.set('Content-Type', 'application/x-ndjson');
|
110
|
-
res.set('Access-Control-Expose-Headers',
|
111
|
-
res.set(
|
112
|
-
sendEvent(res,
|
110
|
+
//res.set('Content-Type', 'application/x-ndjson');
|
111
|
+
//res.set('Access-Control-Expose-Headers', ConversationIdHeader);
|
112
|
+
//res.set(ConversationIdHeader, systemId);
|
113
|
+
//sendEvent(res, createPhaseStartEvent(StormEventPhaseType.IMPLEMENT_APIS));
|
113
114
|
try {
|
114
115
|
const pagesFromDisk = (0, utils_1.readFilesAndContent)(srcDir);
|
115
116
|
const pagesWithImplementation = await stormClient_1.stormClient.replaceMockWithAPICall({
|
116
117
|
pages: pagesFromDisk,
|
117
118
|
});
|
118
|
-
sendEvent(res,
|
119
|
-
sendEvent(res,
|
119
|
+
//sendEvent(res, createPhaseEndEvent(StormEventPhaseType.IMPLEMENT_APIS));
|
120
|
+
//sendEvent(res, createPhaseStartEvent(StormEventPhaseType.COMPOSE_SYSTEM));
|
120
121
|
const allFiles = (0, utils_1.readFilesAndContent)(srcDir, false).map((page) => {
|
121
122
|
if (page.encoding == stream_1.HTMLPageEncoding.TEXT) {
|
122
123
|
const matchingFile = pagesWithImplementation.find((pageWithImpl) => pageWithImpl.fileName === page.fileName);
|
@@ -127,12 +128,13 @@ router.post('/ui/create-system-simple/:handle/:systemId', async (req, res) => {
|
|
127
128
|
return page;
|
128
129
|
});
|
129
130
|
const systemUrl = await stormClient_1.stormClient.createSimpleBackend(handle, systemId, { pages: allFiles });
|
130
|
-
sendEvent(res, {
|
131
|
-
sendEvent(res,
|
132
|
-
sendDone(res);
|
131
|
+
//sendEvent(res, {type: 'SYSTEM_READY', created: Math.floor(Date.now() / 1000), reason: 'System Ready', payload: { systemUrl: systemUrl }});
|
132
|
+
//sendEvent(res, createPhaseEndEvent(StormEventPhaseType.COMPOSE_SYSTEM));
|
133
|
+
//sendDone(res);
|
134
|
+
res.json({ url: systemUrl });
|
133
135
|
}
|
134
136
|
catch (err) {
|
135
|
-
|
137
|
+
res.status(500).json({ error: err.message });
|
136
138
|
}
|
137
139
|
finally {
|
138
140
|
if (!res.closed) {
|
@@ -543,6 +545,12 @@ router.post('/ui/get-vote', async (req, res) => {
|
|
543
545
|
router.post('/:handle/all', async (req, res) => {
|
544
546
|
await handleAll(req, res);
|
545
547
|
});
|
548
|
+
router.get('/conversations/:agentName/:systemId/redirect', async (req, res) => {
|
549
|
+
const aiService = (0, utils_2.getRemoteUrl)('ai-service', 'https://ai.kapeta.com');
|
550
|
+
const agentName = req.params.agentName;
|
551
|
+
const systemId = req.params.systemId;
|
552
|
+
res.redirect(aiService + `/v2/conversations/${encodeURIComponent(agentName)}/${encodeURIComponent(systemId)}`);
|
553
|
+
});
|
546
554
|
async function handleAll(req, res) {
|
547
555
|
const handle = req.params.handle;
|
548
556
|
const systemId = req.query.systemId ?? undefined;
|
@@ -25,6 +25,7 @@ const UIServer_1 = require("./UIServer");
|
|
25
25
|
const crypto_1 = require("crypto");
|
26
26
|
const PageGenerator_1 = require("./PageGenerator");
|
27
27
|
const utils_1 = require("./utils");
|
28
|
+
const utils_2 = require("../utils/utils");
|
28
29
|
const UI_SERVERS = {};
|
29
30
|
const router = (0, express_promise_router_1.default)();
|
30
31
|
router.use('/', cors_1.corsHandler);
|
@@ -106,17 +107,17 @@ router.post('/ui/create-system-simple/:handle/:systemId', async (req, res) => {
|
|
106
107
|
const handle = req.params.handle;
|
107
108
|
const systemId = req.params.systemId;
|
108
109
|
const srcDir = (0, page_utils_1.getSystemBaseDir)(systemId);
|
109
|
-
res.set('Content-Type', 'application/x-ndjson');
|
110
|
-
res.set('Access-Control-Expose-Headers',
|
111
|
-
res.set(
|
112
|
-
sendEvent(res,
|
110
|
+
//res.set('Content-Type', 'application/x-ndjson');
|
111
|
+
//res.set('Access-Control-Expose-Headers', ConversationIdHeader);
|
112
|
+
//res.set(ConversationIdHeader, systemId);
|
113
|
+
//sendEvent(res, createPhaseStartEvent(StormEventPhaseType.IMPLEMENT_APIS));
|
113
114
|
try {
|
114
115
|
const pagesFromDisk = (0, utils_1.readFilesAndContent)(srcDir);
|
115
116
|
const pagesWithImplementation = await stormClient_1.stormClient.replaceMockWithAPICall({
|
116
117
|
pages: pagesFromDisk,
|
117
118
|
});
|
118
|
-
sendEvent(res,
|
119
|
-
sendEvent(res,
|
119
|
+
//sendEvent(res, createPhaseEndEvent(StormEventPhaseType.IMPLEMENT_APIS));
|
120
|
+
//sendEvent(res, createPhaseStartEvent(StormEventPhaseType.COMPOSE_SYSTEM));
|
120
121
|
const allFiles = (0, utils_1.readFilesAndContent)(srcDir, false).map((page) => {
|
121
122
|
if (page.encoding == stream_1.HTMLPageEncoding.TEXT) {
|
122
123
|
const matchingFile = pagesWithImplementation.find((pageWithImpl) => pageWithImpl.fileName === page.fileName);
|
@@ -127,12 +128,13 @@ router.post('/ui/create-system-simple/:handle/:systemId', async (req, res) => {
|
|
127
128
|
return page;
|
128
129
|
});
|
129
130
|
const systemUrl = await stormClient_1.stormClient.createSimpleBackend(handle, systemId, { pages: allFiles });
|
130
|
-
sendEvent(res, {
|
131
|
-
sendEvent(res,
|
132
|
-
sendDone(res);
|
131
|
+
//sendEvent(res, {type: 'SYSTEM_READY', created: Math.floor(Date.now() / 1000), reason: 'System Ready', payload: { systemUrl: systemUrl }});
|
132
|
+
//sendEvent(res, createPhaseEndEvent(StormEventPhaseType.COMPOSE_SYSTEM));
|
133
|
+
//sendDone(res);
|
134
|
+
res.json({ url: systemUrl });
|
133
135
|
}
|
134
136
|
catch (err) {
|
135
|
-
|
137
|
+
res.status(500).json({ error: err.message });
|
136
138
|
}
|
137
139
|
finally {
|
138
140
|
if (!res.closed) {
|
@@ -543,6 +545,12 @@ router.post('/ui/get-vote', async (req, res) => {
|
|
543
545
|
router.post('/:handle/all', async (req, res) => {
|
544
546
|
await handleAll(req, res);
|
545
547
|
});
|
548
|
+
router.get('/conversations/:agentName/:systemId/redirect', async (req, res) => {
|
549
|
+
const aiService = (0, utils_2.getRemoteUrl)('ai-service', 'https://ai.kapeta.com');
|
550
|
+
const agentName = req.params.agentName;
|
551
|
+
const systemId = req.params.systemId;
|
552
|
+
res.redirect(aiService + `/v2/conversations/${encodeURIComponent(agentName)}/${encodeURIComponent(systemId)}`);
|
553
|
+
});
|
546
554
|
async function handleAll(req, res) {
|
547
555
|
const handle = req.params.handle;
|
548
556
|
const systemId = req.query.systemId ?? undefined;
|
package/package.json
CHANGED
package/src/storm/routes.ts
CHANGED
@@ -11,7 +11,13 @@ import _ from 'lodash';
|
|
11
11
|
import { corsHandler } from '../middleware/cors';
|
12
12
|
import { stringBody } from '../middleware/stringBody';
|
13
13
|
import { KapetaBodyRequest } from '../types';
|
14
|
-
import {
|
14
|
+
import {
|
15
|
+
HTMLPageEncoding,
|
16
|
+
StormCodegenRequest,
|
17
|
+
StormContextRequest,
|
18
|
+
StormCreateBlockRequest,
|
19
|
+
StormStream,
|
20
|
+
} from './stream';
|
15
21
|
|
16
22
|
import {
|
17
23
|
ConversationIdHeader,
|
@@ -45,6 +51,7 @@ import { UIServer } from './UIServer';
|
|
45
51
|
import { randomUUID } from 'crypto';
|
46
52
|
import { PageQueue } from './PageGenerator';
|
47
53
|
import { copyDirectory, createFuture, readFilesAndContent } from './utils';
|
54
|
+
import { getRemoteUrl } from '../utils/utils';
|
48
55
|
|
49
56
|
const UI_SERVERS: { [key: string]: UIServer } = {};
|
50
57
|
const router = Router();
|
@@ -109,26 +116,24 @@ router.post('/ui/create-system/:handle/:systemId', async (req: KapetaBodyRequest
|
|
109
116
|
|
110
117
|
sendEvent(res, createPhaseStartEvent(StormEventPhaseType.IMPLEMENT_APIS));
|
111
118
|
|
112
|
-
const pagesFromDisk =
|
119
|
+
const pagesFromDisk = readFilesAndContent(srcDir);
|
113
120
|
const pagesWithImplementation = await stormClient.replaceMockWithAPICall({
|
114
|
-
|
115
|
-
|
116
|
-
);
|
121
|
+
pages: pagesFromDisk,
|
122
|
+
});
|
117
123
|
await copyDirectory(srcDir, destDir, (fileName, content) => {
|
118
124
|
// find the page from result1 and write the content to the file
|
119
125
|
const page = pagesWithImplementation.find((p) => p.fileName === fileName);
|
120
126
|
return page ? page.content : content;
|
121
127
|
});
|
122
128
|
|
123
|
-
|
124
129
|
sendEvent(res, createPhaseEndEvent(StormEventPhaseType.IMPLEMENT_APIS));
|
125
130
|
|
126
131
|
sendEvent(res, createPhaseStartEvent(StormEventPhaseType.COMPOSE_SYSTEM_PROMPT));
|
127
132
|
|
128
133
|
// get the content of the pages
|
129
134
|
const pageContents = pagesWithImplementation.map((page) => {
|
130
|
-
return page.content
|
131
|
-
})
|
135
|
+
return page.content;
|
136
|
+
});
|
132
137
|
|
133
138
|
const prompt = await stormClient.generatePrompt(pageContents);
|
134
139
|
|
@@ -148,26 +153,27 @@ router.post('/ui/create-system-simple/:handle/:systemId', async (req: KapetaBody
|
|
148
153
|
const systemId = req.params.systemId as string;
|
149
154
|
const srcDir = getSystemBaseDir(systemId);
|
150
155
|
|
151
|
-
res.set('Content-Type', 'application/x-ndjson');
|
152
|
-
res.set('Access-Control-Expose-Headers', ConversationIdHeader);
|
153
|
-
res.set(ConversationIdHeader, systemId);
|
156
|
+
//res.set('Content-Type', 'application/x-ndjson');
|
157
|
+
//res.set('Access-Control-Expose-Headers', ConversationIdHeader);
|
158
|
+
//res.set(ConversationIdHeader, systemId);
|
154
159
|
|
155
|
-
sendEvent(res, createPhaseStartEvent(StormEventPhaseType.IMPLEMENT_APIS));
|
160
|
+
//sendEvent(res, createPhaseStartEvent(StormEventPhaseType.IMPLEMENT_APIS));
|
156
161
|
|
157
162
|
try {
|
158
163
|
const pagesFromDisk = readFilesAndContent(srcDir);
|
159
164
|
const pagesWithImplementation = await stormClient.replaceMockWithAPICall({
|
160
|
-
|
161
|
-
|
162
|
-
);
|
165
|
+
pages: pagesFromDisk,
|
166
|
+
});
|
163
167
|
|
164
|
-
sendEvent(res, createPhaseEndEvent(StormEventPhaseType.IMPLEMENT_APIS));
|
168
|
+
//sendEvent(res, createPhaseEndEvent(StormEventPhaseType.IMPLEMENT_APIS));
|
165
169
|
|
166
|
-
sendEvent(res, createPhaseStartEvent(StormEventPhaseType.COMPOSE_SYSTEM));
|
170
|
+
//sendEvent(res, createPhaseStartEvent(StormEventPhaseType.COMPOSE_SYSTEM));
|
167
171
|
|
168
172
|
const allFiles = readFilesAndContent(srcDir, false).map((page) => {
|
169
173
|
if (page.encoding == HTMLPageEncoding.TEXT) {
|
170
|
-
const matchingFile = pagesWithImplementation.find(
|
174
|
+
const matchingFile = pagesWithImplementation.find(
|
175
|
+
(pageWithImpl) => pageWithImpl.fileName === page.fileName
|
176
|
+
);
|
171
177
|
if (matchingFile) {
|
172
178
|
return matchingFile;
|
173
179
|
}
|
@@ -175,14 +181,15 @@ router.post('/ui/create-system-simple/:handle/:systemId', async (req: KapetaBody
|
|
175
181
|
return page;
|
176
182
|
});
|
177
183
|
|
178
|
-
const systemUrl = await stormClient.createSimpleBackend(handle, systemId, {pages: allFiles});
|
179
|
-
sendEvent(res, {type: 'SYSTEM_READY', created: Math.floor(Date.now() / 1000), reason: 'System Ready', payload: { systemUrl: systemUrl }});
|
184
|
+
const systemUrl = await stormClient.createSimpleBackend(handle, systemId, { pages: allFiles });
|
185
|
+
//sendEvent(res, {type: 'SYSTEM_READY', created: Math.floor(Date.now() / 1000), reason: 'System Ready', payload: { systemUrl: systemUrl }});
|
180
186
|
|
181
|
-
sendEvent(res, createPhaseEndEvent(StormEventPhaseType.COMPOSE_SYSTEM));
|
187
|
+
//sendEvent(res, createPhaseEndEvent(StormEventPhaseType.COMPOSE_SYSTEM));
|
182
188
|
|
183
|
-
sendDone(res);
|
189
|
+
//sendDone(res);
|
190
|
+
res.json({ url: systemUrl });
|
184
191
|
} catch (err: any) {
|
185
|
-
|
192
|
+
res.status(500).json({ error: err.message });
|
186
193
|
} finally {
|
187
194
|
if (!res.closed) {
|
188
195
|
res.end();
|
@@ -673,6 +680,14 @@ router.post('/:handle/all', async (req: KapetaBodyRequest, res: Response) => {
|
|
673
680
|
await handleAll(req, res);
|
674
681
|
});
|
675
682
|
|
683
|
+
router.get('/conversations/:agentName/:systemId/redirect', async (req: KapetaBodyRequest, res: Response) => {
|
684
|
+
const aiService = getRemoteUrl('ai-service', 'https://ai.kapeta.com');
|
685
|
+
const agentName = req.params.agentName as string;
|
686
|
+
const systemId = req.params.systemId as string;
|
687
|
+
|
688
|
+
res.redirect(aiService + `/v2/conversations/${encodeURIComponent(agentName)}/${encodeURIComponent(systemId)}`);
|
689
|
+
});
|
690
|
+
|
676
691
|
async function handleAll(req: KapetaBodyRequest, res: Response) {
|
677
692
|
const handle = req.params.handle as string;
|
678
693
|
const systemId = (req.query.systemId as string) ?? undefined;
|