hypercore-cli 1.1.2 → 1.4.0

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 (162) hide show
  1. package/LICENSE +92 -21
  2. package/README.md +8 -1
  3. package/dist/App-YMX7FSXR.js +1 -0
  4. package/dist/api-ELP6F4NC.js +1 -0
  5. package/dist/auth-SICBMA3P.js +1 -0
  6. package/dist/auth-X6CUT3DW.js +1 -0
  7. package/dist/background-ACODXSUG.js +1 -0
  8. package/dist/backlog-JD2IM336.js +1 -0
  9. package/dist/chunk-2QI2IU2V.js +1 -0
  10. package/dist/chunk-3KFRDIPQ.js +1 -0
  11. package/dist/chunk-42C5J7PN.js +1 -0
  12. package/dist/chunk-4D7XVJ7Q.js +1 -0
  13. package/dist/chunk-5KUSGQP2.js +1 -0
  14. package/dist/chunk-5OEFAGD5.js +1 -0
  15. package/dist/chunk-AUQ64BK2.js +1 -0
  16. package/dist/chunk-AV244H5C.js +1 -0
  17. package/dist/chunk-BQVBEFS4.js +1 -0
  18. package/dist/chunk-BYWQLFP2.js +1 -0
  19. package/dist/chunk-C6YL7UHE.js +1 -0
  20. package/dist/chunk-COITWWZJ.js +1 -0
  21. package/dist/chunk-CR7UUJVX.js +1 -0
  22. package/dist/chunk-E3MULLBX.js +1 -0
  23. package/dist/chunk-EZHYVJGQ.js +1 -0
  24. package/dist/chunk-FAMURNNH.js +1 -0
  25. package/dist/chunk-FGP56E4W.js +1 -0
  26. package/dist/chunk-FHGATV5B.js +1 -0
  27. package/dist/chunk-I2G27Y5P.js +1 -0
  28. package/dist/chunk-IKF43TX2.js +1 -0
  29. package/dist/chunk-INSPHCBN.js +1 -0
  30. package/dist/chunk-JHMV366T.js +1 -0
  31. package/dist/chunk-L52HX5SX.js +1 -0
  32. package/dist/chunk-LQMDUKIE.js +1 -0
  33. package/dist/chunk-M3MTKGA5.js +1 -0
  34. package/dist/chunk-MPO54FU3.js +1 -0
  35. package/dist/chunk-PVKCZI6A.js +1 -0
  36. package/dist/chunk-Q7KEPCYL.js +1 -0
  37. package/dist/chunk-ROBZ6PAL.js +1 -0
  38. package/dist/chunk-RXB5BS2N.js +1 -0
  39. package/dist/chunk-RZ3HNYMT.js +1 -0
  40. package/dist/chunk-UCGLRMTG.js +1 -0
  41. package/dist/chunk-UEHJVRKB.js +1 -0
  42. package/dist/chunk-UZYX5GGF.js +1 -0
  43. package/dist/chunk-XQJBB725.js +1 -0
  44. package/dist/chunk-YXCRL6K3.js +1 -0
  45. package/dist/claude-US2QPRBA.js +1 -0
  46. package/dist/commands-EKPWCB3T.js +1 -0
  47. package/dist/commands-GYNKP5WV.js +1 -0
  48. package/dist/commands-QHJLREPM.js +1 -0
  49. package/dist/config-2OUL5FLS.js +1 -0
  50. package/dist/config-loader-N7IBWN2P.js +1 -0
  51. package/dist/diagnose-NLHN4SAJ.js +1 -0
  52. package/dist/display-RYAW2GFB.js +1 -0
  53. package/dist/extractor-3KTM2IUL.js +1 -0
  54. package/dist/feature-flag-VVIF5FJG.js +1 -0
  55. package/dist/history-3R2UHRDQ.js +1 -0
  56. package/dist/index.js +1 -402
  57. package/dist/instance-registry-I5AIVJE2.js +1 -0
  58. package/dist/keybindings-RN3A7CRW.js +1 -0
  59. package/dist/loader-3IKPXP4R.js +1 -0
  60. package/dist/network-K5HRJE44.js +1 -0
  61. package/dist/notify-O6FNVHC4.js +1 -0
  62. package/dist/openai-compat-IPCMINVF.js +1 -0
  63. package/dist/panels-2R5YEFXH.js +1 -0
  64. package/dist/permissions-5O7KVAXU.js +1 -0
  65. package/dist/prompt-VWFPFM4N.js +1 -0
  66. package/dist/quality-GPQD25UL.js +1 -0
  67. package/dist/repl-CL4SYHU4.js +1 -0
  68. package/dist/roadmap-QRZODSNJ.js +1 -0
  69. package/dist/server-PKOHK5M2.js +1 -0
  70. package/dist/session-5HDDQQP6.js +1 -0
  71. package/dist/skills-DXWSVJSU.js +1 -0
  72. package/dist/store-WXXTKTTL.js +1 -0
  73. package/dist/team-N2GF4YYS.js +1 -0
  74. package/dist/telemetry-NT4UZLBS.js +1 -0
  75. package/dist/test-runner-F6B6RH3S.js +1 -0
  76. package/dist/theme-JJJ6ABR2.js +1 -0
  77. package/dist/upgrade-RUG3R7R5.js +1 -0
  78. package/dist/verify-6OGRY2PR.js +1 -0
  79. package/dist/version-4RHTDUNQ.js +1 -0
  80. package/dist/web/static/app.js +1 -562
  81. package/dist/web/static/index.html +114 -126
  82. package/dist/web/static/mirror.css +1 -1001
  83. package/dist/web/static/mirror.html +155 -178
  84. package/dist/web/static/mirror.js +1 -1125
  85. package/dist/web/static/onboard.css +1 -302
  86. package/dist/web/static/onboard.html +121 -145
  87. package/dist/web/static/onboard.js +1 -300
  88. package/dist/web/static/style.css +1 -602
  89. package/dist/web/static/utils.js +1 -0
  90. package/dist/web/static/workspace.css +1 -1568
  91. package/dist/web/static/workspace.html +369 -402
  92. package/dist/web/static/workspace.js +1 -1683
  93. package/dist/web-CIC7ZKBM.js +1 -0
  94. package/package.json +26 -4
  95. package/dist/api-JHHOZTL6.js +0 -162
  96. package/dist/auth-5QFJLW7J.js +0 -21
  97. package/dist/background-2EGCAAQH.js +0 -14
  98. package/dist/backlog-Q2NZCLNY.js +0 -24
  99. package/dist/chunk-2CMSCWQW.js +0 -162
  100. package/dist/chunk-4DVYJAJL.js +0 -57
  101. package/dist/chunk-5GDYH676.js +0 -271
  102. package/dist/chunk-5NLVGLD7.js +0 -66
  103. package/dist/chunk-6XTEAFZQ.js +0 -575
  104. package/dist/chunk-AQBSMYLT.js +0 -2025
  105. package/dist/chunk-BE46C7JW.js +0 -46
  106. package/dist/chunk-CLKIMCXZ.js +0 -139
  107. package/dist/chunk-DN4ASQ26.js +0 -167
  108. package/dist/chunk-DUWREZXK.js +0 -173
  109. package/dist/chunk-FCW3K6F2.js +0 -263
  110. package/dist/chunk-GFORWAMW.js +0 -251
  111. package/dist/chunk-GH7E2OJE.js +0 -223
  112. package/dist/chunk-GU2FZQ6A.js +0 -69
  113. package/dist/chunk-I7WI3BMB.js +0 -161
  114. package/dist/chunk-IOPKN5GD.js +0 -190
  115. package/dist/chunk-LBVHDGZE.js +0 -133
  116. package/dist/chunk-MGLJ53QN.js +0 -219
  117. package/dist/chunk-NETIY5UB.js +0 -134
  118. package/dist/chunk-NP47L7LG.js +0 -288
  119. package/dist/chunk-O6MG7TOH.js +0 -58
  120. package/dist/chunk-OPZYEVYR.js +0 -150
  121. package/dist/chunk-R3GPQC7I.js +0 -393
  122. package/dist/chunk-R5T3A2NQ.js +0 -166
  123. package/dist/chunk-RKB2JOV2.js +0 -43
  124. package/dist/chunk-RNG3K465.js +0 -80
  125. package/dist/chunk-TGTYKBGC.js +0 -86
  126. package/dist/chunk-UCX4VZCT.js +0 -681
  127. package/dist/chunk-WHLVZCQY.js +0 -245
  128. package/dist/chunk-Y6HMJZDJ.js +0 -1505
  129. package/dist/chunk-ZSBHUGWR.js +0 -262
  130. package/dist/claude-4BX3MJSK.js +0 -12
  131. package/dist/commands-2X4OB5RF.js +0 -128
  132. package/dist/commands-GLBCEVQK.js +0 -1044
  133. package/dist/commands-IINRNBYX.js +0 -232
  134. package/dist/config-RSNQJQPS.js +0 -8
  135. package/dist/config-loader-SXO674TF.js +0 -24
  136. package/dist/diagnose-7UPLS7I4.js +0 -12
  137. package/dist/display-IIUBEYWN.js +0 -58
  138. package/dist/extractor-D3XWOAXI.js +0 -129
  139. package/dist/history-6I6FADAU.js +0 -180
  140. package/dist/index.d.ts +0 -1
  141. package/dist/instance-registry-J7UJ7U4Z.js +0 -15
  142. package/dist/keybindings-PDXIOV3O.js +0 -15
  143. package/dist/loader-GKEYT6Y7.js +0 -58
  144. package/dist/network-JYGHQXAR.js +0 -279
  145. package/dist/notify-HPTALZDC.js +0 -14
  146. package/dist/openai-compat-R7EKWG6Z.js +0 -12
  147. package/dist/permissions-JUKXMNDH.js +0 -10
  148. package/dist/prompt-UWHSZU4P.js +0 -166
  149. package/dist/quality-ST7PPNFR.js +0 -16
  150. package/dist/repl-QHIZ2JGF.js +0 -3374
  151. package/dist/roadmap-5OBEKROY.js +0 -17
  152. package/dist/server-HCNIP7ZQ.js +0 -57
  153. package/dist/session-5EBECDUP.js +0 -21
  154. package/dist/skills-HBQQTYO4.js +0 -175
  155. package/dist/store-FKUTR7GW.js +0 -25
  156. package/dist/team-7BBBP5YQ.js +0 -385
  157. package/dist/telemetry-6R4EIE6O.js +0 -30
  158. package/dist/test-runner-AUAGIBNM.js +0 -619
  159. package/dist/theme-3SYJ3UQA.js +0 -14
  160. package/dist/upgrade-MZFH7OCN.js +0 -83
  161. package/dist/verify-JUDKTPKZ.js +0 -14
  162. package/dist/web-KS3FUGJA.js +0 -39
@@ -1,408 +1,375 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="zh-CN">
3
3
  <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Hypercore Workspace</title>
7
- <link rel="stylesheet" href="workspace.css">
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Hypercore Workspace</title>
7
+ <link rel="stylesheet" href="workspace.css">
8
8
  </head>
9
9
  <body>
10
- <!-- ===== Header ===== -->
11
- <header class="wb-header">
12
- <div class="wb-header-left">
13
- <span class="wb-logo">⚡ Hypercore</span>
14
- <span class="wb-badge" id="modelBadge">--</span>
15
- </div>
16
- <div class="wb-header-center">
17
- <span class="wb-status" id="connStatus">
18
- <span class="wb-dot wb-dot-disconnected"></span>
19
- 连接中…
20
- </span>
21
- </div>
22
- <div class="wb-header-right">
23
- <button class="wb-btn-icon" id="btnSettings" title="设置">⚙️</button>
24
- </div>
25
- </header>
26
-
27
- <!-- ===== Main Layout ===== -->
28
- <main class="wb-main">
29
- <!-- 左栏: 导航 -->
30
- <aside class="wb-sidebar">
31
- <nav class="wb-nav">
32
- <button class="wb-nav-item active" data-tab="chat">💬 Chat</button>
33
- <button class="wb-nav-item" data-tab="files">📁 Files</button>
34
- <button class="wb-nav-item" data-tab="memory">🧠 Memory</button>
35
- <button class="wb-nav-item" data-tab="tools">🔧 Tools</button>
36
- <div class="wb-nav-divider"></div>
37
- <button class="wb-nav-item" data-tab="team">👥 Team</button>
38
- <button class="wb-nav-item" data-tab="network">🌐 Network</button>
39
- </nav>
40
-
41
- <div class="wb-sidebar-section">
42
- <div class="wb-section-title">快捷命令</div>
43
- <div class="wb-shortcuts" id="shortcuts">
44
- <button class="wb-shortcut" data-cmd="/new">🆕 新会话</button>
45
- <button class="wb-shortcut" data-cmd="/save">💾 保存</button>
46
- <button class="wb-shortcut" data-cmd="/cost">💰 费用</button>
47
- <button class="wb-shortcut" data-cmd="/compact">📦 压缩</button>
48
- <button class="wb-shortcut" data-cmd="/memory">🧠 记忆</button>
49
- </div>
50
- </div>
51
-
52
- <div class="wb-sidebar-section" id="recommendedLinesSection" style="display:none">
53
- <div class="wb-section-title">推荐生产线</div>
54
- <div id="recommendedLines"></div>
55
- </div>
56
-
57
- <div class="wb-sidebar-section">
58
- <div class="wb-section-title">会话</div>
59
- <div class="wb-session-info" id="sessionInfo">
60
- <span class="wb-session-id">--</span>
61
- </div>
62
- </div>
63
- </aside>
64
-
65
- <!-- 中央: Tab 面板 -->
66
- <section class="wb-content">
67
- <!-- Chat Tab -->
68
- <div class="wb-tab-panel active" id="panel-chat">
69
- <div class="wb-chat-messages" id="chatMessages">
70
- <div class="wb-welcome-msg">
71
- <div class="wb-welcome-icon">⚡</div>
72
- <div class="wb-welcome-text">Hypercore Workspace</div>
73
- <div class="wb-welcome-sub">CLI 和 GUI 共享同一个会话,输入输出双向同步</div>
74
- </div>
75
- </div>
76
- <div class="wb-chat-input-area">
77
- <textarea class="wb-chat-input" id="chatInput"
78
- placeholder="输入消息… (Enter 发送, Shift+Enter 换行)"
79
- rows="1"></textarea>
80
- <button class="wb-btn-send" id="btnSend" title="发送">▶</button>
81
- </div>
82
- </div>
83
-
84
- <!-- Files Tab -->
85
- <div class="wb-tab-panel" id="panel-files">
86
- <div class="wb-panel-header">
87
- <span>📁 文件浏览器</span>
88
- <span class="wb-path-display" id="currentPath">.</span>
89
- </div>
90
- <div class="wb-file-list" id="fileList">
91
- <div class="wb-empty">加载中…</div>
92
- </div>
93
- </div>
94
-
95
- <!-- Memory Tab -->
96
- <div class="wb-tab-panel" id="panel-memory">
97
- <div class="wb-panel-header">
98
- <span>🧠 记忆系统</span>
99
- <div class="wb-search-box">
100
- <input type="text" id="memorySearch" placeholder="搜索记忆…" class="wb-search-input">
101
- <button id="btnMemorySearch" class="wb-search-btn">🔍</button>
102
- </div>
103
- </div>
104
- <div class="wb-memory-stats" id="memoryStats">
105
- <div class="wb-empty">加载中…</div>
106
- </div>
107
- <div class="wb-memory-list" id="memoryList"></div>
108
- </div>
109
-
110
- <!-- Tools Tab -->
111
- <div class="wb-tab-panel" id="panel-tools">
112
- <div class="wb-panel-header">🔧 工具注册表</div>
113
- <div class="wb-tool-list" id="toolList">
114
- <div class="wb-empty">加载中…</div>
115
- </div>
116
- </div>
117
-
118
- <!-- Team Tab -->
119
- <div class="wb-tab-panel" id="panel-team">
120
- <div class="wb-panel-header">
121
- <span>👥 团队协作</span>
122
- <span class="wb-team-online" id="teamOnlineCount"></span>
123
- </div>
124
-
125
- <!-- 未加入团队 -->
126
- <div id="teamJoinSection" class="wb-team-join">
127
- <div class="wb-team-join-card">
128
- <h3>创建或加入团队</h3>
129
- <div class="wb-join-form">
130
- <div class="wb-form-group">
131
- <label>创建新团队</label>
132
- <div class="wb-form-row">
133
- <input type="text" id="teamCreateName" placeholder="团队名称" class="wb-input">
134
- <input type="text" id="teamCreateOwner" placeholder="你的名字" class="wb-input wb-input-sm">
135
- <button id="btnTeamCreate" class="wb-btn-primary">创建</button>
136
- </div>
137
- </div>
138
- <div class="wb-form-divider">或</div>
139
- <div class="wb-form-group">
140
- <label>加入已有团队</label>
141
- <div class="wb-form-row">
142
- <input type="text" id="teamJoinCode" placeholder="加入码" class="wb-input">
143
- <input type="text" id="teamJoinName" placeholder="你的名字" class="wb-input wb-input-sm">
144
- <button id="btnTeamJoin" class="wb-btn-primary">加入</button>
145
- </div>
146
- </div>
147
- </div>
148
- </div>
149
- </div>
150
-
151
- <!-- 已加入团队 -->
152
- <div id="teamContent" style="display:none" class="wb-team-content">
153
- <div class="wb-team-info-bar">
154
- <span class="wb-team-name" id="teamName">--</span>
155
- <span class="wb-team-code" id="teamJoinCodeDisplay" title="点击复制加入码">--</span>
156
- </div>
157
-
158
- <div class="wb-team-subtabs">
159
- <button class="wb-subtab active" data-subtab="members">成员</button>
160
- <button class="wb-subtab" data-subtab="tasks">任务</button>
161
- <button class="wb-subtab" data-subtab="chat">聊天</button>
162
- </div>
163
-
164
- <!-- 成员列表 -->
165
- <div class="wb-subtab-panel active" id="subtab-members">
166
- <div class="wb-member-list" id="memberList"></div>
167
- </div>
168
-
169
- <!-- 任务看板 -->
170
- <div class="wb-subtab-panel" id="subtab-tasks">
171
- <div class="wb-kanban-header">
172
- <button id="btnAddTask" class="wb-btn-sm">+ 新任务</button>
173
- </div>
174
- <div id="taskAddForm" class="wb-task-add-form" style="display:none">
175
- <input type="text" id="taskTitle" placeholder="任务标题" class="wb-input">
176
- <select id="taskPriority" class="wb-select">
177
- <option value="A">A级</option>
178
- <option value="S">S级</option>
179
- <option value="B">B级</option>
180
- <option value="C">C级</option>
181
- </select>
182
- <button id="btnTaskSubmit" class="wb-btn-primary wb-btn-sm">添加</button>
183
- </div>
184
- <div class="wb-kanban" id="kanbanBoard">
185
- <div class="wb-kanban-col" data-status="todo">
186
- <div class="wb-kanban-col-header">📋 TODO</div>
187
- <div class="wb-kanban-cards" id="col-todo"></div>
188
- </div>
189
- <div class="wb-kanban-col" data-status="doing">
190
- <div class="wb-kanban-col-header">🔨 DOING</div>
191
- <div class="wb-kanban-cards" id="col-doing"></div>
192
- </div>
193
- <div class="wb-kanban-col" data-status="review">
194
- <div class="wb-kanban-col-header">👀 REVIEW</div>
195
- <div class="wb-kanban-cards" id="col-review"></div>
196
- </div>
197
- <div class="wb-kanban-col" data-status="done">
198
- <div class="wb-kanban-col-header">✅ DONE</div>
199
- <div class="wb-kanban-cards" id="col-done"></div>
200
- </div>
201
- </div>
202
- </div>
203
-
204
- <!-- 团队聊天 -->
205
- <div class="wb-subtab-panel" id="subtab-chat">
206
- <div class="wb-team-chat-messages" id="teamChatMessages">
207
- <div class="wb-empty">暂无消息</div>
208
- </div>
209
- <div class="wb-team-chat-typing" id="teamTyping"></div>
210
- <div class="wb-team-chat-input">
211
- <input type="text" id="teamChatInput" placeholder="输入消息…" class="wb-input">
212
- <button id="btnTeamChatSend" class="wb-btn-primary wb-btn-sm">发送</button>
213
- </div>
214
- </div>
215
- </div>
216
- </div>
217
-
218
- <!-- Network Tab -->
219
- <div class="wb-tab-panel" id="panel-network">
220
- <div class="wb-panel-header">
221
- <span>🌐 Hyper Network</span>
222
- <button id="btnRunNetwork" class="wb-btn-primary wb-btn-sm" style="margin-left:auto">运行匹配</button>
223
- </div>
224
-
225
- <!-- 需要先加入团队 -->
226
- <div id="networkNeedTeam" class="wb-empty-state">
227
- <div class="wb-empty-icon">🔗</div>
228
- <div>请先在 Team 面板加入团队</div>
229
- </div>
230
-
231
- <!-- 已有团队 -->
232
- <div id="networkContent" style="display:none" class="wb-network-content">
233
- <!-- 我的档案 -->
234
- <div class="wb-network-section">
235
- <div class="wb-section-title">我的档案</div>
236
- <div class="wb-profile-field">
237
- <label>Skills</label>
238
- <div class="wb-tag-list" id="profileSkills"></div>
239
- <div class="wb-tag-add">
240
- <input type="text" id="addSkill" placeholder="添加技能…" class="wb-input wb-input-xs">
241
- <button class="wb-btn-xs" onclick="workspace.addProfileTag('skills','addSkill')">+</button>
242
- </div>
243
- </div>
244
- <div class="wb-profile-field">
245
- <label>Needs</label>
246
- <div class="wb-tag-list" id="profileNeeds"></div>
247
- <div class="wb-tag-add">
248
- <input type="text" id="addNeed" placeholder="添加需求…" class="wb-input wb-input-xs">
249
- <button class="wb-btn-xs" onclick="workspace.addProfileTag('needs','addNeed')">+</button>
250
- </div>
251
- </div>
252
- <div class="wb-profile-field">
253
- <label>Offerings</label>
254
- <div class="wb-tag-list" id="profileOfferings"></div>
255
- <div class="wb-tag-add">
256
- <input type="text" id="addOffering" placeholder="添加提供…" class="wb-input wb-input-xs">
257
- <button class="wb-btn-xs" onclick="workspace.addProfileTag('offerings','addOffering')">+</button>
258
- </div>
259
- </div>
260
- </div>
261
-
262
- <!-- 匹配轮次 -->
263
- <div class="wb-network-section">
264
- <div class="wb-section-title">匹配轮次</div>
265
- <div id="networkRoundList" class="wb-round-list">
266
- <div class="wb-empty">暂无轮次</div>
267
- </div>
268
- </div>
269
-
270
- <!-- 最新摘要 -->
271
- <div class="wb-network-section">
272
- <div class="wb-section-title">最新摘要</div>
273
- <div id="networkDigest" class="wb-digest-area">
274
- <div class="wb-empty">暂无摘要</div>
275
- </div>
276
- </div>
277
- </div>
278
- </div>
279
- </section>
280
-
281
- <!-- 右栏: 上下文 -->
282
- <aside class="wb-context">
283
- <div class="wb-context-section">
284
- <div class="wb-section-title">会话信息</div>
285
- <div class="wb-context-item">
286
- <span class="wb-ctx-label">Session</span>
287
- <span class="wb-ctx-value" id="ctxSession">--</span>
288
- </div>
289
- <div class="wb-context-item">
290
- <span class="wb-ctx-label">Model</span>
291
- <span class="wb-ctx-value" id="ctxModel">--</span>
292
- </div>
293
- <div class="wb-context-item">
294
- <span class="wb-ctx-label">Provider</span>
295
- <span class="wb-ctx-value" id="ctxProvider">--</span>
296
- </div>
297
- </div>
298
-
299
- <div class="wb-context-section">
300
- <div class="wb-section-title">Token 用量</div>
301
- <div class="wb-token-bar">
302
- <div class="wb-token-bar-fill" id="ctxTokenBar" style="width: 0%"></div>
303
- </div>
304
- <div class="wb-context-item">
305
- <span class="wb-ctx-label">Input</span>
306
- <span class="wb-ctx-value" id="ctxInputTokens">0</span>
307
- </div>
308
- <div class="wb-context-item">
309
- <span class="wb-ctx-label">Output</span>
310
- <span class="wb-ctx-value" id="ctxOutputTokens">0</span>
311
- </div>
312
- <div class="wb-context-item">
313
- <span class="wb-ctx-label">Total</span>
314
- <span class="wb-ctx-value wb-ctx-highlight" id="ctxTotalTokens">0</span>
315
- </div>
316
- </div>
317
-
318
- <div class="wb-context-section">
319
- <div class="wb-section-title">Git</div>
320
- <div class="wb-context-item">
321
- <span class="wb-ctx-label">Branch</span>
322
- <span class="wb-ctx-value wb-ctx-mono" id="ctxGitBranch">--</span>
323
- </div>
324
- <div class="wb-context-item">
325
- <span class="wb-ctx-label">Status</span>
326
- <span class="wb-ctx-value" id="ctxGitStatus">--</span>
327
- </div>
328
- </div>
329
-
330
- <div class="wb-context-section">
331
- <div class="wb-section-title">工具</div>
332
- <div class="wb-ctx-value" id="ctxToolCount">0 个注册工具</div>
333
- </div>
334
-
335
- <div class="wb-context-section">
336
- <div class="wb-section-title">工作目录</div>
337
- <div class="wb-ctx-value wb-ctx-mono" id="ctxCwd">--</div>
338
- </div>
339
- </aside>
340
- </main>
341
-
342
- <!-- ===== Footer ===== -->
343
- <footer class="wb-footer">
344
- <span id="footerConn">⚪ 未连接</span>
345
- <span id="footerSession">--</span>
346
- <span id="footerModel">--</span>
347
- <span id="footerTokens">0 / 0</span>
348
- </footer>
349
-
350
- <!-- Task Edit Modal -->
351
- <div class="wb-modal-overlay" id="taskEditModal">
352
- <div class="wb-modal" style="width: min(500px, 90vw)">
353
- <div class="wb-modal-header">
354
- <span class="wb-modal-title">编辑任务</span>
355
- <button class="wb-modal-close" onclick="document.getElementById('taskEditModal').classList.remove('visible')">&times;</button>
356
- </div>
357
- <div class="wb-modal-form">
358
- <input type="hidden" id="editTaskId">
359
- <div class="wb-form-group">
360
- <label>标题</label>
361
- <input type="text" id="editTaskTitle" class="wb-input">
362
- </div>
363
- <div class="wb-form-row">
364
- <div class="wb-form-group" style="flex:1">
365
- <label>状态</label>
366
- <select id="editTaskStatus" class="wb-select">
367
- <option value="todo">TODO</option>
368
- <option value="doing">DOING</option>
369
- <option value="review">REVIEW</option>
370
- <option value="done">DONE</option>
371
- </select>
372
- </div>
373
- <div class="wb-form-group" style="flex:1">
374
- <label>优先级</label>
375
- <select id="editTaskPriority" class="wb-select">
376
- <option value="S">S级</option>
377
- <option value="A">A级</option>
378
- <option value="B">B级</option>
379
- <option value="C">C级</option>
380
- </select>
381
- </div>
382
- </div>
383
- <div class="wb-form-group">
384
- <label>指派</label>
385
- <input type="text" id="editTaskAssignee" class="wb-input" placeholder="成员名称">
386
- </div>
387
- <div class="wb-form-actions">
388
- <button id="btnTaskDelete" class="wb-btn-danger wb-btn-sm">删除</button>
389
- <button id="btnTaskSave" class="wb-btn-primary wb-btn-sm">保存</button>
390
- </div>
391
- </div>
392
- </div>
393
- </div>
394
-
395
- <!-- File Preview Modal -->
396
- <div class="wb-modal-overlay" id="filePreviewModal">
397
- <div class="wb-modal">
398
- <div class="wb-modal-header">
399
- <span class="wb-modal-title" id="previewFileName">--</span>
400
- <button class="wb-modal-close" id="btnClosePreview">&times;</button>
401
- </div>
402
- <pre class="wb-modal-body"><code id="previewContent"></code></pre>
403
- </div>
404
- </div>
405
-
406
- <script src="workspace.js"></script>
10
+ <header class="wb-header">
11
+ <div class="wb-header-left">
12
+ <span class="wb-logo">⚡ Hypercore</span>
13
+ <span class="wb-badge" id="modelBadge">--</span>
14
+ </div>
15
+ <div class="wb-header-center">
16
+ <span class="wb-status" id="connStatus">
17
+ <span class="wb-dot wb-dot-disconnected"></span>
18
+ 连接中…
19
+ </span>
20
+ </div>
21
+ <div class="wb-header-right">
22
+ <button class="wb-btn-icon" id="btnSettings" title="设置">⚙️</button>
23
+ </div>
24
+ </header>
25
+ <main class="wb-main">
26
+ <aside class="wb-sidebar">
27
+ <nav class="wb-nav">
28
+ <button class="wb-nav-item active" data-tab="chat">💬 Chat</button>
29
+ <button class="wb-nav-item" data-tab="files">📁 Files</button>
30
+ <button class="wb-nav-item" data-tab="memory">🧠 Memory</button>
31
+ <button class="wb-nav-item" data-tab="tools">🔧 Tools</button>
32
+ <div class="wb-nav-divider"></div>
33
+ <button class="wb-nav-item" data-tab="team">👥 Team</button>
34
+ <button class="wb-nav-item" data-tab="network">🌐 Network</button>
35
+ </nav>
36
+ <div class="wb-sidebar-section">
37
+ <div class="wb-section-title">快捷命令</div>
38
+ <div class="wb-shortcuts" id="shortcuts">
39
+ <button class="wb-shortcut" data-cmd="/new">🆕 新会话</button>
40
+ <button class="wb-shortcut" data-cmd="/save">💾 保存</button>
41
+ <button class="wb-shortcut" data-cmd="/cost">💰 费用</button>
42
+ <button class="wb-shortcut" data-cmd="/compact">📦 压缩</button>
43
+ <button class="wb-shortcut" data-cmd="/memory">🧠 记忆</button>
44
+ </div>
45
+ </div>
46
+ <div class="wb-sidebar-section" id="recommendedLinesSection" style="display:none">
47
+ <div class="wb-section-title">推荐生产线</div>
48
+ <div id="recommendedLines"></div>
49
+ </div>
50
+ <div class="wb-sidebar-section">
51
+ <div class="wb-section-title">会话</div>
52
+ <div class="wb-session-info" id="sessionInfo">
53
+ <span class="wb-session-id">--</span>
54
+ </div>
55
+ </div>
56
+ </aside>
57
+ <section class="wb-content">
58
+ <div class="wb-tab-panel active" id="panel-chat">
59
+ <div class="wb-chat-messages" id="chatMessages">
60
+ <div class="wb-welcome-msg">
61
+ <div class="wb-welcome-icon">⚡</div>
62
+ <div class="wb-welcome-text">Hypercore Workspace</div>
63
+ <div class="wb-welcome-sub">CLI 和 GUI 共享同一个会话,输入输出双向同步</div>
64
+ </div>
65
+ </div>
66
+ <div class="wb-chat-input-area">
67
+ <textarea class="wb-chat-input" id="chatInput"
68
+ placeholder="输入消息… (Enter 发送, Shift+Enter 换行)"
69
+ rows="1"></textarea>
70
+ <button class="wb-btn-send" id="btnSend" title="发送">▶</button>
71
+ </div>
72
+ </div>
73
+ <div class="wb-tab-panel" id="panel-files">
74
+ <div class="wb-panel-header">
75
+ <span>📁 文件浏览器</span>
76
+ <span class="wb-path-display" id="currentPath">.</span>
77
+ </div>
78
+ <div class="wb-file-list" id="fileList">
79
+ <div class="wb-empty">加载中…</div>
80
+ </div>
81
+ </div>
82
+ <div class="wb-tab-panel" id="panel-memory">
83
+ <div class="wb-panel-header">
84
+ <span>🧠 记忆系统</span>
85
+ <div class="wb-search-box">
86
+ <input type="text" id="memorySearch" placeholder="搜索记忆…" class="wb-search-input">
87
+ <button id="btnMemorySearch" class="wb-search-btn">🔍</button>
88
+ </div>
89
+ </div>
90
+ <div class="wb-memory-stats" id="memoryStats">
91
+ <div class="wb-empty">加载中…</div>
92
+ </div>
93
+ <div class="wb-memory-list" id="memoryList"></div>
94
+ </div>
95
+ <div class="wb-tab-panel" id="panel-tools">
96
+ <div class="wb-panel-header">🔧 工具注册表</div>
97
+ <div class="wb-tool-list" id="toolList">
98
+ <div class="wb-empty">加载中…</div>
99
+ </div>
100
+ </div>
101
+ <div class="wb-tab-panel" id="panel-team">
102
+ <div class="wb-panel-header">
103
+ <span>👥 团队协作</span>
104
+ <span class="wb-team-online" id="teamOnlineCount"></span>
105
+ </div>
106
+ <div id="teamJoinSection" class="wb-team-join">
107
+ <div class="wb-team-join-card">
108
+ <h3>创建或加入团队</h3>
109
+ <div class="wb-join-form">
110
+ <div class="wb-form-group">
111
+ <label>创建新团队</label>
112
+ <div class="wb-form-row">
113
+ <input type="text" id="teamCreateName" placeholder="团队名称" class="wb-input">
114
+ <input type="text" id="teamCreateOwner" placeholder="你的名字" class="wb-input wb-input-sm">
115
+ <button id="btnTeamCreate" class="wb-btn-primary">创建</button>
116
+ </div>
117
+ </div>
118
+ <div class="wb-form-divider">或</div>
119
+ <div class="wb-form-group">
120
+ <label>加入已有团队</label>
121
+ <div class="wb-form-row">
122
+ <input type="text" id="teamJoinCode" placeholder="加入码" class="wb-input">
123
+ <input type="text" id="teamJoinName" placeholder="你的名字" class="wb-input wb-input-sm">
124
+ <button id="btnTeamJoin" class="wb-btn-primary">加入</button>
125
+ </div>
126
+ </div>
127
+ </div>
128
+ </div>
129
+ </div>
130
+ <div id="teamContent" style="display:none" class="wb-team-content">
131
+ <div class="wb-team-info-bar">
132
+ <span class="wb-team-name" id="teamName">--</span>
133
+ <span class="wb-team-code" id="teamJoinCodeDisplay" title="点击复制加入码">--</span>
134
+ </div>
135
+ <div class="wb-team-subtabs">
136
+ <button class="wb-subtab active" data-subtab="members">成员</button>
137
+ <button class="wb-subtab" data-subtab="tasks">任务</button>
138
+ <button class="wb-subtab" data-subtab="chat">聊天</button>
139
+ </div>
140
+ <div class="wb-subtab-panel active" id="subtab-members">
141
+ <div class="wb-member-list" id="memberList"></div>
142
+ </div>
143
+ <div class="wb-subtab-panel" id="subtab-tasks">
144
+ <div class="wb-kanban-header">
145
+ <button id="btnAddTask" class="wb-btn-sm">+ 新任务</button>
146
+ </div>
147
+ <div id="taskAddForm" class="wb-task-add-form" style="display:none">
148
+ <input type="text" id="taskTitle" placeholder="任务标题" class="wb-input">
149
+ <select id="taskPriority" class="wb-select">
150
+ <option value="A">A级</option>
151
+ <option value="S">S级</option>
152
+ <option value="B">B级</option>
153
+ <option value="C">C级</option>
154
+ </select>
155
+ <button id="btnTaskSubmit" class="wb-btn-primary wb-btn-sm">添加</button>
156
+ </div>
157
+ <div class="wb-kanban" id="kanbanBoard">
158
+ <div class="wb-kanban-col" data-status="todo">
159
+ <div class="wb-kanban-col-header">📋 TODO</div>
160
+ <div class="wb-kanban-cards" id="col-todo"></div>
161
+ </div>
162
+ <div class="wb-kanban-col" data-status="doing">
163
+ <div class="wb-kanban-col-header">🔨 DOING</div>
164
+ <div class="wb-kanban-cards" id="col-doing"></div>
165
+ </div>
166
+ <div class="wb-kanban-col" data-status="review">
167
+ <div class="wb-kanban-col-header">👀 REVIEW</div>
168
+ <div class="wb-kanban-cards" id="col-review"></div>
169
+ </div>
170
+ <div class="wb-kanban-col" data-status="done">
171
+ <div class="wb-kanban-col-header">✅ DONE</div>
172
+ <div class="wb-kanban-cards" id="col-done"></div>
173
+ </div>
174
+ </div>
175
+ </div>
176
+ <div class="wb-subtab-panel" id="subtab-chat">
177
+ <div class="wb-team-chat-messages" id="teamChatMessages">
178
+ <div class="wb-empty">暂无消息</div>
179
+ </div>
180
+ <div class="wb-team-chat-typing" id="teamTyping"></div>
181
+ <div class="wb-team-chat-input">
182
+ <input type="text" id="teamChatInput" placeholder="输入消息…" class="wb-input">
183
+ <button id="btnTeamChatSend" class="wb-btn-primary wb-btn-sm">发送</button>
184
+ </div>
185
+ </div>
186
+ </div>
187
+ </div>
188
+ <div class="wb-tab-panel" id="panel-network">
189
+ <div class="wb-panel-header">
190
+ <span>🌐 Hyper Network</span>
191
+ <button id="btnRunNetwork" class="wb-btn-primary wb-btn-sm" style="margin-left:auto">运行匹配</button>
192
+ </div>
193
+ <div id="networkNeedTeam" class="wb-empty-state">
194
+ <div class="wb-empty-icon">🔗</div>
195
+ <div>请先在 Team 面板加入团队</div>
196
+ </div>
197
+ <div id="networkContent" style="display:none" class="wb-network-content">
198
+ <div class="wb-network-section">
199
+ <div class="wb-section-title">我的档案</div>
200
+ <div class="wb-profile-field">
201
+ <label>Skills</label>
202
+ <div class="wb-tag-list" id="profileSkills"></div>
203
+ <div class="wb-tag-add">
204
+ <input type="text" id="addSkill" placeholder="添加技能…" class="wb-input wb-input-xs">
205
+ <button class="wb-btn-xs" onclick="workspace.addProfileTag('skills','addSkill')">+</button>
206
+ </div>
207
+ </div>
208
+ <div class="wb-profile-field">
209
+ <label>Needs</label>
210
+ <div class="wb-tag-list" id="profileNeeds"></div>
211
+ <div class="wb-tag-add">
212
+ <input type="text" id="addNeed" placeholder="添加需求…" class="wb-input wb-input-xs">
213
+ <button class="wb-btn-xs" onclick="workspace.addProfileTag('needs','addNeed')">+</button>
214
+ </div>
215
+ </div>
216
+ <div class="wb-profile-field">
217
+ <label>Offerings</label>
218
+ <div class="wb-tag-list" id="profileOfferings"></div>
219
+ <div class="wb-tag-add">
220
+ <input type="text" id="addOffering" placeholder="添加提供…" class="wb-input wb-input-xs">
221
+ <button class="wb-btn-xs" onclick="workspace.addProfileTag('offerings','addOffering')">+</button>
222
+ </div>
223
+ </div>
224
+ </div>
225
+ <div class="wb-network-section">
226
+ <div class="wb-section-title">匹配轮次</div>
227
+ <div id="networkRoundList" class="wb-round-list">
228
+ <div class="wb-empty">暂无轮次</div>
229
+ </div>
230
+ </div>
231
+ <div class="wb-network-section">
232
+ <div class="wb-section-title">最新摘要</div>
233
+ <div id="networkDigest" class="wb-digest-area">
234
+ <div class="wb-empty">暂无摘要</div>
235
+ </div>
236
+ </div>
237
+ </div>
238
+ </div>
239
+ </section>
240
+ <aside class="wb-context">
241
+ <div class="wb-context-section">
242
+ <div class="wb-section-title">会话信息</div>
243
+ <div class="wb-context-item">
244
+ <span class="wb-ctx-label">Session</span>
245
+ <span class="wb-ctx-value" id="ctxSession">--</span>
246
+ </div>
247
+ <div class="wb-context-item">
248
+ <span class="wb-ctx-label">Model</span>
249
+ <span class="wb-ctx-value" id="ctxModel">--</span>
250
+ </div>
251
+ <div class="wb-context-item">
252
+ <span class="wb-ctx-label">Provider</span>
253
+ <span class="wb-ctx-value" id="ctxProvider">--</span>
254
+ </div>
255
+ </div>
256
+ <div class="wb-context-section">
257
+ <div class="wb-section-title">Token 用量</div>
258
+ <div class="wb-token-bar">
259
+ <div class="wb-token-bar-fill" id="ctxTokenBar" style="width: 0%"></div>
260
+ </div>
261
+ <div class="wb-context-item">
262
+ <span class="wb-ctx-label">Input</span>
263
+ <span class="wb-ctx-value" id="ctxInputTokens">0</span>
264
+ </div>
265
+ <div class="wb-context-item">
266
+ <span class="wb-ctx-label">Output</span>
267
+ <span class="wb-ctx-value" id="ctxOutputTokens">0</span>
268
+ </div>
269
+ <div class="wb-context-item">
270
+ <span class="wb-ctx-label">Total</span>
271
+ <span class="wb-ctx-value wb-ctx-highlight" id="ctxTotalTokens">0</span>
272
+ </div>
273
+ </div>
274
+ <div class="wb-context-section">
275
+ <div class="wb-section-title">Git</div>
276
+ <div class="wb-context-item">
277
+ <span class="wb-ctx-label">Branch</span>
278
+ <span class="wb-ctx-value wb-ctx-mono" id="ctxGitBranch">--</span>
279
+ </div>
280
+ <div class="wb-context-item">
281
+ <span class="wb-ctx-label">Status</span>
282
+ <span class="wb-ctx-value" id="ctxGitStatus">--</span>
283
+ </div>
284
+ </div>
285
+ <div class="wb-context-section">
286
+ <div class="wb-section-title">工具</div>
287
+ <div class="wb-ctx-value" id="ctxToolCount">0 个注册工具</div>
288
+ </div>
289
+ <div class="wb-context-section">
290
+ <div class="wb-section-title">工作目录</div>
291
+ <div class="wb-ctx-value wb-ctx-mono" id="ctxCwd">--</div>
292
+ </div>
293
+ </aside>
294
+ </main>
295
+ <footer class="wb-footer">
296
+ <span id="footerConn">⚪ 未连接</span>
297
+ <span id="footerSession">--</span>
298
+ <span id="footerModel">--</span>
299
+ <span id="footerTokens">0 / 0</span>
300
+ </footer>
301
+ <div class="wb-modal-overlay" id="taskEditModal">
302
+ <div class="wb-modal" style="width: min(500px, 90vw)">
303
+ <div class="wb-modal-header">
304
+ <span class="wb-modal-title">编辑任务</span>
305
+ <button class="wb-modal-close" onclick="document.getElementById('taskEditModal').classList.remove('visible')">&times;</button>
306
+ </div>
307
+ <div class="wb-modal-form">
308
+ <input type="hidden" id="editTaskId">
309
+ <div class="wb-form-group">
310
+ <label>标题</label>
311
+ <input type="text" id="editTaskTitle" class="wb-input">
312
+ </div>
313
+ <div class="wb-form-row">
314
+ <div class="wb-form-group" style="flex:1">
315
+ <label>状态</label>
316
+ <select id="editTaskStatus" class="wb-select">
317
+ <option value="todo">TODO</option>
318
+ <option value="doing">DOING</option>
319
+ <option value="review">REVIEW</option>
320
+ <option value="done">DONE</option>
321
+ </select>
322
+ </div>
323
+ <div class="wb-form-group" style="flex:1">
324
+ <label>优先级</label>
325
+ <select id="editTaskPriority" class="wb-select">
326
+ <option value="S">S级</option>
327
+ <option value="A">A级</option>
328
+ <option value="B">B级</option>
329
+ <option value="C">C级</option>
330
+ </select>
331
+ </div>
332
+ </div>
333
+ <div class="wb-form-group">
334
+ <label>指派</label>
335
+ <input type="text" id="editTaskAssignee" class="wb-input" placeholder="成员名称">
336
+ </div>
337
+ <div class="wb-form-actions">
338
+ <button id="btnTaskDelete" class="wb-btn-danger wb-btn-sm">删除</button>
339
+ <button id="btnTaskSave" class="wb-btn-primary wb-btn-sm">保存</button>
340
+ </div>
341
+ </div>
342
+ </div>
343
+ </div>
344
+ <div class="wb-modal-overlay" id="filePreviewModal">
345
+ <div class="wb-modal">
346
+ <div class="wb-modal-header">
347
+ <span class="wb-modal-title" id="previewFileName">--</span>
348
+ <button class="wb-modal-close" id="btnClosePreview">&times;</button>
349
+ </div>
350
+ <pre class="wb-modal-body"><code id="previewContent"></code></pre>
351
+ </div>
352
+ </div>
353
+ <div class="wb-modal-overlay" id="promptModal">
354
+ <div class="wb-modal wb-prompt-modal">
355
+ <div class="wb-modal-header">
356
+ <span class="wb-modal-title" id="promptTitle">交互请求</span>
357
+ <button class="wb-modal-close" id="btnClosePrompt">&times;</button>
358
+ </div>
359
+ <div class="wb-modal-form">
360
+ <div class="wb-prompt-message" id="promptMessageText">--</div>
361
+ <div class="wb-prompt-fallback" id="promptFallbackText" style="display:none"></div>
362
+ <div class="wb-prompt-options" id="promptOptions"></div>
363
+ <div class="wb-form-group" id="promptInputGroup" style="display:none">
364
+ <label for="promptInputField">输入</label>
365
+ <input type="text" id="promptInputField" class="wb-input" autocomplete="off">
366
+ <div class="wb-prompt-validation" id="promptValidation"></div>
367
+ </div>
368
+ <div class="wb-form-actions wb-prompt-actions" id="promptActions"></div>
369
+ </div>
370
+ </div>
371
+ </div>
372
+ <script src="/utils.js"></script>
373
+ <script src="workspace.js"></script>
407
374
  </body>
408
- </html>
375
+ </html>