hypercore-cli 1.1.1 → 1.3.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 (158) 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-Q2TX5JJL.js +1 -0
  5. package/dist/auth-X6CUT3DW.js +1 -0
  6. package/dist/background-ACODXSUG.js +1 -0
  7. package/dist/backlog-JD2IM336.js +1 -0
  8. package/dist/chunk-2QI2IU2V.js +1 -0
  9. package/dist/chunk-3KFRDIPQ.js +1 -0
  10. package/dist/chunk-42C5J7PN.js +1 -0
  11. package/dist/chunk-4D7XVJ7Q.js +1 -0
  12. package/dist/chunk-545IGTXV.js +1 -0
  13. package/dist/chunk-5KUSGQP2.js +1 -0
  14. package/dist/chunk-AUQ64BK2.js +1 -0
  15. package/dist/chunk-AV244H5C.js +1 -0
  16. package/dist/chunk-BQVBEFS4.js +1 -0
  17. package/dist/chunk-BYWQLFP2.js +1 -0
  18. package/dist/chunk-COITWWZJ.js +1 -0
  19. package/dist/chunk-CR7UUJVX.js +1 -0
  20. package/dist/chunk-E3MULLBX.js +1 -0
  21. package/dist/chunk-EWBV7YPP.js +1 -0
  22. package/dist/chunk-EZHYVJGQ.js +1 -0
  23. package/dist/chunk-FAKXBY7Q.js +1 -0
  24. package/dist/chunk-FHGATV5B.js +1 -0
  25. package/dist/chunk-I2G27Y5P.js +1 -0
  26. package/dist/chunk-IKF43TX2.js +1 -0
  27. package/dist/chunk-INSPHCBN.js +1 -0
  28. package/dist/chunk-LQMDUKIE.js +1 -0
  29. package/dist/chunk-M3MTKGA5.js +1 -0
  30. package/dist/chunk-MPO54FU3.js +1 -0
  31. package/dist/chunk-PVKCZI6A.js +1 -0
  32. package/dist/chunk-Q7KEPCYL.js +1 -0
  33. package/dist/chunk-R5XD3NT2.js +1 -0
  34. package/dist/chunk-ROBZ6PAL.js +1 -0
  35. package/dist/chunk-RXB5BS2N.js +1 -0
  36. package/dist/chunk-RZ3HNYMT.js +1 -0
  37. package/dist/chunk-UCGLRMTG.js +1 -0
  38. package/dist/chunk-UEHJVRKB.js +1 -0
  39. package/dist/chunk-UZYX5GGF.js +1 -0
  40. package/dist/chunk-XQJBB725.js +1 -0
  41. package/dist/chunk-ZB5ZQSXH.js +1 -0
  42. package/dist/claude-US2QPRBA.js +1 -0
  43. package/dist/commands-5TFN74MD.js +1 -0
  44. package/dist/commands-EKPWCB3T.js +1 -0
  45. package/dist/commands-QHJLREPM.js +1 -0
  46. package/dist/config-2OUL5FLS.js +1 -0
  47. package/dist/config-loader-N7IBWN2P.js +1 -0
  48. package/dist/diagnose-NLHN4SAJ.js +1 -0
  49. package/dist/display-TB5YACJV.js +1 -0
  50. package/dist/extractor-3KTM2IUL.js +1 -0
  51. package/dist/feature-flag-VVIF5FJG.js +1 -0
  52. package/dist/history-GVNDPXXQ.js +1 -0
  53. package/dist/index.js +1 -402
  54. package/dist/instance-registry-I5AIVJE2.js +1 -0
  55. package/dist/keybindings-RN3A7CRW.js +1 -0
  56. package/dist/loader-3IKPXP4R.js +1 -0
  57. package/dist/network-GI2F3IDE.js +1 -0
  58. package/dist/notify-O6FNVHC4.js +1 -0
  59. package/dist/openai-compat-IPCMINVF.js +1 -0
  60. package/dist/permissions-5O7KVAXU.js +1 -0
  61. package/dist/prompt-VWFPFM4N.js +1 -0
  62. package/dist/quality-GPQD25UL.js +1 -0
  63. package/dist/repl-YNXCDVU4.js +1 -0
  64. package/dist/roadmap-QRZODSNJ.js +1 -0
  65. package/dist/server-USQP4GC4.js +1 -0
  66. package/dist/session-5HDDQQP6.js +1 -0
  67. package/dist/skills-DXWSVJSU.js +1 -0
  68. package/dist/store-WXXTKTTL.js +1 -0
  69. package/dist/team-VTPJ3WRT.js +1 -0
  70. package/dist/telemetry-NT4UZLBS.js +1 -0
  71. package/dist/test-runner-F6B6RH3S.js +1 -0
  72. package/dist/theme-JJJ6ABR2.js +1 -0
  73. package/dist/upgrade-RUG3R7R5.js +1 -0
  74. package/dist/verify-6OGRY2PR.js +1 -0
  75. package/dist/version-DLROA5JN.js +1 -0
  76. package/dist/web/static/app.js +1 -562
  77. package/dist/web/static/index.html +114 -126
  78. package/dist/web/static/mirror.css +1 -1001
  79. package/dist/web/static/mirror.html +155 -178
  80. package/dist/web/static/mirror.js +1 -1125
  81. package/dist/web/static/onboard.css +1 -302
  82. package/dist/web/static/onboard.html +121 -145
  83. package/dist/web/static/onboard.js +1 -300
  84. package/dist/web/static/style.css +1 -602
  85. package/dist/web/static/utils.js +1 -0
  86. package/dist/web/static/workspace.css +1 -1568
  87. package/dist/web/static/workspace.html +369 -402
  88. package/dist/web/static/workspace.js +1 -1683
  89. package/dist/web-P5YUKEAU.js +1 -0
  90. package/package.json +25 -4
  91. package/dist/api-D4PUN5BN.js +0 -162
  92. package/dist/auth-UTR4I6QY.js +0 -21
  93. package/dist/background-2EGCAAQH.js +0 -14
  94. package/dist/backlog-Q2NZCLNY.js +0 -24
  95. package/dist/chunk-2CMSCWQW.js +0 -162
  96. package/dist/chunk-4DVYJAJL.js +0 -57
  97. package/dist/chunk-77FRUHTU.js +0 -271
  98. package/dist/chunk-7ZYMJFCA.js +0 -251
  99. package/dist/chunk-BE46C7JW.js +0 -46
  100. package/dist/chunk-CM423E2U.js +0 -133
  101. package/dist/chunk-E4NKO2KI.js +0 -263
  102. package/dist/chunk-GH7E2OJE.js +0 -223
  103. package/dist/chunk-GMLQ7GZ5.js +0 -134
  104. package/dist/chunk-GU2FZQ6A.js +0 -69
  105. package/dist/chunk-IOPKN5GD.js +0 -190
  106. package/dist/chunk-LWDNLX6B.js +0 -2025
  107. package/dist/chunk-MGLJ53QN.js +0 -219
  108. package/dist/chunk-NHPDLYEW.js +0 -139
  109. package/dist/chunk-OGQGKMDX.js +0 -173
  110. package/dist/chunk-OPZYEVYR.js +0 -150
  111. package/dist/chunk-OWAOKDIN.js +0 -1505
  112. package/dist/chunk-R3GPQC7I.js +0 -393
  113. package/dist/chunk-RKB2JOV2.js +0 -43
  114. package/dist/chunk-RNG3K465.js +0 -80
  115. package/dist/chunk-SHJQMIJL.js +0 -288
  116. package/dist/chunk-SVF2VWOZ.js +0 -145
  117. package/dist/chunk-TGTYKBGC.js +0 -86
  118. package/dist/chunk-V2EBSFPU.js +0 -575
  119. package/dist/chunk-VJDQNNSO.js +0 -681
  120. package/dist/chunk-VQ35XX7B.js +0 -167
  121. package/dist/chunk-WHLVZCQY.js +0 -245
  122. package/dist/chunk-XMGHVNH2.js +0 -66
  123. package/dist/chunk-YWOSOTUO.js +0 -58
  124. package/dist/chunk-ZQRNV2US.js +0 -166
  125. package/dist/chunk-ZSBHUGWR.js +0 -262
  126. package/dist/claude-O5FSOXZC.js +0 -12
  127. package/dist/commands-43PLOWRU.js +0 -128
  128. package/dist/commands-5YVUSUMP.js +0 -232
  129. package/dist/commands-VZMZJFZF.js +0 -1044
  130. package/dist/config-WXXEEEVW.js +0 -8
  131. package/dist/config-loader-SXO674TF.js +0 -24
  132. package/dist/diagnose-BX45APUZ.js +0 -12
  133. package/dist/display-IIUBEYWN.js +0 -58
  134. package/dist/extractor-R5ABXNTJ.js +0 -129
  135. package/dist/history-JPXZEOT3.js +0 -180
  136. package/dist/index.d.ts +0 -1
  137. package/dist/instance-registry-6NJTCAE4.js +0 -15
  138. package/dist/keybindings-ADWNOX5M.js +0 -15
  139. package/dist/loader-AXDDCB2G.js +0 -58
  140. package/dist/network-V3O4UZYZ.js +0 -279
  141. package/dist/notify-HPTALZDC.js +0 -14
  142. package/dist/openai-compat-UFDV2SCK.js +0 -12
  143. package/dist/permissions-JUKXMNDH.js +0 -10
  144. package/dist/prompt-5CZ34WGA.js +0 -166
  145. package/dist/quality-ST7PPNFR.js +0 -16
  146. package/dist/repl-EOWP6AAB.js +0 -3374
  147. package/dist/roadmap-5OBEKROY.js +0 -17
  148. package/dist/server-BB5AENWU.js +0 -57
  149. package/dist/session-5NDKKFLN.js +0 -21
  150. package/dist/skills-JVLIQVJN.js +0 -175
  151. package/dist/store-G7KRD4PN.js +0 -25
  152. package/dist/team-FVNNVDBY.js +0 -385
  153. package/dist/telemetry-6R4EIE6O.js +0 -30
  154. package/dist/test-runner-REKSVPPY.js +0 -619
  155. package/dist/theme-3SYJ3UQA.js +0 -14
  156. package/dist/upgrade-YSXCO63I.js +0 -83
  157. package/dist/verify-JUDKTPKZ.js +0 -14
  158. package/dist/web-H2BJXUBZ.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>