@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 @@
|
|
|
1
|
+
{"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../../src/tui/slash-commands.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAC7C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG,eAAe,CAAA;AAE9D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAW7D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI3E;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,GAChC,WAAW,CAMb"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function slashHead(text) {
|
|
2
|
+
if (!text.startsWith("/"))
|
|
3
|
+
return;
|
|
4
|
+
for (let i = 1; i < text.length; i++) {
|
|
5
|
+
switch (text[i]) {
|
|
6
|
+
case " ":
|
|
7
|
+
case "\t":
|
|
8
|
+
case "\n":
|
|
9
|
+
return { name: text.slice(1, i), arguments: text.slice(i + 1), end: i };
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return { name: text.slice(1), arguments: "", end: text.length };
|
|
13
|
+
}
|
|
14
|
+
export function slashQuery(text, cursor) {
|
|
15
|
+
const head = slashHead(text.slice(0, cursor));
|
|
16
|
+
if (!head || head.end !== cursor)
|
|
17
|
+
return;
|
|
18
|
+
return head.name;
|
|
19
|
+
}
|
|
20
|
+
export function parseSlashCommand(text, commands) {
|
|
21
|
+
const head = slashHead(text);
|
|
22
|
+
if (!head || head.name.length === 0)
|
|
23
|
+
return { type: "none" };
|
|
24
|
+
if (!commands)
|
|
25
|
+
return { type: "none" };
|
|
26
|
+
if (!commands.has(head.name))
|
|
27
|
+
return { type: "none" };
|
|
28
|
+
return { type: "command", command: { name: head.name, arguments: head.arguments } };
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=slash-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../../src/tui/slash-commands.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAM;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,KAAK,GAAG,CAAC;YACT,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACP,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;QAC3E,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,MAAc;IACrD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAC7C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM;QAAE,OAAM;IACxC,OAAO,IAAI,CAAC,IAAI,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,QAAiC;IAEjC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAC5D,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACrD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAA;AACrF,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SyntaxStyle } from "@opentui/core";
|
|
2
|
+
export declare const c: {
|
|
3
|
+
text: string;
|
|
4
|
+
subtext: string;
|
|
5
|
+
dim: string;
|
|
6
|
+
accent: string;
|
|
7
|
+
purple: string;
|
|
8
|
+
success: string;
|
|
9
|
+
warn: string;
|
|
10
|
+
error: string;
|
|
11
|
+
user: string;
|
|
12
|
+
tool: string;
|
|
13
|
+
thinking: string;
|
|
14
|
+
info: string;
|
|
15
|
+
bg: string;
|
|
16
|
+
bgBar: string;
|
|
17
|
+
bgCard: string;
|
|
18
|
+
bgThink: string;
|
|
19
|
+
bgTool: string;
|
|
20
|
+
bgInput: string;
|
|
21
|
+
bgOverlay: string;
|
|
22
|
+
bgSelect: string;
|
|
23
|
+
sbThumb: string;
|
|
24
|
+
sbTrack: string;
|
|
25
|
+
border: string;
|
|
26
|
+
};
|
|
27
|
+
export declare const mdStyle: SyntaxStyle;
|
|
28
|
+
export declare const SPINNER: string[];
|
|
29
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/tui/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,WAAW,EAAE,MAAM,eAAe,CAAA;AAIjD,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CA0Bb,CAAA;AAED,eAAO,MAAM,OAAO,aAoBlB,CAAA;AAEF,eAAO,MAAM,OAAO,UAGnB,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { RGBA, SyntaxStyle } from "@opentui/core";
|
|
2
|
+
// Spectra Void — deep dark bg with a soft spectral teal accent.
|
|
3
|
+
// Comfortable for long sessions; no harsh purples.
|
|
4
|
+
export const c = {
|
|
5
|
+
text: "#D5D8E0",
|
|
6
|
+
subtext: "#9CA3B0",
|
|
7
|
+
dim: "#5A6070",
|
|
8
|
+
accent: "#6EC8D0",
|
|
9
|
+
purple: "#7EC8D0",
|
|
10
|
+
success: "#A3D9A0",
|
|
11
|
+
warn: "#E0C8A0",
|
|
12
|
+
error: "#E0A0A8",
|
|
13
|
+
user: "#7AA8F0",
|
|
14
|
+
tool: "#E0B890",
|
|
15
|
+
thinking: "#90C0D8",
|
|
16
|
+
info: "#7EC8D0",
|
|
17
|
+
bg: "#0C0C12",
|
|
18
|
+
bgBar: "#141420",
|
|
19
|
+
bgCard: "#141420",
|
|
20
|
+
bgThink: "#141420",
|
|
21
|
+
bgTool: "#141420",
|
|
22
|
+
bgInput: "#12121A",
|
|
23
|
+
bgOverlay: "#08080ECC",
|
|
24
|
+
bgSelect: "#2E2E50",
|
|
25
|
+
sbThumb: "#2A2A3A",
|
|
26
|
+
sbTrack: "#181822",
|
|
27
|
+
border: "#2A2A3A",
|
|
28
|
+
};
|
|
29
|
+
export const mdStyle = SyntaxStyle.fromStyles({
|
|
30
|
+
"markup.heading.1": { fg: RGBA.fromHex(c.accent), bold: true },
|
|
31
|
+
"markup.heading.2": { fg: RGBA.fromHex(c.accent), bold: true },
|
|
32
|
+
"markup.heading.3": { fg: RGBA.fromHex(c.accent), bold: true },
|
|
33
|
+
"markup.heading.4": { fg: RGBA.fromHex(c.accent) },
|
|
34
|
+
"markup.bold": { bold: true },
|
|
35
|
+
"markup.italic": { italic: true },
|
|
36
|
+
"markup.list": { fg: RGBA.fromHex(c.text) },
|
|
37
|
+
"markup.raw": { fg: RGBA.fromHex(c.thinking) },
|
|
38
|
+
"markup.link": { fg: RGBA.fromHex(c.user) },
|
|
39
|
+
"markup.quote": { fg: RGBA.fromHex(c.dim) },
|
|
40
|
+
"markup.table": { fg: RGBA.fromHex(c.text) },
|
|
41
|
+
"markup.table.header": { fg: RGBA.fromHex(c.accent), bold: true },
|
|
42
|
+
keyword: { fg: RGBA.fromHex(c.accent) },
|
|
43
|
+
string: { fg: RGBA.fromHex(c.success) },
|
|
44
|
+
comment: { fg: RGBA.fromHex(c.dim), italic: true },
|
|
45
|
+
number: { fg: RGBA.fromHex(c.tool) },
|
|
46
|
+
function: { fg: RGBA.fromHex(c.user) },
|
|
47
|
+
type: { fg: RGBA.fromHex(c.accent) },
|
|
48
|
+
default: { fg: RGBA.fromHex(c.text) },
|
|
49
|
+
});
|
|
50
|
+
export const SPINNER = [
|
|
51
|
+
"\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826",
|
|
52
|
+
"\u2827", "\u2807", "\u280F",
|
|
53
|
+
];
|
|
54
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/tui/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tips.d.ts","sourceRoot":"","sources":["../../../src/tui/tips.tsx"],"names":[],"mappings":"AAgCA,wBAAgB,IAAI,8BAenB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { c } from "./theme.js";
|
|
4
|
+
const TIPS = [
|
|
5
|
+
"Type {highlight}:q{/highlight} to exit Spectra Code",
|
|
6
|
+
"Press {highlight}Tab{/highlight} to cycle between Build, Plan, Debug, and Explore agents",
|
|
7
|
+
"Press {highlight}Ctrl+P{/highlight} to open the command palette",
|
|
8
|
+
"Press {highlight}Ctrl+L{/highlight} to clear the conversation",
|
|
9
|
+
"Use {highlight}Esc{/highlight} to stop the AI mid-response or go back",
|
|
10
|
+
"Switch to {highlight}Plan{/highlight} agent to get suggestions without making changes",
|
|
11
|
+
"Commit your project's {highlight}AGENTS.md{/highlight} file to Git for team-wide instructions",
|
|
12
|
+
"Run {highlight}spectra doctor{/highlight} from CLI to check system health",
|
|
13
|
+
"Press {highlight}↑{/highlight} to edit your last message",
|
|
14
|
+
"Run {highlight}spectra session list{/highlight} to browse all conversations",
|
|
15
|
+
"Use {highlight}Ctrl+P{/highlight} → {highlight}doctor{/highlight} to run a health check from the TUI",
|
|
16
|
+
"Add {highlight}.spectra/{/highlight} to your project for project-level config",
|
|
17
|
+
];
|
|
18
|
+
function parse(tip) {
|
|
19
|
+
const parts = [];
|
|
20
|
+
const regex = /\{highlight\}(.*?)\{\/highlight\}/g;
|
|
21
|
+
let last = 0;
|
|
22
|
+
let match;
|
|
23
|
+
while ((match = regex.exec(tip)) !== null) {
|
|
24
|
+
if (match.index > last)
|
|
25
|
+
parts.push({ text: tip.slice(last, match.index), highlight: false });
|
|
26
|
+
parts.push({ text: match[1], highlight: true });
|
|
27
|
+
last = match.index + match[0].length;
|
|
28
|
+
}
|
|
29
|
+
if (last < tip.length)
|
|
30
|
+
parts.push({ text: tip.slice(last), highlight: false });
|
|
31
|
+
return parts;
|
|
32
|
+
}
|
|
33
|
+
export function Tips() {
|
|
34
|
+
const parts = useMemo(() => {
|
|
35
|
+
const tip = TIPS[Math.floor(Math.random() * TIPS.length)];
|
|
36
|
+
return parse(tip);
|
|
37
|
+
}, []);
|
|
38
|
+
return (_jsxs("box", { height: 1, paddingTop: 1, flexDirection: "row", gap: 1, children: [_jsx("text", { fg: c.warn, children: "\u25CF" }), _jsx("text", { fg: c.dim, children: "Tip" }), parts.map((p, i) => (_jsx("text", { fg: p.highlight ? c.text : c.dim, children: p.text }, i)))] }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=tips.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tips.js","sourceRoot":"","sources":["../../../src/tui/tips.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAE9B,MAAM,IAAI,GAAG;IACX,qDAAqD;IACrD,0FAA0F;IAC1F,iEAAiE;IACjE,+DAA+D;IAC/D,uEAAuE;IACvE,uFAAuF;IACvF,+FAA+F;IAC/F,2EAA2E;IAC3E,0DAA0D;IAC1D,6EAA6E;IAC7E,sGAAsG;IACtG,+EAA+E;CAChF,CAAA;AAED,SAAS,KAAK,CAAC,GAAW;IACxB,MAAM,KAAK,GAA2C,EAAE,CAAA;IACxD,MAAM,KAAK,GAAG,oCAAoC,CAAA;IAClD,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,KAA6B,CAAA;IACjC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QAC5F,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACtC,CAAC;IACD,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9E,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QACzD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAA;IACnB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACL,eAAK,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aACvD,eAAM,EAAE,EAAE,CAAC,CAAC,IAAI,YAAG,QAAQ,GAAQ,EACnC,eAAM,EAAE,EAAE,CAAC,CAAC,GAAG,oBAAY,EAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,eAAc,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAG,CAAC,CAAC,IAAI,IAA5C,CAAC,CAAmD,CAChE,CAAC,IACE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type ContentBlock = {
|
|
2
|
+
type: "text";
|
|
3
|
+
content: string;
|
|
4
|
+
} | {
|
|
5
|
+
type: "thinking";
|
|
6
|
+
content: string;
|
|
7
|
+
} | {
|
|
8
|
+
type: "toolCall";
|
|
9
|
+
name: string;
|
|
10
|
+
args: string;
|
|
11
|
+
};
|
|
12
|
+
export interface ChatMessage {
|
|
13
|
+
id: string;
|
|
14
|
+
role: "user" | "assistant" | "tool" | "error";
|
|
15
|
+
content: string;
|
|
16
|
+
blocks?: ContentBlock[];
|
|
17
|
+
meta?: string;
|
|
18
|
+
streaming?: boolean;
|
|
19
|
+
model?: string;
|
|
20
|
+
/** Turn status — set when the assistant turn completes/interrupts/errors */
|
|
21
|
+
turnStatus?: "completed" | "interrupted" | "error";
|
|
22
|
+
/** Turn duration in milliseconds */
|
|
23
|
+
turnDurationMs?: number;
|
|
24
|
+
/** Token usage for this turn */
|
|
25
|
+
turnTokens?: {
|
|
26
|
+
input: number;
|
|
27
|
+
output: number;
|
|
28
|
+
};
|
|
29
|
+
/** Exit code for shell tool results (structured, no regex parsing needed) */
|
|
30
|
+
exitCode?: number;
|
|
31
|
+
/** Agent that generated this message */
|
|
32
|
+
agent?: string;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tui/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAA;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,UAAU,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,OAAO,CAAA;IAClD,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gCAAgC;IAChC,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tui/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface AboutDialogProps {
|
|
2
|
+
onClose: () => void;
|
|
3
|
+
termWidth: number;
|
|
4
|
+
termHeight: number;
|
|
5
|
+
registerHandler?: (fn: (key: any) => void) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function AboutDialog({ onClose, termWidth, termHeight, registerHandler }: AboutDialogProps): import("react").ReactNode;
|
|
8
|
+
//# sourceMappingURL=about-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"about-dialog.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/about-dialog.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,KAAK,IAAI,CAAA;CACnD;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,gBAAgB,6BA6ChG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { c } from "../theme.js";
|
|
4
|
+
export function AboutDialog({ onClose, termWidth, termHeight, registerHandler }) {
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
const handler = (key) => {
|
|
7
|
+
if (key.name === "escape" || key.name === "return" || key.name === "enter") {
|
|
8
|
+
onClose();
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
registerHandler?.(handler);
|
|
12
|
+
}, [onClose, registerHandler]);
|
|
13
|
+
const mw = Math.min(50, termWidth - 4);
|
|
14
|
+
const ml = Math.floor((termWidth - mw) / 2);
|
|
15
|
+
const mh = 14;
|
|
16
|
+
const mt = Math.max(0, Math.floor((termHeight - mh) / 3));
|
|
17
|
+
const innerW = mw - 4;
|
|
18
|
+
const maxH = mh - 5;
|
|
19
|
+
return (_jsx("box", { position: "absolute", left: 0, right: 0, top: 0, bottom: 0, backgroundColor: c.bgOverlay, children: _jsxs("box", { position: "absolute", left: ml, top: mt, width: mw, height: mh, backgroundColor: c.bgCard, children: [_jsxs("box", { height: 1, paddingX: 2, paddingTop: 1, paddingBottom: 1, flexDirection: "row", justifyContent: "space-between", backgroundColor: c.bgCard, children: [_jsx("text", { fg: c.accent, flexDirection: "row", attributes: 1, height: 1, children: "About" }), _jsx("text", { fg: c.dim, flexDirection: "row", height: 1, children: "esc" })] }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children: "─".repeat(innerW) }) }), _jsxs("box", { flexDirection: "column", paddingX: 2, gap: 1, flexGrow: 1, children: [_jsxs("box", { children: [_jsx("text", { fg: c.text, children: "Spectra Code" }), _jsx("text", { fg: c.dim, children: "Version 0.1.0" })] }), _jsxs("box", { children: [_jsx("text", { fg: c.dim, children: "Minimal, ultra-fast AI coding agent" }), _jsx("text", { fg: c.dim, children: "Built with Spectra SDK" })] })] }), _jsx("box", { paddingX: 2, paddingY: 1, paddingBottom: 1, flexDirection: "row", justifyContent: "center", children: _jsx("text", { fg: c.dim, children: "esc/enter close" }) })] }) }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=about-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"about-dialog.js","sourceRoot":"","sources":["../../../../src/tui/ui/about-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface AgentSwitcherProps {
|
|
2
|
+
currentAgent: string;
|
|
3
|
+
termWidth: number;
|
|
4
|
+
termHeight: number;
|
|
5
|
+
onAgentSelected: (agent: string) => void;
|
|
6
|
+
onClose: () => void;
|
|
7
|
+
registerHandler: (fn: ((key: any) => void) | null) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function AgentSwitcher(props: AgentSwitcherProps): import("react").ReactNode;
|
|
10
|
+
//# sourceMappingURL=agent-switcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-switcher.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/agent-switcher.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;IACrC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAA;CAC3D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,6BA6FtD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useMemo, useRef } from "react";
|
|
3
|
+
import { c } from "../theme.js";
|
|
4
|
+
import { AGENT_DEFINITIONS, PRIMARY_AGENTS } from "../../agents/definitions.js";
|
|
5
|
+
import { titlecase } from "../utils.js";
|
|
6
|
+
export function AgentSwitcher(props) {
|
|
7
|
+
const { currentAgent, termWidth, termHeight, onAgentSelected, onClose, registerHandler } = props;
|
|
8
|
+
const [filter, setFilter] = useState("");
|
|
9
|
+
const [sel, setSel] = useState(0);
|
|
10
|
+
const scrollRef = useRef(null);
|
|
11
|
+
const mw = Math.min(56, termWidth - 4);
|
|
12
|
+
const ml = Math.floor((termWidth - mw) / 2);
|
|
13
|
+
const mh = Math.min(16, termHeight - 4);
|
|
14
|
+
const mt = Math.max(1, Math.floor((termHeight - mh) / 2));
|
|
15
|
+
const innerW = mw - 4;
|
|
16
|
+
const listH = mh - 6;
|
|
17
|
+
const items = useMemo(() => {
|
|
18
|
+
return PRIMARY_AGENTS.map((name) => ({
|
|
19
|
+
name,
|
|
20
|
+
def: AGENT_DEFINITIONS[name],
|
|
21
|
+
}));
|
|
22
|
+
}, []);
|
|
23
|
+
const filtered = useMemo(() => {
|
|
24
|
+
if (!filter)
|
|
25
|
+
return items.map((i, idx) => ({ ...i, idx }));
|
|
26
|
+
const q = filter.toLowerCase();
|
|
27
|
+
return items
|
|
28
|
+
.map((i, idx) => ({ ...i, idx }))
|
|
29
|
+
.filter((i) => i.name.includes(q) || i.def?.description.toLowerCase().includes(q));
|
|
30
|
+
}, [items, filter]);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
registerHandler((key) => {
|
|
33
|
+
if (key.name === "up") {
|
|
34
|
+
setSel((s) => Math.max(0, s - 1));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (key.name === "down") {
|
|
38
|
+
setSel((s) => Math.min(filtered.length - 1, s + 1));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (key.name === "return" || key.name === "enter") {
|
|
42
|
+
if (filtered[sel])
|
|
43
|
+
onAgentSelected(filtered[sel].name);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (key.name === "escape") {
|
|
47
|
+
onClose();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (key.name === "backspace") {
|
|
51
|
+
setFilter((f) => f.slice(0, -1));
|
|
52
|
+
setSel(0);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (key.name?.length === 1) {
|
|
56
|
+
setFilter((f) => f + key.name);
|
|
57
|
+
setSel(0);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
return () => registerHandler(null);
|
|
62
|
+
}, [filtered, sel, onAgentSelected, onClose, registerHandler]);
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
if (scrollRef.current && filtered[sel]) {
|
|
65
|
+
const el = scrollRef.current;
|
|
66
|
+
if (typeof el.scrollChildIntoView === "function") {
|
|
67
|
+
el.scrollChildIntoView(`agent-${filtered[sel].name}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}, [sel, filtered]);
|
|
71
|
+
return (_jsx("box", { position: "absolute", left: 0, right: 0, top: 0, bottom: 0, backgroundColor: c.bgOverlay, children: _jsxs("box", { position: "absolute", left: ml, top: mt, width: mw, height: mh, backgroundColor: c.bgCard, children: [_jsxs("box", { height: 1, paddingX: 2, paddingTop: 1, flexDirection: "row", justifyContent: "space-between", alignItems: "center", children: [_jsxs("box", { flexDirection: "row", gap: 1, alignItems: "center", children: [_jsx("text", { fg: c.accent, children: ">" }), _jsx("text", { fg: c.text, children: filter || "Type to filter..." })] }), _jsx("box", { height: 1, children: _jsx("text", { fg: c.dim, children: "esc" }) })] }), _jsx("box", { height: 1 }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children: "─".repeat(innerW) }) }), _jsx("scrollbox", { ref: (r) => { scrollRef.current = r; }, paddingX: 1, maxHeight: listH, scrollY: true, scrollbarOptions: { visible: false }, children: _jsx("box", { flexDirection: "column", children: filtered.length === 0 ? (_jsx("box", { height: 1, paddingX: 1, children: _jsx("text", { fg: c.dim, children: "No matching agents" }) })) : filtered.map((item, i) => {
|
|
72
|
+
const isSelected = i === sel;
|
|
73
|
+
const isCurrent = item.name === currentAgent;
|
|
74
|
+
return (_jsxs("box", { id: `agent-${item.name}`, height: 2, paddingLeft: 2, paddingRight: 1, backgroundColor: isSelected ? c.bgSelect : c.bgCard, children: [_jsxs("box", { flexDirection: "row", alignItems: "center", gap: 1, children: [_jsx("text", { fg: isCurrent ? c.accent : c.dim, children: isCurrent ? "●" : " " }), _jsx("text", { fg: isSelected ? c.accent : isCurrent ? c.text : c.dim, children: titlecase(item.name) })] }), _jsx("text", { fg: c.dim, overflow: "hidden", wrapMode: "none", children: item.def?.description })] }, item.name));
|
|
75
|
+
}) }) }), _jsx("box", { paddingX: 2, paddingTop: 1, paddingBottom: 1, flexDirection: "row", justifyContent: "center", children: _jsxs("text", { fg: c.dim, children: ["\u2191\u2193", " navigate \u00B7 ", "\u23CE", " select \u00B7 esc close"] }) })] }) }));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=agent-switcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-switcher.js","sourceRoot":"","sources":["../../../../src/tui/ui/agent-switcher.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SessionStore } from "../../services/session-store.js";
|
|
2
|
+
export interface DebugDialogProps {
|
|
3
|
+
termWidth: number;
|
|
4
|
+
termHeight: number;
|
|
5
|
+
selectedModel: string | null;
|
|
6
|
+
provider: string | null;
|
|
7
|
+
selectedAgent: string;
|
|
8
|
+
thinkingEffort?: string;
|
|
9
|
+
sessionStore: SessionStore;
|
|
10
|
+
mcpCount: number;
|
|
11
|
+
onClose: () => void;
|
|
12
|
+
registerHandler: (fn: ((key: any) => void) | null) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function DebugDialog(props: DebugDialogProps): import("react").ReactNode;
|
|
15
|
+
//# sourceMappingURL=debug-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-dialog.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/debug-dialog.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAGnE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;IACrC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAA;CAC3D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,6BAmGlD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useMemo, useEffect } from "react";
|
|
3
|
+
import { c } from "../theme.js";
|
|
4
|
+
import { loadConfig } from "../../services/config.js";
|
|
5
|
+
import { listConnectedServers } from "../../integrations/mcp/index.js";
|
|
6
|
+
import { readAll } from "../../services/auth-store.js";
|
|
7
|
+
import { getGlobalConfigDir, getGlobalDataDir } from "../../utils/paths.js";
|
|
8
|
+
import { getPlatformInfo } from "../../utils/platform.js";
|
|
9
|
+
import { titlecase } from "../utils.js";
|
|
10
|
+
export function DebugDialog(props) {
|
|
11
|
+
const { termWidth, termHeight, selectedModel, provider, selectedAgent, thinkingEffort, sessionStore, mcpCount, onClose, registerHandler } = props;
|
|
12
|
+
const mw = Math.min(64, termWidth - 4);
|
|
13
|
+
const ml = Math.floor((termWidth - mw) / 2);
|
|
14
|
+
const mh = Math.min(24, termHeight - 4);
|
|
15
|
+
const mt = Math.max(1, Math.floor((termHeight - mh) / 2));
|
|
16
|
+
const innerW = mw - 4;
|
|
17
|
+
const listH = mh - 5;
|
|
18
|
+
const info = useMemo(() => {
|
|
19
|
+
const config = loadConfig();
|
|
20
|
+
const connected = listConnectedServers();
|
|
21
|
+
const authStore = readAll();
|
|
22
|
+
const platform = getPlatformInfo();
|
|
23
|
+
const sessions = sessionStore.list();
|
|
24
|
+
const configDir = getGlobalConfigDir();
|
|
25
|
+
const dataDir = getGlobalDataDir();
|
|
26
|
+
const groups = [
|
|
27
|
+
{
|
|
28
|
+
rows: [
|
|
29
|
+
{ label: "Version", value: "0.4.1" },
|
|
30
|
+
{ label: "Directory", value: platform.cwd },
|
|
31
|
+
{ label: "Platform", value: `${platform.os} (${platform.arch})` },
|
|
32
|
+
{ label: "Shell", value: platform.shell },
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
rows: [
|
|
37
|
+
{ label: "Agent", value: titlecase(selectedAgent) },
|
|
38
|
+
{ label: "Model", value: selectedModel || "(none)" },
|
|
39
|
+
{ label: "Provider", value: provider || "(none)" },
|
|
40
|
+
{ label: "Thinking effort", value: thinkingEffort || "default" },
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
rows: [
|
|
45
|
+
{ label: "MCP servers", value: `${config.mcp?.length ?? 0} configured, ${mcpCount} connected` },
|
|
46
|
+
{ label: "Sessions", value: `${sessions.length} total` },
|
|
47
|
+
{ label: "Auth keys", value: `${Object.keys(authStore).length} provider(s)` },
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
rows: [
|
|
52
|
+
{ label: "Config dir", value: configDir },
|
|
53
|
+
{ label: "Data dir", value: dataDir },
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
return groups;
|
|
58
|
+
}, [selectedModel, provider, selectedAgent, thinkingEffort, sessionStore, mcpCount]);
|
|
59
|
+
const maxLabel = useMemo(() => Math.max(...info.flatMap((g) => g.rows.map((r) => r.label.length))), [info]);
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
registerHandler((key) => {
|
|
62
|
+
if (key.name === "escape") {
|
|
63
|
+
onClose();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return () => registerHandler(null);
|
|
68
|
+
}, [onClose, registerHandler]);
|
|
69
|
+
return (_jsx("box", { position: "absolute", left: 0, right: 0, top: 0, bottom: 0, backgroundColor: c.bgOverlay, children: _jsxs("box", { position: "absolute", left: ml, top: mt, width: mw, height: mh, backgroundColor: c.bgCard, children: [_jsxs("box", { height: 1, paddingX: 2, paddingTop: 1, paddingBottom: 1, flexDirection: "row", justifyContent: "space-between", backgroundColor: c.bgCard, children: [_jsx("text", { fg: c.accent, flexDirection: "row", attributes: 1, height: 1, children: "Debug" }), _jsx("text", { fg: c.dim, flexDirection: "row", height: 1, children: "esc" })] }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children: "─".repeat(innerW) }) }), _jsx("scrollbox", { maxHeight: listH, paddingX: 2, scrollY: true, scrollbarOptions: { visible: false }, children: _jsx("box", { flexDirection: "column", children: info.map((group, gi) => (_jsxs("box", { flexDirection: "column", children: [gi > 0 ? _jsx("box", { height: 1 }) : null, group.rows.map((row, i) => {
|
|
70
|
+
const pad = maxLabel - row.label.length + 1;
|
|
71
|
+
return (_jsxs("box", { height: 1, flexDirection: "row", children: [_jsxs("text", { fg: c.dim, children: [row.label, ":"] }), _jsxs("text", { fg: c.text, children: [" ".repeat(pad), row.value] })] }, i));
|
|
72
|
+
})] }, gi))) }) }), _jsx("box", { paddingX: 2, paddingTop: 1, paddingBottom: 1, flexDirection: "row", justifyContent: "center", children: _jsx("text", { fg: c.dim, children: "esc/enter close" }) })] }) }));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=debug-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-dialog.js","sourceRoot":"","sources":["../../../../src/tui/ui/debug-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DoctorResult } from "../../commands/doctor.js";
|
|
2
|
+
export declare function DoctorDialog({ result, onClose, termWidth, termHeight, registerHandler }: {
|
|
3
|
+
result: DoctorResult;
|
|
4
|
+
onClose: () => void;
|
|
5
|
+
termWidth: number;
|
|
6
|
+
termHeight: number;
|
|
7
|
+
registerHandler?: (fn: (key: any) => void) => void;
|
|
8
|
+
}): import("react").ReactNode;
|
|
9
|
+
//# sourceMappingURL=doctor-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-dialog.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/doctor-dialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG5D,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,KAAK,IAAI,CAAA;CAAE,6BAsFjO"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import { c } from "../theme.js";
|
|
4
|
+
export function DoctorDialog({ result, onClose, termWidth, termHeight, registerHandler }) {
|
|
5
|
+
const scrollRef = useRef(null);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
const handler = (key) => {
|
|
8
|
+
if (key.name === "escape" || key.name === "return" || key.name === "enter") {
|
|
9
|
+
onClose();
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
registerHandler?.(handler);
|
|
13
|
+
}, [onClose, registerHandler]);
|
|
14
|
+
const mw = Math.min(68, termWidth - 4);
|
|
15
|
+
const ml = Math.floor((termWidth - mw) / 2);
|
|
16
|
+
const mh = Math.min(32, termHeight - 4);
|
|
17
|
+
const mt = Math.max(0, Math.floor((termHeight - mh) / 3));
|
|
18
|
+
const innerW = mw - 4;
|
|
19
|
+
const listH = mh - 5;
|
|
20
|
+
const failedCount = result.checks.filter((check) => !check.passed).length;
|
|
21
|
+
// Name/detail inline: ✓ Name detail
|
|
22
|
+
// Reserve: icon(1) + gap(1) + gap(2) + detail padding = ~4 chars overhead
|
|
23
|
+
const nameMax = Math.floor(innerW * 0.35);
|
|
24
|
+
const detailMax = innerW - nameMax - 4;
|
|
25
|
+
function trunc(s, max) {
|
|
26
|
+
if (s.length <= max)
|
|
27
|
+
return s;
|
|
28
|
+
return s.slice(0, Math.max(1, max - 1)) + "…";
|
|
29
|
+
}
|
|
30
|
+
const rows = [];
|
|
31
|
+
let prevSection = "";
|
|
32
|
+
for (let i = 0; i < result.checks.length; i++) {
|
|
33
|
+
const check = result.checks[i];
|
|
34
|
+
if (check.section !== prevSection) {
|
|
35
|
+
if (prevSection) {
|
|
36
|
+
rows.push(_jsx("box", { height: 1, backgroundColor: c.bgCard }, `gap-${i}`));
|
|
37
|
+
}
|
|
38
|
+
prevSection = check.section;
|
|
39
|
+
rows.push(_jsx("box", { height: 1, paddingLeft: 2, backgroundColor: c.bgCard, children: _jsx("text", { fg: c.accent, children: check.section }) }, `sec-${check.section}`));
|
|
40
|
+
}
|
|
41
|
+
rows.push(_jsxs("box", { flexDirection: "row", height: 1, paddingLeft: 4, paddingRight: 1, gap: 2, alignItems: "center", backgroundColor: c.bgCard, children: [_jsx("text", { fg: check.passed ? c.success : c.error, width: 1, children: check.passed ? "✓" : "✗" }), _jsx("text", { fg: c.text, children: trunc(check.name, nameMax) }), check.detail && (_jsx("text", { fg: c.dim, children: trunc(check.detail, detailMax) }))] }, check.name));
|
|
42
|
+
}
|
|
43
|
+
return (_jsx("box", { position: "absolute", left: 0, right: 0, top: 0, bottom: 0, backgroundColor: c.bgOverlay, children: _jsxs("box", { position: "absolute", left: ml, top: mt, width: mw, height: mh, backgroundColor: c.bgCard, children: [_jsx("box", { height: 1, paddingX: 2, paddingTop: 1, paddingBottom: 1, backgroundColor: c.bgCard, children: _jsx("text", { fg: result.allPassed ? c.success : c.error, children: result.allPassed ? "✓ All checks passed" : `✗ ${failedCount}/${result.checks.length} failed` }) }), _jsx("box", { height: 1, paddingX: 2, backgroundColor: c.bgCard, children: _jsx("text", { fg: c.border, children: "─".repeat(innerW) }) }), _jsx("scrollbox", { ref: (r) => { scrollRef.current = r; }, paddingX: 1, maxHeight: listH, scrollY: true, backgroundColor: c.bgCard, children: _jsx("box", { flexDirection: "column", backgroundColor: c.bgCard, children: rows.length === 0 ? (_jsx("box", { height: 1, paddingX: 1, backgroundColor: c.bgCard, children: _jsx("text", { fg: c.dim, children: "No checks" }) })) : rows }) }), _jsx("box", { paddingX: 2, paddingTop: 1, paddingBottom: 1, flexDirection: "row", justifyContent: "center", children: _jsx("text", { fg: c.dim, children: "esc/enter close" }) })] }) }));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=doctor-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-dialog.js","sourceRoot":"","sources":["../../../../src/tui/ui/doctor-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CustomProviderConfig } from "../../services/config.js";
|
|
2
|
+
export declare function ManageProvidersDialog(props: {
|
|
3
|
+
termWidth: number;
|
|
4
|
+
termHeight: number;
|
|
5
|
+
providers: Record<string, CustomProviderConfig>;
|
|
6
|
+
onProvidersChange: (updated: Record<string, CustomProviderConfig>) => void;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
registerHandler: (fn: ((key: any) => void) | null) => void;
|
|
9
|
+
}): import("react").ReactNode;
|
|
10
|
+
//# sourceMappingURL=manage-providers-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manage-providers-dialog.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/manage-providers-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAA;AA2BpE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IAC/C,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,KAAK,IAAI,CAAA;IAC1E,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAA;CAC3D,6BAwPA"}
|