dsh-web-search-pro 0.2.0 → 0.2.3
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 +179 -0
- package/README.md +197 -32
- package/assets/skills/dsh-web-search-pro/SKILL.md +14 -13
- package/assets/skills/dsh-web-search-pro/references/config.md +36 -0
- package/assets/skills/dsh-web-search-pro/references/sources.md +19 -4
- package/assets/skills/dsh-web-search-pro/references/troubleshooting.md +3 -1
- package/catalog/sources.v1.json +22 -12
- package/lib/actions/approval.js +50 -1
- package/lib/actions/approval.js.map +1 -1
- package/lib/actions/config.js +274 -0
- package/lib/actions/config.js.map +1 -0
- package/lib/actions/errors.js +8 -1
- package/lib/actions/errors.js.map +1 -1
- package/lib/actions/format.js +10 -0
- package/lib/actions/format.js.map +1 -1
- package/lib/actions/index-view.js +2 -2
- package/lib/actions/index-view.js.map +1 -1
- package/lib/actions/read.js +7 -3
- package/lib/actions/read.js.map +1 -1
- package/lib/actions/registry.js +3 -1
- package/lib/actions/registry.js.map +1 -1
- package/lib/actions/run.js +2 -2
- package/lib/actions/run.js.map +1 -1
- package/lib/actions/schema.js +18 -0
- package/lib/actions/schema.js.map +1 -1
- package/lib/actions/search.js +12 -6
- package/lib/actions/search.js.map +1 -1
- package/lib/actions/sources.js +116 -41
- package/lib/actions/sources.js.map +1 -1
- package/lib/actions/types.js +19 -1
- package/lib/actions/types.js.map +1 -1
- package/lib/browser-access.js +25 -0
- package/lib/browser-access.js.map +1 -1
- package/lib/catalog/recommend.js +11 -3
- package/lib/catalog/recommend.js.map +1 -1
- package/lib/catalog/schema.js +3 -1
- package/lib/catalog/schema.js.map +1 -1
- package/lib/cli/builtin-specs.js +341 -0
- package/lib/cli/builtin-specs.js.map +1 -0
- package/lib/cli/chain.js +193 -0
- package/lib/cli/chain.js.map +1 -0
- package/lib/cli/chains-spec.js +118 -0
- package/lib/cli/chains-spec.js.map +1 -0
- package/lib/cli/engine.js +99 -0
- package/lib/cli/engine.js.map +1 -0
- package/lib/cli/opencli-sites.js +83 -0
- package/lib/cli/opencli-sites.js.map +1 -0
- package/lib/cli/opencli.js +153 -0
- package/lib/cli/opencli.js.map +1 -0
- package/lib/cli/probe.js +128 -0
- package/lib/cli/probe.js.map +1 -0
- package/lib/cli/runner.js +564 -0
- package/lib/cli/runner.js.map +1 -0
- package/lib/cli/spec.js +496 -0
- package/lib/cli/spec.js.map +1 -0
- package/lib/cli/time-text.js +79 -0
- package/lib/cli/time-text.js.map +1 -0
- package/lib/cli/trial.js +57 -0
- package/lib/cli/trial.js.map +1 -0
- package/lib/client/SettingsCard.js +14 -32
- package/lib/client/SettingsCard.js.map +1 -1
- package/lib/client/agent-mark.js +27 -0
- package/lib/client/agent-mark.js.map +1 -0
- package/lib/client/card-frame.js +118 -0
- package/lib/client/card-frame.js.map +1 -0
- package/lib/client/cli-form.js +257 -0
- package/lib/client/cli-form.js.map +1 -0
- package/lib/client/field-docs.js +130 -0
- package/lib/client/field-docs.js.map +1 -0
- package/lib/client/field-keys.js +81 -0
- package/lib/client/field-keys.js.map +1 -0
- package/lib/client/field-rows.js +71 -0
- package/lib/client/field-rows.js.map +1 -0
- package/lib/client/fill.js +3 -0
- package/lib/client/fill.js.map +1 -0
- package/lib/client/form-specs.js +15 -1
- package/lib/client/form-specs.js.map +1 -1
- package/lib/client/form.js +296 -27
- package/lib/client/form.js.map +1 -1
- package/lib/client/group-advanced.js +23 -0
- package/lib/client/group-advanced.js.map +1 -0
- package/lib/client/group-agent.js +28 -0
- package/lib/client/group-agent.js.map +1 -0
- package/lib/client/group-cli.js +136 -0
- package/lib/client/group-cli.js.map +1 -0
- package/lib/client/group-common.js +29 -0
- package/lib/client/group-common.js.map +1 -0
- package/lib/client/group-judge.js +67 -0
- package/lib/client/group-judge.js.map +1 -0
- package/lib/client/group-order.js +201 -0
- package/lib/client/group-order.js.map +1 -0
- package/lib/client/group-runtime.js +33 -0
- package/lib/client/group-runtime.js.map +1 -0
- package/lib/client/group-sources.js +83 -0
- package/lib/client/group-sources.js.map +1 -0
- package/lib/client/groups-basic.js +36 -0
- package/lib/client/groups-basic.js.map +1 -0
- package/lib/client/index.js.map +1 -1
- package/lib/client/json-list.js +50 -0
- package/lib/client/json-list.js.map +1 -0
- package/lib/client/locales.js +666 -215
- package/lib/client/locales.js.map +1 -1
- package/lib/client/order.js +192 -0
- package/lib/client/order.js.map +1 -0
- package/lib/client/overlay-ops.js +46 -0
- package/lib/client/overlay-ops.js.map +1 -0
- package/lib/client/sources-table.js +1 -0
- package/lib/client/sources-table.js.map +1 -1
- package/lib/client/styles.js +74 -47
- package/lib/client/styles.js.map +1 -1
- package/lib/client/text-view.js +98 -0
- package/lib/client/text-view.js.map +1 -0
- package/lib/client/ui-kit.js +120 -0
- package/lib/client/ui-kit.js.map +1 -0
- package/lib/client/validators.js +22 -0
- package/lib/client/validators.js.map +1 -1
- package/lib/client.js +9151 -1987
- package/lib/client.js.map +1 -1
- package/lib/config-fillers.js +53 -0
- package/lib/config-fillers.js.map +1 -0
- package/lib/config-groups.js +49 -0
- package/lib/config-groups.js.map +1 -0
- package/lib/config.js +87 -107
- package/lib/config.js.map +1 -1
- package/lib/default-chain.js +66 -0
- package/lib/default-chain.js.map +1 -0
- package/lib/deps.js +109 -102
- package/lib/deps.js.map +1 -1
- package/lib/engine-error.js +19 -0
- package/lib/engine-error.js.map +1 -0
- package/lib/engines.js +32 -115
- package/lib/engines.js.map +1 -1
- package/lib/fetch.js +23 -4
- package/lib/fetch.js.map +1 -1
- package/lib/index.js +30 -5
- package/lib/index.js.map +1 -1
- package/lib/overlay-types.js +88 -0
- package/lib/overlay-types.js.map +1 -0
- package/lib/overlay.js +683 -0
- package/lib/overlay.js.map +1 -0
- package/lib/pipeline/candidates.js +27 -1
- package/lib/pipeline/candidates.js.map +1 -1
- package/lib/pipeline/compile.js +63 -0
- package/lib/pipeline/compile.js.map +1 -1
- package/lib/pipeline/confidence.js +64 -0
- package/lib/pipeline/confidence.js.map +1 -0
- package/lib/pipeline/fusion.js +50 -3
- package/lib/pipeline/fusion.js.map +1 -1
- package/lib/pipeline/plan.js +2 -2
- package/lib/pipeline/plan.js.map +1 -1
- package/lib/pipeline/render.js +20 -2
- package/lib/pipeline/render.js.map +1 -1
- package/lib/pipeline/run.js +21 -7
- package/lib/pipeline/run.js.map +1 -1
- package/lib/pipeline/sources-spec.js +19 -3
- package/lib/pipeline/sources-spec.js.map +1 -1
- package/lib/providers/builtin.js +13 -14
- package/lib/providers/builtin.js.map +1 -1
- package/lib/providers/deepseek.js +348 -0
- package/lib/providers/deepseek.js.map +1 -0
- package/lib/providers/http.js.map +1 -1
- package/lib/providers/keyed-meta.js +7 -0
- package/lib/providers/keyed-meta.js.map +1 -1
- package/lib/providers/platforms.js +118 -58
- package/lib/providers/platforms.js.map +1 -1
- package/lib/providers/registry.js.map +1 -1
- package/lib/restart.js +47 -0
- package/lib/restart.js.map +1 -0
- package/lib/router.js +203 -27
- package/lib/router.js.map +1 -1
- package/lib/rpc-types.js +15 -0
- package/lib/rpc-types.js.map +1 -0
- package/lib/rpc.js +85 -0
- package/lib/rpc.js.map +1 -0
- package/lib/tools.js +10 -4
- package/lib/tools.js.map +1 -1
- package/lib/types/actions/approval.d.ts +11 -0
- package/lib/types/actions/config.d.ts +54 -0
- package/lib/types/actions/format.d.ts +9 -2
- package/lib/types/actions/run.d.ts +1 -0
- package/lib/types/actions/schema.d.ts +7 -1
- package/lib/types/actions/sources.d.ts +29 -3
- package/lib/types/actions/types.d.ts +28 -2
- package/lib/types/browser-access.d.ts +17 -0
- package/lib/types/catalog/recommend.d.ts +4 -0
- package/lib/types/catalog/schema.d.ts +2 -0
- package/lib/types/cli/builtin-specs.d.ts +38 -0
- package/lib/types/cli/chain.d.ts +83 -0
- package/lib/types/cli/chains-spec.d.ts +48 -0
- package/lib/types/cli/engine.d.ts +50 -0
- package/lib/types/cli/opencli-sites.d.ts +24 -0
- package/lib/types/cli/opencli.d.ts +77 -0
- package/lib/types/cli/probe.d.ts +53 -0
- package/lib/types/cli/runner.d.ts +126 -0
- package/lib/types/cli/spec.d.ts +269 -0
- package/lib/types/cli/time-text.d.ts +12 -0
- package/lib/types/cli/trial.d.ts +19 -0
- package/lib/types/client/SettingsCard.d.ts +17 -1
- package/lib/types/client/agent-mark.d.ts +22 -0
- package/lib/types/client/card-frame.d.ts +35 -0
- package/lib/types/client/cli-form.d.ts +97 -0
- package/lib/types/client/field-docs.d.ts +15 -0
- package/lib/types/client/field-keys.d.ts +41 -0
- package/lib/types/client/field-rows.d.ts +70 -0
- package/lib/types/client/fill.d.ts +2 -0
- package/lib/types/client/form-specs.d.ts +12 -3
- package/lib/types/client/form.d.ts +79 -1
- package/lib/types/client/group-advanced.d.ts +9 -0
- package/lib/types/client/group-agent.d.ts +20 -0
- package/lib/types/client/group-cli.d.ts +52 -0
- package/lib/types/client/group-common.d.ts +12 -0
- package/lib/types/client/group-judge.d.ts +17 -0
- package/lib/types/client/group-order.d.ts +26 -0
- package/lib/types/client/group-runtime.d.ts +15 -0
- package/lib/types/client/group-sources.d.ts +46 -0
- package/lib/types/client/groups-basic.d.ts +18 -0
- package/lib/types/client/index.d.ts +8 -0
- package/lib/types/client/json-list.d.ts +21 -0
- package/lib/types/client/locales.d.ts +1079 -196
- package/lib/types/client/order.d.ts +102 -0
- package/lib/types/client/overlay-ops.d.ts +37 -0
- package/lib/types/client/styles.d.ts +56 -41
- package/lib/types/client/text-view.d.ts +22 -0
- package/lib/types/client/ui-kit.d.ts +200 -0
- package/lib/types/client/validators.d.ts +6 -0
- package/lib/types/config-fillers.d.ts +9 -0
- package/lib/types/config-groups.d.ts +23 -0
- package/lib/types/config.d.ts +265 -216
- package/lib/types/default-chain.d.ts +63 -0
- package/lib/types/deps.d.ts +25 -23
- package/lib/types/engine-error.d.ts +12 -0
- package/lib/types/engines.d.ts +45 -10
- package/lib/types/fetch.d.ts +12 -3
- package/lib/types/index.d.ts +164 -146
- package/lib/types/overlay-types.d.ts +98 -0
- package/lib/types/overlay.d.ts +141 -0
- package/lib/types/pipeline/candidates.d.ts +19 -0
- package/lib/types/pipeline/compile.d.ts +11 -0
- package/lib/types/pipeline/confidence.d.ts +35 -0
- package/lib/types/pipeline/fusion.d.ts +23 -1
- package/lib/types/pipeline/render.d.ts +16 -0
- package/lib/types/pipeline/run.d.ts +3 -1
- package/lib/types/pipeline/sources-spec.d.ts +5 -2
- package/lib/types/pipeline/types.d.ts +37 -0
- package/lib/types/providers/deepseek.d.ts +130 -0
- package/lib/types/providers/http.d.ts +2 -1
- package/lib/types/providers/keyed-meta.d.ts +5 -0
- package/lib/types/providers/platforms.d.ts +15 -3
- package/lib/types/providers/registry.d.ts +10 -0
- package/lib/types/restart.d.ts +52 -0
- package/lib/types/router.d.ts +69 -9
- package/lib/types/rpc-types.d.ts +79 -0
- package/lib/types/rpc.d.ts +41 -0
- package/lib/types/tools.d.ts +6 -0
- package/lib/types/util.d.ts +16 -1
- package/lib/util.js +17 -4
- package/lib/util.js.map +1 -1
- package/package.json +51 -43
- package/scripts/check-client-bundle.mjs +1 -1
- package/scripts/cli-login-check.mjs +214 -0
- package/lib/client/RubricEditor.js +0 -47
- package/lib/client/RubricEditor.js.map +0 -1
- package/lib/client/fields.js +0 -31
- package/lib/client/fields.js.map +0 -1
- package/lib/types/client/RubricEditor.d.ts +0 -6
- package/lib/types/client/fields.d.ts +0 -65
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/cli/probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The runner of CLI adapter specs (dev-plan M12): spawns the tool without a shell, decodes its output as UTF-8, caps
|
|
3
|
+
* time and size, maps the output to search sources and every failure to a structured error. It never logs or echoes
|
|
4
|
+
* environment values (error text is scrubbed of any value of a variable the spec names) and never runs a login.
|
|
5
|
+
* @module web-search-pro/cli/runner
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'node:fs';
|
|
8
|
+
import os from 'node:os';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import { capText, htmlDecode, jsYaml, runCli, stripTags } from "../util.js";
|
|
11
|
+
import { EngineError } from "../engine-error.js";
|
|
12
|
+
import { normalizeTimeText } from "./time-text.js";
|
|
13
|
+
import { searchSpecFor, WHOLE_OUTPUT_DEFAULT_CHARS, WHOLE_OUTPUT_SCHEME, } from "./spec.js";
|
|
14
|
+
/** A structured failure of a CLI adapter: `code` is one of {@link CliErrorCode}; `hint` says what the user can do. */
|
|
15
|
+
export class CliAdapterError extends EngineError {
|
|
16
|
+
hint;
|
|
17
|
+
constructor(message, code, hint, retryable = false) {
|
|
18
|
+
super(message, code, retryable);
|
|
19
|
+
this.hint = hint;
|
|
20
|
+
this.name = 'CliAdapterError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Variables every tool needs to start and reach the network; nothing else of the process environment is handed over. */
|
|
24
|
+
const BASE_ENV = [
|
|
25
|
+
'PATH', 'PATHEXT', 'HOME', 'USERPROFILE', 'HOMEDRIVE', 'HOMEPATH', 'APPDATA', 'LOCALAPPDATA', 'SYSTEMROOT', 'SystemRoot', 'COMSPEC', 'WINDIR',
|
|
26
|
+
'TEMP', 'TMP', 'TMPDIR', 'LANG', 'LANGUAGE', 'LC_ALL', 'LC_CTYPE', 'XDG_CONFIG_HOME', 'XDG_DATA_HOME', 'XDG_CACHE_HOME', 'XDG_STATE_HOME',
|
|
27
|
+
'HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY', 'NO_PROXY', 'http_proxy', 'https_proxy', 'all_proxy', 'no_proxy',
|
|
28
|
+
'SSL_CERT_FILE', 'SSL_CERT_DIR', 'REQUESTS_CA_BUNDLE', 'CURL_CA_BUNDLE', 'NODE_EXTRA_CA_CERTS',
|
|
29
|
+
];
|
|
30
|
+
/** UTF-8 for Python tools (the Windows console otherwise answers in the system code page; dev issue #28). */
|
|
31
|
+
const UTF8_ENV = { PYTHONUTF8: '1', PYTHONIOENCODING: 'utf-8' };
|
|
32
|
+
/**
|
|
33
|
+
* A NO_PROXY list with its IPv6 entries written without brackets (`[::1]` / `[::1]:8080` -> `::1`). Python's httpx (omnireach, and
|
|
34
|
+
* any tool built on it) refuses a bracketed entry with "Invalid port: ':1]'" and the whole search fails; the DSH Host sets
|
|
35
|
+
* `NO_PROXY` with `[::1]`, which a plain terminal does not (found live 2026-10-26). Every tool that takes NO_PROXY accepts the bare form.
|
|
36
|
+
*/
|
|
37
|
+
export function normalizeNoProxy(list) {
|
|
38
|
+
return list.split(',').map(entry => entry.trim().replace(/^\[([0-9a-fA-F:.]+)\](?::\d+)?$/, '$1')).filter(entry => entry.length > 0).join(',');
|
|
39
|
+
}
|
|
40
|
+
/** The environment a spec's command runs with: the base set, what the spec lists, and the fixed UTF-8 / `env.set` values. */
|
|
41
|
+
export function buildCliEnv(spec, source = process.env) {
|
|
42
|
+
const out = {};
|
|
43
|
+
const take = (name) => { const value = source[name]; if (value !== undefined)
|
|
44
|
+
out[name] = name === 'NO_PROXY' || name === 'no_proxy' ? normalizeNoProxy(value) : value; };
|
|
45
|
+
for (const name of BASE_ENV)
|
|
46
|
+
take(name);
|
|
47
|
+
for (const name of spec.env.required ?? [])
|
|
48
|
+
take(name);
|
|
49
|
+
for (const name of spec.env.passthrough ?? [])
|
|
50
|
+
take(name);
|
|
51
|
+
return { ...out, ...UTF8_ENV, ...spec.env.set };
|
|
52
|
+
}
|
|
53
|
+
/** Names of the credential variables a spec relies on that are not set. */
|
|
54
|
+
export function missingEnv(spec, source = process.env) {
|
|
55
|
+
return (spec.env.required ?? []).filter(name => !source[name]);
|
|
56
|
+
}
|
|
57
|
+
/** The home-relative saved-login files of a spec that exist (existence only; the content is never read). */
|
|
58
|
+
export function savedLoginPresent(spec, opts = {}) {
|
|
59
|
+
const files = spec.login?.savedCredentialPaths;
|
|
60
|
+
if (!files?.length)
|
|
61
|
+
return undefined;
|
|
62
|
+
const home = opts.home ?? os.homedir();
|
|
63
|
+
const exists = opts.exists ?? ((file) => { try {
|
|
64
|
+
return fs.existsSync(file);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return false;
|
|
68
|
+
} });
|
|
69
|
+
return files.some(file => exists(path.join(home, file.replace(/^~\//, ''))));
|
|
70
|
+
}
|
|
71
|
+
/** Credential variables the plugin also resolves from its own settings / DSH credentials (config literal -> credentials ref -> environment). */
|
|
72
|
+
export const SETTINGS_BACKED_ENV = { TWITTER_AUTH_TOKEN: 'twitterAuthToken', TWITTER_CT0: 'twitterCt0' };
|
|
73
|
+
/** What the user must do to log in: the tool's own command run by them, or the environment variables they set. Never run by the plugin. */
|
|
74
|
+
export function loginHint(spec) {
|
|
75
|
+
const required = spec.env.required ?? [];
|
|
76
|
+
// A Host process does not read a shell profile, so say where the values are looked up.
|
|
77
|
+
const where = required.length && required.every(name => SETTINGS_BACKED_ENV[name])
|
|
78
|
+
? 'in DSH credentials (plugin settings ' + required.map(name => SETTINGS_BACKED_ENV[name]).join(' / ') + ') or in the Host process environment; a shell profile alone is not enough'
|
|
79
|
+
: 'in the Host process environment (a shell profile alone is not enough)';
|
|
80
|
+
if (spec.login?.hint)
|
|
81
|
+
return spec.login.hint + (required.length ? ' (or set ' + required.join(' / ') + ' ' + where + ')' : '');
|
|
82
|
+
if (spec.login?.command)
|
|
83
|
+
return 'run `' + spec.login.command + '` yourself' + (required.length ? ' (or set ' + required.join(' / ') + ' ' + where + ')' : '');
|
|
84
|
+
if (required.length)
|
|
85
|
+
return 'set ' + required.join(' / ') + ' ' + where;
|
|
86
|
+
return 'run `' + spec.bins[0] + ' login` yourself';
|
|
87
|
+
}
|
|
88
|
+
// ── output → sources ────────────────────────────────────────────────────────
|
|
89
|
+
const isObject = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
90
|
+
export function getPath(root, dotted) {
|
|
91
|
+
let node = root;
|
|
92
|
+
for (const key of dotted.split('.')) {
|
|
93
|
+
// `field=value` picks the first element of an array whose field is that value (compared as text).
|
|
94
|
+
const pick = /^([^=]+)=(.+)$/.exec(key);
|
|
95
|
+
if (pick && Array.isArray(node))
|
|
96
|
+
node = node.find(entry => isObject(entry) && String(entry[pick[1]]) === pick[2]);
|
|
97
|
+
else if (Array.isArray(node))
|
|
98
|
+
node = node[Number(key)];
|
|
99
|
+
else if (isObject(node))
|
|
100
|
+
node = node[key];
|
|
101
|
+
else
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
return node;
|
|
105
|
+
}
|
|
106
|
+
function asText(value, empty) {
|
|
107
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
108
|
+
const text = String(value).trim();
|
|
109
|
+
return text.length === 0 || empty.has(text) ? undefined : text;
|
|
110
|
+
}
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
function joinPart(part, item, empty, now) {
|
|
114
|
+
if (typeof part === 'object' && 'template' in part)
|
|
115
|
+
return fillTemplate(part, item, empty);
|
|
116
|
+
if (typeof part === 'object' && 'time' in part) {
|
|
117
|
+
const raw = asText(getPath(item, part.time), empty);
|
|
118
|
+
const text = raw === undefined ? undefined : normalizeTimeText(raw, now);
|
|
119
|
+
return text === undefined ? undefined : (part.prefix ?? '') + text + (part.suffix ?? '');
|
|
120
|
+
}
|
|
121
|
+
const p = typeof part === 'string' ? { path: part } : part;
|
|
122
|
+
const text = asText(getPath(item, p.path), empty);
|
|
123
|
+
return text === undefined ? undefined : (p.prefix ?? '') + text + (p.suffix ?? '');
|
|
124
|
+
}
|
|
125
|
+
function fillTemplate(source, item, empty) {
|
|
126
|
+
if (source.when && getPath(item, source.when.path) !== source.when.equals)
|
|
127
|
+
return undefined;
|
|
128
|
+
let missing = false;
|
|
129
|
+
const text = source.template.replace(/\{([^}]+)\}/g, (_m, p) => { const v = asText(getPath(item, p), empty); if (v === undefined)
|
|
130
|
+
missing = true; return v ?? ''; });
|
|
131
|
+
return missing ? undefined : text;
|
|
132
|
+
}
|
|
133
|
+
export function resolveField(source, item, empty = new Set(), now = Date.now()) {
|
|
134
|
+
if (source === undefined)
|
|
135
|
+
return undefined;
|
|
136
|
+
if (typeof source === 'string')
|
|
137
|
+
return asText(getPath(item, source), empty);
|
|
138
|
+
if (Array.isArray(source)) {
|
|
139
|
+
for (const entry of source) {
|
|
140
|
+
const text = typeof entry === 'string' ? asText(getPath(item, entry), empty) : fillTemplate(entry, item, empty);
|
|
141
|
+
if (text !== undefined)
|
|
142
|
+
return text;
|
|
143
|
+
}
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
if ('template' in source)
|
|
147
|
+
return fillTemplate(source, item, empty);
|
|
148
|
+
if ('epoch' in source) {
|
|
149
|
+
const raw = Number(getPath(item, source.epoch));
|
|
150
|
+
const date = Number.isFinite(raw) && raw > 0 ? new Date(raw * 1000) : undefined;
|
|
151
|
+
return date && !Number.isNaN(date.getTime()) ? date.toISOString() : undefined;
|
|
152
|
+
}
|
|
153
|
+
if ('date' in source)
|
|
154
|
+
return asText(getPath(item, source.date), empty)?.slice(0, 10);
|
|
155
|
+
if ('time' in source) {
|
|
156
|
+
const raw = asText(getPath(item, source.time), empty);
|
|
157
|
+
return raw === undefined ? undefined : normalizeTimeText(raw, now);
|
|
158
|
+
}
|
|
159
|
+
const joined = source;
|
|
160
|
+
const parts = joined.join.map(part => joinPart(part, item, empty, now)).filter((v) => v !== undefined);
|
|
161
|
+
return parts.length ? parts.join(joined.sep ?? ' | ') : undefined;
|
|
162
|
+
}
|
|
163
|
+
function firstArray(value) {
|
|
164
|
+
if (Array.isArray(value))
|
|
165
|
+
return value;
|
|
166
|
+
if (!isObject(value))
|
|
167
|
+
return undefined;
|
|
168
|
+
for (const entry of Object.values(value))
|
|
169
|
+
if (Array.isArray(entry))
|
|
170
|
+
return entry;
|
|
171
|
+
const data = value.data;
|
|
172
|
+
if (isObject(data))
|
|
173
|
+
for (const entry of Object.values(data))
|
|
174
|
+
if (Array.isArray(entry))
|
|
175
|
+
return entry;
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
/** The label of a spec in messages (`bili`). */
|
|
179
|
+
const labelOf = (spec) => spec.bins[0];
|
|
180
|
+
/** A title that is only a YAML-style field name (`profileImageUrl:`). */
|
|
181
|
+
const KEY_LABEL = /^[A-Za-z_][\w.-]*:$/;
|
|
182
|
+
const YAML_LINE = /^\s*(- )?[A-Za-z_][\w.-]*:(\s|$)/;
|
|
183
|
+
/**
|
|
184
|
+
* Whether the whole stdout of a text-mode command is a JSON object / array or a YAML mapping / sequence document: the tool then
|
|
185
|
+
* printed a structured format the text parsers must not guess at (twitter-cli prints YAML when piped, issue #38).
|
|
186
|
+
*/
|
|
187
|
+
export function structuredKind(text) {
|
|
188
|
+
const trimmed = text.trim();
|
|
189
|
+
if (/^[[{]/.test(trimmed)) {
|
|
190
|
+
try {
|
|
191
|
+
const value = JSON.parse(trimmed);
|
|
192
|
+
if (value !== null && typeof value === 'object')
|
|
193
|
+
return 'JSON';
|
|
194
|
+
}
|
|
195
|
+
catch { /* not JSON */ }
|
|
196
|
+
}
|
|
197
|
+
const lines = trimmed.split(/\r?\n/).filter(line => line.trim() && !/^\s*#/.test(line));
|
|
198
|
+
if (lines.length >= 3 && lines.filter(line => YAML_LINE.test(line)).length * 2 > lines.length)
|
|
199
|
+
return 'YAML';
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Parse a tool's stdout into the items its output spec describes. A broken payload is CLI_CONTRACT_MISMATCH (the tool is not
|
|
204
|
+
* what the spec says); a payload that says it failed (`expect` not met) is CLI_FAILED with the tool's own message.
|
|
205
|
+
*/
|
|
206
|
+
export function parseCliItems(spec, output, stdout) {
|
|
207
|
+
const label = labelOf(spec);
|
|
208
|
+
const text = stdout.replace(/^/, '');
|
|
209
|
+
if (output.format === 'text') {
|
|
210
|
+
const structured = structuredKind(text);
|
|
211
|
+
if (structured) {
|
|
212
|
+
throw new CliAdapterError(label + ' printed ' + structured + ' output, but this adapter reads plain text lines: use format json / yaml with the tool\'s explicit output flag instead', 'CLI_CONTRACT_MISMATCH', 'the tool\'s default output differs from what the adapter parses (a tool often prints YAML or JSON when piped): ask it for json explicitly, e.g. --json');
|
|
213
|
+
}
|
|
214
|
+
const lines = text.split(/\r?\n/);
|
|
215
|
+
if (output.lines?.mode === 'url-lines') {
|
|
216
|
+
const items = [];
|
|
217
|
+
for (const line of lines) {
|
|
218
|
+
const m = /(https?:\/\/[^\s]+)/.exec(line);
|
|
219
|
+
if (!m)
|
|
220
|
+
continue;
|
|
221
|
+
const title = stripTags(line).replace(m[1], '').trim();
|
|
222
|
+
// A bare `key:` label is a field name of a structured dump, not a result.
|
|
223
|
+
if (title && !KEY_LABEL.test(title))
|
|
224
|
+
items.push({ url: m[1], title });
|
|
225
|
+
}
|
|
226
|
+
return items;
|
|
227
|
+
}
|
|
228
|
+
const columns = output.lines?.mode === 'tsv' ? output.lines.columns : [];
|
|
229
|
+
// A record has at least two cells; a notice or progress line on stdout (no tab) is not one.
|
|
230
|
+
return lines.filter(line => line.includes('\t')).map(line => Object.fromEntries(line.split('\t').map((cell, index) => [columns[index] ?? 'c' + index, cell])));
|
|
231
|
+
}
|
|
232
|
+
// A web page where data was expected (a login wall, a risk-control or captcha page, a proxy error page): the site did not answer with data.
|
|
233
|
+
if ((output.format === 'json' || output.format === 'yaml') && /^\s*<(?:!doctype|html|head|body|\?xml)/i.test(text))
|
|
234
|
+
throw blockedPageError(label, 'it printed a web page (HTML)');
|
|
235
|
+
let parsed;
|
|
236
|
+
if (output.format === 'ndjson') {
|
|
237
|
+
const rows = [];
|
|
238
|
+
for (const line of text.split(/\r?\n/)) {
|
|
239
|
+
if (!line.trim())
|
|
240
|
+
continue;
|
|
241
|
+
try {
|
|
242
|
+
rows.push(JSON.parse(line));
|
|
243
|
+
}
|
|
244
|
+
catch { /* a progress or log line between records */ }
|
|
245
|
+
}
|
|
246
|
+
if (!rows.length && text.trim())
|
|
247
|
+
throw new CliAdapterError(label + ' output is not valid UTF-8 NDJSON', 'CLI_CONTRACT_MISMATCH', 'the installed ' + label + ' does not match this adapter: check `sources.deps`');
|
|
248
|
+
return rows;
|
|
249
|
+
}
|
|
250
|
+
if (output.format === 'yaml') {
|
|
251
|
+
try {
|
|
252
|
+
parsed = jsYaml.load(text);
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
throw new CliAdapterError(label + ' output is not valid YAML', 'CLI_CONTRACT_MISMATCH', 'the installed ' + label + ' does not match this adapter: check `sources.deps`');
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
try {
|
|
260
|
+
parsed = JSON.parse(text);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
throw new CliAdapterError(label + ' output is not valid UTF-8 JSON', 'CLI_CONTRACT_MISMATCH', 'the installed ' + label + ' does not match this adapter: check `sources.deps`');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
for (const rule of output.expect ?? []) {
|
|
267
|
+
if (getPath(parsed, rule.path) !== rule.equals) {
|
|
268
|
+
const detail = (output.errorPaths ?? []).map(p => asText(getPath(parsed, p), new Set())).find(v => v !== undefined);
|
|
269
|
+
if (detail)
|
|
270
|
+
throw new CliAdapterError(label + ' search failed: ' + capText(detail, 200), 'CLI_FAILED');
|
|
271
|
+
throw new CliAdapterError(label + ' search failed: unexpected response envelope', 'CLI_CONTRACT_MISMATCH', 'the installed ' + label + ' does not match this adapter: check `sources.deps`');
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
const items = output.itemsPath !== undefined ? getPath(parsed, output.itemsPath) : firstArray(parsed);
|
|
275
|
+
if (!Array.isArray(items))
|
|
276
|
+
throw new CliAdapterError(label + ' output has no result list' + (output.itemsPath ? ' at ' + output.itemsPath : ''), 'CLI_CONTRACT_MISMATCH', 'the installed ' + label + ' does not match this adapter: check `sources.deps`');
|
|
277
|
+
return items;
|
|
278
|
+
}
|
|
279
|
+
const BLOCKED_TEXT = 'the site returned a web page instead of data, or blocked the request (站点返回了网页而不是数据,可能是风控、IP 被拦或需要登录)';
|
|
280
|
+
const BLOCKED_HINT = 'open the site in your own Chrome and check that it loads and you are logged in, without a verification page; a proxied or shared IP address is often blocked: try another network exit or retry later, or use the next backend of the chain (platformBackends)';
|
|
281
|
+
/** The failure for a web page or a block where data was expected: said as such, with what the user can check. */
|
|
282
|
+
function blockedPageError(label, detail) {
|
|
283
|
+
return new CliAdapterError(label + ': ' + BLOCKED_TEXT + '; ' + detail, 'CLI_FAILED', BLOCKED_HINT, true);
|
|
284
|
+
}
|
|
285
|
+
/** The failure payload (`ok: false`, `error: { code, message }`) a tool prints on stderr or stdout: JSON, or a YAML document after any notices. */
|
|
286
|
+
export function parseFailurePayload(text) {
|
|
287
|
+
const trimmed = text.trim();
|
|
288
|
+
if (!trimmed)
|
|
289
|
+
return undefined;
|
|
290
|
+
if (trimmed.startsWith('{')) {
|
|
291
|
+
try {
|
|
292
|
+
return JSON.parse(trimmed);
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
return undefined;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
const start = /^ok:\s*false\s*$/m.exec(trimmed);
|
|
299
|
+
if (!start)
|
|
300
|
+
return undefined;
|
|
301
|
+
// The document ends at the first blank line (an update notice or a hint can follow it).
|
|
302
|
+
const block = trimmed.slice(start.index).split(/\r?\n\s*\r?\n/)[0];
|
|
303
|
+
try {
|
|
304
|
+
const parsed = jsYaml.load(block);
|
|
305
|
+
return isObject(parsed) ? parsed : undefined;
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
return undefined;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* A failed command run (non-zero exit) as the structured error its own code and message call for, or undefined when the
|
|
313
|
+
* spec lists no codes or the output carries nothing readable (the generic handling then applies).
|
|
314
|
+
*/
|
|
315
|
+
export function mapToolFailure(codes, result, spec, redact = text => text) {
|
|
316
|
+
if (!codes)
|
|
317
|
+
return undefined;
|
|
318
|
+
const label = labelOf(spec);
|
|
319
|
+
const payload = parseFailurePayload(result.stderr) ?? parseFailurePayload(result.stdout);
|
|
320
|
+
const code = payload === undefined ? undefined : asText(getPath(payload, codes.codePath), new Set());
|
|
321
|
+
const message = payload === undefined || !codes.messagePath ? undefined : asText(getPath(payload, codes.messagePath), new Set());
|
|
322
|
+
const shown = message ? redact(capText(message, 200)) : undefined;
|
|
323
|
+
const has = (list) => code !== undefined && !!list?.includes(code);
|
|
324
|
+
const notLoggedIn = () => new CliAdapterError(label + ' is not logged in' + (shown ? ': ' + shown : ''), 'CLI_NOT_LOGGED_IN', loginHint(spec));
|
|
325
|
+
if (has(codes.notLoggedIn))
|
|
326
|
+
return notLoggedIn();
|
|
327
|
+
if (has(codes.empty))
|
|
328
|
+
return new EngineError(label + ' returned no results', 'ENGINE_EMPTY', false);
|
|
329
|
+
if (has(codes.blocked) || (message !== undefined && includesAny(message, codes.blockedPatterns)))
|
|
330
|
+
return blockedPageError(label, (code ? code + ': ' : '') + (shown ?? 'no message'));
|
|
331
|
+
if (has(codes.unavailable))
|
|
332
|
+
return new CliAdapterError(label + ' could not reach its browser: ' + (shown ?? code), 'CLI_FAILED', 'check that the browser the tool drives is running and its bridge / extension is connected (opencli: OpenCLI Browser Bridge in your own Chrome; `opencli doctor` checks it)', false);
|
|
333
|
+
if (has(codes.timeout))
|
|
334
|
+
return new EngineError(label + ' timed out' + (shown ? ': ' + shown : ''), 'ENGINE_TIMEOUT', true);
|
|
335
|
+
if (has(codes.usage))
|
|
336
|
+
return new CliAdapterError(label + ' rejected the command arguments of this adapter: ' + (shown ?? code), 'CLI_CONTRACT_MISMATCH', 'the installed ' + label + ' does not match this adapter: check `sources.deps`');
|
|
337
|
+
if (code === undefined && codes.notLoggedInExit?.includes(result.code))
|
|
338
|
+
return notLoggedIn();
|
|
339
|
+
if (code !== undefined || shown !== undefined)
|
|
340
|
+
return new CliAdapterError(label + ' search failed: ' + (code ? '[' + code + '] ' : '') + (shown ?? 'no message'), 'CLI_FAILED', undefined, true);
|
|
341
|
+
return undefined;
|
|
342
|
+
}
|
|
343
|
+
/** The tool's own error text from a parsed json / yaml payload (`errorPaths`), when it carries one. */
|
|
344
|
+
export function payloadError(output, stdout) {
|
|
345
|
+
if (!output.errorPaths?.length || (output.format !== 'json' && output.format !== 'yaml'))
|
|
346
|
+
return undefined;
|
|
347
|
+
try {
|
|
348
|
+
const parsed = output.format === 'json' ? JSON.parse(stdout.replace(/^\uFEFF/, '')) : jsYaml.load(stdout);
|
|
349
|
+
return output.errorPaths.map(p => asText(getPath(parsed, p), new Set())).find(v => v !== undefined);
|
|
350
|
+
}
|
|
351
|
+
catch {
|
|
352
|
+
return undefined;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Strip markup from a field. Highlight tags (`<em>备案</em>`) vanish without leaving a space (Chinese words must not be split),
|
|
357
|
+
* block-level tags become a space, entities are decoded.
|
|
358
|
+
*/
|
|
359
|
+
export function stripMarkup(input) {
|
|
360
|
+
return htmlDecode(input.replace(/<\/?(?:p|div|br|li|ul|ol|tr|td|th|h[1-6]|section|article|blockquote)\b[^>]*>/gi, ' ').replace(/<[^>]*>/g, '')).replace(/\s+/g, ' ').trim();
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Map parsed items to sources by the output spec: http(s) URLs only, snippets and titles capped, tags stripped when asked.
|
|
364
|
+
* `skipped` counts the items (objects) that had no usable link, so the caller can say so instead of silently returning fewer.
|
|
365
|
+
*/
|
|
366
|
+
export function mapCliItemsDetailed(output, items, count, now = Date.now()) {
|
|
367
|
+
const empty = new Set(output.emptyValues ?? []);
|
|
368
|
+
const clean = (text) => (text === undefined ? undefined : output.stripTags ? stripMarkup(text) : text);
|
|
369
|
+
const sources = [];
|
|
370
|
+
let skipped = 0;
|
|
371
|
+
for (const item of items) {
|
|
372
|
+
if (!isObject(item))
|
|
373
|
+
continue;
|
|
374
|
+
if (output.skipWhen && getPath(item, output.skipWhen.path) === output.skipWhen.equals)
|
|
375
|
+
continue;
|
|
376
|
+
const fields = output.fields ?? {};
|
|
377
|
+
const url = resolveField(fields.url, item, empty, now);
|
|
378
|
+
if (!url || !/^https?:\/\//i.test(url)) {
|
|
379
|
+
skipped++;
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
// A title is one line: a multi-line body (a tweet) is folded.
|
|
383
|
+
const rawTitle = clean(resolveField(fields.title, item, empty, now))?.replace(/\s+/g, ' ').trim();
|
|
384
|
+
const title = rawTitle ? capText(rawTitle, output.titleMax ?? 300) : undefined;
|
|
385
|
+
if (output.requireTitle && !title)
|
|
386
|
+
continue;
|
|
387
|
+
const snippet = clean(resolveField(fields.snippet, item, empty, now));
|
|
388
|
+
const publishedAt = resolveField(fields.publishedAt, item, empty, now);
|
|
389
|
+
sources.push({
|
|
390
|
+
url,
|
|
391
|
+
...title ? { title } : {},
|
|
392
|
+
...snippet ? { snippet: capText(snippet, output.snippetMax ?? 400) } : {},
|
|
393
|
+
...publishedAt ? { publishedAt } : {},
|
|
394
|
+
});
|
|
395
|
+
if (sources.length >= count)
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
return { sources, skipped };
|
|
399
|
+
}
|
|
400
|
+
export function mapCliItems(output, items, count, now) {
|
|
401
|
+
return mapCliItemsDetailed(output, items, count, now).sources;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* The result of a `lines: { mode: 'whole' }` command: the whole stdout as ONE source. The text is cut at `maxChars` with a note that
|
|
405
|
+
* says how much was shown; the title is "<id>: <query>"; the link is the stand-in `cli://<id>?q=<query>` (it is no web page, so the
|
|
406
|
+
* evidence pipeline lists it but never fetches it). Undefined when the tool printed nothing.
|
|
407
|
+
*/
|
|
408
|
+
export function wholeOutputSource(spec, output, query, stdout) {
|
|
409
|
+
const text = stdout.replace(/^\uFEFF/, '').replace(/\r\n?/g, '\n').trim();
|
|
410
|
+
if (!text)
|
|
411
|
+
return undefined;
|
|
412
|
+
const max = output.lines?.mode === 'whole' ? output.lines.maxChars ?? WHOLE_OUTPUT_DEFAULT_CHARS : WHOLE_OUTPUT_DEFAULT_CHARS;
|
|
413
|
+
const shown = text.length > max ? text.slice(0, max).trimEnd() + '\n… [truncated: ' + max + ' of ' + text.length + ' characters shown]' : text;
|
|
414
|
+
const shortQuery = query.replace(/\s+/g, ' ').trim();
|
|
415
|
+
return { url: WHOLE_OUTPUT_SCHEME + spec.id + '?q=' + encodeURIComponent(shortQuery.slice(0, 200)), title: capText(spec.id + ': ' + shortQuery, 300), snippet: shown };
|
|
416
|
+
}
|
|
417
|
+
/** Parse and map in one go (what the fixtures tests call). */
|
|
418
|
+
export function parseCliOutput(spec, search, stdout, count = 20, now) {
|
|
419
|
+
return mapCliItems(search.output, parseCliItems(spec, search.output, stdout), count, now);
|
|
420
|
+
}
|
|
421
|
+
// ── argv ────────────────────────────────────────────────────────────────────
|
|
422
|
+
/** Largest number of words `{terms}` expands to (more are folded into the last one). */
|
|
423
|
+
const MAX_TERMS = 16;
|
|
424
|
+
/** Split a query into words; double quotes keep a phrase in one word (`a "b c" d` -> `a`, `b c`, `d`) and are dropped. */
|
|
425
|
+
export function splitTerms(query) {
|
|
426
|
+
const terms = [];
|
|
427
|
+
let current = '';
|
|
428
|
+
let quoted = false;
|
|
429
|
+
for (const ch of query) {
|
|
430
|
+
if (ch === '"')
|
|
431
|
+
quoted = !quoted;
|
|
432
|
+
else if (!quoted && /\s/.test(ch)) {
|
|
433
|
+
if (current)
|
|
434
|
+
terms.push(current);
|
|
435
|
+
current = '';
|
|
436
|
+
}
|
|
437
|
+
else
|
|
438
|
+
current += ch;
|
|
439
|
+
}
|
|
440
|
+
if (current)
|
|
441
|
+
terms.push(current);
|
|
442
|
+
return terms.length > MAX_TERMS ? [...terms.slice(0, MAX_TERMS - 1), terms.slice(MAX_TERMS - 1).join(' ')] : terms;
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Fill the placeholders of an argv template. A value that would read as a flag gets a leading space (the tool then takes it as the query)
|
|
446
|
+
* unless a `--` precedes it. A `{terms}` token becomes one token per word of the query.
|
|
447
|
+
*/
|
|
448
|
+
export function buildArgv(search, input) {
|
|
449
|
+
// The tool is asked for `overfetch` more than the count; the mapper cuts back to the count.
|
|
450
|
+
const count = Math.min(Math.max(Math.trunc(input.count) || 1, 1), search.maxCount ?? 50) + (search.overfetch ?? 0);
|
|
451
|
+
const dashdash = (index) => search.argv.slice(0, index).includes('--');
|
|
452
|
+
const guard = (value, index) => (value.startsWith('-') && !dashdash(index) ? ' ' + value : value);
|
|
453
|
+
return search.argv.flatMap((token, index) => {
|
|
454
|
+
const withCount = token.replace(/\{count\}/g, () => String(count));
|
|
455
|
+
if (withCount === '{terms}') {
|
|
456
|
+
const terms = splitTerms(input.query);
|
|
457
|
+
return (terms.length ? terms : [input.query]).map(term => guard(term, index));
|
|
458
|
+
}
|
|
459
|
+
if (withCount === '{query}' || withCount === '{url}')
|
|
460
|
+
return [guard(input.query, index)];
|
|
461
|
+
return [withCount.replace(/\{(?:query|url)\}/g, () => input.query)];
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
function redactor(spec, source) {
|
|
465
|
+
const secrets = [...spec.env.required ?? [], ...spec.env.passthrough ?? []].map(name => source[name]).filter((v) => typeof v === 'string' && v.length >= 6);
|
|
466
|
+
return text => secrets.reduce((acc, secret) => acc.split(secret).join('[redacted]'), text);
|
|
467
|
+
}
|
|
468
|
+
const includesAny = (text, fragments) => {
|
|
469
|
+
const lower = text.toLowerCase();
|
|
470
|
+
return !!fragments?.some(fragment => lower.includes(fragment.toLowerCase()));
|
|
471
|
+
};
|
|
472
|
+
/**
|
|
473
|
+
* Run one spec command for a query and return its sources. Throws {@link CliAdapterError} (CLI_NOT_FOUND,
|
|
474
|
+
* CLI_CONTRACT_MISMATCH, CLI_NOT_LOGGED_IN, CLI_FAILED), ENGINE_EMPTY for a valid empty answer, ENGINE_TIMEOUT, or the
|
|
475
|
+
* abort reason when the caller's signal fires. Nothing is run when the spec's credentials are missing.
|
|
476
|
+
*/
|
|
477
|
+
export async function runCliSearch(spec, input, options = {}) {
|
|
478
|
+
return (await runCliSearchDetailed(spec, input, options)).sources;
|
|
479
|
+
}
|
|
480
|
+
/** {@link runCliSearch} that also reports how many results had no usable link and were skipped. */
|
|
481
|
+
export async function runCliSearchDetailed(spec, input, options = {}) {
|
|
482
|
+
const operation = options.operation ?? 'search';
|
|
483
|
+
const search = operation === 'read' ? spec.read : searchSpecFor(spec, options.platform ?? spec.platforms[0] ?? '');
|
|
484
|
+
const label = labelOf(spec);
|
|
485
|
+
if (!search)
|
|
486
|
+
throw new CliAdapterError(label + ' has no ' + operation + ' command in this adapter', 'CLI_CONTRACT_MISMATCH');
|
|
487
|
+
const source = options.env ?? process.env;
|
|
488
|
+
const redact = redactor(spec, source);
|
|
489
|
+
if (!options.skipCredentialGate) {
|
|
490
|
+
const missing = missingEnv(spec, source);
|
|
491
|
+
if (missing.length)
|
|
492
|
+
throw new CliAdapterError(label + ' is not logged in: ' + missing.join(' / ') + ' not set', 'CLI_NOT_LOGGED_IN', loginHint(spec));
|
|
493
|
+
if (savedLoginPresent(spec, options) === false) {
|
|
494
|
+
throw new CliAdapterError(label + ' has no saved login' + (spec.login?.readsBrowserCookiesWithoutLogin ? ' (it would read your browser cookies by itself, so it is not run)' : ''), 'CLI_NOT_LOGGED_IN', loginHint(spec));
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
const argv = buildArgv(search, input);
|
|
498
|
+
const run = options.run ?? runCli;
|
|
499
|
+
const result = await run(options.bin ?? spec.bins[0], argv, {
|
|
500
|
+
timeoutMs: spec.timeoutMs,
|
|
501
|
+
signal: input.signal,
|
|
502
|
+
env: buildCliEnv(spec, source),
|
|
503
|
+
cleanEnv: true,
|
|
504
|
+
maxOutput: spec.maxOutputBytes,
|
|
505
|
+
outputEncoding: 'utf-8',
|
|
506
|
+
});
|
|
507
|
+
if (input.signal?.aborted)
|
|
508
|
+
throw input.signal.reason ?? new DOMException('This operation was aborted', 'AbortError');
|
|
509
|
+
options.observe?.({ code: result.code, stdout: redact(result.stdout), stderr: redact(result.stderr) });
|
|
510
|
+
if (result.spawnFailed || (result.code === -1 && !result.timedOut && !result.stderr.trim() && !result.stdout.trim())) {
|
|
511
|
+
throw new CliAdapterError('the ' + label + ' command could not be started: install it (' + spec.packageNote + ')', 'CLI_NOT_FOUND', 'install: ' + spec.packageNote);
|
|
512
|
+
}
|
|
513
|
+
if (result.timedOut)
|
|
514
|
+
throw new EngineError(label + ' timed out after ' + Math.round(spec.timeoutMs / 1000) + 's', 'ENGINE_TIMEOUT', true);
|
|
515
|
+
if (result.truncated)
|
|
516
|
+
throw new CliAdapterError(label + ' output exceeded the ' + spec.maxOutputBytes + ' byte cap', 'CLI_FAILED', 'raise maxOutputBytes of the adapter or ask for fewer results');
|
|
517
|
+
const combined = result.stderr + '\n' + result.stdout;
|
|
518
|
+
const notLoggedIn = () => new CliAdapterError(label + ' is not logged in', 'CLI_NOT_LOGGED_IN', loginHint(spec));
|
|
519
|
+
if (result.code !== 0) {
|
|
520
|
+
// The tool's own error code, when the spec knows its failure format.
|
|
521
|
+
const mapped = mapToolFailure(search.errorCodes, result, spec, redact);
|
|
522
|
+
if (mapped)
|
|
523
|
+
throw mapped;
|
|
524
|
+
if (includesAny(combined, search.notLoggedInPatterns))
|
|
525
|
+
throw notLoggedIn();
|
|
526
|
+
if (includesAny(combined, search.emptyWhen))
|
|
527
|
+
throw new EngineError(label + ' returned no results', 'ENGINE_EMPTY', false);
|
|
528
|
+
// A tool that answers failures in its machine-readable format (`{ ok: false, error: { message } }`) is quoted by that message, not by the raw payload.
|
|
529
|
+
const own = payloadError(search.output, result.stdout);
|
|
530
|
+
throw new CliAdapterError(label + ' ' + operation + ' failed: ' + redact(capText((own ?? (result.stderr.trim() || result.stdout.trim() || 'exit ' + result.code)), 200)), 'CLI_FAILED', undefined, true);
|
|
531
|
+
}
|
|
532
|
+
let sources;
|
|
533
|
+
let skipped = 0;
|
|
534
|
+
if (search.output.lines?.mode === 'whole') {
|
|
535
|
+
const whole = wholeOutputSource(spec, search.output, input.query, redact(result.stdout));
|
|
536
|
+
if (!whole || includesAny(result.stdout, search.emptyWhen))
|
|
537
|
+
throw new EngineError(label + ' returned no results' + (whole ? '' : ' (it printed nothing)'), 'ENGINE_EMPTY', false);
|
|
538
|
+
return { sources: [whole], skipped: 0 };
|
|
539
|
+
}
|
|
540
|
+
try {
|
|
541
|
+
const items = parseCliItems(spec, search.output, result.stdout);
|
|
542
|
+
({ sources, skipped } = mapCliItemsDetailed(search.output, items, Math.min(Math.max(Math.trunc(input.count) || 1, 1), search.maxCount ?? input.count), options.now));
|
|
543
|
+
}
|
|
544
|
+
catch (error) {
|
|
545
|
+
if (error instanceof CliAdapterError && error.code === 'CLI_FAILED' && includesAny(combined, search.notLoggedInPatterns))
|
|
546
|
+
throw notLoggedIn();
|
|
547
|
+
if (error instanceof CliAdapterError)
|
|
548
|
+
throw new CliAdapterError(redact(error.message), error.code, error.hint, error.retryable);
|
|
549
|
+
throw error;
|
|
550
|
+
}
|
|
551
|
+
if (!sources.length) {
|
|
552
|
+
if (includesAny(combined, search.notLoggedInPatterns))
|
|
553
|
+
throw notLoggedIn();
|
|
554
|
+
if (includesAny(combined, search.emptyWhen))
|
|
555
|
+
throw new EngineError(label + ' returned no results', 'ENGINE_EMPTY', false);
|
|
556
|
+
// A payload that carries the tool's own error list (omnireach `errors`) and no results is a failure, not an empty answer.
|
|
557
|
+
const detail = payloadError(search.output, result.stdout);
|
|
558
|
+
if (detail)
|
|
559
|
+
throw new CliAdapterError(label + ' ' + operation + ' failed: ' + redact(capText(detail, 200)), 'CLI_FAILED', undefined, true);
|
|
560
|
+
throw new EngineError(label + ' returned no results', 'ENGINE_EMPTY', false);
|
|
561
|
+
}
|
|
562
|
+
return { sources, skipped };
|
|
563
|
+
}
|
|
564
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
|