@zhijianma/studio 1.0.10
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/LICENSE +202 -0
- package/README.md +158 -0
- package/bin/cli.js +7 -0
- package/dist/app/friday/args.py +65 -0
- package/dist/app/friday/hook.py +52 -0
- package/dist/app/friday/main.py +164 -0
- package/dist/app/friday/model.py +124 -0
- package/dist/app/friday/tool/agentscope_tools.py +159 -0
- package/dist/app/friday/tool/utils.py +161 -0
- package/dist/app/friday/utils/common.py +28 -0
- package/dist/app/friday/utils/connect.py +63 -0
- package/dist/app/friday/utils/constants.py +8 -0
- package/dist/app/requirements.txt +1 -0
- package/dist/public/assets/001-aaron-Bb4ZO8rt.js +1 -0
- package/dist/public/assets/001-little girl-CnyQBZ0k.js +1 -0
- package/dist/public/assets/001-man-16-BO6NLPD_.js +1 -0
- package/dist/public/assets/002-avatar-C3FPnFjo.js +1 -0
- package/dist/public/assets/002-man-15-DfiiX2xR.js +1 -0
- package/dist/public/assets/002-old man-D4L-hA2l.js +1 -0
- package/dist/public/assets/003-avatar-UMXD80xE.js +1 -0
- package/dist/public/assets/003-cat-Cgyj1qJU.js +1 -0
- package/dist/public/assets/003-woman-20-Dy0WdjIG.js +1 -0
- package/dist/public/assets/004-avatar-D6Aw4tpO.js +1 -0
- package/dist/public/assets/004-dog-DUajs1ZO.js +1 -0
- package/dist/public/assets/004-woman-19-D5go5okE.js +1 -0
- package/dist/public/assets/005-avatar-NNQ3sWMe.js +1 -0
- package/dist/public/assets/005-child-SN-FoL0R.js +1 -0
- package/dist/public/assets/005-woman-18-AedSRg8a.js +1 -0
- package/dist/public/assets/006-avatar-FD8IUNL_.js +1 -0
- package/dist/public/assets/006-grandpa-T90IdpYr.js +1 -0
- package/dist/public/assets/006-man-14-DuMA-IZ-.js +1 -0
- package/dist/public/assets/007-avatar-eSQZtpkg.js +1 -0
- package/dist/public/assets/007-grandson-DV7UWhrR.js +1 -0
- package/dist/public/assets/007-man-13-owFTee2M.js +1 -0
- package/dist/public/assets/008-avatar-B9Rcm8D2.js +1 -0
- package/dist/public/assets/008-grandmother-1-BrQNVu9I.js +1 -0
- package/dist/public/assets/008-teenager-ClYxB7sG.js +1 -0
- package/dist/public/assets/009-avatar-DNSTEyOZ.js +1 -0
- package/dist/public/assets/009-grandfather-1-CPOn7LN0.js +1 -0
- package/dist/public/assets/009-grandmother-BAW_dEQC.js +1 -0
- package/dist/public/assets/010-avatar-CRXWH-A0.js +1 -0
- package/dist/public/assets/010-boy-1-C21LhAEr.js +1 -0
- package/dist/public/assets/011-woman-17-CI0UoPMR.js +1 -0
- package/dist/public/assets/012-avatar-BO5j-gGw.js +1 -0
- package/dist/public/assets/012-boy-T-hL8z9d.js +1 -0
- package/dist/public/assets/012-niece-M-tDMWMW.js +1 -0
- package/dist/public/assets/013-avatar-BTyOVKVo.js +1 -0
- package/dist/public/assets/013-granddaughter-D4VonRL-.js +1 -0
- package/dist/public/assets/013-woman-16-CuR7_ppw.js +1 -0
- package/dist/public/assets/014-avatar-DAW_Hvos.js +1 -0
- package/dist/public/assets/014-man-k8AXOF1Q.js +1 -0
- package/dist/public/assets/014-nurse-DnVigtmM.js +1 -0
- package/dist/public/assets/015-avatar-AxHR3j7h.js +1 -0
- package/dist/public/assets/015-woman-15-rDPwBxxc.js +1 -0
- package/dist/public/assets/015-woman-B71QRPrr.js +1 -0
- package/dist/public/assets/016-avatar-BVbMUisT.js +1 -0
- package/dist/public/assets/016-boy-BV_jzAu3.js +1 -0
- package/dist/public/assets/016-woman-14-D08zoPt9.js +1 -0
- package/dist/public/assets/017-gaming-BEpEpa1H.js +1 -0
- package/dist/public/assets/017-superpower-9xQAqiKN.js +1 -0
- package/dist/public/assets/017-uncle-EB1lmqAo.js +1 -0
- package/dist/public/assets/017-woman-13-BFsTAnGR.js +1 -0
- package/dist/public/assets/018-avatar-CnCLJXqW.js +1 -0
- package/dist/public/assets/018-young-QpIX6g3z.js +1 -0
- package/dist/public/assets/019-gaming-Dz5tR0Te.js +1 -0
- package/dist/public/assets/019-man-12-DiRb1dri.js +1 -0
- package/dist/public/assets/019-nephew-tXAgA9cr.js +1 -0
- package/dist/public/assets/020-avatar-Djtnu7jj.js +1 -0
- package/dist/public/assets/020-man-11-BNIZQyX4.js +1 -0
- package/dist/public/assets/020-young woman-BzklF8tq.js +1 -0
- package/dist/public/assets/021-aunt-CX9ikaTy.js +1 -0
- package/dist/public/assets/021-avatar-DP2sODK2.js +1 -0
- package/dist/public/assets/021-superhero-CIWREXp0.js +1 -0
- package/dist/public/assets/021-wizard-Dc9X50m_.js +1 -0
- package/dist/public/assets/021-woman-12-n9ipJK5z.js +1 -0
- package/dist/public/assets/022-father-B1_-ZTn1.js +1 -0
- package/dist/public/assets/022-woman-11-BUCsm06E.js +1 -0
- package/dist/public/assets/023-avatar-TeJ6vGqs.js +1 -0
- package/dist/public/assets/023-ghost-BYvGsa7H.js +1 -0
- package/dist/public/assets/023-man-10-Dfii-GE1.js +1 -0
- package/dist/public/assets/023-uncle-DoAMe1Iy.js +1 -0
- package/dist/public/assets/024-gaming-5ovd4aeT.js +1 -0
- package/dist/public/assets/024-man-9-CEenp_2W.js +1 -0
- package/dist/public/assets/024-prince-Fx3eCiNX.js +1 -0
- package/dist/public/assets/024-uncle-B6tqhqxU.js +1 -0
- package/dist/public/assets/025-gaming-CdlTp3Ub.js +1 -0
- package/dist/public/assets/025-man-8-Cfp6jNt4.js +1 -0
- package/dist/public/assets/025-man-BxhR-XTO.js +1 -0
- package/dist/public/assets/025-princess-Di5TdSnG.js +1 -0
- package/dist/public/assets/026-avatar-DojOPRVd.js +1 -0
- package/dist/public/assets/026-dad-CHaoMWM5.js +1 -0
- package/dist/public/assets/026-owl-Dl-UtZM8.js +1 -0
- package/dist/public/assets/026-woman-10-CywXJiaj.js +1 -0
- package/dist/public/assets/027-avatar-CrEyLmOb.js +1 -0
- package/dist/public/assets/027-girl-Box_GaMO.js +1 -0
- package/dist/public/assets/028-gaming-CmOZ2uGp.js +1 -0
- package/dist/public/assets/028-mom-tEacX7K4.js +1 -0
- package/dist/public/assets/028-woman-9-C1oq4sFk.js +1 -0
- package/dist/public/assets/029-boy-CVg6oMuZ.js +1 -0
- package/dist/public/assets/029-man-7-C4eeEeTQ.js +1 -0
- package/dist/public/assets/030-elf-C8vikAvx.js +1 -0
- package/dist/public/assets/030-gaming-ufCRMN7S.js +1 -0
- package/dist/public/assets/030-granddaughter-DVCp3D8k.js +1 -0
- package/dist/public/assets/030-woman-8-Bv_tRQci.js +1 -0
- package/dist/public/assets/031-avatar-D0u5HVaC.js +1 -0
- package/dist/public/assets/031-grandpa-jKj5oB8I.js +1 -0
- package/dist/public/assets/031-superhero-DfSkK-j2.js +1 -0
- package/dist/public/assets/031-woman-7-DJHfCbTS.js +1 -0
- package/dist/public/assets/032-avatar-BvY6LKIZ.js +1 -0
- package/dist/public/assets/032-grandson-DIjRxDr-.js +1 -0
- package/dist/public/assets/032-man-6-CU7pJmmt.js +1 -0
- package/dist/public/assets/033-avatar-Dviobgw8.js +1 -0
- package/dist/public/assets/033-elf-CTAEJgfN.js +1 -0
- package/dist/public/assets/033-grandfather-BCXPgoJj.js +1 -0
- package/dist/public/assets/033-man-5-wgMylvNO.js +1 -0
- package/dist/public/assets/034-avatar-BqtUHT3_.js +1 -0
- package/dist/public/assets/034-little girl-CrgnV25d.js +1 -0
- package/dist/public/assets/034-man-4-DJdzfcSi.js +1 -0
- package/dist/public/assets/035-gaming-Bp8xnJp_.js +1 -0
- package/dist/public/assets/035-mother-Ccg5FDO8.js +1 -0
- package/dist/public/assets/036-avatar-q6pZKQVf.js +1 -0
- package/dist/public/assets/036-father-DzpzeKJJ.js +1 -0
- package/dist/public/assets/036-goblin-vDsj4aP0.js +1 -0
- package/dist/public/assets/036-grandmother-BI_Fl_aR.js +1 -0
- package/dist/public/assets/037-avatar-CmfvVc7v.js +1 -0
- package/dist/public/assets/037-grandfather-Dtp4XH-s.js +1 -0
- package/dist/public/assets/037-sister-BQv83Uhf.js +1 -0
- package/dist/public/assets/038-gaming-UtXFtv5k.js +1 -0
- package/dist/public/assets/038-girl-Cwg5Rv36.js +1 -0
- package/dist/public/assets/038-gnome-HbogTmVa.js +1 -0
- package/dist/public/assets/038-woman-6-B7jMwsP0.js +1 -0
- package/dist/public/assets/039-avatar-Bb3kVg4l.js +1 -0
- package/dist/public/assets/039-man-3-BSjLnoLV.js +1 -0
- package/dist/public/assets/039-student-CIi32WG9.js +1 -0
- package/dist/public/assets/040-aunt-B5XQH_sJ.js +1 -0
- package/dist/public/assets/040-gaming-CzTjib4v.js +1 -0
- package/dist/public/assets/040-vampire-UFzaHu5c.js +1 -0
- package/dist/public/assets/040-woman-5-Byal-gfX.js +1 -0
- package/dist/public/assets/041-avatar-CPQN2PvT.js +1 -0
- package/dist/public/assets/041-little boy-DUZFMrmJ.js +1 -0
- package/dist/public/assets/041-queen-CqFzW3uO.js +1 -0
- package/dist/public/assets/041-woman-4-CKi_Q-ns.js +1 -0
- package/dist/public/assets/042-avatar-BatY-WQG.js +1 -0
- package/dist/public/assets/042-cyclops-DAxxBVqG.js +1 -0
- package/dist/public/assets/042-man-omzAnpu1.js +1 -0
- package/dist/public/assets/042-woman-3-2Ki1Qz3j.js +1 -0
- package/dist/public/assets/043-avatar-DN026abg.js +1 -0
- package/dist/public/assets/043-child-D8_xXkcm.js +1 -0
- package/dist/public/assets/043-genie-DK78Ykl6.js +1 -0
- package/dist/public/assets/043-woman-2-DMnB0A-0.js +1 -0
- package/dist/public/assets/044-avatar-Bz2FAXUw.js +1 -0
- package/dist/public/assets/044-avatar-DzDIyuj0.js +1 -0
- package/dist/public/assets/044-fairy-BT73odE0.js +1 -0
- package/dist/public/assets/044-sister-CtNPPHh-.js +1 -0
- package/dist/public/assets/045-avatar-DgiFAlxj.js +1 -0
- package/dist/public/assets/045-man-2-BZPavI2b.js +1 -0
- package/dist/public/assets/045-young-B39gytpm.js +1 -0
- package/dist/public/assets/046-avatar-ClHeZPOV.js +1 -0
- package/dist/public/assets/046-brother-BSvJBKnA.js +1 -0
- package/dist/public/assets/046-witch-CVjM2-iJ.js +1 -0
- package/dist/public/assets/046-woman-1-CHWuzLfU.js +1 -0
- package/dist/public/assets/047-avatar-DM01i1ZC.js +1 -0
- package/dist/public/assets/047-king-knA4oWNa.js +1 -0
- package/dist/public/assets/047-man-1-DRWdGzL5.js +1 -0
- package/dist/public/assets/048-father-B0wiM2h6.js +1 -0
- package/dist/public/assets/048-gaming-D7s83-h3.js +1 -0
- package/dist/public/assets/048-girl-CxGcfLgU.js +1 -0
- package/dist/public/assets/049-avatar-BfGDVwlO.js +1 -0
- package/dist/public/assets/049-little boy-Bu5mmsUf.js +1 -0
- package/dist/public/assets/049-man-B3xcAso3.js +1 -0
- package/dist/public/assets/050-avatar-itJOA0dd.js +1 -0
- package/dist/public/assets/050-boy-DEIcVyYT.js +1 -0
- package/dist/public/assets/050-knight-KRUkfXDS.js +1 -0
- package/dist/public/assets/051-avatar-fISL-mLU.js +1 -0
- package/dist/public/assets/052-avatar-BYrM0aPD.js +1 -0
- package/dist/public/assets/053-avatar-B-rnufvm.js +1 -0
- package/dist/public/assets/054-avatar-B7rwS7Qv.js +1 -0
- package/dist/public/assets/055-gaming-DqUOmMvT.js +1 -0
- package/dist/public/assets/056-avatar-D1lb7KL9.js +1 -0
- package/dist/public/assets/057-avatar-Df7NRaJW.js +1 -0
- package/dist/public/assets/058-avatar-C8zso2zk.js +1 -0
- package/dist/public/assets/059-avatar-zEhHpOcr.js +1 -0
- package/dist/public/assets/060-avatar-DkNabW8M.js +1 -0
- package/dist/public/assets/index-CWvY7i3l.css +1 -0
- package/dist/public/assets/index-Zxr-JuKD.js +820 -0
- package/dist/public/index.html +14 -0
- package/dist/public/logo.svg +42 -0
- package/dist/server/src/dao/FridayAppMessage.js +103 -0
- package/dist/server/src/dao/InputRequest.js +99 -0
- package/dist/server/src/dao/Message.js +42 -0
- package/dist/server/src/dao/Reply.js +96 -0
- package/dist/server/src/dao/Run.js +395 -0
- package/dist/server/src/dao/Trace.js +643 -0
- package/dist/server/src/database.js +54 -0
- package/dist/server/src/index.js +211 -0
- package/dist/server/src/migrations/1730000000000-AddMessageReplyForeignKey.js +216 -0
- package/dist/server/src/migrations/1740000000000-MigrateSpanTable.js +638 -0
- package/dist/server/src/migrations/index.js +19 -0
- package/dist/server/src/models/FridayApp.js +69 -0
- package/dist/server/src/models/FridayAppView.js +94 -0
- package/dist/server/src/models/InputRequest.js +41 -0
- package/dist/server/src/models/Message.js +39 -0
- package/dist/server/src/models/ModelInvocationView.js +127 -0
- package/dist/server/src/models/Reply.js +50 -0
- package/dist/server/src/models/Run.js +63 -0
- package/dist/server/src/models/RunView.js +111 -0
- package/dist/server/src/models/Trace.js +154 -0
- package/dist/server/src/otel/grpc-server.js +154 -0
- package/dist/server/src/otel/opentelemetry/proto/collector/trace/v1/trace_service.js +309 -0
- package/dist/server/src/otel/opentelemetry/proto/common/v1/common.js +747 -0
- package/dist/server/src/otel/opentelemetry/proto/resource/v1/resource.js +170 -0
- package/dist/server/src/otel/opentelemetry/proto/trace/v1/trace.js +1134 -0
- package/dist/server/src/otel/processor.js +395 -0
- package/dist/server/src/otel/router.js +128 -0
- package/dist/server/src/services/ReplyingStateManager.js +21 -0
- package/dist/server/src/trpc/router.js +385 -0
- package/dist/server/src/trpc/socket.js +589 -0
- package/dist/server/src/utils/index.js +17 -0
- package/dist/server/src/utils/processUtils.js +27 -0
- package/dist/shared/src/config/client.js +6 -0
- package/dist/shared/src/config/common.js +32 -0
- package/dist/shared/src/config/friday.js +168 -0
- package/dist/shared/src/config/index.js +19 -0
- package/dist/shared/src/config/server.js +104 -0
- package/dist/shared/src/index.js +18 -0
- package/dist/shared/src/types/index.js +20 -0
- package/dist/shared/src/types/messageForm.js +25 -0
- package/dist/shared/src/types/trace.js +20 -0
- package/dist/shared/src/types/trpc.js +98 -0
- package/dist/shared/src/types/usage.js +7 -0
- package/dist/shared/src/utils/banner.js +74 -0
- package/dist/shared/src/utils/objectUtils.js +74 -0
- package/dist/shared/src/utils/terminal.js +30 -0
- package/dist/shared/src/utils/timeUtils.js +86 -0
- package/package.json +89 -0
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.SocketManager = void 0;
|
|
49
|
+
exports.runPythonScript = runPythonScript;
|
|
50
|
+
const child_process_1 = require("child_process");
|
|
51
|
+
const socket_io_1 = require("socket.io");
|
|
52
|
+
const messageForm_1 = require("../../../shared/src/types/messageForm");
|
|
53
|
+
const trpc_1 = require("../../../shared/src/types/trpc");
|
|
54
|
+
const Run_1 = require("../dao/Run");
|
|
55
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
56
|
+
const fs = __importStar(require("node:fs"));
|
|
57
|
+
const src_1 = require("../../../shared/src");
|
|
58
|
+
const friday_1 = require("../../../shared/src/config/friday");
|
|
59
|
+
const FridayAppMessage_1 = require("../dao/FridayAppMessage");
|
|
60
|
+
const InputRequest_1 = require("../dao/InputRequest");
|
|
61
|
+
const Trace_1 = require("../dao/Trace");
|
|
62
|
+
const ReplyingStateManager_1 = require("../services/ReplyingStateManager");
|
|
63
|
+
class SocketManager {
|
|
64
|
+
static close() {
|
|
65
|
+
if (this.io) {
|
|
66
|
+
this.io.close();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
static sendInterruptSignalToFriday() {
|
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
this.io.of('/friday').emit(trpc_1.SocketEvents.server.interruptReply);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
static init(httpServer) {
|
|
75
|
+
this.io = new socket_io_1.Server(httpServer, {
|
|
76
|
+
cors: {
|
|
77
|
+
origin: '*',
|
|
78
|
+
},
|
|
79
|
+
maxHttpBufferSize: Infinity,
|
|
80
|
+
});
|
|
81
|
+
const fridayNamespace = this.io.of('/friday');
|
|
82
|
+
fridayNamespace.on('connection', (socket) => {
|
|
83
|
+
console.debug(`${socket.id}: Friday app client connected`);
|
|
84
|
+
socket.on('disconnect', () => {
|
|
85
|
+
console.debug(`${socket.id}: Friday app client disconnected`);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
// Python client connection
|
|
89
|
+
const pythonNamespace = this.io.of('/python');
|
|
90
|
+
pythonNamespace.on('connection', (socket) => {
|
|
91
|
+
const runId = socket.handshake.auth.run_id;
|
|
92
|
+
console.debug(`${socket.id}: Python client connected`);
|
|
93
|
+
socket.on('disconnect', () => __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
// Delete the input requests
|
|
95
|
+
yield InputRequest_1.InputRequestDao.deleteInputRequestsByRunId(runId);
|
|
96
|
+
this.changeRunStatusAndTriggerEvents(runId, messageForm_1.Status.DONE).catch((error) => {
|
|
97
|
+
console.error(error);
|
|
98
|
+
throw error;
|
|
99
|
+
});
|
|
100
|
+
}));
|
|
101
|
+
});
|
|
102
|
+
const clientNamespace = this.io.of('/client');
|
|
103
|
+
clientNamespace.on('connection', (socket) => {
|
|
104
|
+
console.debug('Client connected');
|
|
105
|
+
socket.on(trpc_1.SocketEvents.client.joinProjectListRoom, () => {
|
|
106
|
+
socket.join(trpc_1.SocketRoomName.ProjectListRoom);
|
|
107
|
+
console.debug(`${socket.id}: joined room: ${trpc_1.SocketRoomName.ProjectListRoom}`);
|
|
108
|
+
Run_1.RunDao.getAllProjects()
|
|
109
|
+
.then((projects) => {
|
|
110
|
+
// Push projects to the client
|
|
111
|
+
socket.emit(trpc_1.SocketEvents.server.pushProjects, projects);
|
|
112
|
+
})
|
|
113
|
+
.catch((error) => {
|
|
114
|
+
console.error(error);
|
|
115
|
+
throw error;
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
socket.on(trpc_1.SocketEvents.client.joinProjectRoom, (project, callback) => __awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
const projectExist = yield Run_1.RunDao.doesProjectExist(project);
|
|
120
|
+
if (!projectExist) {
|
|
121
|
+
callback({
|
|
122
|
+
success: false,
|
|
123
|
+
message: `Project ${project} not found`,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
socket.join(`project-${project}`);
|
|
128
|
+
console.debug(`${socket.id}: joined room: project-${project}`);
|
|
129
|
+
// Return runs to this socket/client
|
|
130
|
+
Run_1.RunDao.getAllProjectRuns(project)
|
|
131
|
+
.then((runs) => {
|
|
132
|
+
// Push runs to the client
|
|
133
|
+
socket.emit(trpc_1.SocketEvents.server.pushRunsData, runs);
|
|
134
|
+
})
|
|
135
|
+
.catch((error) => {
|
|
136
|
+
console.error(error);
|
|
137
|
+
throw error;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}));
|
|
141
|
+
socket.on(trpc_1.SocketEvents.client.joinRunRoom, (runId, callback) => __awaiter(this, void 0, void 0, function* () {
|
|
142
|
+
const runExist = yield Run_1.RunDao.doesRunExist(runId);
|
|
143
|
+
if (!runExist) {
|
|
144
|
+
callback({
|
|
145
|
+
success: false,
|
|
146
|
+
message: `Run ${runId} not found`,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
socket.join(`run-${runId}`);
|
|
151
|
+
console.debug(`${socket.id}: joined room: run-${runId}`);
|
|
152
|
+
// Return run data, input requests and messages to this socket/client
|
|
153
|
+
Run_1.RunDao.getRunData(runId)
|
|
154
|
+
.then((data) => {
|
|
155
|
+
socket.emit(trpc_1.SocketEvents.server.pushRunData, data.runData);
|
|
156
|
+
socket.emit(trpc_1.SocketEvents.server.pushInputRequests, data.inputRequests);
|
|
157
|
+
// 对data.replies.messages按时间排序
|
|
158
|
+
data.replies.forEach((reply) => {
|
|
159
|
+
reply.messages.sort((a, b) => {
|
|
160
|
+
return a.timestamp.localeCompare(b.timestamp);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
socket.emit(trpc_1.SocketEvents.server.pushMessages, data.replies);
|
|
164
|
+
socket.emit(trpc_1.SocketEvents.server.pushSpans, data.spans);
|
|
165
|
+
})
|
|
166
|
+
.catch((error) => {
|
|
167
|
+
console.error(error);
|
|
168
|
+
throw error;
|
|
169
|
+
});
|
|
170
|
+
// Return model invocation data
|
|
171
|
+
Trace_1.SpanDao.getModelInvocationData(runId).then((data) => {
|
|
172
|
+
socket.emit(trpc_1.SocketEvents.server.pushModelInvocationData, data);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}));
|
|
176
|
+
socket.on(trpc_1.SocketEvents.client.sendUserInputToServer, (requestId, blocksInput, structuredInput, callback) => __awaiter(this, void 0, void 0, function* () {
|
|
177
|
+
const inputRequest = yield InputRequest_1.InputRequestDao.getInputRequestByRequestId(requestId);
|
|
178
|
+
if (inputRequest === null) {
|
|
179
|
+
callback({
|
|
180
|
+
success: false,
|
|
181
|
+
message: `Input request ${requestId} not found`,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
const runId = inputRequest.runId;
|
|
186
|
+
yield InputRequest_1.InputRequestDao.deleteInputRequest(requestId);
|
|
187
|
+
// If input requests are empty, change the run status to finished
|
|
188
|
+
const res = yield Run_1.RunDao.getRunData(runId);
|
|
189
|
+
if (res.inputRequests.length === 0) {
|
|
190
|
+
this.changeRunStatusAndTriggerEvents(runId, messageForm_1.Status.RUNNING).catch((error) => {
|
|
191
|
+
console.error(error);
|
|
192
|
+
throw error;
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
// Emit the input to the python client
|
|
196
|
+
this.io
|
|
197
|
+
.of('/python')
|
|
198
|
+
.emit(trpc_1.SocketEvents.server.forwardUserInput, requestId, blocksInput, structuredInput);
|
|
199
|
+
}
|
|
200
|
+
}));
|
|
201
|
+
socket.on(trpc_1.SocketEvents.client.joinOverviewRoom, () => __awaiter(this, void 0, void 0, function* () {
|
|
202
|
+
socket.join(trpc_1.SocketRoomName.OverviewRoom);
|
|
203
|
+
console.debug(`${socket.id}: joined room: ${trpc_1.SocketRoomName.OverviewRoom}`);
|
|
204
|
+
// Return current overview data
|
|
205
|
+
const res = yield this._getOverViewData();
|
|
206
|
+
socket.emit(trpc_1.SocketEvents.server.pushOverviewData, res);
|
|
207
|
+
}));
|
|
208
|
+
socket.on(trpc_1.SocketEvents.client.leaveRoom, (room) => {
|
|
209
|
+
socket.leave(room);
|
|
210
|
+
console.debug(`${socket.id}: left room: ${room}`);
|
|
211
|
+
});
|
|
212
|
+
socket.on(trpc_1.SocketEvents.client.deleteProjects, (projects, callback) => __awaiter(this, void 0, void 0, function* () {
|
|
213
|
+
try {
|
|
214
|
+
yield Run_1.RunDao.deleteProjects(projects);
|
|
215
|
+
callback({
|
|
216
|
+
success: true,
|
|
217
|
+
message: `Success: ${projects.length} project deleted`,
|
|
218
|
+
});
|
|
219
|
+
// Update projectListRoom, overviewRoom,
|
|
220
|
+
this.broadcastOverviewDataToDashboardRoom();
|
|
221
|
+
this.broadcastRunToProjectListRoom();
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
callback({
|
|
225
|
+
success: false,
|
|
226
|
+
message: `Error: ${error}`,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}));
|
|
230
|
+
socket.on(trpc_1.SocketEvents.client.deleteRuns, (runIds, callback) => __awaiter(this, void 0, void 0, function* () {
|
|
231
|
+
try {
|
|
232
|
+
const nDelete = yield Run_1.RunDao.deleteRuns(runIds);
|
|
233
|
+
callback({
|
|
234
|
+
success: nDelete === runIds.length,
|
|
235
|
+
message: `Deleted ${nDelete} runs`,
|
|
236
|
+
});
|
|
237
|
+
// Update data to overviewRoom, projectRoom
|
|
238
|
+
this.broadcastOverviewDataToDashboardRoom();
|
|
239
|
+
this.broadcastRunToProjectListRoom();
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
callback({
|
|
243
|
+
success: false,
|
|
244
|
+
message: `Failed to delete runs: ${error}`,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}));
|
|
248
|
+
// friday app
|
|
249
|
+
socket.on(trpc_1.SocketEvents.client.getFridayConfig, (callback) => __awaiter(this, void 0, void 0, function* () {
|
|
250
|
+
console.debug(`${socket.id}: getFridayConfig`);
|
|
251
|
+
try {
|
|
252
|
+
// Send config to the client
|
|
253
|
+
const fridayConfig = friday_1.FridayConfigManager.getInstance().getConfig();
|
|
254
|
+
callback({
|
|
255
|
+
success: true,
|
|
256
|
+
data: fridayConfig,
|
|
257
|
+
message: 'Get Friday config successfully',
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
console.error(error);
|
|
262
|
+
callback({
|
|
263
|
+
success: false,
|
|
264
|
+
data: null,
|
|
265
|
+
message: `Failed to get Friday config: ${error}`,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}));
|
|
269
|
+
socket.on(trpc_1.SocketEvents.client.saveFridayConfig, (config, callback) => __awaiter(this, void 0, void 0, function* () {
|
|
270
|
+
const fridayConfigManager = friday_1.FridayConfigManager.getInstance();
|
|
271
|
+
// Save the config to the file
|
|
272
|
+
fridayConfigManager.updateConfig(config);
|
|
273
|
+
callback({
|
|
274
|
+
success: true,
|
|
275
|
+
message: 'Save Friday config successfully',
|
|
276
|
+
});
|
|
277
|
+
}));
|
|
278
|
+
socket.on(trpc_1.SocketEvents.client.installFridayRequirements, (pythonEnv, callback) => __awaiter(this, void 0, void 0, function* () {
|
|
279
|
+
const fridayConfigManager = friday_1.FridayConfigManager.getInstance();
|
|
280
|
+
const res = yield fridayConfigManager.installRequirements(pythonEnv);
|
|
281
|
+
callback(res);
|
|
282
|
+
}));
|
|
283
|
+
socket.on(trpc_1.SocketEvents.client.joinFridayAppRoom, (callback) => __awaiter(this, void 0, void 0, function* () {
|
|
284
|
+
console.debug(`${socket.id}: joined room: ${trpc_1.SocketRoomName.FridayAppRoom}`);
|
|
285
|
+
socket.join(trpc_1.SocketRoomName.FridayAppRoom);
|
|
286
|
+
const replyingManager = ReplyingStateManager_1.ReplyingStateManager.getInstance();
|
|
287
|
+
// Push the replying state
|
|
288
|
+
socket.emit(trpc_1.SocketEvents.server.pushReplyingState, replyingManager.getReplyingState());
|
|
289
|
+
// Push the replies to the client
|
|
290
|
+
FridayAppMessage_1.FridayAppMessageDao.getRepliesBefore(undefined, 100)
|
|
291
|
+
.then((res) => {
|
|
292
|
+
socket.emit(trpc_1.SocketEvents.server.pushReplies, res.replies, res.hasMore);
|
|
293
|
+
})
|
|
294
|
+
.catch((error) => {
|
|
295
|
+
console.error(error);
|
|
296
|
+
callback({
|
|
297
|
+
success: false,
|
|
298
|
+
message: `Failed to get replies: ${error}`,
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
}));
|
|
302
|
+
socket.on(trpc_1.SocketEvents.client.verifyFridayConfig, (pythonEnv, callback) => __awaiter(this, void 0, void 0, function* () {
|
|
303
|
+
console.debug(`${socket.id}: verifyPythonEnv:`, pythonEnv);
|
|
304
|
+
// Verify if python exists
|
|
305
|
+
const result = friday_1.FridayConfigManager.getInstance().verifyPythonEnv(pythonEnv);
|
|
306
|
+
callback(result);
|
|
307
|
+
}));
|
|
308
|
+
socket.on(trpc_1.SocketEvents.client.sendUserInputToFridayApp, (name, role, content, callback) => __awaiter(this, void 0, void 0, function* () {
|
|
309
|
+
const replyingManager = ReplyingStateManager_1.ReplyingStateManager.getInstance();
|
|
310
|
+
const replyId = crypto.randomUUID();
|
|
311
|
+
const msgId = crypto.randomUUID();
|
|
312
|
+
FridayAppMessage_1.FridayAppMessageDao.saveReplyMessage(replyId, {
|
|
313
|
+
id: msgId,
|
|
314
|
+
name: name,
|
|
315
|
+
role: role,
|
|
316
|
+
content: content,
|
|
317
|
+
metadata: {},
|
|
318
|
+
timestamp: (0, dayjs_1.default)().format('YYYY-MM-DD HH:mm:ss.SSS'),
|
|
319
|
+
}, true)
|
|
320
|
+
.then((reply) => {
|
|
321
|
+
this.broadcastReplyToFridayAppRoom(reply);
|
|
322
|
+
})
|
|
323
|
+
.catch((error) => {
|
|
324
|
+
console.error(error);
|
|
325
|
+
callback({
|
|
326
|
+
success: false,
|
|
327
|
+
message: `Failed to add reply: ${error}`,
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
// Send the message to the python client
|
|
331
|
+
// TODO: move somewhere
|
|
332
|
+
const config = src_1.ConfigManager.getInstance().getConfig();
|
|
333
|
+
// Broad the replying state to the Friday app room
|
|
334
|
+
replyingManager.setReplyingState(true);
|
|
335
|
+
this.broadcastReplyingStateToFridayAppRoom();
|
|
336
|
+
const fridayConfigManager = friday_1.FridayConfigManager.getInstance();
|
|
337
|
+
const fridayConfig = fridayConfigManager.getConfig();
|
|
338
|
+
if (!fridayConfig) {
|
|
339
|
+
callback({
|
|
340
|
+
success: false,
|
|
341
|
+
message: 'Friday config not found. Please set it up first.',
|
|
342
|
+
});
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
// Prepare the arguments for the Python script
|
|
346
|
+
const mainScriptPath = fridayConfig.mainScriptPath
|
|
347
|
+
? fridayConfig.mainScriptPath
|
|
348
|
+
: fridayConfigManager.getDefaultMainScriptPath();
|
|
349
|
+
const args = [
|
|
350
|
+
mainScriptPath,
|
|
351
|
+
'--query',
|
|
352
|
+
JSON.stringify(content),
|
|
353
|
+
'--studio_url',
|
|
354
|
+
`http://localhost:${config.port}`,
|
|
355
|
+
];
|
|
356
|
+
console.debug(fridayConfig);
|
|
357
|
+
for (const [key, value] of Object.entries(fridayConfig)) {
|
|
358
|
+
if (key !== 'pythonEnv' && key !== 'mainScriptPath') {
|
|
359
|
+
if (typeof value === 'object') {
|
|
360
|
+
args.push(`--${key}`, JSON.stringify(value));
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
args.push(`--${key}`, value);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
runPythonScript(fridayConfig.pythonEnv, args)
|
|
368
|
+
.then((result) => {
|
|
369
|
+
if (result.success) {
|
|
370
|
+
console.debug('[PYTHON SCRIPT OUTPUT]:', result.data);
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
console.error('[PYTHON SCRIPT ERROR]:', result.error);
|
|
374
|
+
callback({
|
|
375
|
+
success: false,
|
|
376
|
+
message: result.error,
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
})
|
|
380
|
+
.catch((error) => {
|
|
381
|
+
console.error('[PYTHON SCRIPT ERROR]:', error);
|
|
382
|
+
callback({
|
|
383
|
+
success: false,
|
|
384
|
+
message: error,
|
|
385
|
+
});
|
|
386
|
+
})
|
|
387
|
+
.finally(() => {
|
|
388
|
+
replyingManager.setReplyingState(false);
|
|
389
|
+
this.broadcastReplyingStateToFridayAppRoom();
|
|
390
|
+
});
|
|
391
|
+
}));
|
|
392
|
+
socket.on(trpc_1.SocketEvents.client.interruptReplyOfFridayApp, () => __awaiter(this, void 0, void 0, function* () {
|
|
393
|
+
yield this.sendInterruptSignalToFriday();
|
|
394
|
+
}));
|
|
395
|
+
socket.on(trpc_1.SocketEvents.client.cleanHistoryOfFridayApp, () => __awaiter(this, void 0, void 0, function* () {
|
|
396
|
+
FridayAppMessage_1.FridayAppMessageDao.cleanHistoryMessages().then(() => {
|
|
397
|
+
const filePath = src_1.PATHS.getFridayDialogHistoryPath();
|
|
398
|
+
if (fs.existsSync(filePath)) {
|
|
399
|
+
fs.unlinkSync(filePath);
|
|
400
|
+
console.debug(`Deleted file: ${filePath}`);
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
console.warn(`File not found: ${filePath}`);
|
|
404
|
+
}
|
|
405
|
+
// TODO: 告知client
|
|
406
|
+
this.broadcastReplyToFridayAppRoom(undefined, true);
|
|
407
|
+
});
|
|
408
|
+
}));
|
|
409
|
+
socket.on('disconnect', () => {
|
|
410
|
+
console.debug('Client disconnected');
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
/*
|
|
415
|
+
* Emit events to the project list room.
|
|
416
|
+
*/
|
|
417
|
+
static broadcastRunToProjectListRoom() {
|
|
418
|
+
Run_1.RunDao.getAllProjects()
|
|
419
|
+
.then((projects) => {
|
|
420
|
+
// Push projects to the client
|
|
421
|
+
this.io
|
|
422
|
+
.of('/client')
|
|
423
|
+
.to(trpc_1.SocketRoomName.ProjectListRoom)
|
|
424
|
+
.emit(trpc_1.SocketEvents.server.pushProjects, projects);
|
|
425
|
+
})
|
|
426
|
+
.catch((error) => {
|
|
427
|
+
console.error(error);
|
|
428
|
+
throw error;
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
static broadcastRunToProjectRoom(project) {
|
|
432
|
+
Run_1.RunDao.getAllProjectRuns(project)
|
|
433
|
+
.then((runs) => {
|
|
434
|
+
// Push runs to the client
|
|
435
|
+
this.io
|
|
436
|
+
.of('/client')
|
|
437
|
+
.to(`project-${project}`)
|
|
438
|
+
.emit(trpc_1.SocketEvents.server.pushRunsData, runs);
|
|
439
|
+
})
|
|
440
|
+
.catch((error) => {
|
|
441
|
+
console.error(error);
|
|
442
|
+
throw error;
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
/*
|
|
446
|
+
* Emit events to the run room.
|
|
447
|
+
*/
|
|
448
|
+
static broadcastMessageToRunRoom(runId, reply) {
|
|
449
|
+
this.io
|
|
450
|
+
.of('/client')
|
|
451
|
+
.to(`run-${runId}`)
|
|
452
|
+
.emit(trpc_1.SocketEvents.server.pushMessages, [reply]);
|
|
453
|
+
}
|
|
454
|
+
static broadcastSpanDataToRunRoom(spanDataArray) {
|
|
455
|
+
// Group spans by runId
|
|
456
|
+
const groupedSpans = {};
|
|
457
|
+
spanDataArray.forEach((spanData) => {
|
|
458
|
+
if (!groupedSpans[spanData.conversationId]) {
|
|
459
|
+
groupedSpans[spanData.conversationId] = [];
|
|
460
|
+
}
|
|
461
|
+
groupedSpans[spanData.conversationId].push(spanData);
|
|
462
|
+
});
|
|
463
|
+
// Send grouped spans to each run room
|
|
464
|
+
for (const runId in groupedSpans) {
|
|
465
|
+
this.io
|
|
466
|
+
.of('/client')
|
|
467
|
+
.to(`run-${runId}`)
|
|
468
|
+
.emit(trpc_1.SocketEvents.server.pushSpans, groupedSpans[runId]);
|
|
469
|
+
this.broadcastModelInvocationDataToRunRoom(runId);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
static broadcastInputRequestToRunRoom(runId, inputRequest) {
|
|
473
|
+
this.io
|
|
474
|
+
.of('/client')
|
|
475
|
+
.to(`run-${runId}`)
|
|
476
|
+
.emit(trpc_1.SocketEvents.server.pushInputRequests, [inputRequest]);
|
|
477
|
+
}
|
|
478
|
+
static broadcastRunDataToRunRoom(runId, runData) {
|
|
479
|
+
this.io
|
|
480
|
+
.of('/client')
|
|
481
|
+
.to(`run-${runId}`)
|
|
482
|
+
.emit(trpc_1.SocketEvents.server.pushRunData, runData);
|
|
483
|
+
}
|
|
484
|
+
static clearInputRequestsToRunRoom(runId) {
|
|
485
|
+
this.io
|
|
486
|
+
.of('/client')
|
|
487
|
+
.to(`run-${runId}`)
|
|
488
|
+
.emit(trpc_1.SocketEvents.server.clearInputRequests);
|
|
489
|
+
}
|
|
490
|
+
static changeRunStatusAndTriggerEvents(runId, newStatus) {
|
|
491
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
492
|
+
const runExist = yield Run_1.RunDao.doesRunExist(runId);
|
|
493
|
+
if (runExist) {
|
|
494
|
+
// Update the run status to "finished"
|
|
495
|
+
yield Run_1.RunDao.changeRunStatus(runId, newStatus);
|
|
496
|
+
// Find the project by runId
|
|
497
|
+
const res = yield Run_1.RunDao.getRunData(runId);
|
|
498
|
+
const project = res.runData.project;
|
|
499
|
+
// Broadcast projects to all clients in the ProjectList room
|
|
500
|
+
this.broadcastRunToProjectListRoom();
|
|
501
|
+
// Broadcast runs to all clients in the project room
|
|
502
|
+
this.broadcastRunToProjectRoom(project);
|
|
503
|
+
// Broadcast run data to all clients in the run room
|
|
504
|
+
this.broadcastRunDataToRunRoom(runId, res.runData);
|
|
505
|
+
if (newStatus === messageForm_1.Status.DONE) {
|
|
506
|
+
// Clear the input requests for all clients in the run room
|
|
507
|
+
this.clearInputRequestsToRunRoom(runId);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
static broadcastOverviewDataToDashboardRoom() {
|
|
513
|
+
this._getOverViewData()
|
|
514
|
+
.then((res) => {
|
|
515
|
+
this.io
|
|
516
|
+
.of('/client')
|
|
517
|
+
.to(trpc_1.SocketRoomName.OverviewRoom)
|
|
518
|
+
.emit(trpc_1.SocketEvents.server.pushOverviewData, res);
|
|
519
|
+
})
|
|
520
|
+
.catch((error) => {
|
|
521
|
+
console.error(error);
|
|
522
|
+
throw error;
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
static _getOverViewData() {
|
|
526
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
527
|
+
const res1 = yield Run_1.RunDao.getRunViewData();
|
|
528
|
+
const res2 = yield Trace_1.SpanDao.getModelInvocationViewData();
|
|
529
|
+
return Object.assign(Object.assign({}, res1), res2);
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
static broadcastModelInvocationDataToRunRoom(runId) {
|
|
533
|
+
Trace_1.SpanDao.getModelInvocationData(runId).then((data) => {
|
|
534
|
+
this.io
|
|
535
|
+
.of('/client')
|
|
536
|
+
.to(`run-${runId}`)
|
|
537
|
+
.emit(trpc_1.SocketEvents.server.pushModelInvocationData, data);
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
static broadcastReplyToFridayAppRoom(reply, override = false) {
|
|
541
|
+
this.io
|
|
542
|
+
.of('/client')
|
|
543
|
+
.to(trpc_1.SocketRoomName.FridayAppRoom)
|
|
544
|
+
.emit(trpc_1.SocketEvents.server.pushReplies, reply === undefined ? [] : [reply], false, override);
|
|
545
|
+
}
|
|
546
|
+
static broadcastReplyingStateToFridayAppRoom() {
|
|
547
|
+
const replyingManager = ReplyingStateManager_1.ReplyingStateManager.getInstance();
|
|
548
|
+
this.io
|
|
549
|
+
.of('/client')
|
|
550
|
+
.to(trpc_1.SocketRoomName.FridayAppRoom)
|
|
551
|
+
.emit(trpc_1.SocketEvents.server.pushReplyingState, replyingManager.getReplyingState());
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
exports.SocketManager = SocketManager;
|
|
555
|
+
function runPythonScript(pythonEnv, commands) {
|
|
556
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
557
|
+
return new Promise((resolve) => {
|
|
558
|
+
console.debug('The execute command:', pythonEnv, commands);
|
|
559
|
+
const pythonProcess = (0, child_process_1.spawn)(pythonEnv, commands, {
|
|
560
|
+
env: Object.assign(Object.assign({}, process.env), { FORCE_COLOR: '0' }),
|
|
561
|
+
});
|
|
562
|
+
let output = '';
|
|
563
|
+
let errorOutput = '';
|
|
564
|
+
// 收集标准输出
|
|
565
|
+
pythonProcess.stdout.on('data', (data) => {
|
|
566
|
+
output += data.toString();
|
|
567
|
+
});
|
|
568
|
+
// 收集错误输出
|
|
569
|
+
pythonProcess.stderr.on('data', (data) => {
|
|
570
|
+
errorOutput += data.toString();
|
|
571
|
+
});
|
|
572
|
+
// 进程结束时处理结果
|
|
573
|
+
pythonProcess.on('close', (code) => {
|
|
574
|
+
if (code === 0) {
|
|
575
|
+
resolve({
|
|
576
|
+
success: true,
|
|
577
|
+
data: output.trim(),
|
|
578
|
+
});
|
|
579
|
+
}
|
|
580
|
+
else {
|
|
581
|
+
resolve({
|
|
582
|
+
success: false,
|
|
583
|
+
error: errorOutput.trim(),
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
});
|
|
589
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./processUtils"), exports);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.checkProcessByPid = void 0;
|
|
16
|
+
const find_process_1 = __importDefault(require("find-process"));
|
|
17
|
+
const checkProcessByPid = (pid) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
try {
|
|
19
|
+
const processes = yield (0, find_process_1.default)('pid', pid);
|
|
20
|
+
return processes.length > 0;
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
console.error('Error checking process:', err);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
exports.checkProcessByPid = checkProcessByPid;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DEFAULT_CONFIG = exports.APP_INFO = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const getVersion = () => {
|
|
10
|
+
let version = '';
|
|
11
|
+
try {
|
|
12
|
+
const packageJsonPath = path_1.default.join(__dirname, '../../../../', 'package.json');
|
|
13
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf8'));
|
|
14
|
+
version = packageJson.version || '';
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console.warn('Failed to read version from package.json:', error);
|
|
18
|
+
}
|
|
19
|
+
return version;
|
|
20
|
+
};
|
|
21
|
+
exports.APP_INFO = {
|
|
22
|
+
name: 'AgentScope-Studio',
|
|
23
|
+
version: getVersion(),
|
|
24
|
+
description: 'Your app description',
|
|
25
|
+
};
|
|
26
|
+
exports.DEFAULT_CONFIG = {
|
|
27
|
+
server: {
|
|
28
|
+
port: 3000,
|
|
29
|
+
otelGrpcPort: 4317,
|
|
30
|
+
host: 'localhost',
|
|
31
|
+
},
|
|
32
|
+
};
|