@becrafter/prompt-manager 0.1.2 → 0.1.8
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/README.md +304 -121
- package/app/cli/commands/start.js +28 -4
- package/app/cli/support/argv.js +6 -0
- package/env.example +32 -0
- package/package.json +36 -6
- package/packages/server/api/admin.routes.js +409 -1
- package/packages/server/api/open.routes.js +7 -2
- package/packages/server/api/tool.routes.js +479 -0
- package/packages/server/app.js +97 -25
- package/packages/server/configs/models/built-in/bigmodel.yaml +6 -0
- package/packages/server/configs/models/providers.yaml +50 -0
- package/packages/server/configs/templates/built-in/general-iteration.yaml +60 -0
- package/packages/server/configs/templates/built-in/general-optimize.yaml +63 -0
- package/packages/server/configs/templates/built-in/output-format-optimize.yaml +95 -0
- package/packages/server/mcp/heartbeat-patch.js +73 -0
- package/packages/server/mcp/mcp.server.js +63 -314
- package/packages/server/mcp/prompt.handler.js +26 -0
- package/packages/server/mcp/thinking-toolkit.handler.js +380 -0
- package/packages/server/package.json +35 -3
- package/packages/server/server.js +114 -12
- package/packages/server/services/TerminalService.js +498 -0
- package/packages/server/services/WebSocketService.js +484 -0
- package/packages/server/services/manager.js +38 -7
- package/packages/server/services/model.service.js +473 -0
- package/packages/server/services/optimization.service.js +457 -0
- package/packages/server/services/template.service.js +333 -0
- package/packages/server/toolm/tool-description-generator-optimized.service.js +5 -2
- package/packages/server/toolm/tool-sync.service.js +47 -3
- package/packages/server/utils/config.js +8 -1
- package/packages/server/utils/port-checker.js +63 -0
- package/packages/server/utils/util.js +27 -0
- package/IFLOW.md +0 -175
- package/app/desktop/assets/app.1.png +0 -0
- package/app/desktop/assets/app.png +0 -0
- package/app/desktop/assets/icons/icon.icns +0 -0
- package/app/desktop/assets/icons/icon.ico +0 -0
- package/app/desktop/assets/icons/icon.png +0 -0
- package/app/desktop/assets/icons/tray.png +0 -0
- package/app/desktop/assets/templates/about.html +0 -147
- package/app/desktop/assets/tray.1.png +0 -0
- package/app/desktop/assets/tray.png +0 -0
- package/app/desktop/main.js +0 -241
- package/app/desktop/package-lock.json +0 -5026
- package/app/desktop/package.json +0 -100
- package/app/desktop/preload.js +0 -7
- package/app/desktop/src/core/error-handler.js +0 -108
- package/app/desktop/src/core/event-emitter.js +0 -84
- package/app/desktop/src/core/logger.js +0 -108
- package/app/desktop/src/core/state-manager.js +0 -125
- package/app/desktop/src/services/module-loader.js +0 -214
- package/app/desktop/src/services/runtime-manager.js +0 -301
- package/app/desktop/src/services/service-manager.js +0 -169
- package/app/desktop/src/services/update-manager.js +0 -267
- package/app/desktop/src/ui/about-dialog-manager.js +0 -208
- package/app/desktop/src/ui/admin-window-manager.js +0 -757
- package/app/desktop/src/ui/splash-manager.js +0 -253
- package/app/desktop/src/ui/tray-manager.js +0 -186
- package/app/desktop/src/utils/icon-manager.js +0 -133
- package/app/desktop/src/utils/path-utils.js +0 -58
- package/app/desktop/src/utils/resource-paths.js +0 -49
- package/app/desktop/src/utils/resource-sync.js +0 -260
- package/app/desktop/src/utils/runtime-sync.js +0 -241
- package/app/desktop/src/utils/template-renderer.js +0 -284
- package/app/desktop/src/utils/version-utils.js +0 -59
- package/examples/prompts/developer/code-review.yaml +0 -32
- package/examples/prompts/developer/code_refactoring.yaml +0 -31
- package/examples/prompts/developer/doc-generator.yaml +0 -36
- package/examples/prompts/developer/error-code-fixer.yaml +0 -35
- package/examples/prompts/engineer/engineer-professional.yaml +0 -92
- package/examples/prompts/engineer/laowang-engineer.yaml +0 -132
- package/examples/prompts/engineer/nekomata-engineer.yaml +0 -123
- package/examples/prompts/engineer/ojousama-engineer.yaml +0 -124
- package/examples/prompts/generator/gen_3d_edu_webpage_html.yaml +0 -117
- package/examples/prompts/generator/gen_3d_webpage_html.yaml +0 -75
- package/examples/prompts/generator/gen_bento_grid_html.yaml +0 -112
- package/examples/prompts/generator/gen_html_web_page.yaml +0 -88
- package/examples/prompts/generator/gen_knowledge_card_html.yaml +0 -83
- package/examples/prompts/generator/gen_magazine_card_html.yaml +0 -82
- package/examples/prompts/generator/gen_mimeng_headline_title.yaml +0 -71
- package/examples/prompts/generator/gen_podcast_script.yaml +0 -69
- package/examples/prompts/generator/gen_prd_prototype_html.yaml +0 -175
- package/examples/prompts/generator/gen_summarize.yaml +0 -157
- package/examples/prompts/generator/gen_title.yaml +0 -119
- package/examples/prompts/generator/others/api_documentation.yaml +0 -32
- package/examples/prompts/generator/others/build_mcp_server.yaml +0 -26
- package/examples/prompts/generator/others/project_architecture.yaml +0 -31
- package/examples/prompts/generator/others/test_case_generator.yaml +0 -30
- package/examples/prompts/generator/others/writing_assistant.yaml +0 -72
- package/examples/prompts/recommend/human_3-0_growth_diagnostic_coach_prompt.yaml +0 -105
- package/examples/prompts/workflow/sixstep-workflow.yaml +0 -192
- package/packages/admin-ui/.babelrc +0 -3
- package/packages/admin-ui/admin.html +0 -412
- package/packages/admin-ui/css/codemirror-theme_xq-light.css +0 -43
- package/packages/admin-ui/css/codemirror.css +0 -344
- package/packages/admin-ui/css/main.css +0 -2592
- package/packages/admin-ui/css/recommended-prompts.css +0 -610
- package/packages/admin-ui/package-lock.json +0 -6973
- package/packages/admin-ui/package.json +0 -36
- package/packages/admin-ui/src/codemirror.js +0 -53
- package/packages/admin-ui/src/index.js +0 -3188
- package/packages/admin-ui/webpack.config.js +0 -76
- package/packages/server/toolm/test-tools.js +0 -264
- package/scripts/build-icons.js +0 -135
- package/scripts/build.sh +0 -57
- package/scripts/postinstall.js +0 -34
- package/scripts/surge/CNAME +0 -1
- package/scripts/surge/README.md +0 -47
- package/scripts/surge/package-lock.json +0 -34
- package/scripts/surge/package.json +0 -20
- package/scripts/surge/sync-to-surge.js +0 -151
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# 预定义的模型提供商配置
|
|
2
|
+
# 当用户选择提供商时,会自动填充这些默认配置
|
|
3
|
+
|
|
4
|
+
providers:
|
|
5
|
+
bigmodel:
|
|
6
|
+
name: BigModel
|
|
7
|
+
description: BigModel 官方 API
|
|
8
|
+
defaultModel: glm-4.5-air
|
|
9
|
+
defaultEndpoint: https://open.bigmodel.cn/api/paas/v4/chat/completions
|
|
10
|
+
website: https://bigmodel.cn
|
|
11
|
+
models:
|
|
12
|
+
- glm-4.5-air
|
|
13
|
+
- glm-4.6
|
|
14
|
+
- glm-4.7
|
|
15
|
+
openrouter:
|
|
16
|
+
name: OpenRouter
|
|
17
|
+
description: OpenRouter 官方 API
|
|
18
|
+
defaultModel: qwen/qwen3-coder:free
|
|
19
|
+
defaultEndpoint: https://openrouter.ai/api/v1/chat/completions
|
|
20
|
+
website: https://openrouter.ai
|
|
21
|
+
models:
|
|
22
|
+
- qwen/qwen3-coder:free
|
|
23
|
+
- z-ai/glm-4.5-air:free
|
|
24
|
+
- xiaomi/mimo-v2-flash:free
|
|
25
|
+
- nex-agi/deepseek-v3.1-nex-n1:free
|
|
26
|
+
- meta-llama/llama-3.3-70b-instruct:free
|
|
27
|
+
|
|
28
|
+
ollama:
|
|
29
|
+
name: Ollama
|
|
30
|
+
description: 本地部署的开源模型
|
|
31
|
+
defaultModel: llama3
|
|
32
|
+
defaultEndpoint: http://localhost:11434/v1/chat/completions
|
|
33
|
+
website: https://ollama.com
|
|
34
|
+
models:
|
|
35
|
+
- llama3
|
|
36
|
+
- llama3:8b
|
|
37
|
+
- llama3:70b
|
|
38
|
+
- mistral
|
|
39
|
+
- mixtral
|
|
40
|
+
- codellama
|
|
41
|
+
- phi3
|
|
42
|
+
- gemma
|
|
43
|
+
|
|
44
|
+
custom:
|
|
45
|
+
name: 自定义
|
|
46
|
+
description: 自定义 API 端点
|
|
47
|
+
defaultModel: ""
|
|
48
|
+
defaultEndpoint: ""
|
|
49
|
+
website: ""
|
|
50
|
+
models: []
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: 通用迭代
|
|
2
|
+
description: 适合改进现有提示词,基于具体问题和需求对已有提示词进行针对性调整和完善
|
|
3
|
+
content:
|
|
4
|
+
- role: system
|
|
5
|
+
content: |-
|
|
6
|
+
# Role:提示词迭代优化专家
|
|
7
|
+
|
|
8
|
+
## Background:
|
|
9
|
+
- 用户已经有一个优化过的提示词
|
|
10
|
+
- 用户希望在此基础上进行特定方向的改进
|
|
11
|
+
- 需要保持原有提示词的核心意图
|
|
12
|
+
- 同时融入用户新的优化需求
|
|
13
|
+
|
|
14
|
+
## 任务理解
|
|
15
|
+
你的工作是修改原始提示词,根据用户的优化需求对其进行改进,而不是执行这些需求。
|
|
16
|
+
|
|
17
|
+
## 核心原则
|
|
18
|
+
- 保持原始提示词的核心意图和功能
|
|
19
|
+
- 将优化需求作为新的要求或约束融入原始提示词
|
|
20
|
+
- 保持原有的语言风格和结构格式
|
|
21
|
+
- 进行精准修改,避免过度调整
|
|
22
|
+
|
|
23
|
+
## 理解示例
|
|
24
|
+
**示例1:**
|
|
25
|
+
- 原始提示词:"你是客服助手,帮用户解决问题"
|
|
26
|
+
- 优化需求:"不要交互"
|
|
27
|
+
- ✅正确结果:"你是客服助手,帮用户解决问题。请直接提供完整解决方案,不要与用户进行多轮交互确认。"
|
|
28
|
+
- ❌错误理解:直接回复"好的,我不会与您交互"
|
|
29
|
+
|
|
30
|
+
**示例2:**
|
|
31
|
+
- 原始提示词:"分析数据并给出建议"
|
|
32
|
+
- 优化需求:"输出JSON格式"
|
|
33
|
+
- ✅正确结果:"分析数据并给出建议,请以JSON格式输出分析结果"
|
|
34
|
+
- ❌错误理解:直接输出JSON格式的回答
|
|
35
|
+
|
|
36
|
+
**示例3:**
|
|
37
|
+
- 原始提示词:"你是写作助手"
|
|
38
|
+
- 优化需求:"更专业一些"
|
|
39
|
+
- ✅正确结果:"你是专业的写作顾问,具备丰富的写作经验,能够..."
|
|
40
|
+
- ❌错误理解:用更专业的语气回复
|
|
41
|
+
|
|
42
|
+
## 工作流程
|
|
43
|
+
1. 分析原始提示词的核心功能和结构
|
|
44
|
+
2. 理解优化需求的本质(添加功能、修改方式、还是增加约束)
|
|
45
|
+
3. 将优化需求恰当地融入原始提示词中
|
|
46
|
+
4. 输出完整的修改后提示词
|
|
47
|
+
|
|
48
|
+
## 输出要求
|
|
49
|
+
直接输出优化后的提示词,保持原有格式,不添加解释。
|
|
50
|
+
- role: user
|
|
51
|
+
content: |
|
|
52
|
+
原始提示词:
|
|
53
|
+
{{lastOptimizedPrompt}}
|
|
54
|
+
|
|
55
|
+
优化需求:
|
|
56
|
+
{{iterateInput}}
|
|
57
|
+
|
|
58
|
+
请基于优化需求修改原始提示词(参考上述示例理解,将需求融入提示词中):
|
|
59
|
+
type: iterate
|
|
60
|
+
format: advanced
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
name: 通用优化
|
|
2
|
+
description: 适合大多数系统提示词优化,按标准结构重组角色定义、技能和规则,提升专业性
|
|
3
|
+
content: |
|
|
4
|
+
你是一个专业的AI提示词优化专家。请帮我优化以下prompt,并按照以下格式返回:
|
|
5
|
+
|
|
6
|
+
# Role: [角色名称]
|
|
7
|
+
|
|
8
|
+
## Profile
|
|
9
|
+
- language: [语言]
|
|
10
|
+
- description: [详细的角色描述]
|
|
11
|
+
- background: [角色背景]
|
|
12
|
+
- personality: [性格特征]
|
|
13
|
+
- expertise: [专业领域]
|
|
14
|
+
- target_audience: [目标用户群]
|
|
15
|
+
|
|
16
|
+
## Skills
|
|
17
|
+
|
|
18
|
+
1. [核心技能类别]
|
|
19
|
+
- [具体技能]: [简要说明]
|
|
20
|
+
- [具体技能]: [简要说明]
|
|
21
|
+
- [具体技能]: [简要说明]
|
|
22
|
+
- [具体技能]: [简要说明]
|
|
23
|
+
|
|
24
|
+
2. [辅助技能类别]
|
|
25
|
+
- [具体技能]: [简要说明]
|
|
26
|
+
- [具体技能]: [简要说明]
|
|
27
|
+
- [具体技能]: [简要说明]
|
|
28
|
+
- [具体技能]: [简要说明]
|
|
29
|
+
|
|
30
|
+
## Rules
|
|
31
|
+
|
|
32
|
+
1. [基本原则]:
|
|
33
|
+
- [具体规则]: [详细说明]
|
|
34
|
+
- [具体规则]: [详细说明]
|
|
35
|
+
- [具体规则]: [详细说明]
|
|
36
|
+
- [具体规则]: [详细说明]
|
|
37
|
+
|
|
38
|
+
2. [行为准则]:
|
|
39
|
+
- [具体规则]: [详细说明]
|
|
40
|
+
- [具体规则]: [详细说明]
|
|
41
|
+
- [具体规则]: [详细说明]
|
|
42
|
+
- [具体规则]: [详细说明]
|
|
43
|
+
|
|
44
|
+
3. [限制条件]:
|
|
45
|
+
- [具体限制]: [详细说明]
|
|
46
|
+
- [具体限制]: [详细说明]
|
|
47
|
+
- [具体限制]: [详细说明]
|
|
48
|
+
- [具体限制]: [详细说明]
|
|
49
|
+
|
|
50
|
+
## Workflows
|
|
51
|
+
|
|
52
|
+
- 目标: [明确目标]
|
|
53
|
+
- 步骤 1: [详细说明]
|
|
54
|
+
- 步骤 2: [详细说明]
|
|
55
|
+
- 步骤 3: [详细说明]
|
|
56
|
+
- 预期结果: [说明]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
## Initialization
|
|
60
|
+
作为[角色名称],你必须遵守上述Rules,按照Workflows执行任务。
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
请基于以上模板,优化并扩展以下prompt,确保内容专业、完整且结构清晰,注意不要携带任何引导词或解释,不要使用代码块包围:
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
name: 通用优化-带输出格式要求
|
|
2
|
+
description: 适合需要规范输出格式的场景,在通用优化基础上增加详细的输出格式控制和约束
|
|
3
|
+
content: |
|
|
4
|
+
你是一个专业的AI提示词优化专家。请帮我优化以下prompt,并按照以下格式返回:
|
|
5
|
+
|
|
6
|
+
# Role: [角色名称]
|
|
7
|
+
|
|
8
|
+
## Profile
|
|
9
|
+
- language: [语言]
|
|
10
|
+
- description: [详细的角色描述]
|
|
11
|
+
- background: [角色背景]
|
|
12
|
+
- personality: [性格特征]
|
|
13
|
+
- expertise: [专业领域]
|
|
14
|
+
- target_audience: [目标用户群]
|
|
15
|
+
|
|
16
|
+
## Skills
|
|
17
|
+
|
|
18
|
+
1. [核心技能类别]
|
|
19
|
+
- [具体技能]: [简要说明]
|
|
20
|
+
- [具体技能]: [简要说明]
|
|
21
|
+
- [具体技能]: [简要说明]
|
|
22
|
+
- [具体技能]: [简要说明]
|
|
23
|
+
|
|
24
|
+
2. [辅助技能类别]
|
|
25
|
+
- [具体技能]: [简要说明]
|
|
26
|
+
- [具体技能]: [简要说明]
|
|
27
|
+
- [具体技能]: [简要说明]
|
|
28
|
+
- [具体技能]: [简要说明]
|
|
29
|
+
|
|
30
|
+
## Rules
|
|
31
|
+
|
|
32
|
+
1. [基本原则]:
|
|
33
|
+
- [具体规则]: [详细说明]
|
|
34
|
+
- [具体规则]: [详细说明]
|
|
35
|
+
- [具体规则]: [详细说明]
|
|
36
|
+
- [具体规则]: [详细说明]
|
|
37
|
+
|
|
38
|
+
2. [行为准则]:
|
|
39
|
+
- [具体规则]: [详细说明]
|
|
40
|
+
- [具体规则]: [详细说明]
|
|
41
|
+
- [具体规则]: [详细说明]
|
|
42
|
+
- [具体规则]: [详细说明]
|
|
43
|
+
|
|
44
|
+
3. [限制条件]:
|
|
45
|
+
- [具体限制]: [详细说明]
|
|
46
|
+
- [具体限制]: [详细说明]
|
|
47
|
+
- [具体限制]: [详细说明]
|
|
48
|
+
- [具体限制]: [详细说明]
|
|
49
|
+
|
|
50
|
+
## Workflows
|
|
51
|
+
|
|
52
|
+
- 目标: [明确目标]
|
|
53
|
+
- 步骤 1: [详细说明]
|
|
54
|
+
- 步骤 2: [详细说明]
|
|
55
|
+
- 步骤 3: [详细说明]
|
|
56
|
+
- 预期结果: [说明]
|
|
57
|
+
|
|
58
|
+
## OutputFormat
|
|
59
|
+
|
|
60
|
+
1. [输出格式类型]:
|
|
61
|
+
- format: [格式类型,如text/markdown/json等]
|
|
62
|
+
- structure: [输出结构说明]
|
|
63
|
+
- style: [风格要求]
|
|
64
|
+
- special_requirements: [特殊要求]
|
|
65
|
+
|
|
66
|
+
2. [格式规范]:
|
|
67
|
+
- indentation: [缩进要求]
|
|
68
|
+
- sections: [分节要求]
|
|
69
|
+
- highlighting: [强调方式]
|
|
70
|
+
|
|
71
|
+
3. [验证规则]:
|
|
72
|
+
- validation: [格式验证规则]
|
|
73
|
+
- constraints: [格式约束条件]
|
|
74
|
+
- error_handling: [错误处理方式]
|
|
75
|
+
|
|
76
|
+
4. [示例说明]:
|
|
77
|
+
1. 示例1:
|
|
78
|
+
- 标题: [示例名称]
|
|
79
|
+
- 格式类型: [对应格式类型]
|
|
80
|
+
- 说明: [示例的特别说明]
|
|
81
|
+
- 示例内容: |
|
|
82
|
+
[具体示例内容]
|
|
83
|
+
|
|
84
|
+
2. 示例2:
|
|
85
|
+
- 标题: [示例名称]
|
|
86
|
+
- 格式类型: [对应格式类型]
|
|
87
|
+
- 说明: [示例的特别说明]
|
|
88
|
+
- 示例内容: |
|
|
89
|
+
[具体示例内容]
|
|
90
|
+
|
|
91
|
+
## Initialization
|
|
92
|
+
作为[角色名称],你必须遵守上述Rules,按照Workflows执行任务,并按照[输出格式]输出。
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
请基于以上模板,优化并扩展以下prompt,确保内容专业、完整且结构清晰,注意不要携带任何引导词或解释,不要使用代码块包围:
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
2
|
+
|
|
3
|
+
// 为 StreamableHTTPServerTransport 添加 SSE 心跳,避免客户端/中间层在长时间空闲后断开。
|
|
4
|
+
// 通过环境变量 MCP_HEARTBEAT_INTERVAL_MS 配置心跳间隔(默认 30s)。
|
|
5
|
+
const HEARTBEAT_INTERVAL_MS = parseInt(process.env.MCP_HEARTBEAT_INTERVAL_MS || '30000', 10);
|
|
6
|
+
let patched = false;
|
|
7
|
+
|
|
8
|
+
function attachHeartbeat(res) {
|
|
9
|
+
if (!res || res.__mcpHeartbeatAttached) return;
|
|
10
|
+
|
|
11
|
+
// 仅对 SSE 响应启用心跳
|
|
12
|
+
const ct = res.getHeader && res.getHeader('Content-Type');
|
|
13
|
+
if (!ct || !String(ct).includes('text/event-stream')) return;
|
|
14
|
+
|
|
15
|
+
// 配置底层 socket 的 keep-alive
|
|
16
|
+
if (res.socket) {
|
|
17
|
+
res.socket.setKeepAlive(true, HEARTBEAT_INTERVAL_MS);
|
|
18
|
+
res.socket.setTimeout(0);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const interval = setInterval(() => {
|
|
22
|
+
if (res.writableEnded || res.destroyed) {
|
|
23
|
+
clearInterval(interval);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
res.write(': keep-alive\n\n'); // SSE 注释行,客户端忽略但可维持连接
|
|
28
|
+
} catch (error) {
|
|
29
|
+
clearInterval(interval);
|
|
30
|
+
}
|
|
31
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
32
|
+
|
|
33
|
+
res.on('close', () => clearInterval(interval));
|
|
34
|
+
res.on('error', () => clearInterval(interval));
|
|
35
|
+
res.__mcpHeartbeatAttached = true;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 给 StreamableHTTPServerTransport 打补丁,自动为 SSE 连接添加心跳
|
|
40
|
+
*/
|
|
41
|
+
export function patchStreamableHTTPHeartbeat() {
|
|
42
|
+
if (patched) return;
|
|
43
|
+
patched = true;
|
|
44
|
+
|
|
45
|
+
const proto = StreamableHTTPServerTransport.prototype;
|
|
46
|
+
|
|
47
|
+
const wrap = (original) => {
|
|
48
|
+
return async function wrapped(...args) {
|
|
49
|
+
const res = args[1];
|
|
50
|
+
try {
|
|
51
|
+
return await original.apply(this, args);
|
|
52
|
+
} finally {
|
|
53
|
+
try {
|
|
54
|
+
// 尝试给当前响应以及现有流映射里的响应绑定心跳
|
|
55
|
+
if (res) attachHeartbeat(res);
|
|
56
|
+
if (this._streamMapping && typeof this._streamMapping.values === 'function') {
|
|
57
|
+
for (const r of this._streamMapping.values()) {
|
|
58
|
+
attachHeartbeat(r);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
} catch {
|
|
62
|
+
// 安全兜底,避免影响主流程
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
proto.handleGetRequest = wrap(proto.handleGetRequest);
|
|
69
|
+
proto.handlePostRequest = wrap(proto.handlePostRequest);
|
|
70
|
+
proto.replayEvents = wrap(proto.replayEvents);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|