@onedotmint/siftpath 0.0.0-stage → 2.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.
Files changed (58) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -2
  3. package/THIRD_PARTY_NOTICES.md +26 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +116 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/client.d.ts +144 -0
  8. package/dist/client.js +130 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/config.d.ts +107 -0
  11. package/dist/config.js +127 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/defaults.d.ts +38 -0
  14. package/dist/defaults.js +31 -0
  15. package/dist/defaults.js.map +1 -0
  16. package/dist/diagnostics.d.ts +158 -0
  17. package/dist/diagnostics.js +202 -0
  18. package/dist/diagnostics.js.map +1 -0
  19. package/dist/errors.d.ts +15 -0
  20. package/dist/errors.js +16 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/index.d.ts +8 -0
  23. package/dist/index.js +5 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/inputs.d.ts +25 -0
  26. package/dist/inputs.js +27 -0
  27. package/dist/inputs.js.map +1 -0
  28. package/dist/mcp/stdio.d.ts +2 -0
  29. package/dist/mcp/stdio.js +43 -0
  30. package/dist/mcp/stdio.js.map +1 -0
  31. package/dist/output.d.ts +23 -0
  32. package/dist/output.js +118 -0
  33. package/dist/output.js.map +1 -0
  34. package/dist/router.d.ts +20 -0
  35. package/dist/router.js +85 -0
  36. package/dist/router.js.map +1 -0
  37. package/dist/setup-ui.d.ts +8 -0
  38. package/dist/setup-ui.js +3032 -0
  39. package/dist/setup-ui.js.map +1 -0
  40. package/dist/setup.d.ts +2 -0
  41. package/dist/setup.js +50 -0
  42. package/dist/setup.js.map +1 -0
  43. package/dist/tools.d.ts +35 -0
  44. package/dist/tools.js +17 -0
  45. package/dist/tools.js.map +1 -0
  46. package/dist/version.d.ts +1 -0
  47. package/dist/version.js +4 -0
  48. package/dist/version.js.map +1 -0
  49. package/docs/ARCHITECTURE.md +33 -0
  50. package/docs/CONFIGURATION.md +127 -0
  51. package/docs/DIAGNOSTICS.md +109 -0
  52. package/docs/MIGRATION.md +13 -0
  53. package/docs/PROVIDERS.md +43 -0
  54. package/docs/SECURITY.md +15 -0
  55. package/docs/TESTING.md +138 -0
  56. package/examples/anonymous.json +36 -0
  57. package/extensions/siftpath.mjs +32 -0
  58. package/package.json +60 -4
@@ -0,0 +1,107 @@
1
+ import { z } from 'zod';
2
+ import { type Diagnostic } from './errors.js';
3
+ export declare const configurationMaxBytes = 65536;
4
+ declare const bindingSchema: z.ZodObject<{
5
+ name: z.ZodString;
6
+ arguments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
7
+ }, z.core.$strict>;
8
+ declare const providerSchema: z.ZodObject<{
9
+ enabled: z.ZodDefault<z.ZodBoolean>;
10
+ connection: z.ZodDiscriminatedUnion<[z.ZodObject<{
11
+ transport: z.ZodLiteral<"stdio">;
12
+ command: z.ZodString;
13
+ args: z.ZodDefault<z.ZodArray<z.ZodString>>;
14
+ env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
15
+ }, z.core.$strict>, z.ZodObject<{
16
+ transport: z.ZodLiteral<"http">;
17
+ url: z.ZodString;
18
+ headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
19
+ }, z.core.$strict>], "transport">;
20
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
21
+ search: z.ZodOptional<z.ZodObject<{
22
+ name: z.ZodString;
23
+ arguments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
24
+ }, z.core.$strict>>;
25
+ read: z.ZodOptional<z.ZodObject<{
26
+ name: z.ZodString;
27
+ arguments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
28
+ }, z.core.$strict>>;
29
+ }, z.core.$strict>;
30
+ declare const schema: z.ZodObject<{
31
+ version: z.ZodDefault<z.ZodLiteral<2>>;
32
+ credentials: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
33
+ providers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
34
+ enabled: z.ZodDefault<z.ZodBoolean>;
35
+ connection: z.ZodDiscriminatedUnion<[z.ZodObject<{
36
+ transport: z.ZodLiteral<"stdio">;
37
+ command: z.ZodString;
38
+ args: z.ZodDefault<z.ZodArray<z.ZodString>>;
39
+ env: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
40
+ }, z.core.$strict>, z.ZodObject<{
41
+ transport: z.ZodLiteral<"http">;
42
+ url: z.ZodString;
43
+ headers: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
44
+ }, z.core.$strict>], "transport">;
45
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
46
+ search: z.ZodOptional<z.ZodObject<{
47
+ name: z.ZodString;
48
+ arguments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
49
+ }, z.core.$strict>>;
50
+ read: z.ZodOptional<z.ZodObject<{
51
+ name: z.ZodString;
52
+ arguments: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
53
+ }, z.core.$strict>>;
54
+ }, z.core.$strict>>>;
55
+ routes: z.ZodDefault<z.ZodObject<{
56
+ defaultIntent: z.ZodDefault<z.ZodEnum<{
57
+ general: "general";
58
+ semantic: "semantic";
59
+ research: "research";
60
+ }>>;
61
+ search: z.ZodDefault<z.ZodString>;
62
+ read: z.ZodDefault<z.ZodString>;
63
+ intents: z.ZodDefault<z.ZodObject<{
64
+ general: z.ZodOptional<z.ZodString>;
65
+ semantic: z.ZodOptional<z.ZodString>;
66
+ research: z.ZodOptional<z.ZodString>;
67
+ }, z.core.$strict>>;
68
+ searchFallback: z.ZodDefault<z.ZodArray<z.ZodString>>;
69
+ readFallback: z.ZodDefault<z.ZodArray<z.ZodString>>;
70
+ }, z.core.$strict>>;
71
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
72
+ providerTimeoutMs: z.ZodDefault<z.ZodNumber>;
73
+ maxOutputChars: z.ZodDefault<z.ZodNumber>;
74
+ }, z.core.$strict>;
75
+ export type Configuration = z.infer<typeof schema>;
76
+ export type Provider = z.infer<typeof providerSchema>;
77
+ export type Binding = z.infer<typeof bindingSchema>;
78
+ export declare function parseConfiguration(value: unknown): Configuration;
79
+ export declare function configPath(env?: NodeJS.ProcessEnv): string;
80
+ export declare function readConfiguration(path?: string, env?: NodeJS.ProcessEnv): Promise<Configuration>;
81
+ /** Private user storage, never a workspace .env file; atomic replace with mode 0600. */
82
+ export declare function writePrivateJson(path: string, value: unknown, maxBytes?: number): Promise<void>;
83
+ export declare function resolveSecret(value: string, config: Configuration, env: NodeJS.ProcessEnv): string;
84
+ export declare function providerStatus(id: string, config: Configuration, env: NodeJS.ProcessEnv): Diagnostic;
85
+ export declare function diagnostics(config: Configuration, env?: NodeJS.ProcessEnv): {
86
+ runtime: string;
87
+ networkChecked: boolean;
88
+ providers: {
89
+ operations: string[];
90
+ provider: string;
91
+ code: string;
92
+ needs?: string[];
93
+ }[];
94
+ routes: {
95
+ defaultIntent: "general" | "semantic" | "research";
96
+ search: string;
97
+ read: string;
98
+ intents: {
99
+ general?: string | undefined;
100
+ semantic?: string | undefined;
101
+ research?: string | undefined;
102
+ };
103
+ searchFallback: string[];
104
+ readFallback: string[];
105
+ };
106
+ };
107
+ export {};
package/dist/config.js ADDED
@@ -0,0 +1,127 @@
1
+ import { readFile, mkdir, writeFile, rename, lstat, chmod, rm } from 'node:fs/promises';
2
+ import { homedir } from 'node:os';
3
+ import { existsSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { randomUUID } from 'node:crypto';
6
+ import { z } from 'zod';
7
+ import { SiftpathError } from './errors.js';
8
+ import { intentSchema } from './inputs.js';
9
+ import { defaultProviders, defaultRoutes } from './defaults.js';
10
+ export const configurationMaxBytes = 65536;
11
+ const clean = z.string().min(1).max(4096).regex(/^[^\r\n\0]+$/);
12
+ const bindingSchema = z.strictObject({ name: clean, arguments: z.record(z.string(), z.unknown()).default({}) });
13
+ const connectionSchema = z.discriminatedUnion('transport', [
14
+ z.strictObject({ transport: z.literal('stdio'), command: clean.refine(value => !value.includes('${')), args: z.array(clean.refine(value => !value.includes('${'))).default([]), env: z.record(z.string(), clean).default({}) }),
15
+ z.strictObject({ transport: z.literal('http'), url: clean.refine(value => {
16
+ try {
17
+ const url = new URL(value);
18
+ return !url.username && !url.password && !url.hash && !value.includes('${') &&
19
+ ![...url.searchParams.keys()].some(key => /api.?key|^key$|^token$|access.?token|auth|secret|credential/i.test(key)) &&
20
+ (url.protocol === 'https:' || url.protocol === 'http:' && ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname));
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ }), headers: z.record(z.string(), clean).default({}) }),
26
+ ]);
27
+ const timeout = z.number().int().min(100).max(120000);
28
+ const providerSchema = z.strictObject({ enabled: z.boolean().default(true), connection: connectionSchema,
29
+ timeoutMs: timeout.optional(), search: bindingSchema.optional(), read: bindingSchema.optional() });
30
+ const routesSchema = z.strictObject({ defaultIntent: intentSchema.default(defaultRoutes.defaultIntent), search: clean.default(defaultRoutes.search), read: clean.default(defaultRoutes.read),
31
+ intents: z.strictObject({ general: clean.optional(), semantic: clean.optional(), research: clean.optional() }).default(defaultRoutes.intents),
32
+ searchFallback: z.array(clean).max(10).default(defaultRoutes.searchFallback), readFallback: z.array(clean).max(10).default(defaultRoutes.readFallback) });
33
+ const schema = z.strictObject({ version: z.literal(2).default(2), credentials: z.record(z.string().regex(/^[A-Z][A-Z0-9_]*$/), clean).default({}),
34
+ providers: z.record(z.string().regex(/^[a-z][a-z0-9_-]{0,63}$/), providerSchema).default(defaultProviders),
35
+ routes: routesSchema.default(defaultRoutes), timeoutMs: timeout.default(60000), providerTimeoutMs: timeout.default(20000),
36
+ maxOutputChars: z.number().int().min(2000).max(50000).default(16000) });
37
+ export function parseConfiguration(value) {
38
+ const parsed = schema.safeParse(value);
39
+ if (!parsed.success)
40
+ throw new SiftpathError('INVALID_CONFIG', 'Invalid configuration (version 2 required). See docs/CONFIGURATION.md; values are never echoed.');
41
+ const config = structuredClone(parsed.data);
42
+ for (const id of [config.routes.search, config.routes.read, ...Object.values(config.routes.intents), ...config.routes.searchFallback, ...config.routes.readFallback]) {
43
+ // Built-in routes may refer to absent optional providers; unknown custom IDs are still diagnosed by doctor.
44
+ if (id && !/^[a-z][a-z0-9_-]{0,63}$/.test(id))
45
+ throw new SiftpathError('INVALID_CONFIG', 'Invalid route provider ID.');
46
+ }
47
+ return config;
48
+ }
49
+ export function configPath(env = process.env) {
50
+ const override = env.SIFTPATH_CONFIG ?? env.SMARTSEARCH_CONFIG;
51
+ if (override)
52
+ return override;
53
+ const root = env.XDG_CONFIG_HOME || join(homedir(), '.config');
54
+ const current = join(root, 'siftpath', 'config.json'), legacy = join(root, 'smartsearch', 'config.json');
55
+ return existsSync(current) || !existsSync(legacy) ? current : legacy;
56
+ }
57
+ export async function readConfiguration(path = configPath(), env = process.env) {
58
+ let raw = {};
59
+ try {
60
+ const stats = await lstat(path);
61
+ if (!stats.isFile() || stats.isSymbolicLink() || stats.size > configurationMaxBytes)
62
+ throw new SiftpathError('INVALID_CONFIG', 'Configuration must be a regular JSON file of at most 64 KiB.');
63
+ raw = JSON.parse(await readFile(path, 'utf8'));
64
+ }
65
+ catch (error) {
66
+ if (error.code !== 'ENOENT') {
67
+ if (error instanceof SiftpathError)
68
+ throw error;
69
+ throw new SiftpathError('CONFIG_READ_FAILED', 'Cannot read configuration JSON. Check format and permissions.');
70
+ }
71
+ }
72
+ // Old credentials can be reused, but old engine options must never silently change the new routes.
73
+ if (raw && typeof raw === 'object' && 'version' in raw && raw.version === 1) {
74
+ const old = raw;
75
+ raw = { version: 2, credentials: old.credentials ?? {}, providers: Object.fromEntries(Object.entries(defaultProviders).map(([id, provider]) => [id, { ...provider, enabled: provider.enabled && !old.disabled?.includes(id) }])) };
76
+ }
77
+ const config = parseConfiguration(raw);
78
+ const names = new Set([...Object.keys(config.credentials), ...[...JSON.stringify(config.providers).matchAll(/\$\{([A-Z][A-Z0-9_]*)\}/g)].map(match => match[1])]);
79
+ for (const name of names)
80
+ if (env[name]?.trim())
81
+ config.credentials[name] = env[name].trim();
82
+ return parseConfiguration(config);
83
+ }
84
+ /** Private user storage, never a workspace .env file; atomic replace with mode 0600. */
85
+ export async function writePrivateJson(path, value, maxBytes = Infinity) {
86
+ const serialized = JSON.stringify(value, null, 2) + '\n';
87
+ if (Buffer.byteLength(serialized) > maxBytes)
88
+ throw new SiftpathError('CONFIG_TOO_LARGE', 'Formatted configuration exceeds the size limit; existing file was not changed.');
89
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
90
+ try {
91
+ if ((await lstat(path)).isSymbolicLink())
92
+ throw new SiftpathError('UNSAFE_CONFIG_PATH', 'Refusing to replace a symbolic link.');
93
+ }
94
+ catch (error) {
95
+ if (error.code !== 'ENOENT')
96
+ throw error;
97
+ }
98
+ const temporary = `${path}.${randomUUID()}.tmp`;
99
+ await writeFile(temporary, serialized, { flag: 'wx', mode: 0o600 });
100
+ try {
101
+ await rename(temporary, path);
102
+ if (process.platform !== 'win32')
103
+ await chmod(path, 0o600);
104
+ }
105
+ finally {
106
+ await rm(temporary, { force: true });
107
+ }
108
+ }
109
+ export function resolveSecret(value, config, env) {
110
+ return value.replace(/\$\{([A-Z][A-Z0-9_]*)\}/g, (_, name) => env[name]?.trim() || config.credentials[name] || '');
111
+ }
112
+ export function providerStatus(id, config, env) {
113
+ const provider = Object.hasOwn(config.providers, id) ? config.providers[id] : undefined;
114
+ if (!provider)
115
+ return { provider: id, code: 'NOT_CONFIGURED' };
116
+ if (!provider.enabled)
117
+ return { provider: id, code: 'DISABLED' };
118
+ const needs = [...new Set([...JSON.stringify(provider.connection).matchAll(/\$\{([A-Z][A-Z0-9_]*)\}/g)].map(m => m[1]))]
119
+ .filter(name => !env[name]?.trim() && !config.credentials[name]);
120
+ return { provider: id, code: needs.length ? 'MISSING_CREDENTIALS' : 'READY', ...(needs.length ? { needs } : {}) };
121
+ }
122
+ export function diagnostics(config, env = process.env) {
123
+ const ids = new Set([...Object.keys(config.providers), config.routes.search, config.routes.read, ...Object.values(config.routes.intents),
124
+ ...config.routes.searchFallback, ...config.routes.readFallback].filter((id) => !!id));
125
+ return { runtime: process.version, networkChecked: false, providers: [...ids].map(id => ({ ...providerStatus(id, config, env), operations: ['search', 'read'].filter(kind => !!config.providers[id]?.[kind]) })), routes: config.routes };
126
+ }
127
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAmB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhE,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAChE,MAAM,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAChH,MAAM,gBAAgB,GAAG,CAAC,CAAC,kBAAkB,CAAC,WAAW,EAAE;IACzD,CAAC,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/N,CAAC,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACvE,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACzE,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,8DAA8D,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACnH,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1H,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,KAAK,CAAC;YAAC,CAAC;QAC3B,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;CACxD,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtD,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,gBAAgB;IACtG,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACrG,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;IAC1L,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;IAC7I,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAC5J,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/I,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;IAC1G,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;IACzH,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAI1E,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,iGAAiG,CAAC,CAAC;IAClK,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,KAAK,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACrK,4GAA4G;QAC5G,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,CAAC;IACzH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,kBAAkB,CAAC;IAC/D,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACzG,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACvE,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAI,GAAG,UAAU,EAAE,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC/F,IAAI,GAAG,GAAY,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG,qBAAqB;YAAE,MAAM,IAAI,aAAa,CAAC,gBAAgB,EAAE,8DAA8D,CAAC,CAAC;QAC/L,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,IAAI,KAAK,YAAY,aAAa;gBAAE,MAAM,KAAK,CAAC;YAChD,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,+DAA+D,CAAC,CAAC;QACjH,CAAC;IACH,CAAC;IACD,mGAAmG;IACnG,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC5E,MAAM,GAAG,GAAG,GAAoE,CAAC;QACjF,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CACnF,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACjJ,CAAC;IACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC;IACnK,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE;YAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,EAAE,CAAC;IAC9F,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AACD,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAc,EAAE,QAAQ,GAAG,QAAQ;IACtF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,QAAQ;QAAE,MAAM,IAAI,aAAa,CAAC,kBAAkB,EAAE,gFAAgF,CAAC,CAAC;IAC5K,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC;QAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE;YAAE,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,sCAAsC,CAAC,CAAC;IAAC,CAAC;IACxI,OAAO,KAAK,EAAE,CAAC;QAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IAAC,CAAC;IACtF,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAC;IAChD,MAAM,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC;QAAC,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;YAC1F,CAAC;QAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;AACnD,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,MAAqB,EAAE,GAAsB;IACxF,OAAO,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7H,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,MAAqB,EAAE,GAAsB;IACtF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;IAC/D,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;SACtH,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACpH,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,MAAqB,EAAE,MAAyB,OAAO,CAAC,GAAG;IACrF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QACtI,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtG,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,IAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACjQ,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { Provider } from './config.js';
2
+ export declare const providerPresets: Record<string, Provider>;
3
+ export declare const anonymousPresets: Record<string, Provider>;
4
+ export declare const defaultProviders: {
5
+ [k: string]: {
6
+ enabled: boolean;
7
+ connection: {
8
+ transport: "stdio";
9
+ command: string;
10
+ args: string[];
11
+ env: Record<string, string>;
12
+ } | {
13
+ transport: "http";
14
+ url: string;
15
+ headers: Record<string, string>;
16
+ };
17
+ timeoutMs?: number | undefined;
18
+ search?: {
19
+ name: string;
20
+ arguments: Record<string, unknown>;
21
+ } | undefined;
22
+ read?: {
23
+ name: string;
24
+ arguments: Record<string, unknown>;
25
+ } | undefined;
26
+ };
27
+ };
28
+ export declare const defaultRoutes: {
29
+ defaultIntent: "general";
30
+ search: string;
31
+ read: string;
32
+ intents: {
33
+ semantic: string;
34
+ research: string;
35
+ };
36
+ searchFallback: string[];
37
+ readFallback: never[];
38
+ };
@@ -0,0 +1,31 @@
1
+ // Official tool names/arguments were checked against upstream definitions; see docs/PROVIDERS.md.
2
+ export const providerPresets = {
3
+ brave: { enabled: true,
4
+ connection: { transport: 'stdio', command: 'npx', args: ['-y', '@brave/brave-search-mcp-server@2.1.4', '--transport', 'stdio'],
5
+ env: { BRAVE_API_KEY: '${BRAVE_API_KEY}', BRAVE_MCP_ENABLED_TOOLS: 'brave_web_search' } },
6
+ search: { name: 'brave_web_search', arguments: { query: '$query', count: '$maxResults' } } },
7
+ exa: { enabled: true,
8
+ connection: { transport: 'stdio', command: 'npx', args: ['-y', 'exa-mcp-server@3.4.2'], env: { EXA_API_KEY: '${EXA_API_KEY}' } },
9
+ search: { name: 'web_search_exa', arguments: { query: '$query', numResults: '$maxResults' } } },
10
+ tavily: { enabled: true, timeoutMs: 60000,
11
+ connection: { transport: 'stdio', command: 'npx', args: ['-y', 'tavily-mcp@0.2.22'], env: { TAVILY_API_KEY: '${TAVILY_API_KEY}' } },
12
+ search: { name: 'tavily_search', arguments: { query: '$query', max_results: '$maxResults', search_depth: 'basic' } } },
13
+ jina: { enabled: true,
14
+ connection: { transport: 'http', url: 'https://mcp.jina.ai/v1', headers: { Authorization: 'Bearer ${JINA_API_KEY}' } },
15
+ read: { name: 'read_url', arguments: { url: '$url', question: '$focus' } } },
16
+ firecrawl: { enabled: true, timeoutMs: 60000,
17
+ connection: { transport: 'stdio', command: 'npx', args: ['-y', 'firecrawl-mcp@3.33.4'], env: { FIRECRAWL_API_KEY: '${FIRECRAWL_API_KEY}' } },
18
+ read: { name: 'firecrawl_scrape', arguments: { url: '$url', formats: ['markdown'] } } },
19
+ };
20
+ export const anonymousPresets = {
21
+ exa: { ...providerPresets.exa, connection: { transport: 'http', url: 'https://mcp.exa.ai/mcp', headers: {} },
22
+ search: { name: 'web_search_exa', arguments: { query: '$query', objective: '$query', numResults: '$maxResults' } } },
23
+ jina: { ...providerPresets.jina, connection: { transport: 'http', url: 'https://mcp.jina.ai/v1', headers: {} } },
24
+ tavily: { ...providerPresets.tavily, connection: { transport: 'stdio', command: 'npx', args: ['-y', 'tavily-mcp@0.2.22'], env: {} } },
25
+ firecrawl: { ...providerPresets.firecrawl, connection: { transport: 'http', url: 'https://mcp.firecrawl.dev/v2/mcp', headers: {} },
26
+ read: { name: 'firecrawl_scrape', arguments: { url: '$url', formats: ['markdown'], onlyMainContent: true, objective: 'Read the supplied public webpage as Markdown.' } } },
27
+ };
28
+ export const defaultProviders = Object.fromEntries(Object.entries(providerPresets).map(([id, provider]) => [id, { ...provider, enabled: !['tavily', 'firecrawl'].includes(id) }]));
29
+ export const defaultRoutes = { defaultIntent: 'general', search: 'brave', read: 'jina',
30
+ intents: { semantic: 'exa', research: 'tavily' }, searchFallback: ['brave', 'exa'], readFallback: [] };
31
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AACA,kGAAkG;AAClG,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI;QACpB,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,sCAAsC,EAAE,aAAa,EAAE,OAAO,CAAC;YAC5H,GAAG,EAAE,EAAE,aAAa,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,EAAE;QAC3F,MAAM,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE;IAC9F,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI;QAClB,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE;QAChI,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE;IACjG,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK;QACvC,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE,EAAE;QACnI,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE;IACxH,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI;QACnB,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,wBAAwB,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE,EAAE;QACtH,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9E,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK;QAC1C,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,EAAE;QAC5I,IAAI,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE;CAC1F,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAA6B;IACxD,GAAG,EAAE,EAAE,GAAG,eAAe,CAAC,GAAI,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,wBAAwB,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3G,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE;IACtH,IAAI,EAAE,EAAE,GAAG,eAAe,CAAC,IAAK,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,wBAAwB,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE;IACjH,MAAM,EAAE,EAAE,GAAG,eAAe,CAAC,MAAO,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;IACtI,SAAS,EAAE,EAAE,GAAG,eAAe,CAAC,SAAU,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,kCAAkC,EAAE,OAAO,EAAE,EAAE,EAAE;QACjI,IAAI,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,+CAA+C,EAAE,EAAE,EAAE;CAC7K,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnL,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,aAAa,EAAE,SAAkB,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM;IAC7F,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC"}
@@ -0,0 +1,158 @@
1
+ import { z } from 'zod';
2
+ import { type Configuration } from './config.js';
3
+ declare const testSchema: z.ZodObject<{
4
+ provider: z.ZodString;
5
+ testedAt: z.ZodISODateTime;
6
+ durationMs: z.ZodNumber;
7
+ outcome: z.ZodEnum<{
8
+ failed: "failed";
9
+ passed: "passed";
10
+ skipped: "skipped";
11
+ }>;
12
+ code: z.ZodOptional<z.ZodEnum<{
13
+ NOT_CONFIGURED: "NOT_CONFIGURED";
14
+ DISABLED: "DISABLED";
15
+ MISSING_CREDENTIALS: "MISSING_CREDENTIALS";
16
+ PROVIDER_TIMEOUT: "PROVIDER_TIMEOUT";
17
+ AUTH_FAILED: "AUTH_FAILED";
18
+ RATE_LIMITED: "RATE_LIMITED";
19
+ CONNECTION_FAILED: "CONNECTION_FAILED";
20
+ UPSTREAM_ERROR: "UPSTREAM_ERROR";
21
+ EMPTY_RESPONSE: "EMPTY_RESPONSE";
22
+ NO_SOURCES: "NO_SOURCES";
23
+ OUTPUT_LIMIT: "OUTPUT_LIMIT";
24
+ UNSUPPORTED_OPERATION: "UNSUPPORTED_OPERATION";
25
+ ABORTED: "ABORTED";
26
+ DISCOVERY_FAILED: "DISCOVERY_FAILED";
27
+ TOOL_NOT_FOUND: "TOOL_NOT_FOUND";
28
+ INVALID_UPSTREAM_ARGUMENTS: "INVALID_UPSTREAM_ARGUMENTS";
29
+ INVALID_UPSTREAM_RESPONSE: "INVALID_UPSTREAM_RESPONSE";
30
+ TASK_REQUIRED: "TASK_REQUIRED";
31
+ }>>;
32
+ stages: z.ZodObject<{
33
+ connection: z.ZodEnum<{
34
+ failed: "failed";
35
+ not_tested: "not_tested";
36
+ passed: "passed";
37
+ }>;
38
+ discovery: z.ZodEnum<{
39
+ failed: "failed";
40
+ not_tested: "not_tested";
41
+ passed: "passed";
42
+ }>;
43
+ request: z.ZodEnum<{
44
+ failed: "failed";
45
+ not_tested: "not_tested";
46
+ passed: "passed";
47
+ }>;
48
+ }, z.core.$strict>;
49
+ operations: z.ZodArray<z.ZodObject<{
50
+ operation: z.ZodEnum<{
51
+ search: "search";
52
+ read: "read";
53
+ }>;
54
+ state: z.ZodEnum<{
55
+ failed: "failed";
56
+ not_tested: "not_tested";
57
+ passed: "passed";
58
+ }>;
59
+ durationMs: z.ZodNumber;
60
+ code: z.ZodOptional<z.ZodEnum<{
61
+ NOT_CONFIGURED: "NOT_CONFIGURED";
62
+ DISABLED: "DISABLED";
63
+ MISSING_CREDENTIALS: "MISSING_CREDENTIALS";
64
+ PROVIDER_TIMEOUT: "PROVIDER_TIMEOUT";
65
+ AUTH_FAILED: "AUTH_FAILED";
66
+ RATE_LIMITED: "RATE_LIMITED";
67
+ CONNECTION_FAILED: "CONNECTION_FAILED";
68
+ UPSTREAM_ERROR: "UPSTREAM_ERROR";
69
+ EMPTY_RESPONSE: "EMPTY_RESPONSE";
70
+ NO_SOURCES: "NO_SOURCES";
71
+ OUTPUT_LIMIT: "OUTPUT_LIMIT";
72
+ UNSUPPORTED_OPERATION: "UNSUPPORTED_OPERATION";
73
+ ABORTED: "ABORTED";
74
+ DISCOVERY_FAILED: "DISCOVERY_FAILED";
75
+ TOOL_NOT_FOUND: "TOOL_NOT_FOUND";
76
+ INVALID_UPSTREAM_ARGUMENTS: "INVALID_UPSTREAM_ARGUMENTS";
77
+ INVALID_UPSTREAM_RESPONSE: "INVALID_UPSTREAM_RESPONSE";
78
+ TASK_REQUIRED: "TASK_REQUIRED";
79
+ }>>;
80
+ }, z.core.$strict>>;
81
+ }, z.core.$strict>;
82
+ export type ProviderTest = z.infer<typeof testSchema>;
83
+ export declare function testHistoryPath(path?: string): string;
84
+ /** A strict provider contract probe, not an equivalent execution of Router selection, fallback or focus. */
85
+ export declare function providerTest(id: string, config: Configuration, env?: NodeJS.ProcessEnv, caller?: AbortSignal): Promise<ProviderTest>;
86
+ export declare function statusReport(config: Configuration, path?: string, env?: NodeJS.ProcessEnv): Promise<{
87
+ warnings: string[];
88
+ providers: {
89
+ configured: boolean;
90
+ lastTest: {
91
+ provider: string;
92
+ testedAt: string;
93
+ durationMs: number;
94
+ outcome: "failed" | "passed" | "skipped";
95
+ stages: {
96
+ connection: "failed" | "not_tested" | "passed";
97
+ discovery: "failed" | "not_tested" | "passed";
98
+ request: "failed" | "not_tested" | "passed";
99
+ };
100
+ operations: {
101
+ operation: "search" | "read";
102
+ state: "failed" | "not_tested" | "passed";
103
+ durationMs: number;
104
+ code?: "NOT_CONFIGURED" | "DISABLED" | "MISSING_CREDENTIALS" | "PROVIDER_TIMEOUT" | "AUTH_FAILED" | "RATE_LIMITED" | "CONNECTION_FAILED" | "UPSTREAM_ERROR" | "EMPTY_RESPONSE" | "NO_SOURCES" | "OUTPUT_LIMIT" | "UNSUPPORTED_OPERATION" | "ABORTED" | "DISCOVERY_FAILED" | "TOOL_NOT_FOUND" | "INVALID_UPSTREAM_ARGUMENTS" | "INVALID_UPSTREAM_RESPONSE" | "TASK_REQUIRED" | undefined;
105
+ }[];
106
+ code?: "NOT_CONFIGURED" | "DISABLED" | "MISSING_CREDENTIALS" | "PROVIDER_TIMEOUT" | "AUTH_FAILED" | "RATE_LIMITED" | "CONNECTION_FAILED" | "UPSTREAM_ERROR" | "EMPTY_RESPONSE" | "NO_SOURCES" | "OUTPUT_LIMIT" | "UNSUPPORTED_OPERATION" | "ABORTED" | "DISCOVERY_FAILED" | "TOOL_NOT_FOUND" | "INVALID_UPSTREAM_ARGUMENTS" | "INVALID_UPSTREAM_RESPONSE" | "TASK_REQUIRED" | undefined;
107
+ } | null;
108
+ lastTestStale: boolean;
109
+ operations: string[];
110
+ provider: string;
111
+ code: string;
112
+ needs?: string[];
113
+ }[];
114
+ runtime: string;
115
+ networkChecked: boolean;
116
+ routes: {
117
+ defaultIntent: "general" | "semantic" | "research";
118
+ search: string;
119
+ read: string;
120
+ intents: {
121
+ general?: string | undefined;
122
+ semantic?: string | undefined;
123
+ research?: string | undefined;
124
+ };
125
+ searchFallback: string[];
126
+ readFallback: string[];
127
+ };
128
+ version: string;
129
+ ok: boolean;
130
+ }>;
131
+ export declare function testReport(config: Configuration, target: string, path?: string, env?: NodeJS.ProcessEnv, signal?: AbortSignal): Promise<{
132
+ version: string;
133
+ ok: boolean;
134
+ networkChecked: boolean;
135
+ results: {
136
+ configuration: string;
137
+ provider: string;
138
+ testedAt: string;
139
+ durationMs: number;
140
+ outcome: "failed" | "passed" | "skipped";
141
+ stages: {
142
+ connection: "failed" | "not_tested" | "passed";
143
+ discovery: "failed" | "not_tested" | "passed";
144
+ request: "failed" | "not_tested" | "passed";
145
+ };
146
+ operations: {
147
+ operation: "search" | "read";
148
+ state: "failed" | "not_tested" | "passed";
149
+ durationMs: number;
150
+ code?: "NOT_CONFIGURED" | "DISABLED" | "MISSING_CREDENTIALS" | "PROVIDER_TIMEOUT" | "AUTH_FAILED" | "RATE_LIMITED" | "CONNECTION_FAILED" | "UPSTREAM_ERROR" | "EMPTY_RESPONSE" | "NO_SOURCES" | "OUTPUT_LIMIT" | "UNSUPPORTED_OPERATION" | "ABORTED" | "DISCOVERY_FAILED" | "TOOL_NOT_FOUND" | "INVALID_UPSTREAM_ARGUMENTS" | "INVALID_UPSTREAM_RESPONSE" | "TASK_REQUIRED" | undefined;
151
+ }[];
152
+ code?: "NOT_CONFIGURED" | "DISABLED" | "MISSING_CREDENTIALS" | "PROVIDER_TIMEOUT" | "AUTH_FAILED" | "RATE_LIMITED" | "CONNECTION_FAILED" | "UPSTREAM_ERROR" | "EMPTY_RESPONSE" | "NO_SOURCES" | "OUTPUT_LIMIT" | "UNSUPPORTED_OPERATION" | "ABORTED" | "DISCOVERY_FAILED" | "TOOL_NOT_FOUND" | "INVALID_UPSTREAM_ARGUMENTS" | "INVALID_UPSTREAM_RESPONSE" | "TASK_REQUIRED" | undefined;
153
+ }[];
154
+ warnings: string[];
155
+ }>;
156
+ export declare function formatStatus(report: Awaited<ReturnType<typeof statusReport>>): string;
157
+ export declare function formatTests(report: Awaited<ReturnType<typeof testReport>>): string;
158
+ export {};