feihong-code 7.2.0 → 7.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.
- package/.github/workflows/ci.yml +54 -1
- package/.github/workflows/release.yml +30 -0
- package/.github/workflows/swebench-real.yml +84 -0
- package/CHANGELOG.md +41 -39
- package/CONTRIBUTING.md +9 -2
- package/README.md +56 -6
- package/README.self-evolve.md +279 -274
- package/dist/agent/change-manager.js +1 -1
- package/dist/agent/code-rag.js +1 -1
- package/dist/agent/code-review.js +1 -1
- package/dist/agent/code-writer.js +1 -1
- package/dist/agent/completion-engine.js +76 -45
- package/dist/agent/completion-engine.js.map +1 -1
- package/dist/agent/completion-postprocess.js +109 -0
- package/dist/agent/completion-postprocess.js.map +1 -0
- package/dist/agent/context-budget.js +121 -0
- package/dist/agent/context-budget.js.map +1 -0
- package/dist/agent/context-compactor.js +58 -0
- package/dist/agent/context-compactor.js.map +1 -1
- package/dist/agent/experience.js +1 -1
- package/dist/agent/layered-memory.js +1 -1
- package/dist/agent/lint.js +121 -0
- package/dist/agent/lint.js.map +1 -0
- package/dist/agent/orchestrator.js +106 -31
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/parallel-orchestrator.js +1 -1
- package/dist/agent/planner.js +8 -3
- package/dist/agent/planner.js.map +1 -1
- package/dist/agent/prompts.js +55 -55
- package/dist/agent/quality-gate.js +1 -1
- package/dist/agent/repo-context.js +1 -1
- package/dist/agent/repo-reader.js +1 -1
- package/dist/agent/repo-underwriter.js +1 -1
- package/dist/agent/self-correction.js +25 -25
- package/dist/agent/self-heal.js +32 -27
- package/dist/agent/self-heal.js.map +1 -1
- package/dist/agent/self-improver.js +1 -1
- package/dist/agent/subagent-summary.js +1 -1
- package/dist/agent/subagent.js +1 -1
- package/dist/agent/swe-agent.js +1 -1
- package/dist/agent/swe-verifier.js +1 -1
- package/dist/agent/symbol-index.js +1 -1
- package/dist/agent/team.js +1 -1
- package/dist/agent/type-checker.js +1 -1
- package/dist/cli/commands.js +16 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/index.js +66 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/multi-pane-tui.js +217 -0
- package/dist/cli/multi-pane-tui.js.map +1 -0
- package/dist/cli/repl.js +1 -1
- package/dist/cli/run.js +168 -42
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/self-evolve-cli.js +168 -0
- package/dist/cli/tui-run.js +79 -0
- package/dist/cli/tui-run.js.map +1 -0
- package/dist/cli/tui.js +1 -1
- package/dist/cli/tui.js.map +1 -1
- package/dist/cli/version.js +3 -3
- package/dist/cli/version.js.map +1 -1
- package/dist/enterprise/audit.js +1 -1
- package/dist/enterprise/index.js +1 -1
- package/dist/enterprise/policy.js +1 -1
- package/dist/enterprise/quota.js +1 -1
- package/dist/enterprise/tenant.js +1 -1
- package/dist/harness/executor.js +1 -1
- package/dist/harness/index.js +1 -1
- package/dist/harness/loader.js +1 -1
- package/dist/harness/types.js +1 -1
- package/dist/harness/verifier.js +52 -12
- package/dist/harness/verifier.js.map +1 -1
- package/dist/integrations/feishu-bridge.js +348 -0
- package/dist/integrations/feishu-bridge.js.map +1 -0
- package/dist/integrations/github-mcp.js +137 -0
- package/dist/integrations/github-mcp.js.map +1 -0
- package/dist/integrations/wechat-bridge.js +499 -0
- package/dist/integrations/wechat-bridge.js.map +1 -0
- package/dist/integrations/yuanbao-bridge.js +326 -0
- package/dist/integrations/yuanbao-bridge.js.map +1 -0
- package/dist/lsp/lsp-client.js +183 -0
- package/dist/lsp/lsp-client.js.map +1 -0
- package/dist/lsp/lsp-service.js +159 -0
- package/dist/lsp/lsp-service.js.map +1 -0
- package/dist/models/model-router.js +1 -1
- package/dist/models/model.dto.js +1 -1
- package/dist/models/providers/ollama.provider.js +1 -1
- package/dist/models/providers/openai-compatible.provider.js +1 -1
- package/dist/plugins/manager.js +50 -2
- package/dist/plugins/manager.js.map +1 -1
- package/dist/plugins/plugin-loader.js +1 -1
- package/dist/runtime/event-log.js +1 -1
- package/dist/runtime/git.js +1 -1
- package/dist/runtime/hooks.js +71 -4
- package/dist/runtime/hooks.js.map +1 -1
- package/dist/runtime/session-persist.js +1 -1
- package/dist/runtime/worktree.js +1 -1
- package/dist/self-evolve/manager.js +517 -401
- package/dist/self-evolve/self-heal-scheduler.js +160 -0
- package/dist/self-evolve/self-heal-scheduler.js.map +1 -0
- package/dist/shared/concurrency.js +1 -1
- package/dist/shared/config.js +4 -2
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/errors.js +1 -1
- package/dist/shared/i18n.js +109 -101
- package/dist/shared/i18n.js.map +1 -1
- package/dist/shared/secure-store.js +12 -5
- package/dist/shared/secure-store.js.map +1 -1
- package/dist/shared/types.js +1 -1
- package/dist/skills/goal.js +1 -1
- package/dist/skills/grill.js +1 -1
- package/dist/skills/plan.js +1 -1
- package/dist/skills/pua-hooks.js +273 -0
- package/dist/skills/pua-hooks.js.map +1 -0
- package/dist/skills/self-heal.js +9 -3
- package/dist/skills/self-heal.js.map +1 -1
- package/dist/skills/skill-loader.js +1 -1
- package/dist/skills/skill-market.js +84 -8
- package/dist/skills/skill-market.js.map +1 -1
- package/dist/tools/analysis/code-analyzer.js +1 -1
- package/dist/tools/file/edit.tool.js +18 -3
- package/dist/tools/file/edit.tool.js.map +1 -1
- package/dist/tools/file/list.tool.js +1 -1
- package/dist/tools/file/read.tool.js +1 -1
- package/dist/tools/file/write.tool.js +1 -1
- package/dist/tools/generator/code-generator.js +41 -41
- package/dist/tools/generator/test-generator.js +10 -10
- package/dist/tools/index.js +1 -1
- package/dist/tools/mcp/index.js +1 -1
- package/dist/tools/mcp/mcp-client.js +1 -1
- package/dist/tools/safe-path.js +1 -1
- package/dist/tools/search/grep.tool.js +1 -1
- package/dist/tools/shell/exec.js +24 -2
- package/dist/tools/shell/exec.js.map +1 -1
- package/dist/tools/shell/run-shell.tool.js +1 -1
- package/dist/tools/skills/load-skill.tool.js +1 -1
- package/dist/tools/tool.registry.js +10 -1
- package/dist/tools/tool.registry.js.map +1 -1
- package/dist/tools/verify/build-check.tool.js +1 -1
- package/dist/tools/verify/test-run.tool.js +1 -1
- package/dist/tools/web/web.tool.js +1 -1
- package/dist/voice/voice-programming.js +32 -6
- package/dist/voice/voice-programming.js.map +1 -1
- package/dist/web/auth.js +34 -2
- package/dist/web/auth.js.map +1 -1
- package/dist/web/channels.js +1 -1
- package/dist/web/extra-apis.js +440 -0
- package/dist/web/extra-apis.js.map +1 -0
- package/dist/web/public/css/style.css +99 -72
- package/dist/web/public/index.html +44 -1
- package/dist/web/public/js/api.js +64 -2
- package/dist/web/public/js/app.js +151 -128
- package/dist/web/public/js/mock-api.js +25 -0
- package/dist/web/public/js/monaco-editor.js +161 -1
- package/dist/web/public/js/ui.js +292 -56
- package/dist/web/public/service-worker.js +5 -29
- package/dist/web/server.js +178 -61
- package/dist/web/server.js.map +1 -1
- package/dist/web/task-queue.js +6 -21
- package/dist/web/task-queue.js.map +1 -1
- package/docs/App/344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +1 -1
- package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +1 -1
- package/docs/BENCHMARK_REPORT_en.md +62 -5
- package/docs/BENCHMARK_REPORT_zh.md +66 -9
- package/docs/DPA.md +65 -0
- package/docs/DPA/346/225/260/346/215/256/345/244/204/347/220/206/345/215/217/350/256/256/346/250/241/346/235/277_v1.0.md +69 -0
- package/docs/Deployment_Guide_EN.md +1 -1
- package/docs/SECURITY_WHITEPAPER.md +74 -0
- package/docs/SELF-EVOLVE-GUIDE.md +1 -1
- package/docs/SWE_BENCH_REPORT.md +73 -0
- package/docs/TECHNICAL_SPEC_en.md +1 -1
- package/docs/TECHNICAL_SPEC_zh.md +1 -1
- package/docs/Technical_Manual_EN.md +1 -1
- package/docs/UPDATE_NOTES_en.md +1 -1
- package/docs/UPDATE_NOTES_zh.md +1 -1
- package/docs/UPGRADE_7.2.0.md +309 -0
- package/docs/UPGRADE_GUIDE_7_5.md +86 -0
- package/docs/UPGRADE_GUIDE_7_6.md +153 -0
- package/docs/User_Manual_EN.md +1 -1
- package/docs/VOLTAGENT_SKILLS_CATALOG.md +95 -0
- package/docs/error-codes.md +1 -1
- package/docs/geo-feihong-code.html +391 -0
- package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +5 -3
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +140 -231
- package/docs//345/205/250/351/235/242/345/244/215/347/233/230_50/350/275/256/346/267/261/345/272/246/345/256/241/350/256/241_v7.2.0.md +208 -0
- package/docs//345/205/250/351/235/242/345/244/215/347/233/230_6/351/241/271/351/207/215/347/202/271/346/240/270/346/237/245_v7.2.0.md +152 -0
- package/docs//345/205/250/351/235/242/345/244/215/347/233/230_/350/277/220/350/241/214/346/227/266/345/256/236/346/265/213/347/211/210_v7.2.0.md +271 -0
- package/docs//345/220/210/350/247/204/350/256/244/350/257/201/345/207/206/345/244/207/346/270/205/345/215/225_v7.2.0.md +59 -0
- package/docs//345/256/211/345/205/250/347/231/275/347/232/256/344/271/246_v7.2.0.md +84 -0
- package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +240 -149
- package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +2 -2
- package/electron/main.js +4 -202
- package/package.json +182 -172
- package/templates/skills/api-design/SKILL.md +27 -0
- package/templates/skills/code-review/SKILL.md +35 -0
- package/templates/skills/dependency-upgrade/SKILL.md +29 -0
- package/templates/skills/doc-gen/SKILL.md +29 -0
- package/templates/skills/git-flow/SKILL.md +26 -0
- package/templates/skills/onboarding/SKILL.md +27 -0
- package/templates/skills/performance/SKILL.md +29 -0
- package/templates/skills/refactor/SKILL.md +28 -0
- package/templates/skills/security-audit/SKILL.md +28 -0
- package/templates/skills/test-gen/SKILL.md +30 -0
- package/docs/DEPLOYMENT.md +0 -382
- package/docs/MODEL_FINETUNING.md +0 -405
package/dist/skills/grill.js
CHANGED
package/dist/skills/plan.js
CHANGED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PUA_FLAVORS = void 0;
|
|
4
|
+
exports.loadPuaConfig = loadPuaConfig;
|
|
5
|
+
exports.savePuaConfig = savePuaConfig;
|
|
6
|
+
exports.setPuaFlavor = setPuaFlavor;
|
|
7
|
+
exports.savePuaJournal = savePuaJournal;
|
|
8
|
+
exports.registerPuaHooks = registerPuaHooks;
|
|
9
|
+
exports.getPuaState = getPuaState;
|
|
10
|
+
exports.__resetPuaStateForTest = __resetPuaStateForTest;
|
|
11
|
+
/**
|
|
12
|
+
* 飞虹 Code (对标 Muse Code · 自研内核)
|
|
13
|
+
* 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
14
|
+
*
|
|
15
|
+
* pua-ext 技能 hooks 实现:
|
|
16
|
+
* - SessionStart:加载 ~/.pua/config.json,注入 [PUA Always-On] + Current Flavor 到系统提示
|
|
17
|
+
* - PostToolUse:检测工具失败,更新失败计数,按 L1-L4 等级注入压力旁白到工具输出
|
|
18
|
+
* - PreCompact:上下文压缩前,保存失败计数和状态到 ~/.pua/builder-journal.md
|
|
19
|
+
*
|
|
20
|
+
* 状态管理:
|
|
21
|
+
* - ~/.pua/config.json:用户配置(flavor/alwaysOn/自定义旁白)
|
|
22
|
+
* - ~/.pua/builder-journal.md:失败计数持久化(跨会话恢复)
|
|
23
|
+
* - 内存状态:当前会话失败计数、当前活跃味道
|
|
24
|
+
*/
|
|
25
|
+
const fs_1 = require("fs");
|
|
26
|
+
const os_1 = require("os");
|
|
27
|
+
const path_1 = require("path");
|
|
28
|
+
const logger_1 = require("../shared/logger");
|
|
29
|
+
const hooks_1 = require("../runtime/hooks");
|
|
30
|
+
const PUA_DIR = (0, path_1.join)((0, os_1.homedir)(), '.pua');
|
|
31
|
+
const CONFIG_FILE = (0, path_1.join)(PUA_DIR, 'config.json');
|
|
32
|
+
const JOURNAL_FILE = (0, path_1.join)(PUA_DIR, 'builder-journal.md');
|
|
33
|
+
/** 支持的味道列表(与 pua-ext references/flavors.md 对齐) */
|
|
34
|
+
exports.PUA_FLAVORS = [
|
|
35
|
+
'alibaba', 'bytedance', 'huawei', 'tencent', 'meituan', 'pinduoduo',
|
|
36
|
+
'baidu', 'netflix', 'apple', 'tesla', 'amazon', 'jd', 'xiaomi',
|
|
37
|
+
];
|
|
38
|
+
/** 味道显示名和图标 */
|
|
39
|
+
const FLAVOR_META = {
|
|
40
|
+
alibaba: { icon: '🟠', name: '阿里味', keywords: ['底层逻辑', '抓手', '闭环', '颗粒度', 'owner意识'] },
|
|
41
|
+
bytedance: { icon: '🟡', name: '字节味', keywords: ['ROI', 'Always Day 1', '坦诚清晰', '务实敢为'] },
|
|
42
|
+
huawei: { icon: '🔴', name: '华为味', keywords: ['力出一孔', '自我批判', '让听得见炮声的人呼唤炮火'] },
|
|
43
|
+
tencent: { icon: '🟢', name: '腾讯味', keywords: ['赛马机制', '小步快跑', '用户价值'] },
|
|
44
|
+
meituan: { icon: '🔵', name: '美团味', keywords: ['做难而正确的事', '猛将必发于卒伍', '长期有耐心'] },
|
|
45
|
+
pinduoduo: { icon: '🟣', name: '拼多多味', keywords: ['本分', '拼命不是拼凑', '你不干有的是人'] },
|
|
46
|
+
baidu: { icon: '⚫', name: '百度味', keywords: ['简单可依赖', '技术信仰', '基本盘'] },
|
|
47
|
+
netflix: { icon: '🟤', name: 'Netflix味', keywords: ['Keeper Test', 'pro sports team', 'generous severance'] },
|
|
48
|
+
apple: { icon: '⬜', name: 'Jobs味', keywords: ['A players', 'real artists ship', '减法优先'] },
|
|
49
|
+
tesla: { icon: '⬛', name: 'Musk味', keywords: ['extremely hardcore', 'ship or die', 'the algorithm'] },
|
|
50
|
+
amazon: { icon: '🔶', name: 'Amazon味', keywords: ['Customer Obsession', 'Bias for Action', 'Dive Deep'] },
|
|
51
|
+
jd: { icon: '🟦', name: '京东味', keywords: ['只做第一', '客户体验零容忍', '一线指挥'] },
|
|
52
|
+
xiaomi: { icon: '🟧', name: '小米味', keywords: ['专注极致口碑快', '和用户交朋友', '性价比'] },
|
|
53
|
+
};
|
|
54
|
+
const DEFAULT_CONFIG = {
|
|
55
|
+
alwaysOn: true,
|
|
56
|
+
flavor: 'alibaba',
|
|
57
|
+
density: 'normal',
|
|
58
|
+
};
|
|
59
|
+
let config = null;
|
|
60
|
+
let state = null;
|
|
61
|
+
/** 确保 ~/.pua 目录存在 */
|
|
62
|
+
function ensureDir() {
|
|
63
|
+
if (!(0, fs_1.existsSync)(PUA_DIR)) {
|
|
64
|
+
(0, fs_1.mkdirSync)(PUA_DIR, { recursive: true });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** 加载配置(带缓存) */
|
|
68
|
+
function loadPuaConfig() {
|
|
69
|
+
if (config)
|
|
70
|
+
return config;
|
|
71
|
+
ensureDir();
|
|
72
|
+
let loaded = { ...DEFAULT_CONFIG };
|
|
73
|
+
if ((0, fs_1.existsSync)(CONFIG_FILE)) {
|
|
74
|
+
try {
|
|
75
|
+
const raw = (0, fs_1.readFileSync)(CONFIG_FILE, 'utf8');
|
|
76
|
+
const parsed = JSON.parse(raw);
|
|
77
|
+
loaded = { ...DEFAULT_CONFIG, ...parsed };
|
|
78
|
+
if (!exports.PUA_FLAVORS.includes(loaded.flavor))
|
|
79
|
+
loaded.flavor = 'alibaba';
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
logger_1.logger.warn('pua config parse failed, using default', { error: e instanceof Error ? e.message : String(e) });
|
|
83
|
+
loaded = { ...DEFAULT_CONFIG };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
savePuaConfig(loaded);
|
|
88
|
+
}
|
|
89
|
+
config = loaded;
|
|
90
|
+
return config;
|
|
91
|
+
}
|
|
92
|
+
/** 保存配置 */
|
|
93
|
+
function savePuaConfig(cfg) {
|
|
94
|
+
ensureDir();
|
|
95
|
+
(0, fs_1.writeFileSync)(CONFIG_FILE, JSON.stringify(cfg, null, 2), 'utf8');
|
|
96
|
+
config = cfg;
|
|
97
|
+
}
|
|
98
|
+
/** 切换味道(用户手动设置时持久化) */
|
|
99
|
+
function setPuaFlavor(flavor) {
|
|
100
|
+
const cfg = loadPuaConfig();
|
|
101
|
+
cfg.flavor = flavor;
|
|
102
|
+
savePuaConfig(cfg);
|
|
103
|
+
if (state)
|
|
104
|
+
state.activeFlavor = flavor;
|
|
105
|
+
logger_1.logger.info('pua flavor changed', { flavor });
|
|
106
|
+
}
|
|
107
|
+
/** 初始化内存状态(SessionStart 时调用) */
|
|
108
|
+
function initState() {
|
|
109
|
+
const cfg = loadPuaConfig();
|
|
110
|
+
// 尝试从 builder-journal.md 恢复上次失败计数
|
|
111
|
+
let restoredCount = 0;
|
|
112
|
+
if ((0, fs_1.existsSync)(JOURNAL_FILE)) {
|
|
113
|
+
try {
|
|
114
|
+
const raw = (0, fs_1.readFileSync)(JOURNAL_FILE, 'utf8');
|
|
115
|
+
const match = raw.match(/失败计数[::]\s*(\d+)/);
|
|
116
|
+
if (match)
|
|
117
|
+
restoredCount = parseInt(match[1], 10) || 0;
|
|
118
|
+
}
|
|
119
|
+
catch { /* 忽略 */ }
|
|
120
|
+
}
|
|
121
|
+
state = {
|
|
122
|
+
failureCount: restoredCount,
|
|
123
|
+
activeFlavor: cfg.flavor,
|
|
124
|
+
sessionStart: new Date().toISOString(),
|
|
125
|
+
};
|
|
126
|
+
logger_1.logger.info('pua state initialized', { flavor: state.activeFlavor, restoredFailures: restoredCount });
|
|
127
|
+
return state;
|
|
128
|
+
}
|
|
129
|
+
/** 获取当前状态(懒初始化) */
|
|
130
|
+
function getState() {
|
|
131
|
+
if (!state)
|
|
132
|
+
state = initState();
|
|
133
|
+
return state;
|
|
134
|
+
}
|
|
135
|
+
/** 根据失败次数获取压力等级和旁白 */
|
|
136
|
+
function getPressureAside(count, flavor) {
|
|
137
|
+
const meta = FLAVOR_META[flavor];
|
|
138
|
+
const kw = meta.keywords[Math.floor(Math.random() * meta.keywords.length)];
|
|
139
|
+
if (count <= 1)
|
|
140
|
+
return null; // 第1次失败不注入旁白
|
|
141
|
+
const asides = {
|
|
142
|
+
2: {
|
|
143
|
+
level: 'L1 温和失望',
|
|
144
|
+
aside: `> [${meta.icon} ${meta.name}] 第 ${count} 次了。${kw}——换个本质不同的方案,别在原地打转。`,
|
|
145
|
+
},
|
|
146
|
+
3: {
|
|
147
|
+
level: 'L2 灵魂拷问',
|
|
148
|
+
aside: `> [${meta.icon} ${meta.name}] 第 ${count} 次。${kw}——搜过了吗?读过源码了吗?列3个假设再动手。`,
|
|
149
|
+
},
|
|
150
|
+
4: {
|
|
151
|
+
level: 'L3 绩效审视',
|
|
152
|
+
aside: `> [${meta.icon} ${meta.name}] 第 ${count} 次。${kw}——7项检查清单走完了吗?没走完=3.25。`,
|
|
153
|
+
},
|
|
154
|
+
5: {
|
|
155
|
+
level: 'L4 毕业警告',
|
|
156
|
+
aside: `> [${meta.icon} ${meta.name}] 第 ${count} 次。${kw}——拼命模式。你可能就要毕业了。`,
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
if (count >= 5)
|
|
160
|
+
return asides[5];
|
|
161
|
+
return asides[count] || null;
|
|
162
|
+
}
|
|
163
|
+
/** 保存失败计数到 builder-journal.md(PreCompact 和会话结束时调用) */
|
|
164
|
+
function savePuaJournal() {
|
|
165
|
+
if (!state)
|
|
166
|
+
return;
|
|
167
|
+
ensureDir();
|
|
168
|
+
const content = [
|
|
169
|
+
'# PUA Builder Journal',
|
|
170
|
+
'',
|
|
171
|
+
`> 会话开始: ${state.sessionStart}`,
|
|
172
|
+
`> 当前味道: ${FLAVOR_META[state.activeFlavor].icon} ${FLAVOR_META[state.activeFlavor].name}`,
|
|
173
|
+
`> 失败计数: ${state.failureCount}`,
|
|
174
|
+
`> 上次失败工具: ${state.lastFailedTool ?? '无'}`,
|
|
175
|
+
`> 更新时间: ${new Date().toISOString()}`,
|
|
176
|
+
'',
|
|
177
|
+
'## 失败记录',
|
|
178
|
+
'',
|
|
179
|
+
...(state.lastFailedTool ? [`- ${new Date().toISOString()}: ${state.lastFailedTool} (累计 ${state.failureCount} 次)`] : ['- 暂无']),
|
|
180
|
+
'',
|
|
181
|
+
].join('\n');
|
|
182
|
+
(0, fs_1.writeFileSync)(JOURNAL_FILE, content, 'utf8');
|
|
183
|
+
}
|
|
184
|
+
/* ===================== Hook 实现 ===================== */
|
|
185
|
+
/** SessionStart hook:加载配置,注入 [PUA Always-On] + Current Flavor */
|
|
186
|
+
async function sessionStartHook(_ctx) {
|
|
187
|
+
const cfg = loadPuaConfig();
|
|
188
|
+
if (!cfg.alwaysOn)
|
|
189
|
+
return {};
|
|
190
|
+
const st = getState();
|
|
191
|
+
const meta = FLAVOR_META[st.activeFlavor];
|
|
192
|
+
const injection = [
|
|
193
|
+
`[PUA Always-On 🔥]`,
|
|
194
|
+
`当前味道: ${meta.icon} ${meta.name}(${meta.keywords.slice(0, 2).join(' · ')})`,
|
|
195
|
+
`行为协议: 闭环验证 · 事实驱动 · 穷尽一切 · Owner意识`,
|
|
196
|
+
`失败计数: ${st.failureCount}(从 builder-journal 恢复)`,
|
|
197
|
+
`方法论路由: 根据任务类型自动选择味道和方法论,用户手动设置的味道优先`,
|
|
198
|
+
].join('\n');
|
|
199
|
+
return { systemInjection: injection };
|
|
200
|
+
}
|
|
201
|
+
/** PostToolUse hook:检测工具失败,更新计数,注入压力旁白 */
|
|
202
|
+
async function postToolUseHook(ctx) {
|
|
203
|
+
const cfg = loadPuaConfig();
|
|
204
|
+
if (!cfg.alwaysOn)
|
|
205
|
+
return {};
|
|
206
|
+
const st = getState();
|
|
207
|
+
// 只关注实际执行的工具(Bash/Write/Edit 等),忽略只读工具
|
|
208
|
+
const actionableTools = ['run_shell', 'write_file', 'edit_file', 'execute_command', 'bash'];
|
|
209
|
+
const isActionable = ctx.tool && actionableTools.some((t) => ctx.tool?.toLowerCase().includes(t.toLowerCase()));
|
|
210
|
+
if (ctx.ok === false && isActionable) {
|
|
211
|
+
st.failureCount++;
|
|
212
|
+
st.lastFailedTool = ctx.tool;
|
|
213
|
+
logger_1.logger.info('pua failure detected', { tool: ctx.tool, count: st.failureCount });
|
|
214
|
+
const pressure = getPressureAside(st.failureCount, st.activeFlavor);
|
|
215
|
+
if (pressure) {
|
|
216
|
+
return {
|
|
217
|
+
outputInjection: `\n${pressure.aside}\n`,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (ctx.ok === true && isActionable && st.failureCount > 0) {
|
|
222
|
+
// 成功后重置失败计数(连续成功才重置,这里简单处理)
|
|
223
|
+
st.failureCount = Math.max(0, st.failureCount - 1);
|
|
224
|
+
}
|
|
225
|
+
return {};
|
|
226
|
+
}
|
|
227
|
+
/** PreCompact hook:压缩前保存状态到 builder-journal.md */
|
|
228
|
+
async function preCompactHook(ctx) {
|
|
229
|
+
const cfg = loadPuaConfig();
|
|
230
|
+
if (!cfg.alwaysOn)
|
|
231
|
+
return {};
|
|
232
|
+
savePuaJournal();
|
|
233
|
+
logger_1.logger.info('pua state persisted before compaction', {
|
|
234
|
+
messageCount: ctx.messageCount,
|
|
235
|
+
failureCount: state?.failureCount ?? 0,
|
|
236
|
+
});
|
|
237
|
+
return {};
|
|
238
|
+
}
|
|
239
|
+
/* ===================== 注册与初始化 ===================== */
|
|
240
|
+
let registered = false;
|
|
241
|
+
/**
|
|
242
|
+
* 注册 pua-ext 技能 hooks(幂等,只注册一次)。
|
|
243
|
+
* 在 CLI 入口或技能加载时调用。
|
|
244
|
+
*/
|
|
245
|
+
function registerPuaHooks() {
|
|
246
|
+
if (registered)
|
|
247
|
+
return;
|
|
248
|
+
registered = true;
|
|
249
|
+
(0, hooks_1.registerSkillHook)('SessionStart', sessionStartHook, 'pua-ext');
|
|
250
|
+
(0, hooks_1.registerSkillHook)('PostToolUse', postToolUseHook, 'pua-ext');
|
|
251
|
+
(0, hooks_1.registerSkillHook)('PreCompact', preCompactHook, 'pua-ext');
|
|
252
|
+
// 确保目录和默认配置存在
|
|
253
|
+
loadPuaConfig();
|
|
254
|
+
logger_1.logger.info('pua-ext hooks registered');
|
|
255
|
+
}
|
|
256
|
+
/** 获取当前 PUA 状态(用于调试/测试) */
|
|
257
|
+
function getPuaState() {
|
|
258
|
+
if (!state)
|
|
259
|
+
return null;
|
|
260
|
+
return {
|
|
261
|
+
flavor: state.activeFlavor,
|
|
262
|
+
failureCount: state.failureCount,
|
|
263
|
+
alwaysOn: loadPuaConfig().alwaysOn,
|
|
264
|
+
lastFailedTool: state.lastFailedTool,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/** 重置状态(仅用于测试) */
|
|
268
|
+
function __resetPuaStateForTest() {
|
|
269
|
+
state = null;
|
|
270
|
+
config = null;
|
|
271
|
+
registered = false;
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=pua-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pua-hooks.js","sourceRoot":"","sources":["../../src/skills/pua-hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/skills/self-heal.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runSelfHeal = runSelfHeal;
|
|
4
4
|
/**
|
|
5
|
-
* 飞虹 Code (Muse Code
|
|
5
|
+
* 飞虹 Code (对标 Muse Code · 自研内核)
|
|
6
6
|
* 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
7
7
|
*
|
|
8
8
|
* /self-heal 技能:系统化自我修复错误。
|
|
@@ -20,6 +20,10 @@ const VERIFY_BY_CATEGORY = {
|
|
|
20
20
|
timeout: ['检查死循环/长任务,缩短超时或分批执行', 'ps 查看残留进程'],
|
|
21
21
|
'permission-denied': ['检查文件权限/目录存在性', '确认进程用户是否有写权限'],
|
|
22
22
|
'model-error': ['检查 API Key / 配额 / 网络连通性', 'curl 直连模型端点验证'],
|
|
23
|
+
'file-not-found': ['list_dir 勘察当前目录结构', 'read_file 确认目标文件路径存在'],
|
|
24
|
+
'build-error': ['npm install 确保依赖齐全', 'npm run build 查看完整错误日志'],
|
|
25
|
+
'command-not-found': ['which <命令> 确认是否安装', '检查 PATH 或改用已安装的等价命令'],
|
|
26
|
+
'invalid-args': ['查阅目标工具的参数文档', '核对参数名与工具名称是否匹配'],
|
|
23
27
|
};
|
|
24
28
|
function categoryName(cat) {
|
|
25
29
|
const map = {
|
|
@@ -42,8 +46,10 @@ function runSelfHeal(errorText, context = '') {
|
|
|
42
46
|
const text = (errorText || '').trim();
|
|
43
47
|
const ctx = (context || '').trim();
|
|
44
48
|
const analysis = (0, self_heal_1.classifyError)(text);
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
// classifyError 永不返回 null(未命中规则时返回 category='unknown' 兜底),
|
|
50
|
+
// 因此必须用 category 判定是否已知,而不是 `analysis !== null`(那会恒为 true,导致未知错误被误判为可自动修复)。
|
|
51
|
+
const known = analysis.category !== 'unknown';
|
|
52
|
+
const category = analysis.category;
|
|
47
53
|
const fixHint = known ? analysis.fixHint : '无法按规则表归类,建议人工查看完整堆栈与上下文。';
|
|
48
54
|
const verifyCommands = VERIFY_BY_CATEGORY[category] || ['重跑原失败操作确认'];
|
|
49
55
|
const lines = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-heal.js","sourceRoot":"","sources":["../../src/skills/self-heal.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"self-heal.js","sourceRoot":"","sources":["../../src/skills/self-heal.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ exports.discoverSkills = discoverSkills;
|
|
|
6
6
|
exports.buildSkillIndexPrompt = buildSkillIndexPrompt;
|
|
7
7
|
exports.loadSkillBody = loadSkillBody;
|
|
8
8
|
/**
|
|
9
|
-
* 飞虹 Code (Muse Code
|
|
9
|
+
* 飞虹 Code (对标 Muse Code · 自研内核)
|
|
10
10
|
* 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
11
11
|
*
|
|
12
12
|
* P1-2 SKILL.md 技能标准(对齐 Codex Agent Skills):
|
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.WELL_KNOWN_PATH = void 0;
|
|
4
37
|
exports.fetchMarketIndex = fetchMarketIndex;
|
|
@@ -10,7 +43,7 @@ exports.verifyDigest = verifyDigest;
|
|
|
10
43
|
exports.unpackTarGz = unpackTarGz;
|
|
11
44
|
exports.installMarketSkill = installMarketSkill;
|
|
12
45
|
/**
|
|
13
|
-
* 飞虹 Code (Muse Code
|
|
46
|
+
* 飞虹 Code (对标 Muse Code · 自研内核)
|
|
14
47
|
* 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
15
48
|
*
|
|
16
49
|
* Skills 市场对接(agentskills.io discovery index 规范 0.2.0):
|
|
@@ -35,6 +68,18 @@ const SUPPORTED_SCHEMAS = [
|
|
|
35
68
|
];
|
|
36
69
|
/** 抓取并解析市场索引(未知 $schema 告警但返回,由调用方决定) */
|
|
37
70
|
async function fetchMarketIndex(marketBaseUrl) {
|
|
71
|
+
// 本地种子市场源:local:<name> → 读取 templates/market/<name>-index.json(离线可用,零网络)
|
|
72
|
+
if (marketBaseUrl.startsWith('local:')) {
|
|
73
|
+
const name = marketBaseUrl.slice('local:'.length).trim() || 'index';
|
|
74
|
+
const seedPath = (0, path_1.join)(__dirname, '../../templates/market', `${name}-index.json`);
|
|
75
|
+
if (!(0, fs_1.existsSync)(seedPath))
|
|
76
|
+
throw new Error(`本地市场源不存在:${seedPath}`);
|
|
77
|
+
const parsed = JSON.parse((0, fs_1.readFileSync)(seedPath, 'utf8'));
|
|
78
|
+
const skills = Array.isArray(parsed.skills)
|
|
79
|
+
? parsed.skills.filter((s) => !!s && typeof s === 'object' && typeof s.name === 'string' && typeof s.url === 'string')
|
|
80
|
+
: [];
|
|
81
|
+
return { schema: parsed.$schema, skills, source: `local:${name}` };
|
|
82
|
+
}
|
|
38
83
|
const base = marketBaseUrl.replace(/\/+$/, '');
|
|
39
84
|
const indexUrl = base + exports.WELL_KNOWN_PATH;
|
|
40
85
|
const controller = new AbortController();
|
|
@@ -120,16 +165,47 @@ function verifyDigest(buf, digest) {
|
|
|
120
165
|
return sha256Hex(buf) === m[1].toLowerCase();
|
|
121
166
|
}
|
|
122
167
|
async function download(url, timeoutMs = 30000) {
|
|
123
|
-
|
|
124
|
-
|
|
168
|
+
// 首选 Node 原生 fetch(零依赖);失败时回退 curl 子进程——
|
|
169
|
+
// 部分受限网络下 Node undici 连接 raw.githubusercontent 会超时/被重置,而 curl 走系统栈可通。
|
|
125
170
|
try {
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
171
|
+
const controller = new AbortController();
|
|
172
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
173
|
+
try {
|
|
174
|
+
const res = await fetch(url, { signal: controller.signal, headers: { 'User-Agent': 'fhcode/0.4' } });
|
|
175
|
+
if (!res.ok)
|
|
176
|
+
throw new Error(`HTTP ${res.status}(${url})`);
|
|
177
|
+
return Buffer.from(await res.arrayBuffer());
|
|
178
|
+
}
|
|
179
|
+
finally {
|
|
180
|
+
clearTimeout(timer);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch (fetchErr) {
|
|
184
|
+
try {
|
|
185
|
+
return await downloadViaCurl(url, timeoutMs);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
throw fetchErr instanceof Error ? fetchErr : new Error(String(fetchErr));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/** curl 子进程下载(回退通道):-sL 跟随重定向,--max-time 超时,输出到临时文件后读回 */
|
|
193
|
+
async function downloadViaCurl(url, timeoutMs) {
|
|
194
|
+
const { execFile } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
195
|
+
const { tmpdir } = await Promise.resolve().then(() => __importStar(require('os')));
|
|
196
|
+
const { mkdtempSync, readFileSync, rmSync } = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
197
|
+
const { join } = await Promise.resolve().then(() => __importStar(require('path')));
|
|
198
|
+
const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
199
|
+
const dir = mkdtempSync(join(tmpdir(), 'fhcode-dl-'));
|
|
200
|
+
const out = join(dir, randomUUID() + '.bin');
|
|
201
|
+
try {
|
|
202
|
+
await new Promise((resolve, reject) => {
|
|
203
|
+
execFile('curl', ['-sL', '--max-time', String(Math.ceil(timeoutMs / 1000)), '-o', out, url], { timeout: timeoutMs + 5000 }, (err) => (err ? reject(err) : resolve()));
|
|
204
|
+
});
|
|
205
|
+
return readFileSync(out);
|
|
130
206
|
}
|
|
131
207
|
finally {
|
|
132
|
-
|
|
208
|
+
rmSync(dir, { recursive: true, force: true });
|
|
133
209
|
}
|
|
134
210
|
}
|
|
135
211
|
/** 手写 tar.gz 解包(零依赖):仅提取普通文件,忽略符号链接/设备/目录项 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-market.js","sourceRoot":"","sources":["../../src/skills/skill-market.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skill-market.js","sourceRoot":"","sources":["../../src/skills/skill-market.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,4CAwCC;AAGD,8CAGC;AAGD,0CAWC;AAGD,oCAkBC;AAGD,8BAEC;AAGD,oCAKC;AAiDD,kCAyBC;AAGD,gDAkCC;AAvPD;;;;;;;;;;;;GAYG;AACH,mCAAoC;AACpC,+BAAkC;AAClC,2BAAwE;AACxE,+BAAqC;AAErC,0BAA0B;AACb,QAAA,eAAe,GAAG,sCAAsC,CAAC;AACtE,sBAAsB;AACtB,MAAM,iBAAiB,GAAG;IACxB,4DAA4D;IAC5D,4DAA4D;CAC7D,CAAC;AAiBF,yCAAyC;AAClC,KAAK,UAAU,gBAAgB,CAAC,aAAqB;IAC1D,yEAAyE;IACzE,IAAI,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,wBAAwB,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;QACjF,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,GAA6C,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QACpG,MAAM,MAAM,GAAkB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YACxD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAClB,CAAC,CAAC,EAAoB,EAAE,CACtB,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAQ,CAAiB,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAQ,CAAiB,CAAC,GAAG,KAAK,QAAQ,CAC5H;YACH,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;IACrE,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,GAAG,uBAAe,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QAC1G,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,QAAQ,GAAG,CAAC,CAAC;QAChE,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,MAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,MAAM,GAAkB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACxD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAClB,CAAC,CAAC,EAAoB,EAAE,CACtB,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAQ,CAAiB,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAQ,CAAiB,CAAC,GAAG,KAAK,QAAQ,CAC5H;QACH,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9D,CAAC;AAED,yCAAyC;AACzC,SAAgB,iBAAiB,CAAC,MAAe;IAC/C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,oBAAoB;IAC9C,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,wCAAwC;AACxC,SAAgB,eAAe,CAAC,KAAkB,EAAE,KAAkB;IACpE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC1C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC;IACxB,CAAC;IACD,iBAAiB;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACxC,CAAC;AAED,8CAA8C;AAC9C,SAAgB,YAAY,CAAC,KAAkB,EAAE,KAAa,EAAE,KAAK,GAAG,EAAE;IACxE,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,KAAK,CAAC;YAAE,KAAK,GAAG,GAAG,CAAC;aACvB,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,KAAK,GAAG,EAAE,CAAC;aACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,KAAK,GAAG,EAAE,CAAC;aACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,KAAK,GAAG,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QAC3B,yBAAyB;SACxB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,+BAA+B;AAC/B,SAAgB,SAAS,CAAC,GAAW;IACnC,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,6CAA6C;AAC7C,SAAgB,YAAY,CAAC,GAAW,EAAE,MAAe;IACvD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,CAAC,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,SAAS,GAAG,KAAK;IACpD,yCAAyC;IACzC,sEAAsE;IACtE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;YACrG,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC;YAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9C,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,OAAO,QAAQ,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,OAAO,MAAM,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,SAAiB;IAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,eAAe,GAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,wDAAa,IAAI,GAAC,CAAC;IACtC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,wDAAa,IAAI,GAAC,CAAC;IACjE,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;IACtC,MAAM,EAAE,UAAU,EAAE,GAAG,wDAAa,QAAQ,GAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,QAAQ,CACN,MAAM,EACN,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAC1E,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,EAAE,EAC7B,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CACzC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,8CAA8C;AAC9C,SAAgB,WAAW,CAAC,GAAW,EAAE,OAAe;IACtD,IAAA,cAAS,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAA,iBAAU,EAAC,GAAG,CAAC,CAAC,CAAC,UAAU;IACvC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;QAClD,WAAW;QACX,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAAE,MAAM;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzF,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;QACjE,oBAAoB;QACpB,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnE,QAAQ;YACR,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACpC,IAAA,cAAS,EAAC,IAAA,cAAO,EAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnD,IAAA,kBAAa,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,8BAA8B;AACvB,KAAK,UAAU,kBAAkB,CACtC,MAAmB,EACnB,KAAkB,EAClB,OAAe;IAEf,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,6BAA6B,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,oCAAoC;QACpC,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,IAAA,eAAU,EAAC,IAAA,WAAI,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,wBAAwB;QACxB,IAAA,cAAS,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,IAAA,kBAAa,EAAC,IAAA,WAAI,EAAC,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,sCAAsC;IACtC,MAAM,EAAE,GAAG,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,qCAAqC,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -5,7 +5,7 @@ exports.analyzeDirectory = analyzeDirectory;
|
|
|
5
5
|
exports.analyzeDependencies = analyzeDependencies;
|
|
6
6
|
exports.generateReport = generateReport;
|
|
7
7
|
/**
|
|
8
|
-
* 飞虹 Code (Muse Code
|
|
8
|
+
* 飞虹 Code (对标 Muse Code · 自研内核)
|
|
9
9
|
* 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
10
10
|
*
|
|
11
11
|
* 智能代码分析器(M7):
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.editFileTool = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* 飞虹 Code (Muse Code
|
|
5
|
+
* 飞虹 Code (对标 Muse Code · 自研内核)
|
|
6
6
|
* 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹
|
|
7
7
|
*
|
|
8
8
|
* 工具:精确替换文件中的文本片段
|
|
@@ -29,8 +29,23 @@ exports.editFileTool = {
|
|
|
29
29
|
try {
|
|
30
30
|
const content = await (0, promises_1.readFile)(abs, 'utf8');
|
|
31
31
|
const idx = content.indexOf(oldText);
|
|
32
|
-
if (idx < 0)
|
|
33
|
-
|
|
32
|
+
if (idx < 0) {
|
|
33
|
+
// 把问题完整交回大模型:附上文件当前真实内容摘要,让模型基于实际内容重新提供 oldText,
|
|
34
|
+
// 避免模型在不知晓文件现状时反复盲猜 oldText 而陷入死循环。
|
|
35
|
+
const lines = content.split('\n');
|
|
36
|
+
const head = lines.slice(0, 40).join('\n');
|
|
37
|
+
const tail = lines.slice(-15).join('\n');
|
|
38
|
+
const ellipsis = lines.length > 55 ? '\n...(中间省略)...\n' : '\n';
|
|
39
|
+
const summary = `未找到 oldText。你提供的 oldText 与文件当前内容不匹配(可能被其他步骤改写、或包含空白/缩进差异)。
|
|
40
|
+
文件 "${path}" 当前真实内容(共 ${lines.length} 行 / ${content.length} 字符):
|
|
41
|
+
|
|
42
|
+
--- 文件开头 ---
|
|
43
|
+
${head}${ellipsis}--- 文件结尾 ---
|
|
44
|
+
${tail}
|
|
45
|
+
|
|
46
|
+
请基于以上真实内容重新提供 oldText(必须与文件中的字符完全一致,注意空白与缩进);若你只是想新增代码,请先 read_file 读取目标位置附近内容,或用 write_file 直接整体重写。`;
|
|
47
|
+
return { ok: false, output: '', error: summary };
|
|
48
|
+
}
|
|
34
49
|
const updated = content.slice(0, idx) + newText + content.slice(idx + oldText.length);
|
|
35
50
|
await (0, promises_1.writeFile)(abs, updated, 'utf8');
|
|
36
51
|
return { ok: true, output: `已更新 ${path}` };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.tool.js","sourceRoot":"","sources":["../../../src/tools/file/edit.tool.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,6BAAwB;AACxB,0CAAkD;AAElD,4CAAwC;AAE3B,QAAA,YAAY,GAAS;IAChC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,+BAA+B;IAC5C,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;YAC/C,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;YACnD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;SACpD;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;KACzC;IACD,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC9F,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAgB;QAClC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAA0D,CAAC;QAC9F,MAAM,GAAG,GAAG,IAAA,oBAAQ,EAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"edit.tool.js","sourceRoot":"","sources":["../../../src/tools/file/edit.tool.ts"],"names":[],"mappings":"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"}
|