@nanocollective/nanocoder 1.16.2 → 1.16.4
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 +17 -1
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +129 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/components/assistant-message.d.ts +1 -4
- package/dist/components/assistant-message.d.ts.map +1 -1
- package/dist/components/assistant-message.js +1 -199
- package/dist/components/assistant-message.js.map +1 -1
- package/dist/components/status.d.ts +1 -6
- package/dist/components/status.d.ts.map +1 -1
- package/dist/components/status.js +3 -2
- package/dist/components/status.js.map +1 -1
- package/dist/components/user-input.d.ts.map +1 -1
- package/dist/components/user-input.js +61 -19
- package/dist/components/user-input.js.map +1 -1
- package/dist/components/warning-message.d.ts +7 -0
- package/dist/components/warning-message.d.ts.map +1 -0
- package/dist/components/warning-message.js +12 -0
- package/dist/components/warning-message.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +19 -11
- package/dist/config/index.js.map +1 -1
- package/dist/config/paths.d.ts +1 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +48 -2
- package/dist/config/paths.js.map +1 -1
- package/dist/config/paths.spec.d.ts +2 -0
- package/dist/config/paths.spec.d.ts.map +1 -0
- package/dist/config/paths.spec.js +114 -0
- package/dist/config/paths.spec.js.map +1 -0
- package/dist/config/themes.d.ts.map +1 -1
- package/dist/config/themes.js +19 -0
- package/dist/config/themes.js.map +1 -1
- package/dist/hooks/useAppState.d.ts.map +1 -1
- package/dist/hooks/useAppState.js +8 -15
- package/dist/hooks/useAppState.js.map +1 -1
- package/dist/hooks/useInputState.d.ts.map +1 -1
- package/dist/hooks/useInputState.js +95 -8
- package/dist/hooks/useInputState.js.map +1 -1
- package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
- package/dist/hooks/useTerminalWidth.js +6 -0
- package/dist/hooks/useTerminalWidth.js.map +1 -1
- package/dist/markdown-parser/html-entities.d.ts +2 -0
- package/dist/markdown-parser/html-entities.d.ts.map +1 -0
- package/dist/markdown-parser/html-entities.js +41 -0
- package/dist/markdown-parser/html-entities.js.map +1 -0
- package/dist/markdown-parser/html-entities.spec.d.ts +2 -0
- package/dist/markdown-parser/html-entities.spec.d.ts.map +1 -0
- package/dist/markdown-parser/html-entities.spec.js +73 -0
- package/dist/markdown-parser/html-entities.spec.js.map +1 -0
- package/dist/markdown-parser/index.d.ts +6 -0
- package/dist/markdown-parser/index.d.ts.map +1 -0
- package/dist/markdown-parser/index.js +97 -0
- package/dist/markdown-parser/index.js.map +1 -0
- package/dist/markdown-parser/index.spec.d.ts +2 -0
- package/dist/markdown-parser/index.spec.d.ts.map +1 -0
- package/dist/markdown-parser/index.spec.js +245 -0
- package/dist/markdown-parser/index.spec.js.map +1 -0
- package/dist/markdown-parser/table-parser.d.ts +3 -0
- package/dist/markdown-parser/table-parser.d.ts.map +1 -0
- package/dist/markdown-parser/table-parser.js +92 -0
- package/dist/markdown-parser/table-parser.js.map +1 -0
- package/dist/markdown-parser/table-parser.spec.d.ts +2 -0
- package/dist/markdown-parser/table-parser.spec.d.ts.map +1 -0
- package/dist/markdown-parser/table-parser.spec.js +120 -0
- package/dist/markdown-parser/table-parser.spec.js.map +1 -0
- package/dist/markdown-parser/utils.d.ts +2 -0
- package/dist/markdown-parser/utils.d.ts.map +1 -0
- package/dist/markdown-parser/utils.js +14 -0
- package/dist/markdown-parser/utils.js.map +1 -0
- package/dist/markdown-parser/utils.spec.d.ts +2 -0
- package/dist/markdown-parser/utils.spec.d.ts.map +1 -0
- package/dist/markdown-parser/utils.spec.js +59 -0
- package/dist/markdown-parser/utils.spec.js.map +1 -0
- package/dist/tools/execute-bash.d.ts.map +1 -1
- package/dist/tools/execute-bash.js +5 -3
- package/dist/tools/execute-bash.js.map +1 -1
- package/dist/tools/find-files.d.ts +3 -0
- package/dist/tools/find-files.d.ts.map +1 -0
- package/dist/tools/find-files.js +186 -0
- package/dist/tools/find-files.js.map +1 -0
- package/dist/tools/index.js +4 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +143 -9
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/search-file-contents.d.ts +3 -0
- package/dist/tools/search-file-contents.d.ts.map +1 -0
- package/dist/tools/search-file-contents.js +164 -0
- package/dist/tools/search-file-contents.js.map +1 -0
- package/dist/types/markdown-parser.d.ts +11 -0
- package/dist/types/markdown-parser.d.ts.map +1 -0
- package/dist/types/markdown-parser.js +2 -0
- package/dist/types/markdown-parser.js.map +1 -0
- package/dist/types/ui.d.ts +1 -1
- package/dist/types/ui.d.ts.map +1 -1
- package/dist/types/utils.d.ts +2 -1
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/usage/storage.d.ts +1 -1
- package/dist/usage/storage.d.ts.map +1 -1
- package/dist/usage/storage.js +55 -9
- package/dist/usage/storage.js.map +1 -1
- package/dist/usage/storage.spec.js +136 -2
- package/dist/usage/storage.spec.js.map +1 -1
- package/dist/utils/installation-detector.d.ts +16 -0
- package/dist/utils/installation-detector.d.ts.map +1 -0
- package/dist/utils/installation-detector.js +118 -0
- package/dist/utils/installation-detector.js.map +1 -0
- package/dist/utils/installation-detector.spec.d.ts +2 -0
- package/dist/utils/installation-detector.spec.d.ts.map +1 -0
- package/dist/utils/installation-detector.spec.js +141 -0
- package/dist/utils/installation-detector.spec.js.map +1 -0
- package/dist/utils/message-queue.d.ts +2 -0
- package/dist/utils/message-queue.d.ts.map +1 -1
- package/dist/utils/message-queue.js +11 -0
- package/dist/utils/message-queue.js.map +1 -1
- package/dist/utils/paste-detection.d.ts.map +1 -1
- package/dist/utils/paste-detection.js +8 -3
- package/dist/utils/paste-detection.js.map +1 -1
- package/dist/utils/paste-detection.spec.js +15 -8
- package/dist/utils/paste-detection.spec.js.map +1 -1
- package/dist/utils/paste-utils.d.ts.map +1 -1
- package/dist/utils/paste-utils.js +4 -2
- package/dist/utils/paste-utils.js.map +1 -1
- package/dist/utils/paste-utils.spec.js +19 -3
- package/dist/utils/paste-utils.spec.js.map +1 -1
- package/dist/utils/update-checker.d.ts.map +1 -1
- package/dist/utils/update-checker.js +31 -3
- package/dist/utils/update-checker.js.map +1 -1
- package/dist/utils/update-checker.spec.d.ts +2 -0
- package/dist/utils/update-checker.spec.d.ts.map +1 -0
- package/dist/utils/update-checker.spec.js +280 -0
- package/dist/utils/update-checker.spec.js.map +1 -0
- package/dist/wizard/steps/location-step.js +2 -2
- package/dist/wizard/steps/location-step.js.map +1 -1
- package/package.json +1 -1
- package/source/app/prompts/main-prompt.md +67 -23
- package/dist/components/update-message.d.ts +0 -7
- package/dist/components/update-message.d.ts.map +0 -1
- package/dist/components/update-message.js +0 -93
- package/dist/components/update-message.js.map +0 -1
- package/dist/tools/read-many-files.d.ts +0 -3
- package/dist/tools/read-many-files.d.ts.map +0 -1
- package/dist/tools/read-many-files.js +0 -169
- package/dist/tools/read-many-files.js.map +0 -1
- package/dist/tools/search-files.d.ts +0 -3
- package/dist/tools/search-files.d.ts.map +0 -1
- package/dist/tools/search-files.js +0 -251
- package/dist/tools/search-files.js.map +0 -1
package/README.md
CHANGED
|
@@ -14,6 +14,7 @@ A local-first CLI coding agent that brings the power of agentic coding tools lik
|
|
|
14
14
|
- [AI Provider Setup](#ai-provider-setup)
|
|
15
15
|
- [MCP (Model Context Protocol) Servers](#mcp-model-context-protocol-servers)
|
|
16
16
|
- [User Preferences](#user-preferences)
|
|
17
|
+
- [Application Data Directory](#application-data-directory)
|
|
17
18
|
- [Commands](#commands)
|
|
18
19
|
- [Built-in Commands](#built-in-commands)
|
|
19
20
|
- [Custom Commands](#custom-commands)
|
|
@@ -183,7 +184,7 @@ Nanocoder looks for configuration in the following order (first found wins):
|
|
|
183
184
|
- Use this for project-specific providers, models, or API keys
|
|
184
185
|
- Perfect for team sharing or repository-specific configurations
|
|
185
186
|
|
|
186
|
-
2. **User-level (preferred)**: Platform-specific
|
|
187
|
+
2. **User-level (preferred)**: Platform-specific configuration directory
|
|
187
188
|
|
|
188
189
|
- **macOS**: `~/Library/Preferences/nanocoder/agents.config.json`
|
|
189
190
|
- **Linux/Unix**: `~/.config/nanocoder/agents.config.json`
|
|
@@ -191,6 +192,8 @@ Nanocoder looks for configuration in the following order (first found wins):
|
|
|
191
192
|
- Your global default configuration
|
|
192
193
|
- Used when no project-level config exists
|
|
193
194
|
|
|
195
|
+
You can override this global configuration directory by setting `NANOCODER_CONFIG_DIR`. When set, Nanocoder will look for `agents.config.json` and related config files directly in this directory.
|
|
196
|
+
|
|
194
197
|
3. **User-level (legacy)**: `~/.agents.config.json`
|
|
195
198
|
- Supported for backward compatibility
|
|
196
199
|
- Recommended to migrate to platform-specific location above
|
|
@@ -263,6 +266,9 @@ Nanocoder looks for configuration in the following order (first found wins):
|
|
|
263
266
|
|
|
264
267
|
Keep API keys out of version control using environment variables. Variables are loaded from shell environment (`.bashrc`, `.zshrc`) or `.env` file in your working directory.
|
|
265
268
|
|
|
269
|
+
- `NANOCODER_CONFIG_DIR`: Override the global configuration directory.
|
|
270
|
+
- `NANOCODER_DATA_DIR`: Override the application data directory used for internal data like usage statistics.
|
|
271
|
+
|
|
266
272
|
**Syntax:** `$VAR_NAME`, `${VAR_NAME}`, or `${VAR_NAME:-default}`
|
|
267
273
|
**Supported in:** `baseUrl`, `apiKey`, `models`, MCP server `command`, `args`, `env`
|
|
268
274
|
|
|
@@ -402,6 +408,16 @@ Preferences follow the same location hierarchy as configuration files:
|
|
|
402
408
|
- View current preferences: The file is human-readable JSON
|
|
403
409
|
- Reset preferences: Delete any `nanocoder-preferences.json` to start fresh
|
|
404
410
|
|
|
411
|
+
### Application Data Directory
|
|
412
|
+
|
|
413
|
+
Nanocoder stores internal application data (such as usage statistics) in a separate application data directory:
|
|
414
|
+
|
|
415
|
+
- **macOS**: `~/Library/Application Support/nanocoder`
|
|
416
|
+
- **Linux/Unix**: `$XDG_DATA_HOME/nanocoder` or `~/.local/share/nanocoder`
|
|
417
|
+
- **Windows**: `%APPDATA%\nanocoder`
|
|
418
|
+
|
|
419
|
+
You can override this directory using `NANOCODER_DATA_DIR`.
|
|
420
|
+
|
|
405
421
|
### Commands
|
|
406
422
|
|
|
407
423
|
#### Built-in Commands
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
import { Command } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Determines if a command execution failed based on multiple signals.
|
|
4
|
+
* Checks exit code first (most reliable), then looks for specific error patterns.
|
|
5
|
+
* Exported for testing purposes.
|
|
6
|
+
*/
|
|
7
|
+
export declare function hasCommandFailed(output: string): boolean;
|
|
2
8
|
export declare const updateCommand: Command;
|
|
3
9
|
//# sourceMappingURL=update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../source/commands/update.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../source/commands/update.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAStC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAyDxD;AAED,eAAO,MAAM,aAAa,EAAE,OAiF3B,CAAC"}
|
package/dist/commands/update.js
CHANGED
|
@@ -1,10 +1,136 @@
|
|
|
1
|
+
import { checkForUpdates } from '../utils/update-checker.js';
|
|
2
|
+
import { logInfo, logError } from '../utils/message-queue.js';
|
|
3
|
+
import { toolRegistry } from '../tools/index.js';
|
|
1
4
|
import React from 'react';
|
|
2
|
-
import
|
|
5
|
+
import SuccessMessage from '../components/success-message.js';
|
|
6
|
+
import InfoMessage from '../components/info-message.js';
|
|
7
|
+
import ErrorMessage from '../components/error-message.js';
|
|
8
|
+
/**
|
|
9
|
+
* Determines if a command execution failed based on multiple signals.
|
|
10
|
+
* Checks exit code first (most reliable), then looks for specific error patterns.
|
|
11
|
+
* Exported for testing purposes.
|
|
12
|
+
*/
|
|
13
|
+
export function hasCommandFailed(output) {
|
|
14
|
+
const outputStr = String(output || '');
|
|
15
|
+
// Strategy 1: Check exit code (most reliable)
|
|
16
|
+
const exitCodeMatch = outputStr.match(/^EXIT_CODE:\s*(\d+)/m);
|
|
17
|
+
if (exitCodeMatch) {
|
|
18
|
+
const exitCode = parseInt(exitCodeMatch[1], 10);
|
|
19
|
+
// Non-zero exit code indicates failure
|
|
20
|
+
if (exitCode !== 0) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Strategy 2: Check for critical error patterns
|
|
25
|
+
// Use word boundaries and case-sensitive matching to avoid false positives
|
|
26
|
+
const normalized = outputStr.toLowerCase();
|
|
27
|
+
// Critical errors that definitively indicate failure
|
|
28
|
+
const criticalErrors = [
|
|
29
|
+
/\bcommand not found\b/i,
|
|
30
|
+
/\bno such file or directory\b/i,
|
|
31
|
+
/\bpermission denied\b/i,
|
|
32
|
+
/^error:/im, // Error at start of line
|
|
33
|
+
/\berror:\s*(?!0\b)/i, // "error:" not followed by 0
|
|
34
|
+
/\bfatal\b/i,
|
|
35
|
+
/\bfailed\b/i,
|
|
36
|
+
/\bcannot\b/i,
|
|
37
|
+
];
|
|
38
|
+
for (const pattern of criticalErrors) {
|
|
39
|
+
if (pattern.test(normalized)) {
|
|
40
|
+
// Additional check: avoid false positives for success messages
|
|
41
|
+
// like "0 errors", "error-free", "no errors found"
|
|
42
|
+
if (/0\s*errors?|error-?free|no\s*errors?\s*found/i.test(normalized)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Strategy 3: Check if STDERR has content (warning: not always an error)
|
|
49
|
+
// Some tools write progress to stderr, so this is a weak signal
|
|
50
|
+
// Only use this if no other signals present
|
|
51
|
+
const hasStderr = /^STDERR:\s*\S/m.test(outputStr);
|
|
52
|
+
if (hasStderr) {
|
|
53
|
+
// Check if stderr contains actual error indicators, not just warnings/info
|
|
54
|
+
const stderrMatch = outputStr.match(/^STDERR:\s*([\s\S]*?)(?:^STDOUT:|$)/m);
|
|
55
|
+
if (stderrMatch) {
|
|
56
|
+
const stderrContent = stderrMatch[1].toLowerCase();
|
|
57
|
+
// Only treat as error if stderr contains error-like content
|
|
58
|
+
if (/\berror\b|\bfatal\b|\bfailed\b|\bcannot\b/i.test(stderrContent)) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
3
65
|
export const updateCommand = {
|
|
4
66
|
name: 'update',
|
|
5
67
|
description: 'Update Nanocoder to the latest version',
|
|
6
|
-
handler: (_args) => {
|
|
7
|
-
|
|
68
|
+
handler: async (_args) => {
|
|
69
|
+
// Show initial checking message
|
|
70
|
+
logInfo('Checking for available updates...', true);
|
|
71
|
+
try {
|
|
72
|
+
const updateInfo = await checkForUpdates();
|
|
73
|
+
if (updateInfo.hasUpdate) {
|
|
74
|
+
// Show updating message
|
|
75
|
+
logInfo('Downloading and installing the latest Nanocoder update...', true);
|
|
76
|
+
// Run update command if provided; otherwise show informative message
|
|
77
|
+
if (updateInfo.updateCommand) {
|
|
78
|
+
try {
|
|
79
|
+
const result = await toolRegistry.execute_bash({
|
|
80
|
+
command: updateInfo.updateCommand,
|
|
81
|
+
});
|
|
82
|
+
// Check for command failure using multiple strategies
|
|
83
|
+
if (hasCommandFailed(result)) {
|
|
84
|
+
logError('Update command executed but returned an error', true);
|
|
85
|
+
return React.createElement(ErrorMessage, {
|
|
86
|
+
message: `Update command failed. Output: ${String(result)}`,
|
|
87
|
+
hideBox: true,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// Show success message
|
|
91
|
+
return React.createElement(SuccessMessage, {
|
|
92
|
+
message: 'Nanocoder has been updated to the latest version. Please restart your session to apply the update.',
|
|
93
|
+
hideBox: true,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
98
|
+
logError(`Failed to execute update command: ${errorMessage}`, true);
|
|
99
|
+
return React.createElement(ErrorMessage, {
|
|
100
|
+
message: `Failed to execute update command: ${errorMessage}`,
|
|
101
|
+
hideBox: true,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (updateInfo.updateMessage) {
|
|
106
|
+
// We cannot run an automated update; show instructions to user
|
|
107
|
+
return React.createElement(InfoMessage, {
|
|
108
|
+
message: updateInfo.updateMessage,
|
|
109
|
+
hideBox: true,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Fallback for unknown installation method
|
|
113
|
+
return React.createElement(InfoMessage, {
|
|
114
|
+
message: 'A new version is available. Please update using your package manager.',
|
|
115
|
+
hideBox: true,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// Already up to date
|
|
120
|
+
return React.createElement(InfoMessage, {
|
|
121
|
+
message: 'You are already on the latest version.',
|
|
122
|
+
hideBox: true,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
128
|
+
logError(`Failed to update Nanocoder: ${errorMessage}`, true);
|
|
129
|
+
return React.createElement(ErrorMessage, {
|
|
130
|
+
message: `Failed to check for updates: ${errorMessage}`,
|
|
131
|
+
hideBox: true,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
8
134
|
},
|
|
9
135
|
};
|
|
10
136
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../source/commands/update.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,aAAa,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../source/commands/update.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import type { AssistantMessageProps
|
|
2
|
-
export declare function decodeHtmlEntities(text: string): string;
|
|
3
|
-
export declare function parseMarkdownTable(tableText: string, themeColors: Colors): string;
|
|
4
|
-
export declare function parseMarkdown(text: string, themeColors: Colors): string;
|
|
1
|
+
import type { AssistantMessageProps } from '../types/index.js';
|
|
5
2
|
declare const _default: import("react").NamedExoticComponent<AssistantMessageProps>;
|
|
6
3
|
export default _default;
|
|
7
4
|
//# sourceMappingURL=assistant-message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant-message.d.ts","sourceRoot":"","sources":["../../source/components/assistant-message.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"assistant-message.d.ts","sourceRoot":"","sources":["../../source/components/assistant-message.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,eAAe,CAAC;;AAGzD,wBA0BG"}
|
|
@@ -2,205 +2,7 @@ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { Text, Box } from 'ink';
|
|
3
3
|
import { memo, useMemo } from 'react';
|
|
4
4
|
import { useTheme } from '../hooks/useTheme.js';
|
|
5
|
-
import
|
|
6
|
-
import { highlight } from 'cli-highlight';
|
|
7
|
-
import Table from 'cli-table3';
|
|
8
|
-
// Decode HTML entities
|
|
9
|
-
export function decodeHtmlEntities(text) {
|
|
10
|
-
const entities = {
|
|
11
|
-
' ': ' ',
|
|
12
|
-
'&': '&',
|
|
13
|
-
'<': '<',
|
|
14
|
-
'>': '>',
|
|
15
|
-
'"': '"',
|
|
16
|
-
''': "'",
|
|
17
|
-
'©': '©',
|
|
18
|
-
'®': '®',
|
|
19
|
-
'™': '™',
|
|
20
|
-
'€': '€',
|
|
21
|
-
'£': '£',
|
|
22
|
-
'¥': '¥',
|
|
23
|
-
'¢': '¢',
|
|
24
|
-
'§': '§',
|
|
25
|
-
'°': '°',
|
|
26
|
-
'±': '±',
|
|
27
|
-
'×': '×',
|
|
28
|
-
'÷': '÷',
|
|
29
|
-
'–': '–',
|
|
30
|
-
'—': '—',
|
|
31
|
-
'‘': '\u2018',
|
|
32
|
-
'’': '\u2019',
|
|
33
|
-
'“': '\u201C',
|
|
34
|
-
'”': '\u201D',
|
|
35
|
-
'…': '…',
|
|
36
|
-
'•': '•',
|
|
37
|
-
};
|
|
38
|
-
let result = text;
|
|
39
|
-
// Replace named entities
|
|
40
|
-
for (const [entity, char] of Object.entries(entities)) {
|
|
41
|
-
result = result.replace(new RegExp(entity, 'g'), char);
|
|
42
|
-
}
|
|
43
|
-
// Replace numeric entities (e.g.,   or  )
|
|
44
|
-
result = result.replace(/&#(\d+);/g, (_match, code) => String.fromCharCode(parseInt(code, 10)));
|
|
45
|
-
result = result.replace(/&#x([0-9A-Fa-f]+);/g, (_match, code) => String.fromCharCode(parseInt(code, 16)));
|
|
46
|
-
return result;
|
|
47
|
-
}
|
|
48
|
-
// Strip markdown formatting from text (for width calculations)
|
|
49
|
-
function stripMarkdown(text) {
|
|
50
|
-
let result = text;
|
|
51
|
-
// Remove inline code
|
|
52
|
-
result = result.replace(/`([^`]+)`/g, '$1');
|
|
53
|
-
// Remove bold
|
|
54
|
-
result = result.replace(/\*\*([^*]+)\*\*/g, '$1');
|
|
55
|
-
result = result.replace(/__([^_]+)__/g, '$1');
|
|
56
|
-
// Remove italic
|
|
57
|
-
result = result.replace(/\*([^*]+)\*/g, '$1');
|
|
58
|
-
result = result.replace(/_([^_]+)_/g, '$1');
|
|
59
|
-
// Remove links
|
|
60
|
-
result = result.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
63
|
-
// Parse markdown tables using cli-table3
|
|
64
|
-
export function parseMarkdownTable(tableText, themeColors) {
|
|
65
|
-
const lines = tableText.trim().split('\n');
|
|
66
|
-
if (lines.length < 2)
|
|
67
|
-
return tableText;
|
|
68
|
-
// Extract rows
|
|
69
|
-
const rows = lines.map(line => line
|
|
70
|
-
.split('|')
|
|
71
|
-
.map(cell => cell.trim())
|
|
72
|
-
.filter(cell => cell.length > 0));
|
|
73
|
-
// Check if second row is separator (e.g., |---|---|)
|
|
74
|
-
const separatorRow = rows[1];
|
|
75
|
-
const isSeparator = separatorRow?.every(cell => /^:?-+:?$/.test(cell));
|
|
76
|
-
if (!isSeparator || rows.length < 3)
|
|
77
|
-
return tableText;
|
|
78
|
-
// Extract header and data rows - strip markdown for proper width calculation
|
|
79
|
-
const header = rows[0].map(cell => stripMarkdown(cell));
|
|
80
|
-
const dataRows = rows
|
|
81
|
-
.slice(2)
|
|
82
|
-
.map(row => row.map(cell => stripMarkdown(cell)));
|
|
83
|
-
// Calculate column widths properly
|
|
84
|
-
const terminalWidth = process.stdout.columns || 120;
|
|
85
|
-
const numCols = header.length;
|
|
86
|
-
// Get max content width for each column
|
|
87
|
-
const contentWidths = header.map((_, colIdx) => {
|
|
88
|
-
let maxWidth = header[colIdx].length;
|
|
89
|
-
for (const row of dataRows) {
|
|
90
|
-
if (row[colIdx]) {
|
|
91
|
-
maxWidth = Math.max(maxWidth, row[colIdx].length);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return maxWidth;
|
|
95
|
-
});
|
|
96
|
-
// Calculate available width (accounting for borders and padding)
|
|
97
|
-
const borderWidth = numCols + 1; // vertical bars
|
|
98
|
-
const paddingWidth = numCols * 2; // 1 space on each side of each column
|
|
99
|
-
const availableWidth = terminalWidth - borderWidth - paddingWidth;
|
|
100
|
-
// Distribute width proportionally
|
|
101
|
-
const totalContentWidth = contentWidths.reduce((a, b) => a + b, 0);
|
|
102
|
-
const colWidths = contentWidths.map(width => Math.max(10, Math.floor((width / totalContentWidth) * availableWidth)));
|
|
103
|
-
// Create table with cli-table3 - full borders, proper alignment
|
|
104
|
-
const table = new Table({
|
|
105
|
-
head: header.map(cell => chalk.hex(themeColors.primary).bold(cell)),
|
|
106
|
-
colWidths: colWidths,
|
|
107
|
-
style: {
|
|
108
|
-
head: [], // Don't apply default styles, we're using chalk
|
|
109
|
-
border: ['gray'], // Subtle border color
|
|
110
|
-
'padding-left': 1,
|
|
111
|
-
'padding-right': 1,
|
|
112
|
-
},
|
|
113
|
-
chars: {
|
|
114
|
-
top: '─',
|
|
115
|
-
'top-mid': '┬',
|
|
116
|
-
'top-left': '┌',
|
|
117
|
-
'top-right': '┐',
|
|
118
|
-
bottom: '─',
|
|
119
|
-
'bottom-mid': '┴',
|
|
120
|
-
'bottom-left': '└',
|
|
121
|
-
'bottom-right': '┘',
|
|
122
|
-
left: '│',
|
|
123
|
-
'left-mid': '├',
|
|
124
|
-
mid: '─',
|
|
125
|
-
'mid-mid': '┼',
|
|
126
|
-
right: '│',
|
|
127
|
-
'right-mid': '┤',
|
|
128
|
-
middle: '│',
|
|
129
|
-
},
|
|
130
|
-
wordWrap: true,
|
|
131
|
-
wrapOnWordBoundary: true,
|
|
132
|
-
});
|
|
133
|
-
// Add data rows - don't style them, let cli-table3 handle layout
|
|
134
|
-
for (const row of dataRows) {
|
|
135
|
-
table.push(row);
|
|
136
|
-
}
|
|
137
|
-
return table.toString();
|
|
138
|
-
}
|
|
139
|
-
// Basic markdown parser for terminal
|
|
140
|
-
export function parseMarkdown(text, themeColors) {
|
|
141
|
-
// First decode HTML entities
|
|
142
|
-
let result = decodeHtmlEntities(text);
|
|
143
|
-
// Parse tables before other markdown elements
|
|
144
|
-
result = result.replace(/(?:^|\n)((?:\|.+\|\n)+)/gm, (_match, tableText) => {
|
|
145
|
-
return '\n' + parseMarkdownTable(tableText, themeColors) + '\n';
|
|
146
|
-
});
|
|
147
|
-
// Code blocks (```language\ncode\n```)
|
|
148
|
-
result = result.replace(/```(\w+)?\n([\s\S]*?)```/g, (_match, lang, code) => {
|
|
149
|
-
try {
|
|
150
|
-
const codeStr = String(code).trim();
|
|
151
|
-
// Apply syntax highlighting with detected language
|
|
152
|
-
const highlighted = highlight(codeStr, {
|
|
153
|
-
language: lang || 'plaintext',
|
|
154
|
-
theme: 'default',
|
|
155
|
-
});
|
|
156
|
-
return highlighted;
|
|
157
|
-
}
|
|
158
|
-
catch {
|
|
159
|
-
// Fallback to plain colored text if highlighting fails
|
|
160
|
-
return chalk.hex(themeColors.tool)(String(code).trim());
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
// Inline code (`code`)
|
|
164
|
-
result = result.replace(/`([^`]+)`/g, (_match, code) => {
|
|
165
|
-
return chalk.hex(themeColors.tool)(String(code).trim());
|
|
166
|
-
});
|
|
167
|
-
// Bold (**text** or __text__)
|
|
168
|
-
result = result.replace(/\*\*([^*]+)\*\*/g, (_match, text) => {
|
|
169
|
-
return chalk.hex(themeColors.white).bold(text);
|
|
170
|
-
});
|
|
171
|
-
result = result.replace(/__([^_]+)__/g, (_match, text) => {
|
|
172
|
-
return chalk.hex(themeColors.white).bold(text);
|
|
173
|
-
});
|
|
174
|
-
// Italic (*text* or _text_)
|
|
175
|
-
result = result.replace(/\*([^*]+)\*/g, (_match, text) => {
|
|
176
|
-
return chalk.hex(themeColors.white).italic(text);
|
|
177
|
-
});
|
|
178
|
-
result = result.replace(/_([^_]+)_/g, (_match, text) => {
|
|
179
|
-
return chalk.hex(themeColors.white).italic(text);
|
|
180
|
-
});
|
|
181
|
-
// Headings (# Heading)
|
|
182
|
-
result = result.replace(/^(#{1,6})\s+(.+)$/gm, (_match, _hashes, text) => {
|
|
183
|
-
return chalk.hex(themeColors.primary).bold(text);
|
|
184
|
-
});
|
|
185
|
-
// Links [text](url)
|
|
186
|
-
result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_match, text, url) => {
|
|
187
|
-
return (chalk.hex(themeColors.info).underline(text) +
|
|
188
|
-
' ' +
|
|
189
|
-
chalk.hex(themeColors.secondary)(`(${url})`));
|
|
190
|
-
});
|
|
191
|
-
// Blockquotes (> text)
|
|
192
|
-
result = result.replace(/^>\s+(.+)$/gm, (_match, text) => {
|
|
193
|
-
return chalk.hex(themeColors.secondary).italic(`> ${text}`);
|
|
194
|
-
});
|
|
195
|
-
// List items (- item or * item or 1. item)
|
|
196
|
-
result = result.replace(/^[\s]*[-*]\s+(.+)$/gm, (_match, text) => {
|
|
197
|
-
return chalk.hex(themeColors.white)(`• ${text}`);
|
|
198
|
-
});
|
|
199
|
-
result = result.replace(/^[\s]*\d+\.\s+(.+)$/gm, (_match, text) => {
|
|
200
|
-
return chalk.hex(themeColors.white)(text);
|
|
201
|
-
});
|
|
202
|
-
return result;
|
|
203
|
-
}
|
|
5
|
+
import { parseMarkdown } from '../markdown-parser/index.js';
|
|
204
6
|
export default memo(function AssistantMessage({ message, model, }) {
|
|
205
7
|
const { colors } = useTheme();
|
|
206
8
|
// Render markdown to terminal-formatted text with theme colors
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant-message.js","sourceRoot":"","sources":["../../source/components/assistant-message.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AACpC,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAE1C,OAAO,
|
|
1
|
+
{"version":3,"file":"assistant-message.js","sourceRoot":"","sources":["../../source/components/assistant-message.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AACpC,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAC,aAAa,EAAC,MAAM,yBAAyB,CAAC;AAEtD,eAAe,IAAI,CAAC,SAAS,gBAAgB,CAAC,EAC7C,OAAO,EACP,KAAK,GACkB;IACvB,MAAM,EAAC,MAAM,EAAC,GAAG,QAAQ,EAAE,CAAC;IAE5B,+DAA+D;IAC/D,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,IAAI,CAAC;YACJ,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACR,mDAAmD;YACnD,OAAO,OAAO,CAAC;QAChB,CAAC;IACF,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtB,OAAO,CACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,aAC1C,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YACnB,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,mBAC/B,KAAK,SACA,GACF,EACN,KAAC,IAAI,cAAE,eAAe,GAAQ,IACzB,CACN,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import type { ThemePreset } from '../types/ui.js';
|
|
2
|
-
|
|
3
|
-
hasUpdate: boolean;
|
|
4
|
-
currentVersion: string;
|
|
5
|
-
latestVersion?: string;
|
|
6
|
-
updateCommand?: string;
|
|
7
|
-
}
|
|
2
|
+
import type { UpdateInfo } from '../types/utils.js';
|
|
8
3
|
declare const _default: import("react").NamedExoticComponent<{
|
|
9
4
|
provider: string;
|
|
10
5
|
model: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../source/components/status.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../source/components/status.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;;cAcnC,MAAM;WACT,MAAM;WACN,WAAW;iBACL,UAAU,GAAG,IAAI;qBACb,OAAO;;AAXzB,wBAkIG"}
|
|
@@ -8,6 +8,7 @@ import { confDirMap } from '../config/index.js';
|
|
|
8
8
|
import { themes, getThemeColors } from '../config/themes.js';
|
|
9
9
|
// Get CWD once at module load time
|
|
10
10
|
const cwd = process.cwd();
|
|
11
|
+
// Using UpdateInfo from '../types/utils.js' for type consistency
|
|
11
12
|
export default memo(function Status({ provider, model, theme, updateInfo, agentsMdLoaded, }) {
|
|
12
13
|
const { boxWidth, isNarrow, truncatePath } = useResponsiveTerminal();
|
|
13
14
|
const colors = getThemeColors(theme);
|
|
@@ -15,8 +16,8 @@ export default memo(function Status({ provider, model, theme, updateInfo, agents
|
|
|
15
16
|
const hasAgentsMd = agentsMdLoaded ?? existsSync(`${cwd}/AGENTS.md`);
|
|
16
17
|
// Calculate max path length based on terminal size
|
|
17
18
|
const maxPathLength = isNarrow ? 30 : 60;
|
|
18
|
-
return (_jsx(_Fragment, { children: isNarrow ? (_jsxs(Box, { flexDirection: "column", marginBottom: 1, borderStyle: "round", borderColor: colors.info, paddingY: 1, paddingX: 2, children: [_jsxs(Text, { color: colors.info, children: [_jsx(Text, { bold: true, children: "CWD: " }), truncatePath(cwd, maxPathLength)] }), _jsxs(Text, { color: colors.success, children: [_jsx(Text, { bold: true, children: "Model: " }), model] }), _jsxs(Text, { color: colors.primary, children: [_jsx(Text, { bold: true, children: "Theme: " }), themes[theme].displayName] }), hasAgentsMd ? (_jsx(Text, { color: colors.secondary, italic: true, children: "\u2713 AGENTS.md" })) : (_jsx(Text, { color: colors.secondary, italic: true, children: "\u2717 No AGENTS.md" })), updateInfo?.hasUpdate && (_jsxs(Text, { color: colors.warning, children: ["\u26A0 v", updateInfo.currentVersion, " \u2192 v", updateInfo.latestVersion] }))] })) : (
|
|
19
|
+
return (_jsx(_Fragment, { children: isNarrow ? (_jsxs(Box, { flexDirection: "column", marginBottom: 1, borderStyle: "round", borderColor: colors.info, paddingY: 1, paddingX: 2, children: [_jsxs(Text, { color: colors.info, children: [_jsx(Text, { bold: true, children: "CWD: " }), truncatePath(cwd, maxPathLength)] }), _jsxs(Text, { color: colors.success, children: [_jsx(Text, { bold: true, children: "Model: " }), model] }), _jsxs(Text, { color: colors.primary, children: [_jsx(Text, { bold: true, children: "Theme: " }), themes[theme].displayName] }), hasAgentsMd ? (_jsx(Text, { color: colors.secondary, italic: true, children: "\u2713 AGENTS.md" })) : (_jsx(Text, { color: colors.secondary, italic: true, children: "\u2717 No AGENTS.md" })), updateInfo?.hasUpdate && (_jsxs(_Fragment, { children: [_jsxs(Text, { color: colors.warning, children: ["\u26A0 v", updateInfo.currentVersion, " \u2192 v", updateInfo.latestVersion] }), updateInfo.updateCommand ? (_jsxs(Text, { color: colors.secondary, children: ["\u21B3 Run: /update or ", updateInfo.updateCommand] })) : updateInfo.updateMessage ? (_jsx(Text, { color: colors.secondary, children: updateInfo.updateMessage })) : null] }))] })) : (
|
|
19
20
|
/* Normal/Wide terminal: full layout with TitledBox */
|
|
20
|
-
_jsxs(TitledBox, { borderStyle: "round", titles: ['Status'], titleStyles: titleStyles.pill, width: boxWidth, borderColor: colors.info, paddingX: 2, paddingY: 1, flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { color: colors.info, children: [_jsx(Text, { bold: true, children: "CWD: " }), truncatePath(cwd, maxPathLength)] }), _jsxs(Text, { color: colors.info, children: [_jsx(Text, { bold: true, children: "Config: " }), truncatePath(confDirMap['agents.config.json'], maxPathLength)] }), _jsxs(Text, { color: colors.success, children: [_jsx(Text, { bold: true, children: "Provider: " }), provider, ", ", _jsx(Text, { bold: true, children: "Model: " }), model] }), _jsxs(Text, { color: colors.primary, children: [_jsx(Text, { bold: true, children: "Theme: " }), themes[theme].displayName] }), hasAgentsMd ? (_jsx(Text, { color: colors.secondary, italic: true, children: _jsx(Text, { children: "\u21B3 Using AGENTS.md. Project initialized" }) })) : (_jsx(Text, { color: colors.secondary, italic: true, children: "\u21B3 No AGENTS.md file found, run `/init` to initialize this directory" })), updateInfo?.hasUpdate && (_jsxs(_Fragment, { children: [_jsxs(Text, { color: colors.warning, children: [_jsx(Text, { bold: true, children: "Update Available: " }), "v", updateInfo.currentVersion, " \u2192 v", updateInfo.latestVersion] }), updateInfo.updateCommand
|
|
21
|
+
_jsxs(TitledBox, { borderStyle: "round", titles: ['Status'], titleStyles: titleStyles.pill, width: boxWidth, borderColor: colors.info, paddingX: 2, paddingY: 1, flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { color: colors.info, children: [_jsx(Text, { bold: true, children: "CWD: " }), truncatePath(cwd, maxPathLength)] }), _jsxs(Text, { color: colors.info, children: [_jsx(Text, { bold: true, children: "Config: " }), truncatePath(confDirMap['agents.config.json'], maxPathLength)] }), _jsxs(Text, { color: colors.success, children: [_jsx(Text, { bold: true, children: "Provider: " }), provider, ", ", _jsx(Text, { bold: true, children: "Model: " }), model] }), _jsxs(Text, { color: colors.primary, children: [_jsx(Text, { bold: true, children: "Theme: " }), themes[theme].displayName] }), hasAgentsMd ? (_jsx(Text, { color: colors.secondary, italic: true, children: _jsx(Text, { children: "\u21B3 Using AGENTS.md. Project initialized" }) })) : (_jsx(Text, { color: colors.secondary, italic: true, children: "\u21B3 No AGENTS.md file found, run `/init` to initialize this directory" })), updateInfo?.hasUpdate && (_jsxs(_Fragment, { children: [_jsxs(Text, { color: colors.warning, children: [_jsx(Text, { bold: true, children: "Update Available: " }), "v", updateInfo.currentVersion, " \u2192 v", updateInfo.latestVersion] }), updateInfo.updateCommand ? (_jsxs(Text, { color: colors.secondary, children: ["\u21B3 Run: /update or ", updateInfo.updateCommand] })) : updateInfo.updateMessage ? (_jsx(Text, { color: colors.secondary, children: updateInfo.updateMessage })) : null] }))] }, colors.primary)) }));
|
|
21
22
|
});
|
|
22
23
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../source/components/status.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAC,UAAU,EAAC,MAAM,IAAI,CAAC;AAE9B,OAAO,EAAC,SAAS,EAAE,WAAW,EAAC,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAC,qBAAqB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAC,MAAM,EAAE,cAAc,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../source/components/status.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-input.d.ts","sourceRoot":"","sources":["../../source/components/user-input.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAC,eAAe,EAA0B,MAAM,cAAc,CAAC;AAOtE,UAAU,SAAS;IAClB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EACjC,QAAQ,EACR,WAAW,EACX,cAAmB,EACnB,QAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,eAA0B,GAC1B,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"user-input.d.ts","sourceRoot":"","sources":["../../source/components/user-input.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAC,eAAe,EAA0B,MAAM,cAAc,CAAC;AAOtE,UAAU,SAAS;IAClB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EACjC,QAAQ,EACR,WAAW,EACX,cAAmB,EACnB,QAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,eAA0B,GAC1B,EAAE,SAAS,2CA6eX"}
|