webfox 0.0.0-test.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +256 -3
- package/assets/webfox-lockup-dark.png +0 -0
- package/assets/webfox-lockup.png +0 -0
- package/dist/adapter-2YBFCBCZ.js +161 -0
- package/dist/adapter-67TIISDW.js +753 -0
- package/dist/adapter-AB7LKV7N.js +324 -0
- package/dist/adapter-AUYLTDPM.js +73 -0
- package/dist/adapter-HITGYUXN.js +494 -0
- package/dist/adapter-HPTMLH75.js +334 -0
- package/dist/adapter-I6OUKBZQ.js +492 -0
- package/dist/adapter-ISZQTZDP.js +166 -0
- package/dist/adapter-MAG7X663.js +230 -0
- package/dist/adapter-NEXSOHGT.js +232 -0
- package/dist/adapter-PADXKW43.js +162 -0
- package/dist/adapter-SDQX2533.js +123 -0
- package/dist/adapter-UAZNLDSS.js +237 -0
- package/dist/adapter-XBAQSK7I.js +282 -0
- package/dist/application-types.d.ts +34 -0
- package/dist/application.d.ts +2 -0
- package/dist/chunk-EF4VMDZL.js +85 -0
- package/dist/chunk-G2YAQEET.js +38 -0
- package/dist/chunk-I2UIACY3.js +12 -0
- package/dist/chunk-L425U55P.js +3051 -0
- package/dist/chunk-QRHDXM2L.js +31 -0
- package/dist/chunk-SMF5ALX7.js +762 -0
- package/dist/chunk-U4BLULLV.js +52 -0
- package/dist/chunk-WCTOYZVB.js +85 -0
- package/dist/chunk-X6ZBIHZC.js +21 -0
- package/dist/chunk-YZXM4U2C.js +21 -0
- package/dist/chunk-ZVTVERW5.js +20 -0
- package/dist/cli.js +641 -0
- package/dist/config.schema.json +4270 -0
- package/dist/configuration/defaults.d.ts +3 -0
- package/dist/configuration/file.d.ts +17 -0
- package/dist/configuration/options-schema.d.ts +2 -0
- package/dist/configuration/planning.d.ts +10 -0
- package/dist/configuration/schema.d.ts +9 -0
- package/dist/configuration/types.d.ts +37 -0
- package/dist/contents.d.ts +19 -0
- package/dist/domain.d.ts +89 -0
- package/dist/errors.d.ts +17 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +38 -0
- package/dist/package-metadata.d.ts +3 -0
- package/dist/pi-keybindings.d.ts +1 -0
- package/dist/pi-params.d.ts +3 -0
- package/dist/pi-render.d.ts +50 -0
- package/dist/pi-search-render.d.ts +4 -0
- package/dist/pi-text.d.ts +4 -0
- package/dist/pi-validation.d.ts +4 -0
- package/dist/pi.d.ts +2 -0
- package/dist/pi.js +563 -0
- package/dist/providers/brave/adapter.d.ts +7 -0
- package/dist/providers/brave/definition.d.ts +1 -0
- package/dist/providers/brave/types.d.ts +4 -0
- package/dist/providers/cli-json.d.ts +9 -0
- package/dist/providers/cloudflare/adapter.d.ts +5 -0
- package/dist/providers/cloudflare/definition.d.ts +1 -0
- package/dist/providers/cloudflare/types.d.ts +4 -0
- package/dist/providers/contract.d.ts +88 -0
- package/dist/providers/custom/adapter.d.ts +9 -0
- package/dist/providers/custom/definition.d.ts +1 -0
- package/dist/providers/custom/types.d.ts +9 -0
- package/dist/providers/definition.d.ts +32 -0
- package/dist/providers/exa/adapter.d.ts +8 -0
- package/dist/providers/exa/definition.d.ts +1 -0
- package/dist/providers/exa/types.d.ts +4 -0
- package/dist/providers/firecrawl/adapter.d.ts +7 -0
- package/dist/providers/firecrawl/definition.d.ts +1 -0
- package/dist/providers/firecrawl/types.d.ts +4 -0
- package/dist/providers/gemini/adapter.d.ts +14 -0
- package/dist/providers/gemini/definition.d.ts +1 -0
- package/dist/providers/gemini/types.d.ts +3 -0
- package/dist/providers/linkup/adapter.d.ts +7 -0
- package/dist/providers/linkup/definition.d.ts +1 -0
- package/dist/providers/linkup/types.d.ts +4 -0
- package/dist/providers/metadata.d.ts +15 -0
- package/dist/providers/ollama/adapter.d.ts +6 -0
- package/dist/providers/ollama/definition.d.ts +1 -0
- package/dist/providers/ollama/types.d.ts +4 -0
- package/dist/providers/openai/adapter.d.ts +7 -0
- package/dist/providers/openai/definition.d.ts +1 -0
- package/dist/providers/openai/types.d.ts +28 -0
- package/dist/providers/parallel/adapter.d.ts +6 -0
- package/dist/providers/parallel/definition.d.ts +1 -0
- package/dist/providers/parallel/types.d.ts +4 -0
- package/dist/providers/perplexity/adapter.d.ts +7 -0
- package/dist/providers/perplexity/definition.d.ts +1 -0
- package/dist/providers/perplexity/types.d.ts +4 -0
- package/dist/providers/registry.d.ts +16 -0
- package/dist/providers/serper/adapter.d.ts +5 -0
- package/dist/providers/serper/definition.d.ts +1 -0
- package/dist/providers/serper/types.d.ts +21 -0
- package/dist/providers/shared.d.ts +4 -0
- package/dist/providers/tavily/adapter.d.ts +6 -0
- package/dist/providers/tavily/definition.d.ts +1 -0
- package/dist/providers/tavily/types.d.ts +4 -0
- package/dist/providers/valyu/adapter.d.ts +8 -0
- package/dist/providers/valyu/definition.d.ts +1 -0
- package/dist/providers/valyu/types.d.ts +4 -0
- package/dist/render.d.ts +5 -0
- package/dist/runtime/credentials.d.ts +15 -0
- package/dist/runtime/duration.d.ts +2 -0
- package/dist/runtime/execute.d.ts +20 -0
- package/dist/runtime/lifecycle.d.ts +8 -0
- package/dist/runtime/outward.d.ts +11 -0
- package/dist/runtime/polling.d.ts +13 -0
- package/dist/runtime/process.d.ts +4 -0
- package/docs/cli-experience.md +177 -0
- package/docs/provider.md +177 -0
- package/docs/reference.md +181 -0
- package/example-config.yaml +36 -0
- package/examples/custom/README.md +57 -0
- package/examples/custom/provider.mjs +54 -0
- package/examples/custom/webfox.json +18 -0
- package/package.json +122 -8
- package/index.js +0 -2
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// src/errors.ts
|
|
2
|
+
var WebfoxError = class extends Error {
|
|
3
|
+
constructor(code, message, options = {}) {
|
|
4
|
+
super(
|
|
5
|
+
message,
|
|
6
|
+
options.cause === void 0 ? void 0 : { cause: options.cause }
|
|
7
|
+
);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.options = options;
|
|
10
|
+
}
|
|
11
|
+
code;
|
|
12
|
+
options;
|
|
13
|
+
name = "WebfoxError";
|
|
14
|
+
toJSON() {
|
|
15
|
+
return {
|
|
16
|
+
code: this.code,
|
|
17
|
+
message: this.message,
|
|
18
|
+
...this.options.retryable === void 0 ? {} : { retryable: this.options.retryable }
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
function asWebfoxError(error) {
|
|
23
|
+
if (error instanceof WebfoxError) return error;
|
|
24
|
+
const record = error && typeof error === "object" ? error : {};
|
|
25
|
+
const message = typeof record.message === "string" ? record.message : String(error);
|
|
26
|
+
if (record.name === "AbortError" || record.name === "APIUserAbortError")
|
|
27
|
+
return new WebfoxError("CANCELLED", message);
|
|
28
|
+
if (record.name === "TimeoutError" || record.name === "RequestTimeoutError" || record.name === "APIConnectionTimeoutError")
|
|
29
|
+
return new WebfoxError("TIMEOUT", message, { retryable: true });
|
|
30
|
+
const status = record.status ?? record.statusCode;
|
|
31
|
+
const cause = record.cause && typeof record.cause === "object" ? record.cause : {};
|
|
32
|
+
const retryable = typeof status === "number" && [408, 429, 500, 502, 503, 504].includes(status) || [
|
|
33
|
+
"ECONNRESET",
|
|
34
|
+
"EHOSTUNREACH",
|
|
35
|
+
"EAI_AGAIN",
|
|
36
|
+
"ETIMEDOUT",
|
|
37
|
+
"UND_ERR_CONNECT_TIMEOUT",
|
|
38
|
+
"UND_ERR_SOCKET"
|
|
39
|
+
].includes(String(record.code ?? cause.code)) || record.name === "APIConnectionError";
|
|
40
|
+
return new WebfoxError("PROVIDER_FAILURE", message, { retryable });
|
|
41
|
+
}
|
|
42
|
+
function httpError(response, message) {
|
|
43
|
+
return new WebfoxError("PROVIDER_FAILURE", message, {
|
|
44
|
+
retryable: [408, 429, 500, 502, 503, 504].includes(response.status)
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export {
|
|
49
|
+
WebfoxError,
|
|
50
|
+
asWebfoxError,
|
|
51
|
+
httpError
|
|
52
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import {
|
|
2
|
+
WebfoxError
|
|
3
|
+
} from "./chunk-U4BLULLV.js";
|
|
4
|
+
|
|
5
|
+
// src/runtime/lifecycle.ts
|
|
6
|
+
function deadline(timeoutMs, parent) {
|
|
7
|
+
const controller = new AbortController();
|
|
8
|
+
const abort = () => controller.abort(new WebfoxError("CANCELLED", "Operation cancelled."));
|
|
9
|
+
if (parent?.aborted) abort();
|
|
10
|
+
else parent?.addEventListener("abort", abort, { once: true });
|
|
11
|
+
const timer = setTimeout(
|
|
12
|
+
() => controller.abort(
|
|
13
|
+
new WebfoxError(
|
|
14
|
+
"TIMEOUT",
|
|
15
|
+
`Operation exceeded its ${formatDuration(timeoutMs)} overall deadline.`
|
|
16
|
+
)
|
|
17
|
+
),
|
|
18
|
+
timeoutMs
|
|
19
|
+
);
|
|
20
|
+
return {
|
|
21
|
+
signal: controller.signal,
|
|
22
|
+
dispose() {
|
|
23
|
+
clearTimeout(timer);
|
|
24
|
+
parent?.removeEventListener("abort", abort);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function formatDuration(ms) {
|
|
29
|
+
const [unit, divisor] = ms >= 36e5 ? ["h", 36e5] : ms >= 6e4 ? ["m", 6e4] : ms >= 1e3 ? ["s", 1e3] : ["ms", 1];
|
|
30
|
+
return `${Number((ms / divisor).toFixed(3))}${unit}`;
|
|
31
|
+
}
|
|
32
|
+
async function withSignal(promise, signal) {
|
|
33
|
+
if (!signal) return promise;
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
const abort = () => reject(
|
|
36
|
+
signal.reason ?? new WebfoxError("CANCELLED", "Operation cancelled.")
|
|
37
|
+
);
|
|
38
|
+
if (signal.aborted) abort();
|
|
39
|
+
else signal.addEventListener("abort", abort, { once: true });
|
|
40
|
+
promise.then(
|
|
41
|
+
(value) => {
|
|
42
|
+
signal.removeEventListener("abort", abort);
|
|
43
|
+
resolve(value);
|
|
44
|
+
},
|
|
45
|
+
(error) => {
|
|
46
|
+
signal.removeEventListener("abort", abort);
|
|
47
|
+
reject(error);
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function sleep(ms, signal) {
|
|
53
|
+
signal?.throwIfAborted();
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
const abort = () => {
|
|
56
|
+
clearTimeout(timer);
|
|
57
|
+
reject(signal?.reason);
|
|
58
|
+
};
|
|
59
|
+
const timer = setTimeout(() => {
|
|
60
|
+
signal?.removeEventListener("abort", abort);
|
|
61
|
+
resolve();
|
|
62
|
+
}, ms);
|
|
63
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async function orderedMap(items, concurrency, work) {
|
|
67
|
+
const results = new Array(items.length);
|
|
68
|
+
let next = 0;
|
|
69
|
+
await Promise.all(
|
|
70
|
+
Array.from({ length: Math.min(items.length, concurrency) }, async () => {
|
|
71
|
+
while (next < items.length) {
|
|
72
|
+
const index = next++;
|
|
73
|
+
results[index] = await work(items[index], index);
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
);
|
|
77
|
+
return results;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export {
|
|
81
|
+
deadline,
|
|
82
|
+
withSignal,
|
|
83
|
+
sleep,
|
|
84
|
+
orderedMap
|
|
85
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// src/providers/shared.ts
|
|
2
|
+
function trimSnippet(input, maxLength = 300) {
|
|
3
|
+
const text = (input ?? "").replace(/\s+/g, " ").trim();
|
|
4
|
+
return text.length <= maxLength ? text : `${text.slice(0, maxLength - 1)}\u2026`;
|
|
5
|
+
}
|
|
6
|
+
function normalizeContentText(input) {
|
|
7
|
+
return (input ?? "").replace(/\r/g, "").trim().split("\n").map((line) => line.replace(/[ \t]+$/g, "")).join("\n").replace(/\n{3,}/g, "\n\n");
|
|
8
|
+
}
|
|
9
|
+
function asJsonObject(value) {
|
|
10
|
+
return value ? { ...value } : {};
|
|
11
|
+
}
|
|
12
|
+
function formatJson(value) {
|
|
13
|
+
return JSON.stringify(value, null, 2);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
trimSnippet,
|
|
18
|
+
normalizeContentText,
|
|
19
|
+
asJsonObject,
|
|
20
|
+
formatJson
|
|
21
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
WebfoxError
|
|
3
|
+
} from "./chunk-U4BLULLV.js";
|
|
4
|
+
|
|
5
|
+
// src/contents.ts
|
|
6
|
+
function orderedContents(response) {
|
|
7
|
+
return {
|
|
8
|
+
provider: response.provider,
|
|
9
|
+
answers: response.answers.map((answer, inputIndex) => ({
|
|
10
|
+
...answer,
|
|
11
|
+
inputIndex,
|
|
12
|
+
...answer.error ? {
|
|
13
|
+
error: typeof answer.error === "string" ? new WebfoxError("PROVIDER_FAILURE", answer.error).toJSON() : answer.error
|
|
14
|
+
} : { error: void 0 }
|
|
15
|
+
}))
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
orderedContents
|
|
21
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// src/runtime/process.ts
|
|
2
|
+
function killProcessGroup(child, signal) {
|
|
3
|
+
if (process.platform !== "win32" && child.pid) {
|
|
4
|
+
try {
|
|
5
|
+
process.kill(-child.pid, signal);
|
|
6
|
+
return;
|
|
7
|
+
} catch {
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
child.kill(signal);
|
|
11
|
+
}
|
|
12
|
+
function cancelProcessGroup(child) {
|
|
13
|
+
killProcessGroup(child, "SIGTERM");
|
|
14
|
+
setTimeout(() => killProcessGroup(child, "SIGKILL"), 250);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export {
|
|
18
|
+
killProcessGroup,
|
|
19
|
+
cancelProcessGroup
|
|
20
|
+
};
|