@becrafter/prompt-manager 0.1.18 → 0.1.20

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 (63) hide show
  1. package/env.example +1 -1
  2. package/package.json +19 -7
  3. package/packages/server/server.js +2 -1
  4. package/packages/server/services/TerminalService.js +247 -13
  5. package/packages/server/toolm/tool-sync.service.js +8 -0
  6. package/packages/server/utils/config.js +1 -1
  7. package/packages/web/css/{main.3b61356b384d2f11f47f.css → main.196f434e6a88cd448158.css} +10 -0
  8. package/packages/web/index.html +1 -1
  9. package/packages/web/{main.77c2c4b553ca3fac223b.js → main.b427a9e6f77a32a2f87f.js} +2 -2
  10. package/app/desktop/assets/app.1.png +0 -0
  11. package/app/desktop/assets/app.png +0 -0
  12. package/app/desktop/assets/icons/icon.icns +0 -0
  13. package/app/desktop/assets/icons/icon.ico +0 -0
  14. package/app/desktop/assets/icons/icon.png +0 -0
  15. package/app/desktop/assets/icons/tray.png +0 -0
  16. package/app/desktop/assets/templates/about.html +0 -147
  17. package/app/desktop/assets/tray.1.png +0 -0
  18. package/app/desktop/assets/tray.png +0 -0
  19. package/app/desktop/docs/ASSETS_PLANNING.md +0 -351
  20. package/app/desktop/docs/REFACTORING_SUMMARY.md +0 -205
  21. package/app/desktop/main.js +0 -340
  22. package/app/desktop/package-lock.json +0 -6912
  23. package/app/desktop/package.json +0 -119
  24. package/app/desktop/preload.js +0 -7
  25. package/app/desktop/src/core/error-handler.js +0 -108
  26. package/app/desktop/src/core/event-emitter.js +0 -84
  27. package/app/desktop/src/core/logger.js +0 -130
  28. package/app/desktop/src/core/state-manager.js +0 -125
  29. package/app/desktop/src/services/module-loader.js +0 -330
  30. package/app/desktop/src/services/runtime-manager.js +0 -398
  31. package/app/desktop/src/services/service-manager.js +0 -210
  32. package/app/desktop/src/services/update-manager.js +0 -267
  33. package/app/desktop/src/ui/about-dialog-manager.js +0 -208
  34. package/app/desktop/src/ui/admin-window-manager.js +0 -757
  35. package/app/desktop/src/ui/splash-manager.js +0 -253
  36. package/app/desktop/src/ui/tray-manager.js +0 -186
  37. package/app/desktop/src/utils/icon-manager.js +0 -133
  38. package/app/desktop/src/utils/path-utils.js +0 -58
  39. package/app/desktop/src/utils/resource-paths.js +0 -49
  40. package/app/desktop/src/utils/resource-sync.js +0 -260
  41. package/app/desktop/src/utils/runtime-sync.js +0 -241
  42. package/app/desktop/src/utils/self-check.js +0 -288
  43. package/app/desktop/src/utils/template-renderer.js +0 -284
  44. package/app/desktop/src/utils/version-utils.js +0 -59
  45. package/packages/server/.eslintrc.js +0 -70
  46. package/packages/server/.husky/pre-commit +0 -8
  47. package/packages/server/.husky/pre-push +0 -8
  48. package/packages/server/.prettierrc +0 -14
  49. package/packages/server/dev-server.js +0 -90
  50. package/packages/server/jsdoc.conf.json +0 -39
  51. package/packages/server/package.json +0 -85
  52. package/packages/server/playwright.config.js +0 -62
  53. package/packages/server/scripts/generate-docs.js +0 -300
  54. package/packages/server/tests/e2e/terminal-e2e.test.js +0 -315
  55. package/packages/server/tests/integration/terminal-websocket.test.js +0 -372
  56. package/packages/server/tests/integration/tools.test.js +0 -264
  57. package/packages/server/tests/setup.js +0 -45
  58. package/packages/server/tests/unit/TerminalService.test.js +0 -410
  59. package/packages/server/tests/unit/WebSocketService.test.js +0 -403
  60. package/packages/server/tests/unit/core.test.js +0 -94
  61. package/packages/server/typedoc.json +0 -52
  62. package/packages/server/vitest.config.js +0 -74
  63. /package/packages/web/{main.77c2c4b553ca3fac223b.js.LICENSE.txt → main.b427a9e6f77a32a2f87f.js.LICENSE.txt} +0 -0
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env sh
2
- . "$(dirname -- "$0")/_/husky.sh"
3
-
4
- # 运行完整测试套件
5
- npm run test:coverage
6
-
7
- # 检查构建
8
- npm run build
@@ -1,14 +0,0 @@
1
- {
2
- "semi": true,
3
- "trailingComma": "none",
4
- "singleQuote": true,
5
- "printWidth": 120,
6
- "tabWidth": 2,
7
- "useTabs": false,
8
- "bracketSpacing": true,
9
- "arrowParens": "avoid",
10
- "endOfLine": "lf",
11
- "quoteProps": "as-needed",
12
- "bracketSameLine": false,
13
- "proseWrap": "preserve"
14
- }
@@ -1,90 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * 开发服务器启动脚本
5
- *
6
- * 这个脚本用于启动开发服务器,具有以下特性:
7
- * 1. 禁用 Node.js 模块缓存,确保每次修改都能立即生效
8
- * 2. 使用 --watch 标志自动重启
9
- * 3. 提供更详细的日志输出
10
- * 4. 支持环境变量配置
11
- */
12
-
13
- import { spawn } from 'child_process';
14
- import { fileURLToPath } from 'url';
15
- import { dirname, join } from 'path';
16
-
17
- const __filename = fileURLToPath(import.meta.url);
18
- const __dirname = dirname(__filename);
19
-
20
- // 开发服务器配置
21
- const devConfig = {
22
- // 使用 --watch 标志自动重启
23
- watch: true,
24
- // 禁用缓存的环境变量
25
- env: {
26
- ...process.env,
27
- NODE_ENV: 'development',
28
- // 禁用 V8 缓存
29
- NODE_OPTIONS: '--no-warnings',
30
- },
31
- // 日志级别
32
- logLevel: 'debug',
33
- };
34
-
35
- // 启动开发服务器
36
- function startDevServer() {
37
- console.log('🚀 启动开发服务器...');
38
- console.log('📝 工作目录:', __dirname);
39
- console.log('🔄 模块缓存: 已禁用');
40
- console.log('👀 文件监听: 已启用');
41
- console.log('');
42
-
43
- const args = ['--watch', 'server.js'];
44
-
45
- // 如果有额外的参数,传递给服务器
46
- const serverArgs = process.argv.slice(2);
47
- if (serverArgs.length > 0) {
48
- args.push(...serverArgs);
49
- }
50
-
51
- const serverProcess = spawn('node', args, {
52
- cwd: __dirname,
53
- stdio: 'inherit',
54
- env: devConfig.env,
55
- });
56
-
57
- serverProcess.on('error', (error) => {
58
- console.error('❌ 启动开发服务器失败:', error);
59
- process.exit(1);
60
- });
61
-
62
- serverProcess.on('exit', (code, signal) => {
63
- if (code !== 0) {
64
- console.error(`❌ 开发服务器异常退出 (code: ${code}, signal: ${signal})`);
65
- process.exit(code || 1);
66
- }
67
- });
68
-
69
- // 优雅关闭
70
- process.on('SIGINT', () => {
71
- console.log('\n🛑 正在关闭开发服务器...');
72
- serverProcess.kill('SIGTERM');
73
- setTimeout(() => {
74
- serverProcess.kill('SIGKILL');
75
- process.exit(0);
76
- }, 5000);
77
- });
78
-
79
- process.on('SIGTERM', () => {
80
- console.log('\n🛑 正在关闭开发服务器...');
81
- serverProcess.kill('SIGTERM');
82
- setTimeout(() => {
83
- serverProcess.kill('SIGKILL');
84
- process.exit(0);
85
- }, 5000);
86
- });
87
- }
88
-
89
- // 启动服务器
90
- startDevServer();
@@ -1,39 +0,0 @@
1
- {
2
- "source": {
3
- "include": [
4
- "./services/",
5
- "./utils/",
6
- "./mcp/",
7
- "./api/",
8
- "./toolm/",
9
- "./index.js"
10
- ],
11
- "exclude": [
12
- "node_modules/",
13
- "dist/",
14
- "coverage/",
15
- "tests/",
16
- "test-results/"
17
- ],
18
- "includePattern": ".+\\.js(doc)?$"
19
- },
20
- "opts": {
21
- "destination": "./docs/jsdoc/",
22
- "recurse": true
23
- },
24
- "plugins": [
25
- "plugins/markdown",
26
- "plugins/summarize"
27
- ],
28
- "templates": {
29
- "cleverLinks": false,
30
- "monospaceLinks": false,
31
- "default": {
32
- "outputSourceFiles": true
33
- }
34
- },
35
- "markdown": {
36
- "parser": "gfm",
37
- "hardwrap": true
38
- }
39
- }
@@ -1,85 +0,0 @@
1
- {
2
- "name": "@becrafter/prompt-manager-core",
3
- "version": "0.0.24",
4
- "description": "Core library for managing prompts with MCP protocol",
5
- "main": "index.js",
6
- "module": "index.js",
7
- "type": "module",
8
- "scripts": {
9
- "build": "esbuild ./index.js --bundle --outdir=dist --format=esm --platform=node --target=node18",
10
- "dev": "node --watch ./server.js",
11
- "dev:clean": "node ./dev-server.js",
12
- "fix:pty": "npm rebuild node-pty",
13
- "postinstall": "npm run fix:pty",
14
- "start": "node ./server.js",
15
- "example": "node --experimental-specifier-resolution=node ./example.js",
16
- "test": "vitest run tests/unit",
17
- "test:watch": "vitest tests/unit",
18
- "test:coverage": "vitest --coverage tests/unit",
19
- "test:integration": "vitest run tests/integration",
20
- "lint": "eslint . --ext .js,.mjs --fix",
21
- "format": "prettier --write .",
22
- "lint:check": "eslint . --ext .js,.mjs",
23
- "format:check": "prettier --check .",
24
- "docs": "jsdoc -c jsdoc.conf.json"
25
- },
26
- "lint-staged": {
27
- "*.js": [
28
- "eslint --fix",
29
- "prettier --write"
30
- ],
31
- "*.{json,md,yml,yaml}": [
32
- "prettier --write"
33
- ]
34
- },
35
- "keywords": [
36
- "mcp",
37
- "prompt",
38
- "prompt-mcp",
39
- "prompt-manager",
40
- "library"
41
- ],
42
- "author": "BeCrafter",
43
- "license": "MIT",
44
- "dependencies": {
45
- "@electron/asar": "^4.0.1",
46
- "@modelcontextprotocol/sdk": "^1.20.2",
47
- "@npmcli/arborist": "^9.0.0",
48
- "adm-zip": "^0.5.16",
49
- "cors": "^2.8.5",
50
- "dotenv": "^17.2.3",
51
- "express": "^5.1.0",
52
- "fs-extra": "^11.2.0",
53
- "http-proxy-middleware": "^3.0.5",
54
- "js-yaml": "^4.1.0",
55
- "multer": "^2.0.2",
56
- "node-pty": "^1.0.0",
57
- "ws": "^8.18.0",
58
- "yaml": "^2.4.1",
59
- "zod": "^3.23.8"
60
- },
61
- "devDependencies": {
62
- "@electron/rebuild": "^4.0.2",
63
- "@playwright/test": "^1.48.0",
64
- "@vitest/ui": "^1.6.0",
65
- "esbuild": "^0.27.0",
66
- "eslint": "^8.57.1",
67
- "husky": "^9.1.6",
68
- "jsdoc": "^4.0.3",
69
- "lint-staged": "^15.2.10",
70
- "playwright": "^1.48.0",
71
- "prettier": "^3.3.3",
72
- "vitest": "^1.6.0"
73
- },
74
- "publishConfig": {
75
- "access": "public"
76
- },
77
- "repository": {
78
- "type": "git",
79
- "url": "git+https://github.com/BeCrafter/prompt-manager.git"
80
- },
81
- "homepage": "https://github.com/BeCrafter/prompt-manager#readme",
82
- "bugs": {
83
- "url": "https://github.com/BeCrafter/prompt-manager/issues"
84
- }
85
- }
@@ -1,62 +0,0 @@
1
- /**
2
- * Playwright 配置文件
3
- */
4
-
5
- import { defineConfig, devices } from '@playwright/test';
6
-
7
- export default defineConfig({
8
- testDir: './tests/e2e',
9
-
10
- // 全局配置
11
- fullyParallel: true,
12
- forbidOnly: !!process.env.CI,
13
- retries: process.env.CI ? 2 : 0,
14
- workers: process.env.CI ? 1 : undefined,
15
-
16
- // 测试报告
17
- reporter: [
18
- ['html'],
19
- ['json', { outputFile: 'test-results/e2e-results.json' }],
20
- ['junit', { outputFile: 'test-results/e2e-results.xml' }]
21
- ],
22
-
23
- // 全局设置
24
- use: {
25
- baseURL: 'http://localhost:5621',
26
- trace: 'on-first-retry',
27
- screenshot: 'only-on-failure',
28
- video: 'retain-on-failure',
29
- },
30
-
31
- // 项目配置
32
- projects: [
33
- {
34
- name: 'chromium',
35
- use: { ...devices['Desktop Chrome'] },
36
- },
37
- {
38
- name: 'firefox',
39
- use: { ...devices['Desktop Firefox'] },
40
- },
41
- {
42
- name: 'webkit',
43
- use: { ...devices['Desktop Safari'] },
44
- },
45
- {
46
- name: 'Mobile Chrome',
47
- use: { ...devices['Pixel 5'] },
48
- },
49
- {
50
- name: 'Mobile Safari',
51
- use: { ...devices['iPhone 12'] },
52
- },
53
- ],
54
-
55
- // 开发服务器
56
- webServer: {
57
- command: 'npm start',
58
- url: 'http://localhost:5621',
59
- reuseExistingServer: !process.env.CI,
60
- timeout: 120000,
61
- },
62
- });
@@ -1,300 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * 文档生成脚本
5
- *
6
- * 自动生成JSDoc和TypeDoc文档,并创建索引页面
7
- */
8
-
9
- import fs from 'fs-extra';
10
- import path from 'path';
11
- import { fileURLToPath } from 'url';
12
- import { execSync } from 'child_process';
13
-
14
- const __filename = fileURLToPath(import.meta.url);
15
- const __dirname = path.dirname(__filename);
16
- const projectRoot = path.join(__dirname, '..');
17
-
18
- // 颜色输出
19
- const colors = {
20
- reset: '\x1b[0m',
21
- bright: '\x1b[1m',
22
- green: '\x1b[32m',
23
- red: '\x1b[31m',
24
- yellow: '\x1b[33m',
25
- blue: '\x1b[34m',
26
- cyan: '\x1b[36m'
27
- };
28
-
29
- function log(msg, color = 'reset') {
30
- console.log(`${colors[color]}${msg}${colors.reset}`);
31
- }
32
-
33
- function success(msg) {
34
- log(`✓ ${msg}`, 'green');
35
- }
36
-
37
- function error(msg) {
38
- log(`✗ ${msg}`, 'red');
39
- }
40
-
41
- function warning(msg) {
42
- log(`⚠ ${msg}`, 'yellow');
43
- }
44
-
45
- function info(msg) {
46
- log(`ℹ ${msg}`, 'cyan');
47
- }
48
-
49
- /**
50
- * 清理文档目录
51
- */
52
- async function cleanDocsDir() {
53
- const docsDir = path.join(projectRoot, 'docs');
54
-
55
- try {
56
- await fs.remove(docsDir);
57
- await fs.ensureDir(docsDir);
58
- success('文档目录已清理');
59
- } catch (err) {
60
- error(`清理文档目录失败: ${err.message}`);
61
- throw err;
62
- }
63
- }
64
-
65
- /**
66
- * 生成JSDoc文档
67
- */
68
- async function generateJSDoc() {
69
- try {
70
- info('生成JSDoc文档...');
71
-
72
- const jsdocConfig = path.join(projectRoot, 'jsdoc.conf.json');
73
- const command = `npx jsdoc -c ${jsdocConfig}`;
74
-
75
- execSync(command, {
76
- cwd: projectRoot,
77
- stdio: 'inherit'
78
- });
79
-
80
- success('JSDoc文档生成完成');
81
- } catch (err) {
82
- error(`JSDoc文档生成失败: ${err.message}`);
83
- throw err;
84
- }
85
- }
86
-
87
- /**
88
- * 生成API文档索引
89
- */
90
- async function generateAPIIndex() {
91
- try {
92
- info('生成API文档索引...');
93
-
94
- const indexPath = path.join(projectRoot, 'docs', 'index.md');
95
- const content = `# Prompt Manager API 文档
96
-
97
- 本文档包含 Prompt Manager 项目的完整 API 参考。
98
-
99
- ## 文档类型
100
-
101
- ### 📚 JSDoc 文档
102
- 基于代码注释生成的详细 API 文档,包含所有类、方法和参数说明。
103
-
104
- [查看 JSDoc 文档](./jsdoc/)
105
-
106
- ## 主要模块
107
-
108
- ### 服务层
109
- - **TerminalService** - 终端会话管理
110
- - **WebSocketService** - WebSocket 连接管理
111
- - **ToolMService** - 工具系统管理
112
-
113
- ### 协议层
114
- - **MCP Server** - Model Context Protocol 服务器
115
- - **API Routes** - RESTful API 路由
116
-
117
- ### 工具层
118
- - **Tool Loader** - 工具加载器
119
- - **Tool Manager** - 工具管理器
120
-
121
- ## 开发指南
122
-
123
- ### 添加新 API
124
- 1. 在代码中添加 JSDoc 注释
125
- 2. 运行 \`npm run docs\` 生成文档
126
- 3. 提交更新后的文档
127
-
128
- ### 文档格式
129
- - 使用 JSDoc 标准注释格式
130
- - 包含参数类型、返回值说明
131
- - 提供使用示例
132
-
133
- ## 版本信息
134
-
135
- - 生成时间: ${new Date().toISOString()}
136
- - Node.js 版本: ${process.version}
137
- - 平台: ${process.platform}
138
-
139
- ---
140
-
141
- *此文档由自动化脚本生成,请勿手动编辑。*
142
- `;
143
-
144
- await fs.writeFile(indexPath, content);
145
- success('API文档索引生成完成');
146
- } catch (err) {
147
- error(`API文档索引生成失败: ${err.message}`);
148
- throw err;
149
- }
150
- }
151
-
152
- /**
153
- * 生成变更日志
154
- */
155
- async function generateChangelog() {
156
- try {
157
- info('生成变更日志...');
158
-
159
- const changelogPath = path.join(projectRoot, 'docs', 'CHANGELOG.md');
160
-
161
- // 尝试从git获取最近的提交
162
- let recentCommits = '';
163
- try {
164
- const gitLog = execSync('git log --oneline -10', {
165
- cwd: projectRoot,
166
- encoding: 'utf8'
167
- });
168
- recentCommits = gitLog;
169
- } catch (err) {
170
- warning('无法获取Git提交历史');
171
- }
172
-
173
- const content = `# 变更日志
174
-
175
- ## 最近更新
176
-
177
- ${recentCommits ? '### 最近提交\n\n```\n' + recentCommits + '\n```\n\n' : ''}
178
-
179
- ## 版本历史
180
-
181
- ### v0.0.24 - 当前版本
182
- - ✨ 新增终端增强功能
183
- - 🔧 集成 WebSocket + PTY + xterm.js
184
- - 🧪 添加完整的测试套件
185
- - 📚 完善文档和代码质量工具
186
-
187
- ### v0.0.23
188
- - 🐛 修复终端菜单点击无响应问题
189
- - 🔧 优化webpack配置
190
-
191
- ### v0.0.22
192
- - ✨ 添加交互式终端功能
193
- - 🎨 改进用户界面
194
-
195
- ---
196
-
197
- *注意: 此为自动生成的变更日志,详细信息请查看Git提交历史。*
198
- `;
199
-
200
- await fs.writeFile(changelogPath, content);
201
- success('变更日志生成完成');
202
- } catch (err) {
203
- error(`变更日志生成失败: ${err.message}`);
204
- throw err;
205
- }
206
- }
207
-
208
- /**
209
- * 生成项目统计信息
210
- */
211
- async function generateStats() {
212
- try {
213
- info('生成项目统计信息...');
214
-
215
- const statsPath = path.join(projectRoot, 'docs', 'stats.json');
216
-
217
- // 收集统计信息
218
- const stats = {
219
- generatedAt: new Date().toISOString(),
220
- version: require(path.join(projectRoot, 'package.json')).version,
221
- nodeVersion: process.version,
222
- platform: process.platform,
223
- files: {
224
- javascript: 0,
225
- test: 0,
226
- config: 0,
227
- total: 0
228
- },
229
- lines: {
230
- code: 0,
231
- comment: 0,
232
- total: 0
233
- }
234
- };
235
-
236
- // 统计文件数量
237
- const countFiles = async (dir, pattern) => {
238
- try {
239
- const files = await fs.readdir(dir, { withFileTypes: true });
240
- let count = 0;
241
-
242
- for (const file of files) {
243
- const fullPath = path.join(dir, file.name);
244
- if (file.isDirectory()) {
245
- count += await countFiles(fullPath, pattern);
246
- } else if (file.name.match(pattern)) {
247
- count++;
248
- }
249
- }
250
- return count;
251
- } catch (err) {
252
- return 0;
253
- }
254
- };
255
-
256
- stats.files.javascript = await countFiles(projectRoot, /\.js$/);
257
- stats.files.test = await countFiles(path.join(projectRoot, 'tests'), /\.test\.js$/);
258
- stats.files.config = await countFiles(projectRoot, /\.(json|yml|yaml|jsdoc|md)$/);
259
- stats.files.total = stats.files.javascript + stats.files.test + stats.files.config;
260
-
261
- await fs.writeFile(statsPath, JSON.stringify(stats, null, 2));
262
- success('项目统计信息生成完成');
263
- } catch (err) {
264
- warning(`项目统计信息生成失败: ${err.message}`);
265
- }
266
- }
267
-
268
- /**
269
- * 主函数
270
- */
271
- async function main() {
272
- log('\n╔════════════════════════════════════════════════════════╗', 'cyan');
273
- log('║ Prompt Manager 文档生成工具 ║', 'cyan');
274
- log('╚════════════════════════════════════════════════════════╝', 'cyan');
275
-
276
- try {
277
- await cleanDocsDir();
278
- await generateJSDoc();
279
- await generateAPIIndex();
280
- await generateChangelog();
281
- await generateStats();
282
-
283
- log('\n╔════════════════════════════════════════════════════════╗', 'green');
284
- log('║ 🎉 生成完成! ║', 'green');
285
- log('╚════════════════════════════════════════════════════════╝', 'green');
286
-
287
- log('\n📚 文档位置:', 'blue');
288
- log(` JSDoc: ${path.join(projectRoot, 'docs', 'jsdoc', 'index.html')}`, 'blue');
289
- log(` TypeDoc: ${path.join(projectRoot, 'docs', 'typedoc', 'index.html')}`, 'blue');
290
- log(` 索引: ${path.join(projectRoot, 'docs', 'index.md')}`, 'blue');
291
-
292
- } catch (error) {
293
- log('\n❌ 文档生成失败:', 'red');
294
- log(error.message, 'red');
295
- process.exit(1);
296
- }
297
- }
298
-
299
- // 运行脚本
300
- main();