@nac3/forge-cli 1.0.28 → 1.0.31
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/dist/bin/yf.d.ts.map +1 -1
- package/dist/bin/yf.js +5 -0
- package/dist/bin/yf.js.map +1 -1
- package/dist/chat/claude.d.ts +13 -0
- package/dist/chat/claude.d.ts.map +1 -1
- package/dist/chat/claude.js +18 -5
- package/dist/chat/claude.js.map +1 -1
- package/dist/chat/claude_cli.d.ts.map +1 -1
- package/dist/chat/claude_cli.js +10 -0
- package/dist/chat/claude_cli.js.map +1 -1
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +111 -10
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +35 -2
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools.d.ts.map +1 -1
- package/dist/chat/tools.js +56 -34
- package/dist/chat/tools.js.map +1 -1
- package/dist/commands/federation.d.ts +17 -0
- package/dist/commands/federation.d.ts.map +1 -0
- package/dist/commands/federation.js +145 -0
- package/dist/commands/federation.js.map +1 -0
- package/dist/core/brain_capabilities.d.ts +64 -0
- package/dist/core/brain_capabilities.d.ts.map +1 -0
- package/dist/core/brain_capabilities.js +119 -0
- package/dist/core/brain_capabilities.js.map +1 -0
- package/dist/core/brain_config.d.ts +1 -1
- package/dist/core/brain_config.d.ts.map +1 -1
- package/dist/core/brain_config.js +7 -0
- package/dist/core/brain_config.js.map +1 -1
- package/dist/core/cost_router.d.ts +6 -0
- package/dist/core/cost_router.d.ts.map +1 -1
- package/dist/core/cost_router.js +122 -8
- package/dist/core/cost_router.js.map +1 -1
- package/dist/core/federation_config.d.ts +17 -0
- package/dist/core/federation_config.d.ts.map +1 -0
- package/dist/core/federation_config.js +77 -0
- package/dist/core/federation_config.js.map +1 -0
- package/dist/core/provider_keys.d.ts +1 -1
- package/dist/core/provider_keys.d.ts.map +1 -1
- package/dist/core/provider_keys.js +3 -0
- package/dist/core/provider_keys.js.map +1 -1
- package/dist/core/provider_models.d.ts.map +1 -1
- package/dist/core/provider_models.js +10 -0
- package/dist/core/provider_models.js.map +1 -1
- package/dist/llm/federation_client.d.ts +66 -0
- package/dist/llm/federation_client.d.ts.map +1 -0
- package/dist/llm/federation_client.js +166 -0
- package/dist/llm/federation_client.js.map +1 -0
- package/dist/llm/federation_host.d.ts +16 -0
- package/dist/llm/federation_host.d.ts.map +1 -0
- package/dist/llm/federation_host.js +132 -0
- package/dist/llm/federation_host.js.map +1 -0
- package/dist/llm/gemini_client.d.ts.map +1 -1
- package/dist/llm/gemini_client.js +15 -6
- package/dist/llm/gemini_client.js.map +1 -1
- package/dist/llm/multi_provider_client.d.ts.map +1 -1
- package/dist/llm/multi_provider_client.js +27 -0
- package/dist/llm/multi_provider_client.js.map +1 -1
- package/dist/llm/openai_client.d.ts +4 -0
- package/dist/llm/openai_client.d.ts.map +1 -1
- package/dist/llm/openai_client.js +18 -6
- package/dist/llm/openai_client.js.map +1 -1
- package/dist/llm/single_step.d.ts +63 -0
- package/dist/llm/single_step.d.ts.map +1 -0
- package/dist/llm/single_step.js +171 -0
- package/dist/llm/single_step.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/** MIME types every vision-capable provider in our v1 set accepts. */
|
|
2
|
+
export const SUPPORTED_IMAGE_MEDIA_TYPES = [
|
|
3
|
+
'image/png',
|
|
4
|
+
'image/jpeg',
|
|
5
|
+
'image/webp',
|
|
6
|
+
'image/gif',
|
|
7
|
+
];
|
|
8
|
+
/**
|
|
9
|
+
* Does this (provider, model) pair accept image input?
|
|
10
|
+
*
|
|
11
|
+
* Conservative by design: returns true only for model families we
|
|
12
|
+
* know are multimodal and whose client we have wired to format
|
|
13
|
+
* images. An unknown model id => false (so the router keeps looking
|
|
14
|
+
* for a known-good vision brain rather than sending images to a text
|
|
15
|
+
* model that will refuse).
|
|
16
|
+
*/
|
|
17
|
+
export function isVisionCapable(provider, model) {
|
|
18
|
+
const m = (model || '').toLowerCase();
|
|
19
|
+
switch (provider) {
|
|
20
|
+
case 'anthropic':
|
|
21
|
+
/* Every shipping Claude (3.x / 4.x: opus, sonnet, haiku)
|
|
22
|
+
* accepts images on /v1/messages. */
|
|
23
|
+
return /claude/.test(m);
|
|
24
|
+
case 'openai':
|
|
25
|
+
/* gpt-4o family, gpt-4.1 family, gpt-4-turbo (vision), and the
|
|
26
|
+
* o-series reasoning models with vision. Excludes 3.5. */
|
|
27
|
+
return /gpt-4o|gpt-4\.1|gpt-4-turbo|^o[134]\b|^o[134]-/.test(m);
|
|
28
|
+
case 'google_ai':
|
|
29
|
+
/* Gemini 1.5 and 2.x are natively multimodal. */
|
|
30
|
+
return /gemini-(1\.5|2|3)/.test(m) || /gemini-(pro|flash)/.test(m);
|
|
31
|
+
case 'xai':
|
|
32
|
+
/* Grok vision variants (grok-2-vision, grok-4). */
|
|
33
|
+
return /vision|grok-4/.test(m);
|
|
34
|
+
case 'mistral':
|
|
35
|
+
/* Pixtral is Mistral's vision model. */
|
|
36
|
+
return /pixtral/.test(m);
|
|
37
|
+
case 'ollama':
|
|
38
|
+
/* Open-weight vision models the user can pull. Default text
|
|
39
|
+
* models (llama3.1, qwen2.5) are NOT vision. */
|
|
40
|
+
return /llava|llama3\.2-vision|moondream|bakllava|minicpm-v|qwen2\.5-?vl/.test(m);
|
|
41
|
+
case 'yujin_managed':
|
|
42
|
+
/* The managed proxy picks the model server-side; assume the
|
|
43
|
+
* server routes vision turns to a capable model + validates. */
|
|
44
|
+
return true;
|
|
45
|
+
case 'deepseek':
|
|
46
|
+
case 'cohere':
|
|
47
|
+
/* No vision endpoint wired for these. */
|
|
48
|
+
return false;
|
|
49
|
+
default:
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Count image attachments across a set of chat turns. Structurally
|
|
55
|
+
* typed (no ChatMessage import) so it stays in the IO-free core.
|
|
56
|
+
*/
|
|
57
|
+
export function countImageAttachments(messages) {
|
|
58
|
+
let n = 0;
|
|
59
|
+
for (const m of messages) {
|
|
60
|
+
if (m && Array.isArray(m.attachments))
|
|
61
|
+
n += m.attachments.length;
|
|
62
|
+
}
|
|
63
|
+
return n;
|
|
64
|
+
}
|
|
65
|
+
/** Defensive caps so a malformed / hostile client cannot blow up a
|
|
66
|
+
* turn with hundreds of huge images. ~6MB of bytes per image. */
|
|
67
|
+
const MAX_ATTACHMENTS = 8;
|
|
68
|
+
const MAX_B64_LEN = 8 * 1024 * 1024;
|
|
69
|
+
/**
|
|
70
|
+
* Validate + normalize a raw `attachments` payload from a chat
|
|
71
|
+
* request into ImageAttachment[]. Accepts several shapes a client
|
|
72
|
+
* might send: {media_type|mime, data|base64} or a full data URL in
|
|
73
|
+
* {url|data_url|data}. Strips the `data:...;base64,` prefix, maps
|
|
74
|
+
* image/jpg -> image/jpeg, drops anything not in the supported set
|
|
75
|
+
* or over the size cap. Never throws.
|
|
76
|
+
*/
|
|
77
|
+
export function parseImageAttachments(raw) {
|
|
78
|
+
if (!Array.isArray(raw))
|
|
79
|
+
return [];
|
|
80
|
+
const out = [];
|
|
81
|
+
for (const item of raw) {
|
|
82
|
+
if (out.length >= MAX_ATTACHMENTS)
|
|
83
|
+
break;
|
|
84
|
+
if (!item || typeof item !== 'object')
|
|
85
|
+
continue;
|
|
86
|
+
const o = item;
|
|
87
|
+
let data = typeof o['data'] === 'string' ? o['data']
|
|
88
|
+
: typeof o['base64'] === 'string' ? o['base64']
|
|
89
|
+
: '';
|
|
90
|
+
let media = typeof o['media_type'] === 'string' ? o['media_type']
|
|
91
|
+
: typeof o['mime'] === 'string' ? o['mime']
|
|
92
|
+
: '';
|
|
93
|
+
const url = typeof o['url'] === 'string' ? o['url']
|
|
94
|
+
: typeof o['data_url'] === 'string' ? o['data_url']
|
|
95
|
+
: '';
|
|
96
|
+
const src = url || data;
|
|
97
|
+
const dm = /^data:([^;,]+);base64,(.*)$/s.exec(src);
|
|
98
|
+
if (dm) {
|
|
99
|
+
media = media || (dm[1] ?? '');
|
|
100
|
+
data = dm[2] ?? '';
|
|
101
|
+
}
|
|
102
|
+
if (!data || data.length > MAX_B64_LEN)
|
|
103
|
+
continue;
|
|
104
|
+
media = (media || 'image/png').toLowerCase().trim();
|
|
105
|
+
if (media === 'image/jpg')
|
|
106
|
+
media = 'image/jpeg';
|
|
107
|
+
if (!SUPPORTED_IMAGE_MEDIA_TYPES.includes(media))
|
|
108
|
+
continue;
|
|
109
|
+
const name = typeof o['name'] === 'string' ? o['name'].slice(0, 120) : undefined;
|
|
110
|
+
out.push(name ? { media_type: media, data, name } : { media_type: media, data });
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
/** The fallback shown when a multimodal turn arrives but no configured
|
|
115
|
+
* brain can do vision (no key/plan on any vision provider). */
|
|
116
|
+
export const NO_VISION_BRAIN_MESSAGE = 'Para realizar trabajo multimodal necesitas cargar una clave o un plan ' +
|
|
117
|
+
'en algun brain multimodal (por ejemplo Anthropic/Claude, OpenAI gpt-4o ' +
|
|
118
|
+
'o Google Gemini). Configuralo con `yf brain config` o en el panel de claves.';
|
|
119
|
+
//# sourceMappingURL=brain_capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain_capabilities.js","sourceRoot":"","sources":["../../src/core/brain_capabilities.ts"],"names":[],"mappings":"AAkCA,sEAAsE;AACtE,MAAM,CAAC,MAAM,2BAA2B,GAAsB;IAC5D,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;CACZ,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,QAAuB,EAAE,KAAa;IACpE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW;YACd;iDACqC;YACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,QAAQ;YACX;sEAC0D;YAC1D,OAAO,gDAAgD,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClE,KAAK,WAAW;YACd,iDAAiD;YACjD,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrE,KAAK,KAAK;YACR,mDAAmD;YACnD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,KAAK,SAAS;YACZ,wCAAwC;YACxC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,KAAK,QAAQ;YACX;4DACgD;YAChD,OAAO,kEAAkE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpF,KAAK,eAAe;YAClB;4EACgE;YAChE,OAAO,IAAI,CAAC;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,yCAAyC;YACzC,OAAO,KAAK,CAAC;QACf;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAwE;IAExE,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;YAAE,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;IACnE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;kEACkE;AAClE,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,MAAM,IAAI,eAAe;YAAE,MAAM;QACzC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,SAAS;QAChD,MAAM,CAAC,GAAG,IAA+B,CAAC;QAC1C,IAAI,IAAI,GACN,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,MAAM,CAAY;YACrD,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,QAAQ,CAAY;gBAC3D,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,KAAK,GACP,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,YAAY,CAAY;YACjE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,MAAM,CAAY;gBACvD,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,GAAG,GACP,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,KAAK,CAAY;YACnD,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,UAAU,CAAY;gBAC/D,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC;QACxB,MAAM,EAAE,GAAG,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,EAAE,EAAE,CAAC;YAAC,KAAK,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;YAAE,SAAS;QACjD,KAAK,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,KAAK,KAAK,WAAW;YAAE,KAAK,GAAG,YAAY,CAAC;QAChD,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,MAAM,CAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7F,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;gEACgE;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAClC,wEAAwE;IACxE,yEAAyE;IACzE,8EAA8E,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Provider id matches the slot prefix in the vault
|
|
2
2
|
* (byok_<provider>_api_key). */
|
|
3
|
-
export type BrainProvider = 'anthropic' | 'openai' | 'google_ai' | 'deepseek' | 'xai' | 'mistral' | 'cohere' | 'ollama' | 'yujin_managed';
|
|
3
|
+
export type BrainProvider = 'anthropic' | 'openai' | 'google_ai' | 'deepseek' | 'xai' | 'mistral' | 'cohere' | 'qwen' | 'zai' | 'ollama' | 'yujin_managed' | 'federation';
|
|
4
4
|
export declare const ALL_BRAIN_PROVIDERS: readonly BrainProvider[];
|
|
5
5
|
/** Vault slot name a given provider stores its key under. The
|
|
6
6
|
* yujin_managed virtual provider has no client-side key (the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain_config.d.ts","sourceRoot":"","sources":["../../src/core/brain_config.ts"],"names":[],"mappings":"AA+BA;iCACiC;AACjC,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,UAAU,GACV,KAAK,GACL,SAAS,GACT,QAAQ,GAKR,QAAQ,GAMR,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"brain_config.d.ts","sourceRoot":"","sources":["../../src/core/brain_config.ts"],"names":[],"mappings":"AA+BA;iCACiC;AACjC,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,UAAU,GACV,KAAK,GACL,SAAS,GACT,QAAQ,GAKR,MAAM,GACN,KAAK,GAKL,QAAQ,GAMR,eAAe,GAMf,YAAY,CAAC;AAEjB,eAAO,MAAM,mBAAmB,EAAE,SAAS,aAAa,EAMvD,CAAC;AAEF;;;;;oDAKoD;AACpD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAmB7D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,GAAG,EAAE,WAAW,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAC;IACtB;oCACgC;IAChC,iBAAiB,EAAE,KAAK,GAAG,UAAU,CAAC;IACtC;;;2DAGuD;IACvD,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;+CAK2C;IAC3C,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;;;4CAGwC;IACxC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,kBAAkB,IAAI,WAAW,CAShD;AA0BD,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAeD,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,CAyB5D;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtE;AAED,gDAAgD;AAChD,wBAAsB,cAAc,CAClC,IAAI,EAAE,KAAK,GAAG,UAAU,EACxB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,CAAC,CAKtB;AAED,mEAAmE;AACnE,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAKvF;AAED,iCAAiC;AACjC,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAI7D"}
|
|
@@ -30,8 +30,10 @@ import path from 'node:path';
|
|
|
30
30
|
import os from 'node:os';
|
|
31
31
|
export const ALL_BRAIN_PROVIDERS = [
|
|
32
32
|
'anthropic', 'openai', 'google_ai', 'deepseek', 'xai', 'mistral', 'cohere',
|
|
33
|
+
'qwen', 'zai',
|
|
33
34
|
'ollama',
|
|
34
35
|
'yujin_managed',
|
|
36
|
+
'federation',
|
|
35
37
|
];
|
|
36
38
|
/** Vault slot name a given provider stores its key under. The
|
|
37
39
|
* yujin_managed virtual provider has no client-side key (the
|
|
@@ -48,10 +50,15 @@ export function vaultSlotForProvider(p) {
|
|
|
48
50
|
case 'xai': return 'xai_api_key';
|
|
49
51
|
case 'mistral': return 'mistral_api_key';
|
|
50
52
|
case 'cohere': return 'cohere_api_key';
|
|
53
|
+
case 'qwen': return 'qwen_api_key';
|
|
54
|
+
case 'zai': return 'zai_api_key';
|
|
51
55
|
/* ollama is keyless (local); the slot exists only for the
|
|
52
56
|
* exhaustive switch -- getKey() will just return null. */
|
|
53
57
|
case 'ollama': return 'ollama';
|
|
54
58
|
case 'yujin_managed': return 'yujin_managed';
|
|
59
|
+
/* federation auth uses yf_federation_key (a raw vault slot,
|
|
60
|
+
* read directly by the fed client), not a byok_ slot. */
|
|
61
|
+
case 'federation': return 'yf_federation_key';
|
|
55
62
|
}
|
|
56
63
|
}
|
|
57
64
|
export function defaultBrainConfig() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain_config.js","sourceRoot":"","sources":["../../src/core/brain_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"brain_config.js","sourceRoot":"","sources":["../../src/core/brain_config.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,12 @@ export interface BrainSelection {
|
|
|
10
10
|
reason: string;
|
|
11
11
|
/** True when the chosen provider is wired at runtime. */
|
|
12
12
|
runtime_wired: boolean;
|
|
13
|
+
/** Front 1 (multimodality) -- set when the turn carries image
|
|
14
|
+
* attachments but NO vision-capable brain has a key/plan. The
|
|
15
|
+
* chat server short-circuits with NO_VISION_BRAIN_MESSAGE instead
|
|
16
|
+
* of calling the (text-only) model, which would just say "no
|
|
17
|
+
* puedo". The selection fields still echo the would-be brain. */
|
|
18
|
+
multimodal_blocked?: boolean;
|
|
13
19
|
}
|
|
14
20
|
/** Inputs the router accepts. All optional. */
|
|
15
21
|
export interface BrainSelectContext {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost_router.d.ts","sourceRoot":"","sources":["../../src/core/cost_router.ts"],"names":[],"mappings":"AA+CA,OAAO,EAEL,KAAK,aAAa,EAAE,KAAK,WAAW,EACrC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cost_router.d.ts","sourceRoot":"","sources":["../../src/core/cost_router.ts"],"names":[],"mappings":"AA+CA,OAAO,EAEL,KAAK,aAAa,EAAE,KAAK,WAAW,EACrC,MAAM,mBAAmB,CAAC;AAU3B,uCAAuC;AACvC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,aAAa,EAAE,OAAO,CAAC;IACvB;;;;sEAIkE;IAClE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,aAAa,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC;IACnC,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,aAAa,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC;IACnC;;;yDAGqD;IACrD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;oCAKgC;IAChC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;;;iCAK6B;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;kBAKkB;AAClB,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBvG;AAED;;wCAEwC;AACxC,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAe3I;AAiFD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW,GAAG;IACrE,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,CAOA;AAKD,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,KAAK,GAAG,UAAU,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,IAAI,CAAC;IACjE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AA4TD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,GAAE,kBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,CA8H9F;AAwDD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGlE"}
|
package/dist/core/cost_router.js
CHANGED
|
@@ -50,6 +50,7 @@ import { getKey } from './provider_keys.js';
|
|
|
50
50
|
import { getVerbTier, FRONTIER_WORKFLOW_PHASES, } from '../nac3/verb_tier_map.js';
|
|
51
51
|
import { classifyGate } from './reasoning_gate.js';
|
|
52
52
|
import { classifyTurn } from './turn_classifier.js';
|
|
53
|
+
import { isVisionCapable } from './brain_capabilities.js';
|
|
53
54
|
/** alpha.59z.7 -- heuristic: does the user text look like a
|
|
54
55
|
* request to violate one of the active SQ rules? Catches the
|
|
55
56
|
* most common patterns where the user pushes Forge to skip
|
|
@@ -104,8 +105,8 @@ export function looksLikePhaseCrossover(userText, workflowPhase) {
|
|
|
104
105
|
* src/llm/multi_provider_client.ts. */
|
|
105
106
|
const RUNTIME_WIRED = new Set([
|
|
106
107
|
'anthropic', 'google_ai', 'openai', 'deepseek',
|
|
107
|
-
'xai', 'mistral', 'cohere', 'ollama',
|
|
108
|
-
'yujin_managed',
|
|
108
|
+
'xai', 'mistral', 'cohere', 'qwen', 'zai', 'ollama',
|
|
109
|
+
'yujin_managed', 'federation',
|
|
109
110
|
]);
|
|
110
111
|
function brainLogPath() {
|
|
111
112
|
const home = process.env.HOME || process.env.USERPROFILE || os.homedir();
|
|
@@ -389,6 +390,112 @@ async function decideSmartAutoTier(ctx, cfg) {
|
|
|
389
390
|
telemetry,
|
|
390
391
|
};
|
|
391
392
|
}
|
|
393
|
+
/**
|
|
394
|
+
* Front 1 (multimodality) -- find a vision-capable brain that has a
|
|
395
|
+
* key (or is the keyless managed proxy), in priority order:
|
|
396
|
+
* 1. the configured frontier brain, if it is vision-capable;
|
|
397
|
+
* 2. the configured eco brain, if it is vision-capable;
|
|
398
|
+
* 3. the v1 vision defaults: anthropic, openai, google_ai.
|
|
399
|
+
* Returns the first whose provider is runtime-wired AND has a usable
|
|
400
|
+
* credential. Null when none is available -> the caller blocks the
|
|
401
|
+
* turn with NO_VISION_BRAIN_MESSAGE.
|
|
402
|
+
*/
|
|
403
|
+
async function resolveVisionBrain(cfg) {
|
|
404
|
+
const candidates = [];
|
|
405
|
+
for (const t of [cfg.frontier, cfg.eco]) {
|
|
406
|
+
if (isVisionCapable(t.provider, t.model))
|
|
407
|
+
candidates.push({ provider: t.provider, model: t.model });
|
|
408
|
+
}
|
|
409
|
+
/* Sensible default vision model per provider (used only when the
|
|
410
|
+
* provider is not already the configured one). */
|
|
411
|
+
candidates.push({
|
|
412
|
+
provider: 'anthropic',
|
|
413
|
+
model: cfg.frontier.provider === 'anthropic' ? cfg.frontier.model : 'claude-sonnet-4-6',
|
|
414
|
+
});
|
|
415
|
+
candidates.push({ provider: 'openai', model: 'gpt-4o' });
|
|
416
|
+
candidates.push({
|
|
417
|
+
provider: 'google_ai',
|
|
418
|
+
model: cfg.eco.provider === 'google_ai' ? cfg.eco.model : 'gemini-2.5-flash',
|
|
419
|
+
});
|
|
420
|
+
const seen = new Set();
|
|
421
|
+
for (const c of candidates) {
|
|
422
|
+
const dedupKey = c.provider + '|' + c.model;
|
|
423
|
+
if (seen.has(dedupKey))
|
|
424
|
+
continue;
|
|
425
|
+
seen.add(dedupKey);
|
|
426
|
+
if (!RUNTIME_WIRED.has(c.provider))
|
|
427
|
+
continue;
|
|
428
|
+
let key = null;
|
|
429
|
+
try {
|
|
430
|
+
key = await getKey(vaultSlotForProvider(c.provider));
|
|
431
|
+
}
|
|
432
|
+
catch {
|
|
433
|
+
key = null;
|
|
434
|
+
}
|
|
435
|
+
if (key)
|
|
436
|
+
return { provider: c.provider, model: c.model, api_key: key };
|
|
437
|
+
}
|
|
438
|
+
return null;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Front 1 (multimodality) -- if the turn carries image attachments,
|
|
442
|
+
* make sure the chosen brain can actually SEE them. When the
|
|
443
|
+
* tier-selected brain is vision-capable + usable, keep it (the common
|
|
444
|
+
* case: Claude / Gemini defaults). Otherwise hop to a vision brain
|
|
445
|
+
* that has a key. When none exists, flag multimodal_blocked so the
|
|
446
|
+
* server returns the BYOK fallback message instead of a useless "no
|
|
447
|
+
* puedo" from a text model.
|
|
448
|
+
*/
|
|
449
|
+
async function maybeApplyVisionRouting(sel, ctx, cfg) {
|
|
450
|
+
const n = ctx.attachments ?? 0;
|
|
451
|
+
if (n <= 0)
|
|
452
|
+
return sel;
|
|
453
|
+
const usableNow = isVisionCapable(sel.provider, sel.model) &&
|
|
454
|
+
(sel.provider === 'yujin_managed' || sel.api_key !== null);
|
|
455
|
+
if (usableNow)
|
|
456
|
+
return { ...sel, reason: sel.reason + ' +vision(keep)' };
|
|
457
|
+
const cand = await resolveVisionBrain(cfg);
|
|
458
|
+
if (cand) {
|
|
459
|
+
return {
|
|
460
|
+
...sel,
|
|
461
|
+
provider: cand.provider,
|
|
462
|
+
model: cand.model,
|
|
463
|
+
api_key: cand.api_key,
|
|
464
|
+
runtime_wired: RUNTIME_WIRED.has(cand.provider),
|
|
465
|
+
reason: sel.reason + ' -> vision:' + cand.provider + '/' + cand.model,
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
return { ...sel, multimodal_blocked: true, reason: sel.reason + ' +vision(BLOCKED:no key)' };
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* F4 -- when this install is an active federation CHILD, every turn routes to
|
|
472
|
+
* the remote parent's brain regardless of the local brain config. The tier is
|
|
473
|
+
* still computed locally (the parent uses it as a hint). v1 does not federate
|
|
474
|
+
* multimodal turns, so a vision-blocked turn stays blocked.
|
|
475
|
+
*/
|
|
476
|
+
async function maybeApplyFederation(sel) {
|
|
477
|
+
if (sel.multimodal_blocked)
|
|
478
|
+
return sel;
|
|
479
|
+
try {
|
|
480
|
+
const { isFederationActive } = await import('./federation_config.js');
|
|
481
|
+
if (await isFederationActive()) {
|
|
482
|
+
return {
|
|
483
|
+
...sel,
|
|
484
|
+
provider: 'federation',
|
|
485
|
+
api_key: null,
|
|
486
|
+
runtime_wired: true,
|
|
487
|
+
reason: sel.reason + ' -> federation(parent)',
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
catch { /* no federation config -> normal routing */ }
|
|
492
|
+
return sel;
|
|
493
|
+
}
|
|
494
|
+
/** Apply the post-tier provider overrides in order: vision, then federation. */
|
|
495
|
+
async function finalizeSelection(sel, ctx, cfg) {
|
|
496
|
+
const visioned = await maybeApplyVisionRouting(sel, ctx, cfg);
|
|
497
|
+
return maybeApplyFederation(visioned);
|
|
498
|
+
}
|
|
392
499
|
/**
|
|
393
500
|
* Full routing decision. Reads brain_config + vault to resolve a
|
|
394
501
|
* concrete provider+model+key. Logs the decision.
|
|
@@ -427,14 +534,17 @@ export async function selectBrainForTurn(ctx = {}) {
|
|
|
427
534
|
reason: (managed ? '[managed] ' : '') + 'next_turn_hint:' + hint.reason + ' -> frontier',
|
|
428
535
|
runtime_wired: RUNTIME_WIRED.has(provider),
|
|
429
536
|
};
|
|
537
|
+
const visioned = await finalizeSelection(sel, ctx, cfg);
|
|
430
538
|
await logDecision({
|
|
431
|
-
tier:
|
|
432
|
-
has_key:
|
|
539
|
+
tier: visioned.tier, provider: visioned.provider, model: visioned.model, reason: visioned.reason,
|
|
540
|
+
has_key: visioned.api_key !== null, runtime_wired: visioned.runtime_wired,
|
|
433
541
|
verb_id: ctx.verb_id, workflow_phase: ctx.workflow_phase,
|
|
434
542
|
user_override: ctx.user_override,
|
|
543
|
+
attachments: ctx.attachments ?? 0,
|
|
544
|
+
multimodal_blocked: visioned.multimodal_blocked === true,
|
|
435
545
|
next_turn_hint: hint,
|
|
436
546
|
});
|
|
437
|
-
return
|
|
547
|
+
return visioned;
|
|
438
548
|
}
|
|
439
549
|
const cheap = decideCheapTier(ctx, cfg);
|
|
440
550
|
let tier;
|
|
@@ -495,7 +605,7 @@ export async function selectBrainForTurn(ctx = {}) {
|
|
|
495
605
|
if (managed) {
|
|
496
606
|
reason = '[managed] ' + reason;
|
|
497
607
|
}
|
|
498
|
-
const
|
|
608
|
+
const baseSel = {
|
|
499
609
|
tier,
|
|
500
610
|
provider,
|
|
501
611
|
model,
|
|
@@ -503,16 +613,20 @@ export async function selectBrainForTurn(ctx = {}) {
|
|
|
503
613
|
reason,
|
|
504
614
|
runtime_wired: wired,
|
|
505
615
|
};
|
|
616
|
+
/* Front 1 vision routing + F4 federation override (in order). */
|
|
617
|
+
const sel = await finalizeSelection(baseSel, ctx, cfg);
|
|
506
618
|
const logEntry = {
|
|
507
619
|
tier: sel.tier,
|
|
508
620
|
provider: sel.provider,
|
|
509
621
|
model: sel.model,
|
|
510
622
|
reason: sel.reason,
|
|
511
|
-
has_key:
|
|
512
|
-
runtime_wired:
|
|
623
|
+
has_key: sel.api_key !== null,
|
|
624
|
+
runtime_wired: sel.runtime_wired,
|
|
513
625
|
verb_id: ctx.verb_id,
|
|
514
626
|
workflow_phase: ctx.workflow_phase,
|
|
515
627
|
user_override: ctx.user_override,
|
|
628
|
+
attachments: ctx.attachments ?? 0,
|
|
629
|
+
multimodal_blocked: sel.multimodal_blocked === true,
|
|
516
630
|
};
|
|
517
631
|
if (smartTelemetry) {
|
|
518
632
|
logEntry.smart_auto = smartTelemetry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost_router.js","sourceRoot":"","sources":["../../src/core/cost_router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EACL,eAAe,EAAE,oBAAoB,GAEtC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,WAAW,EAAE,wBAAwB,GAEtC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAqB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAsD3E;;;;;kBAKkB;AAClB,MAAM,UAAU,sBAAsB,CAAC,QAA4B;IACjE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAuC;QACnD,EAAE,EAAE,EAAE,gCAAgC,EAAc,GAAG,EAAE,eAAe,EAAE;QAC1E,EAAE,EAAE,EAAE,wBAAwB,EAAsB,GAAG,EAAE,eAAe,EAAE;QAC1E,EAAE,EAAE,EAAE,uBAAuB,EAAuB,GAAG,EAAE,kBAAkB,EAAE;QAC7E,EAAE,EAAE,EAAE,iBAAiB,EAA6B,GAAG,EAAE,cAAc,EAAE;QACzE,EAAE,EAAE,EAAE,8BAA8B,EAAgB,GAAG,EAAE,cAAc,EAAE;QACzE,EAAE,EAAE,EAAE,8BAA8B,EAAgB,GAAG,EAAE,YAAY,EAAE;QACvE,EAAE,EAAE,EAAE,iDAAiD,EAAE,GAAG,EAAE,cAAc,EAAE;QAC9E,EAAE,EAAE,EAAE,8CAA8C,EAAE,GAAG,EAAE,eAAe,EAAE;QAC5E,EAAE,EAAE,EAAE,yCAAyC,EAAK,GAAG,EAAE,aAAa,EAAE;QACxE,EAAE,EAAE,EAAE,sDAAsD,EAAE,GAAG,EAAE,cAAc,EAAE;KACpF,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC;AAED;;wCAEwC;AACxC,MAAM,UAAU,uBAAuB,CAAC,QAA4B,EAAE,aAAiC;IACrG,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAuC;QACnD,EAAE,EAAE,EAAE,kFAAkF,EAAE,GAAG,EAAE,cAAc,EAAE;QAC/G,EAAE,EAAE,EAAE,uCAAuC,EAAU,GAAG,EAAE,SAAS,EAAE;QACvE,EAAE,EAAE,EAAE,0EAA0E,EAAE,GAAG,EAAE,cAAc,EAAE;QACvG,EAAE,EAAE,EAAE,gBAAgB,EAAiC,GAAG,EAAE,kBAAkB,EAAE;QAChF,EAAE,EAAE,EAAE,4CAA4C,EAAK,GAAG,EAAE,eAAe,EAAE;KAC9E,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7D,CAAC;IACD,KAAK,aAAa,CAAC,CAAC,4CAA4C;IAChE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC;AAED;;wCAEwC;AACxC,MAAM,aAAa,GAA+B,IAAI,GAAG,CAAC;IACxD,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU;IAC9C,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;IACpC,eAAe;CAChB,CAAC,CAAC;AAEH,SAAS,YAAY;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAA8B;IACvD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;AACH,CAAC;AAOD,SAAS,gBAAgB;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;AACzD,CAAC;AACD,KAAK,UAAU,0BAA0B;IACvC,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,MAAM,GAAwB,IAAI,CAAC;QACvC,IAAI,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;QAC1E,mEAAmE;QACnE,IAAI,CAAC;YAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACzD,OAAO,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CACtB,GAAuB,EACvB,IAAiB;IAEjB,IAAI,GAAG,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IACtE,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,MAAM,CAAC,GAAc,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,GAAG,cAAc,EAAE,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,GAAG,SAAS,EAAE,CAAC;QAC7E,CAAC;QACD,0CAA0C;IAC5C,CAAC;IACD,IAAI,GAAG,CAAC,cAAc,IAAI,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAChF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,GAAG,GAAG,CAAC,cAAc,GAAG,uBAAuB,EAAE,CAAC;IACxG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAuB,EAAE,GAAgB;IAIlE,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,iBAAiB;QAC3B,MAAM,EAAE,oBAAoB,GAAG,GAAG,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7G,CAAC;AACJ,CAAC;AAiBD;;;;GAIG;AACH,KAAK,UAAU,mBAAmB,CAChC,GAAuB,EACvB,GAAgB;IAMhB;;;;;;;;yDAQqD;IACrD,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAuB;YACpC,aAAa,EAAE,UAAU;YACzB,eAAe,EAAE,GAAG;YACpB,YAAY,EAAE,CAAC,6BAA6B,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;YACrE,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,KAAK;SACvB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,cAAc,GAAG,GAAG,CAAC,WAAW,GAAG,qCAAqC;YAChF,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;;;;;mBAMe;IACf,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,SAAS,GAAuB;gBACpC,aAAa,EAAE,UAAU;gBACzB,eAAe,EAAE,IAAI;gBACrB,YAAY,EAAE,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;gBAChE,cAAc,EAAE,KAAK;gBACrB,eAAe,EAAE,KAAK;aACvB,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,kBAAkB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,cAAc;gBAClE,SAAS;aACV,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;mEAG+D;IAC/D,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI;WACzB,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;QACtE,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,KAAK,IAAI;YACtC,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;QAChF,MAAM,SAAS,GAAuB;YACpC,aAAa,EAAE,UAAU;YACzB,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,CAAC,kBAAkB,GAAG,GAAG,GAAG,GAAG,CAAC;YAC9C,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,KAAK;SACvB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,kBAAkB,GAAG,GAAG,GAAG,cAAc;YACjD,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;;iDAG6C;IAC7C,IAAI,GAAG,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,SAAS,GAAuB;YACpC,aAAa,EAAE,UAAU;YACzB,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,CAAC,qBAAqB,CAAC;YACrC,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,KAAK;SACvB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,+DAA+D;YACvE,SAAS;SACV,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAiB,YAAY,CAAC;QACtC,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;QACzB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,aAAa,EAAE,GAAG,CAAC,aAAa;KACjC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,MAAM,SAAS,GAAuB;QACpC,aAAa,EAAE,IAAI,CAAC,IAAI;QACxB,eAAe,EAAE,IAAI,CAAC,UAAU;QAChC,YAAY,EAAE,IAAI,CAAC,OAAO;QAC1B,cAAc,EAAE,IAAI,CAAC,SAAS;QAC9B,eAAe,EAAE,KAAK;KACvB,CAAC;IAEF,+CAA+C;IAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EACJ,oBAAoB,GAAG,IAAI,CAAC,IAAI;gBAChC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;YAC9C,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;0CAasC;IACtC,IAAI,WAAW,GAA8B,WAAW,CAAC;IACzD,IAAI,QAA4B,CAAC;IACjC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACrC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC;IAAC,CAAC;IAC1F,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YAAC,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;QAC1F,IAAI,MAAM,EAAE,CAAC;YAAC,WAAW,GAAG,WAAW,CAAC;YAAC,QAAQ,GAAG,SAAS,CAAC;QAAC,CAAC;IAClE,CAAC;IAED,MAAM,GAAG,GAAqB,MAAM,YAAY,CAAC;QAC/C,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;QACzB,SAAS,EAAE,IAAI,CAAC,IAAI;QACpB,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IAEH,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAC;IAC3C,SAAS,CAAC,qBAAqB,GAAG,GAAG,CAAC,UAAU,CAAC;IACjD,SAAS,CAAC,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAC;IAC3C,SAAS,CAAC,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC;IAEzC;;;;;;;yCAOqC;IACrC,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACpB,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,iBAAiB,CAAC;QAChE,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,IAAI,GAAG,YAAY,CAAC;YACpB,iBAAiB,GAAG,IAAI,CAAC;YACzB,SAAS,CAAC,kBAAkB,GAAG;gBAC7B,GAAG,CAAC,SAAS,CAAC,kBAAkB,IAAI,EAAE,CAAC;gBACvC,2BAA2B;oBACzB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG;aACpF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,MAAM,EACJ,gBAAgB,GAAG,IAAI;YACvB,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACxD,eAAe,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/E,CAAC,iBAAiB,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;QACtE,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA0B,EAAE;IACnE,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;IAEpC;;;;2DAIuD;IACvD,MAAM,IAAI,GAAG,MAAM,0BAA0B,EAAE,CAAC;IAChD,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,eAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACpF,MAAM,KAAK,GAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAe,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACjF,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC;gBAAC,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,MAAM,GAAG,IAAI,CAAC;YAAC,CAAC;QAC/D,CAAC;QACD,MAAM,GAAG,GAAmB;YAC1B,IAAI,EAAE,UAAU;YAChB,QAAQ;YACR,KAAK;YACL,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAAC,MAAM,GAAG,cAAc;YACxF,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;SAC3C,CAAC;QACF,MAAM,WAAW,CAAC;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM;YAC5E,OAAO,EAAE,MAAM,KAAK,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa;YAC1D,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc;YACxD,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,IAAwB,CAAC;IAC7B,IAAI,MAAc,CAAC;IACnB,IAAI,cAAc,GAA8B,IAAI,CAAC;IAErD,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAClB,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACxB,CAAC;SAAM,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,sBAAsB;QACtB,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACd,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QAClB,cAAc,GAAG,CAAC,CAAC,SAAS,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN;;qEAE6D;QAC7D,IAAI,GAAG,GAAG,CAAC,iBAAiB,CAAC;QAC7B,MAAM,GAAG,oBAAoB,GAAG,GAAG,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChH,CAAC;IAED;;;oEAGgE;IAChE,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QACtE,IAAI,GAAG,UAAU,CAAC;QAClB,MAAM,GAAG,4BAA4B,GAAG,MAAM,GAAG,GAAG,CAAC;IACvD,CAAC;IAED;;;;;;;;;uCASmC;IACnC,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,eAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IACjF,MAAM,KAAK,GAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAkB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAC9E;iEAC6D;IAC7D,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC;YAAC,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;IAC/D,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE1C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;IACjC,CAAC;IAED,MAAM,GAAG,GAAmB;QAC1B,IAAI;QACJ,QAAQ;QACR,KAAK;QACL,OAAO,EAAE,MAAM;QACf,MAAM;QACN,aAAa,EAAE,KAAK;KACrB,CAAC;IAEF,MAAM,QAAQ,GAA4B;QACxC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,MAAM,KAAK,IAAI;QACxB,aAAa,EAAE,KAAK;QACpB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,aAAa,EAAE,GAAG,CAAC,aAAa;KACjC,CAAC;IACF,IAAI,cAAc,EAAE,CAAC;QACnB,QAAQ,CAAC,UAAU,GAAG,cAAc,CAAC;IACvC,CAAC;IACD,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,KAAK,UAAU,qBAAqB,CAAC,KAAyB;IAC5D;;;;;uEAKmE;IACnE,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACzD,0CAA0C;IAC1C,IAAI,IAAI,GAAG,WAAW,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QAAC,IAAI,GAAG,WAAW,CAAC;IAAC,CAAC;IAC/B,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAEvC;yEACqE;IACrE,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAAE,OAAO,KAAK,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAEzB,mCAAmC;IACnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACzE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QACxE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;QACtD,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAEzB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,CAAC;QAAC,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAAC,CAAC;IACjD,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AACxB,CAAC"}
|
|
1
|
+
{"version":3,"file":"cost_router.js","sourceRoot":"","sources":["../../src/core/cost_router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EACL,eAAe,EAAE,oBAAoB,GAEtC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,WAAW,EAAE,wBAAwB,GAEtC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAqB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAyB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AA4D1D;;;;;kBAKkB;AAClB,MAAM,UAAU,sBAAsB,CAAC,QAA4B;IACjE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAuC;QACnD,EAAE,EAAE,EAAE,gCAAgC,EAAc,GAAG,EAAE,eAAe,EAAE;QAC1E,EAAE,EAAE,EAAE,wBAAwB,EAAsB,GAAG,EAAE,eAAe,EAAE;QAC1E,EAAE,EAAE,EAAE,uBAAuB,EAAuB,GAAG,EAAE,kBAAkB,EAAE;QAC7E,EAAE,EAAE,EAAE,iBAAiB,EAA6B,GAAG,EAAE,cAAc,EAAE;QACzE,EAAE,EAAE,EAAE,8BAA8B,EAAgB,GAAG,EAAE,cAAc,EAAE;QACzE,EAAE,EAAE,EAAE,8BAA8B,EAAgB,GAAG,EAAE,YAAY,EAAE;QACvE,EAAE,EAAE,EAAE,iDAAiD,EAAE,GAAG,EAAE,cAAc,EAAE;QAC9E,EAAE,EAAE,EAAE,8CAA8C,EAAE,GAAG,EAAE,eAAe,EAAE;QAC5E,EAAE,EAAE,EAAE,yCAAyC,EAAK,GAAG,EAAE,aAAa,EAAE;QACxE,EAAE,EAAE,EAAE,sDAAsD,EAAE,GAAG,EAAE,cAAc,EAAE;KACpF,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC;AAED;;wCAEwC;AACxC,MAAM,UAAU,uBAAuB,CAAC,QAA4B,EAAE,aAAiC;IACrG,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAuC;QACnD,EAAE,EAAE,EAAE,kFAAkF,EAAE,GAAG,EAAE,cAAc,EAAE;QAC/G,EAAE,EAAE,EAAE,uCAAuC,EAAU,GAAG,EAAE,SAAS,EAAE;QACvE,EAAE,EAAE,EAAE,0EAA0E,EAAE,GAAG,EAAE,cAAc,EAAE;QACvG,EAAE,EAAE,EAAE,gBAAgB,EAAiC,GAAG,EAAE,kBAAkB,EAAE;QAChF,EAAE,EAAE,EAAE,4CAA4C,EAAK,GAAG,EAAE,eAAe,EAAE;KAC9E,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7D,CAAC;IACD,KAAK,aAAa,CAAC,CAAC,4CAA4C;IAChE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC;AAED;;wCAEwC;AACxC,MAAM,aAAa,GAA+B,IAAI,GAAG,CAAC;IACxD,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU;IAC9C,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;IACnD,eAAe,EAAE,YAAY;CAC9B,CAAC,CAAC;AAEH,SAAS,YAAY;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAA8B;IACvD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;AACH,CAAC;AAOD,SAAS,gBAAgB;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;AACzD,CAAC;AACD,KAAK,UAAU,0BAA0B;IACvC,MAAM,CAAC,GAAG,gBAAgB,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,MAAM,GAAwB,IAAI,CAAC;QACvC,IAAI,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;QAC1E,mEAAmE;QACnE,IAAI,CAAC;YAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACzD,OAAO,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CACtB,GAAuB,EACvB,IAAiB;IAEjB,IAAI,GAAG,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IACtE,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,MAAM,CAAC,GAAc,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,GAAG,cAAc,EAAE,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAChB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,GAAG,SAAS,EAAE,CAAC;QAC7E,CAAC;QACD,0CAA0C;IAC5C,CAAC;IACD,IAAI,GAAG,CAAC,cAAc,IAAI,wBAAwB,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAChF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,GAAG,GAAG,CAAC,cAAc,GAAG,uBAAuB,EAAE,CAAC;IACxG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAuB,EAAE,GAAgB;IAIlE,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,iBAAiB;QAC3B,MAAM,EAAE,oBAAoB,GAAG,GAAG,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7G,CAAC;AACJ,CAAC;AAiBD;;;;GAIG;AACH,KAAK,UAAU,mBAAmB,CAChC,GAAuB,EACvB,GAAgB;IAMhB;;;;;;;;yDAQqD;IACrD,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAuB;YACpC,aAAa,EAAE,UAAU;YACzB,eAAe,EAAE,GAAG;YACpB,YAAY,EAAE,CAAC,6BAA6B,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;YACrE,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,KAAK;SACvB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,cAAc,GAAG,GAAG,CAAC,WAAW,GAAG,qCAAqC;YAChF,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;;;;;mBAMe;IACf,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,SAAS,GAAuB;gBACpC,aAAa,EAAE,UAAU;gBACzB,eAAe,EAAE,IAAI;gBACrB,YAAY,EAAE,CAAC,kBAAkB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;gBAChE,cAAc,EAAE,KAAK;gBACrB,eAAe,EAAE,KAAK;aACvB,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,kBAAkB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,cAAc;gBAClE,SAAS;aACV,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;mEAG+D;IAC/D,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI;WACzB,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;QACtE,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,KAAK,IAAI;YACtC,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;QAChF,MAAM,SAAS,GAAuB;YACpC,aAAa,EAAE,UAAU;YACzB,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,CAAC,kBAAkB,GAAG,GAAG,GAAG,GAAG,CAAC;YAC9C,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,KAAK;SACvB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,kBAAkB,GAAG,GAAG,GAAG,cAAc;YACjD,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;;iDAG6C;IAC7C,IAAI,GAAG,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,SAAS,GAAuB;YACpC,aAAa,EAAE,UAAU;YACzB,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,CAAC,qBAAqB,CAAC;YACrC,cAAc,EAAE,KAAK;YACrB,eAAe,EAAE,KAAK;SACvB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,+DAA+D;YACvE,SAAS;SACV,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAiB,YAAY,CAAC;QACtC,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;QACzB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,aAAa,EAAE,GAAG,CAAC,aAAa;KACjC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,MAAM,SAAS,GAAuB;QACpC,aAAa,EAAE,IAAI,CAAC,IAAI;QACxB,eAAe,EAAE,IAAI,CAAC,UAAU;QAChC,YAAY,EAAE,IAAI,CAAC,OAAO;QAC1B,cAAc,EAAE,IAAI,CAAC,SAAS;QAC9B,eAAe,EAAE,KAAK;KACvB,CAAC;IAEF,+CAA+C;IAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EACJ,oBAAoB,GAAG,IAAI,CAAC,IAAI;gBAChC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;YAC9C,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;0CAasC;IACtC,IAAI,WAAW,GAA8B,WAAW,CAAC;IACzD,IAAI,QAA4B,CAAC;IACjC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACrC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC;IAAC,CAAC;IAC1F,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YAAC,MAAM,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;QAC1F,IAAI,MAAM,EAAE,CAAC;YAAC,WAAW,GAAG,WAAW,CAAC;YAAC,QAAQ,GAAG,SAAS,CAAC;QAAC,CAAC;IAClE,CAAC;IAED,MAAM,GAAG,GAAqB,MAAM,YAAY,CAAC;QAC/C,IAAI,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE;QACzB,SAAS,EAAE,IAAI,CAAC,IAAI;QACpB,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IAEH,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAC;IAC3C,SAAS,CAAC,qBAAqB,GAAG,GAAG,CAAC,UAAU,CAAC;IACjD,SAAS,CAAC,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAC;IAC3C,SAAS,CAAC,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC;IAEzC;;;;;;;yCAOqC;IACrC,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACpB,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,iBAAiB,CAAC;QAChE,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,IAAI,GAAG,YAAY,CAAC;YACpB,iBAAiB,GAAG,IAAI,CAAC;YACzB,SAAS,CAAC,kBAAkB,GAAG;gBAC7B,GAAG,CAAC,SAAS,CAAC,kBAAkB,IAAI,EAAE,CAAC;gBACvC,2BAA2B;oBACzB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG;aACpF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,MAAM,EACJ,gBAAgB,GAAG,IAAI;YACvB,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACxD,eAAe,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/E,CAAC,iBAAiB,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;QACtE,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,kBAAkB,CAC/B,GAAgB;IAEhB,MAAM,UAAU,GAAsD,EAAE,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACtG,CAAC;IACD;sDACkD;IAClD,UAAU,CAAC,IAAI,CAAC;QACd,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB;KACxF,CAAC,CAAC;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,UAAU,CAAC,IAAI,CAAC;QACd,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB;KAC7E,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;QAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,SAAS;QACjC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC7C,IAAI,GAAG,GAAkB,IAAI,CAAC;QAC9B,IAAI,CAAC;YAAC,GAAG,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,GAAG,GAAG,IAAI,CAAC;QAAC,CAAC;QACnF,IAAI,GAAG;YAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,uBAAuB,CACpC,GAAmB,EACnB,GAAuB,EACvB,GAAgB;IAEhB,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IACvB,MAAM,SAAS,GACb,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC;QACxC,CAAC,GAAG,CAAC,QAAQ,KAAK,eAAe,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;IAC7D,IAAI,SAAS;QAAE,OAAO,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAExE,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,IAAI,EAAE,CAAC;QACT,OAAO;YACL,GAAG,GAAG;YACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/C,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK;SACtE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,0BAA0B,EAAE,CAAC;AAC/F,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,oBAAoB,CAAC,GAAmB;IACrD,IAAI,GAAG,CAAC,kBAAkB;QAAE,OAAO,GAAG,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACtE,IAAI,MAAM,kBAAkB,EAAE,EAAE,CAAC;YAC/B,OAAO;gBACL,GAAG,GAAG;gBACN,QAAQ,EAAE,YAA6B;gBACvC,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,wBAAwB;aAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,4CAA4C,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,KAAK,UAAU,iBAAiB,CAC9B,GAAmB,EAAE,GAAuB,EAAE,GAAgB;IAE9D,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA0B,EAAE;IACnE,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;IAEpC;;;;2DAIuD;IACvD,MAAM,IAAI,GAAG,MAAM,0BAA0B,EAAE,CAAC;IAChD,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,eAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACpF,MAAM,KAAK,GAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAe,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACjF,IAAI,MAAM,GAAkB,IAAI,CAAC;QACjC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC;gBAAC,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,MAAM,GAAG,IAAI,CAAC;YAAC,CAAC;QAC/D,CAAC;QACD,MAAM,GAAG,GAAmB;YAC1B,IAAI,EAAE,UAAU;YAChB,QAAQ;YACR,KAAK;YACL,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAAC,MAAM,GAAG,cAAc;YACxF,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;SAC3C,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxD,MAAM,WAAW,CAAC;YAChB,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM;YAChG,OAAO,EAAE,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa;YACzE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc;YACxD,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;YACjC,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,KAAK,IAAI;YACxD,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,IAAwB,CAAC;IAC7B,IAAI,MAAc,CAAC;IACnB,IAAI,cAAc,GAA8B,IAAI,CAAC;IAErD,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAClB,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACxB,CAAC;SAAM,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,sBAAsB;QACtB,MAAM,CAAC,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QACd,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QAClB,cAAc,GAAG,CAAC,CAAC,SAAS,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN;;qEAE6D;QAC7D,IAAI,GAAG,GAAG,CAAC,iBAAiB,CAAC;QAC7B,MAAM,GAAG,oBAAoB,GAAG,GAAG,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChH,CAAC;IAED;;;oEAGgE;IAChE,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;QACtE,IAAI,GAAG,UAAU,CAAC;QAClB,MAAM,GAAG,4BAA4B,GAAG,MAAM,GAAG,GAAG,CAAC;IACvD,CAAC;IAED;;;;;;;;;uCASmC;IACnC,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,eAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IACjF,MAAM,KAAK,GAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAkB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAC9E;iEAC6D;IAC7D,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC;YAAC,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;IAC/D,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE1C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,YAAY,GAAG,MAAM,CAAC;IACjC,CAAC;IAED,MAAM,OAAO,GAAmB;QAC9B,IAAI;QACJ,QAAQ;QACR,KAAK;QACL,OAAO,EAAE,MAAM;QACf,MAAM;QACN,aAAa,EAAE,KAAK;KACrB,CAAC;IACF,iEAAiE;IACjE,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAA4B;QACxC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,IAAI;QAC7B,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;QACjC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,KAAK,IAAI;KACpD,CAAC;IACF,IAAI,cAAc,EAAE,CAAC;QACnB,QAAQ,CAAC,UAAU,GAAG,cAAc,CAAC;IACvC,CAAC;IACD,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,KAAK,UAAU,qBAAqB,CAAC,KAAyB;IAC5D;;;;;uEAKmE;IACnE,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACzD,0CAA0C;IAC1C,IAAI,IAAI,GAAG,WAAW,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACnC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QAAC,IAAI,GAAG,WAAW,CAAC;IAAC,CAAC;IAC/B,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAEvC;yEACqE;IACrE,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAAE,OAAO,KAAK,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAEzB,mCAAmC;IACnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACzE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QACxE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;QACtD,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAEzB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,CAAC;QAAC,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAAC,CAAC;IACjD,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface FederationConfig {
|
|
2
|
+
active: boolean;
|
|
3
|
+
parent_handle: string;
|
|
4
|
+
fed_handle: string;
|
|
5
|
+
base_url: string;
|
|
6
|
+
joined_at: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function readFederationConfig(): Promise<FederationConfig | null>;
|
|
9
|
+
export declare function writeFederationConfig(cfg: FederationConfig): Promise<void>;
|
|
10
|
+
/** Remove the federation config (leave). The vault key is left in place
|
|
11
|
+
* (harmless without the config; re-join overwrites it). */
|
|
12
|
+
export declare function clearFederationConfig(): Promise<void>;
|
|
13
|
+
export declare function setFederationKey(key: string): Promise<void>;
|
|
14
|
+
export declare function getFederationKey(): Promise<string | null>;
|
|
15
|
+
/** True when a child is actively federated to a parent. */
|
|
16
|
+
export declare function isFederationActive(): Promise<boolean>;
|
|
17
|
+
//# sourceMappingURL=federation_config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federation_config.d.ts","sourceRoot":"","sources":["../../src/core/federation_config.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAa7E;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhF;AAED;4DAC4D;AAC5D,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAK/D;AAED,2DAA2D;AAC3D,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG3D"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* F4 brain federation -- child-side config (2026-06-20).
|
|
3
|
+
*
|
|
4
|
+
* When a Forge install JOINS a parent (yf federation join <token>), it stores:
|
|
5
|
+
* - metadata (parent_handle, fed_handle, base_url, joined_at) in
|
|
6
|
+
* <config>/federation.json (mode 0600);
|
|
7
|
+
* - the derived per-link signing key in the vault slot
|
|
8
|
+
* 'yf_federation_key' (a raw slot, like yf_handle_key -- NOT a byok_
|
|
9
|
+
* provider key, so it bypasses provider_keys' allowlist and is read
|
|
10
|
+
* directly here).
|
|
11
|
+
*
|
|
12
|
+
* While a federation config is `active`, the child's brain config points both
|
|
13
|
+
* tiers at provider 'federation' so every turn routes to the parent's brain.
|
|
14
|
+
*
|
|
15
|
+
* ASCII-only.
|
|
16
|
+
*/
|
|
17
|
+
import { promises as fs } from 'node:fs';
|
|
18
|
+
import path from 'node:path';
|
|
19
|
+
import os from 'node:os';
|
|
20
|
+
import { Vault } from '../vault/store.js';
|
|
21
|
+
import { configDir } from '../license/index.js';
|
|
22
|
+
const FED_KEY_SLOT = 'yf_federation_key';
|
|
23
|
+
function fedConfigPath() {
|
|
24
|
+
const home = process.env.HOME || process.env.USERPROFILE || os.homedir();
|
|
25
|
+
const base = process.env.YF_CONFIG_DIR || path.join(home, '.yujin-forge');
|
|
26
|
+
return path.join(base, 'federation.json');
|
|
27
|
+
}
|
|
28
|
+
export async function readFederationConfig() {
|
|
29
|
+
try {
|
|
30
|
+
const raw = await fs.readFile(fedConfigPath(), 'utf-8');
|
|
31
|
+
const j = JSON.parse(raw);
|
|
32
|
+
if (!j || typeof j.fed_handle !== 'string' || typeof j.parent_handle !== 'string')
|
|
33
|
+
return null;
|
|
34
|
+
return {
|
|
35
|
+
active: j.active === true,
|
|
36
|
+
parent_handle: j.parent_handle,
|
|
37
|
+
fed_handle: j.fed_handle,
|
|
38
|
+
base_url: typeof j.base_url === 'string' ? j.base_url : '',
|
|
39
|
+
joined_at: typeof j.joined_at === 'string' ? j.joined_at : '',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export async function writeFederationConfig(cfg) {
|
|
47
|
+
const p = fedConfigPath();
|
|
48
|
+
await fs.mkdir(path.dirname(p), { recursive: true });
|
|
49
|
+
await fs.writeFile(p, JSON.stringify(cfg, null, 2) + '\n', { mode: 0o600 });
|
|
50
|
+
}
|
|
51
|
+
/** Remove the federation config (leave). The vault key is left in place
|
|
52
|
+
* (harmless without the config; re-join overwrites it). */
|
|
53
|
+
export async function clearFederationConfig() {
|
|
54
|
+
try {
|
|
55
|
+
await fs.unlink(fedConfigPath());
|
|
56
|
+
}
|
|
57
|
+
catch { /* not joined */ }
|
|
58
|
+
}
|
|
59
|
+
export async function setFederationKey(key) {
|
|
60
|
+
const vault = await Vault.open({ configDir: configDir() });
|
|
61
|
+
await vault.set(FED_KEY_SLOT, key);
|
|
62
|
+
}
|
|
63
|
+
export async function getFederationKey() {
|
|
64
|
+
try {
|
|
65
|
+
const vault = await Vault.open({ configDir: configDir() });
|
|
66
|
+
return vault.has(FED_KEY_SLOT) ? vault.get(FED_KEY_SLOT) : null;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** True when a child is actively federated to a parent. */
|
|
73
|
+
export async function isFederationActive() {
|
|
74
|
+
const cfg = await readFederationConfig();
|
|
75
|
+
return !!(cfg && cfg.active);
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=federation_config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"federation_config.js","sourceRoot":"","sources":["../../src/core/federation_config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,SAAS,aAAa;IACpB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAC5C,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA8B,CAAC;QACvD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC/F,OAAO;YACL,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI;YACzB,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAC1D,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;SAC9D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAqB;IAC/D,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED;4DAC4D;AAC5D,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC3D,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,GAAG,GAAG,MAAM,oBAAoB,EAAE,CAAC;IACzC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare const ALLOWED_SLOTS: readonly ["anthropic_api_key", "openai_api_key", "google_ai_key", "deepseek_api_key", "xai_api_key", "mistral_api_key", "cohere_api_key", "google_stt_key", "google_tts_key", "whisper_api_key", "elevenlabs_api_key", "yujin_admin_key"];
|
|
1
|
+
declare const ALLOWED_SLOTS: readonly ["anthropic_api_key", "openai_api_key", "google_ai_key", "deepseek_api_key", "xai_api_key", "mistral_api_key", "cohere_api_key", "qwen_api_key", "zai_api_key", "google_stt_key", "google_tts_key", "whisper_api_key", "elevenlabs_api_key", "yujin_admin_key"];
|
|
2
2
|
export type ProviderSlot = (typeof ALLOWED_SLOTS)[number];
|
|
3
3
|
export declare function listAllowedSlots(): readonly string[];
|
|
4
4
|
export declare function isAllowedSlot(s: string): s is ProviderSlot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider_keys.d.ts","sourceRoot":"","sources":["../../src/core/provider_keys.ts"],"names":[],"mappings":"AAkCA,QAAA,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"provider_keys.d.ts","sourceRoot":"","sources":["../../src/core/provider_keys.ts"],"names":[],"mappings":"AAkCA,QAAA,MAAM,aAAa,0QA4BT,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,wBAAgB,gBAAgB,IAAI,SAAS,MAAM,EAAE,CAEpD;AAgBD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,YAAY,CAM1D;AAqBD,+BAA+B;AAC/B,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAID;;;;eAIe;AACf,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC,CAgFD;AAED;;kBAEkB;AAClB,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOjE;AAED,0DAA0D;AAC1D,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1F;AAED,qCAAqC;AACrC,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK3D;AAED,oEAAoE;AACpE,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQnE;AAED;;;;6BAI6B;AAC7B,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAY/E"}
|
|
@@ -44,6 +44,9 @@ const ALLOWED_SLOTS = [
|
|
|
44
44
|
'xai_api_key',
|
|
45
45
|
'mistral_api_key',
|
|
46
46
|
'cohere_api_key',
|
|
47
|
+
/* F4 -- low-cost challengers (OpenAI-compatible). */
|
|
48
|
+
'qwen_api_key',
|
|
49
|
+
'zai_api_key',
|
|
47
50
|
/* Voice providers (decoupled from brain selection). */
|
|
48
51
|
'google_stt_key',
|
|
49
52
|
'google_tts_key',
|