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,85 @@
|
|
|
1
|
+
import {
|
|
2
|
+
formatDuration
|
|
3
|
+
} from "./chunk-I2UIACY3.js";
|
|
4
|
+
import {
|
|
5
|
+
sleep,
|
|
6
|
+
withSignal
|
|
7
|
+
} from "./chunk-WCTOYZVB.js";
|
|
8
|
+
import {
|
|
9
|
+
WebfoxError,
|
|
10
|
+
asWebfoxError
|
|
11
|
+
} from "./chunk-U4BLULLV.js";
|
|
12
|
+
|
|
13
|
+
// src/runtime/polling.ts
|
|
14
|
+
async function executeAsyncResearch({
|
|
15
|
+
providerLabel,
|
|
16
|
+
providerId,
|
|
17
|
+
context,
|
|
18
|
+
pollIntervalMs = 3e3,
|
|
19
|
+
start,
|
|
20
|
+
poll
|
|
21
|
+
}) {
|
|
22
|
+
context.signal?.throwIfAborted();
|
|
23
|
+
const startedAt = Date.now();
|
|
24
|
+
context.onProgress?.(`Submitting research to ${providerLabel}.`);
|
|
25
|
+
const job = await withSignal(start(context), context.signal);
|
|
26
|
+
if (!job.id)
|
|
27
|
+
throw new WebfoxError(
|
|
28
|
+
"PROVIDER_FAILURE",
|
|
29
|
+
`${providerLabel} returned no research job id.`
|
|
30
|
+
);
|
|
31
|
+
context.onProgress?.(
|
|
32
|
+
`${providerLabel} accepted the request; waiting for the report.`
|
|
33
|
+
);
|
|
34
|
+
let errors = 0;
|
|
35
|
+
let lastStatus = "in_progress";
|
|
36
|
+
let lastUpdate = Date.now();
|
|
37
|
+
while (true) {
|
|
38
|
+
context.signal?.throwIfAborted();
|
|
39
|
+
let result;
|
|
40
|
+
try {
|
|
41
|
+
result = await withSignal(poll(job.id, context), context.signal);
|
|
42
|
+
errors = 0;
|
|
43
|
+
} catch (error) {
|
|
44
|
+
if (context.signal?.aborted) throw context.signal.reason;
|
|
45
|
+
const normalized = asWebfoxError(error);
|
|
46
|
+
if (!normalized.options.retryable || ++errors > (context.retryPolicy?.retries ?? 0))
|
|
47
|
+
throw normalized;
|
|
48
|
+
const delayMs = Math.min(
|
|
49
|
+
(context.retryPolicy?.delayMs ?? 2e3) * 2 ** (errors - 1),
|
|
50
|
+
3e4
|
|
51
|
+
);
|
|
52
|
+
context.onProgress?.(
|
|
53
|
+
`${providerLabel} status check failed; retrying in ${formatDuration(delayMs)} (retry ${errors}/${context.retryPolicy?.retries ?? 0}).`
|
|
54
|
+
);
|
|
55
|
+
await sleep(delayMs, context.signal);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (result.status === "completed")
|
|
59
|
+
return result.output ?? {
|
|
60
|
+
provider: providerId,
|
|
61
|
+
text: `${providerLabel} research completed without textual output.`
|
|
62
|
+
};
|
|
63
|
+
if (result.status === "failed" || result.status === "cancelled")
|
|
64
|
+
throw new WebfoxError(
|
|
65
|
+
result.status === "cancelled" ? "CANCELLED" : "PROVIDER_FAILURE",
|
|
66
|
+
`${providerLabel} research ${result.status}${result.error ? `: ${result.error}` : "."}`,
|
|
67
|
+
{ retryable: false }
|
|
68
|
+
);
|
|
69
|
+
const status = result.statusText ?? result.status;
|
|
70
|
+
const now = Date.now();
|
|
71
|
+
if (status !== lastStatus || now - lastUpdate >= 3e4) {
|
|
72
|
+
const detail = status === "in_progress" ? "is still running" : `status: ${status.replaceAll("_", " ")}`;
|
|
73
|
+
context.onProgress?.(
|
|
74
|
+
`${providerLabel} research ${detail} (${formatDuration(now - startedAt)} elapsed).`
|
|
75
|
+
);
|
|
76
|
+
lastStatus = status;
|
|
77
|
+
lastUpdate = now;
|
|
78
|
+
}
|
|
79
|
+
await sleep(pollIntervalMs, context.signal);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export {
|
|
84
|
+
executeAsyncResearch
|
|
85
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// src/domain.ts
|
|
2
|
+
var CAPABILITIES = [
|
|
3
|
+
"search",
|
|
4
|
+
"contents",
|
|
5
|
+
"answer",
|
|
6
|
+
"research"
|
|
7
|
+
];
|
|
8
|
+
var PROVIDER_IDS = [
|
|
9
|
+
"brave",
|
|
10
|
+
"cloudflare",
|
|
11
|
+
"custom",
|
|
12
|
+
"exa",
|
|
13
|
+
"firecrawl",
|
|
14
|
+
"gemini",
|
|
15
|
+
"linkup",
|
|
16
|
+
"ollama",
|
|
17
|
+
"openai",
|
|
18
|
+
"parallel",
|
|
19
|
+
"perplexity",
|
|
20
|
+
"serper",
|
|
21
|
+
"tavily",
|
|
22
|
+
"valyu"
|
|
23
|
+
];
|
|
24
|
+
var WEBFOX_ERROR_CODES = [
|
|
25
|
+
"INVALID_CONFIG",
|
|
26
|
+
"INVALID_INPUT",
|
|
27
|
+
"PROVIDER_UNAVAILABLE",
|
|
28
|
+
"PROVIDER_FAILURE",
|
|
29
|
+
"PARTIAL_BATCH",
|
|
30
|
+
"TIMEOUT",
|
|
31
|
+
"CANCELLED"
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
export {
|
|
35
|
+
CAPABILITIES,
|
|
36
|
+
PROVIDER_IDS,
|
|
37
|
+
WEBFOX_ERROR_CODES
|
|
38
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// src/runtime/duration.ts
|
|
2
|
+
function formatDuration(milliseconds) {
|
|
3
|
+
const seconds = Math.max(0, Math.floor(milliseconds / 1e3));
|
|
4
|
+
if (seconds < 60) return `${seconds}s`;
|
|
5
|
+
const minutes = Math.floor(seconds / 60);
|
|
6
|
+
if (minutes < 60) return `${minutes}m ${seconds % 60}s`;
|
|
7
|
+
return `${Math.floor(minutes / 60)}h ${minutes % 60}m ${seconds % 60}s`;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
formatDuration
|
|
12
|
+
};
|