agim-cli 1.2.119 → 1.2.121
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 +93 -0
- package/dist/core/commands/plan.d.ts.map +1 -1
- package/dist/core/commands/plan.js +23 -3
- package/dist/core/commands/plan.js.map +1 -1
- package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/imhub-dispatcher.js +67 -0
- package/dist/core/llm/imhub-dispatcher.js.map +1 -1
- package/dist/core/llm/web-dispatcher.d.ts +3 -0
- package/dist/core/llm/web-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/web-dispatcher.js +182 -3
- package/dist/core/llm/web-dispatcher.js.map +1 -1
- package/dist/core/plan-mode-state.d.ts +39 -0
- package/dist/core/plan-mode-state.d.ts.map +1 -0
- package/dist/core/plan-mode-state.js +127 -0
- package/dist/core/plan-mode-state.js.map +1 -0
- package/dist/plugins/agents/native/index.d.ts +8 -3
- package/dist/plugins/agents/native/index.d.ts.map +1 -1
- package/dist/plugins/agents/native/index.js +29 -16
- package/dist/plugins/agents/native/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,99 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [1.2.121] - 2026-05-31
|
|
8
|
+
|
|
9
|
+
### Added (主流对账批 3/4:fan-out 子 agent + 搜索全家桶)
|
|
10
|
+
|
|
11
|
+
#### Item 7 — in-process call_agent native 自旋(fan-out 关键)
|
|
12
|
+
之前 `call_agent('native', ...)` 走 subprocess CLI 启动(~5s 冷启),完全没法做 fan-out。
|
|
13
|
+
本版加入 in-process fast path:
|
|
14
|
+
- 当 target=='native' → 跳过 subprocess,直接在同 JS 堆里 `nativeAgentAdapter.sendPrompt()`
|
|
15
|
+
- 共享 cwd / MCP fleet / 同一 LLM 后端,但开**全新 session id** 避免污染父对话
|
|
16
|
+
- 仍按 `IMHUB_A2A_MAX_DEPTH`(默认 1)做深度检查 + 走 callerDepth+1 入子层
|
|
17
|
+
- `IMHUB_NATIVE_CALL_AGENT_IN_PROCESS=off` 是 kill switch(强制走 subprocess 老路)
|
|
18
|
+
- 子层若再 call_agent 会被 depth 拦下,避免无限递归
|
|
19
|
+
- 完整 trace 链:parent traceId → `a2a-{call.id}` → child native loop 内每个 tool
|
|
20
|
+
|
|
21
|
+
#### Item 8 — Brave / Serper / Exa search providers
|
|
22
|
+
扩展 v1.2.118 的 SearchProvider chain。新增 3 个 provider:
|
|
23
|
+
- **Brave** (`BRAVE_API_KEY`):实际 web index,2000 req/月免费档
|
|
24
|
+
- **Serper** (`SERPER_API_KEY`):Google SERP 中继,cheap
|
|
25
|
+
- **Exa** (`EXA_API_KEY`):语义/向量搜索,适合"找类似页"
|
|
26
|
+
- 新默认链:`tavily,brave,serper,exa,duckduckgo,metaso`
|
|
27
|
+
- 缺 key 仍然静默跳过,env override `IMHUB_WEB_SEARCH_PROVIDERS` 不变
|
|
28
|
+
|
|
29
|
+
### Affected paths
|
|
30
|
+
|
|
31
|
+
- `src/core/llm/web-dispatcher.ts`:新增 `searchBrave/parseBraveResults` /
|
|
32
|
+
`searchSerper/parseSerperResults` / `searchExa/parseExaResults` + 注册到
|
|
33
|
+
`PROVIDERS`;默认 chain 更新;工具描述更新
|
|
34
|
+
- `src/core/llm/imhub-dispatcher.ts`:`isInProcessSpawnDisabled` helper +
|
|
35
|
+
call_agent 分支检测 `agentName === 'native'` → in-process fast path
|
|
36
|
+
- `test/unit/web-search-providers.test.ts`:新增 3 个 parse 测试 + 1 个默认
|
|
37
|
+
chain 顺序测试 + 1 个三 provider 同时启用测试
|
|
38
|
+
- `src/core/llm/imhub-dispatcher.test.ts`:新增 4 个 case(depth 拒绝 / A2A
|
|
39
|
+
disabled / 非 native 不走 in-process / kill switch 强制 subprocess)
|
|
40
|
+
|
|
41
|
+
### Test status
|
|
42
|
+
|
|
43
|
+
- 159/159 bun pass(新增 9:5 search + 4 self-spawn)
|
|
44
|
+
- typecheck clean
|
|
45
|
+
|
|
46
|
+
### What's next
|
|
47
|
+
|
|
48
|
+
剩余 v1.2.122+(高级特性,全是 M-L effort):
|
|
49
|
+
- semantic stuck-loop(goal-critic 判断"同一意图"再 stop)
|
|
50
|
+
- TCP-drop retry on streaming chat(mid-stream ECONNRESET)
|
|
51
|
+
- TodoWrite-style native tool(对话内 plan 跟踪)
|
|
52
|
+
- LLM-summary auto-compact(替代字节裁切)
|
|
53
|
+
|
|
54
|
+
## [1.2.120] - 2026-05-31
|
|
55
|
+
|
|
56
|
+
### Changed (PlanMode 取消重启依赖——可运行时切换)
|
|
57
|
+
|
|
58
|
+
用户反馈:"Plan模式下,退出Plan 需要重启Agim,感觉太严格了,不合适"。修正:
|
|
59
|
+
|
|
60
|
+
- 新增 `src/core/plan-mode-state.ts`:sqlite 表 `native_plan_mode(thread_key PK,
|
|
61
|
+
enabled, updated_at)`,per-thread 持久化覆盖;DB 默认 `~/.agim/plan-mode.db`,
|
|
62
|
+
env `IMHUB_PLAN_MODE_DB` 可指定路径
|
|
63
|
+
- 三态优先级 `effectivePlanModeOn(threadKey)`:
|
|
64
|
+
1. per-thread = **true** → on(即使 env=off)
|
|
65
|
+
2. per-thread = **false** → off(即使 env=on——一个线程可单独 opt-out)
|
|
66
|
+
3. per-thread = null(未设置)→ 回退到 env `IMHUB_NATIVE_PLAN_MODE`
|
|
67
|
+
- `/plan on|off` 现在**同时**写 sessionManager.planMode(claude-code / codex /
|
|
68
|
+
opencode 用)和 plan-mode-state.db(native 用),native 加入 PLAN_CAPABLE_AGENTS
|
|
69
|
+
集合,提示文案里移除"native 不读 planMode"的警告
|
|
70
|
+
- `resolvePolicy(threadKey?)` / `buildSystemPrompt(..., threadKey?)` /
|
|
71
|
+
`isPlanModeOn(threadKey?)` 三个 native 函数加 threadKey 参数;sendPrompt
|
|
72
|
+
内用 `threadKey(platform, channelId, threadId)` 算出来传下去
|
|
73
|
+
- 现在切换 PlanMode **不需要重启**——`/plan off` 下一个 turn 就生效
|
|
74
|
+
|
|
75
|
+
### Affected paths
|
|
76
|
+
|
|
77
|
+
- `src/core/plan-mode-state.ts`(新 ~130 行)
|
|
78
|
+
- `src/core/commands/plan.ts`:加 native 到 PLAN_CAPABLE_AGENTS、on/off 分支
|
|
79
|
+
调 `setPlanModeForThread` / `clearPlanModeForThread`
|
|
80
|
+
- `src/plugins/agents/native/index.ts`:`resolvePolicy` / `buildSystemPrompt` /
|
|
81
|
+
`isPlanModeOn` 改签名;sendPrompt 计算并传入 planThreadKey
|
|
82
|
+
- `test/unit/plan-mode-state.test.ts`(新,4 个 case:env 解析 / no-threadKey
|
|
83
|
+
env-only / 落空回退到 env)。SQLite CRUD + per-thread precedence 在生产
|
|
84
|
+
(node) 跑,bun 测试因为 better-sqlite3 兼容降级为 no-op,所以这一层在
|
|
85
|
+
production 验证不在 bun 单测里 assert
|
|
86
|
+
|
|
87
|
+
### Test status
|
|
88
|
+
|
|
89
|
+
- 137/137 bun pass(新增 4 个 plan-mode-state;其余 9 个 plan.test.ts +
|
|
90
|
+
14 个 plan-mode.test.ts + 之前批次的 110+ 个都依旧绿)
|
|
91
|
+
- typecheck clean
|
|
92
|
+
|
|
93
|
+
### What's next
|
|
94
|
+
|
|
95
|
+
剩下 v1.2.121+:
|
|
96
|
+
- in-process call_agent self-spawn(fan-out 关键)
|
|
97
|
+
- Brave/Serper/Exa search adapter
|
|
98
|
+
- 语义 stuck-loop / TCP 重试 / TodoWrite / LLM 摘要 compact
|
|
99
|
+
|
|
7
100
|
## [1.2.119] - 2026-05-31
|
|
8
101
|
|
|
9
102
|
### Added (native agent stability + 安全栏 — 主流对账批 2/4)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/core/commands/plan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/core/commands/plan.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAqBhD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAoExF"}
|
|
@@ -5,24 +5,33 @@
|
|
|
5
5
|
// • opencode → routes through the built-in `plan` agent
|
|
6
6
|
// • codex → spawns with `-s read-only` sandbox (OS-level write fence;
|
|
7
7
|
// not a true approval gate, see codex/index.ts header)
|
|
8
|
+
// • native (v1.2.120) → resolvePolicy() hard-denies native_write_file +
|
|
9
|
+
// native_exec; system prompt gets a PlanMode banner
|
|
8
10
|
// • other agents → ignore the flag (no-op)
|
|
9
11
|
//
|
|
10
12
|
// Persisted on session.planMode so it survives across turns and across the
|
|
11
13
|
// /oc ↔ /cc agent switch (intent travels with the conversation, not with
|
|
12
|
-
// the chosen CLI).
|
|
14
|
+
// the chosen CLI). v1.2.120 also writes to plan-mode-state.db so the native
|
|
15
|
+
// adapter can apply the override even when the conversation hasn't yet
|
|
16
|
+
// rebuilt its in-memory session row (e.g. after a process restart).
|
|
13
17
|
//
|
|
14
18
|
// Emergency kill switch: `IMHUB_DISABLE_PLAN_MODE=1` makes /plan return a
|
|
15
19
|
// "disabled" message without touching session state. Useful for ops to roll
|
|
16
20
|
// back the feature without redeploying.
|
|
17
21
|
import { sessionManager } from '../session.js';
|
|
22
|
+
import { threadKey as makeThreadKey } from '../approval-bus.js';
|
|
23
|
+
import { setPlanModeForThread, clearPlanModeForThread, } from '../plan-mode-state.js';
|
|
18
24
|
const ON_TOKENS = new Set(['on', 'enter', 'start', 'enable', '开', '开启']);
|
|
19
25
|
const OFF_TOKENS = new Set(['off', 'exit', 'stop', 'disable', '关', '关闭']);
|
|
20
26
|
/** Agents that genuinely honor session.planMode at adapter level.
|
|
21
27
|
* - claude-code: --permission-mode plan
|
|
22
28
|
* - opencode: --agent plan
|
|
23
29
|
* - codex: -s read-only sandbox (sandbox-level "safety floor" — see
|
|
24
|
-
* plugins/agents/codex/index.ts header for the caveat)
|
|
25
|
-
|
|
30
|
+
* plugins/agents/codex/index.ts header for the caveat)
|
|
31
|
+
* - native (v1.2.120): plan-mode-state.db + resolvePolicy() denies
|
|
32
|
+
* native_write_file + native_exec; system prompt gets
|
|
33
|
+
* a PlanMode banner */
|
|
34
|
+
const PLAN_CAPABLE_AGENTS = new Set(['claude-code', 'opencode', 'codex', 'native']);
|
|
26
35
|
export async function handlePlanCommand(args, ctx) {
|
|
27
36
|
if (process.env.IMHUB_DISABLE_PLAN_MODE === '1') {
|
|
28
37
|
return '🚫 Plan 模式已通过 IMHUB_DISABLE_PLAN_MODE 全局禁用,请联系运维。';
|
|
@@ -56,16 +65,27 @@ plan 模式下文件不会被修改,适合先讨论方案再动手。${agentNo
|
|
|
56
65
|
const capabilityNote = PLAN_CAPABLE_AGENTS.has(activeAgent)
|
|
57
66
|
? ''
|
|
58
67
|
: `\n\n⚠️ 当前 agent **${activeAgent}** 不读 planMode 标志位(claude-code / opencode 才支持)。标志会保存,但要切到上述 agent 才会生效。`;
|
|
68
|
+
// v1.2.120 — compose the composite key once. native reads from the
|
|
69
|
+
// plan-mode-state.db keyed by this exact composite (matches
|
|
70
|
+
// sendPrompt's makeThreadKey call).
|
|
71
|
+
const tkey = makeThreadKey(ctx.platform, ctx.channelId, ctx.threadId);
|
|
59
72
|
if (ON_TOKENS.has(token)) {
|
|
60
73
|
if (existing?.planMode)
|
|
61
74
|
return `✅ Plan 模式已开启(无变化)。${capabilityNote}`;
|
|
62
75
|
await sessionManager.patchSession(ctx.platform, ctx.channelId, ctx.threadId, { planMode: true });
|
|
76
|
+
// v1.2.120 — also write to plan-mode-state so the native agent
|
|
77
|
+
// picks it up (session.planMode is read by CLI adapters but
|
|
78
|
+
// native's resolvePolicy() reads plan-mode-state.db).
|
|
79
|
+
setPlanModeForThread(tkey, true);
|
|
63
80
|
return `✅ Plan 模式已开启 — 接下来 agent 只规划不动手。/plan off 恢复。${capabilityNote}`;
|
|
64
81
|
}
|
|
65
82
|
if (OFF_TOKENS.has(token)) {
|
|
66
83
|
if (!existing?.planMode)
|
|
67
84
|
return 'ℹ️ Plan 模式本来就是关闭状态。';
|
|
68
85
|
await sessionManager.patchSession(ctx.platform, ctx.channelId, ctx.threadId, { planMode: false });
|
|
86
|
+
// v1.2.120 — drop the per-thread row so the env default applies
|
|
87
|
+
// again (don't write `false`; that would override env=on too).
|
|
88
|
+
clearPlanModeForThread(tkey);
|
|
69
89
|
return '✅ Plan 模式已关闭 — 恢复正常执行模式。';
|
|
70
90
|
}
|
|
71
91
|
return `⚠️ 无效参数: \`${token}\`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/core/commands/plan.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,4EAA4E;AAC5E,sEAAsE;AACtE,8DAA8D;AAC9D,+EAA+E;AAC/E,2EAA2E;AAC3E,6CAA6C;AAC7C,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/core/commands/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imhub-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/imhub-dispatcher.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,sBAAsB,CAAA;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"imhub-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/imhub-dispatcher.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,sBAAsB,CAAA;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AA4BjD;;iBAEiB;AACjB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAA;IACnB,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,UAAU,CAAA;IAC1B,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AA4BD;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,EAAE,CA8OzC;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,GAAG,cAAc,CAwS5E"}
|
|
@@ -41,6 +41,14 @@ import { handleAskOp } from '../ask-user-rpc.js';
|
|
|
41
41
|
import { callAgentByName } from '../a2a.js';
|
|
42
42
|
import { createReminder, listReminders, cancelReminder, snoozeReminder, parseDuration, ReminderError, } from '../reminders.js';
|
|
43
43
|
const log = rootLogger.child({ component: 'imhub-dispatcher' });
|
|
44
|
+
/** v1.2.121 — kill switch for in-process native self-spawn. When set to
|
|
45
|
+
* 'off' (or '0' / 'no'), call_agent('native', …) falls back to the
|
|
46
|
+
* subprocess CLI boot path. Default is ON (in-process) because
|
|
47
|
+
* fan-out latency is the main reason this feature exists. */
|
|
48
|
+
function isInProcessSpawnDisabled() {
|
|
49
|
+
const raw = (process.env.IMHUB_NATIVE_CALL_AGENT_IN_PROCESS ?? '').toLowerCase().trim();
|
|
50
|
+
return raw === 'off' || raw === '0' || raw === 'no' || raw === 'false';
|
|
51
|
+
}
|
|
44
52
|
function safeJson(v) {
|
|
45
53
|
try {
|
|
46
54
|
return JSON.stringify(v, null, 2);
|
|
@@ -409,6 +417,65 @@ export function buildImhubDispatcher(ctx) {
|
|
|
409
417
|
cap: callAgentMaxPerTurn,
|
|
410
418
|
threadId: ctx.threadId,
|
|
411
419
|
}, `delegating to ${agentName} (attempt ${callAgentCount}/${callAgentMaxPerTurn || '∞'})`);
|
|
420
|
+
// v1.2.121 — in-process self-spawn fast path.
|
|
421
|
+
//
|
|
422
|
+
// When the target is `native` (i.e. caller wants to fan-out
|
|
423
|
+
// research using more native turns), skip the subprocess
|
|
424
|
+
// boot and run another native agent loop in the SAME JS
|
|
425
|
+
// heap. Saves the ~5s claude-code-style boot per fan-out;
|
|
426
|
+
// matches the pattern Claude Code uses for in-process Task
|
|
427
|
+
// agents.
|
|
428
|
+
//
|
|
429
|
+
// Disabled via IMHUB_NATIVE_CALL_AGENT_IN_PROCESS=off
|
|
430
|
+
// (falls back to subprocess via callAgentByName).
|
|
431
|
+
// Depth + A2A_ENABLED checks still apply.
|
|
432
|
+
if (agentName === 'native' && !isInProcessSpawnDisabled()) {
|
|
433
|
+
const { getA2AMaxDepth, isA2AEnabled } = await import('../a2a.js');
|
|
434
|
+
if (!isA2AEnabled()) {
|
|
435
|
+
return err('call_agent refused: A2A disabled (IMHUB_A2A_ENABLED=0)');
|
|
436
|
+
}
|
|
437
|
+
const callerDepth = ctx.callerDepth ?? 0;
|
|
438
|
+
const nextDepth = callerDepth + 1;
|
|
439
|
+
const maxDepth = getA2AMaxDepth();
|
|
440
|
+
if (nextDepth > maxDepth) {
|
|
441
|
+
log.warn({
|
|
442
|
+
event: 'native.call_agent.in_process_depth_exceeded',
|
|
443
|
+
callerDepth, nextDepth, maxDepth, threadId: ctx.threadId,
|
|
444
|
+
}, `in-process self-spawn refused: depth ${nextDepth} > max ${maxDepth}`);
|
|
445
|
+
return err(`call_agent refused: depth ${nextDepth} > max ${maxDepth}`);
|
|
446
|
+
}
|
|
447
|
+
log.info({
|
|
448
|
+
event: 'native.call_agent.in_process_spawn',
|
|
449
|
+
callerDepth, nextDepth, threadId: ctx.threadId, subTurnCallId: call.id,
|
|
450
|
+
}, `in-process native self-spawn (depth ${nextDepth}); skipping subprocess boot`);
|
|
451
|
+
try {
|
|
452
|
+
// Dynamic import to avoid the circular dep — native
|
|
453
|
+
// index.ts depends on this dispatcher module.
|
|
454
|
+
const native = await import('../../plugins/agents/native/index.js');
|
|
455
|
+
// Fresh sub-session id so the child doesn't pollute
|
|
456
|
+
// the parent's session history but shares the thread
|
|
457
|
+
// context (platform/channelId/threadId/userId) so
|
|
458
|
+
// tools resolve the same workspace, MCP fleet, etc.
|
|
459
|
+
const subSessionId = `${ctx.threadId}-spawn-${call.id}`;
|
|
460
|
+
const parts = [];
|
|
461
|
+
for await (const chunk of native.nativeAgentAdapter.sendPrompt(subSessionId, prompt, [], {
|
|
462
|
+
platform: ctx.platform,
|
|
463
|
+
channelId: ctx.channelId,
|
|
464
|
+
threadId: ctx.threadId,
|
|
465
|
+
userId: ctx.userId,
|
|
466
|
+
callDepth: nextDepth,
|
|
467
|
+
signal,
|
|
468
|
+
})) {
|
|
469
|
+
parts.push(chunk);
|
|
470
|
+
}
|
|
471
|
+
return ok(parts.join(''));
|
|
472
|
+
}
|
|
473
|
+
catch (e) {
|
|
474
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
475
|
+
log.warn({ event: 'native.call_agent.in_process_failed', err: msg }, 'in-process self-spawn threw; surfacing error to caller');
|
|
476
|
+
return err(`call_agent (in-process native) failed: ${msg}`);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
412
479
|
// Construct a minimal RouteContext from the run context so A2A
|
|
413
480
|
// can audit / route. Lifted to a partial cast because most of
|
|
414
481
|
// RouteContext's optional fields (intent, agentSessionId, …)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imhub-dispatcher.js","sourceRoot":"","sources":["../../../src/core/llm/imhub-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"imhub-dispatcher.js","sourceRoot":"","sources":["../../../src/core/llm/imhub-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,9 @@ interface SearchProvider {
|
|
|
32
32
|
* common case is "key not set, skip", not a misconfig.
|
|
33
33
|
*/
|
|
34
34
|
export declare function resolveSearchProviderChain(): SearchProvider[];
|
|
35
|
+
export declare function parseBraveResults(data: unknown, max: number): SearchHit[];
|
|
36
|
+
export declare function parseSerperResults(data: unknown, max: number): SearchHit[];
|
|
37
|
+
export declare function parseExaResults(data: unknown, max: number): SearchHit[];
|
|
35
38
|
/** Parse Tavily's `{results: [{title, url, content, score}]}` shape.
|
|
36
39
|
* Tolerant of missing fields: a hit needs title + url to be usable. */
|
|
37
40
|
export declare function parseTavilyResults(data: unknown, max: number): SearchHit[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/web-dispatcher.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"web-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/web-dispatcher.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAmB5E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,WAAW,IAAI,OAAO,EAAE,CAgEvC;AAED,wBAAgB,kBAAkB,IAAI,cAAc,CAcnD;AAgHD,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;GAUG;AACH,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,IAAI,OAAO,CAAA;IACpB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;CAC5E;AA0CD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,IAAI,cAAc,EAAE,CAkB7D;AAqGD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAgBzE;AA4BD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAgB1E;AA6BD,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAkBvE;AAED;wEACwE;AACxE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAgB1E;AAiBD;;;;sBAIsB;AACtB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAgBnE;AA6CD;;4BAE4B;AAC5B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAwB1E;AAID,UAAU,YAAY;IAAG,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAEvD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAyCxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAuC1F;AAsED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAgCxD;AAKD,UAAU,KAAK;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAEjD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,EAAE,CAiBnE"}
|
|
@@ -27,8 +27,13 @@ const DEFAULT_SEARCH_RESULTS = 8;
|
|
|
27
27
|
const DDG_SEARCH_URL = 'https://duckduckgo.com/html/?q=';
|
|
28
28
|
const METASO_API_BASE = 'https://metaso.cn/api/v1'; // adapt if path differs
|
|
29
29
|
const TAVILY_API_URL = 'https://api.tavily.com/search';
|
|
30
|
+
const BRAVE_API_URL = 'https://api.search.brave.com/res/v1/web/search';
|
|
31
|
+
const SERPER_API_URL = 'https://google.serper.dev/search';
|
|
32
|
+
const EXA_API_URL = 'https://api.exa.ai/search';
|
|
30
33
|
const JINA_READER_BASE = 'https://r.jina.ai/';
|
|
31
|
-
|
|
34
|
+
// v1.2.121 — chain now spans 6 providers. Order: agent-tuned (Tavily/Exa)
|
|
35
|
+
// → fast-and-cheap (Brave/Serper) → free fallbacks (DDG/Metaso).
|
|
36
|
+
const DEFAULT_PROVIDER_ORDER = 'tavily,brave,serper,exa,duckduckgo,metaso';
|
|
32
37
|
const WEB_TOOL_NAMES = ['native_web_fetch', 'native_web_search'];
|
|
33
38
|
export function isWebToolName(name) {
|
|
34
39
|
return WEB_TOOL_NAMES.includes(name);
|
|
@@ -78,8 +83,10 @@ export function getWebTools() {
|
|
|
78
83
|
'always start with native_web_search, then optionally native_web_fetch on a result. ' +
|
|
79
84
|
'\n\n' +
|
|
80
85
|
'Backend chain configurable via IMHUB_WEB_SEARCH_PROVIDERS '
|
|
81
|
-
+ '(default "tavily,duckduckgo,metaso").
|
|
82
|
-
+ '
|
|
86
|
+
+ '(default "tavily,brave,serper,exa,duckduckgo,metaso"). Key env vars: '
|
|
87
|
+
+ 'TAVILY_API_KEY (agent-tuned, recommended), BRAVE_API_KEY (cheap, free 2K/mo), '
|
|
88
|
+
+ 'SERPER_API_KEY (Google SERP relay), EXA_API_KEY (semantic), '
|
|
89
|
+
+ 'METASO_API_KEY (中文 AI 搜索). DuckDuckGo needs none. Providers '
|
|
83
90
|
+ 'whose key is missing are skipped silently — set the env vars '
|
|
84
91
|
+ 'you want and the chain picks the first that returns ≥1 hit.',
|
|
85
92
|
parameters: {
|
|
@@ -221,6 +228,28 @@ const PROVIDERS = {
|
|
|
221
228
|
available: () => !!process.env.TAVILY_API_KEY,
|
|
222
229
|
search: searchTavily,
|
|
223
230
|
},
|
|
231
|
+
// v1.2.121 — Brave Search: cheapest "real" web index (free 2K/mo);
|
|
232
|
+
// privacy-positioned. Returns Google-quality results without scrape.
|
|
233
|
+
brave: {
|
|
234
|
+
name: 'brave',
|
|
235
|
+
available: () => !!process.env.BRAVE_API_KEY,
|
|
236
|
+
search: searchBrave,
|
|
237
|
+
},
|
|
238
|
+
// v1.2.121 — Serper: Google SERP via 3rd-party API. Fast + cheap;
|
|
239
|
+
// most useful when you need "what would Google show" results.
|
|
240
|
+
serper: {
|
|
241
|
+
name: 'serper',
|
|
242
|
+
available: () => !!process.env.SERPER_API_KEY,
|
|
243
|
+
search: searchSerper,
|
|
244
|
+
},
|
|
245
|
+
// v1.2.121 — Exa: semantic (vector) search over a curated index.
|
|
246
|
+
// Good for "find similar pages to <description>" agent queries
|
|
247
|
+
// where keyword search would miss intent.
|
|
248
|
+
exa: {
|
|
249
|
+
name: 'exa',
|
|
250
|
+
available: () => !!process.env.EXA_API_KEY,
|
|
251
|
+
search: searchExa,
|
|
252
|
+
},
|
|
224
253
|
duckduckgo: {
|
|
225
254
|
name: 'duckduckgo',
|
|
226
255
|
available: () => true, // no key required
|
|
@@ -325,6 +354,156 @@ async function searchTavily(query, n, signal) {
|
|
|
325
354
|
const data = await res.json();
|
|
326
355
|
return parseTavilyResults(data, n);
|
|
327
356
|
}
|
|
357
|
+
/**
|
|
358
|
+
* v1.2.121 — Brave Search (https://search.brave.com/help/api).
|
|
359
|
+
* Headers carry the X-Subscription-Token API key; query is a `q` query
|
|
360
|
+
* param. Response shape: `{web: {results: [{title, url, description}]}}`.
|
|
361
|
+
* 60req/min on the free tier — we don't pace because the agent loop is
|
|
362
|
+
* iter-bounded and a turn rarely calls search more than 5×.
|
|
363
|
+
*/
|
|
364
|
+
async function searchBrave(query, n, signal) {
|
|
365
|
+
const key = process.env.BRAVE_API_KEY;
|
|
366
|
+
if (!key)
|
|
367
|
+
throw new Error('BRAVE_API_KEY not set');
|
|
368
|
+
const url = `${BRAVE_API_URL}?q=${encodeURIComponent(query)}&count=${n}`;
|
|
369
|
+
const res = await fetch(url, {
|
|
370
|
+
method: 'GET',
|
|
371
|
+
signal,
|
|
372
|
+
headers: {
|
|
373
|
+
'Accept': 'application/json',
|
|
374
|
+
'Accept-Encoding': 'gzip',
|
|
375
|
+
'X-Subscription-Token': key,
|
|
376
|
+
'User-Agent': 'agim-native',
|
|
377
|
+
},
|
|
378
|
+
});
|
|
379
|
+
if (!res.ok) {
|
|
380
|
+
const errBody = await res.text().catch(() => '');
|
|
381
|
+
throw new Error(`brave http ${res.status}: ${errBody.slice(0, 200)}`);
|
|
382
|
+
}
|
|
383
|
+
const data = await res.json();
|
|
384
|
+
return parseBraveResults(data, n);
|
|
385
|
+
}
|
|
386
|
+
export function parseBraveResults(data, max) {
|
|
387
|
+
if (!data || typeof data !== 'object')
|
|
388
|
+
return [];
|
|
389
|
+
const d = data;
|
|
390
|
+
const results = d.web?.results;
|
|
391
|
+
if (!Array.isArray(results))
|
|
392
|
+
return [];
|
|
393
|
+
const out = [];
|
|
394
|
+
for (const item of results) {
|
|
395
|
+
if (out.length >= max)
|
|
396
|
+
break;
|
|
397
|
+
if (!item || typeof item !== 'object')
|
|
398
|
+
continue;
|
|
399
|
+
const it = item;
|
|
400
|
+
const title = typeof it.title === 'string' ? it.title : '';
|
|
401
|
+
const url = typeof it.url === 'string' ? it.url : '';
|
|
402
|
+
const snippet = typeof it.description === 'string' ? it.description : '';
|
|
403
|
+
if (title && url)
|
|
404
|
+
out.push({ title, url, snippet });
|
|
405
|
+
}
|
|
406
|
+
return out;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* v1.2.121 — Serper (https://serper.dev). POST with API key in header,
|
|
410
|
+
* returns Google's organic results shape `{organic: [{title, link,
|
|
411
|
+
* snippet}]}`. Cheaper than direct Google API; same surface.
|
|
412
|
+
*/
|
|
413
|
+
async function searchSerper(query, n, signal) {
|
|
414
|
+
const key = process.env.SERPER_API_KEY;
|
|
415
|
+
if (!key)
|
|
416
|
+
throw new Error('SERPER_API_KEY not set');
|
|
417
|
+
const res = await fetch(SERPER_API_URL, {
|
|
418
|
+
method: 'POST',
|
|
419
|
+
signal,
|
|
420
|
+
headers: {
|
|
421
|
+
'Content-Type': 'application/json',
|
|
422
|
+
'X-API-KEY': key,
|
|
423
|
+
'User-Agent': 'agim-native',
|
|
424
|
+
},
|
|
425
|
+
body: JSON.stringify({ q: query, num: n }),
|
|
426
|
+
});
|
|
427
|
+
if (!res.ok) {
|
|
428
|
+
const errBody = await res.text().catch(() => '');
|
|
429
|
+
throw new Error(`serper http ${res.status}: ${errBody.slice(0, 200)}`);
|
|
430
|
+
}
|
|
431
|
+
const data = await res.json();
|
|
432
|
+
return parseSerperResults(data, n);
|
|
433
|
+
}
|
|
434
|
+
export function parseSerperResults(data, max) {
|
|
435
|
+
if (!data || typeof data !== 'object')
|
|
436
|
+
return [];
|
|
437
|
+
const d = data;
|
|
438
|
+
if (!Array.isArray(d.organic))
|
|
439
|
+
return [];
|
|
440
|
+
const out = [];
|
|
441
|
+
for (const item of d.organic) {
|
|
442
|
+
if (out.length >= max)
|
|
443
|
+
break;
|
|
444
|
+
if (!item || typeof item !== 'object')
|
|
445
|
+
continue;
|
|
446
|
+
const it = item;
|
|
447
|
+
const title = typeof it.title === 'string' ? it.title : '';
|
|
448
|
+
// Note: Serper uses `link`, not `url`.
|
|
449
|
+
const url = typeof it.link === 'string' ? it.link : '';
|
|
450
|
+
const snippet = typeof it.snippet === 'string' ? it.snippet : '';
|
|
451
|
+
if (title && url)
|
|
452
|
+
out.push({ title, url, snippet });
|
|
453
|
+
}
|
|
454
|
+
return out;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* v1.2.121 — Exa (https://exa.ai). Semantic / neural search over a
|
|
458
|
+
* curated index. Returns `{results: [{title, url, text, score}]}`. We
|
|
459
|
+
* request `numResults` and skip `contents` (too verbose for SearchHit
|
|
460
|
+
* shape; agent can web_fetch the URL it cares about).
|
|
461
|
+
*/
|
|
462
|
+
async function searchExa(query, n, signal) {
|
|
463
|
+
const key = process.env.EXA_API_KEY;
|
|
464
|
+
if (!key)
|
|
465
|
+
throw new Error('EXA_API_KEY not set');
|
|
466
|
+
const res = await fetch(EXA_API_URL, {
|
|
467
|
+
method: 'POST',
|
|
468
|
+
signal,
|
|
469
|
+
headers: {
|
|
470
|
+
'Content-Type': 'application/json',
|
|
471
|
+
'x-api-key': key,
|
|
472
|
+
'User-Agent': 'agim-native',
|
|
473
|
+
},
|
|
474
|
+
body: JSON.stringify({ query, numResults: n, useAutoprompt: true }),
|
|
475
|
+
});
|
|
476
|
+
if (!res.ok) {
|
|
477
|
+
const errBody = await res.text().catch(() => '');
|
|
478
|
+
throw new Error(`exa http ${res.status}: ${errBody.slice(0, 200)}`);
|
|
479
|
+
}
|
|
480
|
+
const data = await res.json();
|
|
481
|
+
return parseExaResults(data, n);
|
|
482
|
+
}
|
|
483
|
+
export function parseExaResults(data, max) {
|
|
484
|
+
if (!data || typeof data !== 'object')
|
|
485
|
+
return [];
|
|
486
|
+
const d = data;
|
|
487
|
+
if (!Array.isArray(d.results))
|
|
488
|
+
return [];
|
|
489
|
+
const out = [];
|
|
490
|
+
for (const item of d.results) {
|
|
491
|
+
if (out.length >= max)
|
|
492
|
+
break;
|
|
493
|
+
if (!item || typeof item !== 'object')
|
|
494
|
+
continue;
|
|
495
|
+
const it = item;
|
|
496
|
+
const title = typeof it.title === 'string' ? it.title : '';
|
|
497
|
+
const url = typeof it.url === 'string' ? it.url : '';
|
|
498
|
+
// Exa returns `text` (snippet) when requested; usually present but
|
|
499
|
+
// not guaranteed if useAutoprompt rephrased and content was sparse.
|
|
500
|
+
const snippet = typeof it.text === 'string' ? it.text
|
|
501
|
+
: typeof it.summary === 'string' ? it.summary : '';
|
|
502
|
+
if (title && url)
|
|
503
|
+
out.push({ title, url, snippet });
|
|
504
|
+
}
|
|
505
|
+
return out;
|
|
506
|
+
}
|
|
328
507
|
/** Parse Tavily's `{results: [{title, url, content, score}]}` shape.
|
|
329
508
|
* Tolerant of missing fields: a hit needs title + url to be usable. */
|
|
330
509
|
export function parseTavilyResults(data, max) {
|