@roarpeng/graphflow 0.6.14 → 1.0.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/AGENTS.md +1 -1
- package/CHANGELOG.md +45 -0
- package/README.md +58 -11
- package/dist/agents/validator.d.ts.map +1 -1
- package/dist/agents/validator.js +19 -8
- package/dist/agents/validator.js.map +1 -1
- package/dist/agents/worker.d.ts.map +1 -1
- package/dist/agents/worker.js +3 -2
- package/dist/agents/worker.js.map +1 -1
- package/dist/config/schema.d.ts +31 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/core/dag-engine.d.ts.map +1 -1
- package/dist/core/dag-engine.js +9 -3
- package/dist/core/dag-engine.js.map +1 -1
- package/dist/core/orchestrator.d.ts +7 -0
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +61 -3
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/state-machine.d.ts +1 -0
- package/dist/core/state-machine.d.ts.map +1 -1
- package/dist/core/state-machine.js +20 -0
- package/dist/core/state-machine.js.map +1 -1
- package/dist/core/types.d.ts +7 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/graph/adaptive-budget.d.ts +18 -0
- package/dist/graph/adaptive-budget.d.ts.map +1 -0
- package/dist/graph/adaptive-budget.js +50 -0
- package/dist/graph/adaptive-budget.js.map +1 -0
- package/dist/graph/compression-model.d.ts +52 -0
- package/dist/graph/compression-model.d.ts.map +1 -0
- package/dist/graph/compression-model.js +125 -0
- package/dist/graph/compression-model.js.map +1 -0
- package/dist/graph/context-slicer.d.ts +32 -0
- package/dist/graph/context-slicer.d.ts.map +1 -1
- package/dist/graph/context-slicer.js +157 -0
- package/dist/graph/context-slicer.js.map +1 -1
- package/dist/graph/graph-compression.d.ts +44 -0
- package/dist/graph/graph-compression.d.ts.map +1 -0
- package/dist/graph/graph-compression.js +153 -0
- package/dist/graph/graph-compression.js.map +1 -0
- package/dist/graph/repo-map.d.ts +25 -0
- package/dist/graph/repo-map.d.ts.map +1 -0
- package/dist/graph/repo-map.js +80 -0
- package/dist/graph/repo-map.js.map +1 -0
- package/dist/graph/semantic-compression.d.ts +65 -0
- package/dist/graph/semantic-compression.d.ts.map +1 -0
- package/dist/graph/semantic-compression.js +173 -0
- package/dist/graph/semantic-compression.js.map +1 -0
- package/dist/integrations/agent-mcp-installer.d.ts +11 -0
- package/dist/integrations/agent-mcp-installer.d.ts.map +1 -1
- package/dist/integrations/agent-mcp-installer.js +175 -9
- package/dist/integrations/agent-mcp-installer.js.map +1 -1
- package/dist/learning/hnsw-index.d.ts +46 -0
- package/dist/learning/hnsw-index.d.ts.map +1 -0
- package/dist/learning/hnsw-index.js +138 -0
- package/dist/learning/hnsw-index.js.map +1 -0
- package/dist/learning/vector-store.d.ts +2 -0
- package/dist/learning/vector-store.d.ts.map +1 -1
- package/dist/learning/vector-store.js +4 -0
- package/dist/learning/vector-store.js.map +1 -1
- package/dist/routing/model-router.d.ts +7 -0
- package/dist/routing/model-router.d.ts.map +1 -1
- package/dist/routing/model-router.js +36 -0
- package/dist/routing/model-router.js.map +1 -1
- package/dist/routing/provider-executor.d.ts.map +1 -1
- package/dist/routing/provider-executor.js +5 -4
- package/dist/routing/provider-executor.js.map +1 -1
- package/dist/surfaces/cli/runtime/graph.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/graph.js +30 -1
- package/dist/surfaces/cli/runtime/graph.js.map +1 -1
- package/dist/surfaces/cli/runtime/panel.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/panel.js +2 -0
- package/dist/surfaces/cli/runtime/panel.js.map +1 -1
- package/dist/surfaces/cli/runtime/routing.d.ts.map +1 -1
- package/dist/surfaces/cli/runtime/routing.js +15 -0
- package/dist/surfaces/cli/runtime/routing.js.map +1 -1
- package/dist/surfaces/cli/runtime/types.d.ts +20 -0
- package/dist/surfaces/cli/runtime/types.d.ts.map +1 -1
- package/dist/surfaces/mcp/server.js +20 -2
- package/dist/surfaces/mcp/server.js.map +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/package.json +2 -1
package/AGENTS.md
CHANGED
|
@@ -40,7 +40,7 @@ From this repository:
|
|
|
40
40
|
|
|
41
41
|
- Use `graphflow_plan` before multi-step edits.
|
|
42
42
|
- Use `graphflow_preview_context` before large refactors or codebase-wide questions.
|
|
43
|
-
- Use `graphflow_run` when you want GraphFlow to execute
|
|
43
|
+
- Use `graphflow_run` when you want GraphFlow to plan and package a task with compressed context, returning a structured execution descriptor (executionDescriptor) for you to execute. GraphFlow delegates execution to external coding agents by default (bridge mode).
|
|
44
44
|
- Use `graphflow_index` after workspace changes if graph freshness matters.
|
|
45
45
|
- Use `graphflow_inspect_graph` and `graphflow_skill_insights` for observability.
|
|
46
46
|
- Use `graphflow_diagnose` when model/provider routing looks wrong.
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,51 @@ All notable changes to this project are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [1.0.0] - 2026-06-19
|
|
8
|
+
|
|
9
|
+
首个正式版本。在 0.6.x 基础上完成「诚实执行语义」收敛与「上下文压缩」体系,所有新增能力均端到端接线到 CLI / MCP / orchestrator。
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **混合压缩模型策略(compressor role)**:新增 `compressor` 角色,默认复用 economy tier(`backend: "inherit"`)——配置了外部 provider(OpenAI/Anthropic/百炼)就用其 economy 模型,纯离线则回退内嵌 minicpm。零额外配置。
|
|
14
|
+
- **内嵌模型首次自动下载**:无外部 LLM 时,`resolveCompressionModel` 复用既有断点续传下载器,首次按需拉取 minicpm GGUF 到 `~/.graphflow/models/`(类似 Playwright 浏览器下载)。
|
|
15
|
+
- **图结构压缩(零成本,默认开启)**:`graph-compression.ts` 提供边权重加权连通子图(`extractConnectedSubgraph`)、加权 PageRank 中心性(`computePageRank`)、检索序与中心性融合重排(`blendWithCentrality`)。preview / orchestrator 默认启用。
|
|
16
|
+
- **语义压缩(opt-in)**:`semantic-compression.ts` 通过 minicpm/economy LLM 对相似节点聚类合并(`clusterSimilarNodes` + `summarizeCluster`)、长节点改写(`densifyNodeContent`),由 `graphPolicy.compression.enabled` 开启。
|
|
17
|
+
- **RepoMap 概览模式(opt-in)**:`repo-map.ts` 在 token 预算紧张时返回模块级地图(每模块一行 exports 摘要),由 `compression.enableRepoMapFallback` 开启。
|
|
18
|
+
- **自适应 Token 预算(opt-in)**:`adaptive-budget.ts` 的 `estimateContextBudget` 按任务复杂度(refactor/多文件/架构/局部修复/加测试)动态调整预算,由 `compression.enableAdaptiveBudget` 开启。
|
|
19
|
+
- **HNSW 向量索引(可选依赖)**:`hnsw-index.ts` 在候选集 ≥200 节点时使用 hnswlib-node ANN 加速(10~100x),未安装时优雅降级线性扫描。`hnswlib-node` 列为 optionalDependency。
|
|
20
|
+
- **`buildEnhancedContextPackage`**:统一六步压缩 pipeline(RepoMap fallback → 关键词+向量召回 → 图压缩 → 语义压缩 → 分层配额 → 边扩展),preview 与 orchestrator 共用。
|
|
21
|
+
- **压缩诊断**:`route diagnose` 输出新增 `compression=<backend>:<provider>/<model>` 行,可查当前压缩模型来源。
|
|
22
|
+
- 测试 m43(bridge 模式)、m44(增强压缩)、m45(真机 benchmark)。
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- **执行语义诚实化(bridge 模式)**:`graphflow_run` 默认进入 bridge 模式——规划 + 压缩上下文后输出 `executionDescriptor` 移交外部 coding agent 执行,状态为 `HUMAN_REVIEW_REQUIRED` 并标注 `[DELEGATED]`,不再伪造 `COMPLETED`。
|
|
27
|
+
- **校验启发式标注**:规则校验结果统一标注 `[heuristic]` 与 `heuristic_validation` riskTag;检测并拒绝 provider 占位符回显(`[openai:model] ...`)。
|
|
28
|
+
- `graphPolicy.compression` 配置项扩展:`enableGraphCompression` / `enableRepoMapFallback` / `enableAdaptiveBudget` / `enableHnsw`。
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- worker 兜底分支不再返回 `"Simulated change..."` 伪造输出,无可用执行模式时抛出明确错误。
|
|
33
|
+
- README 版本号、测试数与失效文档引用同步至 1.0。
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- MCP server 优雅停机:监听 `SIGTERM`/`SIGINT`,停止接收新的 stdin 输入并给在途请求短暂 flush 窗口后退出,避免长驻进程被硬杀导致状态丢失。
|
|
39
|
+
- `VectorStore.close()`:释放底层 SQLite 句柄,与 `SqliteClient.close()` 对齐,避免长驻进程文件描述符泄漏。
|
|
40
|
+
- MCP 工具入参长度上限(`MAX_STRING_FIELD_LENGTH`),防止超大 payload / prompt injection 风险。
|
|
41
|
+
|
|
42
|
+
### Changed
|
|
43
|
+
|
|
44
|
+
- `provider-executor` 改用结构化 `logger` 替换裸 `console.warn/error`,确保生产环境日志可被聚合采集。
|
|
45
|
+
- `orchestrate()` 增加顶层错误边界:上下文构建 / DAG 执行 / 图同步的未捕获异常统一收敛为结构化 `HUMAN_REVIEW_REQUIRED` 结果,不再裸抛给调用方。
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
|
|
49
|
+
- DAG 执行 timeout 定时器在任务成功路径未被清除,长驻进程下存在 timer 泄漏;改为 `finally` 中 `clearTimeout`。
|
|
50
|
+
- `m12-dynamic-routing` 测试不再依赖对 `api.anthropic.com` 的外网可达性:将 anthropic `baseUrl` 指向本地立即拒绝连接的地址,确定性触发非 strict 降级路径。
|
|
51
|
+
|
|
7
52
|
## [0.6.13] - 2026-06-14
|
|
8
53
|
|
|
9
54
|
### Fixed
|
package/README.md
CHANGED
|
@@ -4,25 +4,25 @@ A Context-Aware Multi-Agent Orchestration Engine.
|
|
|
4
4
|
|
|
5
5
|
GraphFlow 是一个基于 TypeScript/Node.js 的多智能体编排引擎,将 **Graphify 式知识图谱** 与 **Superpowers 式任务编排** 整合为可本地运行的上下文层:自动建图、压缩检索、规划执行、经验沉淀,并通过 CLI、MCP 与 VS Code 扩展对外暴露。
|
|
6
6
|
|
|
7
|
-
## 当前能力总览(
|
|
7
|
+
## 当前能力总览(v1.0.0)
|
|
8
8
|
|
|
9
9
|
| 能力域 | 说明 |
|
|
10
10
|
| --- | --- |
|
|
11
|
-
|
|
|
11
|
+
| **任务规划与移交** | 按任务复杂度分流 simple / complex;DAG 规划;默认 **bridge 模式**输出结构化任务描述符交给外部 coding agent 执行 |
|
|
12
12
|
| **模型路由** | Smart / Economy 双 tier;多 provider 健康探测与 fallback(OpenAI、Anthropic、百炼、豆包、OpenBMB) |
|
|
13
13
|
| **知识图谱** | 工作区 AST 索引(TS/JS/Python/Rust/Go/C/C++);File / Module / Symbol 节点 + 依赖/引用/定义边 |
|
|
14
|
-
| **上下文压缩** | L1/L2/L3
|
|
14
|
+
| **上下文压缩** | L1/L2/L3 分层锚点;近无损打包;图结构压缩(边权重+PageRank,零成本默认开启);可选语义压缩(minicpm/economy LLM 聚类合并);向量召回 + RRF + HNSW;RepoMap 概览;自适应预算 |
|
|
15
15
|
| **持续建图** | 默认 `autoIndexOnSave`;preview / run 前按需增量索引(`hasPendingGraphIndexWork`) |
|
|
16
16
|
| **语义增强** | 可选 post-index LLM 语义 enrich;OpenBMB 本地 embedded 模式 |
|
|
17
17
|
| **学习飞轮** | Episodic Memory、Reflection、Skill 节点、nightly 学习、技能提示注入规划 |
|
|
18
18
|
| **Agent 接入** | CLI `--json`;MCP stdio(9 工具);Cursor / Claude Code 规则与示例配置 |
|
|
19
19
|
| **VS Code 扩展** | Settings、建图、路由测试、Context Preview、**知识图谱可视化**、Skill Insights、Chat Agent |
|
|
20
20
|
| **存储后端** | `file`(JSON)/ `memory` / `sqlite`(FTS5)/ `mcp-http`(Graphify) |
|
|
21
|
-
| **工程质量** | TypeScript strict;**
|
|
21
|
+
| **工程质量** | TypeScript strict;**45 测试文件 / 200+ tests**;`npm run ci` 含扩展 esbuild 打包与 bundled runtime smoke |
|
|
22
22
|
|
|
23
23
|
### 一句话总结
|
|
24
24
|
|
|
25
|
-
> 从 task 描述出发,自动规划 → 路由模型 → 压缩图谱上下文(含向量召回)→
|
|
25
|
+
> 从 task 描述出发,自动规划 → 路由模型 → 压缩图谱上下文(含向量召回)→ **输出结构化执行描述符交给外部 coding agent**,并把经验沉淀回知识图谱;定位为 **上下文与规划服务(context service)**,而非独立执行器。
|
|
26
26
|
|
|
27
27
|
### v0.6.7 – v0.6.13 近期演进
|
|
28
28
|
|
|
@@ -51,7 +51,7 @@ GraphFlow 是一个基于 TypeScript/Node.js 的多智能体编排引擎,将 *
|
|
|
51
51
|
|
|
52
52
|
### 发布信息
|
|
53
53
|
|
|
54
|
-
- 最新版本:**
|
|
54
|
+
- 最新版本:**v1.0.0**(root + vscode-extension);npm:`@roarpeng/graphflow@1.0.0`
|
|
55
55
|
- **GitHub Release**:push 到 `main` 且 CI 通过后自动发布 VSIX(见 [Actions](https://github.com/Roarpeng/GraphFlow/actions))
|
|
56
56
|
- 变更日志:`CHANGELOG.md`
|
|
57
57
|
|
|
@@ -68,7 +68,7 @@ npm install
|
|
|
68
68
|
npm run ci
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
预期:`lint` 无错误、`build` 成功、**
|
|
71
|
+
预期:`lint` 无错误、`build` 成功、**200+ tests** 通过、扩展 bundle 与 runtime smoke 通过。
|
|
72
72
|
|
|
73
73
|
## Agent 工具接入
|
|
74
74
|
|
|
@@ -143,6 +143,54 @@ npm run start -- skill insights
|
|
|
143
143
|
|
|
144
144
|
## 进阶能力
|
|
145
145
|
|
|
146
|
+
### 上下文压缩(v1.0 核心)
|
|
147
|
+
|
|
148
|
+
GraphFlow 的压缩采用「三层渐进」策略,先用零成本图结构压缩砍掉冗余节点,再按需用 LLM 做语义合并:
|
|
149
|
+
|
|
150
|
+
| 层 | 机制 | 成本 | 默认 |
|
|
151
|
+
| --- | --- | --- | --- |
|
|
152
|
+
| 图结构压缩 | 边权重连通子图 + PageRank 中心性重排 | 零 LLM | **开启** |
|
|
153
|
+
| 向量召回 | embedding + RRF 融合;候选 ≥200 自动用 HNSW ANN | 零 LLM | 配 embedding 时开启 |
|
|
154
|
+
| 语义压缩 | minicpm/economy LLM 聚类合并相似节点 + 长节点改写 | LLM | opt-in |
|
|
155
|
+
| RepoMap 概览 | 预算紧张时返回模块级地图 | 零 LLM | opt-in |
|
|
156
|
+
| 自适应预算 | 按任务复杂度动态调整 token 预算 | 零 LLM | opt-in |
|
|
157
|
+
|
|
158
|
+
**压缩模型策略(零额外配置)**:压缩复用 economy tier——
|
|
159
|
+
|
|
160
|
+
- 配了外部 provider(OpenAI/Anthropic/百炼)→ 自动用其 economy 模型(如 `gpt-4.1-mini`)
|
|
161
|
+
- 纯离线无外部 LLM → 自动回退内嵌 minicpm,**首次使用按需下载** GGUF 到 `~/.graphflow/models/`(约 650MB,仅一次)
|
|
162
|
+
|
|
163
|
+
配置示例:
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"graphPolicy": {
|
|
168
|
+
"compression": {
|
|
169
|
+
"enabled": true,
|
|
170
|
+
"backend": "inherit",
|
|
171
|
+
"enableGraphCompression": true,
|
|
172
|
+
"enableHnsw": true,
|
|
173
|
+
"enableRepoMapFallback": false,
|
|
174
|
+
"enableAdaptiveBudget": false,
|
|
175
|
+
"autoDownloadEmbedded": true
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
查看当前压缩模型来源:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
npm run start -- route diagnose
|
|
185
|
+
# 输出含:compression=inherit:openai/gpt-4.1-mini
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**HNSW 加速(可选依赖)**:大仓库(候选 ≥200 节点)向量召回自动使用 HNSW ANN(10~100x 提速)。需安装可选依赖:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
npm install hnswlib-node # 未安装时自动降级线性扫描,不影响功能
|
|
192
|
+
```
|
|
193
|
+
|
|
146
194
|
### SQLite / FTS5 后端
|
|
147
195
|
|
|
148
196
|
```json
|
|
@@ -265,8 +313,7 @@ code --install-extension artifacts/graphflow-vscode-*.vsix
|
|
|
265
313
|
3. `context preview` → `summary > 0` 且 `anchors > 0`
|
|
266
314
|
4. VS Code **Show Graph** → 画布正常显示节点聚类(非角落小点)
|
|
267
315
|
5. `plan` / `run` 返回正常输出
|
|
268
|
-
|
|
269
|
-
正式测试文档:`docs/testing/2026-05-28-formal-usage-test-plan.md`
|
|
316
|
+
6. `route diagnose` → 显示 `compression=<backend>:<provider>/<model>`
|
|
270
317
|
|
|
271
318
|
## 常见问题
|
|
272
319
|
|
|
@@ -277,7 +324,7 @@ code --install-extension artifacts/graphflow-vscode-*.vsix
|
|
|
277
324
|
|
|
278
325
|
**知识图谱面板空白或只有小点**
|
|
279
326
|
|
|
280
|
-
- 升级到 **
|
|
327
|
+
- 升级到 **v1.0.0+** 并重载窗口
|
|
281
328
|
- 点击画布工具栏 **「适应」**
|
|
282
329
|
|
|
283
330
|
**API Key 未配置**
|
|
@@ -300,7 +347,7 @@ GraphFlow/
|
|
|
300
347
|
│ └── surfaces/
|
|
301
348
|
│ ├── cli/ # CLI + runtime 子模块
|
|
302
349
|
│ └── mcp/ # MCP server
|
|
303
|
-
├── tests/ #
|
|
350
|
+
├── tests/ # 45 文件 / 200+ tests
|
|
304
351
|
├── vscode-extension/ # VS Code 面板与命令
|
|
305
352
|
├── docs/
|
|
306
353
|
└── CHANGELOG.md
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/agents/validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAErF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/agents/validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAErF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB,CAsDvF;AA+BD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,cAAc,EACzB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,gBAAgB,CAAC,CA6B3B"}
|
package/dist/agents/validator.js
CHANGED
|
@@ -8,19 +8,30 @@ function validateTaskResult(task, workerOutput) {
|
|
|
8
8
|
if (!task.trim()) {
|
|
9
9
|
return {
|
|
10
10
|
passed: false,
|
|
11
|
-
feedback: "Task cannot be empty.",
|
|
11
|
+
feedback: "[heuristic] Task cannot be empty.",
|
|
12
12
|
matchedCriteria: [],
|
|
13
13
|
missingCriteria: ["task"],
|
|
14
|
-
riskTags: ["invalid_input"],
|
|
14
|
+
riskTags: ["invalid_input", "heuristic_validation"],
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
if (!workerOutput.trim()) {
|
|
18
18
|
return {
|
|
19
19
|
passed: false,
|
|
20
|
-
feedback: "Worker output is empty.",
|
|
20
|
+
feedback: "[heuristic] Worker output is empty.",
|
|
21
21
|
matchedCriteria: [],
|
|
22
22
|
missingCriteria: extractCriteria(task),
|
|
23
|
-
riskTags: ["empty_output"],
|
|
23
|
+
riskTags: ["empty_output", "heuristic_validation"],
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// Detect placeholder/fallback output from provider adapters
|
|
27
|
+
const isPlaceholder = /^\[(openai|anthropic|bailian|doubao|openbmb):[^\]]+\]/i.test(workerOutput.trim());
|
|
28
|
+
if (isPlaceholder) {
|
|
29
|
+
return {
|
|
30
|
+
passed: false,
|
|
31
|
+
feedback: "[heuristic] Worker output appears to be a provider fallback placeholder, not real execution result.",
|
|
32
|
+
matchedCriteria: [],
|
|
33
|
+
missingCriteria: extractCriteria(task),
|
|
34
|
+
riskTags: ["placeholder_output", "heuristic_validation"],
|
|
24
35
|
};
|
|
25
36
|
}
|
|
26
37
|
const criteria = extractCriteria(task);
|
|
@@ -29,18 +40,18 @@ function validateTaskResult(task, workerOutput) {
|
|
|
29
40
|
if (missingCriteria.length > 0) {
|
|
30
41
|
return {
|
|
31
42
|
passed: false,
|
|
32
|
-
feedback: `Validation failed: missing criteria -> ${missingCriteria.join(", ")}`,
|
|
43
|
+
feedback: `[heuristic] Validation failed: missing criteria -> ${missingCriteria.join(", ")}`,
|
|
33
44
|
matchedCriteria,
|
|
34
45
|
missingCriteria,
|
|
35
|
-
riskTags: ["criteria_mismatch"],
|
|
46
|
+
riskTags: ["criteria_mismatch", "heuristic_validation"],
|
|
36
47
|
};
|
|
37
48
|
}
|
|
38
49
|
return {
|
|
39
50
|
passed: true,
|
|
40
|
-
feedback: `Validation passed: matched ${matchedCriteria.length}/${criteria.length} criteria.`,
|
|
51
|
+
feedback: `[heuristic] Validation passed: matched ${matchedCriteria.length}/${criteria.length} criteria. Note: this is substring-based heuristic validation, not semantic verification.`,
|
|
41
52
|
matchedCriteria,
|
|
42
53
|
missingCriteria: [],
|
|
43
|
-
riskTags: [],
|
|
54
|
+
riskTags: ["heuristic_validation"],
|
|
44
55
|
};
|
|
45
56
|
}
|
|
46
57
|
function extractCriteria(task) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/agents/validator.ts"],"names":[],"mappings":";;AAKA,
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/agents/validator.ts"],"names":[],"mappings":";;AAKA,gDAsDC;AA+BD,sDAkCC;AA5HD,4CAAyC;AAGzC,oEAAqF;AAErF,SAAgB,kBAAkB,CAAC,IAAY,EAAE,YAAoB;IACnE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,OAAO;YACL,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,mCAAmC;YAC7C,eAAe,EAAE,EAAE;YACnB,eAAe,EAAE,CAAC,MAAM,CAAC;YACzB,QAAQ,EAAE,CAAC,eAAe,EAAE,sBAAsB,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QACzB,OAAO;YACL,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,qCAAqC;YAC/C,eAAe,EAAE,EAAE;YACnB,eAAe,EAAE,eAAe,CAAC,IAAI,CAAC;YACtC,QAAQ,EAAE,CAAC,cAAc,EAAE,sBAAsB,CAAC;SACnD,CAAC;IACJ,CAAC;IAED,4DAA4D;IAC5D,MAAM,aAAa,GAAG,wDAAwD,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IACzG,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO;YACL,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,qGAAqG;YAC/G,eAAe,EAAE,EAAE;YACnB,eAAe,EAAE,eAAe,CAAC,IAAI,CAAC;YACtC,QAAQ,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;SACzD,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAClG,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7F,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,sDAAsD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC5F,eAAe;YACf,eAAe;YACf,QAAQ,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACxD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,0CAA0C,eAAe,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,2FAA2F;QACxL,eAAe;QACf,eAAe,EAAE,EAAE;QACnB,QAAQ,EAAE,CAAC,sBAAsB,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI;SACf,KAAK,CAAC,cAAc,CAAC;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB,EAAE,MAAc;IACzD,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEzC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,cAAc;SAC1B,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;SACnD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAExC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC;AAEM,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,YAAoB,EACpB,SAAyB,EACzB,OAAuB;IAEvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QACzC,OAAO,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,MAAM,GAAG;QACb,6EAA6E;QAC7E,qGAAqG;QACrG,mBAAmB;QACnB,kDAAkD;QAClD,iEAAiE;QACjE,SAAS,IAAI,EAAE;QACf,kBAAkB,YAAY,EAAE;KACjC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAA,qCAAiB,EAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,CAAC;QACxC,OAAO,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACpE,IAAI,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,KAAc,EAAY,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/F,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QACpE,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC;QACtD,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC;QACtD,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;KACzC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/agents/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/agents/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCnE"}
|
package/dist/agents/worker.js
CHANGED
|
@@ -28,7 +28,8 @@ async function runWorker(input) {
|
|
|
28
28
|
: input.task;
|
|
29
29
|
return (0, provider_executor_1.executeRolePrompt)("worker", taskWithFeedback, input.selection, input.context);
|
|
30
30
|
}
|
|
31
|
-
//
|
|
32
|
-
|
|
31
|
+
// No valid execution mode configured
|
|
32
|
+
throw new Error("Worker cannot execute: no selection provided and bridge mode not enabled. " +
|
|
33
|
+
"Configure a provider/model or set executionMode to 'bridge' to delegate execution to external agents.");
|
|
33
34
|
}
|
|
34
35
|
//# sourceMappingURL=worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/agents/worker.ts"],"names":[],"mappings":";;AAmBA,
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/agents/worker.ts"],"names":[],"mappings":";;AAmBA,8BAkCC;AArDD,oEAAqF;AAmB9E,KAAK,UAAU,SAAS,CAAC,KAAkB;IAChD,sCAAsC;IACtC,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC,UAAU,CAAC;IAC1B,CAAC;IAED,+EAA+E;IAC/E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAyB;YACvC,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACpB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;qBAC1B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;qBACzE,IAAI,CAAC,IAAI,CAAC;gBACf,CAAC,CAAC,EAAE;YACN,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;SAC7D,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,6DAA6D;IAC7D,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa;YAC1C,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,wBAAwB,KAAK,CAAC,aAAa,EAAE;YAC5D,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACf,OAAO,IAAA,qCAAiB,EAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvF,CAAC;IAED,qCAAqC;IACrC,MAAM,IAAI,KAAK,CACb,4EAA4E;QAC5E,uGAAuG,CACxG,CAAC;AACJ,CAAC"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -63,6 +63,37 @@ export interface GraphFlowConfig {
|
|
|
63
63
|
timeoutMs?: number;
|
|
64
64
|
autoRunOnIndex?: boolean;
|
|
65
65
|
};
|
|
66
|
+
/**
|
|
67
|
+
* Context compression model selection. Compression (cluster summarization,
|
|
68
|
+
* node densification) reuses the economy tier by default ("inherit"), so
|
|
69
|
+
* no extra config is needed: whatever provider powers economy also powers
|
|
70
|
+
* compression. Falls back to an auto-downloaded embedded minicpm-1b when no
|
|
71
|
+
* external provider is configured.
|
|
72
|
+
*/
|
|
73
|
+
compression?: {
|
|
74
|
+
enabled?: boolean;
|
|
75
|
+
/** inherit=reuse economy tier (default), network=external API, local=embedded minicpm. */
|
|
76
|
+
backend?: "inherit" | "network" | "local";
|
|
77
|
+
/** Override provider (network backend only). */
|
|
78
|
+
provider?: string;
|
|
79
|
+
/** Override model; leave unset to inherit economy/default routing. */
|
|
80
|
+
model?: string;
|
|
81
|
+
apiKey?: string;
|
|
82
|
+
baseUrl?: string;
|
|
83
|
+
/** Auto-download embedded model on first use when falling back to local. Default true. */
|
|
84
|
+
autoDownloadEmbedded?: boolean;
|
|
85
|
+
/** Override embedded model path; defaults to ~/.graphflow/models/minicpm-1b.gguf. */
|
|
86
|
+
embeddedModelPath?: string;
|
|
87
|
+
timeoutMs?: number;
|
|
88
|
+
/** Zero-cost graph-structure compression (edge weights + PageRank). Default true. */
|
|
89
|
+
enableGraphCompression?: boolean;
|
|
90
|
+
/** Return module-level RepoMap overview when budget is tight (<1000 tokens). Default false. */
|
|
91
|
+
enableRepoMapFallback?: boolean;
|
|
92
|
+
/** Adaptively size the token budget from task complexity. Default false. */
|
|
93
|
+
enableAdaptiveBudget?: boolean;
|
|
94
|
+
/** Use HNSW ANN index for large candidate sets (>=200 nodes). Default true. */
|
|
95
|
+
enableHnsw?: boolean;
|
|
96
|
+
};
|
|
66
97
|
};
|
|
67
98
|
learningPolicy: {
|
|
68
99
|
enableFlywheel: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dag-engine.d.ts","sourceRoot":"","sources":["../../src/core/dag-engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;CACpB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,QAAQ,EAAE,EAChB,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"dag-engine.d.ts","sourceRoot":"","sources":["../../src/core/dag-engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhE,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;CACpB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,QAAQ,EAAE,EAChB,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CA2G7B"}
|
package/dist/core/dag-engine.js
CHANGED
|
@@ -62,19 +62,25 @@ async function executeDag(plan, executor, options) {
|
|
|
62
62
|
}
|
|
63
63
|
for (const batch of batches) {
|
|
64
64
|
const results = await Promise.all(batch.map(async (task) => {
|
|
65
|
-
// 包裹 timeout
|
|
65
|
+
// 包裹 timeout,成功路径也要清掉定时器,避免长驻进程里 timer 泄漏
|
|
66
|
+
let timeoutHandle;
|
|
66
67
|
const taskPromise = executor(task);
|
|
67
68
|
const timeoutPromise = new Promise((_, reject) => {
|
|
68
|
-
setTimeout(() => reject(new Error("TIMEOUT")), timeoutMs);
|
|
69
|
+
timeoutHandle = setTimeout(() => reject(new Error("TIMEOUT")), timeoutMs);
|
|
69
70
|
});
|
|
70
71
|
let ok;
|
|
71
72
|
try {
|
|
72
73
|
ok = await Promise.race([taskPromise, timeoutPromise]);
|
|
73
74
|
}
|
|
74
75
|
catch (error) {
|
|
75
|
-
logger_1.logger.error({ error }, "
|
|
76
|
+
logger_1.logger.error({ error, taskId: task.id }, "DAG task execution failed");
|
|
76
77
|
ok = false;
|
|
77
78
|
}
|
|
79
|
+
finally {
|
|
80
|
+
if (timeoutHandle) {
|
|
81
|
+
clearTimeout(timeoutHandle);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
78
84
|
return { task, ok };
|
|
79
85
|
}));
|
|
80
86
|
for (const result of results) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dag-engine.js","sourceRoot":"","sources":["../../src/core/dag-engine.ts"],"names":[],"mappings":";;AAiBA,
|
|
1
|
+
{"version":3,"file":"dag-engine.js","sourceRoot":"","sources":["../../src/core/dag-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,13 @@ export interface OrchestrateOptions {
|
|
|
26
26
|
enableLlmTriage?: boolean;
|
|
27
27
|
embeddingProvider?: import("../learning/embeddings").EmbeddingProvider;
|
|
28
28
|
configPath?: string;
|
|
29
|
+
executionMode?: "bridge" | "llm";
|
|
30
|
+
/** Enable zero-cost graph-structure compression (edge weights + PageRank). Default true. */
|
|
31
|
+
enableGraphCompression?: boolean;
|
|
32
|
+
/** Adaptively size the context token budget from task complexity. Default false. */
|
|
33
|
+
enableAdaptiveBudget?: boolean;
|
|
34
|
+
/** Return module-level RepoMap overview when budget is tight. Default false. */
|
|
35
|
+
enableRepoMapFallback?: boolean;
|
|
29
36
|
}
|
|
30
37
|
export declare function orchestrate(input: OrchestrationInput, options?: OrchestrateOptions): Promise<TaskRunResult>;
|
|
31
38
|
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EACL,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AASjC,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,KAAK,EAAE,kBAAkB,EAAiB,aAAa,EAAwB,MAAM,SAAS,CAAC;AAEtG,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACxD,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,qBAAqB,CAAC,EAAE,YAAY,EAAE,CAAC;IACvC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,wBAAwB,EAAE,iBAAiB,CAAC;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IACjC,4FAA4F;IAC5F,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oFAAoF;IACpF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,wBAAsB,WAAW,CAC/B,KAAK,EAAE,kBAAkB,EACzB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAcxB"}
|
|
@@ -4,7 +4,6 @@ exports.orchestrate = orchestrate;
|
|
|
4
4
|
const planner_1 = require("../agents/planner");
|
|
5
5
|
const brainstormer_1 = require("../agents/brainstormer");
|
|
6
6
|
const logger_1 = require("../utils/logger");
|
|
7
|
-
const context_slicer_1 = require("../graph/context-slicer");
|
|
8
7
|
const post_run_sync_1 = require("../hooks/post-run-sync");
|
|
9
8
|
const episodic_memory_1 = require("../learning/episodic-memory");
|
|
10
9
|
const skill_flywheel_1 = require("../learning/skill-flywheel");
|
|
@@ -14,6 +13,22 @@ const dag_engine_1 = require("./dag-engine");
|
|
|
14
13
|
const state_machine_1 = require("./state-machine");
|
|
15
14
|
const triage_1 = require("./triage");
|
|
16
15
|
async function orchestrate(input, options) {
|
|
16
|
+
try {
|
|
17
|
+
return await runOrchestration(input, options);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
// 顶层错误边界:任何来自上下文构建/DAG 执行/图同步的未捕获异常
|
|
21
|
+
// 都收敛为结构化的 HUMAN_REVIEW_REQUIRED 结果,而不是裸抛给调用方。
|
|
22
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
23
|
+
logger_1.logger.error({ error, task: input.task }, "Orchestration failed with unhandled error");
|
|
24
|
+
return {
|
|
25
|
+
status: "HUMAN_REVIEW_REQUIRED",
|
|
26
|
+
attempts: 0,
|
|
27
|
+
feedback: `Orchestration aborted due to unexpected error: ${message}`,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function runOrchestration(input, options) {
|
|
17
32
|
logger_1.logger.info({ task: input.task }, "Orchestration task started");
|
|
18
33
|
const retryOptions = input.maxRetries !== undefined ? { maxRetries: input.maxRetries } : {};
|
|
19
34
|
const contextPackage = await maybeBuildNearLosslessContext(input, options);
|
|
@@ -37,6 +52,7 @@ async function orchestrate(input, options) {
|
|
|
37
52
|
...(workerSelection ? { workerSelection } : {}),
|
|
38
53
|
...(validatorSelection ? { validatorSelection } : {}),
|
|
39
54
|
...(promptContext ? { workerContext: promptContext, validatorContext: promptContext } : {}),
|
|
55
|
+
...(options?.executionMode ? { executionMode: options.executionMode } : {}),
|
|
40
56
|
});
|
|
41
57
|
const finalRun = appendContextFeedback(run, contextPackage, promptContextLines, options);
|
|
42
58
|
const withRoute = appendRouteFeedback(finalRun, routeDecisions, skillHints);
|
|
@@ -62,6 +78,36 @@ async function orchestrate(input, options) {
|
|
|
62
78
|
plan = (0, planner_1.planTasks)(input.task, skillHints);
|
|
63
79
|
}
|
|
64
80
|
currentPlan = plan;
|
|
81
|
+
// Bridge mode: package the planned DAG for external agent execution instead of running it
|
|
82
|
+
if (options?.executionMode === "bridge") {
|
|
83
|
+
const planProjection = plan.map((node) => ({
|
|
84
|
+
id: node.id,
|
|
85
|
+
description: node.description,
|
|
86
|
+
dependencies: node.dependencies,
|
|
87
|
+
}));
|
|
88
|
+
const contextStr = promptContext
|
|
89
|
+
? Object.entries(promptContext)
|
|
90
|
+
.map(([k, v]) => `${k}: ${typeof v === "string" ? v : JSON.stringify(v)}`)
|
|
91
|
+
.join("; ")
|
|
92
|
+
: "";
|
|
93
|
+
const bridgeRun = {
|
|
94
|
+
status: "HUMAN_REVIEW_REQUIRED",
|
|
95
|
+
attempts: 0,
|
|
96
|
+
feedback: `[DELEGATED] Planned ${plan.length} task(s) for external agent execution; plannerDraft=${shorten(plannerDraft)}`,
|
|
97
|
+
...(brainstormIdeas ? { brainstormIdeas } : {}),
|
|
98
|
+
executionDescriptor: {
|
|
99
|
+
action: "execute",
|
|
100
|
+
task: input.task,
|
|
101
|
+
context: `plan=${JSON.stringify(planProjection)}${contextStr ? `; ${contextStr}` : ""}`,
|
|
102
|
+
retryHints: [],
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
const finalRun = appendContextFeedback(bridgeRun, contextPackage, promptContextLines, options);
|
|
106
|
+
const withRoute = appendRouteFeedback(finalRun, routeDecisions, skillHints);
|
|
107
|
+
await maybeSyncSkillGraph(input.task, withRoute, options);
|
|
108
|
+
logger_1.logger.info({ status: withRoute.status, task: input.task }, "Orchestration task delegated (bridge mode)");
|
|
109
|
+
return finalizeEpisode(input.task, currentPlan, withRoute, similarEpisodes, skillHints, options);
|
|
110
|
+
}
|
|
65
111
|
const runner = async (node) => {
|
|
66
112
|
logger_1.logger.info({ nodeId: node.id, description: node.description }, "Executing task node");
|
|
67
113
|
const workerSelection = selectionIfHealthy(decisionToSelection(routeDecisions.worker), options?.providerHealth);
|
|
@@ -150,9 +196,21 @@ async function maybeBuildNearLosslessContext(input, options) {
|
|
|
150
196
|
const maxTokens = options.maxContextTokens ?? 1200;
|
|
151
197
|
const packageOptions = {
|
|
152
198
|
...(options.layerQuota ? { layerQuota: options.layerQuota } : {}),
|
|
153
|
-
...(options.embeddingProvider ? { embeddingProvider: options.embeddingProvider, enableVectorRecall: true } : {})
|
|
199
|
+
...(options.embeddingProvider ? { embeddingProvider: options.embeddingProvider, enableVectorRecall: true } : {}),
|
|
200
|
+
// Graph-structure compression is zero-cost; enable by default unless explicitly disabled.
|
|
201
|
+
enableGraphCompression: options.enableGraphCompression !== false,
|
|
154
202
|
};
|
|
155
|
-
|
|
203
|
+
// Adaptive budget: derive task complexity from triage and let the package
|
|
204
|
+
// estimator resize the token budget.
|
|
205
|
+
if (options.enableAdaptiveBudget) {
|
|
206
|
+
packageOptions.taskMode = (0, triage_1.triageTask)(input.task);
|
|
207
|
+
}
|
|
208
|
+
// RepoMap overview fallback for tight budgets (opt-in).
|
|
209
|
+
if (options.enableRepoMapFallback) {
|
|
210
|
+
packageOptions.enableRepoMapFallback = true;
|
|
211
|
+
}
|
|
212
|
+
const { buildEnhancedContextPackage } = await import("../graph/context-slicer.js");
|
|
213
|
+
const pkg = await buildEnhancedContextPackage(options.graphClient, query, input.task, maxTokens, packageOptions);
|
|
156
214
|
options.onContextPackage?.(pkg);
|
|
157
215
|
return pkg;
|
|
158
216
|
}
|