feihong-code 0.2.3 → 0.6.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 (180) hide show
  1. package/.github/FUNDING.yml +4 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +37 -37
  3. package/.github/ISSUE_TEMPLATE/config.yml +14 -14
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +28 -28
  5. package/.github/PULL_REQUEST_TEMPLATE.md +46 -46
  6. package/.github/SECURITY.md +67 -67
  7. package/.github/dependabot.yml +16 -0
  8. package/.github/workflows/ci.yml +1 -1
  9. package/AGENT-GUIDE.md +382 -237
  10. package/CHANGELOG.md +392 -0
  11. package/CODE_OF_CONDUCT.md +56 -56
  12. package/CONTRIBUTING.md +68 -68
  13. package/LICENSE +22 -22
  14. package/README.md +586 -522
  15. package/README.self-evolve.md +274 -0
  16. package/dist/agent/code-review.js +2 -0
  17. package/dist/agent/code-review.js.map +1 -1
  18. package/dist/agent/code-writer.js +74 -18
  19. package/dist/agent/code-writer.js.map +1 -1
  20. package/dist/agent/context-compactor.js +13 -4
  21. package/dist/agent/context-compactor.js.map +1 -1
  22. package/dist/agent/experience.js +319 -84
  23. package/dist/agent/experience.js.map +1 -1
  24. package/dist/agent/orchestrator.js +233 -71
  25. package/dist/agent/orchestrator.js.map +1 -1
  26. package/dist/agent/planner.js +30 -7
  27. package/dist/agent/planner.js.map +1 -1
  28. package/dist/agent/prompts.js +9 -0
  29. package/dist/agent/prompts.js.map +1 -1
  30. package/dist/agent/quality-gate.js +10 -4
  31. package/dist/agent/quality-gate.js.map +1 -1
  32. package/dist/agent/repo-context.js +181 -0
  33. package/dist/agent/repo-context.js.map +1 -0
  34. package/dist/agent/repo-reader.js +92 -99
  35. package/dist/agent/repo-reader.js.map +1 -1
  36. package/dist/agent/self-heal.js +80 -60
  37. package/dist/agent/self-heal.js.map +1 -1
  38. package/dist/agent/self-improver.js +65 -61
  39. package/dist/agent/self-improver.js.map +1 -1
  40. package/dist/agent/subagent-summary.js +31 -0
  41. package/dist/agent/subagent-summary.js.map +1 -0
  42. package/dist/agent/subagent.js +52 -2
  43. package/dist/agent/subagent.js.map +1 -1
  44. package/dist/agent/symbol-index.js +160 -0
  45. package/dist/agent/symbol-index.js.map +1 -0
  46. package/dist/agent/team.js +193 -0
  47. package/dist/agent/team.js.map +1 -0
  48. package/dist/cli/commands.js +124 -143
  49. package/dist/cli/commands.js.map +1 -1
  50. package/dist/cli/index.js +113 -106
  51. package/dist/cli/index.js.map +1 -1
  52. package/dist/cli/repl.js +82 -7
  53. package/dist/cli/repl.js.map +1 -1
  54. package/dist/cli/run.js +600 -95
  55. package/dist/cli/run.js.map +1 -1
  56. package/dist/cli/tui.js +145 -0
  57. package/dist/cli/tui.js.map +1 -0
  58. package/dist/cli/version.js +1 -1
  59. package/dist/enterprise/audit.js +145 -23
  60. package/dist/enterprise/audit.js.map +1 -1
  61. package/dist/enterprise/index.js +14 -11
  62. package/dist/enterprise/index.js.map +1 -1
  63. package/dist/enterprise/policy.js +22 -10
  64. package/dist/enterprise/policy.js.map +1 -1
  65. package/dist/harness/executor.js +127 -0
  66. package/dist/harness/executor.js.map +1 -0
  67. package/dist/harness/harness.js +87 -0
  68. package/dist/harness/harness.js.map +1 -0
  69. package/dist/harness/index.js +31 -0
  70. package/dist/harness/index.js.map +1 -0
  71. package/dist/harness/loader.js +138 -0
  72. package/dist/harness/loader.js.map +1 -0
  73. package/dist/harness/reporter.js +34 -0
  74. package/dist/harness/reporter.js.map +1 -0
  75. package/dist/harness/types.js +10 -0
  76. package/dist/harness/types.js.map +1 -0
  77. package/dist/harness/verifier.js +48 -0
  78. package/dist/harness/verifier.js.map +1 -0
  79. package/dist/hello.js +14 -0
  80. package/dist/hello.js.map +1 -0
  81. package/dist/memory/auto-summarize.js +208 -0
  82. package/dist/memory/auto-summarize.js.map +1 -0
  83. package/dist/memory/index.js +228 -0
  84. package/dist/memory/index.js.map +1 -0
  85. package/dist/models/model-router.js +100 -27
  86. package/dist/models/model-router.js.map +1 -1
  87. package/dist/models/model.dto.js +25 -3
  88. package/dist/models/model.dto.js.map +1 -1
  89. package/dist/models/providers/ollama.provider.js +12 -0
  90. package/dist/models/providers/ollama.provider.js.map +1 -1
  91. package/dist/models/providers/openai-compatible.provider.js +14 -1
  92. package/dist/models/providers/openai-compatible.provider.js.map +1 -1
  93. package/dist/plugins/plugin-loader.js +179 -0
  94. package/dist/plugins/plugin-loader.js.map +1 -0
  95. package/dist/runtime/event-log.js.map +1 -1
  96. package/dist/runtime/hooks.js +80 -0
  97. package/dist/runtime/hooks.js.map +1 -0
  98. package/dist/self-evolve/hook.js +60 -0
  99. package/dist/self-evolve/hook.js.map +1 -0
  100. package/dist/self-evolve/hook.ts +80 -0
  101. package/dist/self-evolve/manager.d.ts +8 -0
  102. package/dist/self-evolve/manager.js +401 -0
  103. package/dist/shared/config.js +35 -3
  104. package/dist/shared/config.js.map +1 -1
  105. package/dist/shared/errors.js +6 -2
  106. package/dist/shared/errors.js.map +1 -1
  107. package/dist/shared/i18n.js +535 -0
  108. package/dist/shared/i18n.js.map +1 -0
  109. package/dist/shared/secure-store.js +117 -0
  110. package/dist/shared/secure-store.js.map +1 -0
  111. package/dist/skills/grill.js +2 -1
  112. package/dist/skills/grill.js.map +1 -1
  113. package/dist/skills/self-heal.js +73 -0
  114. package/dist/skills/self-heal.js.map +1 -0
  115. package/dist/skills/skill-loader.js +131 -0
  116. package/dist/skills/skill-loader.js.map +1 -0
  117. package/dist/skills/skill-market.js +195 -0
  118. package/dist/skills/skill-market.js.map +1 -0
  119. package/dist/tools/analysis/code-analyzer.js +45 -18
  120. package/dist/tools/analysis/code-analyzer.js.map +1 -1
  121. package/dist/tools/index.js +5 -0
  122. package/dist/tools/index.js.map +1 -1
  123. package/dist/tools/mcp/index.js +84 -0
  124. package/dist/tools/mcp/index.js.map +1 -0
  125. package/dist/tools/mcp/mcp-client.js +194 -0
  126. package/dist/tools/mcp/mcp-client.js.map +1 -0
  127. package/dist/tools/sandbox.js +126 -0
  128. package/dist/tools/sandbox.js.map +1 -0
  129. package/dist/tools/shell/exec.js +72 -3
  130. package/dist/tools/shell/exec.js.map +1 -1
  131. package/dist/tools/shell/run-shell.tool.js +37 -7
  132. package/dist/tools/shell/run-shell.tool.js.map +1 -1
  133. package/dist/tools/skills/load-skill.tool.js +36 -0
  134. package/dist/tools/skills/load-skill.tool.js.map +1 -0
  135. package/dist/tools/tool.interface.js.map +1 -1
  136. package/dist/tools/tool.registry.js +69 -1
  137. package/dist/tools/tool.registry.js.map +1 -1
  138. package/dist/tools/web/web.tool.js +139 -0
  139. package/dist/tools/web/web.tool.js.map +1 -0
  140. package/dist/web/auth.js +178 -3
  141. package/dist/web/auth.js.map +1 -1
  142. package/dist/web/channels.js +171 -0
  143. package/dist/web/channels.js.map +1 -0
  144. package/dist/web/public/css/style.css +1546 -0
  145. package/dist/web/public/index.html +804 -37
  146. package/dist/web/public/js/api.js +309 -0
  147. package/dist/web/public/js/app.js +1472 -0
  148. package/dist/web/public/js/ui.js +832 -0
  149. package/dist/web/public/js/utils.js +170 -0
  150. package/dist/web/server.js +937 -11
  151. package/dist/web/server.js.map +1 -1
  152. package/dist/web/task-queue.js +470 -0
  153. package/dist/web/task-queue.js.map +1 -0
  154. package/dist/web/web-config.js +143 -0
  155. package/dist/web/web-config.js.map +1 -0
  156. package/docs/App/344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +299 -0
  157. package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +554 -0
  158. package/docs/Deployment_Guide_EN.md +288 -0
  159. package/docs/SELF-EVOLVE-GUIDE.md +313 -0
  160. package/docs/Technical_Manual_EN.md +216 -0
  161. package/docs/User_Manual_EN.md +314 -0
  162. package/docs/error-codes.md +198 -0
  163. package/docs/screenshots/cli-demo.png +0 -0
  164. package/docs/screenshots/feature-comparison.png +0 -0
  165. package/docs/screenshots/web-console.png +0 -0
  166. package/docs/self-evolve-implementation.md +165 -0
  167. package/docs/self-evolve.md +166 -0
  168. package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +614 -614
  169. package/docs//344/274/201/344/270/232/351/203/250/347/275/262/344/270/216/345/220/210/350/247/204.md +267 -267
  170. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +318 -358
  171. package/docs//345/270/270/350/247/201/351/227/256/351/242/230/344/270/216/346/225/205/351/232/234/346/216/222/346/237/245.md +130 -130
  172. package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +216 -303
  173. package/docs//346/236/266/346/236/204/344/270/216API.md +238 -238
  174. package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +196 -196
  175. package/docs//351/203/250/347/275/262/346/214/207/345/215/227.md +165 -165
  176. package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +288 -0
  177. package/docs//351/205/215/347/275/256/345/217/202/350/200/203.md +127 -127
  178. package/docs//351/241/265/351/235/242/345/212/237/350/203/275/345/244/215/347/233/230/344/270/216/345/206/222/347/203/237/346/265/213/350/257/225/346/212/245/345/221/212.html +117 -0
  179. package/package.json +108 -109
  180. package/tool-schema.json +117 -46
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CAPABILITY_TAGS = void 0;
4
+ exports.defaultWebConfig = defaultWebConfig;
5
+ exports.getWebConfigPath = getWebConfigPath;
6
+ exports.loadWebConfig = loadWebConfig;
7
+ exports.saveWebConfig = saveWebConfig;
8
+ exports.toProviderConfigs = toProviderConfigs;
9
+ /**
10
+ * Muse Code 中文开发版 (Muse Code 中文开发版)
11
+ * 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
12
+ *
13
+ * Web 控制台「系统配置」持久化模块:
14
+ * - 自定义大模型(openai-compatible / ollama)列表与运行参数
15
+ * - 落盘到 <FH_HOME>/web-config.json(原子写:tmp + rename)
16
+ * - 读取缺失/损坏时回退默认值,不抛错,便于离线/首启
17
+ */
18
+ const fs_1 = require("fs");
19
+ const path_1 = require("path");
20
+ const config_1 = require("../shared/config");
21
+ exports.CAPABILITY_TAGS = [
22
+ 'code-gen',
23
+ 'reasoning',
24
+ 'long-context',
25
+ 'vision',
26
+ 'cheap',
27
+ 'local',
28
+ ];
29
+ const DEFAULT_BASE_URL_OLLAMA = 'http://localhost:11434';
30
+ function defaultWebConfig() {
31
+ return {
32
+ models: {
33
+ providers: [],
34
+ defaultStrategy: 'cost',
35
+ budgetPerTaskUsd: 0.5,
36
+ defaultModelId: null,
37
+ },
38
+ runtime: {
39
+ maxConcurrency: 2,
40
+ webhookUrl: '',
41
+ temperature: 0.2,
42
+ maxRetries: 3,
43
+ workspaceDir: '',
44
+ },
45
+ security: {
46
+ sandboxMode: 'workspace-write',
47
+ requireApproval: true,
48
+ },
49
+ };
50
+ }
51
+ function getWebConfigPath() {
52
+ return (0, path_1.join)((0, config_1.resolveHomeDir)(), 'web-config.json');
53
+ }
54
+ /** 读取配置,缺省/损坏回退默认(深合并,保证新增字段始终存在) */
55
+ function loadWebConfig() {
56
+ const def = defaultWebConfig();
57
+ const file = getWebConfigPath();
58
+ if (!(0, fs_1.existsSync)(file))
59
+ return def;
60
+ try {
61
+ const raw = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
62
+ return mergeConfig(def, raw);
63
+ }
64
+ catch {
65
+ return def;
66
+ }
67
+ }
68
+ /** 深合并用户配置到默认骨架,避免缺字段导致的运行期 undefined */
69
+ function mergeConfig(def, raw) {
70
+ const models = (raw.models ?? {});
71
+ const runtime = (raw.runtime ?? {});
72
+ const security = (raw.security ?? {});
73
+ const validTags = (arr) => {
74
+ if (!Array.isArray(arr))
75
+ return [];
76
+ return arr.filter((t) => exports.CAPABILITY_TAGS.includes(t));
77
+ };
78
+ const providers = Array.isArray(models.providers)
79
+ ? models.providers
80
+ .filter((p) => !!p && typeof p === 'object')
81
+ .map((p) => ({
82
+ id: String(p.id ?? ''),
83
+ name: String(p.name ?? ''),
84
+ type: (p.type === 'ollama' ? 'ollama' : 'openai-compatible'),
85
+ baseURL: String(p.baseURL ?? ''),
86
+ model: String(p.model ?? ''),
87
+ apiKey: String(p.apiKey ?? ''),
88
+ tags: validTags(p.tags),
89
+ costPer1k: Number(p.costPer1k ?? 0) || 0,
90
+ enabled: p.enabled !== false,
91
+ isDefault: p.isDefault === true,
92
+ }))
93
+ : [];
94
+ return {
95
+ models: {
96
+ providers,
97
+ defaultStrategy: (models.defaultStrategy ?? def.models.defaultStrategy),
98
+ budgetPerTaskUsd: Number(models.budgetPerTaskUsd ?? def.models.budgetPerTaskUsd) || 0,
99
+ defaultModelId: models.defaultModelId != null ? String(models.defaultModelId) : null,
100
+ },
101
+ runtime: {
102
+ maxConcurrency: clampInt(runtime.maxConcurrency, 1, 16, def.runtime.maxConcurrency),
103
+ webhookUrl: String(runtime.webhookUrl ?? ''),
104
+ temperature: typeof runtime.temperature === 'number' ? runtime.temperature : def.runtime.temperature,
105
+ maxRetries: clampInt(runtime.maxRetries, 0, 10, def.runtime.maxRetries),
106
+ workspaceDir: typeof runtime.workspaceDir === 'string' ? runtime.workspaceDir : (def.runtime.workspaceDir ?? ''),
107
+ },
108
+ security: {
109
+ sandboxMode: (security.sandboxMode ?? def.security.sandboxMode),
110
+ requireApproval: security.requireApproval !== false,
111
+ },
112
+ };
113
+ }
114
+ function clampInt(v, min, max, fallback) {
115
+ const n = Number(v);
116
+ if (!Number.isFinite(n))
117
+ return fallback;
118
+ return Math.min(max, Math.max(min, Math.floor(n)));
119
+ }
120
+ /** 原子落盘(tmp + rename),避免半写损坏 */
121
+ function saveWebConfig(cfg) {
122
+ const file = getWebConfigPath();
123
+ (0, fs_1.mkdirSync)((0, config_1.resolveHomeDir)(), { recursive: true });
124
+ const tmp = file + '.tmp';
125
+ (0, fs_1.writeFileSync)(tmp, JSON.stringify(cfg, null, 2), 'utf8');
126
+ (0, fs_1.renameSync)(tmp, file);
127
+ }
128
+ /** 将自定义模型规整为 ProviderConfig(供注入 FH_PROVIDERS) */
129
+ function toProviderConfigs(cfg) {
130
+ return cfg.models.providers
131
+ .filter((m) => m.enabled && m.model)
132
+ .map((m) => ({
133
+ id: m.id || m.model,
134
+ type: m.type,
135
+ baseURL: m.baseURL ||
136
+ (m.type === 'ollama' ? DEFAULT_BASE_URL_OLLAMA : ''),
137
+ model: m.model,
138
+ apiKey: m.apiKey || undefined,
139
+ tags: m.tags.length > 0 ? m.tags : ['code-gen', 'reasoning'],
140
+ costPer1k: m.costPer1k || 0,
141
+ }));
142
+ }
143
+ //# sourceMappingURL=web-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-config.js","sourceRoot":"","sources":["../../src/web/web-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,299 @@
1
+ # 飞虹 Code App 使用说明书(移动控制台)
2
+
3
+ **产品**:飞虹 Code 移动控制台(Android App + 手机浏览器版)
4
+ **版本**:v1.0.0(APK)· 移动版 H5
5
+ **日期**:2026-08-23
6
+ **署名**:晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
7
+
8
+ ---
9
+
10
+ ## 目录
11
+
12
+ 1. [产品简介](#一产品简介)
13
+ 2. [下载与安装](#二下载与安装)
14
+ 3. [登录](#三登录)
15
+ 4. [界面总览](#四界面总览)
16
+ 5. [功能详解](#五功能详解)
17
+ 6. [思维链路解读指南](#六思维链路解读指南)
18
+ 7. [大模型配置指南](#七大模型配置指南)
19
+ 8. [权限设置说明](#八权限设置说明)
20
+ 9. [常见问题(FAQ)](#九常见问题faq)
21
+ 10. [版本信息与更新](#十版本信息与更新)
22
+
23
+ ---
24
+
25
+ ## 一、产品简介
26
+
27
+ 飞虹 Code 移动控制台是飞虹 Code(终端 AI 编程智能体)的**手机端控制界面**。它对接部署在腾讯云服务器上的飞虹 Code 后端,让你在手机上随时随地:
28
+
29
+ - 用自然语言描述需求,发起 AI 编程任务
30
+ - 实时查看任务的思维链路(模型推理、工具调用、验证结果、最终回复)
31
+ - 管理快捷指令(自动化)、模板库、大模型配置
32
+ - 与企业级后端共享同一套任务体系(手机发起的任务与电脑 Web 控制台完全互通)
33
+
34
+ **两种使用形态**(功能完全一致):
35
+
36
+ | 形态 | 说明 | 适用场景 |
37
+ |------|------|----------|
38
+ | **Android App** | 安装 APK,独立图标启动 | 日常高频使用,像普通 App 一样 |
39
+ | **手机浏览器版** | 浏览器直接打开网址,可添加到主屏幕 | 不想安装、临时使用 |
40
+
41
+ ---
42
+
43
+ ## 二、下载与安装
44
+
45
+ ### 2.1 Android App 安装
46
+
47
+ **方式一:直接下载 APK**
48
+
49
+ 1. 手机浏览器打开以下地址:
50
+
51
+ ```
52
+ https://www.jb.klai.top/m/fhcode-v1.0.0.apk
53
+ ```
54
+
55
+ 2. 下载完成后点击安装。若提示「未知来源」:
56
+
57
+ - 点击弹窗中的「设置」→ 允许「来自此来源的应用」
58
+ - 返回继续安装
59
+ - (不同品牌手机路径略有差异:小米/红米:设置-更多设置-安全;华为/荣耀:设置-安全-更多安全设置;OPPO/vivo:设置-安全-未知来源)
60
+
61
+ 3. 安装完成后,桌面出现「飞虹 Code」图标,点击启动。
62
+
63
+ **方式二:浏览器直接使用**
64
+
65
+ 手机浏览器打开 `https://www.jb.klai.top/m/` 即可直接使用,无需安装。
66
+
67
+ > 提示:Android 浏览器(Chrome/Edge)打开移动版页面后,菜单中选择「添加到主屏幕」,即可像 App 一样从桌面启动。
68
+
69
+ ### 2.2 环境要求
70
+
71
+ - Android 8.0(API 26)及以上
72
+ - 需要联网(访问服务器域名 www.jb.klai.top,需能正常访问国内网络)
73
+
74
+ ---
75
+
76
+ ## 三、登录
77
+
78
+ 打开 App 后进入登录页:
79
+
80
+ 1. 输入**手机号码**(任意 11 位手机号即可,演示登录、无短信验证)
81
+ 2. 点击「手机号登录」
82
+ 3. 登录成功后自动进入「对话」页
83
+
84
+ **说明**:
85
+
86
+ - 登录凭据由 App 内置(App 专用通道),无需手动输入服务器账号密码
87
+ - 登录状态保存在本地,下次打开自动恢复;点击「我的-退出登录」可退出
88
+ - 若服务器会话过期,会自动跳回登录页并提示
89
+
90
+ ---
91
+
92
+ ## 四、界面总览
93
+
94
+ App 采用**底部 5 Tab 导航**,顶部为标题栏(右侧头像可打开用户菜单):
95
+
96
+ | Tab | 名称 | 功能 |
97
+ |-----|------|------|
98
+ | 💬 | 对话 | 发起任务、多轮对话、查看思维链路(默认页) |
99
+ | 📋 | 任务 | 全部任务列表、查看详情、删除 |
100
+ | ⚡ | 自动化 | 快捷指令一键运行、新建、删除 |
101
+ | 📚 | 模板 | 内置/自定义模板,点击填入输入框 |
102
+ | 👤 | 我的 | 大模型配置、权限设置、主题、关于、退出 |
103
+
104
+ ---
105
+
106
+ ## 五、功能详解
107
+
108
+ ### 5.1 对话页(💬)
109
+
110
+ 对话页是核心操作页,包含三部分:
111
+
112
+ **① 顶部任务栏**:显示当前任务目标与状态徽章(排队中/执行中/已完成/失败),右侧「+新建」按钮发起新任务。
113
+
114
+ **② 消息区**:按时间展示当前任务的完整过程:
115
+ - 对话流(你发的指令 + AI 的回复)
116
+ - 思维链路(模型推理、工具调用、验证结果)
117
+ - 最终回复 / 失败原因
118
+
119
+ **③ 底部输入栏**:输入指令,点击「▶」发送。
120
+
121
+ **发起新任务**:
122
+
123
+ 1. 点击顶部「+新建」
124
+ 2. 填写任务描述(必填),如:`请读取当前工作区 package.json,告诉我 name 和 version`
125
+ 3. 选择智能体类型(通用助手/修复代码/编写代码/执行命令)
126
+ 4. 选择工作区(默认服务器工作区,或指定磁盘目录)
127
+ 5. 点击「创建任务」,自动跳回对话页实时追踪
128
+
129
+ **多轮续接**:当前任务执行完成后,直接在输入框继续输入指令,消息会归属**同一任务**继续对话(保持上下文)。
130
+
131
+ > ⚠️ 任务**执行中**时不能发送新消息,需等待完成。此时发送会提示"任务执行中,请等待完成"。
132
+
133
+ ### 5.2 任务页(📋)
134
+
135
+ - **查看**:点击任意任务卡片 → 弹出任务详情(目标、状态、智能体、迭代次数、成本、最终结果、错误信息)
136
+ - **删除**:长按任务卡片 → 确认后删除
137
+ - **刷新**:右上角「刷新」按钮;页面也会每 5 秒自动刷新
138
+
139
+ 任务状态徽章含义:
140
+
141
+ | 徽章 | 含义 |
142
+ |------|------|
143
+ | 📥 排队中 | 任务已入队,等待执行 |
144
+ | ⏳ 执行中 | AI 正在推理/调用工具 |
145
+ | ✅ 已完成 | 执行成功,可查看最终回复 |
146
+ | ❌ 失败 | 执行失败,详情中显示原因(常见:未配置大模型) |
147
+
148
+ ### 5.3 自动化(⚡)
149
+
150
+ 快捷指令:把常用目标存成指令,一键发起任务。
151
+
152
+ **新建**:右上角「+新建」→ 填名称和目标 → 保存。
153
+
154
+ **运行**:点击指令卡片「▶ 运行」→ 立即发起任务,可到对话页查看。
155
+
156
+ **删除**:点击「删除」→ 确认。
157
+
158
+ ### 5.4 模板(📚)
159
+
160
+ - **内置模板**:8 个(编写新功能/调试 Bug/重构优化/生成测试/撰写文档/代码审查/解释代码/性能优化)
161
+ - **我的模板**:自己保存的模板(可在 Web 控制台保存,手机端同步可见)
162
+
163
+ **使用**:点击模板卡片「填入」→ 模板内容自动填入对话输入框 → 切到对话页补充细节后发送。
164
+
165
+ ### 5.5 我的(👤)
166
+
167
+ **① 大模型设置**:配置 AI 使用的模型(详见第七章)。
168
+
169
+ **② 权限设置**:配置任务执行期间 AI 的可读范围与操作权限(详见第八章)。
170
+
171
+ **③ 外观**:浅色/深色主题切换(自动记忆)。
172
+
173
+ **④ 关于**:版本信息。
174
+
175
+ **⑤ 退出登录**:清除本地登录状态。
176
+
177
+ ---
178
+
179
+ ## 六、思维链路解读指南
180
+
181
+ 对话页的消息区会展示任务全过程的「思维链路」,帮助你理解 AI 在做什么:
182
+
183
+ | 环节 | 显示 | 含义 |
184
+ |------|------|------|
185
+ | 🧠 模型推理 | 推理内容 + 使用的模型 | AI 的思考过程 |
186
+ | 🔧 调用工具 | 工具名 + 参数 | AI 正在调用文件读写/命令/搜索等工具 |
187
+ | ✅ 验证通过 / ❌ 验证失败 | 工具名 + 输出摘要 | 工具执行结果校验 |
188
+ | 🩹 自愈重试 | 错误类别 + 轮次 | AI 检测到错误并自我修复重试 |
189
+ | 📦 上下文压缩 | 压缩条数 | 长对话自动压缩以节省 Token |
190
+ | 📬 最终回复 | 完整回复文本 | 任务的最终答案(点「⚙️」可复制/编辑/分享) |
191
+ | ⛔ 任务失败 | 失败原因 | 出错说明 |
192
+
193
+ ---
194
+
195
+ ## 七、大模型配置指南
196
+
197
+ > ⚠️ **重要**:服务器默认**未配置大模型**。不配置模型时,任务会入队后失败(显示"任务失败")。**使用前必须先配置至少一个大模型。**
198
+
199
+ **配置步骤**:
200
+
201
+ 1. 进入「我的 → 大模型设置」
202
+ 2. 填写:
203
+ - **模型名称**(必填):如 `GPT-4o`、`通义千问`、`DeepSeek` 等
204
+ - **API 地址**:OpenAI 兼容接口地址,如 `https://api.openai.com/v1`
205
+ - **密钥(API Key)**:你的模型服务密钥 `sk-...`
206
+ - **推理过程运行内容**(可选):配置模型在中间推理环节的提示词
207
+ 3. 点击「保存配置」
208
+ 4. 如需设为默认:在模型列表中点击「设为默认」
209
+
210
+ **模型列表操作**:编辑(点「编辑」)、删除(点「删除」)、设默认(非默认模型显示「设为默认」)。
211
+
212
+ **多模型**:可保存多个模型。任务提交时默认使用"默认模型",也可在 Web 控制台底部随时切换。
213
+
214
+ **常用模型 API 地址参考**(需自行申请对应 Key):
215
+
216
+ | 服务商 | API 地址 |
217
+ |--------|----------|
218
+ | OpenAI | https://api.openai.com/v1 |
219
+ | DeepSeek | https://api.deepseek.com/v1 |
220
+ | 通义千问 | https://dashscope.aliyuncs.com/compatible-mode/v1 |
221
+ | 硅基流动 | https://api.siliconflow.cn/v1 |
222
+ | 本地 Ollama | http://localhost:11434/v1(仅服务器本机可用) |
223
+
224
+ ---
225
+
226
+ ## 八、权限设置说明
227
+
228
+ 「我的 → 权限设置」控制任务执行期间 AI 的能力边界:
229
+
230
+ **可读范围**:
231
+
232
+ | 选项 | 含义 |
233
+ |------|------|
234
+ | 仅当前工作区 | AI 只能读取当前工作区目录(推荐) |
235
+ | 指定目录 | AI 只能读取你指定的目录路径 |
236
+ | 全部文件 | AI 可读取服务器全部文件(谨慎) |
237
+
238
+ **操作权限**(开关):
239
+
240
+ | 权限 | 说明 | 默认 |
241
+ |------|------|------|
242
+ | 📖 读取文件 | AI 读取文件内容 | 开 |
243
+ | ✍️ 写入文件 | AI 修改/创建文件 | 关 |
244
+ | ⚡ 执行命令 | AI 在服务器执行 shell 命令 | 关 |
245
+ | 🌐 访问网络 | AI 访问互联网 | 开 |
246
+ | 🖥 浏览器控制 | AI 控制浏览器 | 关 |
247
+
248
+ > 提示:写入与执行命令默认关闭是**安全默认**。如需 AI 自动改代码/跑命令,请按需开启;任务在服务器执行,请确认操作影响。
249
+
250
+ ---
251
+
252
+ ## 九、常见问题(FAQ)
253
+
254
+ **Q1:任务创建后很快显示"失败"?**
255
+ 大概率是**未配置大模型**。到「我的 → 大模型设置」添加模型(API 地址 + Key)后重试。查看失败原因:任务列表点该任务 → 详情显示错误信息。
256
+
257
+ **Q2:发送消息提示"任务执行中,请等待完成"?**
258
+ 任务正在运行,需等待其完成(状态变为已完成/失败)后才能继续对话。
259
+
260
+ **Q3:App 打开显示"登录已过期"?**
261
+ 服务器会话过期,重新手机号登录即可。
262
+
263
+ **Q4:安装 APK 提示"未知来源"?**
264
+ 按第 2.1 节说明,在系统设置中允许该来源安装。
265
+
266
+ **Q5:下载 APK 慢或失败?**
267
+ 确认网络可访问 `www.jb.klai.top`;可尝试使用手机浏览器方式直接使用。
268
+
269
+ **Q6:模型配置保存失败?**
270
+ 检查网络与服务器状态;确认模型名称已填写。
271
+
272
+ **Q7:删除任务/指令失败?**
273
+ 任务运行中不能删除,需等执行结束;检查网络。
274
+
275
+ **Q8:App 卡顿或白屏?**
276
+ 下拉刷新页面(如有)或完全退出 App 重新打开;检查手机网络。
277
+
278
+ **Q9:如何保证数据安全?**
279
+ - 页面与登录接口受服务器 Basic Auth 保护,仅 App 内置凭据可访问
280
+ - 业务 API 全部要求 Bearer 令牌校验(未授权请求一律拒绝)
281
+ - 任务在服务器工作区范围执行,写入/命令权限默认关闭
282
+
283
+ ---
284
+
285
+ ## 十、版本信息与更新
286
+
287
+ | 版本 | 说明 | 日期 |
288
+ |------|------|------|
289
+ | v1.0.0 | 首个移动控制台版本(Android APK + H5) | 2026-08-23 |
290
+
291
+ **更新方式**:重新下载最新 APK 安装覆盖(需在「我的 → 关于」查看当前版本)。
292
+
293
+ **Web 控制台同步**:手机端与电脑端 `https://www.jb.klai.top` 共享同一后端,任务/自动化/模板/模型配置实时互通。
294
+
295
+ ---
296
+
297
+ **支持与反馈**:如遇问题请联系研发中心(晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹)。
298
+
299
+ *© 2026 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 保留所有权利*