dsh-web-search-pro 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +75 -6
  3. package/assets/skills/dsh-web-search-pro/SKILL.md +1 -1
  4. package/assets/skills/dsh-web-search-pro/references/sources.md +11 -2
  5. package/catalog/sources.v1.json +20 -12
  6. package/lib/actions/search.js +5 -4
  7. package/lib/actions/search.js.map +1 -1
  8. package/lib/actions/sources.js +42 -25
  9. package/lib/actions/sources.js.map +1 -1
  10. package/lib/cli/builtin-specs.js +306 -0
  11. package/lib/cli/builtin-specs.js.map +1 -0
  12. package/lib/cli/chain.js +192 -0
  13. package/lib/cli/chain.js.map +1 -0
  14. package/lib/cli/chains-spec.js +98 -0
  15. package/lib/cli/chains-spec.js.map +1 -0
  16. package/lib/cli/engine.js +83 -0
  17. package/lib/cli/engine.js.map +1 -0
  18. package/lib/cli/opencli.js +105 -0
  19. package/lib/cli/opencli.js.map +1 -0
  20. package/lib/cli/probe.js +128 -0
  21. package/lib/cli/probe.js.map +1 -0
  22. package/lib/cli/runner.js +374 -0
  23. package/lib/cli/runner.js.map +1 -0
  24. package/lib/cli/spec.js +416 -0
  25. package/lib/cli/spec.js.map +1 -0
  26. package/lib/client/SettingsCard.js +1 -1
  27. package/lib/client/SettingsCard.js.map +1 -1
  28. package/lib/client/form-specs.js +2 -0
  29. package/lib/client/form-specs.js.map +1 -1
  30. package/lib/client/form.js +14 -3
  31. package/lib/client/form.js.map +1 -1
  32. package/lib/client/locales.js +4 -0
  33. package/lib/client/locales.js.map +1 -1
  34. package/lib/client/validators.js +15 -0
  35. package/lib/client/validators.js.map +1 -1
  36. package/lib/client.js +1425 -3
  37. package/lib/client.js.map +1 -1
  38. package/lib/config.js +4 -0
  39. package/lib/config.js.map +1 -1
  40. package/lib/deps.js +109 -102
  41. package/lib/deps.js.map +1 -1
  42. package/lib/engine-error.js +19 -0
  43. package/lib/engine-error.js.map +1 -0
  44. package/lib/engines.js +31 -114
  45. package/lib/engines.js.map +1 -1
  46. package/lib/pipeline/candidates.js.map +1 -1
  47. package/lib/pipeline/run.js +4 -2
  48. package/lib/pipeline/run.js.map +1 -1
  49. package/lib/providers/builtin.js +10 -14
  50. package/lib/providers/builtin.js.map +1 -1
  51. package/lib/providers/platforms.js +114 -55
  52. package/lib/providers/platforms.js.map +1 -1
  53. package/lib/providers/registry.js.map +1 -1
  54. package/lib/router.js +63 -6
  55. package/lib/router.js.map +1 -1
  56. package/lib/types/cli/builtin-specs.d.ts +30 -0
  57. package/lib/types/cli/chain.d.ts +83 -0
  58. package/lib/types/cli/chains-spec.d.ts +39 -0
  59. package/lib/types/cli/engine.d.ts +43 -0
  60. package/lib/types/cli/opencli.d.ts +38 -0
  61. package/lib/types/cli/probe.d.ts +53 -0
  62. package/lib/types/cli/runner.d.ts +87 -0
  63. package/lib/types/cli/spec.d.ts +176 -0
  64. package/lib/types/client/form-specs.d.ts +1 -1
  65. package/lib/types/client/locales.d.ts +4 -0
  66. package/lib/types/client/validators.d.ts +6 -0
  67. package/lib/types/config.d.ts +11 -0
  68. package/lib/types/deps.d.ts +25 -23
  69. package/lib/types/engine-error.d.ts +12 -0
  70. package/lib/types/engines.d.ts +16 -9
  71. package/lib/types/index.d.ts +4 -0
  72. package/lib/types/pipeline/candidates.d.ts +2 -0
  73. package/lib/types/pipeline/run.d.ts +2 -1
  74. package/lib/types/providers/platforms.d.ts +15 -3
  75. package/lib/types/providers/registry.d.ts +3 -0
  76. package/lib/types/router.d.ts +13 -0
  77. package/lib/types/util.d.ts +6 -1
  78. package/lib/util.js +7 -3
  79. package/lib/util.js.map +1 -1
  80. package/package.json +2 -2
@@ -1,16 +1,18 @@
1
1
  /**
2
2
  * Platform search backends as registry providers (dev-plan M8b): one provider per site or community, with the same
3
3
  * descriptor + adapter shape as the web engines, so a platform is planned, probed, cooled down, singleflighted,
4
- * persisted and reported exactly like any other source. A platform with several backends (twitter: OpenCLI, then
5
- * twitter-cli) is ONE provider with an internal ordered chain. User `customPlatforms` become providers too
4
+ * persisted and reported exactly like any other source. A platform with several backends (twitter: twitter-cli, standalone
5
+ * OpenCLI, dsh-browser OpenCLI) is ONE provider with an internal ordered chain, resolved by src/cli/chain.ts (dev-plan M12). User `customPlatforms` become providers too
6
6
  * ({@link customPlatformAdapter}); the router registers and unregisters them as the settings change.
7
7
  * The legacy platform ids that already were web providers (github, bilibili, v2ex, youtube, arxiv, pubmed) are
8
8
  * declared in builtin.ts and carry `kind: 'platform'` as well.
9
9
  * @module web-search-pro/providers/platforms
10
10
  */
11
11
  import crypto from 'node:crypto';
12
- import { EngineError, agentReachEngine, customPlatformEngine, githubCodeEngine, githubIssuesEngine, opencliEngine, playwrightPlatformEngine, rssEngine, } from "../engines.js";
12
+ import { EngineError, customPlatformEngine, rssEngine, } from "../engines.js";
13
13
  import { browserGap } from "../browser-access.js";
14
+ import { chainReport, resolveChain } from "../cli/chain.js";
15
+ import { validateCliAdapterSpec } from "../cli/spec.js";
14
16
  import { descriptor } from "./descriptor.js";
15
17
  /** Chain `engines` into one provider: the first available leg that answers wins; empty and failing legs fall through in order. */
16
18
  export function chainEngine(id, label, chain) {
@@ -21,11 +23,15 @@ export function chainEngine(id, label, chain) {
21
23
  const errors = [];
22
24
  const notes = [];
23
25
  for (const engine of chain) {
24
- if (!engine.available())
26
+ if (!engine.available()) {
27
+ notes.push(engine.id + ': unavailable');
25
28
  continue;
29
+ }
26
30
  try {
27
31
  const outcome = await engine.search(query, count, signal, options);
28
- return { ...outcome, via: outcome.via ?? engine.id };
32
+ // The legs that were passed over are named with their reasons, so a fall-through is never silent.
33
+ const passed = notes.length ? ['skipped backends: ' + notes.join('; ')] : [];
34
+ return { ...outcome, via: outcome.via ?? engine.id, backend: outcome.backend ?? engine.backend ?? engine.id, ...passed.length || outcome.notes?.length ? { notes: [...passed, ...outcome.notes ?? []] } : {} };
29
35
  }
30
36
  catch (error) {
31
37
  if (signal?.aborted)
@@ -42,7 +48,7 @@ export function chainEngine(id, label, chain) {
42
48
  if (errors.every(error => code(error) === 'ENGINE_EMPTY'))
43
49
  throw new EngineError(notes.join('; '), 'ENGINE_EMPTY', false);
44
50
  throw new EngineError(notes.join('; '), 'ENGINE_ERROR', errors.some(error => error?.retryable !== false));
45
- },
51
+ }
46
52
  };
47
53
  }
48
54
  /** The platform adapter: local probe = the engine's own cheap `available()` plus the dimensions and the reason `dims` knows. */
@@ -58,78 +64,87 @@ function platform(d, create, dims = () => ({})) {
58
64
  },
59
65
  };
60
66
  }
61
- /** Dimensions of a platform that runs through the optional dsh-browser service (`method`); the reason names what is missing. */
62
- function browserDims(id, method, extraGap) {
63
- return (env, available) => {
64
- const gap = browserGap(env.deps.browser, method, 'platform ' + id);
65
- const bound = env.config.browserBindings?.[id]?.authProfile;
66
- return {
67
- installation: !env.deps.browser ? 'missing' : gap ? 'incompatible' : 'detected',
68
- ...bound ? { credential: 'configured' } : {},
69
- ...available ? { diagnosticCode: 'login_unverified' } : { diagnosticCode: gap ? 'browser_missing' : 'disabled', ...(gap ?? extraGap?.(env)) ? { reason: (gap ?? extraGap?.(env)) } : {} },
70
- };
67
+ const BROWSER_REQ = { kind: 'browser', id: 'dsh-browser', optional: true, note: 'dsh-browser backend: OpenCLI bridge or a saved auth profile (your logged-in session)' };
68
+ const cliReq = (id, note) => ({ kind: 'cli', id, optional: true, note });
69
+ /**
70
+ * A platform provider whose backends are an ordered chain (`resolveChain`): the engine is the chain, the local probe is the
71
+ * readiness of every leg (cached contract probes, no search, no login), and `chain` reports each leg for `sources.status`.
72
+ */
73
+ export function chainProvider(platformId, d) {
74
+ const label = d.label;
75
+ const ctxOf = (env) => ({ deps: env.deps, config: env.config });
76
+ return {
77
+ descriptor: d,
78
+ create: (deps, config) => chainEngine(platformId, label, resolveChain(platformId, { deps, config }).legs.map(leg => leg.engine)),
79
+ async probeLocal(env) {
80
+ const report = await chainReport(platformId, ctxOf(env));
81
+ return {
82
+ available: report.available,
83
+ installation: report.installation,
84
+ ...report.credential ? { credential: report.credential } : {},
85
+ ...report.reason ? { reason: report.reason } : {},
86
+ ...report.diagnosticCode ? { diagnosticCode: report.diagnosticCode } : {},
87
+ };
88
+ },
89
+ chain: async (env) => chainReport(platformId, ctxOf(env)),
71
90
  };
72
91
  }
73
- /** Why the OpenCLI bridge cannot run although the browser is fine: a settings switch. */
74
- const opencliSwitch = (env) => !env.deps.enableCli ? 'CLI backends are disabled in settings (enableCliBackends)' : !env.deps.opencliEnabled ? 'the OpenCLI backend is disabled in settings (opencliEnabled)' : undefined;
75
- const BROWSER_REQ = { kind: 'browser', id: 'dsh-browser', note: 'logged-in browser session (OpenCLI bridge or a saved auth profile)' };
76
92
  function opencliPlatform(id, label, over) {
77
- return platform(descriptor({
93
+ return chainProvider(id, descriptor({
78
94
  id: 'platform:' + id, aliases: [id], label, kind: 'platform', needsBrowser: 'opencli', taskProfiles: ['experience'], resultKinds: ['social'],
79
95
  requirements: [BROWSER_REQ], costModel: { kind: 'free', note: 'uses your logged-in session' }, costTier: 'free-quota',
80
96
  verification: { live: false, note: 'needs a logged-in browser session; not verified live' },
81
97
  ...over,
82
- }), deps => opencliEngine(id, deps), browserDims(id, 'opencli', opencliSwitch));
98
+ }));
83
99
  }
84
100
  function browserPlatform(id, label, over) {
85
- return platform(descriptor({
101
+ return chainProvider(id, descriptor({
86
102
  id: 'platform:' + id, aliases: [id], label, kind: 'platform', needsBrowser: 'searchResults', taskProfiles: ['experience'], languages: ['zh'], regions: ['cn'],
87
103
  resultKinds: ['forum'], requirements: [BROWSER_REQ], costModel: { kind: 'free', note: 'reads the rendered search page in your logged-in browser' }, costTier: 'free-quota',
88
104
  verification: { live: false, note: 'best-effort page selectors, need a login state; not verified live' },
89
105
  ...over,
90
- }), deps => playwrightPlatformEngine(id, deps), browserDims(id, 'searchResults'));
106
+ }));
107
+ }
108
+ /** A platform served by standalone CLIs (and optionally dsh-browser legs): `legs` name the CLI requirements shown in the descriptor. */
109
+ function cliPlatform(id, label, over) {
110
+ return chainProvider(id, descriptor({ id: 'platform:' + id, aliases: [id], label, kind: 'platform', ...over }));
91
111
  }
92
112
  const GITHUB_TOKEN_REQ = (optional, note) => ({ kind: 'key', id: 'github-token', env: ['GITHUB_TOKEN', 'GH_TOKEN'], optional, note });
93
- /** The TWITTER_* tokens twitter-cli reads from the environment (both are needed). */
94
- const twitterTokensSet = () => !!process.env.TWITTER_AUTH_TOKEN && !!process.env.TWITTER_CT0;
113
+ const GH_REQ = cliReq('gh', 'fallback backend: GitHub CLI (`gh auth login` is yours to run)');
95
114
  export const platformAdapters = [
96
- platform(descriptor({
115
+ chainProvider('github-code', descriptor({
97
116
  id: 'platform:github-code', aliases: ['github-code'], label: 'GitHub 代码', kind: 'platform', domains: ['github.com'], taskProfiles: ['docs_code'], resultKinds: ['code'], sourceFamily: 'github',
98
- requirements: [GITHUB_TOKEN_REQ(false, 'code search requires an authenticated request')], costTier: 'free-quota',
99
- }), githubCodeEngine, (env, ok) => ({ installation: 'not_required', credential: (env.deps.githubToken?.length ?? 0) > 0 || ok ? 'configured' : 'missing', ...ok ? {} : { reason: 'GitHub code search requires authentication: set $GITHUB_TOKEN (or config githubToken)', diagnosticCode: 'key_missing' } })),
100
- platform(descriptor({
117
+ requirements: [GITHUB_TOKEN_REQ(true, 'code search requires an authenticated request: a token, or the gh fallback'), GH_REQ], costTier: 'free-quota',
118
+ })),
119
+ chainProvider('github-issues', descriptor({
101
120
  id: 'platform:github-issues', aliases: ['github-issues'], label: 'GitHub Issues', kind: 'platform', domains: ['github.com'], taskProfiles: ['docs_code', 'experience'], resultKinds: ['forum'], sourceFamily: 'github',
102
- requirements: [GITHUB_TOKEN_REQ(true, 'optional: raises the rate limit')],
103
- }), githubIssuesEngine, env => ({ installation: 'not_required', credential: (env.deps.githubToken?.length ?? 0) > 0 ? 'configured' : 'not_required' })),
104
- opencliPlatform('xiaohongshu', '小红书', { languages: ['zh'], regions: ['cn'], domains: ['xiaohongshu.com'] }),
105
- // One provider, two backends in today's order: the OpenCLI bridge first, twitter-cli (agent-reach) behind it.
106
- platform(descriptor({
107
- id: 'platform:twitter', aliases: ['twitter'], label: 'Twitter / X', kind: 'platform', needsBrowser: 'opencli', domains: ['twitter.com', 'x.com'], taskProfiles: ['experience', 'news_fact'], resultKinds: ['social'],
121
+ requirements: [GITHUB_TOKEN_REQ(true, 'optional: raises the rate limit'), GH_REQ],
122
+ })),
123
+ cliPlatform('xiaohongshu', '小红书', {
124
+ languages: ['zh'], regions: ['cn'], domains: ['xiaohongshu.com'], taskProfiles: ['experience'], resultKinds: ['social'],
125
+ requirements: [cliReq('opencli', 'first backend: standalone OpenCLI with your own Chrome'), cliReq('xhs', 'second backend: xiaohongshu-cli (`xhs login` is yours to run)'), BROWSER_REQ],
126
+ costModel: { kind: 'free', note: 'uses your logged-in session' }, costTier: 'free-quota',
127
+ verification: { live: false, note: 'needs your login; command contracts probed locally, no search run' },
128
+ }),
129
+ // One provider, three backends in order: twitter-cli, the standalone OpenCLI, the dsh-browser OpenCLI bridge.
130
+ cliPlatform('twitter', 'Twitter / X', {
131
+ domains: ['twitter.com', 'x.com'], taskProfiles: ['experience', 'news_fact'], resultKinds: ['social'],
108
132
  requirements: [
109
- { kind: 'browser', id: 'dsh-browser', optional: true, note: 'first backend: OpenCLI bridge with your logged-in session' },
110
- { kind: 'cli', id: 'twitter', optional: true, note: 'second backend: twitter-cli' },
133
+ cliReq('twitter', 'first backend: twitter-cli (needs TWITTER_AUTH_TOKEN and TWITTER_CT0)'),
111
134
  { kind: 'key', id: 'twitter-auth-token', env: ['TWITTER_AUTH_TOKEN'], optional: true, note: 'twitter-cli needs this and TWITTER_CT0' },
112
135
  { kind: 'key', id: 'twitter-ct0', env: ['TWITTER_CT0'], optional: true, note: 'twitter-cli needs this and TWITTER_AUTH_TOKEN' },
136
+ cliReq('opencli', 'second backend: standalone OpenCLI with your own Chrome'),
137
+ BROWSER_REQ,
113
138
  ],
114
139
  costModel: { kind: 'free', note: 'uses your logged-in session' }, costTier: 'free-quota',
115
140
  verification: { live: false, note: 'needs a logged-in session or twitter-cli tokens; not verified live' },
116
- }), deps => chainEngine('twitter', 'Twitter / X', [opencliEngine('twitter', deps), agentReachEngine('twitter', deps)]), (env, available) => {
117
- const gap = browserGap(env.deps.browser, 'opencli', 'platform twitter');
118
- const cli = env.cli?.get('twitter');
119
- const browserOk = !gap && !opencliSwitch(env);
120
- const cliOk = env.deps.enableCli && env.deps.agentReachEnabled && twitterTokensSet() && cli !== false;
121
- const why = [];
122
- if (!available) {
123
- why.push(gap ?? opencliSwitch(env) ?? 'OpenCLI backend unavailable');
124
- why.push(!env.deps.enableCli ? 'twitter-cli: CLI backends are disabled in settings' : !env.deps.agentReachEnabled ? 'twitter-cli: disabled in settings (agentReachEnabled)' : cli === false ? 'twitter-cli: the twitter command was not found' : 'twitter-cli: TWITTER_AUTH_TOKEN / TWITTER_CT0 are not set');
125
- }
126
- return {
127
- installation: browserOk || cli === true ? 'detected' : !env.deps.browser || cli === false ? 'missing' : 'incompatible',
128
- ...twitterTokensSet() ? { credential: 'configured' } : {},
129
- ...available ? {} : { reason: why.join('; '), diagnosticCode: gap ? 'browser_missing' : 'disabled' },
130
- };
131
141
  }),
132
- opencliPlatform('reddit', 'Reddit', { languages: ['en'], domains: ['reddit.com'] }),
142
+ cliPlatform('reddit', 'Reddit', {
143
+ languages: ['en'], domains: ['reddit.com'], taskProfiles: ['experience'], resultKinds: ['social'],
144
+ requirements: [cliReq('rdt', 'first backend: rdt-cli (`rdt login` is yours to run)'), cliReq('opencli', 'second backend: standalone OpenCLI with your own Chrome'), BROWSER_REQ],
145
+ costModel: { kind: 'free', note: 'uses your logged-in session' }, costTier: 'free-quota',
146
+ verification: { live: false, note: 'needs your login; command contracts probed locally, no search run' },
147
+ }),
133
148
  opencliPlatform('instagram', 'Instagram', { domains: ['instagram.com'] }),
134
149
  opencliPlatform('facebook', 'Facebook', { domains: ['facebook.com'] }),
135
150
  platform(descriptor({
@@ -146,12 +161,38 @@ export const platformAdapters = [
146
161
  return rssEngine(url, deps.allowProxyFakeIp).search(query, count, signal, options);
147
162
  },
148
163
  }), () => ({ installation: 'not_required', credential: 'not_required' })),
149
- browserPlatform('zhihu', '知乎', { resultKinds: ['qa'], taskProfiles: ['experience', 'compare'], domains: ['zhihu.com'] }),
164
+ cliPlatform('zhihu', '知乎', {
165
+ languages: ['zh'], regions: ['cn'], resultKinds: ['qa'], taskProfiles: ['experience', 'compare'], domains: ['zhihu.com'],
166
+ requirements: [cliReq('zhihu', 'first backend: zhihu-cli (`zhihu login` is yours to run)'), BROWSER_REQ],
167
+ costModel: { kind: 'free', note: 'uses your logged-in session' }, costTier: 'free-quota',
168
+ verification: { live: false, note: 'needs your login; command contract probed locally, no search run' },
169
+ }),
150
170
  browserPlatform('weibo', '微博', { resultKinds: ['social'], taskProfiles: ['experience', 'news_fact'], domains: ['weibo.com', 'weibo.cn'] }),
151
171
  browserPlatform('douban', '豆瓣', { taskProfiles: ['experience', 'compare'], domains: ['douban.com'] }),
152
172
  browserPlatform('tieba', '百度贴吧', { domains: ['tieba.baidu.com'] }),
153
173
  browserPlatform('douyin', '抖音', { resultKinds: ['video'], domains: ['douyin.com'] }),
154
174
  browserPlatform('kuaishou', '快手', { resultKinds: ['video'], domains: ['kuaishou.com'] }),
175
+ // WeChat official accounts (dev-plan M12): OmniReach's wechat source (Sogou, no key, no login), then wx-search-cli.
176
+ cliPlatform('wechat', '微信公众号', {
177
+ languages: ['zh'], regions: ['cn'], domains: ['mp.weixin.qq.com', 'weixin.qq.com'], taskProfiles: ['news_fact', 'experience'], resultKinds: ['social'],
178
+ requirements: [cliReq('omnireach', 'first backend: OmniReach (`--on wechat`, Sogou, no key)'), cliReq('wx-search-cli', 'second backend: wx-search-cli (Sogou)')],
179
+ costModel: { kind: 'free', note: 'Sogou WeChat search through a local CLI; no key, no login; rate limits and captchas apply' }, costTier: 'anonymous',
180
+ verification: { live: true, note: 'omnireach 0.19.0-alpha wechat search parsed on 2026-10-06; wx-search-cli from its docs only' },
181
+ }),
182
+ // OmniReach as its own multi-source provider: addressable (`platform=omnireach`), never planned on its own.
183
+ cliPlatform('omnireach', 'OmniReach (多源)', {
184
+ languages: ['zh', 'en'], regions: ['global', 'cn'], taskProfiles: [], resultKinds: ['web', 'social'],
185
+ requirements: [cliReq('omnireach', 'OmniReach CLI (its own default sources; browser-backed ones stay opt-in there)')],
186
+ costModel: { kind: 'free', note: 'the CLI\'s default free sources; keys and the Chrome bridge are not passed' }, costTier: 'anonymous',
187
+ verification: { live: false, note: 'contract probed and the wechat source run live; the multi-source command was not run' },
188
+ }),
189
+ // Tanso (Bocha / Zhihu API CLI): documented contract only.
190
+ cliPlatform('tanso', 'Tanso (博查 / 知乎)', {
191
+ languages: ['zh'], regions: ['cn'], taskProfiles: [], resultKinds: ['web'],
192
+ requirements: [cliReq('tanso', 'Tanso CLI with your own Bocha / Zhihu keys in its config')],
193
+ costModel: { kind: 'metered', unit: 'request', note: 'uses your Bocha / Zhihu keys through its own config' }, costTier: 'paid',
194
+ verification: { live: false, note: 'documented contract only (upstream README); not installed or run' },
195
+ }),
155
196
  ];
156
197
  // ── user-defined platforms (settings `customPlatforms`) ─────────────────────
157
198
  const ID_SAFE = /^[a-z0-9][a-z0-9._-]*$/;
@@ -180,7 +221,7 @@ export function customPlatformAdapter(key, spec) {
180
221
  return platform(descriptor({
181
222
  id: customProviderId(key), aliases: [key], label: spec.name + ' (自定义)', kind: 'platform', needsBrowser: 'searchResults', taskProfiles: ['experience'], resultKinds: ['forum'],
182
223
  ...host ? { domains: [host] } : {},
183
- requirements: [BROWSER_REQ],
224
+ requirements: [{ ...BROWSER_REQ, optional: false }],
184
225
  costModel: { kind: 'free', note: 'reads the rendered search page in your browser' },
185
226
  verification: { live: false, note: 'user-defined (settings customPlatforms)' },
186
227
  }), (deps, config) => customPlatformEngine(key, config.customPlatforms?.[key] ?? spec, deps), (env, available) => {
@@ -192,4 +233,22 @@ export function customPlatformAdapter(key, spec) {
192
233
  };
193
234
  });
194
235
  }
236
+ // ── user-defined CLI adapters (settings `cliAdapters`) ──────────────────────
237
+ /** Registry id and route id of a user-defined CLI adapter: `custom-cli:<id>` (also its backend id in `platformBackends`). */
238
+ export const customCliProviderId = (id) => 'custom-cli:' + id;
239
+ /** A user-defined CLI adapter as a platform provider whose chain is the adapter itself (an edit of `platformBackends` can still reorder it). */
240
+ export function customCliAdapter(id, spec) {
241
+ const route = customCliProviderId(id);
242
+ return chainProvider(route, descriptor({
243
+ id: route, aliases: [], label: spec.bins[0] + ' (自定义 CLI)', kind: 'platform', taskProfiles: ['experience'], languages: ['*'], regions: ['global'], resultKinds: ['web'],
244
+ requirements: [cliReq(spec.bins[0], 'user-defined adapter ' + id + ': ' + spec.packageNote)],
245
+ costModel: { kind: 'free', note: 'user-defined adapter (settings cliAdapters)' }, costTier: spec.needsLogin ? 'free-quota' : 'anonymous',
246
+ verification: { live: false, note: 'user-defined (settings cliAdapters); unverified' },
247
+ }));
248
+ }
249
+ /** A user spec as validated for registration: the problem text, or undefined when it can be registered. */
250
+ export function customCliProblem(id, raw) {
251
+ const result = validateCliAdapterSpec(raw && typeof raw === 'object' && !Array.isArray(raw) ? { ...raw, id } : raw, 'user');
252
+ return result.ok ? undefined : 'cliAdapters.' + id + ' ignored: ' + result.errors.join('; ');
253
+ }
195
254
  //# sourceMappingURL=platforms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../src/providers/platforms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../src/providers/platforms.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"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"}
package/lib/router.js CHANGED
@@ -5,7 +5,9 @@
5
5
  */
6
6
  import { credentialRef } from '@deepseek-ai/dsh-credentials';
7
7
  import { EngineError, } from "./engines.js";
8
- import { customKeyProblem, customPlatformAdapter } from "./providers/platforms.js";
8
+ import { customCliAdapter, customCliProviderId, customKeyProblem, customPlatformAdapter } from "./providers/platforms.js";
9
+ import { platformBackendIssues } from "./cli/chains-spec.js";
10
+ import { resolveCliAdapters } from "./cli/spec.js";
9
11
  import { SourceUnavailableError } from "./providers/unavailable.js";
10
12
  import { defaultProviderRegistry, costTierOf, routeIdOf } from "./providers/index.js";
11
13
  import { BOCHA_FALLBACK_KEY_ENV, BOCHA_KEY_ENV } from "./providers/bocha.js";
@@ -40,6 +42,9 @@ export class SearchRouter {
40
42
  syncedRevision = -1;
41
43
  /** Custom platforms (settings `customPlatforms`) this router registered: key -> spec signature + unregister. A key the registry refused stays here with its problem so it is not retried on every call. */
42
44
  custom = new Map();
45
+ /** User-defined CLI adapters (settings `cliAdapters`) this router registered as `custom-cli:<id>` platforms, with the diagnostics of the entries it ignored. */
46
+ customCli = new Map();
47
+ cliAdapterDiagnostics = [];
43
48
  /** Latest local probe per route id (read by providerStatuses for the credential dimension). */
44
49
  readiness = new Map();
45
50
  /** Last real call per route id: feeds the health dimension (never inferred from a local probe). */
@@ -101,6 +106,34 @@ export class SearchRouter {
101
106
  this.custom.set(key, { sig, off: () => { }, problem: 'custom platform "' + key + '" was not registered: ' + (error instanceof Error ? error.message : String(error)) });
102
107
  }
103
108
  }
109
+ this.syncCustomCliAdapters();
110
+ }
111
+ /** The same for `cliAdapters`: valid specs become `custom-cli:<id>` platforms; an invalid entry is ignored and reported. */
112
+ syncCustomCliAdapters() {
113
+ const { specs, diagnostics } = resolveCliAdapters(this.dynamic().cliAdapters);
114
+ this.cliAdapterDiagnostics = diagnostics;
115
+ const next = new Map([...specs].map(([id, spec]) => [id, JSON.stringify(spec)]));
116
+ for (const [id, entry] of [...this.customCli])
117
+ if (next.get(id) !== entry.sig) {
118
+ entry.off();
119
+ this.customCli.delete(id);
120
+ }
121
+ for (const [id, sig] of next) {
122
+ if (this.customCli.has(id))
123
+ continue;
124
+ try {
125
+ this.customCli.set(id, { sig, off: this.registry.register(customCliAdapter(id, specs.get(id))) });
126
+ }
127
+ catch (error) {
128
+ this.customCli.set(id, { sig, off: () => { }, problem: 'cliAdapters.' + id + ' was not registered as ' + customCliProviderId(id) + ': ' + (error instanceof Error ? error.message : String(error)) });
129
+ }
130
+ }
131
+ }
132
+ /** Configuration problems of the CLI adapter layer for `sources.status`: ignored `cliAdapters` entries and `platformBackends` that name nothing usable. */
133
+ cliAdapterProblems() {
134
+ this.syncCustomPlatforms();
135
+ const cfg = this.dynamic();
136
+ return [...this.cliAdapterDiagnostics, ...[...this.customCli.values()].flatMap(entry => (entry.problem ? [entry.problem] : [])), ...platformBackendIssues(cfg.platformBackends, cfg.cliAdapters)];
104
137
  }
105
138
  /** Custom platforms the registry could not take (key clash, bad key), for `sources.status`. */
106
139
  customPlatformProblems() {
@@ -112,6 +145,9 @@ export class SearchRouter {
112
145
  for (const entry of this.custom.values())
113
146
  entry.off();
114
147
  this.custom.clear();
148
+ for (const entry of this.customCli.values())
149
+ entry.off();
150
+ this.customCli.clear();
115
151
  }
116
152
  backendFor(id) {
117
153
  return {
@@ -242,10 +278,9 @@ export class SearchRouter {
242
278
  return diagnostics;
243
279
  const cfg = this.dynamic();
244
280
  const exaKey = await this.resolveKey(cfg.exaApiKeyEnv, cfg.exaApiKey);
281
+ // Platform providers (bilibili, youtube, ...) report their own chain readiness (src/cli/chain.ts); only Exa's MCP route is overruled here.
245
282
  const requiredCli = new Map([
246
283
  ...exaKey ? [] : [['exa', 'mcporter']],
247
- ['bilibili', 'bili'],
248
- ['youtube', 'yt-dlp'],
249
284
  ]);
250
285
  return diagnostics.map(diagnostic => {
251
286
  const dependency = requiredCli.get(diagnostic.id);
@@ -310,7 +345,7 @@ export class SearchRouter {
310
345
  try {
311
346
  const selected = await this.backends.runSelected({ query: call.query, count: call.count, signal: call.signal, skipSeam: opts.skipSeam ?? false, ...call.options ? { options: call.options } : {} }, { preferred: this.canonicalIds([call.id]), signal: call.signal });
312
347
  const sources = selected.value.sources;
313
- return sources.length ? { state: 'ok', sources } : { state: 'empty' };
348
+ return sources.length ? { state: 'ok', sources, ...selected.value.backend ? { backend: selected.value.backend } : {} } : { state: 'empty' };
314
349
  }
315
350
  catch (error) {
316
351
  if (call.signal.aborted)
@@ -544,19 +579,32 @@ export class SearchRouter {
544
579
  const health = cooling ? 'cooldown' : last ? (last.ok ? 'ready' : 'error') : 'unknown';
545
580
  const credential = last?.code === 'ENGINE_AUTH' ? 'rejected' : local.credential;
546
581
  const reason = !available ? (diag?.reason ?? local.reason) : undefined;
582
+ let chain;
583
+ let chainReport;
584
+ if (adapter.chain) {
585
+ try {
586
+ chainReport = await adapter.chain(env);
587
+ chain = chainReport.entries;
588
+ }
589
+ catch {
590
+ chain = undefined;
591
+ }
592
+ }
547
593
  out.push({
548
594
  id: d.id, route, aliases: [...d.aliases], label: d.label, kind: d.kind ?? 'web', ...d.domains?.length ? { domains: [...d.domains] } : {}, ...d.needsBrowser ? { needsBrowser: d.needsBrowser } : {}, operations: [...d.operations], taskProfiles: [...d.taskProfiles],
549
595
  languages: [...d.languages], regions: [...d.regions], resultKinds: [...d.resultKinds],
550
596
  ...d.sourceFamily ? { sourceFamily: d.sourceFamily } : {},
551
597
  requirements: d.requirements.map(({ env, ...r }) => ({ ...r, ...env ? { env: [...env] } : {} })), supportedFilters: [...d.supportedFilters], costModel: { ...d.costModel }, costTier: local.costTier ?? costTierOf(d),
552
598
  ...d.verification?.live ? {} : { unverified: true },
599
+ ...chain ? { chain } : {},
553
600
  ...this.requestBudgetOf(route) ? { budget: this.requestBudgetOf(route) } : {},
554
601
  readiness: {
555
602
  available,
603
+ ...chainReport ? { state: chainReport.state } : {},
556
604
  ...local.installation ? { installation: local.installation } : {},
557
605
  ...credential ? { credential } : {},
558
606
  health,
559
- ...reason ? { reason } : {},
607
+ ...reason ? { reason } : chainReport?.state === 'login_unverified' && chainReport.reason ? { reason: chainReport.reason } : {},
560
608
  ...local.diagnosticCode ? { diagnosticCode: local.diagnosticCode } : {},
561
609
  lastLocalCheck: now,
562
610
  ...last?.ok ? { lastRemoteSuccess: last.at } : {},
@@ -633,6 +681,7 @@ export class SearchRouter {
633
681
  enginesTried: detail?.enginesTried ?? ids,
634
682
  fromCache: true,
635
683
  availableCount: cached.rows.length,
684
+ ...detail?.backend ? { backend: detail.backend } : {},
636
685
  ...detail?.fallbackNote ? { fallbackNote: detail.fallbackNote } : {},
637
686
  };
638
687
  this.memory.set(memoryKey, result);
@@ -648,6 +697,7 @@ export class SearchRouter {
648
697
  let fallbackNote;
649
698
  let availableCount;
650
699
  let persistExtras;
700
+ let backendId;
651
701
  if (multi) {
652
702
  // Every engine goes through the registry (probe, cooldown, quality gate,
653
703
  // attempts) in parallel; failures of one never cancel the others.
@@ -701,6 +751,8 @@ export class SearchRouter {
701
751
  outcome = selected.value;
702
752
  usedId = platform ? platform.id : selected.id;
703
753
  viaId = selected.value.via ?? selected.id;
754
+ if (platform)
755
+ backendId = selected.value.backend ?? viaId;
704
756
  enginesTried.push(...ids.slice(0, Math.max(ids.indexOf(selected.id) + 1, 1)));
705
757
  // P1-1: explain the fallback (e.g. ddg returned results but none had snippets). A single platform has nothing to fall back to.
706
758
  const lowQualityAttempts = platform ? [] : selected.attempts.filter(a => a.outcome === 'low-quality');
@@ -714,6 +766,10 @@ export class SearchRouter {
714
766
  const spent = selected.attempts.filter(a => a.outcome === 'skipped' && /request budget used up/.test(a.detail ?? ''));
715
767
  if (spent.length)
716
768
  fallbackNote = (fallbackNote ? fallbackNote + '\n' : '') + 'skipped: ' + spent.map(a => a.id + ': ' + a.detail).join('; ');
769
+ // Notes of the engine itself: chain legs passed over (with reasons), results dropped for lack of a link.
770
+ const engineNotes = selected.value.notes ?? [];
771
+ if (engineNotes.length)
772
+ fallbackNote = (fallbackNote ? fallbackNote + '\n' : '') + engineNotes.join('\n');
717
773
  }
718
774
  catch (error) {
719
775
  if (signal?.aborted)
@@ -743,7 +799,7 @@ export class SearchRouter {
743
799
  engine: platform ? viaId ?? finalId : finalId,
744
800
  status: 'ok',
745
801
  cacheKey,
746
- detail: JSON.stringify({ ...finalOutcome.content ? { content: finalOutcome.content } : {}, engine: finalId, enginesTried, requestedCount: count, ...fallbackNote ? { fallbackNote } : {} }),
802
+ detail: JSON.stringify({ ...finalOutcome.content ? { content: finalOutcome.content } : {}, engine: finalId, ...backendId ? { backend: backendId } : {}, enginesTried, requestedCount: count, ...fallbackNote ? { fallbackNote } : {} }),
747
803
  }, persistExtras ? finalOutcome.sources.map((source, i) => ({ ...source, extra: persistExtras[i] })) : finalOutcome.sources, platform ? 'platform-' + platform.id : finalId));
748
804
  const result = {
749
805
  ...outcome.content ? { content: outcome.content } : {},
@@ -752,6 +808,7 @@ export class SearchRouter {
752
808
  enginesTried,
753
809
  fromCache: false,
754
810
  availableCount,
811
+ ...backendId ? { backend: backendId } : {},
755
812
  ...fallbackNote ? { fallbackNote } : {},
756
813
  };
757
814
  // 4. Warm the in-process LRU (memory-only; survives across SQLite hits).