@spinabot/brigade 1.19.2 → 1.19.3
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/agents/content-quality-retry.d.ts.map +1 -1
- package/dist/agents/content-quality-retry.js +22 -3
- package/dist/agents/content-quality-retry.js.map +1 -1
- package/dist/buildstamp.json +1 -1
- package/dist/cli/commands/connect.d.ts.map +1 -1
- package/dist/cli/commands/connect.js +48 -12
- package/dist/cli/commands/connect.js.map +1 -1
- package/dist/cli/commands/update.d.ts +6 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +124 -9
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/program/build-program.d.ts.map +1 -1
- package/dist/cli/program/build-program.js +5 -1
- package/dist/cli/program/build-program.js.map +1 -1
- package/dist/core/server.js +24 -5
- package/dist/core/server.js.map +1 -1
- package/dist/integrations/ollama.d.ts +15 -3
- package/dist/integrations/ollama.d.ts.map +1 -1
- package/dist/integrations/ollama.js +53 -10
- package/dist/integrations/ollama.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,9 +9,12 @@
|
|
|
9
9
|
* via the `~/.brigade/models.json` mechanism Pi exposes for custom providers.
|
|
10
10
|
* Each model the user has pulled becomes a Pi `Model<"openai-completions">`.
|
|
11
11
|
*
|
|
12
|
-
* Capability
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* Capability detection is AUTHORITATIVE where possible: Ollama's POST /api/show
|
|
13
|
+
* returns a `capabilities` array (e.g. ["completion","tools","thinking","vision"])
|
|
14
|
+
* that tells us directly whether a model REASONS, supports TOOLS, and accepts
|
|
15
|
+
* IMAGES. We read that first and only fall back to name-pattern guessing when the
|
|
16
|
+
* probe is unavailable (older daemon / offline). Context window still isn't
|
|
17
|
+
* reported, so that stays a safe default.
|
|
15
18
|
*/
|
|
16
19
|
export interface OllamaModelSummary {
|
|
17
20
|
id: string;
|
|
@@ -38,6 +41,15 @@ export interface InferredCapabilities {
|
|
|
38
41
|
input: ("text" | "image")[];
|
|
39
42
|
}
|
|
40
43
|
export declare function inferOllamaModelCapabilities(modelId: string): InferredCapabilities;
|
|
44
|
+
/**
|
|
45
|
+
* AUTHORITATIVE capability probe — POST /api/show for one model and return its
|
|
46
|
+
* lower-cased `capabilities` array. This is the source of truth for whether a
|
|
47
|
+
* model REASONS (`"thinking"`), supports TOOLS (`"tools"`), and accepts IMAGES
|
|
48
|
+
* (`"vision"`) — far better than guessing from the model name. Best-effort:
|
|
49
|
+
* returns null on any failure (older Ollama, daemon down, timeout) so callers
|
|
50
|
+
* fall back to `inferOllamaModelCapabilities`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function fetchOllamaCapabilities(modelId: string, baseUrl?: string): Promise<string[] | null>;
|
|
41
53
|
/**
|
|
42
54
|
* Write Brigade's Ollama provider entry into Pi's `~/.brigade/models.json`.
|
|
43
55
|
* Pi's `ModelRegistry.refresh()` picks this up and exposes the models as
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/integrations/ollama.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../src/integrations/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAwBH,MAAM,WAAW,kBAAkB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,MAAyB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAqC5G;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC5B;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAiDlF;AAQD;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAyB,GAChC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAoB1B;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC5C,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA6Df;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CAC1C,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAyB,GAChC,OAAO,CAAC,OAAO,CAAC,CAclB"}
|
|
@@ -9,9 +9,12 @@
|
|
|
9
9
|
* via the `~/.brigade/models.json` mechanism Pi exposes for custom providers.
|
|
10
10
|
* Each model the user has pulled becomes a Pi `Model<"openai-completions">`.
|
|
11
11
|
*
|
|
12
|
-
* Capability
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* Capability detection is AUTHORITATIVE where possible: Ollama's POST /api/show
|
|
13
|
+
* returns a `capabilities` array (e.g. ["completion","tools","thinking","vision"])
|
|
14
|
+
* that tells us directly whether a model REASONS, supports TOOLS, and accepts
|
|
15
|
+
* IMAGES. We read that first and only fall back to name-pattern guessing when the
|
|
16
|
+
* probe is unavailable (older daemon / offline). Context window still isn't
|
|
17
|
+
* reported, so that stays a safe default.
|
|
15
18
|
*/
|
|
16
19
|
import * as fs from "node:fs/promises";
|
|
17
20
|
import path from "node:path";
|
|
@@ -98,6 +101,39 @@ export function inferOllamaModelCapabilities(modelId) {
|
|
|
98
101
|
const input = vision ? ["text", "image"] : ["text"];
|
|
99
102
|
return { reasoning, contextWindow, maxTokens, input };
|
|
100
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* AUTHORITATIVE capability probe — POST /api/show for one model and return its
|
|
106
|
+
* lower-cased `capabilities` array. This is the source of truth for whether a
|
|
107
|
+
* model REASONS (`"thinking"`), supports TOOLS (`"tools"`), and accepts IMAGES
|
|
108
|
+
* (`"vision"`) — far better than guessing from the model name. Best-effort:
|
|
109
|
+
* returns null on any failure (older Ollama, daemon down, timeout) so callers
|
|
110
|
+
* fall back to `inferOllamaModelCapabilities`.
|
|
111
|
+
*/
|
|
112
|
+
export async function fetchOllamaCapabilities(modelId, baseUrl = DEFAULT_BASE_URL) {
|
|
113
|
+
const url = `${baseUrl.replace(/\/$/, "")}/api/show`;
|
|
114
|
+
const controller = new AbortController();
|
|
115
|
+
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
116
|
+
try {
|
|
117
|
+
const res = await fetch(url, {
|
|
118
|
+
method: "POST",
|
|
119
|
+
headers: { "Content-Type": "application/json" },
|
|
120
|
+
body: JSON.stringify({ model: modelId }),
|
|
121
|
+
signal: controller.signal,
|
|
122
|
+
});
|
|
123
|
+
if (!res.ok)
|
|
124
|
+
return null;
|
|
125
|
+
const body = (await res.json());
|
|
126
|
+
if (!Array.isArray(body.capabilities))
|
|
127
|
+
return null;
|
|
128
|
+
return body.capabilities.map((c) => String(c).toLowerCase());
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
clearTimeout(timer);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
101
137
|
/**
|
|
102
138
|
* Write Brigade's Ollama provider entry into Pi's `~/.brigade/models.json`.
|
|
103
139
|
* Pi's `ModelRegistry.refresh()` picks this up and exposes the models as
|
|
@@ -117,18 +153,25 @@ export async function writeOllamaToModelsJson(modelsJsonPath, baseUrl, models) {
|
|
|
117
153
|
catch {
|
|
118
154
|
// File missing or unparseable — start fresh. Pi treats an absent file as no config.
|
|
119
155
|
}
|
|
120
|
-
|
|
121
|
-
|
|
156
|
+
// Prefer Ollama's own /api/show `capabilities` (authoritative for reasoning /
|
|
157
|
+
// tools / vision); fall back to the name heuristic only when the probe fails.
|
|
158
|
+
// Probes run in parallel, so total added latency is ~one request, not N.
|
|
159
|
+
const modelDefs = await Promise.all(models.map(async (m) => {
|
|
160
|
+
const guess = inferOllamaModelCapabilities(m.id);
|
|
161
|
+
const caps = await fetchOllamaCapabilities(m.id, baseUrl);
|
|
162
|
+
const reasoning = caps ? caps.includes("thinking") : guess.reasoning;
|
|
163
|
+
const vision = caps ? caps.includes("vision") : guess.input.includes("image");
|
|
164
|
+
const input = vision ? ["text", "image"] : ["text"];
|
|
122
165
|
return {
|
|
123
166
|
id: m.id,
|
|
124
167
|
name: m.name + (m.parameterSize ? ` (${m.parameterSize})` : ""),
|
|
125
|
-
reasoning
|
|
126
|
-
input
|
|
127
|
-
contextWindow:
|
|
128
|
-
maxTokens:
|
|
168
|
+
reasoning,
|
|
169
|
+
input,
|
|
170
|
+
contextWindow: guess.contextWindow,
|
|
171
|
+
maxTokens: guess.maxTokens,
|
|
129
172
|
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, // local = free
|
|
130
173
|
};
|
|
131
|
-
});
|
|
174
|
+
}));
|
|
132
175
|
existing.providers["ollama"] = {
|
|
133
176
|
baseUrl: `${baseUrl.replace(/\/$/, "")}/v1`,
|
|
134
177
|
api: "openai-completions",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/integrations/ollama.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/integrations/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAClD,MAAM,UAAU,GAAG,IAAI,CAAC;AAwBxB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAkB,gBAAgB;IAC5E,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;IAE/D,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACJ,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,GAAG,IAAI,mCAAmC,CAAC,CAAC;QACvG,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC1E,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mDAAmD,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAEjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACd,mHAAmH,CACnH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI;QACrB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,SAAS,EAAE,CAAC,CAAC,IAAI;QACjB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM;QACzB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,cAAc;KACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAeD,MAAM,UAAU,4BAA4B,CAAC,OAAe;IAC3D,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEjC,oEAAoE;IACpE,yEAAyE;IACzE,wEAAwE;IACxE,gEAAgE;IAChE,+DAA+D;IAC/D,mEAAmE;IACnE,uCAAuC;IACvC,EAAE;IACF,wEAAwE;IACxE,+CAA+C;IAC/C,yDAAyD;IACzD,oEAAoE;IACpE,EAAE;IACF,4CAA4C;IAC5C,qDAAqD;IACrD,6DAA6D;IAC7D,oEAAoE;IACpE,0DAA0D;IAC1D,MAAM,SAAS,GACd,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEnB,8CAA8C;IAC9C,MAAM,MAAM,GACX,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,+BAA+B;IAErE,iEAAiE;IACjE,wCAAwC;IACxC,0BAA0B;IAC1B,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,aAAa,GAAG,MAAM,CAAC;IAC7B,MAAM,SAAS,GAAG,KAAK,CAAC;IAExB,MAAM,KAAK,GAAyB,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAE1E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC;AAQD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,OAAe,EACf,UAAkB,gBAAgB;IAElC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/D,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YACxC,MAAM,EAAE,UAAU,CAAC,MAAM;SACzB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAuB,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,cAAsB,EACtB,OAAe,EACf,MAA4B;IAE5B,IAAI,QAAQ,GAAwC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACtE,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACtD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,SAAS;YAAE,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACR,oFAAoF;IACrF,CAAC;IAED,8EAA8E;IAC9E,8EAA8E;IAC9E,yEAAyE;IACzE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAyB,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1E,OAAO;YACN,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,SAAS;YACT,KAAK;YACL,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,eAAe;SAC3E,CAAC;IACH,CAAC,CAAC,CACF,CAAC;IAEF,QAAQ,CAAC,SAAU,CAAC,QAAQ,CAAC,GAAG;QAC/B,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;QAC3C,GAAG,EAAE,oBAAoB;QACzB,4EAA4E;QAC5E,kEAAkE;QAClE,MAAM,EAAE,+BAA+B;QACvC,MAAM,EAAE,SAAS;KACjB,CAAC;IAEF,yEAAyE;IACzE,wEAAwE;IACxE,yEAAyE;IACzE,sEAAsE;IACtE,8DAA8D;IAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAE9E,+EAA+E;IAC/E,wEAAwE;IACxE,uEAAuE;IACvE,mBAAmB;IACnB,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI;aACnB,iBAAiB,CAAC,MAAM,EAAE,QAAiB,EAAE,QAAmC,CAAC;aACjF,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;YACrB,OAAO,CAAC,KAAK,CAAC,oDAAoD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,cAAsB,EACtB,OAAe,EACf,UAAkB,gBAAgB;IAElC,IAAI,UAAgC,CAAC;IACrC,IAAI,CAAC;QACJ,UAAU,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACR,uEAAuE;QACvE,wDAAwD;QACxD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,uBAAuB,CAAC,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACnE,wEAAwE;IACxE,4CAA4C;IAC5C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AACvE,CAAC"}
|