@mohanscodex/spectra-code 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +275 -0
- package/dist/package.json +62 -0
- package/dist/src/agents/definitions.d.ts +16 -0
- package/dist/src/agents/definitions.d.ts.map +1 -0
- package/dist/src/agents/definitions.js +148 -0
- package/dist/src/agents/definitions.js.map +1 -0
- package/dist/src/agents/registry.d.ts +11 -0
- package/dist/src/agents/registry.d.ts.map +1 -0
- package/dist/src/agents/registry.js +13 -0
- package/dist/src/agents/registry.js.map +1 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +436 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/agent.d.ts +3 -0
- package/dist/src/commands/agent.d.ts.map +1 -0
- package/dist/src/commands/agent.js +28 -0
- package/dist/src/commands/agent.js.map +1 -0
- package/dist/src/commands/db.d.ts +3 -0
- package/dist/src/commands/db.d.ts.map +1 -0
- package/dist/src/commands/db.js +47 -0
- package/dist/src/commands/db.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +12 -0
- package/dist/src/commands/doctor.d.ts.map +1 -0
- package/dist/src/commands/doctor.js +59 -0
- package/dist/src/commands/doctor.js.map +1 -0
- package/dist/src/commands/mcp.d.ts +9 -0
- package/dist/src/commands/mcp.d.ts.map +1 -0
- package/dist/src/commands/mcp.js +208 -0
- package/dist/src/commands/mcp.js.map +1 -0
- package/dist/src/commands/plugin.d.ts +3 -0
- package/dist/src/commands/plugin.d.ts.map +1 -0
- package/dist/src/commands/plugin.js +36 -0
- package/dist/src/commands/plugin.js.map +1 -0
- package/dist/src/commands/session.d.ts +3 -0
- package/dist/src/commands/session.d.ts.map +1 -0
- package/dist/src/commands/session.js +49 -0
- package/dist/src/commands/session.js.map +1 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +17 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/integrations/acp/index.d.ts +2 -0
- package/dist/src/integrations/acp/index.d.ts.map +1 -0
- package/dist/src/integrations/acp/index.js +2 -0
- package/dist/src/integrations/acp/index.js.map +1 -0
- package/dist/src/integrations/acp/server.d.ts +11 -0
- package/dist/src/integrations/acp/server.d.ts.map +1 -0
- package/dist/src/integrations/acp/server.js +220 -0
- package/dist/src/integrations/acp/server.js.map +1 -0
- package/dist/src/integrations/custom-tools/index.d.ts +3 -0
- package/dist/src/integrations/custom-tools/index.d.ts.map +1 -0
- package/dist/src/integrations/custom-tools/index.js +2 -0
- package/dist/src/integrations/custom-tools/index.js.map +1 -0
- package/dist/src/integrations/custom-tools/loader.d.ts +16 -0
- package/dist/src/integrations/custom-tools/loader.d.ts.map +1 -0
- package/dist/src/integrations/custom-tools/loader.js +95 -0
- package/dist/src/integrations/custom-tools/loader.js.map +1 -0
- package/dist/src/integrations/mcp/client.d.ts +32 -0
- package/dist/src/integrations/mcp/client.d.ts.map +1 -0
- package/dist/src/integrations/mcp/client.js +117 -0
- package/dist/src/integrations/mcp/client.js.map +1 -0
- package/dist/src/integrations/mcp/index.d.ts +3 -0
- package/dist/src/integrations/mcp/index.d.ts.map +1 -0
- package/dist/src/integrations/mcp/index.js +2 -0
- package/dist/src/integrations/mcp/index.js.map +1 -0
- package/dist/src/security/doom-loop.d.ts +22 -0
- package/dist/src/security/doom-loop.d.ts.map +1 -0
- package/dist/src/security/doom-loop.js +72 -0
- package/dist/src/security/doom-loop.js.map +1 -0
- package/dist/src/security/index.d.ts +46 -0
- package/dist/src/security/index.d.ts.map +1 -0
- package/dist/src/security/index.js +362 -0
- package/dist/src/security/index.js.map +1 -0
- package/dist/src/security/path-safety.d.ts +15 -0
- package/dist/src/security/path-safety.d.ts.map +1 -0
- package/dist/src/security/path-safety.js +57 -0
- package/dist/src/security/path-safety.js.map +1 -0
- package/dist/src/security/permissions.d.ts +7 -0
- package/dist/src/security/permissions.d.ts.map +1 -0
- package/dist/src/security/permissions.js +41 -0
- package/dist/src/security/permissions.js.map +1 -0
- package/dist/src/security/read-tracker.d.ts +20 -0
- package/dist/src/security/read-tracker.d.ts.map +1 -0
- package/dist/src/security/read-tracker.js +73 -0
- package/dist/src/security/read-tracker.js.map +1 -0
- package/dist/src/security/ssrf-guard.d.ts +19 -0
- package/dist/src/security/ssrf-guard.d.ts.map +1 -0
- package/dist/src/security/ssrf-guard.js +98 -0
- package/dist/src/security/ssrf-guard.js.map +1 -0
- package/dist/src/security/types.d.ts +70 -0
- package/dist/src/security/types.d.ts.map +1 -0
- package/dist/src/security/types.js +2 -0
- package/dist/src/security/types.js.map +1 -0
- package/dist/src/security/wildcard.d.ts +5 -0
- package/dist/src/security/wildcard.d.ts.map +1 -0
- package/dist/src/security/wildcard.js +50 -0
- package/dist/src/security/wildcard.js.map +1 -0
- package/dist/src/services/auth-store.d.ts +25 -0
- package/dist/src/services/auth-store.d.ts.map +1 -0
- package/dist/src/services/auth-store.js +40 -0
- package/dist/src/services/auth-store.js.map +1 -0
- package/dist/src/services/config.d.ts +66 -0
- package/dist/src/services/config.d.ts.map +1 -0
- package/dist/src/services/config.js +83 -0
- package/dist/src/services/config.js.map +1 -0
- package/dist/src/services/context.d.ts +7 -0
- package/dist/src/services/context.d.ts.map +1 -0
- package/dist/src/services/context.js +23 -0
- package/dist/src/services/context.js.map +1 -0
- package/dist/src/services/custom-providers.d.ts +5 -0
- package/dist/src/services/custom-providers.d.ts.map +1 -0
- package/dist/src/services/custom-providers.js +213 -0
- package/dist/src/services/custom-providers.js.map +1 -0
- package/dist/src/services/session-store.d.ts +76 -0
- package/dist/src/services/session-store.d.ts.map +1 -0
- package/dist/src/services/session-store.js +199 -0
- package/dist/src/services/session-store.js.map +1 -0
- package/dist/src/services/snapshot-manager.d.ts +46 -0
- package/dist/src/services/snapshot-manager.d.ts.map +1 -0
- package/dist/src/services/snapshot-manager.js +183 -0
- package/dist/src/services/snapshot-manager.js.map +1 -0
- package/dist/src/tools/edit.d.ts +3 -0
- package/dist/src/tools/edit.d.ts.map +1 -0
- package/dist/src/tools/edit.js +57 -0
- package/dist/src/tools/edit.js.map +1 -0
- package/dist/src/tools/glob.d.ts +3 -0
- package/dist/src/tools/glob.d.ts.map +1 -0
- package/dist/src/tools/glob.js +46 -0
- package/dist/src/tools/glob.js.map +1 -0
- package/dist/src/tools/grep.d.ts +3 -0
- package/dist/src/tools/grep.d.ts.map +1 -0
- package/dist/src/tools/grep.js +50 -0
- package/dist/src/tools/grep.js.map +1 -0
- package/dist/src/tools/index.d.ts +26 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +202 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/mcp-tool.d.ts +5 -0
- package/dist/src/tools/mcp-tool.d.ts.map +1 -0
- package/dist/src/tools/mcp-tool.js +82 -0
- package/dist/src/tools/mcp-tool.js.map +1 -0
- package/dist/src/tools/read.d.ts +3 -0
- package/dist/src/tools/read.d.ts.map +1 -0
- package/dist/src/tools/read.js +48 -0
- package/dist/src/tools/read.js.map +1 -0
- package/dist/src/tools/shell.d.ts +3 -0
- package/dist/src/tools/shell.d.ts.map +1 -0
- package/dist/src/tools/shell.js +266 -0
- package/dist/src/tools/shell.js.map +1 -0
- package/dist/src/tools/task.d.ts +3 -0
- package/dist/src/tools/task.d.ts.map +1 -0
- package/dist/src/tools/task.js +75 -0
- package/dist/src/tools/task.js.map +1 -0
- package/dist/src/tools/types.d.ts +18 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +2 -0
- package/dist/src/tools/types.js.map +1 -0
- package/dist/src/tools/utils.d.ts +4 -0
- package/dist/src/tools/utils.d.ts.map +1 -0
- package/dist/src/tools/utils.js +10 -0
- package/dist/src/tools/utils.js.map +1 -0
- package/dist/src/tools/web-fetch.d.ts +3 -0
- package/dist/src/tools/web-fetch.d.ts.map +1 -0
- package/dist/src/tools/web-fetch.js +81 -0
- package/dist/src/tools/web-fetch.js.map +1 -0
- package/dist/src/tools/write.d.ts +3 -0
- package/dist/src/tools/write.d.ts.map +1 -0
- package/dist/src/tools/write.js +28 -0
- package/dist/src/tools/write.js.map +1 -0
- package/dist/src/tui/app-constants.d.ts +3 -0
- package/dist/src/tui/app-constants.d.ts.map +1 -0
- package/dist/src/tui/app-constants.js +4 -0
- package/dist/src/tui/app-constants.js.map +1 -0
- package/dist/src/tui/app.d.ts +5 -0
- package/dist/src/tui/app.d.ts.map +1 -0
- package/dist/src/tui/app.js +322 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/commands.d.ts +61 -0
- package/dist/src/tui/commands.d.ts.map +1 -0
- package/dist/src/tui/commands.js +95 -0
- package/dist/src/tui/commands.js.map +1 -0
- package/dist/src/tui/components/chat-area.d.ts +9 -0
- package/dist/src/tui/components/chat-area.d.ts.map +1 -0
- package/dist/src/tui/components/chat-area.js +12 -0
- package/dist/src/tui/components/chat-area.js.map +1 -0
- package/dist/src/tui/components/command-palette.d.ts +18 -0
- package/dist/src/tui/components/command-palette.d.ts.map +1 -0
- package/dist/src/tui/components/command-palette.js +50 -0
- package/dist/src/tui/components/command-palette.js.map +1 -0
- package/dist/src/tui/components/message.d.ts +9 -0
- package/dist/src/tui/components/message.d.ts.map +1 -0
- package/dist/src/tui/components/message.js +116 -0
- package/dist/src/tui/components/message.js.map +1 -0
- package/dist/src/tui/components/slash-autocomplete.d.ts +14 -0
- package/dist/src/tui/components/slash-autocomplete.d.ts.map +1 -0
- package/dist/src/tui/components/slash-autocomplete.js +29 -0
- package/dist/src/tui/components/slash-autocomplete.js.map +1 -0
- package/dist/src/tui/components/toast.d.ts +8 -0
- package/dist/src/tui/components/toast.d.ts.map +1 -0
- package/dist/src/tui/components/toast.js +29 -0
- package/dist/src/tui/components/toast.js.map +1 -0
- package/dist/src/tui/hooks/use-agent.d.ts +20 -0
- package/dist/src/tui/hooks/use-agent.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-agent.js +129 -0
- package/dist/src/tui/hooks/use-agent.js.map +1 -0
- package/dist/src/tui/hooks/use-app-keyboard.d.ts +53 -0
- package/dist/src/tui/hooks/use-app-keyboard.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-app-keyboard.js +155 -0
- package/dist/src/tui/hooks/use-app-keyboard.js.map +1 -0
- package/dist/src/tui/hooks/use-chat-submit.d.ts +61 -0
- package/dist/src/tui/hooks/use-chat-submit.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-chat-submit.js +269 -0
- package/dist/src/tui/hooks/use-chat-submit.js.map +1 -0
- package/dist/src/tui/hooks/use-permission-queue.d.ts +10 -0
- package/dist/src/tui/hooks/use-permission-queue.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-permission-queue.js +26 -0
- package/dist/src/tui/hooks/use-permission-queue.js.map +1 -0
- package/dist/src/tui/hooks/use-revert.d.ts +26 -0
- package/dist/src/tui/hooks/use-revert.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-revert.js +88 -0
- package/dist/src/tui/hooks/use-revert.js.map +1 -0
- package/dist/src/tui/index.d.ts +5 -0
- package/dist/src/tui/index.d.ts.map +1 -0
- package/dist/src/tui/index.js +38 -0
- package/dist/src/tui/index.js.map +1 -0
- package/dist/src/tui/prompt-bar.d.ts +29 -0
- package/dist/src/tui/prompt-bar.d.ts.map +1 -0
- package/dist/src/tui/prompt-bar.js +41 -0
- package/dist/src/tui/prompt-bar.js.map +1 -0
- package/dist/src/tui/slash-commands.d.ts +20 -0
- package/dist/src/tui/slash-commands.d.ts.map +1 -0
- package/dist/src/tui/slash-commands.js +30 -0
- package/dist/src/tui/slash-commands.js.map +1 -0
- package/dist/src/tui/theme.d.ts +29 -0
- package/dist/src/tui/theme.d.ts.map +1 -0
- package/dist/src/tui/theme.js +54 -0
- package/dist/src/tui/theme.js.map +1 -0
- package/dist/src/tui/tips.d.ts +2 -0
- package/dist/src/tui/tips.d.ts.map +1 -0
- package/dist/src/tui/tips.js +40 -0
- package/dist/src/tui/tips.js.map +1 -0
- package/dist/src/tui/types.d.ts +34 -0
- package/dist/src/tui/types.d.ts.map +1 -0
- package/dist/src/tui/types.js +2 -0
- package/dist/src/tui/types.js.map +1 -0
- package/dist/src/tui/ui/about-dialog.d.ts +8 -0
- package/dist/src/tui/ui/about-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/about-dialog.js +21 -0
- package/dist/src/tui/ui/about-dialog.js.map +1 -0
- package/dist/src/tui/ui/agent-switcher.d.ts +10 -0
- package/dist/src/tui/ui/agent-switcher.d.ts.map +1 -0
- package/dist/src/tui/ui/agent-switcher.js +77 -0
- package/dist/src/tui/ui/agent-switcher.js.map +1 -0
- package/dist/src/tui/ui/debug-dialog.d.ts +15 -0
- package/dist/src/tui/ui/debug-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/debug-dialog.js +74 -0
- package/dist/src/tui/ui/debug-dialog.js.map +1 -0
- package/dist/src/tui/ui/doctor-dialog.d.ts +9 -0
- package/dist/src/tui/ui/doctor-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/doctor-dialog.js +45 -0
- package/dist/src/tui/ui/doctor-dialog.js.map +1 -0
- package/dist/src/tui/ui/manage-providers-dialog.d.ts +10 -0
- package/dist/src/tui/ui/manage-providers-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/manage-providers-dialog.js +257 -0
- package/dist/src/tui/ui/manage-providers-dialog.js.map +1 -0
- package/dist/src/tui/ui/mcp-toggle-dialog.d.ts +8 -0
- package/dist/src/tui/ui/mcp-toggle-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/mcp-toggle-dialog.js +89 -0
- package/dist/src/tui/ui/mcp-toggle-dialog.js.map +1 -0
- package/dist/src/tui/ui/message-controls.d.ts +16 -0
- package/dist/src/tui/ui/message-controls.d.ts.map +1 -0
- package/dist/src/tui/ui/message-controls.js +102 -0
- package/dist/src/tui/ui/message-controls.js.map +1 -0
- package/dist/src/tui/ui/model-switcher.d.ts +10 -0
- package/dist/src/tui/ui/model-switcher.d.ts.map +1 -0
- package/dist/src/tui/ui/model-switcher.js +139 -0
- package/dist/src/tui/ui/model-switcher.js.map +1 -0
- package/dist/src/tui/ui/permission-dialog.d.ts +12 -0
- package/dist/src/tui/ui/permission-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/permission-dialog.js +37 -0
- package/dist/src/tui/ui/permission-dialog.js.map +1 -0
- package/dist/src/tui/ui/provider-dialog.d.ts +11 -0
- package/dist/src/tui/ui/provider-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/provider-dialog.js +232 -0
- package/dist/src/tui/ui/provider-dialog.js.map +1 -0
- package/dist/src/tui/ui/session-list.d.ts +23 -0
- package/dist/src/tui/ui/session-list.d.ts.map +1 -0
- package/dist/src/tui/ui/session-list.js +147 -0
- package/dist/src/tui/ui/session-list.js.map +1 -0
- package/dist/src/tui/ui/thinking-effort-dialog.d.ts +11 -0
- package/dist/src/tui/ui/thinking-effort-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/thinking-effort-dialog.js +79 -0
- package/dist/src/tui/ui/thinking-effort-dialog.js.map +1 -0
- package/dist/src/tui/utils/model-config.d.ts +9 -0
- package/dist/src/tui/utils/model-config.d.ts.map +1 -0
- package/dist/src/tui/utils/model-config.js +63 -0
- package/dist/src/tui/utils/model-config.js.map +1 -0
- package/dist/src/tui/utils/session-messages.d.ts +22 -0
- package/dist/src/tui/utils/session-messages.d.ts.map +1 -0
- package/dist/src/tui/utils/session-messages.js +62 -0
- package/dist/src/tui/utils/session-messages.js.map +1 -0
- package/dist/src/tui/utils.d.ts +6 -0
- package/dist/src/tui/utils.d.ts.map +1 -0
- package/dist/src/tui/utils.js +23 -0
- package/dist/src/tui/utils.js.map +1 -0
- package/dist/src/tui/variant-cycle.d.ts +10 -0
- package/dist/src/tui/variant-cycle.d.ts.map +1 -0
- package/dist/src/tui/variant-cycle.js +64 -0
- package/dist/src/tui/variant-cycle.js.map +1 -0
- package/dist/src/utils/paths.d.ts +10 -0
- package/dist/src/utils/paths.d.ts.map +1 -0
- package/dist/src/utils/paths.js +106 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/platform.d.ts +10 -0
- package/dist/src/utils/platform.d.ts.map +1 -0
- package/dist/src/utils/platform.js +133 -0
- package/dist/src/utils/platform.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { errorResult, textResult } from "./utils.js";
|
|
3
|
+
export const webFetchTool = {
|
|
4
|
+
name: "web_fetch",
|
|
5
|
+
capabilities: { reads: false, writes: false },
|
|
6
|
+
description: `Fetch content from a URL and return it as markdown text.
|
|
7
|
+
Useful for reading documentation, API responses, or any web content.
|
|
8
|
+
Handles HTML to markdown conversion, PDF text extraction, and image descriptions.`,
|
|
9
|
+
displayName: (args) => new URL(args.url).hostname,
|
|
10
|
+
parameters: z.object({
|
|
11
|
+
url: z.string().describe("The URL to fetch content from"),
|
|
12
|
+
maxLength: z.number().optional().describe("Maximum characters to return"),
|
|
13
|
+
}),
|
|
14
|
+
execute: async ({ url, maxLength }) => {
|
|
15
|
+
try {
|
|
16
|
+
new URL(url);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return errorResult(`Invalid URL: ${url}`);
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const response = await fetch(url, {
|
|
23
|
+
headers: { "User-Agent": "Spectra-Code/1.0" },
|
|
24
|
+
signal: AbortSignal.timeout(15000),
|
|
25
|
+
});
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
return errorResult(`HTTP ${response.status}: ${response.statusText}`);
|
|
28
|
+
}
|
|
29
|
+
const contentType = response.headers.get("content-type") || "";
|
|
30
|
+
let content;
|
|
31
|
+
if (contentType.includes("text/html")) {
|
|
32
|
+
const html = await response.text();
|
|
33
|
+
content = htmlToMarkdown(html);
|
|
34
|
+
}
|
|
35
|
+
else if (contentType.includes("application/json")) {
|
|
36
|
+
const json = await response.json();
|
|
37
|
+
content = JSON.stringify(json, null, 2);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
content = await response.text();
|
|
41
|
+
}
|
|
42
|
+
const limit = maxLength || 10000;
|
|
43
|
+
if (content.length > limit) {
|
|
44
|
+
content = content.slice(0, limit) + "\n...(truncated)";
|
|
45
|
+
}
|
|
46
|
+
return textResult(content);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
const error = err;
|
|
50
|
+
if (error.name === "TimeoutError") {
|
|
51
|
+
return errorResult("Request timed out after 15 seconds.");
|
|
52
|
+
}
|
|
53
|
+
return errorResult(`Failed to fetch URL: ${error.message || "unknown error"}`);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
function htmlToMarkdown(html) {
|
|
58
|
+
let text = html
|
|
59
|
+
.replace(/<script[^>]*>[\s\S]*?<\/script>/gi, "")
|
|
60
|
+
.replace(/<style[^>]*>[\s\S]*?<\/style>/gi, "")
|
|
61
|
+
.replace(/<nav[^>]*>[\s\S]*?<\/nav>/gi, "")
|
|
62
|
+
.replace(/<footer[^>]*>[\s\S]*?<\/footer>/gi, "")
|
|
63
|
+
.replace(/<h1[^>]*>(.*?)<\/h1>/gi, "# $1\n")
|
|
64
|
+
.replace(/<h2[^>]*>(.*?)<\/h2>/gi, "## $1\n")
|
|
65
|
+
.replace(/<h3[^>]*>(.*?)<\/h3>/gi, "### $1\n")
|
|
66
|
+
.replace(/<h4[^>]*>(.*?)<\/h4>/gi, "#### $1\n")
|
|
67
|
+
.replace(/<li[^>]*>(.*?)<\/li>/gi, "- $1\n")
|
|
68
|
+
.replace(/<br\s*\/?>/gi, "\n")
|
|
69
|
+
.replace(/<\/p>/gi, "\n\n")
|
|
70
|
+
.replace(/<[^>]+>/g, "")
|
|
71
|
+
.replace(/&/g, "&")
|
|
72
|
+
.replace(/</g, "<")
|
|
73
|
+
.replace(/>/g, ">")
|
|
74
|
+
.replace(/"/g, "\"")
|
|
75
|
+
.replace(/'/g, "'")
|
|
76
|
+
.replace(/ /g, " ")
|
|
77
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
78
|
+
.trim();
|
|
79
|
+
return text;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=web-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../../src/tools/web-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../../src/tools/write.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,eAAO,MAAM,SAAS,EAAE,WAsBvB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { textResult } from "./utils.js";
|
|
3
|
+
import { writeFileSync, existsSync, mkdirSync } from "fs";
|
|
4
|
+
import { resolve, dirname, relative } from "path";
|
|
5
|
+
export const writeTool = {
|
|
6
|
+
name: "write",
|
|
7
|
+
capabilities: { reads: false, writes: true },
|
|
8
|
+
description: `Write content to a file, creating it if it doesn't exist.
|
|
9
|
+
If the file exists, it will be overwritten.
|
|
10
|
+
For small changes to existing files, prefer the edit tool.
|
|
11
|
+
Creates parent directories automatically if they don't exist.`,
|
|
12
|
+
displayName: (args) => relative(process.cwd(), resolve(args.path)),
|
|
13
|
+
parameters: z.object({
|
|
14
|
+
path: z.string().describe("Absolute or relative path to the file to write"),
|
|
15
|
+
content: z.string().describe("The full content to write to the file"),
|
|
16
|
+
}),
|
|
17
|
+
execute: async ({ path, content }) => {
|
|
18
|
+
const resolved = resolve(process.cwd(), path);
|
|
19
|
+
const parentDir = dirname(resolved);
|
|
20
|
+
if (!existsSync(parentDir)) {
|
|
21
|
+
mkdirSync(parentDir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
const existed = existsSync(resolved);
|
|
24
|
+
writeFileSync(resolved, content, "utf-8");
|
|
25
|
+
return textResult(`${existed ? "Updated" : "Created"} ${relative(process.cwd(), resolved)}`);
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAe,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAElD,MAAM,CAAC,MAAM,SAAS,GAAgB;IACpC,IAAI,EAAE,OAAO;IACb,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAC5C,WAAW,EAAE;;;8DAG+C;IAC5D,WAAW,EAAE,CAAC,IAAsB,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QAC3E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KACtE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-constants.d.ts","sourceRoot":"","sources":["../../../src/tui/app-constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,UAAiB,CAAA;AACpC,eAAO,MAAM,YAAY,UAAgL,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { PRIMARY_AGENTS } from "../agents/definitions.js";
|
|
2
|
+
export const AGENTS = PRIMARY_AGENTS;
|
|
3
|
+
export const PLACEHOLDERS = ["fix the login bug", "explain this codebase", "add error handling", "refactor this function", "write tests", "debug this issue", "optimize performance", "document the API"];
|
|
4
|
+
//# sourceMappingURL=app-constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-constants.js","sourceRoot":"","sources":["../../../src/tui/app-constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD,MAAM,CAAC,MAAM,MAAM,GAAG,cAAc,CAAA;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/tui/app.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AA2ChD,wBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,WAAW,CAAA;CAAE,6BA4f1D"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useRef, useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { useTerminalDimensions } from "@opentui/react";
|
|
4
|
+
import { execSync } from "child_process";
|
|
5
|
+
import { c, SPINNER } from "./theme.js";
|
|
6
|
+
import { ChatArea } from "./components/chat-area.js";
|
|
7
|
+
import { CommandPalette } from "./components/command-palette.js";
|
|
8
|
+
import { PromptBar } from "./prompt-bar.js";
|
|
9
|
+
import { Tips } from "./tips.js";
|
|
10
|
+
import { titlecase } from "./utils.js";
|
|
11
|
+
import { SessionStore } from "../services/session-store.js";
|
|
12
|
+
import { SnapshotManager } from "../services/snapshot-manager.js";
|
|
13
|
+
import { ProviderDialog } from "./ui/provider-dialog.js";
|
|
14
|
+
import { SessionList } from "./ui/session-list.js";
|
|
15
|
+
import { ModelSwitcher } from "./ui/model-switcher.js";
|
|
16
|
+
import { ManageProvidersDialog } from "./ui/manage-providers-dialog.js";
|
|
17
|
+
import { DoctorDialog } from "./ui/doctor-dialog.js";
|
|
18
|
+
import { AboutDialog } from "./ui/about-dialog.js";
|
|
19
|
+
import { AgentSwitcher } from "./ui/agent-switcher.js";
|
|
20
|
+
import { ThinkingEffortDialog } from "./ui/thinking-effort-dialog.js";
|
|
21
|
+
import { McpToggleDialog } from "./ui/mcp-toggle-dialog.js";
|
|
22
|
+
import { DebugDialog } from "./ui/debug-dialog.js";
|
|
23
|
+
import { MessageControls } from "./ui/message-controls.js";
|
|
24
|
+
import { ToastContainer, showToast } from "./components/toast.js";
|
|
25
|
+
import clipboard from "clipboardy";
|
|
26
|
+
import { buildCmdItems, collectSlashNames } from "./commands.js";
|
|
27
|
+
import { slashHead } from "./slash-commands.js";
|
|
28
|
+
import { SlashAutocomplete } from "./components/slash-autocomplete.js";
|
|
29
|
+
import { loadConfig } from "../services/config.js";
|
|
30
|
+
import { registerAllCustomProviders } from "../services/custom-providers.js";
|
|
31
|
+
import { PermissionDialog } from "./ui/permission-dialog.js";
|
|
32
|
+
import { PLACEHOLDERS } from "./app-constants.js";
|
|
33
|
+
import { loadSavedConfig, saveModelConfig, fmtCtx, lookupContextWindow } from "./utils/model-config.js";
|
|
34
|
+
import { sdkMessagesToChatMessages } from "./utils/session-messages.js";
|
|
35
|
+
import { usePermissionQueue } from "./hooks/use-permission-queue.js";
|
|
36
|
+
import { useRevert } from "./hooks/use-revert.js";
|
|
37
|
+
import { useAgent } from "./hooks/use-agent.js";
|
|
38
|
+
import { useChatSubmit } from "./hooks/use-chat-submit.js";
|
|
39
|
+
import { useAppKeyboard } from "./hooks/use-app-keyboard.js";
|
|
40
|
+
import { cycleEffort } from "./variant-cycle.js";
|
|
41
|
+
export function App({ renderer }) {
|
|
42
|
+
const { width: termWidth, height: termHeight } = useTerminalDimensions();
|
|
43
|
+
// --- State ---
|
|
44
|
+
const [savedConfig] = useState(loadSavedConfig);
|
|
45
|
+
const [customProviders, setCustomProviders] = useState(() => {
|
|
46
|
+
const cfg = loadConfig();
|
|
47
|
+
const cp = cfg.providers || {};
|
|
48
|
+
registerAllCustomProviders(cp);
|
|
49
|
+
return cp;
|
|
50
|
+
});
|
|
51
|
+
const [selectedModel, setSelectedModel] = useState(savedConfig.model);
|
|
52
|
+
const [selectedProvider, setSelectedProvider] = useState(savedConfig.provider);
|
|
53
|
+
const [thinkingEffort, setThinkingEffort] = useState(undefined);
|
|
54
|
+
const [route, setRoute] = useState("home");
|
|
55
|
+
const [messages, setMessages] = useState([]);
|
|
56
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
57
|
+
const [status, setStatus] = useState("Ready");
|
|
58
|
+
const [spinnerFrame, setSpinnerFrame] = useState(0);
|
|
59
|
+
const [showCmd, setShowCmd] = useState(false);
|
|
60
|
+
const [cmdFilter, setCmdFilter] = useState("");
|
|
61
|
+
const [cmdSelected, setCmdSelected] = useState(0);
|
|
62
|
+
const [elapsedMs, setElapsedMs] = useState(null);
|
|
63
|
+
const [tokPerSec, setTokPerSec] = useState(null);
|
|
64
|
+
const [tokenUsage, setTokenUsage] = useState({ input: 0, output: 0 });
|
|
65
|
+
const [showThinking, setShowThinking] = useState(true);
|
|
66
|
+
const [showToolCalls, setShowToolCalls] = useState(true);
|
|
67
|
+
const [copiedMsg, setCopiedMsg] = useState(false);
|
|
68
|
+
const [selectedAgent, setSelectedAgent] = useState("build");
|
|
69
|
+
const [submitKey, setSubmitKey] = useState(0);
|
|
70
|
+
const [dialogStep, setDialogStep] = useState(null);
|
|
71
|
+
const [placeholderIdx, setPlaceholderIdx] = useState(0);
|
|
72
|
+
const [promptHistory, setPromptHistory] = useState([]);
|
|
73
|
+
const [historyIdx, setHistoryIdx] = useState(-1);
|
|
74
|
+
const [navKey, setNavKey] = useState(0);
|
|
75
|
+
const [homeKey, setHomeKey] = useState(0);
|
|
76
|
+
const [interruptKey, setInterruptKey] = useState(0);
|
|
77
|
+
const [msgControls, setMsgControls] = useState(null);
|
|
78
|
+
const [revertPoint, setRevertPoint] = useState(null);
|
|
79
|
+
const [draftText, setDraftText] = useState("");
|
|
80
|
+
const [slashSelected, setSlashSelected] = useState(0);
|
|
81
|
+
const [promptPosition, setPromptPosition] = useState({ top: 0, left: 0, width: 0 });
|
|
82
|
+
// --- Refs ---
|
|
83
|
+
const promptTextareaRef = useRef(null);
|
|
84
|
+
const sessionStore = useRef(new SessionStore());
|
|
85
|
+
const sessionId = useRef(null);
|
|
86
|
+
const dialogKeyHandler = useRef(null);
|
|
87
|
+
const isStreamingRef = useRef(false);
|
|
88
|
+
const currentTurnStartRef = useRef(null);
|
|
89
|
+
const currentTurnMsgIdRef = useRef(null);
|
|
90
|
+
const snapshotManager = useRef(new SnapshotManager({ workdir: process.cwd() }));
|
|
91
|
+
const [securityConfig] = useState(() => {
|
|
92
|
+
const cfg = loadConfig();
|
|
93
|
+
return { permission: cfg.permission, security: cfg.security };
|
|
94
|
+
});
|
|
95
|
+
// --- Derived ---
|
|
96
|
+
const provider = selectedProvider;
|
|
97
|
+
const hasModel = selectedModel !== null && selectedProvider !== null;
|
|
98
|
+
const mcpCount = 0;
|
|
99
|
+
const customProviderCount = Object.keys(customProviders).length;
|
|
100
|
+
const cwdLabel = useMemo(() => {
|
|
101
|
+
const home = process.env.HOME || process.env.USERPROFILE || "";
|
|
102
|
+
const dir = process.cwd().replace(home, "~");
|
|
103
|
+
try {
|
|
104
|
+
const branch = execSync("git rev-parse --abbrev-ref HEAD 2>/dev/null", { encoding: "utf-8", timeout: 2000 }).toString().trim();
|
|
105
|
+
if (branch)
|
|
106
|
+
return `${dir}:${branch}`;
|
|
107
|
+
}
|
|
108
|
+
catch { }
|
|
109
|
+
return dir;
|
|
110
|
+
}, []);
|
|
111
|
+
// --- Effects ---
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
const id = setInterval(() => setPlaceholderIdx((p) => (p + 1) % PLACEHOLDERS.length), 4000);
|
|
114
|
+
return () => clearInterval(id);
|
|
115
|
+
}, []);
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
if (!isLoading)
|
|
118
|
+
return;
|
|
119
|
+
const id = setInterval(() => setSpinnerFrame((f) => (f + 1) % SPINNER.length), 80);
|
|
120
|
+
renderer.requestLive();
|
|
121
|
+
return () => { clearInterval(id); renderer.dropLive(); };
|
|
122
|
+
}, [isLoading, renderer]);
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
const handler = (selection) => {
|
|
125
|
+
const text = selection.getSelectedText();
|
|
126
|
+
if (!text)
|
|
127
|
+
return;
|
|
128
|
+
setTimeout(() => {
|
|
129
|
+
try {
|
|
130
|
+
clipboard.writeSync(text);
|
|
131
|
+
setCopiedMsg(true);
|
|
132
|
+
setTimeout(() => setCopiedMsg(false), 2500);
|
|
133
|
+
}
|
|
134
|
+
catch { }
|
|
135
|
+
}, 2000);
|
|
136
|
+
};
|
|
137
|
+
renderer.on("selection", handler);
|
|
138
|
+
return () => { renderer.off?.("selection", handler); };
|
|
139
|
+
}, [renderer]);
|
|
140
|
+
// --- Stable callbacks ---
|
|
141
|
+
const addMessage = useCallback((msg) => setMessages((p) => [...p, msg]), []);
|
|
142
|
+
const updateMessage = useCallback((id, u) => setMessages((p) => p.map((m) => (m.id === id ? { ...m, ...u } : m))), []);
|
|
143
|
+
// --- Hooks (order matters for ref lifecycle) ---
|
|
144
|
+
const securityRef = useRef(null);
|
|
145
|
+
const { permissionRequest, enqueuePermission, resolvePermission } = usePermissionQueue(securityRef);
|
|
146
|
+
const { agentRef, loadedSessionMessages, getOrCreateAgent, resetAgentForModelSwitch, } = useAgent({ securityRef, securityConfig, enqueuePermission });
|
|
147
|
+
const { revertedMessagesRef, revertDraftRef, runRevert, runRedo, runRollbackFiles, discardRevert, } = useRevert({
|
|
148
|
+
sessionStore, sessionId, agentRef, loadedSessionMessages,
|
|
149
|
+
setMessages, setRevertPoint, setHistoryIdx, setNavKey, snapshotManager,
|
|
150
|
+
});
|
|
151
|
+
const handleCycleVariant = useCallback(() => {
|
|
152
|
+
if (!provider) {
|
|
153
|
+
showToast("No provider configured", "warn");
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const nextEffort = cycleEffort(provider, thinkingEffort);
|
|
157
|
+
if (!nextEffort) {
|
|
158
|
+
showToast("No variants available", "info");
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
setThinkingEffort(nextEffort);
|
|
162
|
+
agentRef.current = null;
|
|
163
|
+
showToast(nextEffort === "none" ? "Thinking: off" : `Thinking: ${nextEffort}`, "info");
|
|
164
|
+
}, [provider, thinkingEffort, agentRef]);
|
|
165
|
+
const cmdItems = useMemo(() => buildCmdItems({
|
|
166
|
+
renderer, sessionStore: sessionStore.current, sessionIdRef: sessionId,
|
|
167
|
+
hasModel, selectedModel, provider, mcpCount, customProviderCount, messagesLength: messages.length,
|
|
168
|
+
showThinking, showToolCalls,
|
|
169
|
+
setRoute, setMessages, setStatus, setElapsedMs, setTokPerSec, setTokenUsage, setShowThinking, setShowToolCalls, setHomeKey, setNavKey, setDialogStep,
|
|
170
|
+
onCycleVariant: handleCycleVariant,
|
|
171
|
+
currentEffort: thinkingEffort,
|
|
172
|
+
selectedAgent,
|
|
173
|
+
onSecurityReset: () => {
|
|
174
|
+
securityRef.current?.getReadTracker().reset();
|
|
175
|
+
securityRef.current?.getDoomLoop().reset();
|
|
176
|
+
},
|
|
177
|
+
}), [renderer, hasModel, selectedModel, provider, mcpCount, customProviderCount, messages.length, showThinking, showToolCalls, handleCycleVariant, thinkingEffort, selectedAgent, sessionStore, sessionId, setRoute, setMessages, setStatus, setElapsedMs, setTokPerSec, setTokenUsage, setShowThinking, setShowToolCalls, setHomeKey, setNavKey, setDialogStep, securityRef]);
|
|
178
|
+
const slashNames = useMemo(() => collectSlashNames(cmdItems), [cmdItems]);
|
|
179
|
+
const { handleSubmit, updateLastAssistantMeta, } = useChatSubmit({
|
|
180
|
+
sessionStore, sessionId, agentRef, securityRef, loadedSessionMessages,
|
|
181
|
+
snapshotManager, lastAgentRef: useRef(null), isStreamingRef, currentTurnStartRef,
|
|
182
|
+
currentTurnMsgIdRef, revertPoint, getOrCreateAgent,
|
|
183
|
+
selectedModel, provider, selectedAgent, customProviders, thinkingEffort,
|
|
184
|
+
cmdItems, slashNames, addMessage, updateMessage, setMessages,
|
|
185
|
+
setIsLoading, setStatus, setRoute, setElapsedMs, setTokPerSec,
|
|
186
|
+
setTokenUsage, setDraftText, setSlashSelected, setSubmitKey,
|
|
187
|
+
setPromptHistory, setHistoryIdx, setInterruptKey, setRevertPoint,
|
|
188
|
+
discardRevert,
|
|
189
|
+
});
|
|
190
|
+
// --- cmdFiltered + slash ---
|
|
191
|
+
const cmdFiltered = useMemo(() => {
|
|
192
|
+
const q = cmdFilter.toLowerCase();
|
|
193
|
+
return !q ? cmdItems : cmdItems.filter((i) => i.label.toLowerCase().includes(q) || i.desc.toLowerCase().includes(q) || (i.cat && i.cat.toLowerCase().includes(q)));
|
|
194
|
+
}, [cmdItems, cmdFilter]);
|
|
195
|
+
const slashFiltered = useMemo(() => {
|
|
196
|
+
const head = slashHead(draftText);
|
|
197
|
+
if (!head)
|
|
198
|
+
return [];
|
|
199
|
+
const q = head.name.toLowerCase();
|
|
200
|
+
if (!q)
|
|
201
|
+
return cmdItems;
|
|
202
|
+
return cmdItems.filter((item) => {
|
|
203
|
+
if (item.slashName && item.slashName.toLowerCase().includes(q))
|
|
204
|
+
return true;
|
|
205
|
+
if (item.slashAliases)
|
|
206
|
+
return item.slashAliases.some((a) => a.toLowerCase().includes(q));
|
|
207
|
+
return false;
|
|
208
|
+
});
|
|
209
|
+
}, [cmdItems, draftText]);
|
|
210
|
+
const slashActive = useMemo(() => slashHead(draftText) !== undefined, [draftText]);
|
|
211
|
+
useEffect(() => { setSlashSelected(0); }, [draftText]);
|
|
212
|
+
useEffect(() => { if (cmdSelected >= cmdFiltered.length && cmdFiltered.length > 0)
|
|
213
|
+
setCmdSelected(cmdFiltered.length - 1); }, [cmdSelected, cmdFiltered.length]);
|
|
214
|
+
const execCmd = useCallback((item) => { item.action(); setShowCmd(false); }, [setShowCmd]);
|
|
215
|
+
// --- Keyboard ---
|
|
216
|
+
useAppKeyboard({
|
|
217
|
+
renderer, isStreamingRef, currentTurnStartRef, currentTurnMsgIdRef,
|
|
218
|
+
revertPoint, revertedMessagesRef, runRedo, runRollbackFiles,
|
|
219
|
+
dialogStep, msgControls, permissionRequest, dialogKeyHandler,
|
|
220
|
+
showCmd, cmdFilter, cmdSelected, cmdFiltered,
|
|
221
|
+
draftText, slashActive, slashFiltered, slashSelected,
|
|
222
|
+
promptHistory, historyIdx, interruptKey,
|
|
223
|
+
selectedAgent, thinkingEffort, provider,
|
|
224
|
+
agentRef, securityRef, promptTextareaRef,
|
|
225
|
+
setShowCmd, setCmdFilter, setCmdSelected,
|
|
226
|
+
setDraftText, setSlashSelected, setHistoryIdx, setNavKey,
|
|
227
|
+
setInterruptKey, setSelectedAgent, setMessages, setStatus,
|
|
228
|
+
setThinkingEffort, updateMessage, updateLastAssistantMeta,
|
|
229
|
+
execCmd, handleCycleVariant,
|
|
230
|
+
});
|
|
231
|
+
// --- JSX ---
|
|
232
|
+
return (_jsxs("box", { flexDirection: "column", height: termHeight, backgroundColor: c.bg, children: [route === "home" ? (_jsxs("box", { flexDirection: "column", flexGrow: 1, children: [_jsx("box", { flexGrow: 1 }), _jsxs("box", { flexDirection: "column", alignItems: "center", flexShrink: 0, children: [_jsx("ascii-font", { text: "SPECTRA", font: "block", color: c.accent }), _jsx("box", { height: 1 }), _jsx(PromptBar, { isLoading: isLoading, spinnerFrame: spinnerFrame, inputKey: `h-${submitKey}-${navKey}`, placeholder: `Ask anything... "${PLACEHOLDERS[placeholderIdx]}"`, onSubmit: handleSubmit, hasModel: hasModel, agent: selectedAgent, model: selectedModel || "", provider: provider || "", thinkingEffort: thinkingEffort, initialValue: revertDraftRef.current || (historyIdx >= 0 ? promptHistory[historyIdx] : ""), width: Math.min(68, termWidth - 8), focused: !dialogStep && !showCmd && !msgControls && !permissionRequest, onTextChange: (t) => setDraftText(t), onGetTextarea: (r) => { promptTextareaRef.current = r; }, onPositionChange: setPromptPosition }), _jsx("box", { height: 1 }), _jsx("box", { flexDirection: "row", justifyContent: "flex-end", width: Math.min(68, termWidth - 8), children: _jsxs("box", { flexDirection: "row", gap: 2, children: [_jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "tab" }), _jsx("text", { fg: c.dim, children: " agent" })] }), _jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "ctrl+t" }), _jsx("text", { fg: c.dim, children: " effort" })] }), _jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "ctrl+p" }), _jsx("text", { fg: c.dim, children: " commands" })] })] }) }), _jsx("box", { height: 1 }), _jsx("box", { flexDirection: "row", gap: 4, alignItems: "center", children: [
|
|
233
|
+
{ icon: "◈", label: `${sessionStore.current.list().length} sessions` },
|
|
234
|
+
{ icon: "◉", label: "3 agents" },
|
|
235
|
+
{ icon: "◆", label: "7 tools" },
|
|
236
|
+
{ icon: "⬢", label: `${mcpCount} MCP` },
|
|
237
|
+
].map((s) => (_jsxs("box", { flexDirection: "row", gap: 1, alignItems: "center", children: [_jsx("text", { fg: c.accent, children: s.icon }), _jsx("text", { fg: c.dim, children: s.label })] }, s.label))) }), _jsx(Tips, {})] }), _jsx("box", { flexGrow: 1 }), _jsxs("box", { flexDirection: "row", justifyContent: "space-between", paddingLeft: 2, paddingRight: 2, height: 1, marginBottom: 1, children: [_jsx("box", { flexDirection: "row", gap: 4, children: _jsx("text", { fg: c.dim, overflow: "hidden", wrapMode: "none", children: cwdLabel }) }), _jsx("text", { fg: c.dim, flexShrink: 0, children: "Spectra Code" })] })] }, `home-${homeKey}`)) : (_jsxs("box", { flexDirection: "column", height: termHeight, paddingLeft: 2, paddingRight: 2, children: [revertPoint && (_jsxs("box", { flexDirection: "column", alignItems: "center", paddingY: 1, children: [_jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.warn, children: "Messages reverted. " }), _jsx("text", { fg: c.accent, children: "Ctrl+Y" }), _jsx("text", { fg: c.dim, children: " to restore" })] }), _jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.dim, children: "Files unchanged. " }), _jsx("text", { fg: c.accent, children: "Ctrl+Shift+Y" }), _jsx("text", { fg: c.dim, children: " to rollback files" })] })] })), _jsx("box", { flexDirection: "column", flexGrow: 1, paddingBottom: 1, children: _jsx(ChatArea, { messages: messages, showThinking: showThinking, showToolCalls: showToolCalls, revertPoint: revertPoint, onMessageClick: (msg) => setMsgControls(msg) }) }), _jsxs("box", { flexShrink: 0, children: [_jsx(PromptBar, { isLoading: isLoading, spinnerFrame: spinnerFrame, inputKey: `c-${submitKey}-${navKey}`, placeholder: "Reply...", onSubmit: handleSubmit, hasModel: hasModel, agent: selectedAgent, model: selectedModel || "", provider: provider || "", thinkingEffort: thinkingEffort, initialValue: revertDraftRef.current || (historyIdx >= 0 ? promptHistory[historyIdx] : ""), elapsedMs: elapsedMs, tokenUsage: tokenUsage, width: termWidth - 4, focused: !dialogStep && !showCmd && !msgControls && !permissionRequest, onTextChange: (t) => setDraftText(t), onGetTextarea: (r) => { promptTextareaRef.current = r; }, onPositionChange: setPromptPosition }), _jsx("box", { height: 1 }), _jsxs("box", { flexDirection: "row", justifyContent: "space-between", alignItems: "center", height: 1, paddingLeft: 3, paddingRight: 1, children: [_jsxs("box", { flexDirection: "row", gap: 2, alignItems: "center", overflow: "hidden", children: [isLoading ? (_jsxs("box", { flexDirection: "row", gap: 2, alignItems: "center", children: [_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: c.warn, children: SPINNER[spinnerFrame] }), _jsx("text", { fg: c.dim, children: "Streaming..." })] }), _jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: c.accent, children: "esc" }), _jsx("text", { fg: c.dim, children: "interrupt" })] })] })) : (_jsx("text", { fg: c.dim, children: "Ready" })), (tokenUsage.input + tokenUsage.output) > 0 && (() => {
|
|
238
|
+
const used = tokenUsage.input + tokenUsage.output;
|
|
239
|
+
const cw = lookupContextWindow(selectedModel || "", provider);
|
|
240
|
+
const pct = cw ? Math.round((used / cw) * 100) : null;
|
|
241
|
+
return (_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: c.subtext, children: fmtCtx(used) }), pct !== null && _jsxs("text", { fg: pct > 80 ? c.warn : c.dim, children: ["(", pct, "%)"] })] }));
|
|
242
|
+
})()] }), _jsxs("box", { flexDirection: "row", gap: 2, alignItems: "center", children: [_jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "tab" }), _jsx("text", { fg: c.dim, children: " agent" })] }), _jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "ctrl+t" }), _jsx("text", { fg: c.dim, children: " effort" })] }), _jsxs("box", { flexDirection: "row", children: [_jsx("text", { fg: c.text, children: "ctrl+p" }), _jsx("text", { fg: c.dim, children: " commands" })] })] })] })] })] })), showCmd && _jsx(CommandPalette, { filter: cmdFilter, selected: cmdSelected, items: cmdFiltered, termWidth: termWidth, termHeight: termHeight }), slashActive && slashFiltered.length > 0 && (_jsx(SlashAutocomplete, { query: slashHead(draftText)?.name || "", selected: slashSelected, items: slashFiltered, termWidth: termWidth, termHeight: termHeight, route: route, promptTop: promptPosition.top, promptLeft: promptPosition.left, promptWidth: promptPosition.width })), dialogStep?.type === "provider" && (_jsx(ProviderDialog, { termWidth: termWidth, termHeight: termHeight, keyHandlerRef: dialogKeyHandler, onModelSelected: (modelId, providerId) => {
|
|
243
|
+
resetAgentForModelSwitch();
|
|
244
|
+
setSelectedModel(modelId);
|
|
245
|
+
setSelectedProvider(providerId);
|
|
246
|
+
setDialogStep(null);
|
|
247
|
+
saveModelConfig(modelId, providerId);
|
|
248
|
+
showToast(`Model set`, "success");
|
|
249
|
+
}, onClose: () => setDialogStep(null) })), dialogStep?.type === "session-list" && (_jsx(SessionList, { store: sessionStore.current, termWidth: termWidth, termHeight: termHeight, mode: dialogStep.mode || "load", onLoad: (data) => {
|
|
250
|
+
const { messages: loadedMsgs, tokenUsage: tu } = sdkMessagesToChatMessages(data);
|
|
251
|
+
setTokenUsage(tu);
|
|
252
|
+
setMessages(() => loadedMsgs);
|
|
253
|
+
sessionId.current = data.id;
|
|
254
|
+
setSelectedModel(data.model);
|
|
255
|
+
setSelectedProvider(data.provider || data.model.split("/")[0]);
|
|
256
|
+
setSelectedAgent(data.agent);
|
|
257
|
+
setThinkingEffort(data.thinkingEffort || undefined);
|
|
258
|
+
setRoute("chat");
|
|
259
|
+
setDialogStep(null);
|
|
260
|
+
loadedSessionMessages.current = data.messages;
|
|
261
|
+
if (agentRef.current) {
|
|
262
|
+
agentRef.current.reset();
|
|
263
|
+
agentRef.current.restoreHistory(data.messages);
|
|
264
|
+
}
|
|
265
|
+
securityRef.current?.getReadTracker().reset();
|
|
266
|
+
securityRef.current?.getDoomLoop().reset();
|
|
267
|
+
showToast(`Loaded: ${data.title.slice(0, 40)}`, "info");
|
|
268
|
+
}, onDelete: (id) => {
|
|
269
|
+
sessionStore.current.delete(id);
|
|
270
|
+
if (sessionId.current === id) {
|
|
271
|
+
sessionId.current = null;
|
|
272
|
+
setMessages([]);
|
|
273
|
+
setRoute("home");
|
|
274
|
+
setHomeKey((k) => k + 1);
|
|
275
|
+
}
|
|
276
|
+
showToast("Session deleted", "success");
|
|
277
|
+
}, onRename: (id, title) => {
|
|
278
|
+
sessionStore.current.rename(id, title);
|
|
279
|
+
showToast("Session renamed", "success");
|
|
280
|
+
}, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "switch-model" && (_jsx(ModelSwitcher, { providerId: provider || "", termWidth: termWidth, termHeight: termHeight, onModelSelected: (modelId, providerId) => {
|
|
281
|
+
resetAgentForModelSwitch();
|
|
282
|
+
setSelectedModel(modelId);
|
|
283
|
+
setSelectedProvider(providerId);
|
|
284
|
+
setDialogStep(null);
|
|
285
|
+
saveModelConfig(modelId, providerId);
|
|
286
|
+
showToast(`Switched model`, "info");
|
|
287
|
+
}, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "manage-providers" && (_jsx(ManageProvidersDialog, { termWidth: termWidth, termHeight: termHeight, providers: customProviders, onProvidersChange: (updated) => {
|
|
288
|
+
setCustomProviders(updated);
|
|
289
|
+
resetAgentForModelSwitch();
|
|
290
|
+
showToast("Providers updated", "success");
|
|
291
|
+
}, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "doctor" && dialogStep.result && (_jsx(DoctorDialog, { result: dialogStep.result, termWidth: termWidth, termHeight: termHeight, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "about" && (_jsx(AboutDialog, { termWidth: termWidth, termHeight: termHeight, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "switch-agent" && (_jsx(AgentSwitcher, { currentAgent: selectedAgent, termWidth: termWidth, termHeight: termHeight, onAgentSelected: (agent) => {
|
|
292
|
+
setSelectedAgent(agent);
|
|
293
|
+
resetAgentForModelSwitch();
|
|
294
|
+
setDialogStep(null);
|
|
295
|
+
showToast(`Switched to ${titlecase(agent)} agent`, "info");
|
|
296
|
+
}, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "thinking-effort" && (_jsx(ThinkingEffortDialog, { provider: provider, currentEffort: thinkingEffort, termWidth: termWidth, termHeight: termHeight, onEffortSelected: (effort) => {
|
|
297
|
+
setThinkingEffort(effort);
|
|
298
|
+
resetAgentForModelSwitch();
|
|
299
|
+
setDialogStep(null);
|
|
300
|
+
showToast(effort === "none" ? "Thinking: off" : `Thinking: ${effort}`, "info");
|
|
301
|
+
}, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "toggle-mcp" && (_jsx(McpToggleDialog, { termWidth: termWidth, termHeight: termHeight, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), dialogStep?.type === "debug" && (_jsx(DebugDialog, { termWidth: termWidth, termHeight: termHeight, selectedModel: selectedModel, provider: provider, selectedAgent: selectedAgent, thinkingEffort: thinkingEffort, sessionStore: sessionStore.current, mcpCount: mcpCount, onClose: () => setDialogStep(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), msgControls && sessionId.current && (_jsx(MessageControls, { message: msgControls, sessionId: sessionId.current, messages: messages, termWidth: termWidth, termHeight: termHeight, revertPoint: revertPoint, onRevert: (msgId) => { runRevert(messages, msgId); setMsgControls(null); }, onRedo: () => { runRedo(); setMsgControls(null); }, onFork: (msgId) => {
|
|
302
|
+
const forked = sessionStore.current.fork(sessionId.current);
|
|
303
|
+
if (forked) {
|
|
304
|
+
const msgIdx = messages.findIndex(m => m.id === msgId);
|
|
305
|
+
if (msgIdx >= 0) {
|
|
306
|
+
forked.messages = forked.messages.slice(0, msgIdx + 1);
|
|
307
|
+
forked.title = `${forked.title.split(" (fork)")[0]} (fork)`;
|
|
308
|
+
sessionStore.current.save(forked);
|
|
309
|
+
}
|
|
310
|
+
const data = sessionStore.current.get(forked.id);
|
|
311
|
+
if (data) {
|
|
312
|
+
const { messages: loadedMsgs } = sdkMessagesToChatMessages(data);
|
|
313
|
+
setMessages(loadedMsgs);
|
|
314
|
+
sessionId.current = forked.id;
|
|
315
|
+
loadedSessionMessages.current = data.messages;
|
|
316
|
+
showToast("Session forked", "success");
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
setMsgControls(null);
|
|
320
|
+
}, onClose: () => setMsgControls(null), registerHandler: (fn) => { dialogKeyHandler.current = fn; } })), permissionRequest && (_jsx(PermissionDialog, { request: permissionRequest, termWidth: termWidth, termHeight: termHeight, onAllow: (id) => { resolvePermission(id, { action: "once" }); }, onAllowAlways: (id) => { resolvePermission(id, { action: "always" }); }, onDeny: (id) => { resolvePermission(id, { action: "deny" }); }, onClose: () => { resolvePermission(permissionRequest.id, { action: "deny" }); } })), _jsx(ToastContainer, {})] }));
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/tui/app.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,SAAS,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,UAAU,EAA6B,MAAM,uBAAuB,CAAA;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAU,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEzD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AACvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhD,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAA6B;IACzD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,qBAAqB,EAAE,CAAA;IAExE,gBAAgB;IAChB,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAA;IAC/C,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAuC,GAAG,EAAE;QAChG,MAAM,GAAG,GAAG,UAAU,EAAE,CAAA;QACxB,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAA;QAC9B,0BAA0B,CAAC,EAAE,CAAC,CAAA;QAC9B,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB,WAAW,CAAC,KAAK,CAAC,CAAA;IACpF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAgB,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC7F,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAA;IACnF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAkB,MAAM,CAAC,CAAA;IAC3D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,CAAA;IAC3D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC7C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC/D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC/D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IACrE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IACtD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IACxD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC3D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAM,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAA;IAChE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACvC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACzC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAA;IACxE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACnE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC9C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACrD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IAEnF,eAAe;IACf,MAAM,iBAAiB,GAAG,MAAM,CAAM,IAAI,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IAC7C,MAAM,gBAAgB,GAAG,MAAM,CAA8B,IAAI,CAAC,CAAA;IAClE,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACpC,MAAM,mBAAmB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IACvD,MAAM,mBAAmB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAA;IACvD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;IAE/E,MAAM,CAAC,cAAc,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QACrC,MAAM,GAAG,GAAG,UAAU,EAAE,CAAA;QACxB,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAA;IAC/D,CAAC,CAAC,CAAA;IAEF,kBAAkB;IAClB,MAAM,QAAQ,GAAG,gBAAgB,CAAA;IACjC,MAAM,QAAQ,GAAG,aAAa,KAAK,IAAI,IAAI,gBAAgB,KAAK,IAAI,CAAA;IACpE,MAAM,QAAQ,GAAG,CAAC,CAAA;IAClB,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAA;IAE/D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAA;QAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC5C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,6CAA6C,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;YAC9H,IAAI,MAAM;gBAAE,OAAO,GAAG,GAAG,IAAI,MAAM,EAAE,CAAA;QACvC,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC;QACX,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,kBAAkB;IAClB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;QAC3F,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IAChC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS;YAAE,OAAM;QACtB,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;QAClF,QAAQ,CAAC,WAAW,EAAE,CAAA;QACtB,OAAO,GAAG,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAA,CAAC,CAAC,CAAA;IACzD,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEzB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,CAAC,SAA4C,EAAE,EAAE;YAC/D,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,EAAE,CAAA;YACxC,IAAI,CAAC,IAAI;gBAAE,OAAM;YACjB,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC;oBACH,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;oBACzB,YAAY,CAAC,IAAI,CAAC,CAAA;oBAClB,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;gBAC7C,CAAC;gBAAC,MAAM,CAAC,CAAC,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,CAAA;QACV,CAAC,CAAA;QACD,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACjC,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC,CAAA;IACvD,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,2BAA2B;IAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,GAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACzF,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,CAAuB,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEpJ,kDAAkD;IAClD,MAAM,WAAW,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAA;IAExD,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAA;IAEnG,MAAM,EACJ,QAAQ,EACR,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,GACzB,GAAG,QAAQ,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC,CAAA;IAEhE,MAAM,EACJ,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,aAAa,GACd,GAAG,SAAS,CAAC;QACZ,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,qBAAqB;QACxD,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe;KACvE,CAAC,CAAA;IAEF,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QACtE,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;QACxD,IAAI,CAAC,UAAU,EAAE,CAAC;YAAC,SAAS,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QACvE,iBAAiB,CAAC,UAAU,CAAC,CAAA;QAC7B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;QACvB,SAAS,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,UAAU,EAAE,EAAE,MAAM,CAAC,CAAA;IACxF,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAA;IAExC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC;QAC3C,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS;QACrE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EAAE,QAAQ,CAAC,MAAM;QACjG,YAAY,EAAE,aAAa;QAC3B,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa;QACpJ,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAE,cAAc;QAC7B,aAAa;QACb,eAAe,EAAE,GAAG,EAAE;YACpB,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,KAAK,EAAE,CAAA;YAC7C,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,CAAA;QAC5C,CAAC;KACF,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;IAE9W,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEzE,MAAM,EACJ,YAAY,EACZ,uBAAuB,GACxB,GAAG,aAAa,CAAC;QAChB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB;QACrE,eAAe,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,mBAAmB;QAChF,mBAAmB,EAAE,WAAW,EAAE,gBAAgB;QAClD,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc;QACvE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW;QAC5D,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY;QAC7D,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY;QAC3D,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc;QAChE,aAAa;KACd,CAAC,CAAA;IAEF,8BAA8B;IAC9B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,MAAM,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;QACjC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpK,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;IAEzB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAqB,CAAA;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;QACjC,IAAI,CAAC,CAAC;YAAE,OAAO,QAAQ,CAAA;QACvB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAA;YAC3E,IAAI,IAAI,CAAC,YAAY;gBAAE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;YACxF,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;IAEzB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAClF,SAAS,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IACrD,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,cAAc,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;IAE/J,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,IAAS,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA;IAE9F,mBAAmB;IACnB,cAAc,CAAC;QACb,QAAQ,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB;QAClE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,gBAAgB;QAC3D,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB;QAC5D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW;QAC5C,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa;QACpD,aAAa,EAAE,UAAU,EAAE,YAAY;QACvC,aAAa,EAAE,cAAc,EAAE,QAAQ;QACvC,QAAQ,EAAE,WAAW,EAAE,iBAAiB;QACxC,UAAU,EAAE,YAAY,EAAE,cAAc;QACxC,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS;QACxD,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS;QACzD,iBAAiB,EAAE,aAAa,EAAE,uBAAuB;QACzD,OAAO,EAAE,kBAAkB;KAC5B,CAAC,CAAA;IAEF,cAAc;IAEd,OAAO,CACL,eAAK,aAAa,EAAC,QAAQ,EAAC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,aAClE,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAClB,eAA6B,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aAC7D,cAAK,QAAQ,EAAE,CAAC,GAAI,EACpB,eAAK,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,aAC3D,qBAAY,IAAI,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,CAAC,CAAC,MAAM,GAAI,EAC3D,cAAK,MAAM,EAAE,CAAC,GAAI,EAClB,KAAC,SAAS,IAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EACzD,QAAQ,EAAE,KAAK,SAAS,IAAI,MAAM,EAAE,EACpC,WAAW,EAAE,oBAAoB,YAAY,CAAC,cAAc,CAAC,GAAG,EAChE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAC1C,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAC1E,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAC1F,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,EAClC,OAAO,EAAE,CAAC,UAAU,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,iBAAiB,EACtE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EACpC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,iBAAiB,CAAC,OAAO,GAAG,CAAC,CAAA,CAAC,CAAC,EACvD,gBAAgB,EAAE,iBAAiB,GAAI,EACzC,cAAK,MAAM,EAAE,CAAC,GAAI,EAClB,cAAK,aAAa,EAAC,KAAK,EAAC,cAAc,EAAC,UAAU,EAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,YACnF,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC7B,eAAK,aAAa,EAAC,KAAK,aAAC,eAAM,EAAE,EAAE,CAAC,CAAC,IAAI,oBAAY,EAAA,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,uBAAe,IAAM,EACzF,eAAK,aAAa,EAAC,KAAK,aAAC,eAAM,EAAE,EAAE,CAAC,CAAC,IAAI,uBAAe,EAAA,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,wBAAgB,IAAM,EAC7F,eAAK,aAAa,EAAC,KAAK,aAAC,eAAM,EAAE,EAAE,CAAC,CAAC,IAAI,uBAAe,EAAA,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,0BAAkB,IAAM,IAC3F,GACF,EACN,cAAK,MAAM,EAAE,CAAC,GAAI,EAClB,cAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,YACjD;oCACC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,WAAW,EAAE;oCACtE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE;oCAChC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE;oCAC/B,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,QAAQ,MAAM,EAAE;iCACxC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACX,eAAmB,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,aAChE,eAAM,EAAE,EAAE,CAAC,CAAC,MAAM,YAAG,CAAC,CAAC,IAAI,GAAQ,EAAA,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,YAAG,CAAC,CAAC,KAAK,GAAQ,KAD5D,CAAC,CAAC,KAAK,CAEX,CACP,CAAC,GACE,EACN,KAAC,IAAI,KAAG,IACJ,EACN,cAAK,QAAQ,EAAE,CAAC,GAAI,EACpB,eAAK,aAAa,EAAC,KAAK,EAAC,cAAc,EAAC,eAAe,EAAC,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,aACjH,cAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,YAC7B,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAC,QAAQ,EAAC,QAAQ,EAAC,MAAM,YAAE,QAAQ,GAAQ,GAChE,EACN,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,6BAAqB,IAC/C,KA9CE,QAAQ,OAAO,EAAE,CA+CrB,CACP,CAAC,CAAC,CAAC,CACF,eAAK,aAAa,EAAC,QAAQ,EAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,aAC5E,WAAW,IAAI,CACd,eAAK,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACzD,eAAK,aAAa,EAAC,KAAK,aACtB,eAAM,EAAE,EAAE,CAAC,CAAC,IAAI,oCAA4B,EAC5C,eAAM,EAAE,EAAE,CAAC,CAAC,MAAM,uBAAe,EACjC,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,4BAAoB,IAC/B,EACN,eAAK,aAAa,EAAC,KAAK,aACtB,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,kCAA0B,EACzC,eAAM,EAAE,EAAE,CAAC,CAAC,MAAM,6BAAqB,EACvC,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,mCAA2B,IACtC,IACF,CACP,EACD,cAAK,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,YACvD,KAAC,QAAQ,IAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EACpF,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,GAAI,GAC9C,EACN,eAAK,UAAU,EAAE,CAAC,aAChB,KAAC,SAAS,IAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EACzD,QAAQ,EAAE,KAAK,SAAS,IAAI,MAAM,EAAE,EACpC,WAAW,EAAC,UAAU,EAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EACjE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAC1E,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAC1F,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,CAAC,EAClE,OAAO,EAAE,CAAC,UAAU,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,iBAAiB,EACtE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EACpC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,iBAAiB,CAAC,OAAO,GAAG,CAAC,CAAA,CAAC,CAAC,EACvD,gBAAgB,EAAE,iBAAiB,GAAI,EACzC,cAAK,MAAM,EAAE,CAAC,GAAI,EAClB,eAAK,aAAa,EAAC,KAAK,EAAC,cAAc,EAAC,eAAe,EAAC,UAAU,EAAC,QAAQ,EAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,aACpH,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,EAAC,QAAQ,EAAC,QAAQ,aACnE,SAAS,CAAC,CAAC,CAAC,CACX,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,aAClD,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAAE,eAAM,EAAE,EAAE,CAAC,CAAC,IAAI,YAAG,OAAO,CAAC,YAAY,CAAC,GAAQ,EAAA,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,6BAAqB,IAAM,EAC3H,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAAE,eAAM,EAAE,EAAE,CAAC,CAAC,MAAM,oBAAY,EAAA,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,0BAAkB,IAAM,IAClG,CACP,CAAC,CAAC,CAAC,CACF,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,sBAAc,CAC9B,EACA,CAAC,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;gDACnD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAA;gDACjD,MAAM,EAAE,GAAG,mBAAmB,CAAC,aAAa,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAA;gDAC7D,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;gDACrD,OAAO,CACL,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC7B,eAAM,EAAE,EAAE,CAAC,CAAC,OAAO,YAAG,MAAM,CAAC,IAAI,CAAC,GAAQ,EACzC,GAAG,KAAK,IAAI,IAAI,gBAAM,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAI,GAAG,UAAU,IACjE,CACP,CAAA;4CACH,CAAC,CAAC,EAAE,IACA,EACN,eAAK,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,aAClD,eAAK,aAAa,EAAC,KAAK,aAAC,eAAM,EAAE,EAAE,CAAC,CAAC,IAAI,oBAAY,EAAA,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,uBAAe,IAAM,EACzF,eAAK,aAAa,EAAC,KAAK,aAAC,eAAM,EAAE,EAAE,CAAC,CAAC,IAAI,uBAAe,EAAA,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,wBAAgB,IAAM,EAC7F,eAAK,aAAa,EAAC,KAAK,aAAC,eAAM,EAAE,EAAE,CAAC,CAAC,IAAI,uBAAe,EAAA,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,0BAAkB,IAAM,IAC3F,IACF,IACF,IACF,CACP,EACA,OAAO,IAAI,KAAC,cAAc,IAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAI,EACzI,WAAW,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAC1C,KAAC,iBAAiB,IAAC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,aAAa,EACjF,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAChF,SAAS,EAAE,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,KAAK,GAAI,CACxG,EACA,UAAU,EAAE,IAAI,KAAK,UAAU,IAAI,CAClC,KAAC,cAAc,IAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAC3F,eAAe,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;oBACvC,wBAAwB,EAAE,CAAA;oBAC1B,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;oBAAC,aAAa,CAAC,IAAI,CAAC,CAAA;oBAC/E,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;oBACpC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;gBACnC,CAAC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,GAClC,CACH,EACA,UAAU,EAAE,IAAI,KAAK,cAAc,IAAI,CACtC,KAAC,WAAW,IAAC,KAAK,EAAE,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EACpF,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,MAAM,EAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACf,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;oBAChF,aAAa,CAAC,EAAE,CAAC,CAAA;oBACjB,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAA;oBAC7B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAA;oBAC3B,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAC5B,mBAAmB,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC9D,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAC5B,iBAAiB,CAAC,IAAI,CAAC,cAAc,IAAI,SAAS,CAAC,CAAA;oBACnD,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAAC,aAAa,CAAC,IAAI,CAAC,CAAA;oBACrC,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC,QAAgC,CAAA;oBACrE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACrB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;wBACxB,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAgC,CAAC,CAAA;oBACxE,CAAC;oBACD,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,KAAK,EAAE,CAAA;oBAC7C,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,CAAA;oBAC1C,SAAS,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;gBACzD,CAAC,EACD,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE;oBACf,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;oBAC/B,IAAI,SAAS,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;wBAC7B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAA;wBACxB,WAAW,CAAC,EAAE,CAAC,CAAA;wBACf,QAAQ,CAAC,MAAM,CAAC,CAAA;wBAChB,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;oBAC1B,CAAC;oBACD,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;gBACzC,CAAC,EACD,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;oBACtB,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;oBACtC,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;gBACzC,CAAC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAA,CAAC,CAAC,GAC1D,CACH,EACA,UAAU,EAAE,IAAI,KAAK,cAAc,IAAI,CACtC,KAAC,aAAa,IAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EACrF,eAAe,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;oBACvC,wBAAwB,EAAE,CAAA;oBAC1B,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;oBAAC,aAAa,CAAC,IAAI,CAAC,CAAA;oBAC/E,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;oBACpC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;gBACrC,CAAC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAA,CAAC,CAAC,GAC1D,CACH,EACA,UAAU,EAAE,IAAI,KAAK,kBAAkB,IAAI,CAC1C,KAAC,qBAAqB,IAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EACjE,SAAS,EAAE,eAAe,EAC1B,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE;oBAC7B,kBAAkB,CAAC,OAAO,CAAC,CAAA;oBAC3B,wBAAwB,EAAE,CAAA;oBAC1B,SAAS,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAA;gBAC3C,CAAC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAA,CAAC,CAAC,GAC1D,CACH,EACA,UAAU,EAAE,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,IAAI,CACrD,KAAC,YAAY,IAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EACnF,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,eAAe,EAAE,CAAC,EAAO,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAA,CAAC,CAAC,GAAI,CACtE,EACA,UAAU,EAAE,IAAI,KAAK,OAAO,IAAI,CAC/B,KAAC,WAAW,IAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EACvD,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,eAAe,EAAE,CAAC,EAAO,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAA,CAAC,CAAC,GAAI,CACtE,EACA,UAAU,EAAE,IAAI,KAAK,cAAc,IAAI,CACtC,KAAC,aAAa,IAAC,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EACtF,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;oBACzB,gBAAgB,CAAC,KAAK,CAAC,CAAA;oBACvB,wBAAwB,EAAE,CAAA;oBAC1B,aAAa,CAAC,IAAI,CAAC,CAAA;oBACnB,SAAS,CAAC,eAAe,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBAC5D,CAAC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAA,CAAC,CAAC,GAC1D,CACH,EACA,UAAU,EAAE,IAAI,KAAK,iBAAiB,IAAI,CACzC,KAAC,oBAAoB,IAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EACrE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAC5C,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;oBAC3B,iBAAiB,CAAC,MAAM,CAAC,CAAA;oBACzB,wBAAwB,EAAE,CAAA;oBAC1B,aAAa,CAAC,IAAI,CAAC,CAAA;oBACnB,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,MAAM,EAAE,EAAE,MAAM,CAAC,CAAA;gBAChF,CAAC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAA,CAAC,CAAC,GAC1D,CACH,EACA,UAAU,EAAE,IAAI,KAAK,YAAY,IAAI,CACpC,KAAC,eAAe,IAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAC3D,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAA,CAAC,CAAC,GAC1D,CACH,EACA,UAAU,EAAE,IAAI,KAAK,OAAO,IAAI,CAC/B,KAAC,WAAW,IAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EACvD,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAChD,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAC5D,YAAY,EAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EACtD,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAClC,eAAe,EAAE,CAAC,EAAO,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAA,CAAC,CAAC,GAC/D,CACH,EACA,WAAW,IAAI,SAAS,CAAC,OAAO,IAAI,CACnC,KAAC,eAAe,IACd,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,SAAS,CAAC,OAAO,EAC5B,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,EACzE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,EACjD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAQ,CAAC,CAAA;oBAC5D,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAA;wBACtD,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;4BAChB,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAA;4BACtD,MAAM,CAAC,KAAK,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;4BAC3D,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;wBACnC,CAAC;wBACD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;wBAChD,IAAI,IAAI,EAAE,CAAC;4BACT,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;4BAChE,WAAW,CAAC,UAAU,CAAC,CAAA;4BACvB,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAAA;4BAC7B,qBAAqB,CAAC,OAAO,GAAG,IAAI,CAAC,QAAgC,CAAA;4BACrE,SAAS,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAA;wBACxC,CAAC;oBACH,CAAC;oBACD,cAAc,CAAC,IAAI,CAAC,CAAA;gBACtB,CAAC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EACnC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,GAAG,EAAE,CAAA,CAAC,CAAC,GAC1D,CACH,EACA,iBAAiB,IAAI,CACpB,KAAC,gBAAgB,IACf,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAC5C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA,CAAC,CAAC,EAC9D,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA,CAAC,CAAC,EACtE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA,CAAC,CAAC,EAC7D,OAAO,EAAE,GAAG,EAAE,GAAG,iBAAiB,CAAC,iBAAkB,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA,CAAC,CAAC,GAC/E,CACH,EACD,KAAC,cAAc,KAAG,IACd,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { CmdItem } from "./components/command-palette.js";
|
|
2
|
+
import type { SessionStore } from "../services/session-store.js";
|
|
3
|
+
export declare function buildCmdItems(opts: {
|
|
4
|
+
renderer: {
|
|
5
|
+
destroy: () => void;
|
|
6
|
+
};
|
|
7
|
+
sessionStore: SessionStore;
|
|
8
|
+
hasModel: boolean;
|
|
9
|
+
selectedModel: string | null;
|
|
10
|
+
provider: string | null;
|
|
11
|
+
mcpCount: number;
|
|
12
|
+
customProviderCount: number;
|
|
13
|
+
messagesLength: number;
|
|
14
|
+
showThinking: boolean;
|
|
15
|
+
showToolCalls: boolean;
|
|
16
|
+
setRoute: (r: "home" | "chat") => void;
|
|
17
|
+
setMessages: (fn: (prev: any[]) => any[]) => void;
|
|
18
|
+
setStatus: (s: string) => void;
|
|
19
|
+
setElapsedMs: (v: null) => void;
|
|
20
|
+
setTokPerSec: (v: null) => void;
|
|
21
|
+
setTokenUsage: (v: {
|
|
22
|
+
input: number;
|
|
23
|
+
output: number;
|
|
24
|
+
}) => void;
|
|
25
|
+
setShowThinking: (fn: (v: boolean) => boolean) => void;
|
|
26
|
+
setShowToolCalls: (fn: (v: boolean) => boolean) => void;
|
|
27
|
+
setHomeKey: (fn: (k: number) => number) => void;
|
|
28
|
+
setNavKey: (fn: (k: number) => number) => void;
|
|
29
|
+
setDialogStep: (v: {
|
|
30
|
+
type: "provider";
|
|
31
|
+
} | {
|
|
32
|
+
type: "session-list";
|
|
33
|
+
mode?: "delete" | "rename";
|
|
34
|
+
} | {
|
|
35
|
+
type: "switch-model";
|
|
36
|
+
} | {
|
|
37
|
+
type: "manage-providers";
|
|
38
|
+
} | {
|
|
39
|
+
type: "doctor";
|
|
40
|
+
result: any;
|
|
41
|
+
} | {
|
|
42
|
+
type: "about";
|
|
43
|
+
} | {
|
|
44
|
+
type: "switch-agent";
|
|
45
|
+
} | {
|
|
46
|
+
type: "thinking-effort";
|
|
47
|
+
} | {
|
|
48
|
+
type: "toggle-mcp";
|
|
49
|
+
} | {
|
|
50
|
+
type: "debug";
|
|
51
|
+
} | null) => void;
|
|
52
|
+
sessionIdRef: {
|
|
53
|
+
current: string | null;
|
|
54
|
+
};
|
|
55
|
+
onCycleVariant: () => void;
|
|
56
|
+
currentEffort?: string;
|
|
57
|
+
selectedAgent: string;
|
|
58
|
+
onSecurityReset?: () => void;
|
|
59
|
+
}): CmdItem[];
|
|
60
|
+
export declare function collectSlashNames(items: CmdItem[]): Set<string>;
|
|
61
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/tui/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAIhE,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAClC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IACjC,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;IACtC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,IAAI,CAAA;IACjD,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,YAAY,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IAC/B,YAAY,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IAC/B,aAAa,EAAE,CAAC,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IAC7D,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,KAAK,IAAI,CAAA;IACtD,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,KAAK,IAAI,CAAA;IACvD,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAAK,IAAI,CAAA;IAC/C,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,KAAK,IAAI,CAAA;IAC9C,aAAa,EAAE,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,cAAc,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,kBAAkB,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,cAAc,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,iBAAiB,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,KAAK,IAAI,CAAA;IACpU,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IACxC,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;CAC7B,GAAG,OAAO,EAAE,CAoEZ;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAS/D"}
|