@galaxy-stack/ai-coder-core 0.3.0-alpha.1 → 0.3.0-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/CHANGELOG.d/2026-09-19-research-rejection-evidence.md +15 -0
  2. package/CHANGELOG.d/2026-09-21-evidence-missing-remediation.md +15 -0
  3. package/CHANGELOG.d/2026-09-21-observation-nudge-context.md +12 -0
  4. package/CHANGELOG.d/2026-09-22-model-retry-budget.md +18 -0
  5. package/CHANGELOG.d/2026-09-22-no-progress-recovery-turn.md +19 -0
  6. package/CHANGELOG.d/2026-09-23-agent-platform.md +5 -0
  7. package/CHANGELOG.d/2026-09-23-conservative-output-reserve.md +16 -0
  8. package/CHANGELOG.d/2026-09-24-approval-workspace-review.md +7 -0
  9. package/CHANGELOG.d/2026-09-24-incremental-ollama.md +5 -0
  10. package/CHANGELOG.md +71 -1
  11. package/README.md +78 -4
  12. package/dist/adapters/node/config/manual-provider-config.d.ts +19 -0
  13. package/dist/adapters/node/config/manual-provider-config.d.ts.map +1 -0
  14. package/dist/adapters/node/config/manual-provider-config.js +91 -0
  15. package/dist/adapters/node/config/manual-provider-config.js.map +1 -0
  16. package/dist/adapters/node/host/command-containment.d.ts +45 -0
  17. package/dist/adapters/node/host/command-containment.d.ts.map +1 -0
  18. package/dist/adapters/node/host/command-containment.js +580 -0
  19. package/dist/adapters/node/host/command-containment.js.map +1 -0
  20. package/dist/adapters/node/host/content-hash.d.ts +2 -0
  21. package/dist/adapters/node/host/content-hash.d.ts.map +1 -0
  22. package/dist/adapters/node/host/content-hash.js +5 -0
  23. package/dist/adapters/node/host/content-hash.js.map +1 -0
  24. package/dist/adapters/node/host/file-run-store.d.ts +29 -0
  25. package/dist/adapters/node/host/file-run-store.d.ts.map +1 -0
  26. package/dist/adapters/node/host/file-run-store.js +94 -0
  27. package/dist/adapters/node/host/file-run-store.js.map +1 -0
  28. package/dist/adapters/node/host/host-environment.d.ts +9 -0
  29. package/dist/adapters/node/host/host-environment.d.ts.map +1 -0
  30. package/dist/adapters/node/host/host-environment.js +29 -0
  31. package/dist/adapters/node/host/host-environment.js.map +1 -0
  32. package/dist/adapters/node/host/node-command-port.d.ts +21 -0
  33. package/dist/adapters/node/host/node-command-port.d.ts.map +1 -0
  34. package/dist/adapters/node/host/node-command-port.js +281 -0
  35. package/dist/adapters/node/host/node-command-port.js.map +1 -0
  36. package/dist/adapters/node/host/node-workspace-evidence-verifier.d.ts +22 -0
  37. package/dist/adapters/node/host/node-workspace-evidence-verifier.d.ts.map +1 -0
  38. package/dist/adapters/node/host/node-workspace-evidence-verifier.js +384 -0
  39. package/dist/adapters/node/host/node-workspace-evidence-verifier.js.map +1 -0
  40. package/dist/adapters/node/host/node-workspace-port.d.ts +87 -0
  41. package/dist/adapters/node/host/node-workspace-port.d.ts.map +1 -0
  42. package/dist/adapters/node/host/node-workspace-port.js +860 -0
  43. package/dist/adapters/node/host/node-workspace-port.js.map +1 -0
  44. package/dist/adapters/node/host/node-workspace-snapshot.d.ts +61 -0
  45. package/dist/adapters/node/host/node-workspace-snapshot.d.ts.map +1 -0
  46. package/dist/adapters/node/host/node-workspace-snapshot.js +281 -0
  47. package/dist/adapters/node/host/node-workspace-snapshot.js.map +1 -0
  48. package/dist/adapters/node/host/path-scope.d.ts +17 -0
  49. package/dist/adapters/node/host/path-scope.d.ts.map +1 -0
  50. package/dist/adapters/node/host/path-scope.js +89 -0
  51. package/dist/adapters/node/host/path-scope.js.map +1 -0
  52. package/dist/adapters/node/host/project-tools.d.ts +42 -0
  53. package/dist/adapters/node/host/project-tools.d.ts.map +1 -0
  54. package/dist/adapters/node/host/project-tools.js +362 -0
  55. package/dist/adapters/node/host/project-tools.js.map +1 -0
  56. package/dist/adapters/node/mcp/mcp-client.d.ts +206 -0
  57. package/dist/adapters/node/mcp/mcp-client.d.ts.map +1 -0
  58. package/dist/adapters/node/mcp/mcp-client.js +128 -0
  59. package/dist/adapters/node/mcp/mcp-client.js.map +1 -0
  60. package/dist/adapters/node/mcp/oauth-provider.d.ts +39 -0
  61. package/dist/adapters/node/mcp/oauth-provider.d.ts.map +1 -0
  62. package/dist/adapters/node/mcp/oauth-provider.js +168 -0
  63. package/dist/adapters/node/mcp/oauth-provider.js.map +1 -0
  64. package/dist/adapters/node/memory/sqlite-memory.d.ts +22 -0
  65. package/dist/adapters/node/memory/sqlite-memory.d.ts.map +1 -0
  66. package/dist/adapters/node/memory/sqlite-memory.js +83 -0
  67. package/dist/adapters/node/memory/sqlite-memory.js.map +1 -0
  68. package/dist/adapters/node/provider/ollama-chat-stream.d.ts +17 -0
  69. package/dist/adapters/node/provider/ollama-chat-stream.d.ts.map +1 -0
  70. package/dist/adapters/node/provider/ollama-chat-stream.js +176 -0
  71. package/dist/adapters/node/provider/ollama-chat-stream.js.map +1 -0
  72. package/dist/adapters/node/provider/ollama-coding-model.d.ts +89 -0
  73. package/dist/adapters/node/provider/ollama-coding-model.d.ts.map +1 -0
  74. package/dist/adapters/node/provider/ollama-coding-model.js +464 -0
  75. package/dist/adapters/node/provider/ollama-coding-model.js.map +1 -0
  76. package/dist/adapters/node/provider/ollama-research-port.d.ts +32 -0
  77. package/dist/adapters/node/provider/ollama-research-port.d.ts.map +1 -0
  78. package/dist/adapters/node/provider/ollama-research-port.js +346 -0
  79. package/dist/adapters/node/provider/ollama-research-port.js.map +1 -0
  80. package/dist/adapters/node/skills/directory-skills.d.ts +12 -0
  81. package/dist/adapters/node/skills/directory-skills.d.ts.map +1 -0
  82. package/dist/adapters/node/skills/directory-skills.js +90 -0
  83. package/dist/adapters/node/skills/directory-skills.js.map +1 -0
  84. package/dist/adapters/node/tools/tool-executor.d.ts +91 -0
  85. package/dist/adapters/node/tools/tool-executor.d.ts.map +1 -0
  86. package/dist/adapters/node/tools/tool-executor.js +948 -0
  87. package/dist/adapters/node/tools/tool-executor.js.map +1 -0
  88. package/dist/adapters/node/tools/workspace-review.d.ts +13 -0
  89. package/dist/adapters/node/tools/workspace-review.d.ts.map +1 -0
  90. package/dist/adapters/node/tools/workspace-review.js +81 -0
  91. package/dist/adapters/node/tools/workspace-review.js.map +1 -0
  92. package/dist/agent/index.d.ts +79 -0
  93. package/dist/agent/index.d.ts.map +1 -0
  94. package/dist/agent/index.js +97 -0
  95. package/dist/agent/index.js.map +1 -0
  96. package/dist/approval/approval-policy.d.ts.map +1 -1
  97. package/dist/approval/approval-policy.js +4 -1
  98. package/dist/approval/approval-policy.js.map +1 -1
  99. package/dist/context/checkpoint.d.ts +2 -0
  100. package/dist/context/checkpoint.d.ts.map +1 -1
  101. package/dist/context/checkpoint.js +5 -2
  102. package/dist/context/checkpoint.js.map +1 -1
  103. package/dist/context/context-manager.d.ts.map +1 -1
  104. package/dist/context/context-manager.js +21 -8
  105. package/dist/context/context-manager.js.map +1 -1
  106. package/dist/context/context-profile.d.ts +1 -1
  107. package/dist/context/context-profile.js +2 -2
  108. package/dist/prompt/prompt-assembler.d.ts +1 -0
  109. package/dist/prompt/prompt-assembler.d.ts.map +1 -1
  110. package/dist/prompt/prompt-assembler.js +16 -2
  111. package/dist/prompt/prompt-assembler.js.map +1 -1
  112. package/dist/runtime/run-controller.d.ts.map +1 -1
  113. package/dist/runtime/run-controller.js +131 -24
  114. package/dist/runtime/run-controller.js.map +1 -1
  115. package/dist/runtime/runtime-types.d.ts +20 -0
  116. package/dist/runtime/runtime-types.d.ts.map +1 -1
  117. package/dist/tools/tool-registry.js +1 -1
  118. package/dist/tools/tool-registry.js.map +1 -1
  119. package/docs/AGENT_PLATFORM.md +91 -0
  120. package/docs/GALAXY_AGENT_PLATFORM_PLAN.md +353 -0
  121. package/docs/GALAXY_AGENT_PLATFORM_TODO.md +176 -0
  122. package/package.json +19 -5
@@ -0,0 +1,176 @@
1
+ import { CodingProviderError, } from "../../../ports/index.js";
2
+ export const OLLAMA_GLM_5_3_FLASH_IDENTITY = Object.freeze({
3
+ baseUrl: "https://ollama.com",
4
+ model: "glm-5.3-flash:cloud",
5
+ provider: "ollama",
6
+ runtimeVersion: "ollama-api-chat-v1",
7
+ });
8
+ function isObject(value) {
9
+ return typeof value === "object" && value !== null && !Array.isArray(value);
10
+ }
11
+ function nonNegativeInteger(value) {
12
+ return Number.isSafeInteger(value) && Number(value) >= 0 ? Number(value) : undefined;
13
+ }
14
+ function malformed(message, retryable = false, retryMode = "same_request") {
15
+ return Object.freeze({
16
+ type: "error",
17
+ error: new CodingProviderError("MALFORMED_STREAM", message, retryable, retryMode),
18
+ });
19
+ }
20
+ function textField(message, name) {
21
+ const value = message[name];
22
+ if (value === undefined)
23
+ return "";
24
+ if (typeof value !== "string")
25
+ throw new Error(`Ollama message.${name} must be a string.`);
26
+ return value;
27
+ }
28
+ /** Stateful normalizer shared by live NDJSON and deterministic replay. */
29
+ export function createOllamaChatNormalizer(options) {
30
+ const initial = [Object.freeze({ type: "started" })];
31
+ let failed = options.roundId.trim().length === 0;
32
+ if (failed)
33
+ initial.push(malformed("Ollama normalization requires a non-empty roundId."));
34
+ const identity = options.identity ?? OLLAMA_GLM_5_3_FLASH_IDENTITY;
35
+ let content = "";
36
+ let thinking = "";
37
+ let toolCallCount = 0;
38
+ let terminalSeen = false;
39
+ let chunksSeen = 0;
40
+ const callIds = new Set();
41
+ const push = (rawChunk) => {
42
+ if (failed)
43
+ return [];
44
+ const events = [];
45
+ const chunkIndex = chunksSeen++;
46
+ try {
47
+ if (terminalSeen)
48
+ throw new Error(`Ollama emitted chunk ${chunkIndex + 1} after done=true.`);
49
+ if (!isObject(rawChunk))
50
+ throw new Error(`Ollama chunk ${chunkIndex + 1} must be an object.`);
51
+ if (typeof rawChunk.error === "string" && rawChunk.error.trim().length > 0) {
52
+ events.push(Object.freeze({
53
+ type: "error",
54
+ error: new CodingProviderError("PROVIDER_ERROR", `Ollama stream failed: ${rawChunk.error.slice(0, 300)}`, true),
55
+ }));
56
+ failed = true;
57
+ return Object.freeze(events);
58
+ }
59
+ const messageValue = rawChunk.message;
60
+ if (messageValue !== undefined && !isObject(messageValue)) {
61
+ throw new Error(`Ollama chunk ${chunkIndex + 1} message must be an object.`);
62
+ }
63
+ const message = messageValue ?? Object.freeze({});
64
+ if (message.role !== undefined && message.role !== "assistant") {
65
+ throw new Error(`Ollama chunk ${chunkIndex + 1} message.role must be 'assistant'.`);
66
+ }
67
+ const thinkingDelta = textField(message, "thinking");
68
+ const contentDelta = textField(message, "content");
69
+ if (thinkingDelta.length > 0) {
70
+ thinking += thinkingDelta;
71
+ events.push(Object.freeze({ type: "thinking", delta: thinkingDelta }));
72
+ }
73
+ if (contentDelta.length > 0) {
74
+ content += contentDelta;
75
+ events.push(Object.freeze({ type: "content", delta: contentDelta }));
76
+ }
77
+ const rawToolCalls = message.tool_calls;
78
+ if (rawToolCalls !== undefined && !Array.isArray(rawToolCalls)) {
79
+ throw new Error(`Ollama chunk ${chunkIndex + 1} message.tool_calls must be an array.`);
80
+ }
81
+ for (const [callIndex, rawCall] of (rawToolCalls ?? []).entries()) {
82
+ if (!isObject(rawCall) || !isObject(rawCall.function)) {
83
+ throw new Error(`Ollama chunk ${chunkIndex + 1} tool call ${callIndex + 1} is invalid.`);
84
+ }
85
+ const name = rawCall.function.name;
86
+ const argumentsValue = rawCall.function.arguments;
87
+ if (typeof name !== "string" || name.trim().length === 0 || !isObject(argumentsValue)) {
88
+ throw new Error(`Ollama chunk ${chunkIndex + 1} tool call ${callIndex + 1} requires a name and object arguments.`);
89
+ }
90
+ const providerId = typeof rawCall.id === "string" && rawCall.id.trim().length > 0 ? rawCall.id : undefined;
91
+ const toolCallId = providerId === undefined
92
+ ? `${options.roundId}:tool:${toolCallCount + 1}`
93
+ : `${options.roundId}:provider:${providerId}`;
94
+ if (callIds.has(toolCallId))
95
+ throw new Error(`Ollama reused tool call id '${toolCallId}'.`);
96
+ callIds.add(toolCallId);
97
+ toolCallCount += 1;
98
+ events.push(Object.freeze({
99
+ type: "tool_call",
100
+ call: Object.freeze({ arguments: Object.freeze({ ...argumentsValue }), name, toolCallId }),
101
+ }));
102
+ }
103
+ if (rawChunk.done !== undefined && typeof rawChunk.done !== "boolean") {
104
+ throw new Error(`Ollama chunk ${chunkIndex + 1} done must be a boolean.`);
105
+ }
106
+ if (rawChunk.done !== true)
107
+ return Object.freeze(events);
108
+ terminalSeen = true;
109
+ const inputTokens = nonNegativeInteger(rawChunk.prompt_eval_count);
110
+ const outputTokens = nonNegativeInteger(rawChunk.eval_count);
111
+ const usage = Object.freeze({
112
+ ...(inputTokens === undefined ? {} : { inputTokens }),
113
+ ...(outputTokens === undefined ? {} : { outputTokens }),
114
+ ...(inputTokens === undefined || outputTokens === undefined ? {} : { totalTokens: inputTokens + outputTokens }),
115
+ });
116
+ if (Object.keys(usage).length > 0)
117
+ events.push(Object.freeze({ type: "usage", usage }));
118
+ if (content.trim().length === 0 && toolCallCount === 0) {
119
+ const diagnostics = [
120
+ `done_reason=${JSON.stringify(typeof rawChunk.done_reason === "string" ? rawChunk.done_reason.slice(0, 64) : "unknown")}`,
121
+ `eval_count=${outputTokens ?? "unknown"}`,
122
+ `requested_max_output_tokens=${options.requestedMaxOutputTokens ?? "unknown"}`,
123
+ `thinking_characters=${thinking.length}`,
124
+ ];
125
+ const exhaustedOutputBudget = outputTokens !== undefined
126
+ && options.requestedMaxOutputTokens !== undefined
127
+ && outputTokens >= options.requestedMaxOutputTokens;
128
+ events.push(malformed([
129
+ "Ollama completed the chat stream with empty content and no tool_calls; thinking alone is not a user-visible result.",
130
+ `Terminal diagnostics: ${diagnostics.join(", ")}.`,
131
+ ...(exhaustedOutputBudget ? ["The requested output-token budget was exhausted before any visible content or tool call was produced."] : []),
132
+ ].join(" "), true, thinking.trim().length > 0 ? "without_thinking" : "same_request"));
133
+ failed = true;
134
+ return Object.freeze(events);
135
+ }
136
+ const doneReason = typeof rawChunk.done_reason === "string" ? rawChunk.done_reason : "";
137
+ events.push(Object.freeze({
138
+ type: "done",
139
+ content,
140
+ thinking,
141
+ identity,
142
+ stopReason: toolCallCount > 0 ? "tool_calls" : doneReason === "length" ? "length" : doneReason === "stop" ? "completed" : "unknown",
143
+ ...(Object.keys(usage).length === 0 ? {} : { usage }),
144
+ }));
145
+ }
146
+ catch (error) {
147
+ failed = true;
148
+ events.push(malformed(error instanceof Error ? error.message : String(error)));
149
+ }
150
+ return Object.freeze(events);
151
+ };
152
+ return {
153
+ initial: Object.freeze(initial),
154
+ push,
155
+ get failed() { return failed; },
156
+ finish() {
157
+ if (failed || terminalSeen)
158
+ return [];
159
+ failed = true;
160
+ return [malformed("Ollama chat stream ended without a done=true chunk.", true)];
161
+ },
162
+ };
163
+ }
164
+ /** Pure replay helper; live adapters push each chunk without buffering the response. */
165
+ export function normalizeOllamaChatChunks(chunks, options) {
166
+ const normalizer = createOllamaChatNormalizer(options);
167
+ const events = [...normalizer.initial];
168
+ for (const chunk of chunks) {
169
+ events.push(...normalizer.push(chunk));
170
+ if (normalizer.failed)
171
+ break;
172
+ }
173
+ events.push(...normalizer.finish());
174
+ return Object.freeze(events);
175
+ }
176
+ //# sourceMappingURL=ollama-chat-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-chat-stream.js","sourceRoot":"","sources":["../../../../src/adapters/node/provider/ollama-chat-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import { type CodingModelAdapter, type CodingRoundEvent, type CodingRoundRequest, type ModelIdentity, type PortErrorCode, type RunExecutionContext } from "../../../ports/index.js";
2
+ export type FetchLike = (input: string | URL, init?: RequestInit) => Promise<Response>;
3
+ export interface OllamaCodingModelOptions {
4
+ readonly apiKey?: string;
5
+ readonly baseUrl: string;
6
+ readonly fetch?: FetchLike;
7
+ readonly model: string;
8
+ readonly requestTimeoutMs?: number;
9
+ /** Provider-owned control; named effort levels are only supported by some Ollama models. */
10
+ readonly thinking?: boolean | "low" | "medium" | "high";
11
+ }
12
+ export interface OllamaModelDiagnostics {
13
+ readonly chatRequests: number;
14
+ readonly normalizedEvents: number;
15
+ readonly responseBytes: number;
16
+ readonly responseChunks: number;
17
+ }
18
+ export declare class OllamaCodingModel implements CodingModelAdapter {
19
+ private readonly options;
20
+ readonly identity: ModelIdentity;
21
+ private readonly fetchImpl;
22
+ private readonly requestTimeoutMs;
23
+ private capabilityCache;
24
+ private chatRequests;
25
+ private normalizedEvents;
26
+ private responseBytes;
27
+ private responseChunks;
28
+ private readonly correlationScope;
29
+ constructor(options: OllamaCodingModelOptions);
30
+ get diagnostics(): OllamaModelDiagnostics;
31
+ private headers;
32
+ private request;
33
+ capabilities(context: RunExecutionContext): Promise<Readonly<{
34
+ error: Readonly<{
35
+ code: PortErrorCode;
36
+ details?: unknown;
37
+ message: string;
38
+ retryable: boolean;
39
+ suggestedAction?: string;
40
+ }>;
41
+ ok: false;
42
+ }> | Readonly<{
43
+ data: Readonly<{
44
+ contextWindow?: number;
45
+ evidence: readonly import("../../../ports/capability-port.js").CapabilityEvidence[];
46
+ identity: ModelIdentity;
47
+ input: Readonly<{
48
+ audio: import("../../../ports/capability-port.js").CapabilityState;
49
+ image: import("../../../ports/capability-port.js").CapabilityState;
50
+ text: import("../../../ports/capability-port.js").CapabilityState;
51
+ video: import("../../../ports/capability-port.js").CapabilityState;
52
+ }>;
53
+ maxImages?: number;
54
+ maxOutputTokens?: number;
55
+ output: Readonly<{
56
+ image: import("../../../ports/capability-port.js").CapabilityState;
57
+ text: import("../../../ports/capability-port.js").CapabilityState;
58
+ }>;
59
+ parallelToolCalling: import("../../../ports/capability-port.js").CapabilityState;
60
+ preserveThinking: import("../../../ports/capability-port.js").CapabilityState;
61
+ streaming: import("../../../ports/capability-port.js").CapabilityState;
62
+ structuredOutput: import("../../../ports/capability-port.js").CapabilityState;
63
+ supportedImageMimeTypes?: readonly string[];
64
+ thinking: import("../../../ports/capability-port.js").ThinkingCapability;
65
+ tokenCounting: import("../../../ports/capability-port.js").CapabilityState;
66
+ toolCalling: import("../../../ports/capability-port.js").CapabilityState;
67
+ }>;
68
+ ok: true;
69
+ }>>;
70
+ countTokens(input: Parameters<CodingModelAdapter["countTokens"]>[0], context: RunExecutionContext): Promise<Readonly<{
71
+ error: Readonly<{
72
+ code: PortErrorCode;
73
+ details?: unknown;
74
+ message: string;
75
+ retryable: boolean;
76
+ suggestedAction?: string;
77
+ }>;
78
+ ok: false;
79
+ }> | Readonly<{
80
+ data: Readonly<{
81
+ exact: boolean;
82
+ source: "provider" | "tokenizer" | "estimate";
83
+ tokens: number;
84
+ }>;
85
+ ok: true;
86
+ }>>;
87
+ streamRound(request: CodingRoundRequest, context: RunExecutionContext): AsyncIterable<CodingRoundEvent>;
88
+ }
89
+ //# sourceMappingURL=ollama-coding-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-coding-model.d.ts","sourceRoot":"","sources":["../../../../src/adapters/node/provider/ollama-coding-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAGvB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AAMjC,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAiBvF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACzD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AA+KD,qBAAa,iBAAkB,YAAW,kBAAkB;IAa9C,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZpC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;gBAEpB,OAAO,EAAE,wBAAwB;IAc9D,IAAI,WAAW,IAAI,sBAAsB,CAOxC;IAED,OAAO,CAAC,OAAO;YAOD,OAAO;IAiDf,YAAY,CAAC,OAAO,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyEzC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB;;;;;;;;;;;;;;;;;IAMhG,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,mBAAmB,GAAG,aAAa,CAAC,gBAAgB,CAAC;CAgG/G"}