@becrafter/prompt-manager 0.1.2 → 0.1.9

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 (110) hide show
  1. package/README.md +304 -121
  2. package/app/cli/commands/start.js +65 -4
  3. package/app/cli/support/argv.js +6 -0
  4. package/env.example +32 -0
  5. package/package.json +36 -7
  6. package/packages/server/api/admin.routes.js +409 -1
  7. package/packages/server/api/open.routes.js +7 -2
  8. package/packages/server/api/tool.routes.js +479 -0
  9. package/packages/server/app.js +97 -25
  10. package/packages/server/configs/models/built-in/bigmodel.yaml +6 -0
  11. package/packages/server/configs/models/providers.yaml +50 -0
  12. package/packages/server/configs/templates/built-in/general-iteration.yaml +60 -0
  13. package/packages/server/configs/templates/built-in/general-optimize.yaml +63 -0
  14. package/packages/server/configs/templates/built-in/output-format-optimize.yaml +95 -0
  15. package/packages/server/mcp/heartbeat-patch.js +73 -0
  16. package/packages/server/mcp/mcp.server.js +63 -314
  17. package/packages/server/mcp/prompt.handler.js +26 -0
  18. package/packages/server/mcp/thinking-toolkit.handler.js +380 -0
  19. package/packages/server/package.json +35 -3
  20. package/packages/server/server.js +114 -12
  21. package/packages/server/services/TerminalService.js +498 -0
  22. package/packages/server/services/WebSocketService.js +484 -0
  23. package/packages/server/services/manager.js +38 -7
  24. package/packages/server/services/model.service.js +473 -0
  25. package/packages/server/services/optimization.service.js +457 -0
  26. package/packages/server/services/template.service.js +333 -0
  27. package/packages/server/toolm/tool-description-generator-optimized.service.js +5 -2
  28. package/packages/server/toolm/tool-sync.service.js +47 -3
  29. package/packages/server/utils/config.js +8 -1
  30. package/packages/server/utils/port-checker.js +63 -0
  31. package/packages/server/utils/util.js +27 -0
  32. package/IFLOW.md +0 -175
  33. package/app/desktop/assets/app.1.png +0 -0
  34. package/app/desktop/assets/app.png +0 -0
  35. package/app/desktop/assets/icons/icon.icns +0 -0
  36. package/app/desktop/assets/icons/icon.ico +0 -0
  37. package/app/desktop/assets/icons/icon.png +0 -0
  38. package/app/desktop/assets/icons/tray.png +0 -0
  39. package/app/desktop/assets/templates/about.html +0 -147
  40. package/app/desktop/assets/tray.1.png +0 -0
  41. package/app/desktop/assets/tray.png +0 -0
  42. package/app/desktop/main.js +0 -241
  43. package/app/desktop/package-lock.json +0 -5026
  44. package/app/desktop/package.json +0 -100
  45. package/app/desktop/preload.js +0 -7
  46. package/app/desktop/src/core/error-handler.js +0 -108
  47. package/app/desktop/src/core/event-emitter.js +0 -84
  48. package/app/desktop/src/core/logger.js +0 -108
  49. package/app/desktop/src/core/state-manager.js +0 -125
  50. package/app/desktop/src/services/module-loader.js +0 -214
  51. package/app/desktop/src/services/runtime-manager.js +0 -301
  52. package/app/desktop/src/services/service-manager.js +0 -169
  53. package/app/desktop/src/services/update-manager.js +0 -267
  54. package/app/desktop/src/ui/about-dialog-manager.js +0 -208
  55. package/app/desktop/src/ui/admin-window-manager.js +0 -757
  56. package/app/desktop/src/ui/splash-manager.js +0 -253
  57. package/app/desktop/src/ui/tray-manager.js +0 -186
  58. package/app/desktop/src/utils/icon-manager.js +0 -133
  59. package/app/desktop/src/utils/path-utils.js +0 -58
  60. package/app/desktop/src/utils/resource-paths.js +0 -49
  61. package/app/desktop/src/utils/resource-sync.js +0 -260
  62. package/app/desktop/src/utils/runtime-sync.js +0 -241
  63. package/app/desktop/src/utils/template-renderer.js +0 -284
  64. package/app/desktop/src/utils/version-utils.js +0 -59
  65. package/examples/prompts/developer/code-review.yaml +0 -32
  66. package/examples/prompts/developer/code_refactoring.yaml +0 -31
  67. package/examples/prompts/developer/doc-generator.yaml +0 -36
  68. package/examples/prompts/developer/error-code-fixer.yaml +0 -35
  69. package/examples/prompts/engineer/engineer-professional.yaml +0 -92
  70. package/examples/prompts/engineer/laowang-engineer.yaml +0 -132
  71. package/examples/prompts/engineer/nekomata-engineer.yaml +0 -123
  72. package/examples/prompts/engineer/ojousama-engineer.yaml +0 -124
  73. package/examples/prompts/generator/gen_3d_edu_webpage_html.yaml +0 -117
  74. package/examples/prompts/generator/gen_3d_webpage_html.yaml +0 -75
  75. package/examples/prompts/generator/gen_bento_grid_html.yaml +0 -112
  76. package/examples/prompts/generator/gen_html_web_page.yaml +0 -88
  77. package/examples/prompts/generator/gen_knowledge_card_html.yaml +0 -83
  78. package/examples/prompts/generator/gen_magazine_card_html.yaml +0 -82
  79. package/examples/prompts/generator/gen_mimeng_headline_title.yaml +0 -71
  80. package/examples/prompts/generator/gen_podcast_script.yaml +0 -69
  81. package/examples/prompts/generator/gen_prd_prototype_html.yaml +0 -175
  82. package/examples/prompts/generator/gen_summarize.yaml +0 -157
  83. package/examples/prompts/generator/gen_title.yaml +0 -119
  84. package/examples/prompts/generator/others/api_documentation.yaml +0 -32
  85. package/examples/prompts/generator/others/build_mcp_server.yaml +0 -26
  86. package/examples/prompts/generator/others/project_architecture.yaml +0 -31
  87. package/examples/prompts/generator/others/test_case_generator.yaml +0 -30
  88. package/examples/prompts/generator/others/writing_assistant.yaml +0 -72
  89. package/examples/prompts/recommend/human_3-0_growth_diagnostic_coach_prompt.yaml +0 -105
  90. package/examples/prompts/workflow/sixstep-workflow.yaml +0 -192
  91. package/packages/admin-ui/.babelrc +0 -3
  92. package/packages/admin-ui/admin.html +0 -412
  93. package/packages/admin-ui/css/codemirror-theme_xq-light.css +0 -43
  94. package/packages/admin-ui/css/codemirror.css +0 -344
  95. package/packages/admin-ui/css/main.css +0 -2592
  96. package/packages/admin-ui/css/recommended-prompts.css +0 -610
  97. package/packages/admin-ui/package-lock.json +0 -6973
  98. package/packages/admin-ui/package.json +0 -36
  99. package/packages/admin-ui/src/codemirror.js +0 -53
  100. package/packages/admin-ui/src/index.js +0 -3188
  101. package/packages/admin-ui/webpack.config.js +0 -76
  102. package/packages/server/toolm/test-tools.js +0 -264
  103. package/scripts/build-icons.js +0 -135
  104. package/scripts/build.sh +0 -57
  105. package/scripts/postinstall.js +0 -34
  106. package/scripts/surge/CNAME +0 -1
  107. package/scripts/surge/README.md +0 -47
  108. package/scripts/surge/package-lock.json +0 -34
  109. package/scripts/surge/package.json +0 -20
  110. package/scripts/surge/sync-to-surge.js +0 -151
@@ -1,412 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="zh-CN">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Prompt Manager 后台</title>
7
- <link rel="stylesheet" href="./css/codemirror.css">
8
- <link rel="stylesheet" href="./css/codemirror-theme_xq-light.css">
9
- </head>
10
- <body>
11
- <!-- 登录界面 -->
12
- <div id="login" class="login-container" style="display: none;">
13
- <form id="loginForm" class="login-form">
14
- <div class="login-box">
15
- <h2>Prompt Manager</h2>
16
- <div class="input-group username">
17
- <input type="text" id="username" name="username" placeholder="用户名" autocomplete="username" />
18
- </div>
19
- <div class="input-group password">
20
- <input type="password" id="password" name="password" placeholder="密码" autocomplete="current-password" />
21
- </div>
22
- <button type="submit" id="loginBtn" class="btn btn-primary">登&nbsp;&nbsp;&nbsp;&nbsp;录</button>
23
- <div id="loginError" class="error-msg" style="display: none; margin-top: 15px;"></div>
24
- </div>
25
- </form>
26
- </div>
27
-
28
- <!-- 主界面 -->
29
- <!-- 类目管理弹窗 -->
30
- <div id="newFolderModal" class="modal hidden">
31
- <div class="modal-dialog">
32
- <div class="modal-content group-modal-content">
33
- <div class="modal-header">
34
- <h3>类目管理</h3>
35
- <button type="button" class="modal-close" onclick="toggleNewFolderModal()">
36
- <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
37
- <path d="M15 5L5 15M5 5L15 15" stroke="currentColor" stroke-width="1.67" stroke-linecap="round" stroke-linejoin="round"/>
38
- </svg>
39
- </button>
40
- </div>
41
- <div class="modal-body">
42
- <div class="group-modal-tabs">
43
- <button type="button" class="group-modal-tab active" data-tab="create">新增类目</button>
44
- <button type="button" class="group-modal-tab" data-tab="manage">管理类目</button>
45
- </div>
46
- <div class="group-modal-panel" data-panel="create">
47
- <div class="form-group">
48
- <label>目录名称</label>
49
- <input type="text" id="newFolderName" name="folderName" placeholder="请输入目录名称" onkeydown="handleNewFolderKeydown(event)">
50
- <div class="group-modal-hint">名称仅支持字母、数字、下划线、短横线和中文,长度不超过64个字符。</div>
51
- </div>
52
- <div class="form-group">
53
- <label>父级目录</label>
54
- <select id="newFolderParent" class="form-control">
55
- <option value="">根目录</option>
56
- </select>
57
- <div class="group-modal-hint">选择父级目录以创建子目录</div>
58
- </div>
59
- </div>
60
- <div class="group-modal-panel hidden" data-panel="manage">
61
- <div class="group-manage-toolbar">
62
- <input type="text" id="groupManageSearch" placeholder="搜索类目..." />
63
- <button type="button" class="btn btn-light btn-sm" id="groupManageRefreshBtn">刷新</button>
64
- </div>
65
- <div class="group-manage-list" id="groupManageList"></div>
66
- <div class="group-manage-empty hidden" id="groupManageEmpty">暂无类目信息</div>
67
- </div>
68
- </div>
69
- <div class="modal-footer">
70
- <div class="group-modal-footer group-modal-footer-create" id="groupModalCreateFooter">
71
- <button type="button" class="btn btn-light" onclick="toggleNewFolderModal()">取消</button>
72
- <button type="button" class="btn btn-dark" onclick="createNewFolder()">创建</button>
73
- </div>
74
- <div class="group-modal-footer group-modal-footer-manage hidden" id="groupModalManageFooter">
75
- <button type="button" class="btn btn-light" onclick="toggleNewFolderModal(false)">关闭</button>
76
- </div>
77
- </div>
78
- </div>
79
- </div>
80
- </div>
81
-
82
- <div id="main" style="display: none; height: 100vh; flex-direction: column;">
83
- <!-- 顶部导航 -->
84
- <header>
85
- <div class="logo">
86
- Prompt Manager <span>Beta</span>
87
- </div>
88
- <div class="nav-right">
89
- <div class="user-profile">
90
- <button class="avatar-btn" id="avatarBtn" aria-haspopup="true" aria-expanded="false">
91
- <img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%239ca3af'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z'/%3E%3C/svg%3E" alt="用户头像" class="avatar-img">
92
- </button>
93
- <div class="dropdown-menu" id="userMenu">
94
- <div class="dropdown-header">
95
- <div class="user-info">
96
- <img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%239ca3af'%3E%3Cpath d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z'/%3E%3C/svg%3E" alt="用户头像" class="user-avatar">
97
- <div class="user-details">
98
- <div class="user-name">管理员</div>
99
- <div class="user-role">Admin</div>
100
- </div>
101
- </div>
102
- </div>
103
- <div class="dropdown-divider"></div>
104
- <button id="logoutBtn" class="dropdown-item">
105
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="dropdown-icon"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"></path><polyline points="16 17 21 12 16 7"></polyline><line x1="21" y1="12" x2="9" y2="12"></line></svg>
106
- 退出登录
107
- </button>
108
- </div>
109
- </div>
110
- </div>
111
- </header>
112
-
113
- <!-- 主体内容 -->
114
- <main>
115
- <!-- 左侧边栏 -->
116
- <aside>
117
- <div class="sidebar-header">
118
- <button id="newPromptBtn" class="new-prompt-btn">
119
- 新建 Prompt
120
- </button>
121
- <div class="search-container">
122
- <div class="search-box">
123
- <input type="text" id="searchInput" name="searchInput" placeholder="搜索提示词..." autocomplete="off" />
124
- <button type="button" class="clear-btn" title="清除搜索"></button>
125
- </div>
126
- <button id="newGroupBtn" class="folder-btn" title="新建目录">
127
- </button>
128
- </div>
129
- </div>
130
-
131
- <div id="groupList"></div>
132
- </aside>
133
-
134
- <!-- 右侧编辑器 -->
135
- <div class="editor-container">
136
- <!-- 自定义空白内容区域 -->
137
- <div class="custom-blank-content" id="customBlankContent">
138
- <div class="blank-placeholder">
139
- <div class="blank-placeholder-body">
140
- <div class="blank-placeholder-emoji">📝</div>
141
- <p class="blank-placeholder-text">请选择左侧的 Prompt 或点击「<button type="button" id="newPromptBtnInBlankArea" class="blank-area-new-prompt-btn">新建 Prompt</button>」开始编辑</p>
142
- </div>
143
- </div>
144
-
145
- <!-- 推荐词卡片列表 -->
146
- <div class="recommended-prompts-section hidden" id="recommendedPromptsSection">
147
- <div class="recommended-prompts-header">
148
- <h3>推荐提示词</h3>
149
- <div class="recommended-prompts-nav">
150
- <button class="nav-arrow arrow-left disabled" id="recommendedPromptsLeft">
151
- <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
152
- <polyline points="15 18 9 12 15 6"></polyline>
153
- </svg>
154
- </button>
155
- <button class="nav-arrow arrow-right" id="recommendedPromptsRight">
156
- <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
157
- <polyline points="9 18 15 12 9 6"></polyline>
158
- </svg>
159
- </button>
160
- </div>
161
- </div>
162
- <div class="recommended-prompts-container">
163
- <div class="recommended-prompts-list" id="recommendedPromptsList">
164
- <!-- 推荐词卡片将通过JavaScript动态加载 -->
165
- </div>
166
- </div>
167
- </div>
168
- </div>
169
-
170
- <!-- Prompt 编辑区域(默认隐藏) -->
171
- <div id="promptEditorArea" style="display: none;">
172
- <div class="editor-header">
173
- <div class="editor-header-top">
174
- <button id="backToListBtn" class="btn btn-outline btn-icon" title="返回列表">
175
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
176
- <rect x="3" y="3" width="7" height="7"></rect>
177
- <rect x="14" y="3" width="7" height="7"></rect>
178
- <rect x="14" y="14" width="7" height="7"></rect>
179
- <rect x="3" y="14" width="7" height="7"></rect>
180
- </svg>
181
- </button>
182
- <input type="text" id="promptName" name="promptName" placeholder="Prompt 名称" />
183
- <div class="group-selector">
184
- <button type="button" id="promptGroupBtn" class="group-selector-btn" aria-haspopup="listbox" aria-expanded="false" aria-controls="promptGroupDropdown">
185
- <span class="group-selector-label" style="display: none;">关联类目</span>
186
- <span class="group-selector-value" id="promptGroupLabel">default</span>
187
- <span class="group-selector-icon" aria-hidden="true">
188
- <svg width="14" height="14" viewBox="0 0 20 20" fill="none">
189
- <path d="M5 8L10 13L15 8" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/>
190
- </svg>
191
- </span>
192
- </button>
193
- <select id="promptGroup" class="group-selector-input" aria-hidden="true" tabindex="-1">
194
- <!-- 选项将通过后端接口动态加载 -->
195
- </select>
196
- <div class="group-dropdown" id="promptGroupDropdown" role="dialog" aria-modal="false">
197
- <div class="group-dropdown-search">
198
- <input type="text" id="promptGroupSearch" placeholder="搜索类目..." autocomplete="off" />
199
- </div>
200
- <div class="group-dropdown-body">
201
- <div class="group-cascader" id="promptGroupCascader"></div>
202
- <div class="group-search-results" id="promptGroupSearchResults"></div>
203
- <div class="group-dropdown-empty hidden" id="promptGroupEmpty">暂无匹配的类目</div>
204
- </div>
205
- </div>
206
- </div>
207
- <div class="editor-controls">
208
- <div class="mode-toggle">
209
- <button id="editModeBtn" class="mode-btn active" data-mode="edit">编辑</button>
210
- <button id="previewModeBtn" class="mode-btn" data-mode="preview">预览</button>
211
- </div>
212
- <button id="saveBtn" class="btn btn-primary btn-sm">
213
- 保存
214
- </button>
215
- </div>
216
- </div>
217
- <textarea id="promptDescription" class="prompt-description" placeholder="Prompt 描述"></textarea>
218
- </div>
219
-
220
- <div class="editor-content">
221
- <section class="arguments-section" id="argumentsSection">
222
- <div class="arguments-header">
223
- <div class="arguments-title">
224
- <span>参数配置</span>
225
- </div>
226
- <div class="arguments-actions">
227
- <button id="addArgumentBtn" class="btn btn-outline btn-sm" type="button">
228
- 新增
229
- </button>
230
- </div>
231
- </div>
232
- <div class="arguments-list" id="argumentsList">
233
- <div class="arguments-empty">暂无参数,点击"新增"开始配置</div>
234
- </div>
235
- </section>
236
- <div class="editor-body" id="editorWorkspace">
237
- <div class="workspace-pane" id="editorPane">
238
- <div class="pane-header">编辑器</div>
239
- <div class="pane-content">
240
- <textarea id="editor"></textarea>
241
- </div>
242
- </div>
243
- <div class="workspace-pane hidden" id="previewPane">
244
- <div class="pane-header">实时预览</div>
245
- <div class="pane-content preview">
246
- <div class="preview-content" id="previewContent">
247
- <p>选择或创建prompt开始编辑</p>
248
- </div>
249
- </div>
250
- </div>
251
- </div>
252
- </div>
253
- </div>
254
- </div>
255
- </main>
256
- </div>
257
-
258
- <!-- 消息提示 -->
259
- <div id="toastContainer" class="toast-container"></div>
260
-
261
- <!-- 删除 Prompt 弹窗 -->
262
- <div id="deletePromptModal" class="modal hidden" role="dialog" aria-modal="true" aria-labelledby="deletePromptTitle">
263
- <div class="modal-dialog">
264
- <div class="modal-content">
265
- <div class="modal-header">
266
- <h3 id="deletePromptTitle">删除 Prompt</h3>
267
- <button type="button" class="modal-close" id="deletePromptCloseBtn" aria-label="关闭">
268
- <svg width="20" height="20" viewBox="0 0 20 20" fill="none">
269
- <path d="M15 5L5 15M5 5L15 15" stroke="currentColor" stroke-width="1.67" stroke-linecap="round" stroke-linejoin="round"/>
270
- </svg>
271
- </button>
272
- </div>
273
- <div class="modal-body">
274
- <p style="font-size: 14px; color: var(--gray); line-height: 1.6;">
275
- 确认删除 <span id="deletePromptName" style="color: var(--dark); font-weight: 600;"></span> 吗?该操作不可撤销。
276
- </p>
277
- </div>
278
- <div class="modal-footer">
279
- <button type="button" class="btn btn-light" id="deletePromptCancelBtn">取消</button>
280
- <button type="button" class="btn btn-danger" id="deletePromptConfirmBtn">删除</button>
281
- </div>
282
- </div>
283
- </div>
284
- </div>
285
-
286
- <!-- 参数编辑弹窗 -->
287
- <div id="argumentModal" class="argument-modal hidden" role="dialog" aria-modal="true" aria-labelledby="argumentModalTitle">
288
- <div class="argument-modal-dialog">
289
- <div class="argument-modal-header">
290
- <h3 id="argumentModalTitle">新增参数</h3>
291
- <button type="button" id="argumentModalClose" class="argument-modal-close" aria-label="关闭">×</button>
292
- </div>
293
- <form id="argumentForm" class="argument-modal-form">
294
- <div class="argument-modal-body">
295
- <div class="argument-form-grid">
296
- <div class="form-field required-field">
297
- <label for="argumentNameInput">参数名称 <span class="required">*</span></label>
298
- <input type="text" id="argumentNameInput" name="argumentName" placeholder="例如:language" />
299
- </div>
300
- <div class="form-field">
301
- <label for="argumentTypeInput">类型</label>
302
- <input type="text" id="argumentTypeInput" name="argumentType" list="argumentTypeOptions" placeholder="例如:string" />
303
- </div>
304
- <div class="form-field">
305
- <label for="argumentDefaultInput">默认值</label>
306
- <input type="text" id="argumentDefaultInput" name="argumentDefault" placeholder="可选" />
307
- </div>
308
- <div class="form-field form-field-inline">
309
- <label class="checkbox-field">
310
- <input type="checkbox" id="argumentRequiredInput" />
311
- <span>必填</span>
312
- </label>
313
- </div>
314
- <div class="form-field full-width">
315
- <label for="argumentDescriptionInput">参数说明</label>
316
- <textarea id="argumentDescriptionInput" rows="3" placeholder="用于提示词中的描述"></textarea>
317
- </div>
318
- </div>
319
- </div>
320
- <div class="argument-modal-footer">
321
- <button type="button" class="btn btn-outline" id="argumentCancelBtn">取消</button>
322
- <button type="submit" class="btn btn-primary">保存</button>
323
- </div>
324
- </form>
325
- </div>
326
- </div>
327
-
328
- <datalist id="argumentTypeOptions">
329
- <option value="string">字符串</option>
330
- <option value="number">数字</option>
331
- <option value="boolean">布尔值</option>
332
- </datalist>
333
-
334
- <!-- 加载中覆盖层 -->
335
- <div id="loadingOverlay" class="loading-overlay">
336
- <div class="loading-spinner"></div>
337
- <div class="loading-text">正在加载中...</div>
338
- <div class="loading-subtext">请稍候,正在获取数据</div>
339
- </div>
340
-
341
- <!-- 推荐词详情弹窗 -->
342
- <div id="recommendedPromptModal" class="recommended-prompt-modal">
343
- <div class="recommended-prompt-modal-content">
344
- <div class="recommended-prompt-modal-header">
345
- <h3 id="recommendedPromptTitle">
346
- <svg class="modal-title-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#666666" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
347
- <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
348
- </svg>
349
- <span class="modal-title-text">推荐提示词</span>
350
- </h3>
351
- <button class="recommended-prompt-modal-close" id="recommendedPromptClose">
352
- <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
353
- <line x1="18" y1="6" x2="6" y2="18"></line>
354
- <line x1="6" y1="6" x2="18" y2="18"></line>
355
- </svg>
356
- </button>
357
- </div>
358
- <div class="recommended-prompt-modal-body">
359
- <div class="prompt-detail-description" id="recommendedPromptDescription"></div>
360
- <div class="prompt-detail-content" id="recommendedPromptContent"></div>
361
- </div>
362
- <div class="recommended-prompt-modal-footer">
363
- <button class="sync-to-my-prompts-btn" id="syncToMyPromptsBtn">
364
- <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
365
- <path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"></path>
366
- </svg>
367
- 一键同步
368
- </button>
369
- </div>
370
- </div>
371
- </div>
372
-
373
- <!-- 同步到我的提示词弹窗 -->
374
- <div id="syncPromptModal" class="sync-prompt-modal">
375
- <div class="sync-prompt-modal-content">
376
- <div class="sync-prompt-modal-header">
377
- <h3>
378
- <svg class="modal-title-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#666666" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
379
- <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
380
- </svg>
381
- <span class="modal-title-text">同步到我的提示词</span>
382
- </h3>
383
- <button class="sync-prompt-modal-close" id="syncPromptClose">
384
- <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
385
- <line x1="18" y1="6" x2="6" y2="18"></line>
386
- <line x1="6" y1="6" x2="18" y2="18"></line>
387
- </svg>
388
- </button>
389
- </div>
390
- <div class="sync-prompt-modal-body">
391
- <form class="sync-prompt-form" id="syncPromptForm">
392
- <div class="form-group">
393
- <label for="syncPromptName">提示词名称</label>
394
- <input type="text" id="syncPromptName" name="name" placeholder="请输入提示词名称" required>
395
- </div>
396
- <div class="form-group">
397
- <label for="syncPromptGroup">选择目录</label>
398
- <select id="syncPromptGroup" name="group" required>
399
- <option value="">请选择目录</option>
400
- <!-- 目录选项将通过JavaScript动态加载 -->
401
- </select>
402
- </div>
403
- </form>
404
- </div>
405
- <div class="sync-prompt-modal-footer">
406
- <button class="btn btn-light" id="syncPromptCancel">取消</button>
407
- <button class="btn btn-primary" id="syncPromptConfirm">同步</button>
408
- </div>
409
- </div>
410
- </div>
411
- </body>
412
- </html>
@@ -1,43 +0,0 @@
1
- /*
2
- Copyright (C) 2011 by MarkLogic Corporation
3
- Author: Mike Brevoort <mike@brevoort.com>
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
22
- */
23
- .cm-s-xq-light span.cm-keyword { line-height: 1em; font-weight: bold; color: #5A5CAD; }
24
- .cm-s-xq-light span.cm-atom { color: #6C8CD5; }
25
- .cm-s-xq-light span.cm-number { color: #164; }
26
- .cm-s-xq-light span.cm-def { text-decoration:underline; }
27
- .cm-s-xq-light span.cm-variable { color: black; }
28
- .cm-s-xq-light span.cm-variable-2 { color:black; }
29
- .cm-s-xq-light span.cm-variable-3, .cm-s-xq-light span.cm-type { color: black; }
30
- .cm-s-xq-light span.cm-property {}
31
- .cm-s-xq-light span.cm-operator {}
32
- .cm-s-xq-light span.cm-comment { color: #0080FF; font-style: italic; }
33
- .cm-s-xq-light span.cm-string { color: red; }
34
- .cm-s-xq-light span.cm-meta { color: yellow; }
35
- .cm-s-xq-light span.cm-qualifier { color: grey; }
36
- .cm-s-xq-light span.cm-builtin { color: #7EA656; }
37
- .cm-s-xq-light span.cm-bracket { color: #cc7; }
38
- .cm-s-xq-light span.cm-tag { color: #3F7F7F; }
39
- .cm-s-xq-light span.cm-attribute { color: #7F007F; }
40
- .cm-s-xq-light span.cm-error { color: #f00; }
41
-
42
- .cm-s-xq-light .CodeMirror-activeline-background { background: #e8f2ff; }
43
- .cm-s-xq-light .CodeMirror-matchingbracket { outline:1px solid grey;color:black !important;background:yellow; }