@roarpeng/graphflow 1.0.0 → 1.0.4
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/CHANGELOG.md +26 -0
- package/README.md +96 -38
- package/dist/agents/insight.d.ts +83 -0
- package/dist/agents/insight.d.ts.map +1 -0
- package/dist/agents/insight.js +381 -0
- package/dist/agents/insight.js.map +1 -0
- package/dist/config/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/discover-workspace.d.ts +16 -0
- package/dist/config/discover-workspace.d.ts.map +1 -0
- package/dist/config/discover-workspace.js +112 -0
- package/dist/config/discover-workspace.js.map +1 -0
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +22 -8
- package/dist/config/resolve.js.map +1 -1
- package/dist/config/scaffold.d.ts.map +1 -1
- package/dist/config/scaffold.js +2 -1
- package/dist/config/scaffold.js.map +1 -1
- package/dist/config/workspace-root.d.ts +24 -0
- package/dist/config/workspace-root.d.ts.map +1 -0
- package/dist/config/workspace-root.js +59 -0
- package/dist/config/workspace-root.js.map +1 -0
- package/dist/core/orchestrator.js +10 -1
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/state-machine.js +1 -1
- package/dist/core/state-machine.js.map +1 -1
- package/dist/core/types.d.ts +2 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/graph/artifact-manager.d.ts +72 -0
- package/dist/graph/artifact-manager.d.ts.map +1 -0
- package/dist/graph/artifact-manager.js +215 -0
- package/dist/graph/artifact-manager.js.map +1 -0
- package/dist/graph/context-slicer.d.ts.map +1 -1
- package/dist/graph/context-slicer.js +3 -2
- package/dist/graph/context-slicer.js.map +1 -1
- package/dist/graph/file-indexer.d.ts +31 -0
- package/dist/graph/file-indexer.d.ts.map +1 -1
- package/dist/graph/file-indexer.js +332 -3
- package/dist/graph/file-indexer.js.map +1 -1
- package/dist/graph/graph-compression.d.ts.map +1 -1
- package/dist/graph/graph-compression.js +2 -0
- package/dist/graph/graph-compression.js.map +1 -1
- package/dist/graph/graph-utils.d.ts +4 -1
- package/dist/graph/graph-utils.d.ts.map +1 -1
- package/dist/graph/graph-utils.js +62 -0
- package/dist/graph/graph-utils.js.map +1 -1
- package/dist/graph/graphify-file-client.d.ts.map +1 -1
- package/dist/graph/graphify-file-client.js +30 -8
- package/dist/graph/graphify-file-client.js.map +1 -1
- package/dist/graph/language-indexers/c-cpp.d.ts +9 -1
- package/dist/graph/language-indexers/c-cpp.d.ts.map +1 -1
- package/dist/graph/language-indexers/c-cpp.js +328 -103
- package/dist/graph/language-indexers/c-cpp.js.map +1 -1
- package/dist/graph/language-indexers/index.d.ts +20 -0
- package/dist/graph/language-indexers/index.d.ts.map +1 -1
- package/dist/graph/language-indexers/index.js +4 -0
- package/dist/graph/language-indexers/index.js.map +1 -1
- package/dist/graph/language-indexers/java.d.ts +12 -0
- package/dist/graph/language-indexers/java.d.ts.map +1 -0
- package/dist/graph/language-indexers/java.js +273 -0
- package/dist/graph/language-indexers/java.js.map +1 -0
- package/dist/graph/language-indexers/python.d.ts.map +1 -1
- package/dist/graph/language-indexers/python.js +47 -4
- package/dist/graph/language-indexers/python.js.map +1 -1
- package/dist/graph/language-indexers/ruby.d.ts +14 -0
- package/dist/graph/language-indexers/ruby.d.ts.map +1 -0
- package/dist/graph/language-indexers/ruby.js +245 -0
- package/dist/graph/language-indexers/ruby.js.map +1 -0
- package/dist/graph/language-indexers/rust.d.ts +10 -1
- package/dist/graph/language-indexers/rust.d.ts.map +1 -1
- package/dist/graph/language-indexers/rust.js +254 -80
- package/dist/graph/language-indexers/rust.js.map +1 -1
- package/dist/graph/language-indexers/tree-sitter-loader.d.ts +8 -1
- package/dist/graph/language-indexers/tree-sitter-loader.d.ts.map +1 -1
- package/dist/graph/language-indexers/tree-sitter-loader.js +64 -13
- package/dist/graph/language-indexers/tree-sitter-loader.js.map +1 -1
- package/dist/graph/language-indexers/typescript.d.ts.map +1 -1
- package/dist/graph/language-indexers/typescript.js +72 -8
- package/dist/graph/language-indexers/typescript.js.map +1 -1
- package/dist/graph/metrics.d.ts +33 -0
- package/dist/graph/metrics.d.ts.map +1 -0
- package/dist/graph/metrics.js +117 -0
- package/dist/graph/metrics.js.map +1 -0
- package/dist/graph/token-savings.d.ts +52 -0
- package/dist/graph/token-savings.d.ts.map +1 -0
- package/dist/graph/token-savings.js +113 -0
- package/dist/graph/token-savings.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/agent-mcp-installer.d.ts +2 -0
- package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
- package/dist/integrations/agent-mcp-installer.js +115 -23
- package/dist/integrations/agent-mcp-installer.js.map +1 -1
- package/dist/learning/episodic-memory.d.ts +8 -1
- package/dist/learning/episodic-memory.d.ts.map +1 -1
- package/dist/learning/episodic-memory.js +33 -0
- package/dist/learning/episodic-memory.js.map +1 -1
- package/dist/skills/index.d.ts +157 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +157 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/surfaces/cli/index.js +119 -0
- package/dist/surfaces/cli/index.js.map +1 -1
- package/dist/surfaces/cli/output.d.ts.map +1 -1
- package/dist/surfaces/cli/output.js +7 -0
- package/dist/surfaces/cli/output.js.map +1 -1
- package/dist/surfaces/cli/runtime/graph.d.ts +77 -3
- package/dist/surfaces/cli/runtime/graph.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/graph.js +140 -9
- package/dist/surfaces/cli/runtime/graph.js.map +1 -1
- package/dist/surfaces/cli/runtime/routing.d.ts +24 -1
- package/dist/surfaces/cli/runtime/routing.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/routing.js +57 -0
- package/dist/surfaces/cli/runtime/routing.js.map +1 -1
- package/dist/surfaces/cli/runtime/settings.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/settings.js +4 -1
- package/dist/surfaces/cli/runtime/settings.js.map +1 -1
- package/dist/surfaces/cli/runtime/types.d.ts +16 -0
- package/dist/surfaces/cli/runtime/types.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime.d.ts +2 -2
- package/dist/surfaces/cli/runtime.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime.js +11 -1
- package/dist/surfaces/cli/runtime.js.map +1 -1
- package/dist/surfaces/mcp/server.d.ts.map +1 -1
- package/dist/surfaces/mcp/server.js +143 -2
- package/dist/surfaces/mcp/server.js.map +1 -1
- package/package.json +5 -2
- package/scripts/safe-postinstall.cjs +167 -12
- package/src/surfaces/trae-skill/graphflow/SKILL.md +535 -0
- package/wasm/tree-sitter-c.wasm +0 -0
- package/wasm/tree-sitter-go.wasm +0 -0
- package/wasm/tree-sitter-java.wasm +0 -0
- package/wasm/tree-sitter-python.wasm +0 -0
- package/wasm/tree-sitter-ruby.wasm +0 -0
- package/wasm/tree-sitter-rust.wasm +0 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Six Thinking Hats + Five Whys Insight Engine.
|
|
4
|
+
*
|
|
5
|
+
* Borrowed from Edward de Bono's "Six Thinking Hats" framework —
|
|
6
|
+
* before planning a task, analyze it through 6 distinct perspectives,
|
|
7
|
+
* and auto-apply 5-level Why chains to key observations that fall
|
|
8
|
+
* below a confidence threshold.
|
|
9
|
+
*
|
|
10
|
+
* The 5 Why triggers are automatic: whenever a hat produces an
|
|
11
|
+
* observation with low certainty (< 0.6), the chain is applied to
|
|
12
|
+
* drill toward root cause.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SIX_HATS = void 0;
|
|
16
|
+
exports.planInsight = planInsight;
|
|
17
|
+
exports.analyzeWithSixHats = analyzeWithSixHats;
|
|
18
|
+
const provider_executor_1 = require("../routing/provider-executor");
|
|
19
|
+
const logger_1 = require("../utils/logger");
|
|
20
|
+
exports.SIX_HATS = [
|
|
21
|
+
{
|
|
22
|
+
name: "White Hat",
|
|
23
|
+
color: "white",
|
|
24
|
+
role: "客观分析者",
|
|
25
|
+
focus: "事实与数据",
|
|
26
|
+
question: "我们目前有哪些事实和数据?还缺少什么信息?",
|
|
27
|
+
whyFocus: "为什么这个事实/数据是相关的?",
|
|
28
|
+
whyRootFocus: "这个事实反映了什么系统性问题?",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: "Red Hat",
|
|
32
|
+
color: "red",
|
|
33
|
+
role: "情感体验者",
|
|
34
|
+
focus: "直觉与情感",
|
|
35
|
+
question: "我对这个方案的第一直觉和感受是什么?有哪些隐藏的情绪信号?",
|
|
36
|
+
whyFocus: "为什么我有这个直觉?是什么经历或预感在驱动?",
|
|
37
|
+
whyRootFocus: "这个情感背后的核心需求或恐惧是什么?",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "Black Hat",
|
|
41
|
+
color: "black",
|
|
42
|
+
role: "风险评估者",
|
|
43
|
+
focus: "谨慎与批判",
|
|
44
|
+
question: "这个计划哪里可能会失败?有哪些潜在风险和逻辑漏洞?",
|
|
45
|
+
whyFocus: "为什么这个问题会导致计划失败?它的严重程度如何?",
|
|
46
|
+
whyRootFocus: "这个缺陷揭示了什么系统性弱点?",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: "Yellow Hat",
|
|
50
|
+
color: "yellow",
|
|
51
|
+
role: "价值发现者",
|
|
52
|
+
focus: "乐观与收益",
|
|
53
|
+
question: "这个想法的核心价值是什么?它为什么能起作用?",
|
|
54
|
+
whyFocus: "为什么这个价值对目标受众重要?",
|
|
55
|
+
whyRootFocus: "这个价值满足了什么更深层的人的需求?",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "Green Hat",
|
|
59
|
+
color: "green",
|
|
60
|
+
role: "创新探索者",
|
|
61
|
+
focus: "创造力与备选",
|
|
62
|
+
question: "我们还有其他不同的解决路径吗?有哪些打破常规的想法?",
|
|
63
|
+
whyFocus: "为什么这个替代方案目前没有被选择?有什么阻力?",
|
|
64
|
+
whyRootFocus: "什么思维框架限制了我们看到更多选项?",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "Blue Hat",
|
|
68
|
+
color: "blue",
|
|
69
|
+
role: "过程管理者",
|
|
70
|
+
focus: "全局与协调",
|
|
71
|
+
question: "我们的问题定义是否清晰?哪些帽子还需要深入分析?",
|
|
72
|
+
whyFocus: "为什么当前的思考过程需要这个调整?",
|
|
73
|
+
whyRootFocus: "我们真正需要解决的核心问题是什么?",
|
|
74
|
+
},
|
|
75
|
+
];
|
|
76
|
+
/**
|
|
77
|
+
* Run the full Six Thinking Hats + Five Whys analysis on a task,
|
|
78
|
+
* then generate a DAG-style plan that incorporates the insights.
|
|
79
|
+
*
|
|
80
|
+
* @param task The task to analyze
|
|
81
|
+
* @param options Model selection and context options
|
|
82
|
+
*/
|
|
83
|
+
async function planInsight(task, options) {
|
|
84
|
+
const insight = await analyzeWithSixHats(task, options);
|
|
85
|
+
const plan = await buildPlanFromInsight(task, insight, options);
|
|
86
|
+
return { insight, plan };
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Run the Six Thinking Hats analysis with automatic 5 Why triggers.
|
|
90
|
+
*
|
|
91
|
+
* Each hat produces an observation. If the observation's certainty
|
|
92
|
+
* is below THRESHOLD (0.6), a 5 Why chain is automatically applied.
|
|
93
|
+
*/
|
|
94
|
+
async function analyzeWithSixHats(task, options) {
|
|
95
|
+
const hatResults = [];
|
|
96
|
+
for (const hat of exports.SIX_HATS) {
|
|
97
|
+
const section = await analyzeSingleHat(task, hat, options);
|
|
98
|
+
hatResults.push(section);
|
|
99
|
+
}
|
|
100
|
+
const blueSynthesis = hatResults.find((h) => h.hat.color === "blue")?.criticalInsight ?? "";
|
|
101
|
+
const rootCauses = hatResults
|
|
102
|
+
.filter((h) => h.whyChain !== null)
|
|
103
|
+
.map((h) => h.whyChain.rootCause)
|
|
104
|
+
.filter((s) => s.length > 0);
|
|
105
|
+
const criticalRisks = hatResults
|
|
106
|
+
.filter((h) => h.hat.color === "black")
|
|
107
|
+
.map((h) => h.observation)
|
|
108
|
+
.filter((s) => s.length > 0);
|
|
109
|
+
const coreValue = hatResults
|
|
110
|
+
.filter((h) => h.hat.color === "yellow")
|
|
111
|
+
.map((h) => h.observation)
|
|
112
|
+
.join("; ");
|
|
113
|
+
// Refined task statement from Blue Hat synthesis
|
|
114
|
+
const refinedTaskStatement = buildRefinedStatement(task, hatResults);
|
|
115
|
+
return {
|
|
116
|
+
task,
|
|
117
|
+
hats: hatResults,
|
|
118
|
+
blueHatSynthesis: blueSynthesis,
|
|
119
|
+
rootCauses: [...new Set(rootCauses)],
|
|
120
|
+
criticalRisks,
|
|
121
|
+
coreValue,
|
|
122
|
+
refinedTaskStatement,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const CERTAINTY_THRESHOLD = 0.6;
|
|
126
|
+
async function analyzeSingleHat(task, hat, options) {
|
|
127
|
+
const prompt = buildHatPrompt(task, hat);
|
|
128
|
+
let raw = "";
|
|
129
|
+
try {
|
|
130
|
+
raw = await (0, provider_executor_1.executeRolePrompt)("planner", prompt, options.selection, options.context);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
logger_1.logger.warn({ error, hat: hat.name }, "Hat analysis failed, using fallback");
|
|
134
|
+
}
|
|
135
|
+
const parsed = parseHatResponse(raw, hat);
|
|
136
|
+
const whyChain = parsed.certainty < CERTAINTY_THRESHOLD
|
|
137
|
+
? await applyFiveWhys(parsed.observation, hat, options)
|
|
138
|
+
: null;
|
|
139
|
+
return {
|
|
140
|
+
hat,
|
|
141
|
+
observation: parsed.observation,
|
|
142
|
+
certainty: parsed.certainty,
|
|
143
|
+
whyChain,
|
|
144
|
+
criticalInsight: buildCriticalInsight(hat, parsed, whyChain),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function buildHatPrompt(task, hat) {
|
|
148
|
+
return [
|
|
149
|
+
`Task: ${task}`,
|
|
150
|
+
``,
|
|
151
|
+
`You are wearing the ${hat.name} (${hat.role}).`,
|
|
152
|
+
`Perspective: ${hat.focus}`,
|
|
153
|
+
``,
|
|
154
|
+
`Your job:`,
|
|
155
|
+
`1. Produce ONE key observation about this task from your ${hat.name} perspective.`,
|
|
156
|
+
`2. Rate your certainty about this observation (0.0 = pure speculation, 1.0 = hard fact).`,
|
|
157
|
+
`3. State the most critical insight this hat contributes to understanding the task.`,
|
|
158
|
+
``,
|
|
159
|
+
`Return ONLY a JSON object:`,
|
|
160
|
+
`{`,
|
|
161
|
+
` "observation": "your single most important observation from this hat's perspective",`,
|
|
162
|
+
` "certainty": 0.0-1.0,`,
|
|
163
|
+
` "criticalInsight": "what this hat tells us about the task"`,
|
|
164
|
+
`}`,
|
|
165
|
+
``,
|
|
166
|
+
`Example for Black Hat analyzing "add rust indexer":`,
|
|
167
|
+
`{`,
|
|
168
|
+
` "observation": "Tree-sitter WASM grammars are platform-specific and may fail on ARM Windows",`,
|
|
169
|
+
` "certainty": 0.7,`,
|
|
170
|
+
` "criticalInsight": "Binary compatibility risk: tree-sitter WASM files must be downloaded per-platform"`,
|
|
171
|
+
`}`,
|
|
172
|
+
].join("\n");
|
|
173
|
+
}
|
|
174
|
+
function parseHatResponse(raw, hat) {
|
|
175
|
+
let text = raw.trim();
|
|
176
|
+
const fenceMatch = text.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i);
|
|
177
|
+
if (fenceMatch && fenceMatch[1]) {
|
|
178
|
+
text = fenceMatch[1].trim();
|
|
179
|
+
}
|
|
180
|
+
const start = text.indexOf("{");
|
|
181
|
+
const end = text.lastIndexOf("}");
|
|
182
|
+
if (start === -1 || end === -1) {
|
|
183
|
+
return fallbackHatResponse(hat);
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
const parsed = JSON.parse(text.slice(start, end + 1));
|
|
187
|
+
return {
|
|
188
|
+
observation: typeof parsed.observation === "string" ? parsed.observation.trim() : fallbackObs(hat),
|
|
189
|
+
certainty: typeof parsed.certainty === "number"
|
|
190
|
+
? Math.max(0, Math.min(1, parsed.certainty))
|
|
191
|
+
: 0.5,
|
|
192
|
+
criticalInsight: typeof parsed.criticalInsight === "string"
|
|
193
|
+
? parsed.criticalInsight.trim()
|
|
194
|
+
: fallbackInsight(hat),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return fallbackHatResponse(hat);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function fallbackHatResponse(hat) {
|
|
202
|
+
return {
|
|
203
|
+
observation: fallbackObs(hat),
|
|
204
|
+
certainty: 0.5,
|
|
205
|
+
criticalInsight: fallbackInsight(hat),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function fallbackObs(hat) {
|
|
209
|
+
const fallbacks = {
|
|
210
|
+
white: "缺乏足够的客观数据支持决策",
|
|
211
|
+
red: "直觉上感觉这个方向有潜力但不确定",
|
|
212
|
+
black: "存在未评估的潜在风险",
|
|
213
|
+
yellow: "如果成功,收益显著",
|
|
214
|
+
green: "可能存在未被探索的替代路径",
|
|
215
|
+
blue: "需要先明确问题的本质",
|
|
216
|
+
};
|
|
217
|
+
return fallbacks[hat.color] ?? "无法从该视角得出有效观察";
|
|
218
|
+
}
|
|
219
|
+
function fallbackInsight(hat) {
|
|
220
|
+
const insights = {
|
|
221
|
+
white: "需要收集更多事实数据",
|
|
222
|
+
red: "情感信号需要进一步验证",
|
|
223
|
+
black: "风险需要被主动管理",
|
|
224
|
+
yellow: "价值潜力需要被量化",
|
|
225
|
+
green: "需要头脑风暴更多选项",
|
|
226
|
+
blue: "思考过程需要被协调控制",
|
|
227
|
+
};
|
|
228
|
+
return insights[hat.color] ?? "该视角提供了有限的洞察";
|
|
229
|
+
}
|
|
230
|
+
async function applyFiveWhys(observation, hat, options) {
|
|
231
|
+
const steps = [];
|
|
232
|
+
let currentObservation = observation;
|
|
233
|
+
const question = hat.whyFocus;
|
|
234
|
+
const rootFocus = hat.whyRootFocus;
|
|
235
|
+
for (let level = 1; level <= 5; level++) {
|
|
236
|
+
const whyQuestion = level === 5
|
|
237
|
+
? `最终 Why (收敛到根本): ${rootFocus}\nObservation: "${currentObservation}" → 根本原因是什么?`
|
|
238
|
+
: `Why ${level}: ${question}\nObservation: "${currentObservation}" → 回答这个 Why(简短,1-2句):`;
|
|
239
|
+
let answer = "";
|
|
240
|
+
try {
|
|
241
|
+
answer = await (0, provider_executor_1.executeRolePrompt)("planner", [
|
|
242
|
+
`You are answering a "Why" question in a 5-Why chain.`,
|
|
243
|
+
`The observation so far: "${currentObservation}"`,
|
|
244
|
+
`The why question: ${whyQuestion}`,
|
|
245
|
+
``,
|
|
246
|
+
`Answer in 1-2 sentences, be specific and causal.`,
|
|
247
|
+
`If you cannot determine a cause, state "无法确定因果链" and stop.`,
|
|
248
|
+
].join("\n"), options.selection, options.context);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
answer = "无法确定因果链";
|
|
252
|
+
}
|
|
253
|
+
answer = answer.trim().replace(/^[""]+|[""]+$/g, "");
|
|
254
|
+
const certainty = Math.min(0.95, 0.3 + level * 0.13);
|
|
255
|
+
steps.push({
|
|
256
|
+
level: level,
|
|
257
|
+
question: whyQuestion.replace(/^Why \d+: /, "").replace(/\n.*$/, ""),
|
|
258
|
+
answer,
|
|
259
|
+
certainty,
|
|
260
|
+
});
|
|
261
|
+
if (answer.includes("无法确定") || answer.length < 5) {
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
currentObservation = answer;
|
|
265
|
+
}
|
|
266
|
+
const rootCause = steps.length > 0 ? (steps[steps.length - 1]?.answer ?? observation) : observation;
|
|
267
|
+
return {
|
|
268
|
+
initialObservation: observation,
|
|
269
|
+
certainty: steps[0]?.certainty ?? 0.5,
|
|
270
|
+
steps,
|
|
271
|
+
rootCause,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
function buildCriticalInsight(hat, parsed, whyChain) {
|
|
275
|
+
if (whyChain) {
|
|
276
|
+
return `关键发现: ${whyChain.rootCause}`;
|
|
277
|
+
}
|
|
278
|
+
if (parsed.certainty < CERTAINTY_THRESHOLD) {
|
|
279
|
+
return `观察置信度较低 (${(parsed.certainty * 100).toFixed(0)}%),但未触发深度追问`;
|
|
280
|
+
}
|
|
281
|
+
return parsed.criticalInsight;
|
|
282
|
+
}
|
|
283
|
+
function buildRefinedStatement(task, hatResults) {
|
|
284
|
+
const rootCauses = hatResults
|
|
285
|
+
.filter((h) => h.whyChain !== null)
|
|
286
|
+
.map((h) => h.whyChain.rootCause)
|
|
287
|
+
.join("; ");
|
|
288
|
+
const value = hatResults.find((h) => h.hat.color === "yellow")?.observation ?? "";
|
|
289
|
+
if (!rootCauses && !value) {
|
|
290
|
+
return task;
|
|
291
|
+
}
|
|
292
|
+
return `核心问题: ${rootCauses || "待探索"} | 核心价值: ${value || "待发现"}`;
|
|
293
|
+
}
|
|
294
|
+
/** === Plan Generation from Insight === */
|
|
295
|
+
async function buildPlanFromInsight(task, insight, options) {
|
|
296
|
+
const criticalRisks = insight.criticalRisks
|
|
297
|
+
.map((r) => `- Risk: ${r}`)
|
|
298
|
+
.join("\n");
|
|
299
|
+
const rootCauses = insight.rootCauses
|
|
300
|
+
.map((rc) => `- Root cause: ${rc}`)
|
|
301
|
+
.join("\n");
|
|
302
|
+
const blueSynthesis = insight.blueHatSynthesis
|
|
303
|
+
? `- Synthesis: ${insight.blueHatSynthesis}`
|
|
304
|
+
: "";
|
|
305
|
+
const prompt = [
|
|
306
|
+
`You are a task planner. Decompose a task into a DAG, informed by prior multi-perspective analysis.`,
|
|
307
|
+
``,
|
|
308
|
+
`Return ONLY a JSON array: [{id, description, dependencies}]`,
|
|
309
|
+
`- id: short string like task-1`,
|
|
310
|
+
`- description: concrete actionable subtask`,
|
|
311
|
+
`- dependencies: array of dependency ids (may be empty)`,
|
|
312
|
+
``,
|
|
313
|
+
`Original task: ${task}`,
|
|
314
|
+
``,
|
|
315
|
+
`Refined task statement: ${insight.refinedTaskStatement}`,
|
|
316
|
+
``,
|
|
317
|
+
`Key insights from 6 Thinking Hats analysis:`,
|
|
318
|
+
criticalRisks || "- (no critical risks identified)",
|
|
319
|
+
rootCauses || "- (root causes under exploration)",
|
|
320
|
+
blueSynthesis || "",
|
|
321
|
+
``,
|
|
322
|
+
`Constraints for planning:`,
|
|
323
|
+
`- Address each critical risk as a separate task`,
|
|
324
|
+
`- If root causes are identified, include a task to resolve the root cause`,
|
|
325
|
+
`- Max 8 tasks in the plan`,
|
|
326
|
+
``,
|
|
327
|
+
].join("\n");
|
|
328
|
+
let raw = "";
|
|
329
|
+
try {
|
|
330
|
+
raw = await (0, provider_executor_1.executeRolePrompt)("planner", prompt, options.selection, options.context);
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
logger_1.logger.error({ error }, "Insight-based planning failed");
|
|
334
|
+
return [];
|
|
335
|
+
}
|
|
336
|
+
return parsePlannerJson(raw, []);
|
|
337
|
+
}
|
|
338
|
+
function parsePlannerJson(raw, _skillHints) {
|
|
339
|
+
let text = raw.trim();
|
|
340
|
+
const fenceMatch = text.match(/^```(?:json)?\s*([\s\S]*?)\s*```$/i);
|
|
341
|
+
if (fenceMatch && fenceMatch[1]) {
|
|
342
|
+
text = fenceMatch[1].trim();
|
|
343
|
+
}
|
|
344
|
+
const start = text.indexOf("[");
|
|
345
|
+
const end = text.lastIndexOf("]");
|
|
346
|
+
if (start === -1 || end === -1) {
|
|
347
|
+
return [];
|
|
348
|
+
}
|
|
349
|
+
try {
|
|
350
|
+
const parsed = JSON.parse(text.slice(start, end + 1));
|
|
351
|
+
if (!Array.isArray(parsed))
|
|
352
|
+
return [];
|
|
353
|
+
const items = [];
|
|
354
|
+
for (let i = 0; i < parsed.length; i++) {
|
|
355
|
+
const entry = parsed[i];
|
|
356
|
+
if (!entry || typeof entry !== "object")
|
|
357
|
+
continue;
|
|
358
|
+
const id = typeof entry.id === "string" ? entry.id.trim() : `task-${i + 1}`;
|
|
359
|
+
const description = typeof entry.description === "string" ? entry.description.trim() : "";
|
|
360
|
+
if (!description)
|
|
361
|
+
continue;
|
|
362
|
+
const depsRaw = entry.dependencies;
|
|
363
|
+
const dependencies = Array.isArray(depsRaw)
|
|
364
|
+
? depsRaw.filter((d) => typeof d === "string")
|
|
365
|
+
: [];
|
|
366
|
+
items.push({
|
|
367
|
+
id,
|
|
368
|
+
description,
|
|
369
|
+
dependencies,
|
|
370
|
+
status: "PENDING",
|
|
371
|
+
contextQuery: description,
|
|
372
|
+
retryCount: 0,
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
return items.length > 0 ? items.slice(0, 8) : [];
|
|
376
|
+
}
|
|
377
|
+
catch {
|
|
378
|
+
return [];
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
//# sourceMappingURL=insight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insight.js","sourceRoot":"","sources":["../../src/agents/insight.ts"],"names":[],"mappings":"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"}
|
package/dist/config/defaults.js
CHANGED
|
@@ -36,7 +36,7 @@ function getDefaultConfig() {
|
|
|
36
36
|
autoIndexOnRun: true,
|
|
37
37
|
autoIndexOnSave: true,
|
|
38
38
|
workspaceRoot: process.cwd(),
|
|
39
|
-
includeExtensions: [".ts", ".tsx", ".js", ".jsx", ".md", ".json"],
|
|
39
|
+
includeExtensions: [".ts", ".tsx", ".js", ".jsx", ".md", ".json", ".py", ".rs", ".go", ".c", ".h", ".cpp", ".cc", ".hpp", ".java", ".rb"],
|
|
40
40
|
transport: "file",
|
|
41
41
|
graphStorePath: `${exports.DEFAULT_OUTPUT_DIR}/graphflow-graph.json`,
|
|
42
42
|
maxContextTokens: 1500,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":";;;AAeA,0DAKC;AAED,4CA6DC;AAGD,0DAUC;AA/FD,qCAA0C;AAE7B,QAAA,cAAc,GAAG;IAC5B,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;IAC/C,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE;CAC9C,CAAC;AAEE,QAAA,uBAAuB,GAAG,yBAAyB,CAAC;AACpD,QAAA,0BAA0B,GAAG,IAAI,CAAC;AAC/C,kEAAkE;AACrD,QAAA,kBAAkB,GAAG,eAAe,CAAC;AAClD,sFAAsF;AACzE,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAE7C,SAAgB,uBAAuB,CAAC,KAAc;IACpD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,iCAAyB,EAAE,CAAC;QAC/D,OAAO,kCAA0B,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,gBAAgB;IAC9B,OAAO,IAAA,uBAAc,EAAC;QACpB,SAAS,EAAE,EAAE;QACb,KAAK,EAAE;YACL,KAAK,EAAE,EAAE,GAAG,sBAAc,CAAC,KAAK,EAAE;YAClC,OAAO,EAAE,EAAE,GAAG,sBAAc,CAAC,OAAO,EAAE;SACvC;QACD,YAAY,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;QACnC,WAAW,EAAE;YACX,eAAe,EAAE,IAAI;YACrB,sBAAsB,EAAE,IAAI;YAC5B,kBAAkB,EAAE,IAAI;YACxB,cAAc,EAAE,IAAI;YACpB,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE;YAC5B,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** True when cwd looks like GraphFlow's bundled runtime (extension vendor / npm package), not a user repo. */
|
|
2
|
+
export declare function isGraphFlowRuntimeDirectory(dir: string): boolean;
|
|
3
|
+
/** True when a directory looks like a user project workspace for GraphFlow. */
|
|
4
|
+
export declare function hasProjectWorkspaceMarkers(dir: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Walk upward from `fromDir` to find the nearest user project root.
|
|
7
|
+
* Skips GraphFlow runtime directories (extension vendor, global npm package).
|
|
8
|
+
*
|
|
9
|
+
* IDE env hints (CURSOR_PROJECT_DIR, etc.) are only used when `fromDir` is a
|
|
10
|
+
* GraphFlow runtime directory — e.g. extension vendor — where upward walk cannot
|
|
11
|
+
* reach the user's opened workspace.
|
|
12
|
+
*/
|
|
13
|
+
export declare function discoverWorkspaceRoot(fromDir?: string): string | undefined;
|
|
14
|
+
/** Apply discovered workspace to process.env when MCP starts without an explicit root. */
|
|
15
|
+
export declare function ensureMcpWorkspaceEnv(fromDir?: string): string | undefined;
|
|
16
|
+
//# sourceMappingURL=discover-workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover-workspace.d.ts","sourceRoot":"","sources":["../../src/config/discover-workspace.ts"],"names":[],"mappings":"AAoBA,8GAA8G;AAC9G,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED,+EAA+E;AAC/E,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAoB/D;AAmBD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,MAAsB,GAAG,MAAM,GAAG,SAAS,CAoBzF;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,MAAsB,GAAG,MAAM,GAAG,SAAS,CAoBzF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isGraphFlowRuntimeDirectory = isGraphFlowRuntimeDirectory;
|
|
4
|
+
exports.hasProjectWorkspaceMarkers = hasProjectWorkspaceMarkers;
|
|
5
|
+
exports.discoverWorkspaceRoot = discoverWorkspaceRoot;
|
|
6
|
+
exports.ensureMcpWorkspaceEnv = ensureMcpWorkspaceEnv;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const RUNTIME_DIR_MARKERS = [
|
|
10
|
+
"/vendor/graphflow",
|
|
11
|
+
"node_modules/@roarpeng/graphflow",
|
|
12
|
+
"graphflow-vscode-",
|
|
13
|
+
"/.cursor/extensions/",
|
|
14
|
+
];
|
|
15
|
+
const MAX_WALK_DEPTH = 30;
|
|
16
|
+
const IDE_WORKSPACE_ENV_KEYS = [
|
|
17
|
+
"GRAPHFLOW_WORKSPACE_ROOT",
|
|
18
|
+
"CURSOR_PROJECT_DIR",
|
|
19
|
+
"VSCODE_CWD",
|
|
20
|
+
"INIT_CWD",
|
|
21
|
+
"PWD",
|
|
22
|
+
];
|
|
23
|
+
/** True when cwd looks like GraphFlow's bundled runtime (extension vendor / npm package), not a user repo. */
|
|
24
|
+
function isGraphFlowRuntimeDirectory(dir) {
|
|
25
|
+
const normalized = (0, node_path_1.resolve)(dir).replace(/\\/g, "/").toLowerCase();
|
|
26
|
+
return RUNTIME_DIR_MARKERS.some((marker) => normalized.includes(marker.toLowerCase()));
|
|
27
|
+
}
|
|
28
|
+
/** True when a directory looks like a user project workspace for GraphFlow. */
|
|
29
|
+
function hasProjectWorkspaceMarkers(dir) {
|
|
30
|
+
const root = (0, node_path_1.resolve)(dir);
|
|
31
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(root, ".git"))) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(root, "graphflow.config.json"))) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(root, ".graphflow", "config.json"))) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
const graphStore = (0, node_path_1.join)(root, "graphflow-out", "graphflow-graph.json");
|
|
41
|
+
if (!(0, node_fs_1.existsSync)(graphStore)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
return (0, node_fs_1.statSync)(graphStore).size > 10;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function resolveIdeWorkspaceHint() {
|
|
52
|
+
for (const key of IDE_WORKSPACE_ENV_KEYS) {
|
|
53
|
+
if (key === "GRAPHFLOW_WORKSPACE_ROOT") {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const value = process.env[key]?.trim();
|
|
57
|
+
if (!value) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const resolved = (0, node_path_1.resolve)(value);
|
|
61
|
+
if (hasProjectWorkspaceMarkers(resolved)) {
|
|
62
|
+
return resolved;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Walk upward from `fromDir` to find the nearest user project root.
|
|
69
|
+
* Skips GraphFlow runtime directories (extension vendor, global npm package).
|
|
70
|
+
*
|
|
71
|
+
* IDE env hints (CURSOR_PROJECT_DIR, etc.) are only used when `fromDir` is a
|
|
72
|
+
* GraphFlow runtime directory — e.g. extension vendor — where upward walk cannot
|
|
73
|
+
* reach the user's opened workspace.
|
|
74
|
+
*/
|
|
75
|
+
function discoverWorkspaceRoot(fromDir = process.cwd()) {
|
|
76
|
+
const resolvedFrom = (0, node_path_1.resolve)(fromDir);
|
|
77
|
+
let current = resolvedFrom;
|
|
78
|
+
for (let depth = 0; depth < MAX_WALK_DEPTH; depth += 1) {
|
|
79
|
+
if (hasProjectWorkspaceMarkers(current) && !isGraphFlowRuntimeDirectory(current)) {
|
|
80
|
+
return current;
|
|
81
|
+
}
|
|
82
|
+
const parent = (0, node_path_1.dirname)(current);
|
|
83
|
+
if (parent === current) {
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
current = parent;
|
|
87
|
+
}
|
|
88
|
+
if (isGraphFlowRuntimeDirectory(resolvedFrom)) {
|
|
89
|
+
return resolveIdeWorkspaceHint();
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
/** Apply discovered workspace to process.env when MCP starts without an explicit root. */
|
|
94
|
+
function ensureMcpWorkspaceEnv(fromDir = process.cwd()) {
|
|
95
|
+
const existing = process.env.GRAPHFLOW_WORKSPACE_ROOT?.trim();
|
|
96
|
+
if (existing) {
|
|
97
|
+
process.env.GRAPHFLOW_WORKSPACE_ROOT = (0, node_path_1.resolve)(existing);
|
|
98
|
+
return process.env.GRAPHFLOW_WORKSPACE_ROOT;
|
|
99
|
+
}
|
|
100
|
+
const discovered = discoverWorkspaceRoot(fromDir);
|
|
101
|
+
if (discovered) {
|
|
102
|
+
process.env.GRAPHFLOW_WORKSPACE_ROOT = discovered;
|
|
103
|
+
return discovered;
|
|
104
|
+
}
|
|
105
|
+
const cwd = (0, node_path_1.resolve)(fromDir);
|
|
106
|
+
if (!isGraphFlowRuntimeDirectory(cwd)) {
|
|
107
|
+
process.env.GRAPHFLOW_WORKSPACE_ROOT = cwd;
|
|
108
|
+
return cwd;
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=discover-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover-workspace.js","sourceRoot":"","sources":["../../src/config/discover-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAahD,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,IAAI,SAA0B,GAAG,MAAM,CAqBxE;AAED,0GAA0G;AAC1G,wBAAgB,yBAAyB,CAAC,IAAI,SAA0B,GAAG,MAAM,CAWhF;AAED,wBAAgB,aAAa,CAAC,IAAI,SAA0B,GAAG,eAAe,CA4C7E"}
|
package/dist/config/resolve.js
CHANGED
|
@@ -9,6 +9,7 @@ const loader_1 = require("./loader");
|
|
|
9
9
|
const merge_1 = require("./merge");
|
|
10
10
|
const defaults_1 = require("./defaults");
|
|
11
11
|
const scaffold_1 = require("./scaffold");
|
|
12
|
+
const workspace_root_1 = require("./workspace-root");
|
|
12
13
|
const logger_1 = require("../utils/logger");
|
|
13
14
|
function isDefaultProjectConfigPath(path) {
|
|
14
15
|
const projectRootConfig = (0, node_path_1.resolve)("graphflow.config.json");
|
|
@@ -50,23 +51,36 @@ function resolveConfig(path = "graphflow.config.json") {
|
|
|
50
51
|
if (result.usedFallback && result.error) {
|
|
51
52
|
logger_1.logger.warn({ path: result.configPath, error: result.error }, "Using default config for explicit path");
|
|
52
53
|
}
|
|
53
|
-
|
|
54
|
+
const projectRoot = result.config.graphPolicy.workspaceRoot;
|
|
55
|
+
return (0, workspace_root_1.bindRuntimeWorkspaceRoot)(result.config, projectRoot ? { projectWorkspaceRoot: projectRoot } : undefined);
|
|
54
56
|
}
|
|
55
57
|
const globalPath = (0, scaffold_1.resolveGlobalConfigPath)();
|
|
56
58
|
const base = (0, node_fs_1.existsSync)(globalPath) ? loadLayer(globalPath) : (0, defaults_1.getDefaultConfig)();
|
|
57
59
|
const projectRoot = (0, node_path_1.resolve)("graphflow.config.json");
|
|
58
60
|
const overlayPath = (0, node_path_1.resolve)(".graphflow/config.json");
|
|
61
|
+
let merged;
|
|
62
|
+
let projectWorkspaceRoot;
|
|
59
63
|
if ((0, node_fs_1.existsSync)(projectRoot) && (0, node_fs_1.existsSync)(overlayPath)) {
|
|
60
|
-
const
|
|
61
|
-
|
|
64
|
+
const projectLayer = loadLayer(projectRoot);
|
|
65
|
+
const overlayLayer = loadLayer(overlayPath);
|
|
66
|
+
merged = (0, merge_1.mergeGraphFlowConfig)((0, merge_1.mergeGraphFlowConfig)(base, projectLayer), overlayLayer);
|
|
67
|
+
projectWorkspaceRoot =
|
|
68
|
+
overlayLayer.graphPolicy.workspaceRoot ?? projectLayer.graphPolicy.workspaceRoot;
|
|
62
69
|
}
|
|
63
|
-
if ((0, node_fs_1.existsSync)(projectRoot)) {
|
|
64
|
-
|
|
70
|
+
else if ((0, node_fs_1.existsSync)(projectRoot)) {
|
|
71
|
+
const projectLayer = loadLayer(projectRoot);
|
|
72
|
+
merged = (0, merge_1.mergeGraphFlowConfig)(base, projectLayer);
|
|
73
|
+
projectWorkspaceRoot = projectLayer.graphPolicy.workspaceRoot;
|
|
65
74
|
}
|
|
66
|
-
if ((0, node_fs_1.existsSync)(overlayPath)) {
|
|
67
|
-
|
|
75
|
+
else if ((0, node_fs_1.existsSync)(overlayPath)) {
|
|
76
|
+
const overlayLayer = loadLayer(overlayPath);
|
|
77
|
+
merged = (0, merge_1.mergeGraphFlowConfig)(base, overlayLayer);
|
|
78
|
+
projectWorkspaceRoot = overlayLayer.graphPolicy.workspaceRoot;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
merged = base;
|
|
68
82
|
}
|
|
69
|
-
return
|
|
83
|
+
return (0, workspace_root_1.bindRuntimeWorkspaceRoot)(merged, projectWorkspaceRoot ? { projectWorkspaceRoot } : undefined);
|
|
70
84
|
}
|
|
71
85
|
function loadLayer(path) {
|
|
72
86
|
const result = (0, loader_1.loadConfigSafe)(path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/config/scaffold.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/config/scaffold.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,oBAAoB,CAkBnG;AAED,wBAAgB,8BAA8B,CAAC,aAAa,EAAE,MAAM,GAAG,oBAAoB,CAa1F"}
|