@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,168 @@
|
|
|
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.FridayConfigManager = void 0;
|
|
16
|
+
const server_1 = require("./server");
|
|
17
|
+
const fs_1 = __importDefault(require("fs"));
|
|
18
|
+
const path_1 = __importDefault(require("path"));
|
|
19
|
+
const socket_1 = require("../../../server/src/trpc/socket");
|
|
20
|
+
const child_process_1 = require("child_process");
|
|
21
|
+
class FridayConfigManager {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.config = null;
|
|
24
|
+
this.loadFridayConfig();
|
|
25
|
+
}
|
|
26
|
+
static getInstance() {
|
|
27
|
+
if (!FridayConfigManager.instance) {
|
|
28
|
+
FridayConfigManager.instance = new FridayConfigManager();
|
|
29
|
+
}
|
|
30
|
+
return FridayConfigManager.instance;
|
|
31
|
+
}
|
|
32
|
+
loadFridayConfig() {
|
|
33
|
+
const fridayConfigPath = server_1.PATHS.getFridayConfigPath();
|
|
34
|
+
try {
|
|
35
|
+
if (fs_1.default.existsSync(fridayConfigPath)) {
|
|
36
|
+
const fridayConfig = JSON.parse(fs_1.default.readFileSync(fridayConfigPath, 'utf8'));
|
|
37
|
+
this.config = Object.assign(Object.assign({}, this.config), fridayConfig);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error('Failed to load friday config:', error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
getConfig() {
|
|
45
|
+
return this.config;
|
|
46
|
+
}
|
|
47
|
+
saveConfig() {
|
|
48
|
+
try {
|
|
49
|
+
const fridayConfigPath = server_1.PATHS.getFridayConfigPath();
|
|
50
|
+
fs_1.default.mkdirSync(path_1.default.dirname(fridayConfigPath), { recursive: true });
|
|
51
|
+
console.debug('Saving friday config to:', fridayConfigPath, this.config);
|
|
52
|
+
fs_1.default.writeFileSync(fridayConfigPath, JSON.stringify(this.config, null, 2));
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.error('Failed to save friday config:', error);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
updateConfig(newConfig) {
|
|
59
|
+
this.config = newConfig;
|
|
60
|
+
this.saveConfig();
|
|
61
|
+
}
|
|
62
|
+
verifyPythonEnv(pythonEnv) {
|
|
63
|
+
const pythonPath = path_1.default.normalize(pythonEnv);
|
|
64
|
+
// Check if the file exists
|
|
65
|
+
if (!fs_1.default.existsSync(pythonPath)) {
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
message: 'The Python environment path does not exist.',
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// Check if the path is a file
|
|
72
|
+
try {
|
|
73
|
+
const stats = fs_1.default.statSync(pythonPath);
|
|
74
|
+
if (!stats.isFile()) {
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
message: 'Not a valid Python environment path.',
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
return {
|
|
83
|
+
success: false,
|
|
84
|
+
message: `Error accessing Python environment path: ${error}`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Check if the python version is 3.10 or higher
|
|
88
|
+
try {
|
|
89
|
+
const cmd = process.platform === 'win32'
|
|
90
|
+
? `"${pythonPath}" --version`
|
|
91
|
+
: `${pythonPath} --version`;
|
|
92
|
+
const versionOutput = (0, child_process_1.execSync)(cmd, { encoding: 'utf8' })
|
|
93
|
+
.toString()
|
|
94
|
+
.trim();
|
|
95
|
+
const versionMatch = versionOutput.match(/Python (\d+)\.(\d+)/);
|
|
96
|
+
if (!versionMatch) {
|
|
97
|
+
return {
|
|
98
|
+
success: false,
|
|
99
|
+
message: 'Failed to get Python version.',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
const major = parseInt(versionMatch[1], 10);
|
|
103
|
+
const minor = parseInt(versionMatch[2], 10);
|
|
104
|
+
if (major < 3 || (major === 3 && minor < 10)) {
|
|
105
|
+
return {
|
|
106
|
+
success: false,
|
|
107
|
+
message: 'Python version must be 3.10 or higher.',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
success: true,
|
|
112
|
+
message: 'Configuration is valid.',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (_a) {
|
|
116
|
+
return {
|
|
117
|
+
success: false,
|
|
118
|
+
message: 'Not a valid Python environment.',
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
installRequirements(pythonEnv) {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
const res = yield (0, socket_1.runPythonScript)(pythonEnv, [
|
|
125
|
+
'-m',
|
|
126
|
+
'pip',
|
|
127
|
+
'install',
|
|
128
|
+
'agentscope[full]',
|
|
129
|
+
]);
|
|
130
|
+
console.debug('Install requirements:', res);
|
|
131
|
+
if (res.success) {
|
|
132
|
+
return {
|
|
133
|
+
success: true,
|
|
134
|
+
message: 'Successfully installed requirements',
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
return {
|
|
139
|
+
success: false,
|
|
140
|
+
message: `Failed to install requirements: ${res.error}`,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
getDefaultMainScriptPath() {
|
|
146
|
+
if (process.env.NODE_ENV === 'production') {
|
|
147
|
+
// In production, the structure is:
|
|
148
|
+
// dist/
|
|
149
|
+
// server/
|
|
150
|
+
// src/
|
|
151
|
+
// index.js (current __dirname)
|
|
152
|
+
// app/
|
|
153
|
+
// friday/
|
|
154
|
+
// main.py
|
|
155
|
+
return path_1.default.join(__dirname, '../../../app/friday/main.py');
|
|
156
|
+
}
|
|
157
|
+
// In development, the structure is:
|
|
158
|
+
// packages/
|
|
159
|
+
// server/
|
|
160
|
+
// src/
|
|
161
|
+
// index.ts (current __dirname)
|
|
162
|
+
// app/
|
|
163
|
+
// friday/
|
|
164
|
+
// main.py
|
|
165
|
+
return path_1.default.join(__dirname, '../../../app/friday/main.py');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.FridayConfigManager = FridayConfigManager;
|
|
@@ -0,0 +1,19 @@
|
|
|
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("./common"), exports);
|
|
18
|
+
__exportStar(require("./server"), exports);
|
|
19
|
+
__exportStar(require("./client"), exports);
|
|
@@ -0,0 +1,104 @@
|
|
|
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.ConfigManager = exports.ServerConfig = exports.PATHS = exports.ENV = void 0;
|
|
16
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
17
|
+
const fs_1 = __importDefault(require("fs"));
|
|
18
|
+
const path_1 = __importDefault(require("path"));
|
|
19
|
+
const common_1 = require("./common");
|
|
20
|
+
// Load environment variables
|
|
21
|
+
dotenv_1.default.config();
|
|
22
|
+
exports.ENV = {
|
|
23
|
+
isDevelopment: process.env.NODE_ENV === 'development',
|
|
24
|
+
isProduction: process.env.NODE_ENV === 'production',
|
|
25
|
+
platform: process.platform,
|
|
26
|
+
homeDir: process.env.HOME || process.env.USERPROFILE || '',
|
|
27
|
+
};
|
|
28
|
+
exports.PATHS = {
|
|
29
|
+
getAppDataDir: () => {
|
|
30
|
+
switch (process.platform) {
|
|
31
|
+
case 'win32':
|
|
32
|
+
return path_1.default.join(process.env.APPDATA || '', common_1.APP_INFO.name);
|
|
33
|
+
case 'linux':
|
|
34
|
+
return path_1.default.join(process.env.HOME || '', common_1.APP_INFO.name);
|
|
35
|
+
case 'darwin':
|
|
36
|
+
return path_1.default.join(process.env.HOME || '', 'Library', 'Application Support', common_1.APP_INFO.name);
|
|
37
|
+
default:
|
|
38
|
+
throw new Error(`Unsupported platform: ${process.platform}`);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
getLogsDir: () => path_1.default.join(exports.PATHS.getAppDataDir(), 'logs'),
|
|
42
|
+
getUserConfigPath: () => path_1.default.join(exports.PATHS.getAppDataDir(), 'config.json'),
|
|
43
|
+
getFridayDir: () => path_1.default.join(exports.PATHS.getAppDataDir(), 'Friday'),
|
|
44
|
+
getFridayConfigPath: () => path_1.default.join(exports.PATHS.getAppDataDir(), 'Friday', 'config.json'),
|
|
45
|
+
getFridayDialogHistoryPath: () => path_1.default.join(exports.PATHS.getAppDataDir(), 'Friday', 'session.json'),
|
|
46
|
+
};
|
|
47
|
+
exports.ServerConfig = {
|
|
48
|
+
port: parseInt(process.env.PORT || common_1.DEFAULT_CONFIG.server.port.toString()),
|
|
49
|
+
otelGrpcPort: parseInt(process.env.OTEL_GRPC_PORT ||
|
|
50
|
+
common_1.DEFAULT_CONFIG.server.otelGrpcPort.toString()),
|
|
51
|
+
database: {
|
|
52
|
+
type: 'sqlite',
|
|
53
|
+
database: path_1.default.join(exports.PATHS.getAppDataDir(), 'database.sqlite'),
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
// 服务器端的配置管理
|
|
57
|
+
class ConfigManager {
|
|
58
|
+
constructor() {
|
|
59
|
+
this.config = exports.ServerConfig;
|
|
60
|
+
this.loadUserConfig();
|
|
61
|
+
}
|
|
62
|
+
static getInstance() {
|
|
63
|
+
if (!ConfigManager.instance) {
|
|
64
|
+
ConfigManager.instance = new ConfigManager();
|
|
65
|
+
}
|
|
66
|
+
return ConfigManager.instance;
|
|
67
|
+
}
|
|
68
|
+
loadUserConfig() {
|
|
69
|
+
const userConfigPath = exports.PATHS.getUserConfigPath();
|
|
70
|
+
try {
|
|
71
|
+
if (fs_1.default.existsSync(userConfigPath)) {
|
|
72
|
+
const userConfig = JSON.parse(fs_1.default.readFileSync(userConfigPath, 'utf8'));
|
|
73
|
+
this.config = Object.assign(Object.assign({}, this.config), userConfig);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error('Failed to load user config:', error);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
getConfig() {
|
|
81
|
+
return this.config;
|
|
82
|
+
}
|
|
83
|
+
saveConfig() {
|
|
84
|
+
try {
|
|
85
|
+
const userConfigPath = exports.PATHS.getUserConfigPath();
|
|
86
|
+
fs_1.default.mkdirSync(path_1.default.dirname(userConfigPath), { recursive: true });
|
|
87
|
+
fs_1.default.writeFileSync(userConfigPath, JSON.stringify(this.config, null, 2));
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error('Failed to save config:', error);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
setPort(port) {
|
|
94
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
+
this.config = Object.assign(Object.assign({}, this.config), { port: port });
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
setOtelGrpcPort(otelGrpcPort) {
|
|
99
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
this.config = Object.assign(Object.assign({}, this.config), { otelGrpcPort: otelGrpcPort });
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.ConfigManager = ConfigManager;
|
|
@@ -0,0 +1,18 @@
|
|
|
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("./config"), exports);
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
@@ -0,0 +1,20 @@
|
|
|
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("./messageForm"), exports);
|
|
18
|
+
__exportStar(require("./trace"), exports);
|
|
19
|
+
__exportStar(require("./trpc"), exports);
|
|
20
|
+
__exportStar(require("./usage"), exports);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Status = exports.SourceType = exports.BlockType = void 0;
|
|
4
|
+
var BlockType;
|
|
5
|
+
(function (BlockType) {
|
|
6
|
+
BlockType["TEXT"] = "text";
|
|
7
|
+
BlockType["THINKING"] = "thinking";
|
|
8
|
+
BlockType["IMAGE"] = "image";
|
|
9
|
+
BlockType["AUDIO"] = "audio";
|
|
10
|
+
BlockType["VIDEO"] = "video";
|
|
11
|
+
BlockType["TOOL_USE"] = "tool_use";
|
|
12
|
+
BlockType["TOOL_RESULT"] = "tool_result";
|
|
13
|
+
})(BlockType || (exports.BlockType = BlockType = {}));
|
|
14
|
+
var SourceType;
|
|
15
|
+
(function (SourceType) {
|
|
16
|
+
SourceType["BASE64"] = "base64";
|
|
17
|
+
SourceType["URL"] = "url";
|
|
18
|
+
})(SourceType || (exports.SourceType = SourceType = {}));
|
|
19
|
+
var Status;
|
|
20
|
+
(function (Status) {
|
|
21
|
+
Status["RUNNING"] = "running";
|
|
22
|
+
Status["PENDING"] = "pending";
|
|
23
|
+
Status["DONE"] = "done";
|
|
24
|
+
Status["UNKNOWN"] = "unknown";
|
|
25
|
+
})(Status || (exports.Status = Status = {}));
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OldSpanKind = exports.TraceStatus = void 0;
|
|
4
|
+
// Trace status enum
|
|
5
|
+
var TraceStatus;
|
|
6
|
+
(function (TraceStatus) {
|
|
7
|
+
TraceStatus["OK"] = "OK";
|
|
8
|
+
TraceStatus["ERROR"] = "ERROR";
|
|
9
|
+
TraceStatus["UNSET"] = "UNSET";
|
|
10
|
+
})(TraceStatus || (exports.TraceStatus = TraceStatus = {}));
|
|
11
|
+
// SpanData interface for SpanTable storage
|
|
12
|
+
var OldSpanKind;
|
|
13
|
+
(function (OldSpanKind) {
|
|
14
|
+
OldSpanKind["AGENT"] = "AGENT";
|
|
15
|
+
OldSpanKind["TOOL"] = "TOOL";
|
|
16
|
+
OldSpanKind["LLM"] = "LLM";
|
|
17
|
+
OldSpanKind["EMBEDDING"] = "EMBEDDING";
|
|
18
|
+
OldSpanKind["FORMATTER"] = "FORMATTER";
|
|
19
|
+
OldSpanKind["COMMON"] = "COMMON";
|
|
20
|
+
})(OldSpanKind || (exports.OldSpanKind = OldSpanKind = {}));
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetTraceStatisticParamsSchema = exports.GetTraceParamsSchema = exports.GetTraceListParamsSchema = exports.SocketEvents = exports.SocketRoomName = exports.TableRequestParamsSchema = exports.RegisterReplyParamsSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.RegisterReplyParamsSchema = zod_1.z.object({
|
|
6
|
+
runId: zod_1.z.string(),
|
|
7
|
+
replyId: zod_1.z.string(),
|
|
8
|
+
replyRole: zod_1.z.string(),
|
|
9
|
+
replyName: zod_1.z.string(),
|
|
10
|
+
createdAt: zod_1.z.string(),
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* Zod schema for table request parameters.
|
|
14
|
+
* This schema validates the structure of the request parameters used for table-related operations.
|
|
15
|
+
*/
|
|
16
|
+
exports.TableRequestParamsSchema = zod_1.z.object({
|
|
17
|
+
pagination: zod_1.z.object({
|
|
18
|
+
page: zod_1.z.number().int().min(1),
|
|
19
|
+
pageSize: zod_1.z.number().int().min(10),
|
|
20
|
+
}),
|
|
21
|
+
sort: zod_1.z
|
|
22
|
+
.object({
|
|
23
|
+
field: zod_1.z.string(),
|
|
24
|
+
order: zod_1.z.enum(['asc', 'desc']),
|
|
25
|
+
})
|
|
26
|
+
.optional(),
|
|
27
|
+
filters: zod_1.z.record(zod_1.z.unknown()).optional(),
|
|
28
|
+
});
|
|
29
|
+
exports.SocketRoomName = {
|
|
30
|
+
ProjectListRoom: 'ProjectListRoom',
|
|
31
|
+
OverviewRoom: 'OverviewRoom',
|
|
32
|
+
FridayAppRoom: 'FridayAppRoom',
|
|
33
|
+
};
|
|
34
|
+
exports.SocketEvents = {
|
|
35
|
+
python: {
|
|
36
|
+
requestUserInput: 'requestUserInput',
|
|
37
|
+
},
|
|
38
|
+
server: {
|
|
39
|
+
// To client:
|
|
40
|
+
// dashboard room
|
|
41
|
+
pushOverviewData: 'pushOverviewData',
|
|
42
|
+
// projectList room
|
|
43
|
+
pushProjects: 'pushProjects',
|
|
44
|
+
// project room
|
|
45
|
+
pushRunsData: 'pushRunsData',
|
|
46
|
+
// run room
|
|
47
|
+
pushRunData: 'pushRunData',
|
|
48
|
+
pushInputRequests: 'pushInputRequests',
|
|
49
|
+
clearInputRequests: 'clearInputRequests',
|
|
50
|
+
pushMessages: 'pushMessages',
|
|
51
|
+
pushSpans: 'pushSpans',
|
|
52
|
+
pushModelInvocationData: 'pushModelInvocationData',
|
|
53
|
+
// Friday app room
|
|
54
|
+
pushReplies: 'pushReplies',
|
|
55
|
+
pushReplyingState: 'pushReplyingState',
|
|
56
|
+
interruptReply: 'interrupt',
|
|
57
|
+
// To python:
|
|
58
|
+
// send the user input
|
|
59
|
+
forwardUserInput: 'forwardUserInput',
|
|
60
|
+
},
|
|
61
|
+
client: {
|
|
62
|
+
cleanHistoryOfFridayApp: 'cleanHistoryOfFridayApp',
|
|
63
|
+
joinOverviewRoom: 'joinOverviewRoom',
|
|
64
|
+
joinProjectListRoom: 'joinProjectListRoom',
|
|
65
|
+
joinProjectRoom: 'joinProjectRoom',
|
|
66
|
+
joinRunRoom: 'joinRunRoom',
|
|
67
|
+
getFridayConfig: 'getFridayConfig',
|
|
68
|
+
saveFridayConfig: 'saveFridayConfig',
|
|
69
|
+
installFridayRequirements: 'installFridayRequirements',
|
|
70
|
+
joinFridayAppRoom: 'joinFridayAppRoom',
|
|
71
|
+
verifyFridayConfig: 'verifyFridayConfig',
|
|
72
|
+
leaveRoom: 'leaveRoom',
|
|
73
|
+
sendUserInputToServer: 'sendUserInputToServer',
|
|
74
|
+
sendUserInputToFridayApp: 'sendUserInputToFridayApp',
|
|
75
|
+
interruptReplyOfFridayApp: 'interruptReplyOfFridayApp',
|
|
76
|
+
deleteProjects: 'deleteProjects',
|
|
77
|
+
deleteRuns: 'deleteRuns',
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
// TracePage trpc schemas
|
|
81
|
+
exports.GetTraceListParamsSchema = zod_1.z.object({
|
|
82
|
+
serviceName: zod_1.z.string().optional(),
|
|
83
|
+
operationName: zod_1.z.string().optional(),
|
|
84
|
+
status: zod_1.z.number().optional(),
|
|
85
|
+
startTime: zod_1.z.string().optional(),
|
|
86
|
+
endTime: zod_1.z.string().optional(),
|
|
87
|
+
limit: zod_1.z.number().optional(),
|
|
88
|
+
offset: zod_1.z.number().optional(),
|
|
89
|
+
});
|
|
90
|
+
exports.GetTraceParamsSchema = zod_1.z.object({
|
|
91
|
+
traceId: zod_1.z.string(),
|
|
92
|
+
});
|
|
93
|
+
exports.GetTraceStatisticParamsSchema = zod_1.z.object({
|
|
94
|
+
startTime: zod_1.z.string().optional(),
|
|
95
|
+
endTime: zod_1.z.string().optional(),
|
|
96
|
+
serviceName: zod_1.z.string().optional(),
|
|
97
|
+
operationName: zod_1.z.string().optional(),
|
|
98
|
+
});
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Display a startup banner for AgentScope Studio
|
|
4
|
+
* Inspired by Phoenix's banner style
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.displayBanner = displayBanner;
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const figlet_1 = __importDefault(require("figlet"));
|
|
13
|
+
function displayBanner(appName, version, port, otelGrpcPort, databasePath, mode) {
|
|
14
|
+
// Create welcome message with border
|
|
15
|
+
const welcomeMessage = `* Welcome to ${chalk_1.default.bold('AgentScope-Studio')} v${version}! *`;
|
|
16
|
+
// Strip ANSI codes to calculate the actual display length
|
|
17
|
+
const displayLength =
|
|
18
|
+
// eslint-disable-next-line no-control-regex
|
|
19
|
+
welcomeMessage.replace(/\u001b\[[0-9;]*m/g, '').length;
|
|
20
|
+
const borderLength = displayLength + 4;
|
|
21
|
+
const topBorder = '┌' + '─'.repeat(borderLength - 2) + '┐';
|
|
22
|
+
const bottomBorder = '└' + '─'.repeat(borderLength - 2) + '┘';
|
|
23
|
+
const welcomeBanner = `${topBorder}\n│ ${welcomeMessage} │\n${bottomBorder}`;
|
|
24
|
+
// Generate ASCII art using figlet
|
|
25
|
+
let asciiText;
|
|
26
|
+
try {
|
|
27
|
+
asciiText = figlet_1.default.textSync(appName, {
|
|
28
|
+
font: 'ANSI Shadow',
|
|
29
|
+
horizontalLayout: 'default',
|
|
30
|
+
verticalLayout: 'default',
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch (_a) {
|
|
34
|
+
asciiText = appName;
|
|
35
|
+
}
|
|
36
|
+
if (!asciiText || asciiText.trim().length === 0) {
|
|
37
|
+
asciiText = appName;
|
|
38
|
+
}
|
|
39
|
+
// Wrap ASCII art in a border
|
|
40
|
+
const lines = asciiText
|
|
41
|
+
.split('\n')
|
|
42
|
+
.filter((line) => line.trim().length > 0);
|
|
43
|
+
if (lines.length === 0) {
|
|
44
|
+
lines.push(appName);
|
|
45
|
+
}
|
|
46
|
+
const appNameBanner = [...lines].join('\n');
|
|
47
|
+
// Community and documentation links with colors
|
|
48
|
+
const modeColor = mode === 'production' ? chalk_1.default.green : chalk_1.default.yellow;
|
|
49
|
+
const links = `
|
|
50
|
+
${chalk_1.default.cyan('🌍 Join our Community 🌍')}
|
|
51
|
+
${chalk_1.default.blue('https://github.com/agentscope-ai')}
|
|
52
|
+
|
|
53
|
+
${chalk_1.default.yellow('⭐ Leave us a Star ⭐')}
|
|
54
|
+
${chalk_1.default.blue('https://github.com/agentscope-ai/agentscope-studio')}
|
|
55
|
+
|
|
56
|
+
${chalk_1.default.magenta('📚 Documentation 📚')}
|
|
57
|
+
${chalk_1.default.blue('https://github.com/agentscope-ai/agentscope-studio')}
|
|
58
|
+
|
|
59
|
+
${chalk_1.default.green('🚀 AgentScope Studio Server 🚀')}
|
|
60
|
+
${chalk_1.default.bold('Studio UI:')} ${chalk_1.default.cyan(`http://localhost:${port}`)}
|
|
61
|
+
${chalk_1.default.bold('Traces Endpoint:')}
|
|
62
|
+
${chalk_1.default.bold(' - HTTP:')} ${chalk_1.default.cyan(`http://localhost:${port}/v1/traces`)}
|
|
63
|
+
${chalk_1.default.bold(' - gRPC:')} ${chalk_1.default.cyan(`http://localhost:${otelGrpcPort}`)}
|
|
64
|
+
${chalk_1.default.bold('Mode:')} ${modeColor(mode)}
|
|
65
|
+
${chalk_1.default.bold('Storage:')} ${chalk_1.default.gray(databasePath)}
|
|
66
|
+
`;
|
|
67
|
+
// Display banner with a separator line
|
|
68
|
+
console.log('');
|
|
69
|
+
console.log(chalk_1.default.cyan(welcomeBanner));
|
|
70
|
+
console.log('');
|
|
71
|
+
console.log(chalk_1.default.cyan(appNameBanner));
|
|
72
|
+
console.log(links);
|
|
73
|
+
console.log('');
|
|
74
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.objectUtils = void 0;
|
|
4
|
+
exports.getNestedValue = getNestedValue;
|
|
5
|
+
exports.unflattenObject = unflattenObject;
|
|
6
|
+
exports.flattenObject = flattenObject;
|
|
7
|
+
exports.parseByMimeType = parseByMimeType;
|
|
8
|
+
function getNestedValue(obj, path, separator = '.') {
|
|
9
|
+
if (!obj || typeof obj !== 'object') {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
const keys = Array.isArray(path)
|
|
13
|
+
? path.flatMap((k) => k.split(separator))
|
|
14
|
+
: path.split(separator);
|
|
15
|
+
return keys.reduce((acc, key) => {
|
|
16
|
+
if (acc && typeof acc === 'object' && key in acc) {
|
|
17
|
+
return acc[key];
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}, obj);
|
|
21
|
+
}
|
|
22
|
+
function unflattenObject(flat) {
|
|
23
|
+
const result = {};
|
|
24
|
+
for (const [key, value] of Object.entries(flat)) {
|
|
25
|
+
const parts = key.split('.');
|
|
26
|
+
let current = result;
|
|
27
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
28
|
+
if (!current[parts[i]] || typeof current[parts[i]] !== 'object') {
|
|
29
|
+
current[parts[i]] = {};
|
|
30
|
+
}
|
|
31
|
+
current = current[parts[i]];
|
|
32
|
+
}
|
|
33
|
+
current[parts[parts.length - 1]] = value;
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
function flattenObject(obj, prefix = '') {
|
|
38
|
+
const result = {};
|
|
39
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
40
|
+
const newKey = prefix ? `${prefix}.${key}` : key;
|
|
41
|
+
if (value &&
|
|
42
|
+
typeof value === 'object' &&
|
|
43
|
+
!Array.isArray(value) &&
|
|
44
|
+
value !== null) {
|
|
45
|
+
Object.assign(result, flattenObject(value, newKey));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
result[newKey] = value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
function parseByMimeType(value, mime_type) {
|
|
54
|
+
try {
|
|
55
|
+
switch (mime_type) {
|
|
56
|
+
case 'application/json': {
|
|
57
|
+
const jsonData = JSON.parse(value);
|
|
58
|
+
return jsonData;
|
|
59
|
+
}
|
|
60
|
+
default:
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (_a) {
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.objectUtils = {
|
|
69
|
+
getNestedValue,
|
|
70
|
+
flattenObject,
|
|
71
|
+
unflattenObject,
|
|
72
|
+
parseByMimeType,
|
|
73
|
+
};
|
|
74
|
+
exports.default = exports.objectUtils;
|
|
@@ -0,0 +1,30 @@
|
|
|
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.promptUser = promptUser;
|
|
16
|
+
const readline_1 = __importDefault(require("readline"));
|
|
17
|
+
function promptUser(question) {
|
|
18
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
19
|
+
const rl = readline_1.default.createInterface({
|
|
20
|
+
input: process.stdin,
|
|
21
|
+
output: process.stdout,
|
|
22
|
+
});
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
rl.question(question, (answer) => {
|
|
25
|
+
rl.close();
|
|
26
|
+
resolve(answer.toLowerCase() === 'y');
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|