@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.
Files changed (235) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +158 -0
  3. package/bin/cli.js +7 -0
  4. package/dist/app/friday/args.py +65 -0
  5. package/dist/app/friday/hook.py +52 -0
  6. package/dist/app/friday/main.py +164 -0
  7. package/dist/app/friday/model.py +124 -0
  8. package/dist/app/friday/tool/agentscope_tools.py +159 -0
  9. package/dist/app/friday/tool/utils.py +161 -0
  10. package/dist/app/friday/utils/common.py +28 -0
  11. package/dist/app/friday/utils/connect.py +63 -0
  12. package/dist/app/friday/utils/constants.py +8 -0
  13. package/dist/app/requirements.txt +1 -0
  14. package/dist/public/assets/001-aaron-Bb4ZO8rt.js +1 -0
  15. package/dist/public/assets/001-little girl-CnyQBZ0k.js +1 -0
  16. package/dist/public/assets/001-man-16-BO6NLPD_.js +1 -0
  17. package/dist/public/assets/002-avatar-C3FPnFjo.js +1 -0
  18. package/dist/public/assets/002-man-15-DfiiX2xR.js +1 -0
  19. package/dist/public/assets/002-old man-D4L-hA2l.js +1 -0
  20. package/dist/public/assets/003-avatar-UMXD80xE.js +1 -0
  21. package/dist/public/assets/003-cat-Cgyj1qJU.js +1 -0
  22. package/dist/public/assets/003-woman-20-Dy0WdjIG.js +1 -0
  23. package/dist/public/assets/004-avatar-D6Aw4tpO.js +1 -0
  24. package/dist/public/assets/004-dog-DUajs1ZO.js +1 -0
  25. package/dist/public/assets/004-woman-19-D5go5okE.js +1 -0
  26. package/dist/public/assets/005-avatar-NNQ3sWMe.js +1 -0
  27. package/dist/public/assets/005-child-SN-FoL0R.js +1 -0
  28. package/dist/public/assets/005-woman-18-AedSRg8a.js +1 -0
  29. package/dist/public/assets/006-avatar-FD8IUNL_.js +1 -0
  30. package/dist/public/assets/006-grandpa-T90IdpYr.js +1 -0
  31. package/dist/public/assets/006-man-14-DuMA-IZ-.js +1 -0
  32. package/dist/public/assets/007-avatar-eSQZtpkg.js +1 -0
  33. package/dist/public/assets/007-grandson-DV7UWhrR.js +1 -0
  34. package/dist/public/assets/007-man-13-owFTee2M.js +1 -0
  35. package/dist/public/assets/008-avatar-B9Rcm8D2.js +1 -0
  36. package/dist/public/assets/008-grandmother-1-BrQNVu9I.js +1 -0
  37. package/dist/public/assets/008-teenager-ClYxB7sG.js +1 -0
  38. package/dist/public/assets/009-avatar-DNSTEyOZ.js +1 -0
  39. package/dist/public/assets/009-grandfather-1-CPOn7LN0.js +1 -0
  40. package/dist/public/assets/009-grandmother-BAW_dEQC.js +1 -0
  41. package/dist/public/assets/010-avatar-CRXWH-A0.js +1 -0
  42. package/dist/public/assets/010-boy-1-C21LhAEr.js +1 -0
  43. package/dist/public/assets/011-woman-17-CI0UoPMR.js +1 -0
  44. package/dist/public/assets/012-avatar-BO5j-gGw.js +1 -0
  45. package/dist/public/assets/012-boy-T-hL8z9d.js +1 -0
  46. package/dist/public/assets/012-niece-M-tDMWMW.js +1 -0
  47. package/dist/public/assets/013-avatar-BTyOVKVo.js +1 -0
  48. package/dist/public/assets/013-granddaughter-D4VonRL-.js +1 -0
  49. package/dist/public/assets/013-woman-16-CuR7_ppw.js +1 -0
  50. package/dist/public/assets/014-avatar-DAW_Hvos.js +1 -0
  51. package/dist/public/assets/014-man-k8AXOF1Q.js +1 -0
  52. package/dist/public/assets/014-nurse-DnVigtmM.js +1 -0
  53. package/dist/public/assets/015-avatar-AxHR3j7h.js +1 -0
  54. package/dist/public/assets/015-woman-15-rDPwBxxc.js +1 -0
  55. package/dist/public/assets/015-woman-B71QRPrr.js +1 -0
  56. package/dist/public/assets/016-avatar-BVbMUisT.js +1 -0
  57. package/dist/public/assets/016-boy-BV_jzAu3.js +1 -0
  58. package/dist/public/assets/016-woman-14-D08zoPt9.js +1 -0
  59. package/dist/public/assets/017-gaming-BEpEpa1H.js +1 -0
  60. package/dist/public/assets/017-superpower-9xQAqiKN.js +1 -0
  61. package/dist/public/assets/017-uncle-EB1lmqAo.js +1 -0
  62. package/dist/public/assets/017-woman-13-BFsTAnGR.js +1 -0
  63. package/dist/public/assets/018-avatar-CnCLJXqW.js +1 -0
  64. package/dist/public/assets/018-young-QpIX6g3z.js +1 -0
  65. package/dist/public/assets/019-gaming-Dz5tR0Te.js +1 -0
  66. package/dist/public/assets/019-man-12-DiRb1dri.js +1 -0
  67. package/dist/public/assets/019-nephew-tXAgA9cr.js +1 -0
  68. package/dist/public/assets/020-avatar-Djtnu7jj.js +1 -0
  69. package/dist/public/assets/020-man-11-BNIZQyX4.js +1 -0
  70. package/dist/public/assets/020-young woman-BzklF8tq.js +1 -0
  71. package/dist/public/assets/021-aunt-CX9ikaTy.js +1 -0
  72. package/dist/public/assets/021-avatar-DP2sODK2.js +1 -0
  73. package/dist/public/assets/021-superhero-CIWREXp0.js +1 -0
  74. package/dist/public/assets/021-wizard-Dc9X50m_.js +1 -0
  75. package/dist/public/assets/021-woman-12-n9ipJK5z.js +1 -0
  76. package/dist/public/assets/022-father-B1_-ZTn1.js +1 -0
  77. package/dist/public/assets/022-woman-11-BUCsm06E.js +1 -0
  78. package/dist/public/assets/023-avatar-TeJ6vGqs.js +1 -0
  79. package/dist/public/assets/023-ghost-BYvGsa7H.js +1 -0
  80. package/dist/public/assets/023-man-10-Dfii-GE1.js +1 -0
  81. package/dist/public/assets/023-uncle-DoAMe1Iy.js +1 -0
  82. package/dist/public/assets/024-gaming-5ovd4aeT.js +1 -0
  83. package/dist/public/assets/024-man-9-CEenp_2W.js +1 -0
  84. package/dist/public/assets/024-prince-Fx3eCiNX.js +1 -0
  85. package/dist/public/assets/024-uncle-B6tqhqxU.js +1 -0
  86. package/dist/public/assets/025-gaming-CdlTp3Ub.js +1 -0
  87. package/dist/public/assets/025-man-8-Cfp6jNt4.js +1 -0
  88. package/dist/public/assets/025-man-BxhR-XTO.js +1 -0
  89. package/dist/public/assets/025-princess-Di5TdSnG.js +1 -0
  90. package/dist/public/assets/026-avatar-DojOPRVd.js +1 -0
  91. package/dist/public/assets/026-dad-CHaoMWM5.js +1 -0
  92. package/dist/public/assets/026-owl-Dl-UtZM8.js +1 -0
  93. package/dist/public/assets/026-woman-10-CywXJiaj.js +1 -0
  94. package/dist/public/assets/027-avatar-CrEyLmOb.js +1 -0
  95. package/dist/public/assets/027-girl-Box_GaMO.js +1 -0
  96. package/dist/public/assets/028-gaming-CmOZ2uGp.js +1 -0
  97. package/dist/public/assets/028-mom-tEacX7K4.js +1 -0
  98. package/dist/public/assets/028-woman-9-C1oq4sFk.js +1 -0
  99. package/dist/public/assets/029-boy-CVg6oMuZ.js +1 -0
  100. package/dist/public/assets/029-man-7-C4eeEeTQ.js +1 -0
  101. package/dist/public/assets/030-elf-C8vikAvx.js +1 -0
  102. package/dist/public/assets/030-gaming-ufCRMN7S.js +1 -0
  103. package/dist/public/assets/030-granddaughter-DVCp3D8k.js +1 -0
  104. package/dist/public/assets/030-woman-8-Bv_tRQci.js +1 -0
  105. package/dist/public/assets/031-avatar-D0u5HVaC.js +1 -0
  106. package/dist/public/assets/031-grandpa-jKj5oB8I.js +1 -0
  107. package/dist/public/assets/031-superhero-DfSkK-j2.js +1 -0
  108. package/dist/public/assets/031-woman-7-DJHfCbTS.js +1 -0
  109. package/dist/public/assets/032-avatar-BvY6LKIZ.js +1 -0
  110. package/dist/public/assets/032-grandson-DIjRxDr-.js +1 -0
  111. package/dist/public/assets/032-man-6-CU7pJmmt.js +1 -0
  112. package/dist/public/assets/033-avatar-Dviobgw8.js +1 -0
  113. package/dist/public/assets/033-elf-CTAEJgfN.js +1 -0
  114. package/dist/public/assets/033-grandfather-BCXPgoJj.js +1 -0
  115. package/dist/public/assets/033-man-5-wgMylvNO.js +1 -0
  116. package/dist/public/assets/034-avatar-BqtUHT3_.js +1 -0
  117. package/dist/public/assets/034-little girl-CrgnV25d.js +1 -0
  118. package/dist/public/assets/034-man-4-DJdzfcSi.js +1 -0
  119. package/dist/public/assets/035-gaming-Bp8xnJp_.js +1 -0
  120. package/dist/public/assets/035-mother-Ccg5FDO8.js +1 -0
  121. package/dist/public/assets/036-avatar-q6pZKQVf.js +1 -0
  122. package/dist/public/assets/036-father-DzpzeKJJ.js +1 -0
  123. package/dist/public/assets/036-goblin-vDsj4aP0.js +1 -0
  124. package/dist/public/assets/036-grandmother-BI_Fl_aR.js +1 -0
  125. package/dist/public/assets/037-avatar-CmfvVc7v.js +1 -0
  126. package/dist/public/assets/037-grandfather-Dtp4XH-s.js +1 -0
  127. package/dist/public/assets/037-sister-BQv83Uhf.js +1 -0
  128. package/dist/public/assets/038-gaming-UtXFtv5k.js +1 -0
  129. package/dist/public/assets/038-girl-Cwg5Rv36.js +1 -0
  130. package/dist/public/assets/038-gnome-HbogTmVa.js +1 -0
  131. package/dist/public/assets/038-woman-6-B7jMwsP0.js +1 -0
  132. package/dist/public/assets/039-avatar-Bb3kVg4l.js +1 -0
  133. package/dist/public/assets/039-man-3-BSjLnoLV.js +1 -0
  134. package/dist/public/assets/039-student-CIi32WG9.js +1 -0
  135. package/dist/public/assets/040-aunt-B5XQH_sJ.js +1 -0
  136. package/dist/public/assets/040-gaming-CzTjib4v.js +1 -0
  137. package/dist/public/assets/040-vampire-UFzaHu5c.js +1 -0
  138. package/dist/public/assets/040-woman-5-Byal-gfX.js +1 -0
  139. package/dist/public/assets/041-avatar-CPQN2PvT.js +1 -0
  140. package/dist/public/assets/041-little boy-DUZFMrmJ.js +1 -0
  141. package/dist/public/assets/041-queen-CqFzW3uO.js +1 -0
  142. package/dist/public/assets/041-woman-4-CKi_Q-ns.js +1 -0
  143. package/dist/public/assets/042-avatar-BatY-WQG.js +1 -0
  144. package/dist/public/assets/042-cyclops-DAxxBVqG.js +1 -0
  145. package/dist/public/assets/042-man-omzAnpu1.js +1 -0
  146. package/dist/public/assets/042-woman-3-2Ki1Qz3j.js +1 -0
  147. package/dist/public/assets/043-avatar-DN026abg.js +1 -0
  148. package/dist/public/assets/043-child-D8_xXkcm.js +1 -0
  149. package/dist/public/assets/043-genie-DK78Ykl6.js +1 -0
  150. package/dist/public/assets/043-woman-2-DMnB0A-0.js +1 -0
  151. package/dist/public/assets/044-avatar-Bz2FAXUw.js +1 -0
  152. package/dist/public/assets/044-avatar-DzDIyuj0.js +1 -0
  153. package/dist/public/assets/044-fairy-BT73odE0.js +1 -0
  154. package/dist/public/assets/044-sister-CtNPPHh-.js +1 -0
  155. package/dist/public/assets/045-avatar-DgiFAlxj.js +1 -0
  156. package/dist/public/assets/045-man-2-BZPavI2b.js +1 -0
  157. package/dist/public/assets/045-young-B39gytpm.js +1 -0
  158. package/dist/public/assets/046-avatar-ClHeZPOV.js +1 -0
  159. package/dist/public/assets/046-brother-BSvJBKnA.js +1 -0
  160. package/dist/public/assets/046-witch-CVjM2-iJ.js +1 -0
  161. package/dist/public/assets/046-woman-1-CHWuzLfU.js +1 -0
  162. package/dist/public/assets/047-avatar-DM01i1ZC.js +1 -0
  163. package/dist/public/assets/047-king-knA4oWNa.js +1 -0
  164. package/dist/public/assets/047-man-1-DRWdGzL5.js +1 -0
  165. package/dist/public/assets/048-father-B0wiM2h6.js +1 -0
  166. package/dist/public/assets/048-gaming-D7s83-h3.js +1 -0
  167. package/dist/public/assets/048-girl-CxGcfLgU.js +1 -0
  168. package/dist/public/assets/049-avatar-BfGDVwlO.js +1 -0
  169. package/dist/public/assets/049-little boy-Bu5mmsUf.js +1 -0
  170. package/dist/public/assets/049-man-B3xcAso3.js +1 -0
  171. package/dist/public/assets/050-avatar-itJOA0dd.js +1 -0
  172. package/dist/public/assets/050-boy-DEIcVyYT.js +1 -0
  173. package/dist/public/assets/050-knight-KRUkfXDS.js +1 -0
  174. package/dist/public/assets/051-avatar-fISL-mLU.js +1 -0
  175. package/dist/public/assets/052-avatar-BYrM0aPD.js +1 -0
  176. package/dist/public/assets/053-avatar-B-rnufvm.js +1 -0
  177. package/dist/public/assets/054-avatar-B7rwS7Qv.js +1 -0
  178. package/dist/public/assets/055-gaming-DqUOmMvT.js +1 -0
  179. package/dist/public/assets/056-avatar-D1lb7KL9.js +1 -0
  180. package/dist/public/assets/057-avatar-Df7NRaJW.js +1 -0
  181. package/dist/public/assets/058-avatar-C8zso2zk.js +1 -0
  182. package/dist/public/assets/059-avatar-zEhHpOcr.js +1 -0
  183. package/dist/public/assets/060-avatar-DkNabW8M.js +1 -0
  184. package/dist/public/assets/index-CWvY7i3l.css +1 -0
  185. package/dist/public/assets/index-Zxr-JuKD.js +820 -0
  186. package/dist/public/index.html +14 -0
  187. package/dist/public/logo.svg +42 -0
  188. package/dist/server/src/dao/FridayAppMessage.js +103 -0
  189. package/dist/server/src/dao/InputRequest.js +99 -0
  190. package/dist/server/src/dao/Message.js +42 -0
  191. package/dist/server/src/dao/Reply.js +96 -0
  192. package/dist/server/src/dao/Run.js +395 -0
  193. package/dist/server/src/dao/Trace.js +643 -0
  194. package/dist/server/src/database.js +54 -0
  195. package/dist/server/src/index.js +211 -0
  196. package/dist/server/src/migrations/1730000000000-AddMessageReplyForeignKey.js +216 -0
  197. package/dist/server/src/migrations/1740000000000-MigrateSpanTable.js +638 -0
  198. package/dist/server/src/migrations/index.js +19 -0
  199. package/dist/server/src/models/FridayApp.js +69 -0
  200. package/dist/server/src/models/FridayAppView.js +94 -0
  201. package/dist/server/src/models/InputRequest.js +41 -0
  202. package/dist/server/src/models/Message.js +39 -0
  203. package/dist/server/src/models/ModelInvocationView.js +127 -0
  204. package/dist/server/src/models/Reply.js +50 -0
  205. package/dist/server/src/models/Run.js +63 -0
  206. package/dist/server/src/models/RunView.js +111 -0
  207. package/dist/server/src/models/Trace.js +154 -0
  208. package/dist/server/src/otel/grpc-server.js +154 -0
  209. package/dist/server/src/otel/opentelemetry/proto/collector/trace/v1/trace_service.js +309 -0
  210. package/dist/server/src/otel/opentelemetry/proto/common/v1/common.js +747 -0
  211. package/dist/server/src/otel/opentelemetry/proto/resource/v1/resource.js +170 -0
  212. package/dist/server/src/otel/opentelemetry/proto/trace/v1/trace.js +1134 -0
  213. package/dist/server/src/otel/processor.js +395 -0
  214. package/dist/server/src/otel/router.js +128 -0
  215. package/dist/server/src/services/ReplyingStateManager.js +21 -0
  216. package/dist/server/src/trpc/router.js +385 -0
  217. package/dist/server/src/trpc/socket.js +589 -0
  218. package/dist/server/src/utils/index.js +17 -0
  219. package/dist/server/src/utils/processUtils.js +27 -0
  220. package/dist/shared/src/config/client.js +6 -0
  221. package/dist/shared/src/config/common.js +32 -0
  222. package/dist/shared/src/config/friday.js +168 -0
  223. package/dist/shared/src/config/index.js +19 -0
  224. package/dist/shared/src/config/server.js +104 -0
  225. package/dist/shared/src/index.js +18 -0
  226. package/dist/shared/src/types/index.js +20 -0
  227. package/dist/shared/src/types/messageForm.js +25 -0
  228. package/dist/shared/src/types/trace.js +20 -0
  229. package/dist/shared/src/types/trpc.js +98 -0
  230. package/dist/shared/src/types/usage.js +7 -0
  231. package/dist/shared/src/utils/banner.js +74 -0
  232. package/dist/shared/src/utils/objectUtils.js +74 -0
  233. package/dist/shared/src/utils/terminal.js +30 -0
  234. package/dist/shared/src/utils/timeUtils.js +86 -0
  235. 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,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UsageType = void 0;
4
+ var UsageType;
5
+ (function (UsageType) {
6
+ UsageType["CHAT"] = "token";
7
+ })(UsageType || (exports.UsageType = UsageType = {}));
@@ -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
+ }