@jackchen_me/open-multi-agent 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- package/.github/pull_request_template.md +14 -0
- package/.github/workflows/ci.yml +23 -0
- package/CLAUDE.md +72 -0
- package/CODE_OF_CONDUCT.md +48 -0
- package/CONTRIBUTING.md +72 -0
- package/DECISIONS.md +43 -0
- package/README.md +73 -140
- package/README_zh.md +217 -0
- package/SECURITY.md +17 -0
- package/dist/agent/agent.d.ts +5 -0
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +90 -3
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/structured-output.d.ts +33 -0
- package/dist/agent/structured-output.d.ts.map +1 -0
- package/dist/agent/structured-output.js +116 -0
- package/dist/agent/structured-output.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/llm/adapter.d.ts +9 -4
- package/dist/llm/adapter.d.ts.map +1 -1
- package/dist/llm/adapter.js +17 -5
- package/dist/llm/adapter.js.map +1 -1
- package/dist/llm/anthropic.d.ts +1 -1
- package/dist/llm/anthropic.d.ts.map +1 -1
- package/dist/llm/anthropic.js +2 -1
- package/dist/llm/anthropic.js.map +1 -1
- package/dist/llm/copilot.d.ts +92 -0
- package/dist/llm/copilot.d.ts.map +1 -0
- package/dist/llm/copilot.js +426 -0
- package/dist/llm/copilot.js.map +1 -0
- package/dist/llm/openai-common.d.ts +47 -0
- package/dist/llm/openai-common.d.ts.map +1 -0
- package/dist/llm/openai-common.js +209 -0
- package/dist/llm/openai-common.js.map +1 -0
- package/dist/llm/openai.d.ts +1 -1
- package/dist/llm/openai.d.ts.map +1 -1
- package/dist/llm/openai.js +3 -224
- package/dist/llm/openai.js.map +1 -1
- package/dist/orchestrator/orchestrator.d.ts +25 -1
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +130 -37
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/task/queue.js +1 -1
- package/dist/task/queue.js.map +1 -1
- package/dist/task/task.d.ts +3 -0
- package/dist/task/task.d.ts.map +1 -1
- package/dist/task/task.js +5 -1
- package/dist/task/task.js.map +1 -1
- package/dist/team/messaging.d.ts.map +1 -1
- package/dist/team/messaging.js +2 -1
- package/dist/team/messaging.js.map +1 -1
- package/dist/types.d.ts +31 -3
- package/dist/types.d.ts.map +1 -1
- package/examples/05-copilot-test.ts +49 -0
- package/examples/06-local-model.ts +199 -0
- package/examples/07-fan-out-aggregate.ts +209 -0
- package/examples/08-gemma4-local.ts +203 -0
- package/examples/09-gemma4-auto-orchestration.ts +162 -0
- package/package.json +4 -3
- package/src/agent/agent.ts +115 -6
- package/src/agent/structured-output.ts +126 -0
- package/src/index.ts +2 -1
- package/src/llm/adapter.ts +18 -5
- package/src/llm/anthropic.ts +2 -1
- package/src/llm/copilot.ts +551 -0
- package/src/llm/openai-common.ts +255 -0
- package/src/llm/openai.ts +8 -258
- package/src/orchestrator/orchestrator.ts +164 -38
- package/src/task/queue.ts +1 -1
- package/src/task/task.ts +8 -1
- package/src/team/messaging.ts +3 -1
- package/src/types.ts +31 -2
- package/tests/semaphore.test.ts +57 -0
- package/tests/shared-memory.test.ts +122 -0
- package/tests/structured-output.test.ts +331 -0
- package/tests/task-queue.test.ts +244 -0
- package/tests/task-retry.test.ts +368 -0
- package/tests/task-utils.test.ts +155 -0
- package/tests/tool-executor.test.ts +193 -0
package/dist/llm/adapter.d.ts
CHANGED
|
@@ -20,19 +20,24 @@ import type { LLMAdapter } from '../types.js';
|
|
|
20
20
|
* Additional providers can be integrated by implementing {@link LLMAdapter}
|
|
21
21
|
* directly and bypassing this factory.
|
|
22
22
|
*/
|
|
23
|
-
export type SupportedProvider = 'anthropic' | 'openai';
|
|
23
|
+
export type SupportedProvider = 'anthropic' | 'copilot' | 'openai';
|
|
24
24
|
/**
|
|
25
25
|
* Instantiate the appropriate {@link LLMAdapter} for the given provider.
|
|
26
26
|
*
|
|
27
|
-
* API keys fall back to the standard environment variables
|
|
28
|
-
*
|
|
27
|
+
* API keys fall back to the standard environment variables when not supplied
|
|
28
|
+
* explicitly:
|
|
29
|
+
* - `anthropic` → `ANTHROPIC_API_KEY`
|
|
30
|
+
* - `openai` → `OPENAI_API_KEY`
|
|
31
|
+
* - `copilot` → `GITHUB_COPILOT_TOKEN` / `GITHUB_TOKEN`, or interactive
|
|
32
|
+
* OAuth2 device flow if neither is set
|
|
29
33
|
*
|
|
30
34
|
* Adapters are imported lazily so that projects using only one provider
|
|
31
35
|
* are not forced to install the SDK for the other.
|
|
32
36
|
*
|
|
33
37
|
* @param provider - Which LLM provider to target.
|
|
34
38
|
* @param apiKey - Optional API key override; falls back to env var.
|
|
39
|
+
* @param baseURL - Optional base URL for OpenAI-compatible APIs (Ollama, vLLM, etc.).
|
|
35
40
|
* @throws {Error} When the provider string is not recognised.
|
|
36
41
|
*/
|
|
37
|
-
export declare function createAdapter(provider: SupportedProvider, apiKey?: string): Promise<LLMAdapter>;
|
|
42
|
+
export declare function createAdapter(provider: SupportedProvider, apiKey?: string, baseURL?: string): Promise<LLMAdapter>;
|
|
38
43
|
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/llm/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,YAAY,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,eAAe,EACf,UAAU,GACX,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/llm/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,YAAY,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,eAAe,EACf,UAAU,GACX,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAA;AAElE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAuBrB"}
|
package/dist/llm/adapter.js
CHANGED
|
@@ -16,25 +16,37 @@
|
|
|
16
16
|
/**
|
|
17
17
|
* Instantiate the appropriate {@link LLMAdapter} for the given provider.
|
|
18
18
|
*
|
|
19
|
-
* API keys fall back to the standard environment variables
|
|
20
|
-
*
|
|
19
|
+
* API keys fall back to the standard environment variables when not supplied
|
|
20
|
+
* explicitly:
|
|
21
|
+
* - `anthropic` → `ANTHROPIC_API_KEY`
|
|
22
|
+
* - `openai` → `OPENAI_API_KEY`
|
|
23
|
+
* - `copilot` → `GITHUB_COPILOT_TOKEN` / `GITHUB_TOKEN`, or interactive
|
|
24
|
+
* OAuth2 device flow if neither is set
|
|
21
25
|
*
|
|
22
26
|
* Adapters are imported lazily so that projects using only one provider
|
|
23
27
|
* are not forced to install the SDK for the other.
|
|
24
28
|
*
|
|
25
29
|
* @param provider - Which LLM provider to target.
|
|
26
30
|
* @param apiKey - Optional API key override; falls back to env var.
|
|
31
|
+
* @param baseURL - Optional base URL for OpenAI-compatible APIs (Ollama, vLLM, etc.).
|
|
27
32
|
* @throws {Error} When the provider string is not recognised.
|
|
28
33
|
*/
|
|
29
|
-
export async function createAdapter(provider, apiKey) {
|
|
34
|
+
export async function createAdapter(provider, apiKey, baseURL) {
|
|
30
35
|
switch (provider) {
|
|
31
36
|
case 'anthropic': {
|
|
32
37
|
const { AnthropicAdapter } = await import('./anthropic.js');
|
|
33
|
-
return new AnthropicAdapter(apiKey);
|
|
38
|
+
return new AnthropicAdapter(apiKey, baseURL);
|
|
39
|
+
}
|
|
40
|
+
case 'copilot': {
|
|
41
|
+
if (baseURL) {
|
|
42
|
+
console.warn('[open-multi-agent] baseURL is not supported for the copilot provider and will be ignored.');
|
|
43
|
+
}
|
|
44
|
+
const { CopilotAdapter } = await import('./copilot.js');
|
|
45
|
+
return new CopilotAdapter(apiKey);
|
|
34
46
|
}
|
|
35
47
|
case 'openai': {
|
|
36
48
|
const { OpenAIAdapter } = await import('./openai.js');
|
|
37
|
-
return new OpenAIAdapter(apiKey);
|
|
49
|
+
return new OpenAIAdapter(apiKey, baseURL);
|
|
38
50
|
}
|
|
39
51
|
default: {
|
|
40
52
|
// The `never` cast here makes TypeScript enforce exhaustiveness.
|
package/dist/llm/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/llm/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2BH
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/llm/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2BH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAA2B,EAC3B,MAAe,EACf,OAAgB;IAEhB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAA;YAC3D,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC9C,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAA;YAC3G,CAAC;YACD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;YACvD,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;YACrD,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC3C,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,iEAAiE;YACjE,MAAM,WAAW,GAAU,QAAQ,CAAA;YACnC,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QACrE,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/llm/anthropic.d.ts
CHANGED
|
@@ -30,7 +30,7 @@ import type { ContentBlock, ImageBlock, LLMAdapter, LLMChatOptions, LLMMessage,
|
|
|
30
30
|
export declare class AnthropicAdapter implements LLMAdapter {
|
|
31
31
|
#private;
|
|
32
32
|
readonly name = "anthropic";
|
|
33
|
-
constructor(apiKey?: string);
|
|
33
|
+
constructor(apiKey?: string, baseURL?: string);
|
|
34
34
|
/**
|
|
35
35
|
* Send a synchronous (non-streaming) chat request and return the complete
|
|
36
36
|
* {@link LLMResponse}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAaH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,YAAY,EACb,MAAM,aAAa,CAAA;AAqIpB;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,UAAU;;IACjD,QAAQ,CAAC,IAAI,eAAc;gBAIf,MAAM,CAAC,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAaH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,YAAY,EACb,MAAM,aAAa,CAAA;AAqIpB;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,UAAU;;IACjD,QAAQ,CAAC,IAAI,eAAc;gBAIf,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAW7C;;;;;;OAMG;IACG,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAmCjF;;;;;;;;;;OAUG;IACI,MAAM,CACX,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,EAAE,gBAAgB,GACxB,aAAa,CAAC,WAAW,CAAC;CAkH9B;AAGD,YAAY,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,YAAY,GACb,CAAA"}
|
package/dist/llm/anthropic.js
CHANGED
|
@@ -149,9 +149,10 @@ function fromAnthropicContentBlock(block) {
|
|
|
149
149
|
export class AnthropicAdapter {
|
|
150
150
|
name = 'anthropic';
|
|
151
151
|
#client;
|
|
152
|
-
constructor(apiKey) {
|
|
152
|
+
constructor(apiKey, baseURL) {
|
|
153
153
|
this.#client = new Anthropic({
|
|
154
154
|
apiKey: apiKey ?? process.env['ANTHROPIC_API_KEY'],
|
|
155
|
+
baseURL,
|
|
155
156
|
});
|
|
156
157
|
}
|
|
157
158
|
// -------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview GitHub Copilot adapter implementing {@link LLMAdapter}.
|
|
3
|
+
*
|
|
4
|
+
* Uses the OpenAI-compatible Copilot Chat Completions endpoint at
|
|
5
|
+
* `https://api.githubcopilot.com`. Authentication requires a GitHub token
|
|
6
|
+
* which is exchanged for a short-lived Copilot session token via the
|
|
7
|
+
* internal token endpoint.
|
|
8
|
+
*
|
|
9
|
+
* API key resolution order:
|
|
10
|
+
* 1. `apiKey` constructor argument
|
|
11
|
+
* 2. `GITHUB_COPILOT_TOKEN` environment variable
|
|
12
|
+
* 3. `GITHUB_TOKEN` environment variable
|
|
13
|
+
* 4. Interactive OAuth2 device flow (prompts the user to sign in)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { CopilotAdapter } from './copilot.js'
|
|
18
|
+
*
|
|
19
|
+
* const adapter = new CopilotAdapter() // uses GITHUB_COPILOT_TOKEN, falling back to GITHUB_TOKEN
|
|
20
|
+
* const response = await adapter.chat(messages, {
|
|
21
|
+
* model: 'claude-sonnet-4',
|
|
22
|
+
* maxTokens: 4096,
|
|
23
|
+
* })
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import type { LLMAdapter, LLMChatOptions, LLMMessage, LLMResponse, LLMStreamOptions, StreamEvent } from '../types.js';
|
|
27
|
+
/**
|
|
28
|
+
* Callback invoked when the OAuth2 device flow needs the user to authorize.
|
|
29
|
+
* Receives the verification URI and user code. If not provided, defaults to
|
|
30
|
+
* printing them to stdout.
|
|
31
|
+
*/
|
|
32
|
+
export type DeviceCodeCallback = (verificationUri: string, userCode: string) => void;
|
|
33
|
+
/** Options for the {@link CopilotAdapter} constructor. */
|
|
34
|
+
export interface CopilotAdapterOptions {
|
|
35
|
+
/** GitHub OAuth token already scoped for Copilot. Falls back to env vars. */
|
|
36
|
+
apiKey?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Callback invoked when the OAuth2 device flow needs user action.
|
|
39
|
+
* Defaults to printing the verification URI and user code to stdout.
|
|
40
|
+
*/
|
|
41
|
+
onDeviceCode?: DeviceCodeCallback;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* LLM adapter backed by the GitHub Copilot Chat Completions API.
|
|
45
|
+
*
|
|
46
|
+
* Authentication options (tried in order):
|
|
47
|
+
* 1. `apiKey` constructor arg — a GitHub OAuth token already scoped for Copilot
|
|
48
|
+
* 2. `GITHUB_COPILOT_TOKEN` env var
|
|
49
|
+
* 3. `GITHUB_TOKEN` env var
|
|
50
|
+
* 4. Interactive OAuth2 device flow
|
|
51
|
+
*
|
|
52
|
+
* The GitHub token is exchanged for a short-lived Copilot session token, which
|
|
53
|
+
* is cached and auto-refreshed.
|
|
54
|
+
*
|
|
55
|
+
* Thread-safe — a single instance may be shared across concurrent agent runs.
|
|
56
|
+
* Concurrent token refreshes are serialised via an internal mutex.
|
|
57
|
+
*/
|
|
58
|
+
export declare class CopilotAdapter implements LLMAdapter {
|
|
59
|
+
#private;
|
|
60
|
+
readonly name = "copilot";
|
|
61
|
+
constructor(apiKeyOrOptions?: string | CopilotAdapterOptions);
|
|
62
|
+
chat(messages: LLMMessage[], options: LLMChatOptions): Promise<LLMResponse>;
|
|
63
|
+
stream(messages: LLMMessage[], options: LLMStreamOptions): AsyncIterable<StreamEvent>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Model metadata used for display names, context windows, and premium request
|
|
67
|
+
* multiplier lookup.
|
|
68
|
+
*/
|
|
69
|
+
export interface CopilotModelInfo {
|
|
70
|
+
readonly id: string;
|
|
71
|
+
readonly name: string;
|
|
72
|
+
readonly contextWindow: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Return the premium-request multiplier for a Copilot model.
|
|
76
|
+
*
|
|
77
|
+
* Copilot doesn't charge per-token — instead each request costs
|
|
78
|
+
* `multiplier × 1 premium request` from the user's monthly allowance.
|
|
79
|
+
* A multiplier of 0 means the model is included at no premium cost.
|
|
80
|
+
*
|
|
81
|
+
* Based on https://docs.github.com/en/copilot/reference/ai-models/supported-models#model-multipliers
|
|
82
|
+
*/
|
|
83
|
+
export declare function getCopilotMultiplier(modelId: string): number;
|
|
84
|
+
/**
|
|
85
|
+
* Human-readable string describing the premium-request cost for a model.
|
|
86
|
+
*
|
|
87
|
+
* Examples: `"included (0×)"`, `"1× premium request"`, `"0.33× premium request"`
|
|
88
|
+
*/
|
|
89
|
+
export declare function formatCopilotMultiplier(multiplier: number): string;
|
|
90
|
+
/** Known model metadata for Copilot-available models. */
|
|
91
|
+
export declare const COPILOT_MODELS: readonly CopilotModelInfo[];
|
|
92
|
+
//# sourceMappingURL=copilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../src/llm/copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH,OAAO,KAAK,EAEV,UAAU,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAEhB,WAAW,EAGZ,MAAM,aAAa,CAAA;AA2CpB;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;AA+GpF,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAClC;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,UAAU;;IAC/C,QAAQ,CAAC,IAAI,aAAY;gBAQb,eAAe,CAAC,EAAE,MAAM,GAAG,qBAAqB;IA6DtD,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC;IAyB1E,MAAM,CACX,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,EAAE,gBAAgB,GACxB,aAAa,CAAC,WAAW,CAAC;CA2H9B;AAMD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoC5D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIlE;AAED,yDAAyD;AACzD,eAAO,MAAM,cAAc,EAAE,SAAS,gBAAgB,EA2B5C,CAAA"}
|