@bitseek/hermes-webui 0.1.0-beta.0 → 0.1.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 (99) hide show
  1. package/package.json +2 -2
  2. package/vendor/agent-frontend-shell/.bitseek-source.json +2 -2
  3. package/vendor/agent-frontend-shell/CHANGELOG.md +178 -1
  4. package/vendor/agent-frontend-shell/CONTRIBUTORS.md +5 -5
  5. package/vendor/agent-frontend-shell/api/agent_health.py +134 -0
  6. package/vendor/agent-frontend-shell/api/config.py +145 -104
  7. package/vendor/agent-frontend-shell/api/gateway_chat.py +56 -12
  8. package/vendor/agent-frontend-shell/api/helpers.py +4 -2
  9. package/vendor/agent-frontend-shell/api/models.py +202 -20
  10. package/vendor/agent-frontend-shell/api/paths.py +77 -0
  11. package/vendor/agent-frontend-shell/api/plugins.py +185 -0
  12. package/vendor/agent-frontend-shell/api/profiles.py +95 -16
  13. package/vendor/agent-frontend-shell/api/routes.py +831 -30
  14. package/vendor/agent-frontend-shell/api/run_journal.py +1 -0
  15. package/vendor/agent-frontend-shell/api/state_sync.py +5 -4
  16. package/vendor/agent-frontend-shell/api/streaming.py +211 -56
  17. package/vendor/agent-frontend-shell/api/todo_state.py +122 -0
  18. package/vendor/agent-frontend-shell/api/updates.py +30 -3
  19. package/vendor/agent-frontend-shell/api/upload.py +251 -18
  20. package/vendor/agent-frontend-shell/api/workspace.py +323 -65
  21. package/vendor/agent-frontend-shell/bitseek_docs/BitSeek_Claw_Operation_Manual_EN.docx +0 -0
  22. package/vendor/agent-frontend-shell/bitseek_docs/BitSeek_Claw_Operation_Manual_ZH.docx +0 -0
  23. package/vendor/agent-frontend-shell/bitseek_docs/en/00-Installation.md +174 -0
  24. package/vendor/agent-frontend-shell/bitseek_docs/en/01-Overview.md +128 -0
  25. package/vendor/agent-frontend-shell/bitseek_docs/en/02-Page-Operations.md +461 -0
  26. package/vendor/agent-frontend-shell/bitseek_docs/en/README.md +61 -0
  27. package/vendor/agent-frontend-shell/bitseek_docs/en/images/ai-colleagues.png +0 -0
  28. package/vendor/agent-frontend-shell/bitseek_docs/en/images/chat-area.png +0 -0
  29. package/vendor/agent-frontend-shell/bitseek_docs/en/images/kanban.png +0 -0
  30. package/vendor/agent-frontend-shell/bitseek_docs/en/images/main-page.png +0 -0
  31. package/vendor/agent-frontend-shell/bitseek_docs/en/images/memory-notes.png +0 -0
  32. package/vendor/agent-frontend-shell/bitseek_docs/en/images/memory-overview.png +0 -0
  33. package/vendor/agent-frontend-shell/bitseek_docs/en/images/memory-profile.png +0 -0
  34. package/vendor/agent-frontend-shell/bitseek_docs/en/images/memory-soul.png +0 -0
  35. package/vendor/agent-frontend-shell/bitseek_docs/en/images/memory.png +0 -0
  36. package/vendor/agent-frontend-shell/bitseek_docs/en/images/navigation-bar.png +0 -0
  37. package/vendor/agent-frontend-shell/bitseek_docs/en/images/settings-appearance.png +0 -0
  38. package/vendor/agent-frontend-shell/bitseek_docs/en/images/settings-conversation.png +0 -0
  39. package/vendor/agent-frontend-shell/bitseek_docs/en/images/settings-overview.png +0 -0
  40. package/vendor/agent-frontend-shell/bitseek_docs/en/images/settings-plugins.png +0 -0
  41. package/vendor/agent-frontend-shell/bitseek_docs/en/images/settings-preferences.png +0 -0
  42. package/vendor/agent-frontend-shell/bitseek_docs/en/images/settings-providers.png +0 -0
  43. package/vendor/agent-frontend-shell/bitseek_docs/en/images/settings-system.png +0 -0
  44. package/vendor/agent-frontend-shell/bitseek_docs/en/images/settings.png +0 -0
  45. package/vendor/agent-frontend-shell/bitseek_docs/en/images/sidebar.png +0 -0
  46. package/vendor/agent-frontend-shell/bitseek_docs/en/images/skills.png +0 -0
  47. package/vendor/agent-frontend-shell/bitseek_docs/en/images/tasks.png +0 -0
  48. package/vendor/agent-frontend-shell/bitseek_docs/en/images/workspace-panel.png +0 -0
  49. package/vendor/agent-frontend-shell/bitseek_docs/md_to_docx.py +351 -0
  50. package/vendor/agent-frontend-shell/bitseek_docs/zh/00-/345/256/211/350/243/205/345/220/257/345/212/250.md +174 -0
  51. package/vendor/agent-frontend-shell/bitseek_docs/zh/01-/346/225/264/344/275/223/346/246/202/350/247/210.md +128 -0
  52. package/vendor/agent-frontend-shell/bitseek_docs/zh/02-/351/241/265/351/235/242/346/223/215/344/275/234.md +463 -0
  53. package/vendor/agent-frontend-shell/bitseek_docs/zh/README.md +61 -0
  54. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/ai-colleagues.png +0 -0
  55. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/chat-area.png +0 -0
  56. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/kanban.png +0 -0
  57. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/main-page.png +0 -0
  58. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/memory-notes.png +0 -0
  59. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/memory-overview.png +0 -0
  60. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/memory-profile.png +0 -0
  61. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/memory-soul.png +0 -0
  62. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/memory.png +0 -0
  63. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/navigation-bar.png +0 -0
  64. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/settings-appearance.png +0 -0
  65. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/settings-conversation.png +0 -0
  66. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/settings-overview.png +0 -0
  67. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/settings-plugins.png +0 -0
  68. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/settings-preferences.png +0 -0
  69. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/settings-providers.png +0 -0
  70. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/settings-system.png +0 -0
  71. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/settings.png +0 -0
  72. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/sidebar.png +0 -0
  73. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/skills.png +0 -0
  74. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/tasks.png +0 -0
  75. package/vendor/agent-frontend-shell/bitseek_docs/zh/images/workspace-panel.png +0 -0
  76. package/vendor/agent-frontend-shell/build-release.sh +62 -0
  77. package/vendor/agent-frontend-shell/ctl.sh +1 -0
  78. package/vendor/agent-frontend-shell/docker-compose.local.yml +33 -0
  79. package/vendor/agent-frontend-shell/docker-compose.yml +8 -0
  80. package/vendor/agent-frontend-shell/docker_init.bash +1 -0
  81. package/vendor/agent-frontend-shell/docs/rfcs/hermes-run-adapter-contract.md +74 -15
  82. package/vendor/agent-frontend-shell/extensions/common/index.css +6 -0
  83. package/vendor/agent-frontend-shell/extensions/manifest.json +6 -0
  84. package/vendor/agent-frontend-shell/extensions/pages/ai-teammates/page.js +60 -14
  85. package/vendor/agent-frontend-shell/readme-simple.md +103 -0
  86. package/vendor/agent-frontend-shell/requirements.txt +5 -0
  87. package/vendor/agent-frontend-shell/server.py +7 -0
  88. package/vendor/agent-frontend-shell/static/boot.js +53 -1
  89. package/vendor/agent-frontend-shell/static/commands.js +20 -10
  90. package/vendor/agent-frontend-shell/static/i18n.js +1142 -1016
  91. package/vendor/agent-frontend-shell/static/index.html +13 -3
  92. package/vendor/agent-frontend-shell/static/messages.js +48 -3
  93. package/vendor/agent-frontend-shell/static/panels.js +199 -30
  94. package/vendor/agent-frontend-shell/static/sessions.js +249 -39
  95. package/vendor/agent-frontend-shell/static/style.css +46 -2
  96. package/vendor/agent-frontend-shell/static/ui.js +323 -79
  97. package/vendor/agent-frontend-shell/static/workspace.js +185 -7
  98. package/vendor/agent-frontend-shell/README-CUSTOM.md +0 -76
  99. package/vendor/agent-frontend-shell/docker-compose.custom.yml +0 -26
@@ -0,0 +1,351 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Markdown to Word Converter for BitSeek Claw Documentation
4
+ Generates two Word documents: one English, one Chinese
5
+ """
6
+
7
+ import re
8
+ import os
9
+ from pathlib import Path
10
+ from docx import Document
11
+ from docx.shared import Inches, Pt, RGBColor, Cm
12
+ from docx.enum.text import WD_ALIGN_PARAGRAPH
13
+ from docx.enum.style import WD_STYLE_TYPE
14
+ from docx.oxml.ns import qn
15
+
16
+ # Base directory
17
+ BASE_DIR = Path(__file__).parent
18
+
19
+
20
+ def parse_markdown_table(lines):
21
+ """Parse a markdown table into rows of cells."""
22
+ rows = []
23
+ for line in lines:
24
+ line = line.strip()
25
+ if line.startswith('|') and line.endswith('|'):
26
+ # Skip separator line
27
+ if re.match(r'^\|[\s\-:|]+\|$', line):
28
+ continue
29
+ cells = [cell.strip() for cell in line.split('|')[1:-1]]
30
+ rows.append(cells)
31
+ return rows
32
+
33
+
34
+ def add_table_to_doc(doc, rows):
35
+ """Add a table to the document from parsed rows."""
36
+ if not rows:
37
+ return
38
+
39
+ num_cols = len(rows[0])
40
+ table = doc.add_table(rows=len(rows), cols=num_cols, style='Table Grid')
41
+
42
+ for i, row_data in enumerate(rows):
43
+ for j, cell_text in enumerate(row_data):
44
+ cell = table.cell(i, j)
45
+ cell.text = ''
46
+ p = cell.paragraphs[0]
47
+ # Use bold for header row
48
+ run = p.add_run(cell_text)
49
+ if i == 0:
50
+ run.bold = True
51
+ run.font.size = Pt(10)
52
+ else:
53
+ run.font.size = Pt(10)
54
+
55
+ doc.add_paragraph() # Add space after table
56
+
57
+
58
+ def parse_markdown(md_content, doc, lang_dir='en'):
59
+ """Parse markdown content and add to Word document.
60
+
61
+ Args:
62
+ md_content: Markdown text content
63
+ doc: Word document object
64
+ lang_dir: Language subdirectory ('en' or 'zh') for image path resolution
65
+ """
66
+ lines = md_content.split('\n')
67
+ i = 0
68
+ in_code_block = False
69
+ code_lines = []
70
+ in_table = False
71
+ table_lines = []
72
+ image_refs = []
73
+
74
+ while i < len(lines):
75
+ line = lines[i]
76
+
77
+ # Handle code blocks
78
+ if line.strip().startswith('```'):
79
+ if in_code_block:
80
+ # End of code block
81
+ code_text = '\n'.join(code_lines)
82
+ if code_text.strip():
83
+ p = doc.add_paragraph()
84
+ p.style = doc.styles['Normal']
85
+ run = p.add_run(code_text)
86
+ run.font.name = 'Courier New'
87
+ run.font.size = Pt(9)
88
+ run.font.color.rgb = RGBColor(0x33, 0x33, 0x33)
89
+ code_lines = []
90
+ in_code_block = False
91
+ else:
92
+ # Start of code block
93
+ in_code_block = True
94
+ i += 1
95
+ continue
96
+
97
+ if in_code_block:
98
+ code_lines.append(line)
99
+ i += 1
100
+ continue
101
+
102
+ # Handle tables
103
+ if line.strip().startswith('|') and line.strip().endswith('|'):
104
+ table_lines.append(line)
105
+ i += 1
106
+ continue
107
+ elif table_lines:
108
+ # End of table
109
+ rows = parse_markdown_table(table_lines)
110
+ add_table_to_doc(doc, rows)
111
+ table_lines = []
112
+
113
+ # Handle images
114
+ img_match = re.match(r'!\[([^\]]*)\]\(([^\)]+)\)', line.strip())
115
+ if img_match:
116
+ alt_text = img_match.group(1)
117
+ img_path = img_match.group(2)
118
+ # Try to add the image - resolve path relative to language subdirectory
119
+ full_img_path = BASE_DIR / lang_dir / img_path
120
+ if full_img_path.exists():
121
+ try:
122
+ from PIL import Image as PILImage
123
+ with PILImage.open(str(full_img_path)) as pil_img:
124
+ w_px, h_px = pil_img.size
125
+ # Calculate width to fit within max height of 300pt (~400px at 96dpi)
126
+ max_height = Pt(300)
127
+ aspect = w_px / h_px if h_px > 0 else 1
128
+ target_height = min(h_px, 300 * 96 / 72) # 300pt -> px
129
+ target_width = target_height * aspect
130
+ from docx.shared import Emu
131
+ # Use width as primary constraint, cap height at 300pt
132
+ pic = doc.add_picture(str(full_img_path), width=Inches(5))
133
+ # Scale down if height exceeds 300pt
134
+ if pic.height > max_height:
135
+ scale = max_height / pic.height
136
+ pic.width = int(pic.width * scale)
137
+ pic.height = max_height
138
+ last_paragraph = doc.paragraphs[-1]
139
+ last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
140
+ except ImportError:
141
+ # Fallback: just insert without PIL
142
+ doc.add_picture(str(full_img_path), width=Inches(5))
143
+ last_paragraph = doc.paragraphs[-1]
144
+ last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
145
+ except Exception as e:
146
+ # If image fails, add alt text as caption
147
+ p = doc.add_paragraph(f'[{alt_text}]')
148
+ p.alignment = WD_ALIGN_PARAGRAPH.CENTER
149
+ else:
150
+ p = doc.add_paragraph(f'[{alt_text}]')
151
+ p.alignment = WD_ALIGN_PARAGRAPH.CENTER
152
+ i += 1
153
+ continue
154
+
155
+ # Handle headings
156
+ if line.startswith('#'):
157
+ level = len(line.split(' ')[0])
158
+ text = line.lstrip('#').strip()
159
+ if level == 1:
160
+ p = doc.add_heading(text, level=0)
161
+ elif level == 2:
162
+ p = doc.add_heading(text, level=1)
163
+ elif level == 3:
164
+ p = doc.add_heading(text, level=2)
165
+ elif level == 4:
166
+ p = doc.add_heading(text, level=3)
167
+ else:
168
+ p = doc.add_heading(text, level=4)
169
+ i += 1
170
+ continue
171
+
172
+ # Handle horizontal rules
173
+ if line.strip() in ('---', '***', '___'):
174
+ # Add a thin line
175
+ p = doc.add_paragraph()
176
+ p.paragraph_format.space_before = Pt(6)
177
+ p.paragraph_format.space_after = Pt(6)
178
+ i += 1
179
+ continue
180
+
181
+ # Handle empty lines
182
+ if not line.strip():
183
+ i += 1
184
+ continue
185
+
186
+ # Handle ordered lists
187
+ ol_match = re.match(r'^(\s*)\d+\.\s+(.*)', line)
188
+ if ol_match:
189
+ text = ol_match.group(2)
190
+ p = doc.add_paragraph(style='List Number')
191
+ parse_inline_formatting(p, text)
192
+ i += 1
193
+ continue
194
+
195
+ # Handle unordered lists
196
+ ul_match = re.match(r'^(\s*)[-*+]\s+(.*)', line)
197
+ if ul_match:
198
+ text = ul_match.group(2)
199
+ p = doc.add_paragraph(style='List Bullet')
200
+ parse_inline_formatting(p, text)
201
+ i += 1
202
+ continue
203
+
204
+ # Handle regular paragraphs
205
+ p = doc.add_paragraph()
206
+ parse_inline_formatting(p, line)
207
+ i += 1
208
+
209
+ # Process any remaining table lines
210
+ if table_lines:
211
+ rows = parse_markdown_table(table_lines)
212
+ add_table_to_doc(doc, rows)
213
+
214
+
215
+ def parse_inline_formatting(p, text):
216
+ """Parse inline markdown formatting (bold, code, links) and add to paragraph."""
217
+ # Pattern to match **bold**, `code`, and [link](url)
218
+ pattern = r'(\*\*[^*]+\*\*|`[^`]+`|\[[^\]]+\]\([^)]+\))'
219
+
220
+ parts = re.split(pattern, text)
221
+
222
+ for part in parts:
223
+ if not part:
224
+ continue
225
+
226
+ # Bold text
227
+ if part.startswith('**') and part.endswith('**'):
228
+ run = p.add_run(part[2:-2])
229
+ run.bold = True
230
+ # Inline code
231
+ elif part.startswith('`') and part.endswith('`'):
232
+ run = p.add_run(part[1:-1])
233
+ run.font.name = 'Courier New'
234
+ run.font.size = Pt(9)
235
+ run.font.color.rgb = RGBColor(0xC7, 0x25, 0x4E)
236
+ # Link
237
+ elif part.startswith('['):
238
+ link_match = re.match(r'\[([^\]]+)\]\(([^)]+)\)', part)
239
+ if link_match:
240
+ run = p.add_run(link_match.group(1))
241
+ run.font.color.rgb = RGBColor(0x00, 0x66, 0xCC)
242
+ run.underline = True
243
+ # Regular text
244
+ else:
245
+ p.add_run(part)
246
+
247
+
248
+ def create_document(title, subtitle, md_files, output_path, lang_dir='en'):
249
+ """Create a Word document from markdown files.
250
+
251
+ Args:
252
+ title: Document title
253
+ subtitle: Document subtitle
254
+ md_files: List of markdown file paths (relative to BASE_DIR)
255
+ output_path: Output Word file path
256
+ lang_dir: Language subdirectory ('en' or 'zh') for image resolution
257
+ """
258
+ doc = Document()
259
+
260
+ # Set default font
261
+ style = doc.styles['Normal']
262
+ font = style.font
263
+ font.name = 'Arial'
264
+ font.size = Pt(11)
265
+
266
+ # Configure heading styles
267
+ for i in range(1, 5):
268
+ heading_style = doc.styles[f'Heading {i}']
269
+ heading_font = heading_style.font
270
+ heading_font.color.rgb = RGBColor(0x1A, 0x1A, 0x2E)
271
+
272
+ # Add title page
273
+ p = doc.add_paragraph()
274
+ p.alignment = WD_ALIGN_PARAGRAPH.CENTER
275
+ run = p.add_run(title)
276
+ run.bold = True
277
+ run.font.size = Pt(28)
278
+ run.font.color.rgb = RGBColor(0x1A, 0x1A, 0x2E)
279
+
280
+ p = doc.add_paragraph()
281
+ p.alignment = WD_ALIGN_PARAGRAPH.CENTER
282
+ run = p.add_run(subtitle)
283
+ run.font.size = Pt(14)
284
+ run.font.color.rgb = RGBColor(0x66, 0x66, 0x66)
285
+
286
+ doc.add_paragraph()
287
+ doc.add_paragraph()
288
+
289
+ # Add each markdown file as a section
290
+ for md_file in md_files:
291
+ md_path = BASE_DIR / md_file
292
+ if md_path.exists():
293
+ with open(md_path, 'r', encoding='utf-8') as f:
294
+ content = f.read()
295
+
296
+ # Add page break before each section (except the first)
297
+ if md_files.index(md_file) > 0:
298
+ doc.add_page_break()
299
+
300
+ # Parse and add content
301
+ parse_markdown(content, doc, lang_dir)
302
+
303
+ # Save document
304
+ doc.save(output_path)
305
+ print(f'Created: {output_path}')
306
+
307
+
308
+ def main():
309
+ # English document
310
+ en_files = [
311
+ 'en/README.md',
312
+ 'en/00-Installation.md',
313
+ 'en/01-Overview.md',
314
+ 'en/02-Page-Operations.md',
315
+ ]
316
+
317
+ # Chinese document
318
+ zh_files = [
319
+ 'zh/README.md',
320
+ 'zh/00-安装启动.md',
321
+ 'zh/01-整体概览.md',
322
+ 'zh/02-页面操作.md',
323
+ ]
324
+
325
+ output_dir = BASE_DIR
326
+
327
+ # Generate English document
328
+ create_document(
329
+ title='BitSeek Claw',
330
+ subtitle='Operation Manual',
331
+ md_files=en_files,
332
+ output_path=output_dir / 'BitSeek_Claw_Operation_Manual_EN.docx',
333
+ lang_dir='en'
334
+ )
335
+
336
+ # Generate Chinese document
337
+ create_document(
338
+ title='BitSeek Claw',
339
+ subtitle='操作文档',
340
+ md_files=zh_files,
341
+ output_path=output_dir / 'BitSeek_Claw_Operation_Manual_ZH.docx',
342
+ lang_dir='zh'
343
+ )
344
+
345
+ print('\nDone! Generated:')
346
+ print(' - BitSeek_Claw_Operation_Manual_EN.docx')
347
+ print(' - BitSeek_Claw_Operation_Manual_ZH.docx')
348
+
349
+
350
+ if __name__ == '__main__':
351
+ main()
@@ -0,0 +1,174 @@
1
+ # 安装和启动 BitSeek Claw
2
+
3
+ 本指南介绍如何安装和启动 BitSeek Claw(Hermes WebUI)。
4
+
5
+ ## 系统要求
6
+
7
+ - **操作系统**:macOS、Linux 或 WSL2(Windows 需通过 WSL2)
8
+ - **Python**:3.8 或更高版本
9
+ - **Hermes Agent**:需要预先安装 Hermes Agent
10
+
11
+ ## 安装步骤
12
+
13
+ ### 1. 克隆仓库
14
+
15
+ ```bash
16
+ git clone https://github.com/your-repo/agent-frontend-shell.git
17
+ cd agent-frontend-shell
18
+ ```
19
+
20
+ ### 2. 环境配置
21
+
22
+ #### 方法一:使用 `.env` 文件(推荐)
23
+
24
+ ```bash
25
+ # 复制示例环境文件
26
+ cp .env.example .env
27
+
28
+ # 编辑 .env 文件配置必要参数
29
+ nano .env
30
+ ```
31
+
32
+ #### 方法二:直接设置环境变量
33
+
34
+ ```bash
35
+ export HERMES_WEBUI_HOST=127.0.0.1
36
+ export HERMES_WEBUI_PORT=8787
37
+ export HERMES_HOME=~/.hermes
38
+ ```
39
+
40
+ ### 3. 启动服务
41
+
42
+ #### 方法一:使用启动脚本(推荐)
43
+
44
+ ```bash
45
+ # 使用 start.sh 启动
46
+ ./start.sh
47
+ ```
48
+
49
+ #### 方法二:使用 Python 启动器
50
+
51
+ ```bash
52
+ # 使用 bootstrap.py 启动(会自动检查依赖)
53
+ python3 bootstrap.py
54
+ ```
55
+
56
+ #### 方法三:使用控制脚本
57
+
58
+ ```bash
59
+ # 使用 ctl.sh 管理服务
60
+ ./ctl.sh start
61
+ ```
62
+
63
+ ## 启动参数
64
+
65
+ ### 环境变量配置
66
+
67
+ | 变量名 | 默认值 | 说明 |
68
+ |--------|--------|------|
69
+ | `HERMES_WEBUI_HOST` | `127.0.0.1` | 监听地址 |
70
+ | `HERMES_WEBUI_PORT` | `8787` | 监听端口 |
71
+ | `HERMES_HOME` | `~/.hermes` | Hermes 主目录 |
72
+ | `HERMES_WEBUI_STATE_DIR` | - | 状态目录路径 |
73
+ | `HERMES_WEBUI_DEFAULT_WORKSPACE` | - | 默认工作区路径 |
74
+
75
+ ### 启动选项
76
+
77
+ ```bash
78
+ # 指定端口启动
79
+ HERMES_WEBUI_PORT=8888 ./start.sh
80
+
81
+ # 指定主机和端口
82
+ HERMES_WEBUI_HOST=0.0.0.0 HERMES_WEBUI_PORT=8787 ./start.sh
83
+
84
+ # 使用自定义状态目录
85
+ HERMES_WEBUI_STATE_DIR=/tmp/hermes-state ./start.sh
86
+ ```
87
+
88
+ ## 访问界面
89
+
90
+ 启动成功后,在浏览器中访问:
91
+
92
+ ```
93
+ http://localhost:8787
94
+ ```
95
+
96
+ ### 首次访问
97
+
98
+ 1. 打开浏览器访问上述地址
99
+ 2. 首次访问会进入**首次运行向导**
100
+ 3. 按照向导提示配置:
101
+ - AI 提供商设置(如 OpenAI、Anthropic 等)
102
+ - API 密钥配置
103
+ - 基本偏好设置
104
+
105
+ ## Docker 部署
106
+
107
+ ### 单容器部署
108
+
109
+ ```bash
110
+ # 使用 Docker Compose
111
+ docker-compose up -d
112
+
113
+ # 或使用自定义配置
114
+ docker-compose -f docker-compose.custom.yml up -d
115
+ ```
116
+
117
+ ### 多容器部署
118
+
119
+ ```bash
120
+ # 三容器架构
121
+ docker-compose -f docker-compose.three-container.yml up -d
122
+
123
+ # 两容器架构
124
+ docker-compose -f docker-compose.two-container.yml up -d
125
+ ```
126
+
127
+ ## 常见问题
128
+
129
+ ### 端口被占用
130
+
131
+ ```bash
132
+ # 检查端口占用
133
+ lsof -i :8787
134
+
135
+ # 使用其他端口
136
+ HERMES_WEBUI_PORT=8788 ./start.sh
137
+ ```
138
+
139
+ ### 权限问题
140
+
141
+ ```bash
142
+ # 确保脚本有执行权限
143
+ chmod +x start.sh
144
+ chmod +x ctl.sh
145
+ chmod +x bootstrap.py
146
+ ```
147
+
148
+ ### 依赖缺失
149
+
150
+ ```bash
151
+ # 安装 Python 依赖
152
+ pip install -r requirements.txt
153
+
154
+ # 或使用虚拟环境
155
+ python3 -m venv venv
156
+ source venv/bin/activate
157
+ pip install -r requirements.txt
158
+ ```
159
+
160
+ ## 停止服务
161
+
162
+ ```bash
163
+ # 使用控制脚本停止
164
+ ./ctl.sh stop
165
+
166
+ # 或查找进程并终止
167
+ pkill -f "python.*server.py"
168
+ ```
169
+
170
+ ## 下一步
171
+
172
+ 安装启动完成后,请查看:
173
+ - **[整体概览](01-整体概览.md)** - 了解界面布局
174
+ - **[页面操作](02-页面操作.md)** - 学习具体操作
@@ -0,0 +1,128 @@
1
+ # BitSeek Claw 整体概览
2
+
3
+ BitSeek Claw 采用现代化的三栏布局设计,提供直观的用户界面。以下是界面的整体结构介绍。
4
+
5
+ ## 界面布局
6
+
7
+ ![整体布局](images/main-page.png)
8
+
9
+ BitSeek Claw 的界面分为三个主要区域:
10
+
11
+ 1. **顶部导航栏** - 功能模块切换
12
+ 2. **左侧边栏** - 会话管理和导航
13
+ 3. **中央主区域** - 聊天和工作区
14
+ 4. **右侧面板** - 文件浏览(可选)
15
+
16
+ ## 顶部导航栏
17
+
18
+ ![导航栏](images/navigation-bar.png)
19
+
20
+ 导航栏位于页面顶部,包含以下功能模块:
21
+
22
+ | 图标 | 名称 | 功能描述 |
23
+ |------|------|----------|
24
+ | 💬 | 聊天 | 与 AI 进行对话交流 |
25
+ | 👥 | AI 同事 | 管理和交互多个 AI 代理 |
26
+ | 📋 | 任务 | 查看和管理任务列表 |
27
+ | 📊 | 看板 | 任务看板视图 |
28
+ | ⚡ | 技能 | 管理 AI 技能库 |
29
+ | 🧠 | 记忆 | 查看和管理 AI 记忆 |
30
+ | 📁 | 工作区 | 文件和项目管理 |
31
+ | ⚙️ | 配置 | 代理配置管理 |
32
+ | ✅ | 待办 | 待办事项管理 |
33
+ | 📈 | 统计 | 使用统计和洞察 |
34
+ | 📊 | Hermes 仪表盘 | 系统监控面板 |
35
+ | 📝 | 日志 | 系统日志查看 |
36
+ | ⚙️ | 设置 | 系统设置 |
37
+
38
+ ## 左侧边栏
39
+
40
+ ![侧边栏](images/sidebar.png)
41
+
42
+ 左侧边栏提供会话管理和快速导航:
43
+
44
+ ### 会话管理
45
+ - **新建对话** - 创建新的聊天会话
46
+ - **筛选对话** - 按关键词筛选会话
47
+ - **会话列表** - 显示所有历史会话
48
+ - 按时间分组(今天、昨天、上周等)
49
+ - 每个会话显示标题和最后活跃时间
50
+ - 右键菜单提供更多操作
51
+
52
+ ### 项目管理
53
+ - **所有** - 查看所有会话
54
+ - **未分配** - 查看未分配项目的会话
55
+ - **新建项目** - 创建新项目分组
56
+
57
+ ## 中央主区域
58
+
59
+ ![聊天区域](images/chat-area.png)
60
+
61
+ 中央主区域是主要工作区,根据当前选择的功能模块显示不同内容:
62
+
63
+ ### 聊天界面
64
+ - **欢迎消息** - 显示引导问题
65
+ - **消息输入框** - 输入消息与 AI 交流
66
+ - **快捷操作** - 文件选择、听写等功能
67
+ - **上下文信息** - 显示当前模型、工作区等
68
+
69
+ ### 其他功能界面
70
+ - 任务管理、看板视图、技能管理等
71
+ - 每个功能模块都有专门的界面布局
72
+
73
+ ## 右侧工作区面板
74
+
75
+ ![工作区面板](images/workspace-panel.png)
76
+
77
+ 右侧工作区面板提供文件管理功能:
78
+
79
+ ### 文件浏览器
80
+ - **文件列表** - 显示工作区中的文件和文件夹
81
+ - **文件操作** - 新建文件、文件夹、刷新等
82
+ - **文件预览** - 点击文件可预览内容
83
+
84
+ ### 功能标签
85
+ - **Files** - 文件浏览器
86
+ - **Artifacts** - 生成的工件和内容
87
+
88
+ ## 底部控制栏
89
+
90
+ 底部控制栏提供会话级别的控制:
91
+
92
+ ### 模型选择
93
+ - **AI 模型** - 切换不同的 AI 模型
94
+ - **推理强度** - 调整 AI 推理强度
95
+ - **配置文件** - 切换用户配置文件
96
+
97
+ ### 消息操作
98
+ - **发送按钮** - 发送输入的消息
99
+ - **文件附件** - 附加文件到消息
100
+ - **听写功能** - 语音输入支持
101
+
102
+ ## 主题和外观
103
+
104
+ BitSeek Claw 支持多种主题:
105
+
106
+ - **深色主题** - 默认主题,护眼舒适
107
+ - **浅色主题** - 明亮清爽的界面
108
+ - **自定义主题** - 支持自定义颜色方案
109
+
110
+ ## 响应式设计
111
+
112
+ 界面支持不同屏幕尺寸:
113
+ - **桌面端** - 完整三栏布局
114
+ - **平板端** - 可折叠侧边栏
115
+ - **移动端** - 单栏布局,适配手机屏幕
116
+
117
+ ## 快捷键
118
+
119
+ 常用快捷键:
120
+ - `Ctrl/Cmd + N` - 新建对话
121
+ - `Ctrl/Cmd + /` - 聚焦搜索框
122
+ - `Ctrl/Cmd + Enter` - 发送消息
123
+ - `Esc` - 关闭弹窗或取消操作
124
+
125
+ ## 下一步
126
+
127
+ 了解整体布局后,请查看:
128
+ - **[页面操作](02-页面操作.md)** - 各个功能模块的详细操作指南