agent-nuvira 3.3.8 → 3.3.9
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/README.md +57 -50
- package/dist/agents/agents/planner.d.ts.map +1 -1
- package/dist/agents/agents/planner.js +41 -0
- package/dist/agents/agents/planner.js.map +1 -1
- package/dist/agents/agents/reasoner.d.ts.map +1 -1
- package/dist/agents/agents/reasoner.js +6 -0
- package/dist/agents/agents/reasoner.js.map +1 -1
- package/dist/agents/agents/runner.d.ts +6 -0
- package/dist/agents/agents/runner.d.ts.map +1 -1
- package/dist/agents/agents/runner.js +82 -5
- package/dist/agents/agents/runner.js.map +1 -1
- package/dist/agents/agents/writer-tool-calling.d.ts.map +1 -1
- package/dist/agents/agents/writer-tool-calling.js +5 -2
- package/dist/agents/agents/writer-tool-calling.js.map +1 -1
- package/dist/agents/agents/writer.d.ts.map +1 -1
- package/dist/agents/agents/writer.js +8 -4
- package/dist/agents/agents/writer.js.map +1 -1
- package/dist/agents/fanout-scheduler.d.ts +72 -0
- package/dist/agents/fanout-scheduler.d.ts.map +1 -0
- package/dist/agents/fanout-scheduler.js +100 -0
- package/dist/agents/fanout-scheduler.js.map +1 -0
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +30 -1
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/agents/plan-quality.d.ts +58 -0
- package/dist/agents/plan-quality.d.ts.map +1 -0
- package/dist/agents/plan-quality.js +152 -0
- package/dist/agents/plan-quality.js.map +1 -0
- package/dist/agents/prompt-assembly.d.ts +8 -0
- package/dist/agents/prompt-assembly.d.ts.map +1 -1
- package/dist/agents/prompt-assembly.js +18 -0
- package/dist/agents/prompt-assembly.js.map +1 -1
- package/dist/agents/step-handoff.d.ts +12 -2
- package/dist/agents/step-handoff.d.ts.map +1 -1
- package/dist/agents/step-handoff.js +65 -8
- package/dist/agents/step-handoff.js.map +1 -1
- package/dist/agents/tool-calling-agent.d.ts.map +1 -1
- package/dist/agents/tool-calling-agent.js +18 -0
- package/dist/agents/tool-calling-agent.js.map +1 -1
- package/dist/cli/cache.d.ts.map +1 -1
- package/dist/cli/cache.js +34 -4
- package/dist/cli/cache.js.map +1 -1
- package/dist/cli/chat.d.ts +6 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +79 -18
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +6 -0
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts +10 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +179 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/continuity.d.ts +61 -0
- package/dist/cli/continuity.d.ts.map +1 -0
- package/dist/cli/continuity.js +112 -0
- package/dist/cli/continuity.js.map +1 -0
- package/dist/cli/dashboard.d.ts +3 -1
- package/dist/cli/dashboard.d.ts.map +1 -1
- package/dist/cli/dashboard.js +5 -16
- package/dist/cli/dashboard.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +48 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/execute.d.ts +8 -0
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +34 -1
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +24 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +134 -13
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/website.d.ts +25 -0
- package/dist/cli/website.d.ts.map +1 -0
- package/dist/cli/website.js +58 -0
- package/dist/cli/website.js.map +1 -0
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +35 -0
- package/dist/config/manager.js.map +1 -1
- package/dist/config/process-env.d.ts.map +1 -1
- package/dist/config/process-env.js +20 -0
- package/dist/config/process-env.js.map +1 -1
- package/dist/config/provider-env.d.ts +2 -1
- package/dist/config/provider-env.d.ts.map +1 -1
- package/dist/config/provider-env.js +19 -2
- package/dist/config/provider-env.js.map +1 -1
- package/dist/config/service-catalog.d.ts +81 -0
- package/dist/config/service-catalog.d.ts.map +1 -0
- package/dist/config/service-catalog.js +286 -0
- package/dist/config/service-catalog.js.map +1 -0
- package/dist/config/service-probe.d.ts +27 -0
- package/dist/config/service-probe.d.ts.map +1 -0
- package/dist/config/service-probe.js +104 -0
- package/dist/config/service-probe.js.map +1 -0
- package/dist/config/types.d.ts +63 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/context/cache.d.ts +46 -2
- package/dist/context/cache.d.ts.map +1 -1
- package/dist/context/cache.js +85 -7
- package/dist/context/cache.js.map +1 -1
- package/dist/findings/verdicts.d.ts +59 -0
- package/dist/findings/verdicts.d.ts.map +1 -1
- package/dist/findings/verdicts.js +117 -0
- package/dist/findings/verdicts.js.map +1 -1
- package/dist/forwarded.d.ts +2 -0
- package/dist/forwarded.d.ts.map +1 -0
- package/dist/forwarded.js +2 -0
- package/dist/forwarded.js.map +1 -0
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +9 -0
- package/dist/gateway/registry.js.map +1 -1
- package/dist/learning/auto-router.d.ts +30 -0
- package/dist/learning/auto-router.d.ts.map +1 -1
- package/dist/learning/auto-router.js +69 -12
- package/dist/learning/auto-router.js.map +1 -1
- package/dist/learning/context-assembly.d.ts +37 -0
- package/dist/learning/context-assembly.d.ts.map +1 -0
- package/dist/learning/context-assembly.js +63 -0
- package/dist/learning/context-assembly.js.map +1 -0
- package/dist/learning/reasoning-trace.d.ts +26 -5
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +21 -1
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/session-digest.d.ts +78 -0
- package/dist/learning/session-digest.d.ts.map +1 -0
- package/dist/learning/session-digest.js +185 -0
- package/dist/learning/session-digest.js.map +1 -0
- package/dist/learning/session-recall.d.ts +135 -0
- package/dist/learning/session-recall.d.ts.map +1 -0
- package/dist/learning/session-recall.js +305 -0
- package/dist/learning/session-recall.js.map +1 -0
- package/dist/learning/session-store.d.ts +172 -0
- package/dist/learning/session-store.d.ts.map +1 -0
- package/dist/learning/session-store.js +424 -0
- package/dist/learning/session-store.js.map +1 -0
- package/dist/learning/step-checkpoint.d.ts +28 -0
- package/dist/learning/step-checkpoint.d.ts.map +1 -1
- package/dist/learning/step-checkpoint.js +90 -6
- package/dist/learning/step-checkpoint.js.map +1 -1
- package/dist/learning/working-state.d.ts +19 -0
- package/dist/learning/working-state.d.ts.map +1 -1
- package/dist/learning/working-state.js +34 -1
- package/dist/learning/working-state.js.map +1 -1
- package/dist/parity/drivers.d.ts.map +1 -1
- package/dist/parity/drivers.js +29 -0
- package/dist/parity/drivers.js.map +1 -1
- package/dist/parity/wire-fixtures.d.ts +88 -0
- package/dist/parity/wire-fixtures.d.ts.map +1 -0
- package/dist/parity/wire-fixtures.js +405 -0
- package/dist/parity/wire-fixtures.js.map +1 -0
- package/dist/tools/artifact-append.d.ts +23 -0
- package/dist/tools/artifact-append.d.ts.map +1 -1
- package/dist/tools/artifact-append.js +28 -0
- package/dist/tools/artifact-append.js.map +1 -1
- package/dist/tools/ask-user.d.ts +5 -0
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/ask-user.js +51 -5
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/child-agent-entry.js +1 -0
- package/dist/tools/child-agent-entry.js.map +1 -1
- package/dist/tools/child-agent-runtime.d.ts +7 -0
- package/dist/tools/child-agent-runtime.d.ts.map +1 -1
- package/dist/tools/child-agent-runtime.js +116 -6
- package/dist/tools/child-agent-runtime.js.map +1 -1
- package/dist/tools/child-agent-worker.d.ts +15 -0
- package/dist/tools/child-agent-worker.d.ts.map +1 -0
- package/dist/tools/child-agent-worker.js.map +1 -0
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +11 -0
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/finding-tool.d.ts +6 -1
- package/dist/tools/finding-tool.d.ts.map +1 -1
- package/dist/tools/finding-tool.js +15 -2
- package/dist/tools/finding-tool.js.map +1 -1
- package/dist/tools/followup-utils.d.ts +35 -0
- package/dist/tools/followup-utils.d.ts.map +1 -1
- package/dist/tools/followup-utils.js +36 -0
- package/dist/tools/followup-utils.js.map +1 -1
- package/dist/tools/loop-project-context.d.ts +4 -1
- package/dist/tools/loop-project-context.d.ts.map +1 -1
- package/dist/tools/loop-project-context.js +48 -1
- package/dist/tools/loop-project-context.js.map +1 -1
- package/dist/tools/loop-skill-hint.d.ts.map +1 -1
- package/dist/tools/loop-skill-hint.js +7 -0
- package/dist/tools/loop-skill-hint.js.map +1 -1
- package/dist/tools/modality/image-gen.d.ts +25 -6
- package/dist/tools/modality/image-gen.d.ts.map +1 -1
- package/dist/tools/modality/image-gen.js +46 -27
- package/dist/tools/modality/image-gen.js.map +1 -1
- package/dist/tools/modality/image-providers.d.ts +71 -0
- package/dist/tools/modality/image-providers.d.ts.map +1 -0
- package/dist/tools/modality/image-providers.js +277 -0
- package/dist/tools/modality/image-providers.js.map +1 -0
- package/dist/tools/registry.d.ts +10 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +35 -8
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-cli.d.ts.map +1 -1
- package/dist/tools/run-cli.js +39 -1
- package/dist/tools/run-cli.js.map +1 -1
- package/dist/tools/run-terminal.d.ts.map +1 -1
- package/dist/tools/run-terminal.js +50 -6
- package/dist/tools/run-terminal.js.map +1 -1
- package/dist/tools/subagent-spawner.d.ts +8 -0
- package/dist/tools/subagent-spawner.d.ts.map +1 -1
- package/dist/tools/subagent-spawner.js +3 -0
- package/dist/tools/subagent-spawner.js.map +1 -1
- package/dist/tools/tool-loop.d.ts +55 -0
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +136 -0
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/untrusted-content.d.ts +29 -0
- package/dist/tools/untrusted-content.d.ts.map +1 -0
- package/dist/tools/untrusted-content.js +53 -0
- package/dist/tools/untrusted-content.js.map +1 -0
- package/dist/tools/web-research.d.ts +76 -14
- package/dist/tools/web-research.d.ts.map +1 -1
- package/dist/tools/web-research.js +280 -35
- package/dist/tools/web-research.js.map +1 -1
- package/dist/utils/effect-verification.d.ts +115 -0
- package/dist/utils/effect-verification.d.ts.map +1 -0
- package/dist/utils/effect-verification.js +337 -0
- package/dist/utils/effect-verification.js.map +1 -0
- package/dist/utils/open-url.d.ts +16 -0
- package/dist/utils/open-url.d.ts.map +1 -0
- package/dist/utils/open-url.js +32 -0
- package/dist/utils/open-url.js.map +1 -0
- package/dist/utils/project-env.d.ts +146 -0
- package/dist/utils/project-env.d.ts.map +1 -0
- package/dist/utils/project-env.js +584 -0
- package/dist/utils/project-env.js.map +1 -0
- package/dist/utils/shell.d.ts +7 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +2 -0
- package/dist/utils/shell.js.map +1 -1
- package/dist/web-dashboard/chat-console.d.ts +2 -0
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +7 -0
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +3 -1
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +534 -8
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +150 -1
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.d.ts +40 -0
- package/dist/web-dashboard/workspace-guard.d.ts.map +1 -0
- package/dist/web-dashboard/workspace-guard.js +92 -0
- package/dist/web-dashboard/workspace-guard.js.map +1 -0
- package/package.json +3 -1
- package/src/web-dashboard/public/assets/index-Beportyl.js +207 -0
- package/src/web-dashboard/public/assets/index-Beportyl.js.map +1 -0
- package/src/web-dashboard/public/assets/index-gtQyg9nm.css +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/src/web-dashboard/public/assets/index-J3sGSCLr.js +0 -207
- package/src/web-dashboard/public/assets/index-J3sGSCLr.js.map +0 -1
- package/src/web-dashboard/public/assets/index-u7mu-fxK.css +0 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service-provider catalog — the single source of truth for every THIRD-PARTY
|
|
3
|
+
* SERVICE the agent consumes (as opposed to the LLM providers in
|
|
4
|
+
* `inference/provider-catalog.ts`).
|
|
5
|
+
*
|
|
6
|
+
* The split matters:
|
|
7
|
+
* - **Providers** hand us models (chat/reasoning). Configured in the
|
|
8
|
+
* dashboard's Provider Configuration section + `.nuviraconfig.json`.
|
|
9
|
+
* - **Services** are capability backends the agent calls directly: image
|
|
10
|
+
* generation (Nano Banana / DALL·E / Stability), video (FAL), web search
|
|
11
|
+
* (Brave / Serper / Tavily / Google CSE / SearXNG), page reading (Jina),
|
|
12
|
+
* vision/interpretation and speech (ElevenLabs / OpenAI TTS).
|
|
13
|
+
*
|
|
14
|
+
* Every entry here is REAL: `envVars` are exactly the variables the tool
|
|
15
|
+
* implementations read at call time (`tools/modality/image-providers.ts`,
|
|
16
|
+
* `tools/web-research.ts`, `tools/video-generation.ts`, `tools/tts-streaming.ts`,
|
|
17
|
+
* …). The dashboard writes them to the 0600 credential env file
|
|
18
|
+
* (`~/.nuvira/.env`) that `loadEnv()` loads at startup — so configuring a
|
|
19
|
+
* service here is what makes that backend available to the agent, and nothing
|
|
20
|
+
* is advertised that no code path consumes.
|
|
21
|
+
*/
|
|
22
|
+
/** The capability a service provides — the dashboard groups by this. */
|
|
23
|
+
export type ServiceCapability = 'image' | 'video' | 'search' | 'vision' | 'speech';
|
|
24
|
+
/** One environment variable a service needs. */
|
|
25
|
+
export interface ServiceEnvVar {
|
|
26
|
+
/** Exact variable name the tool reads. */
|
|
27
|
+
varName: string;
|
|
28
|
+
/** Short human prompt for the field. */
|
|
29
|
+
prompt: string;
|
|
30
|
+
/** Secret values are masked in the UI and redacted for non-admin readers. */
|
|
31
|
+
secret: boolean;
|
|
32
|
+
}
|
|
33
|
+
/** A third-party service backend the agent can call. */
|
|
34
|
+
export interface ServiceDefinition {
|
|
35
|
+
/** Stable id used by the dashboard + CLI (`image-gemini`, `search-brave`). */
|
|
36
|
+
id: string;
|
|
37
|
+
label: string;
|
|
38
|
+
capability: ServiceCapability;
|
|
39
|
+
icon: string;
|
|
40
|
+
/** One-line description of what the agent uses it for. */
|
|
41
|
+
description: string;
|
|
42
|
+
/** The env vars that must/ may be set. Empty for keyless backends. */
|
|
43
|
+
envVars: ServiceEnvVar[];
|
|
44
|
+
/** True when every listed env var must be set to use the backend. */
|
|
45
|
+
requiresAllVars: boolean;
|
|
46
|
+
/** Keyless backends work with no configuration (free fallback). */
|
|
47
|
+
keyless: boolean;
|
|
48
|
+
/** Free to use (no paid account) — informational. */
|
|
49
|
+
free: boolean;
|
|
50
|
+
/** Where to obtain a key / set the service up (optional). */
|
|
51
|
+
docsUrl?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Other services sharing an env var — surfaced so the UI can explain why
|
|
54
|
+
* editing one row changes another's badge (e.g. OPENAI_API_KEY powers image,
|
|
55
|
+
* vision and speech).
|
|
56
|
+
*/
|
|
57
|
+
sharedNote?: string;
|
|
58
|
+
}
|
|
59
|
+
/** Human label for each capability group (dashboard section headings). */
|
|
60
|
+
export declare const SERVICE_CAPABILITY_LABELS: Record<ServiceCapability, string>;
|
|
61
|
+
/**
|
|
62
|
+
* The registry. Order within a capability is the display order; capability
|
|
63
|
+
* order in {@link SERVICE_CAPABILITY_ORDER} is the render order.
|
|
64
|
+
*/
|
|
65
|
+
export declare const SERVICE_CATALOG: readonly ServiceDefinition[];
|
|
66
|
+
/** Render order for the capability groups. */
|
|
67
|
+
export declare const SERVICE_CAPABILITY_ORDER: readonly ServiceCapability[];
|
|
68
|
+
/** Look up a service definition by id. */
|
|
69
|
+
export declare function getServiceDefinition(id: string): ServiceDefinition | undefined;
|
|
70
|
+
/** Every env var name any service can write (the dashboard's allowlist). */
|
|
71
|
+
export declare const SERVICE_ENV_VARS: ReadonlySet<string>;
|
|
72
|
+
/**
|
|
73
|
+
* Service definitions grouped by capability, in render order. Empty groups are
|
|
74
|
+
* omitted so the dashboard never renders an empty section.
|
|
75
|
+
*/
|
|
76
|
+
export declare function servicesByCapability(): Array<{
|
|
77
|
+
capability: ServiceCapability;
|
|
78
|
+
label: string;
|
|
79
|
+
services: ServiceDefinition[];
|
|
80
|
+
}>;
|
|
81
|
+
//# sourceMappingURL=service-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-catalog.d.ts","sourceRoot":"","sources":["../../src/config/service-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,wEAAwE;AACxE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEnF,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,iBAAiB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,qEAAqE;IACrE,eAAe,EAAE,OAAO,CAAC;IACzB,mEAAmE;IACnE,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,IAAI,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAMvE,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,iBAAiB,EAqO9C,CAAC;AAEX,8CAA8C;AAC9C,eAAO,MAAM,wBAAwB,EAAE,SAAS,iBAAiB,EAMhE,CAAC;AAEF,0CAA0C;AAC1C,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE9E;AAED,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAEhD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,KAAK,CAAC;IAAE,UAAU,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAC,CAM7H"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service-provider catalog — the single source of truth for every THIRD-PARTY
|
|
3
|
+
* SERVICE the agent consumes (as opposed to the LLM providers in
|
|
4
|
+
* `inference/provider-catalog.ts`).
|
|
5
|
+
*
|
|
6
|
+
* The split matters:
|
|
7
|
+
* - **Providers** hand us models (chat/reasoning). Configured in the
|
|
8
|
+
* dashboard's Provider Configuration section + `.nuviraconfig.json`.
|
|
9
|
+
* - **Services** are capability backends the agent calls directly: image
|
|
10
|
+
* generation (Nano Banana / DALL·E / Stability), video (FAL), web search
|
|
11
|
+
* (Brave / Serper / Tavily / Google CSE / SearXNG), page reading (Jina),
|
|
12
|
+
* vision/interpretation and speech (ElevenLabs / OpenAI TTS).
|
|
13
|
+
*
|
|
14
|
+
* Every entry here is REAL: `envVars` are exactly the variables the tool
|
|
15
|
+
* implementations read at call time (`tools/modality/image-providers.ts`,
|
|
16
|
+
* `tools/web-research.ts`, `tools/video-generation.ts`, `tools/tts-streaming.ts`,
|
|
17
|
+
* …). The dashboard writes them to the 0600 credential env file
|
|
18
|
+
* (`~/.nuvira/.env`) that `loadEnv()` loads at startup — so configuring a
|
|
19
|
+
* service here is what makes that backend available to the agent, and nothing
|
|
20
|
+
* is advertised that no code path consumes.
|
|
21
|
+
*/
|
|
22
|
+
/** Human label for each capability group (dashboard section headings). */
|
|
23
|
+
export const SERVICE_CAPABILITY_LABELS = {
|
|
24
|
+
image: '🖼️ Image generation',
|
|
25
|
+
video: '🎬 Video generation',
|
|
26
|
+
search: '🔎 Web search & page reading',
|
|
27
|
+
vision: '👁️ Vision / interpretation',
|
|
28
|
+
speech: '🔊 Speech (TTS / STT)',
|
|
29
|
+
};
|
|
30
|
+
// ─── Catalog ────────────────────────────────────────────────────────────────
|
|
31
|
+
/**
|
|
32
|
+
* The registry. Order within a capability is the display order; capability
|
|
33
|
+
* order in {@link SERVICE_CAPABILITY_ORDER} is the render order.
|
|
34
|
+
*/
|
|
35
|
+
export const SERVICE_CATALOG = [
|
|
36
|
+
// ── Image generation ────────────────────────────────────────────────────
|
|
37
|
+
{
|
|
38
|
+
id: 'image-gemini',
|
|
39
|
+
label: 'Google Gemini / Imagen (Nano Banana)',
|
|
40
|
+
capability: 'image',
|
|
41
|
+
icon: '🔷',
|
|
42
|
+
description: 'Gemini 2.5 Flash Image / Imagen — high-quality image generation.',
|
|
43
|
+
envVars: [{ varName: 'GEMINI_API_KEY', prompt: 'Google AI Studio API key', secret: true }],
|
|
44
|
+
requiresAllVars: true,
|
|
45
|
+
keyless: false,
|
|
46
|
+
free: false,
|
|
47
|
+
docsUrl: 'https://aistudio.google.com/apikey',
|
|
48
|
+
sharedNote: 'Also used for Gemini vision/interpretation.',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'image-openai',
|
|
52
|
+
label: 'OpenAI (DALL·E / gpt-image-1)',
|
|
53
|
+
capability: 'image',
|
|
54
|
+
icon: '🟢',
|
|
55
|
+
description: 'DALL·E 2/3 and gpt-image-1 image generation.',
|
|
56
|
+
envVars: [{ varName: 'OPENAI_API_KEY', prompt: 'OpenAI API key', secret: true }],
|
|
57
|
+
requiresAllVars: true,
|
|
58
|
+
keyless: false,
|
|
59
|
+
free: false,
|
|
60
|
+
docsUrl: 'https://platform.openai.com/api-keys',
|
|
61
|
+
sharedNote: 'Shared with OpenAI vision and TTS/STT.',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: 'image-stability',
|
|
65
|
+
label: 'Stability AI',
|
|
66
|
+
capability: 'image',
|
|
67
|
+
icon: '🎨',
|
|
68
|
+
description: 'Stable Image Core / SD3 — cheap, fast image generation.',
|
|
69
|
+
envVars: [{ varName: 'STABILITY_API_KEY', prompt: 'Stability API key', secret: true }],
|
|
70
|
+
requiresAllVars: true,
|
|
71
|
+
keyless: false,
|
|
72
|
+
free: false,
|
|
73
|
+
docsUrl: 'https://platform.stability.ai/account/keys',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
id: 'image-comfyui',
|
|
77
|
+
label: 'Local ComfyUI / Stable Diffusion',
|
|
78
|
+
capability: 'image',
|
|
79
|
+
icon: '🖥️',
|
|
80
|
+
description: 'A local ComfyUI/A1111 endpoint (POST {prompt,width,height} → image bytes).',
|
|
81
|
+
envVars: [{ varName: 'BUFF_IMAGE_API_URL', prompt: 'Local endpoint URL (e.g. http://127.0.0.1:8188/generate)', secret: false }],
|
|
82
|
+
requiresAllVars: true,
|
|
83
|
+
keyless: true,
|
|
84
|
+
free: true,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: 'image-pollinations',
|
|
88
|
+
label: 'Pollinations.ai',
|
|
89
|
+
capability: 'image',
|
|
90
|
+
icon: '🌸',
|
|
91
|
+
description: 'Free, keyless image generation — the always-available fallback.',
|
|
92
|
+
envVars: [],
|
|
93
|
+
requiresAllVars: false,
|
|
94
|
+
keyless: true,
|
|
95
|
+
free: true,
|
|
96
|
+
},
|
|
97
|
+
// ── Video generation ────────────────────────────────────────────────────
|
|
98
|
+
{
|
|
99
|
+
id: 'video-fal',
|
|
100
|
+
label: 'FAL.ai (video)',
|
|
101
|
+
capability: 'video',
|
|
102
|
+
icon: '🎬',
|
|
103
|
+
description: 'Text-to-video / image-to-video (flux video models) via FAL.',
|
|
104
|
+
envVars: [{ varName: 'FAL_KEY', prompt: 'FAL API key', secret: true }],
|
|
105
|
+
requiresAllVars: true,
|
|
106
|
+
keyless: false,
|
|
107
|
+
free: false,
|
|
108
|
+
docsUrl: 'https://fal.ai/dashboard/keys',
|
|
109
|
+
},
|
|
110
|
+
// ── Web search & page reading ───────────────────────────────────────────
|
|
111
|
+
{
|
|
112
|
+
id: 'search-brave',
|
|
113
|
+
label: 'Brave Search',
|
|
114
|
+
capability: 'search',
|
|
115
|
+
icon: '🦁',
|
|
116
|
+
description: 'Independent web index — paid, high quality, privacy-focused.',
|
|
117
|
+
envVars: [{ varName: 'BRAVE_SEARCH_API_KEY', prompt: 'Brave Search subscription token', secret: true }],
|
|
118
|
+
requiresAllVars: true,
|
|
119
|
+
keyless: false,
|
|
120
|
+
free: false,
|
|
121
|
+
docsUrl: 'https://api-dashboard.search.brave.com/app/keys',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: 'search-serper',
|
|
125
|
+
label: 'Serper.dev',
|
|
126
|
+
capability: 'search',
|
|
127
|
+
icon: '🔍',
|
|
128
|
+
description: 'Google SERP proxy — cheap, fast Google results.',
|
|
129
|
+
envVars: [{ varName: 'SERPER_API_KEY', prompt: 'Serper API key', secret: true }],
|
|
130
|
+
requiresAllVars: true,
|
|
131
|
+
keyless: false,
|
|
132
|
+
free: false,
|
|
133
|
+
docsUrl: 'https://serper.dev/api-key',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: 'search-tavily',
|
|
137
|
+
label: 'Tavily',
|
|
138
|
+
capability: 'search',
|
|
139
|
+
icon: '🧭',
|
|
140
|
+
description: 'LLM-optimised search API with clean snippets.',
|
|
141
|
+
envVars: [{ varName: 'TAVILY_API_KEY', prompt: 'Tavily API key (tvly-…)', secret: true }],
|
|
142
|
+
requiresAllVars: true,
|
|
143
|
+
keyless: false,
|
|
144
|
+
free: false,
|
|
145
|
+
docsUrl: 'https://app.tavily.com/home',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
id: 'search-google-cse',
|
|
149
|
+
label: 'Google Programmable Search',
|
|
150
|
+
capability: 'search',
|
|
151
|
+
icon: '🔵',
|
|
152
|
+
description: 'Google Custom Search JSON API (needs both an API key and an engine id).',
|
|
153
|
+
envVars: [
|
|
154
|
+
{ varName: 'GOOGLE_CSE_API_KEY', prompt: 'Google API key', secret: true },
|
|
155
|
+
{ varName: 'GOOGLE_CSE_ID', prompt: 'Search engine id (cx)', secret: false },
|
|
156
|
+
],
|
|
157
|
+
requiresAllVars: true,
|
|
158
|
+
keyless: false,
|
|
159
|
+
free: false,
|
|
160
|
+
docsUrl: 'https://programmablesearchengine.google.com/controlpanel/all',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: 'search-searxng',
|
|
164
|
+
label: 'SearXNG (self-hosted)',
|
|
165
|
+
capability: 'search',
|
|
166
|
+
icon: '🧩',
|
|
167
|
+
description: 'Self-hosted metasearch JSON endpoint (no key, you run it).',
|
|
168
|
+
envVars: [{ varName: 'SEARXNG_URL', prompt: 'SearXNG base URL (e.g. http://localhost:8888)', secret: false }],
|
|
169
|
+
requiresAllVars: true,
|
|
170
|
+
keyless: true,
|
|
171
|
+
free: true,
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
id: 'search-duckduckgo',
|
|
175
|
+
label: 'DuckDuckGo',
|
|
176
|
+
capability: 'search',
|
|
177
|
+
icon: '🦆',
|
|
178
|
+
description: 'Keyless HTML search — the always-available fallback.',
|
|
179
|
+
envVars: [],
|
|
180
|
+
requiresAllVars: false,
|
|
181
|
+
keyless: true,
|
|
182
|
+
free: true,
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
id: 'reader-jina',
|
|
186
|
+
label: 'Jina Reader (page reading)',
|
|
187
|
+
capability: 'search',
|
|
188
|
+
icon: '📄',
|
|
189
|
+
description: 'Page-to-markdown extraction. Optional — a plain HTTP fetch is used without it.',
|
|
190
|
+
envVars: [{ varName: 'JINA_API_KEY', prompt: 'Jina Reader API key (optional)', secret: true }],
|
|
191
|
+
requiresAllVars: false,
|
|
192
|
+
keyless: true,
|
|
193
|
+
free: true,
|
|
194
|
+
docsUrl: 'https://jina.ai/reader/',
|
|
195
|
+
},
|
|
196
|
+
// ── Vision / interpretation ─────────────────────────────────────────────
|
|
197
|
+
{
|
|
198
|
+
id: 'vision-gemini',
|
|
199
|
+
label: 'Google Gemini (vision)',
|
|
200
|
+
capability: 'vision',
|
|
201
|
+
icon: '👁️',
|
|
202
|
+
description: 'Image understanding / screenshot interpretation.',
|
|
203
|
+
envVars: [{ varName: 'GEMINI_API_KEY', prompt: 'Google AI Studio API key', secret: true }],
|
|
204
|
+
requiresAllVars: true,
|
|
205
|
+
keyless: false,
|
|
206
|
+
free: false,
|
|
207
|
+
docsUrl: 'https://aistudio.google.com/apikey',
|
|
208
|
+
sharedNote: 'Shared with Gemini/Nano-Banana image generation.',
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
id: 'vision-openai',
|
|
212
|
+
label: 'OpenAI (vision)',
|
|
213
|
+
capability: 'vision',
|
|
214
|
+
icon: '👁️',
|
|
215
|
+
description: 'Vision models for image interpretation.',
|
|
216
|
+
envVars: [{ varName: 'OPENAI_API_KEY', prompt: 'OpenAI API key', secret: true }],
|
|
217
|
+
requiresAllVars: true,
|
|
218
|
+
keyless: false,
|
|
219
|
+
free: false,
|
|
220
|
+
docsUrl: 'https://platform.openai.com/api-keys',
|
|
221
|
+
sharedNote: 'Shared with OpenAI image generation and TTS/STT.',
|
|
222
|
+
},
|
|
223
|
+
// ── Speech ──────────────────────────────────────────────────────────────
|
|
224
|
+
{
|
|
225
|
+
id: 'speech-elevenlabs',
|
|
226
|
+
label: 'ElevenLabs',
|
|
227
|
+
capability: 'speech',
|
|
228
|
+
icon: '🔊',
|
|
229
|
+
description: 'High-quality text-to-speech (streaming).',
|
|
230
|
+
envVars: [{ varName: 'ELEVENLABS_API_KEY', prompt: 'ElevenLabs API key', secret: true }],
|
|
231
|
+
requiresAllVars: true,
|
|
232
|
+
keyless: false,
|
|
233
|
+
free: false,
|
|
234
|
+
docsUrl: 'https://elevenlabs.io/app/settings/api-keys',
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
id: 'speech-openai',
|
|
238
|
+
label: 'OpenAI (TTS)',
|
|
239
|
+
capability: 'speech',
|
|
240
|
+
icon: '🔉',
|
|
241
|
+
description: 'OpenAI text-to-speech fallback.',
|
|
242
|
+
envVars: [{ varName: 'OPENAI_API_KEY', prompt: 'OpenAI API key', secret: true }],
|
|
243
|
+
requiresAllVars: true,
|
|
244
|
+
keyless: false,
|
|
245
|
+
free: false,
|
|
246
|
+
docsUrl: 'https://platform.openai.com/api-keys',
|
|
247
|
+
sharedNote: 'Shared with OpenAI image and vision.',
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
id: 'speech-neutts',
|
|
251
|
+
label: 'NeuTTS (local)',
|
|
252
|
+
capability: 'speech',
|
|
253
|
+
icon: '🎙️',
|
|
254
|
+
description: 'Local neural TTS sidecar (optional key if your server requires one).',
|
|
255
|
+
envVars: [{ varName: 'NEUTTS_API_KEY', prompt: 'NeuTTS API key (optional)', secret: true }],
|
|
256
|
+
requiresAllVars: false,
|
|
257
|
+
keyless: true,
|
|
258
|
+
free: true,
|
|
259
|
+
},
|
|
260
|
+
];
|
|
261
|
+
/** Render order for the capability groups. */
|
|
262
|
+
export const SERVICE_CAPABILITY_ORDER = [
|
|
263
|
+
'image',
|
|
264
|
+
'video',
|
|
265
|
+
'search',
|
|
266
|
+
'vision',
|
|
267
|
+
'speech',
|
|
268
|
+
];
|
|
269
|
+
/** Look up a service definition by id. */
|
|
270
|
+
export function getServiceDefinition(id) {
|
|
271
|
+
return SERVICE_CATALOG.find((s) => s.id === id);
|
|
272
|
+
}
|
|
273
|
+
/** Every env var name any service can write (the dashboard's allowlist). */
|
|
274
|
+
export const SERVICE_ENV_VARS = new Set(SERVICE_CATALOG.flatMap((s) => s.envVars.map((v) => v.varName)));
|
|
275
|
+
/**
|
|
276
|
+
* Service definitions grouped by capability, in render order. Empty groups are
|
|
277
|
+
* omitted so the dashboard never renders an empty section.
|
|
278
|
+
*/
|
|
279
|
+
export function servicesByCapability() {
|
|
280
|
+
return SERVICE_CAPABILITY_ORDER.map((capability) => ({
|
|
281
|
+
capability,
|
|
282
|
+
label: SERVICE_CAPABILITY_LABELS[capability],
|
|
283
|
+
services: SERVICE_CATALOG.filter((s) => s.capability === capability),
|
|
284
|
+
})).filter((g) => g.services.length > 0);
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=service-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-catalog.js","sourceRoot":"","sources":["../../src/config/service-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service reachability probes — backs the dashboard's per-service
|
|
3
|
+
* "Test connection" button and keeps it honest.
|
|
4
|
+
*
|
|
5
|
+
* A saved key is not the same as a WORKING key: a typo'd or revoked credential
|
|
6
|
+
* looks configured and then fails on first use. Each probe makes the smallest
|
|
7
|
+
* real request the backend allows and classifies the response — 2xx = reachable,
|
|
8
|
+
* 401/403 = key rejected by the provider, anything else = the provider answered
|
|
9
|
+
* but not as expected. Probes never throw; a network failure is reported as a
|
|
10
|
+
* failed probe with the reason.
|
|
11
|
+
*
|
|
12
|
+
* The fetch is injectable so tests can stub it (no network in tests).
|
|
13
|
+
*/
|
|
14
|
+
import type { ServiceDefinition } from './service-catalog.js';
|
|
15
|
+
export interface ServiceProbeResult {
|
|
16
|
+
ok: boolean;
|
|
17
|
+
/** Human-readable outcome, e.g. "Reachable (HTTP 200)" or "Key rejected (HTTP 401)". */
|
|
18
|
+
detail: string;
|
|
19
|
+
}
|
|
20
|
+
type FetchFn = typeof fetch;
|
|
21
|
+
/**
|
|
22
|
+
* Probe one service. `values` maps env-var name → value (from the credential
|
|
23
|
+
* env file / process env); missing optional vars are simply undefined.
|
|
24
|
+
*/
|
|
25
|
+
export declare function probeService(def: ServiceDefinition, values: Record<string, string>, fetchFn?: FetchFn): Promise<ServiceProbeResult>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=service-probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-probe.d.ts","sourceRoot":"","sources":["../../src/config/service-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,wFAAwF;IACxF,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,KAAK,OAAO,GAAG,OAAO,KAAK,CAAC;AAoC5B;;;GAGG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,GAAE,OAA2C,GACnD,OAAO,CAAC,kBAAkB,CAAC,CAkG7B"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service reachability probes — backs the dashboard's per-service
|
|
3
|
+
* "Test connection" button and keeps it honest.
|
|
4
|
+
*
|
|
5
|
+
* A saved key is not the same as a WORKING key: a typo'd or revoked credential
|
|
6
|
+
* looks configured and then fails on first use. Each probe makes the smallest
|
|
7
|
+
* real request the backend allows and classifies the response — 2xx = reachable,
|
|
8
|
+
* 401/403 = key rejected by the provider, anything else = the provider answered
|
|
9
|
+
* but not as expected. Probes never throw; a network failure is reported as a
|
|
10
|
+
* failed probe with the reason.
|
|
11
|
+
*
|
|
12
|
+
* The fetch is injectable so tests can stub it (no network in tests).
|
|
13
|
+
*/
|
|
14
|
+
const PROBE_TIMEOUT_MS = 8_000;
|
|
15
|
+
/** fetch with an abort timeout; the caller classifies the response. */
|
|
16
|
+
async function request(url, init, fetchFn) {
|
|
17
|
+
const controller = new AbortController();
|
|
18
|
+
const timer = setTimeout(() => controller.abort(), PROBE_TIMEOUT_MS);
|
|
19
|
+
try {
|
|
20
|
+
return await fetchFn(url, { ...init, signal: controller.signal });
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
clearTimeout(timer);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Strict probe: a 2xx proves the key works; 401/403 means it was rejected. */
|
|
27
|
+
function classifyStrict(res) {
|
|
28
|
+
if (res.ok)
|
|
29
|
+
return { ok: true, detail: `Reachable (HTTP ${res.status})` };
|
|
30
|
+
if (res.status === 401 || res.status === 403)
|
|
31
|
+
return { ok: false, detail: `Key rejected (HTTP ${res.status})` };
|
|
32
|
+
return { ok: false, detail: `Unexpected response (HTTP ${res.status})` };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Reachability probe for backends with no cheap read endpoint (a local server,
|
|
36
|
+
* FAL's POST-only API): any non-auth, non-5xx answer proves the network path and
|
|
37
|
+
* the credentials were at least accepted far enough to route.
|
|
38
|
+
*/
|
|
39
|
+
function classifyReachable(res) {
|
|
40
|
+
if (res.status === 401 || res.status === 403)
|
|
41
|
+
return { ok: false, detail: `Key rejected (HTTP ${res.status})` };
|
|
42
|
+
if (res.status >= 500)
|
|
43
|
+
return { ok: false, detail: `Backend error (HTTP ${res.status})` };
|
|
44
|
+
return { ok: true, detail: `Reachable (HTTP ${res.status})` };
|
|
45
|
+
}
|
|
46
|
+
function fail(err) {
|
|
47
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
48
|
+
return { ok: false, detail: msg.includes('abort') ? 'Timed out' : `Connection failed: ${msg}` };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Probe one service. `values` maps env-var name → value (from the credential
|
|
52
|
+
* env file / process env); missing optional vars are simply undefined.
|
|
53
|
+
*/
|
|
54
|
+
export async function probeService(def, values, fetchFn = globalThis.fetch.bind(globalThis)) {
|
|
55
|
+
// Keyless backends need nothing to be verifiable.
|
|
56
|
+
if (def.envVars.length === 0) {
|
|
57
|
+
return { ok: true, detail: 'No key needed — this backend is always available.' };
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
switch (def.id) {
|
|
61
|
+
// ── Image ────────────────────────────────────────────────────────────
|
|
62
|
+
case 'image-gemini':
|
|
63
|
+
case 'vision-gemini':
|
|
64
|
+
return classifyStrict(await request(`https://generativelanguage.googleapis.com/v1beta/models?key=${encodeURIComponent(values.GEMINI_API_KEY ?? '')}`, {}, fetchFn));
|
|
65
|
+
case 'image-openai':
|
|
66
|
+
case 'vision-openai':
|
|
67
|
+
case 'speech-openai':
|
|
68
|
+
return classifyStrict(await request('https://api.openai.com/v1/models', { headers: { Authorization: `Bearer ${values.OPENAI_API_KEY ?? ''}` } }, fetchFn));
|
|
69
|
+
case 'image-stability':
|
|
70
|
+
return classifyStrict(await request('https://api.stability.ai/v1/user/account', { headers: { Authorization: `Bearer ${values.STABILITY_API_KEY ?? ''}` } }, fetchFn));
|
|
71
|
+
case 'image-comfyui':
|
|
72
|
+
return classifyReachable(await request(values.BUFF_IMAGE_API_URL ?? '', { method: 'GET' }, fetchFn));
|
|
73
|
+
// ── Video ────────────────────────────────────────────────────────────
|
|
74
|
+
case 'video-fal':
|
|
75
|
+
// FAL's REST API is POST-only; a GET to the host proves reachability and
|
|
76
|
+
// surfaces an auth rejection, which is what a connection test needs.
|
|
77
|
+
return classifyReachable(await request('https://fal.run/', { method: 'GET', headers: { Authorization: `Key ${values.FAL_KEY ?? ''}` } }, fetchFn));
|
|
78
|
+
// ── Web search & reading ─────────────────────────────────────────────
|
|
79
|
+
case 'search-brave':
|
|
80
|
+
return classifyStrict(await request('https://api.search.brave.com/res/v1/web/search?q=nuvira&count=1', { headers: { 'X-Subscription-Token': values.BRAVE_SEARCH_API_KEY ?? '', Accept: 'application/json' } }, fetchFn));
|
|
81
|
+
case 'search-serper':
|
|
82
|
+
return classifyStrict(await request('https://google.serper.dev/search', { method: 'POST', headers: { 'X-API-KEY': values.SERPER_API_KEY ?? '', 'content-type': 'application/json' }, body: JSON.stringify({ q: 'nuvira', num: 1 }) }, fetchFn));
|
|
83
|
+
case 'search-tavily':
|
|
84
|
+
return classifyStrict(await request('https://api.tavily.com/search', { method: 'POST', headers: { Authorization: `Bearer ${values.TAVILY_API_KEY ?? ''}`, 'content-type': 'application/json' }, body: JSON.stringify({ query: 'nuvira', max_results: 1 }) }, fetchFn));
|
|
85
|
+
case 'search-google-cse':
|
|
86
|
+
return classifyStrict(await request(`https://www.googleapis.com/customsearch/v1?key=${encodeURIComponent(values.GOOGLE_CSE_API_KEY ?? '')}&cx=${encodeURIComponent(values.GOOGLE_CSE_ID ?? '')}&q=nuvira&num=1`, {}, fetchFn));
|
|
87
|
+
case 'search-searxng':
|
|
88
|
+
return classifyReachable(await request(`${(values.SEARXNG_URL ?? '').replace(/\/$/, '')}/search?q=nuvira&format=json`, { method: 'GET' }, fetchFn));
|
|
89
|
+
case 'reader-jina':
|
|
90
|
+
return classifyStrict(await request('https://r.jina.ai/https://example.com', { headers: values.JINA_API_KEY ? { Authorization: `Bearer ${values.JINA_API_KEY}` } : {} }, fetchFn));
|
|
91
|
+
// ── Speech ───────────────────────────────────────────────────────────
|
|
92
|
+
case 'speech-elevenlabs':
|
|
93
|
+
return classifyStrict(await request('https://api.elevenlabs.io/v1/user', { headers: { 'xi-api-key': values.ELEVENLABS_API_KEY ?? '' } }, fetchFn));
|
|
94
|
+
case 'speech-neutts':
|
|
95
|
+
return { ok: true, detail: 'Local sidecar — no remote reachability check.' };
|
|
96
|
+
default:
|
|
97
|
+
return { ok: false, detail: 'No probe is defined for this service.' };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
return fail(err);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=service-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-probe.js","sourceRoot":"","sources":["../../src/config/service-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAI/B,uEAAuE;AACvE,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAiB,EAAE,OAAgB;IACrE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrE,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,SAAS,cAAc,CAAC,GAAa;IACnC,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAC1E,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAChH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,6BAA6B,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,GAAa;IACtC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAChH,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAC1F,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,IAAI,CAAC,GAAY;IACxB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB,GAAG,EAAE,EAAE,CAAC;AAClG,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAsB,EACtB,MAA8B,EAC9B,UAAmB,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;IAEpD,kDAAkD;IAClD,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,mDAAmD,EAAE,CAAC;IACnF,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC;YACf,wEAAwE;YACxE,KAAK,cAAc,CAAC;YACpB,KAAK,eAAe;gBAClB,OAAO,cAAc,CACnB,MAAM,OAAO,CACX,+DAA+D,kBAAkB,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,EAChH,EAAE,EACF,OAAO,CACR,CACF,CAAC;YACJ,KAAK,cAAc,CAAC;YACpB,KAAK,eAAe,CAAC;YACrB,KAAK,eAAe;gBAClB,OAAO,cAAc,CACnB,MAAM,OAAO,CAAC,kCAAkC,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,cAAc,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CACpI,CAAC;YACJ,KAAK,iBAAiB;gBACpB,OAAO,cAAc,CACnB,MAAM,OAAO,CAAC,0CAA0C,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,iBAAiB,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAC/I,CAAC;YACJ,KAAK,eAAe;gBAClB,OAAO,iBAAiB,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YAEvG,wEAAwE;YACxE,KAAK,WAAW;gBACd,yEAAyE;gBACzE,qEAAqE;gBACrE,OAAO,iBAAiB,CACtB,MAAM,OAAO,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,OAAO,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CACzH,CAAC;YAEJ,wEAAwE;YACxE,KAAK,cAAc;gBACjB,OAAO,cAAc,CACnB,MAAM,OAAO,CACX,iEAAiE,EACjE,EAAE,OAAO,EAAE,EAAE,sBAAsB,EAAE,MAAM,CAAC,oBAAoB,IAAI,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,EACtG,OAAO,CACR,CACF,CAAC;YACJ,KAAK,eAAe;gBAClB,OAAO,cAAc,CACnB,MAAM,OAAO,CACX,kCAAkC,EAClC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,cAAc,IAAI,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAC5J,OAAO,CACR,CACF,CAAC;YACJ,KAAK,eAAe;gBAClB,OAAO,cAAc,CACnB,MAAM,OAAO,CACX,+BAA+B,EAC/B,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,cAAc,IAAI,EAAE,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,EACtL,OAAO,CACR,CACF,CAAC;YACJ,KAAK,mBAAmB;gBACtB,OAAO,cAAc,CACnB,MAAM,OAAO,CACX,kDAAkD,kBAAkB,CAAC,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAC,OAAO,kBAAkB,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,iBAAiB,EAC3K,EAAE,EACF,OAAO,CACR,CACF,CAAC;YACJ,KAAK,gBAAgB;gBACnB,OAAO,iBAAiB,CACtB,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAC1H,CAAC;YACJ,KAAK,aAAa;gBAChB,OAAO,cAAc,CACnB,MAAM,OAAO,CACX,uCAAuC,EACvC,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAC1F,OAAO,CACR,CACF,CAAC;YAEJ,wEAAwE;YACxE,KAAK,mBAAmB;gBACtB,OAAO,cAAc,CACnB,MAAM,OAAO,CAAC,mCAAmC,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,kBAAkB,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAC5H,CAAC;YACJ,KAAK,eAAe;gBAClB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,+CAA+C,EAAE,CAAC;YAC/E;gBACE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;QAC1E,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -110,6 +110,20 @@ export interface MemoryConfig {
|
|
|
110
110
|
* - `json` — exact flat cosine scan (the original behavior).
|
|
111
111
|
*/
|
|
112
112
|
vectorBackend?: 'auto' | 'faiss' | 'json';
|
|
113
|
+
/**
|
|
114
|
+
* Persist session transcripts across process death (default: true). On, a run
|
|
115
|
+
* snapshots its conversation at each step boundary to
|
|
116
|
+
* `~/.nuvira/memory/sessions/`, so a killed/crashed turn can be picked up by
|
|
117
|
+
* the next one; a completed turn is closed and never resumed. Set false to
|
|
118
|
+
* turn it off. Also `NUVIRA_SESSION_STORE=0` / `--no-session-store`.
|
|
119
|
+
*/
|
|
120
|
+
sessionStore?: boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Index finished asks for SEMANTIC recall and surface similar PAST asks
|
|
123
|
+
* (default: true). Advisory history only — never a status. Set false to turn
|
|
124
|
+
* it off. Also `NUVIRA_SESSION_RECALL=0` / `--no-session-recall`.
|
|
125
|
+
*/
|
|
126
|
+
sessionRecall?: boolean;
|
|
113
127
|
}
|
|
114
128
|
/**
|
|
115
129
|
* Per-provider quota limits for the central quota ledger.
|
|
@@ -463,6 +477,16 @@ export interface BuffConfig {
|
|
|
463
477
|
* BUFF_SKILLS_REGISTRY env override when present (I7 P1 multi-source).
|
|
464
478
|
*/
|
|
465
479
|
skills?: SkillsConfig;
|
|
480
|
+
/**
|
|
481
|
+
* Modality backend selection (image generation, and future audio/video).
|
|
482
|
+
* Absent = auto-select the first backend whose API key is configured.
|
|
483
|
+
*/
|
|
484
|
+
modality?: ModalityConfig;
|
|
485
|
+
/**
|
|
486
|
+
* Dashboard runtime settings. Managed via the Admin page's Workspace field
|
|
487
|
+
* or `nuvira config set dashboard.cwd <dir>`.
|
|
488
|
+
*/
|
|
489
|
+
dashboard?: DashboardConfig;
|
|
466
490
|
/**
|
|
467
491
|
* Gateway per-platform inbound policies (who may trigger the agent). Managed
|
|
468
492
|
* via `nuvira config gateway allow/disallow/reply` or the dashboard Permissions
|
|
@@ -544,6 +568,45 @@ export interface SkillsConfig {
|
|
|
544
568
|
*/
|
|
545
569
|
registries?: string[];
|
|
546
570
|
}
|
|
571
|
+
/**
|
|
572
|
+
* Modality configuration — backend selection for image generation (and, in
|
|
573
|
+
* future, audio/video). `modality.image.provider` pins a specific backend
|
|
574
|
+
* (gemini | openai | stability | comfyui | pollinations); when unset the first
|
|
575
|
+
* backend whose API key is configured is used. `modality.image.model` overrides
|
|
576
|
+
* the provider's default model, and `modality.image.baseUrl` overrides an
|
|
577
|
+
* endpoint where a provider supports one. Set via
|
|
578
|
+
* `nuvira config set modality.image.provider <id>` or directly in
|
|
579
|
+
* .nuviraconfig.json.
|
|
580
|
+
*/
|
|
581
|
+
export interface ModalityConfig {
|
|
582
|
+
image?: {
|
|
583
|
+
/** Backend id: gemini | openai | stability | comfyui | pollinations. */
|
|
584
|
+
provider?: string;
|
|
585
|
+
/** Provider-specific model override. */
|
|
586
|
+
model?: string;
|
|
587
|
+
/** Optional endpoint override (e.g. a self-hosted gateway). */
|
|
588
|
+
baseUrl?: string;
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* Dashboard runtime settings.
|
|
593
|
+
*
|
|
594
|
+
* The dashboard's chat turns run against a DIRECTORY. When the user has
|
|
595
|
+
* attached a project the turn is scoped to it; when they have not, the turn
|
|
596
|
+
* used to inherit the dashboard server process's own working directory — which
|
|
597
|
+
* for a service started from the home folder meant "assess this project"
|
|
598
|
+
* assessed whatever happened to be in `~`. `dashboard.cwd` makes that fallback
|
|
599
|
+
* explicit and configurable instead of accidental: set it to a project root and
|
|
600
|
+
* an unintended folder can never be scanned again.
|
|
601
|
+
*/
|
|
602
|
+
export interface DashboardConfig {
|
|
603
|
+
/**
|
|
604
|
+
* Directory dashboard chat turns run in when no project is attached.
|
|
605
|
+
* Absolute path; must exist. Absent = the server process's own cwd (the
|
|
606
|
+
* legacy behaviour, and the reason the ask-to-attach guard exists).
|
|
607
|
+
*/
|
|
608
|
+
cwd?: string;
|
|
609
|
+
}
|
|
547
610
|
/**
|
|
548
611
|
* Toolsets configuration — one enable flag per named tool group.
|
|
549
612
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhG;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE/D,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhG;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE/D,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC1C;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE;QACV,kFAAkF;QAClF,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,4CAA4C;QAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,0CAA0C;QAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,6DAA6D;QAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,sEAAsE;QACtE,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mEAAmE;QACnE,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF;;;;;OAKG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE;QACd,8EAA8E;QAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,4GAA4G;QAC5G,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE;QACZ,yDAAyD;QACzD,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,2EAA2E;QAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,0EAA0E;QAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF;;;;;;;;;OASG;IACH,gBAAgB,CAAC,EAAE;QACjB;;;;WAIG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;;WAKG;QACH,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IACF;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IAC1C;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,UAAU,GAAG,mBAAmB,GAAG,YAAY,GAAG,eAAe,CAAC;CACpF;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,YAAY,CAAC;IAC9B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,gCAAgC;IAChC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,iCAAiC;IACjC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,yEAAyE;IACzE,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,kEAAkE;IAClE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,cAAc,CAAC,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;YAAC,UAAU,CAAC,EAAE,OAAO,CAAC;YAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC,CAAC;QAC3N;;;;;WAKG;QACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B;;;;;;;;;;;;;;;;;;;WAmBG;QACH,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,gFAAgF;QAChF,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B;;;;;;;;;WASG;QACH,kBAAkB,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/D,CAAC;CACH;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE;QACN,wEAAwE;QACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,wCAAwC;QACxC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,+DAA+D;QAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACjD;;;;;OAKG;IACH,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrC;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB"}
|