@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-detector.d.ts","sourceRoot":"","sources":["../../source/utils/installation-detector.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC;AAWxE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAuB5E;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAoC7D"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { fileURLToPath } from 'url';
|
|
2
|
+
import { dirname, join, sep } from 'path';
|
|
3
|
+
import { existsSync } from 'fs';
|
|
4
|
+
import { logWarning } from './message-queue.js';
|
|
5
|
+
const safeProcess = typeof process !== 'undefined' ? process : {};
|
|
6
|
+
/**
|
|
7
|
+
* Detects installation method from a given module path.
|
|
8
|
+
* Exported for testing purposes.
|
|
9
|
+
* @param modulePath The path to check
|
|
10
|
+
* @returns The detected installation method or null if not detected from path
|
|
11
|
+
*/
|
|
12
|
+
export function detectFromPath(modulePath) {
|
|
13
|
+
// Strategy 1: Check for Nix installation (most specific)
|
|
14
|
+
// Nix store has `/nix/store/` path with store hashes - this is very reliable
|
|
15
|
+
if (modulePath.includes('/nix/store/')) {
|
|
16
|
+
return 'nix';
|
|
17
|
+
}
|
|
18
|
+
// Strategy 2: Check for Homebrew installation via path
|
|
19
|
+
// Homebrew puts packages under Cellar directory in standard locations
|
|
20
|
+
// Common paths: /opt/homebrew, /usr/local, /home/linuxbrew/.linuxbrew
|
|
21
|
+
if (modulePath.includes(`${sep}Cellar${sep}`) ||
|
|
22
|
+
modulePath.includes(`${sep}homebrew${sep}`)) {
|
|
23
|
+
return 'homebrew';
|
|
24
|
+
}
|
|
25
|
+
// Strategy 3: Check for npm/pnpm/yarn installation using multiple signals
|
|
26
|
+
if (isNpmBasedInstallation(modulePath)) {
|
|
27
|
+
return 'npm';
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Detects how Nanocoder was installed by using multiple detection strategies.
|
|
33
|
+
* Uses a combination of path inspection, environment variables, and file system markers.
|
|
34
|
+
* An environment variable `NANOCODER_INSTALL_METHOD` can be used to override detection for testing.
|
|
35
|
+
* @returns {InstallationMethod} The detected installation method.
|
|
36
|
+
*/
|
|
37
|
+
export function detectInstallationMethod() {
|
|
38
|
+
// Env var override has highest priority for testing / debugging
|
|
39
|
+
const envOverride = safeProcess.env?.NANOCODER_INSTALL_METHOD;
|
|
40
|
+
if (envOverride) {
|
|
41
|
+
const validMethods = [
|
|
42
|
+
'npm',
|
|
43
|
+
'homebrew',
|
|
44
|
+
'nix',
|
|
45
|
+
'unknown',
|
|
46
|
+
];
|
|
47
|
+
if (validMethods.includes(envOverride)) {
|
|
48
|
+
return envOverride;
|
|
49
|
+
}
|
|
50
|
+
// Warn about invalid value but continue with normal detection
|
|
51
|
+
logWarning(`Invalid NANOCODER_INSTALL_METHOD: "${envOverride}". Valid values: ${validMethods.join(', ')}`);
|
|
52
|
+
}
|
|
53
|
+
// Strategy 1: Check environment variables (most reliable after override)
|
|
54
|
+
if (safeProcess.env?.HOMEBREW_PREFIX || safeProcess.env?.HOMEBREW_CELLAR) {
|
|
55
|
+
return 'homebrew';
|
|
56
|
+
}
|
|
57
|
+
// Use the module path of this file (compiled output in `dist`) to determine how it was installed.
|
|
58
|
+
const modulePath = dirname(fileURLToPath(import.meta.url));
|
|
59
|
+
// Strategy 2: Check path-based detection
|
|
60
|
+
const pathResult = detectFromPath(modulePath);
|
|
61
|
+
if (pathResult) {
|
|
62
|
+
return pathResult;
|
|
63
|
+
}
|
|
64
|
+
return 'unknown';
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Checks if this is an npm-based installation (npm, pnpm, or yarn).
|
|
68
|
+
* Uses multiple detection strategies for robustness across different package managers.
|
|
69
|
+
*/
|
|
70
|
+
function isNpmBasedInstallation(modulePath) {
|
|
71
|
+
// Check 1: Environment variables set by package managers
|
|
72
|
+
if (safeProcess.env?.npm_config_prefix ||
|
|
73
|
+
safeProcess.env?.npm_config_global ||
|
|
74
|
+
safeProcess.env?.PNPM_HOME ||
|
|
75
|
+
safeProcess.env?.npm_execpath) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
// Check 2: Standard node_modules path (npm, yarn v1)
|
|
79
|
+
if (modulePath.includes('node_modules')) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
// Check 3: pnpm store structure (.pnpm directory)
|
|
83
|
+
if (modulePath.includes(`.pnpm${sep}`)) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
// Check 4: Look for .bin directory in parent paths (all package managers use this)
|
|
87
|
+
// This handles symlinked executables
|
|
88
|
+
const binDirPattern = `${sep}.bin${sep}`;
|
|
89
|
+
if (modulePath.includes(binDirPattern)) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
// Check 5: Look for package.json in expected locations relative to the module
|
|
93
|
+
// For global installs, package.json should be in parent directories
|
|
94
|
+
// This handles edge cases like custom install locations
|
|
95
|
+
return hasPackageJsonMarker(modulePath);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Walks up the directory tree looking for package.json as a marker of npm installation.
|
|
99
|
+
* Only checks a few levels to avoid excessive file system operations.
|
|
100
|
+
*/
|
|
101
|
+
function hasPackageJsonMarker(startPath) {
|
|
102
|
+
let currentPath = startPath;
|
|
103
|
+
const maxLevelsToCheck = 4; // Limit to prevent excessive traversal
|
|
104
|
+
for (let i = 0; i < maxLevelsToCheck; i++) {
|
|
105
|
+
const packageJsonPath = join(currentPath, 'package.json');
|
|
106
|
+
if (existsSync(packageJsonPath)) {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
const parentPath = dirname(currentPath);
|
|
110
|
+
// Stop if we've reached the root
|
|
111
|
+
if (parentPath === currentPath) {
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
currentPath = parentPath;
|
|
115
|
+
}
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=installation-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-detector.js","sourceRoot":"","sources":["../../source/utils/installation-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-detector.spec.d.ts","sourceRoot":"","sources":["../../source/utils/installation-detector.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { detectInstallationMethod, detectFromPath, } from './installation-detector.js';
|
|
3
|
+
console.log(`\ninstallation-detector.spec.ts`);
|
|
4
|
+
test.beforeEach(() => {
|
|
5
|
+
// Clean up environment variables before each test
|
|
6
|
+
delete process.env.NANOCODER_INSTALL_METHOD;
|
|
7
|
+
delete process.env.npm_config_prefix;
|
|
8
|
+
delete process.env.npm_config_global;
|
|
9
|
+
delete process.env.PNPM_HOME;
|
|
10
|
+
delete process.env.npm_execpath;
|
|
11
|
+
delete process.env.HOMEBREW_PREFIX;
|
|
12
|
+
delete process.env.HOMEBREW_CELLAR;
|
|
13
|
+
});
|
|
14
|
+
// Environment override tests
|
|
15
|
+
test('detectInstallationMethod: respects env override for npm', t => {
|
|
16
|
+
process.env.NANOCODER_INSTALL_METHOD = 'npm';
|
|
17
|
+
t.is(detectInstallationMethod(), 'npm');
|
|
18
|
+
});
|
|
19
|
+
test('detectInstallationMethod: respects env override for homebrew', t => {
|
|
20
|
+
process.env.NANOCODER_INSTALL_METHOD = 'homebrew';
|
|
21
|
+
t.is(detectInstallationMethod(), 'homebrew');
|
|
22
|
+
});
|
|
23
|
+
test('detectInstallationMethod: respects env override for nix', t => {
|
|
24
|
+
process.env.NANOCODER_INSTALL_METHOD = 'nix';
|
|
25
|
+
t.is(detectInstallationMethod(), 'nix');
|
|
26
|
+
});
|
|
27
|
+
test('detectInstallationMethod: respects env override for unknown', t => {
|
|
28
|
+
process.env.NANOCODER_INSTALL_METHOD = 'unknown';
|
|
29
|
+
t.is(detectInstallationMethod(), 'unknown');
|
|
30
|
+
});
|
|
31
|
+
// Homebrew environment variable detection
|
|
32
|
+
test('detectInstallationMethod: detects homebrew via HOMEBREW_PREFIX', t => {
|
|
33
|
+
process.env.HOMEBREW_PREFIX = '/opt/homebrew';
|
|
34
|
+
t.is(detectInstallationMethod(), 'homebrew');
|
|
35
|
+
});
|
|
36
|
+
test('detectInstallationMethod: detects homebrew via HOMEBREW_CELLAR', t => {
|
|
37
|
+
process.env.HOMEBREW_CELLAR = '/opt/homebrew/Cellar';
|
|
38
|
+
t.is(detectInstallationMethod(), 'homebrew');
|
|
39
|
+
});
|
|
40
|
+
// NPM environment variable detection
|
|
41
|
+
test('detectInstallationMethod: detects npm via npm_config_prefix', t => {
|
|
42
|
+
process.env.npm_config_prefix = '/usr/local';
|
|
43
|
+
t.is(detectInstallationMethod(), 'npm');
|
|
44
|
+
});
|
|
45
|
+
test('detectInstallationMethod: detects npm via npm_config_global', t => {
|
|
46
|
+
process.env.npm_config_global = 'true';
|
|
47
|
+
t.is(detectInstallationMethod(), 'npm');
|
|
48
|
+
});
|
|
49
|
+
test('detectInstallationMethod: detects npm via PNPM_HOME', t => {
|
|
50
|
+
process.env.PNPM_HOME = '/home/user/.local/share/pnpm';
|
|
51
|
+
t.is(detectInstallationMethod(), 'npm');
|
|
52
|
+
});
|
|
53
|
+
test('detectInstallationMethod: detects npm via npm_execpath', t => {
|
|
54
|
+
process.env.npm_execpath = '/usr/local/lib/node_modules/npm/bin/npm-cli.js';
|
|
55
|
+
t.is(detectInstallationMethod(), 'npm');
|
|
56
|
+
});
|
|
57
|
+
// Path Detection Tests
|
|
58
|
+
// These tests verify the detectFromPath function correctly identifies installation methods from paths
|
|
59
|
+
test('detectFromPath: detects nix from /nix/store path', t => {
|
|
60
|
+
const path = '/nix/store/abc123-nanocoder-1.0.0/lib/node_modules/@nanocollective/nanocoder/dist';
|
|
61
|
+
t.is(detectFromPath(path), 'nix');
|
|
62
|
+
});
|
|
63
|
+
test('detectFromPath: detects homebrew from Cellar path (macOS Intel)', t => {
|
|
64
|
+
const path = '/usr/local/Cellar/nanocoder/1.0.0/libexec/lib/node_modules/@nanocollective/nanocoder/dist';
|
|
65
|
+
t.is(detectFromPath(path), 'homebrew');
|
|
66
|
+
});
|
|
67
|
+
test('detectFromPath: detects homebrew from Cellar path (macOS ARM)', t => {
|
|
68
|
+
const path = '/opt/homebrew/Cellar/nanocoder/1.0.0/libexec/lib/node_modules/@nanocollective/nanocoder/dist';
|
|
69
|
+
t.is(detectFromPath(path), 'homebrew');
|
|
70
|
+
});
|
|
71
|
+
test('detectFromPath: detects homebrew from generic homebrew path', t => {
|
|
72
|
+
const path = '/opt/homebrew/lib/node_modules/@nanocollective/nanocoder/dist';
|
|
73
|
+
t.is(detectFromPath(path), 'homebrew');
|
|
74
|
+
});
|
|
75
|
+
test('detectFromPath: detects homebrew from Linux homebrew path', t => {
|
|
76
|
+
const path = '/home/linuxbrew/.linuxbrew/Cellar/nanocoder/1.0.0/lib/node_modules/@nanocollective/nanocoder/dist';
|
|
77
|
+
t.is(detectFromPath(path), 'homebrew');
|
|
78
|
+
});
|
|
79
|
+
test('detectFromPath: detects npm from node_modules path (global)', t => {
|
|
80
|
+
const path = '/usr/local/lib/node_modules/@nanocollective/nanocoder/dist';
|
|
81
|
+
t.is(detectFromPath(path), 'npm');
|
|
82
|
+
});
|
|
83
|
+
test('detectFromPath: detects npm from node_modules path (local)', t => {
|
|
84
|
+
const path = '/home/user/project/node_modules/@nanocollective/nanocoder/dist';
|
|
85
|
+
t.is(detectFromPath(path), 'npm');
|
|
86
|
+
});
|
|
87
|
+
test('detectFromPath: detects npm from pnpm store path', t => {
|
|
88
|
+
const path = '/home/user/.pnpm-store/.pnpm/@nanocollective+nanocoder@1.0.0/node_modules/@nanocollective/nanocoder/dist';
|
|
89
|
+
t.is(detectFromPath(path), 'npm');
|
|
90
|
+
});
|
|
91
|
+
test('detectFromPath: detects npm from .bin directory', t => {
|
|
92
|
+
const path = '/usr/local/lib/node_modules/.bin/nanocoder';
|
|
93
|
+
t.is(detectFromPath(path), 'npm');
|
|
94
|
+
});
|
|
95
|
+
test('detectFromPath: returns null for unrecognized paths', t => {
|
|
96
|
+
const path = '/home/user/Downloads/nanocoder/dist';
|
|
97
|
+
t.is(detectFromPath(path), null);
|
|
98
|
+
});
|
|
99
|
+
test('detectFromPath: detects npm from Windows AppData path', t => {
|
|
100
|
+
// Windows npm global installations typically go to AppData
|
|
101
|
+
const path = 'C:\\Users\\user\\AppData\\Roaming\\npm\\node_modules\\@nanocollective\\nanocoder\\dist';
|
|
102
|
+
t.is(detectFromPath(path), 'npm');
|
|
103
|
+
});
|
|
104
|
+
test('detectFromPath: nix takes precedence over node_modules', t => {
|
|
105
|
+
// Edge case: nix store might contain "node_modules" in the path
|
|
106
|
+
const path = '/nix/store/abc123-nanocoder-1.0.0/lib/node_modules/@nanocollective/nanocoder/dist';
|
|
107
|
+
t.is(detectFromPath(path), 'nix');
|
|
108
|
+
});
|
|
109
|
+
test('detectFromPath: homebrew takes precedence over node_modules', t => {
|
|
110
|
+
// Edge case: homebrew path contains node_modules
|
|
111
|
+
const path = '/opt/homebrew/Cellar/nanocoder/1.0.0/lib/node_modules/@nanocollective/nanocoder/dist';
|
|
112
|
+
t.is(detectFromPath(path), 'homebrew');
|
|
113
|
+
});
|
|
114
|
+
// Edge case tests
|
|
115
|
+
test('detectInstallationMethod: env vars take precedence over path', t => {
|
|
116
|
+
// Even if running from a homebrew path, HOMEBREW_PREFIX should be checked first
|
|
117
|
+
process.env.HOMEBREW_PREFIX = '/opt/homebrew';
|
|
118
|
+
t.is(detectInstallationMethod(), 'homebrew');
|
|
119
|
+
});
|
|
120
|
+
test('detectInstallationMethod: warns on invalid env override and continues detection', t => {
|
|
121
|
+
// Set an invalid value
|
|
122
|
+
process.env.NANOCODER_INSTALL_METHOD = 'invalid-method';
|
|
123
|
+
// Capture console.log (logWarning falls back to console.log when queue not available)
|
|
124
|
+
const warnings = [];
|
|
125
|
+
const originalLog = console.log;
|
|
126
|
+
console.log = (msg) => {
|
|
127
|
+
warnings.push(msg);
|
|
128
|
+
};
|
|
129
|
+
// Should fall back to normal detection
|
|
130
|
+
const result = detectInstallationMethod();
|
|
131
|
+
// Restore console.log
|
|
132
|
+
console.log = originalLog;
|
|
133
|
+
// Should have warned about invalid value
|
|
134
|
+
t.is(warnings.length, 1);
|
|
135
|
+
t.regex(warnings[0], /Invalid NANOCODER_INSTALL_METHOD/);
|
|
136
|
+
t.regex(warnings[0], /invalid-method/);
|
|
137
|
+
// Should still return a valid installation method
|
|
138
|
+
// (will be detected from the actual running environment - npm in this case since we're in node_modules)
|
|
139
|
+
t.true(['npm', 'homebrew', 'nix', 'unknown'].includes(result));
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=installation-detector.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installation-detector.spec.js","sourceRoot":"","sources":["../../source/utils/installation-detector.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,4 +2,6 @@ import React from 'react';
|
|
|
2
2
|
export declare function setGlobalMessageQueue(addToChatQueue: (component: React.ReactNode) => void): void;
|
|
3
3
|
export declare function logInfo(message: string, hideBox?: boolean): void;
|
|
4
4
|
export declare function logError(message: string, hideBox?: boolean): void;
|
|
5
|
+
export declare function logSuccess(message: string, hideBox?: boolean): void;
|
|
6
|
+
export declare function logWarning(message: string, hideBox?: boolean): void;
|
|
5
7
|
//# sourceMappingURL=message-queue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../source/utils/message-queue.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"message-queue.d.ts","sourceRoot":"","sources":["../../source/utils/message-queue.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,wBAAgB,qBAAqB,CACpC,cAAc,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,QAGpD;AAiDD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,OAAc,QAE/D;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,OAAc,QAEhE;AAGD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,OAAc,QAElE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,OAAc,QAElE"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import ErrorMessage from '../components/error-message.js';
|
|
3
3
|
import InfoMessage from '../components/info-message.js';
|
|
4
4
|
import SuccessMessage from '../components/success-message.js';
|
|
5
|
+
import WarningMessage from '../components/warning-message.js';
|
|
5
6
|
// Global message queue function - will be set by App component
|
|
6
7
|
let globalAddToChatQueue = null;
|
|
7
8
|
let componentKeyCounter = 0;
|
|
@@ -30,6 +31,9 @@ function addMessageToQueue(type, message, hideBox = true) {
|
|
|
30
31
|
case 'success':
|
|
31
32
|
component = (_jsx(SuccessMessage, { message: message, hideBox: hideBox }, key));
|
|
32
33
|
break;
|
|
34
|
+
case 'warning':
|
|
35
|
+
component = (_jsx(WarningMessage, { message: message, hideBox: hideBox }, key));
|
|
36
|
+
break;
|
|
33
37
|
case 'info':
|
|
34
38
|
default:
|
|
35
39
|
component = _jsx(InfoMessage, { message: message, hideBox: hideBox }, key);
|
|
@@ -44,4 +48,11 @@ export function logInfo(message, hideBox = true) {
|
|
|
44
48
|
export function logError(message, hideBox = true) {
|
|
45
49
|
addMessageToQueue('error', message, hideBox);
|
|
46
50
|
}
|
|
51
|
+
// Temporarily ingored in `knip.json`. We do want this. We just haven't used it yet.
|
|
52
|
+
export function logSuccess(message, hideBox = true) {
|
|
53
|
+
addMessageToQueue('success', message, hideBox);
|
|
54
|
+
}
|
|
55
|
+
export function logWarning(message, hideBox = true) {
|
|
56
|
+
addMessageToQueue('warning', message, hideBox);
|
|
57
|
+
}
|
|
47
58
|
//# sourceMappingURL=message-queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-queue.js","sourceRoot":"","sources":["../../source/utils/message-queue.tsx"],"names":[],"mappings":";AACA,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAG1D,+DAA+D;AAC/D,IAAI,oBAAoB,GAAkD,IAAI,CAAC;AAC/E,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAE5B,qCAAqC;AACrC,MAAM,UAAU,qBAAqB,CACpC,cAAoD;IAEpD,oBAAoB,GAAG,cAAc,CAAC;AACvC,CAAC;AAED,0CAA0C;AAC1C,SAAS,UAAU;IAClB,mBAAmB,EAAE,CAAC;IACtB,OAAO,cAAc,mBAAmB,EAAE,CAAC;AAC5C,CAAC;AAED,4BAA4B;AAC5B,SAAS,iBAAiB,CACzB,IAAiB,EACjB,OAAe,EACf,UAAmB,IAAI;IAEvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC3B,6CAA6C;QAC7C,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO;IACR,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,SAA0B,CAAC;IAE/B,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,OAAO;YACX,SAAS,GAAG,CACX,KAAC,YAAY,IAAW,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAvC,GAAG,CAAwC,CAC9D,CAAC;YACF,MAAM;QACP,KAAK,SAAS;YACb,SAAS,GAAG,CACX,KAAC,cAAc,IAAW,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAvC,GAAG,CAAwC,CAChE,CAAC;YACF,MAAM;QACP,KAAK,MAAM,CAAC;QACZ;YACC,SAAS,GAAG,KAAC,WAAW,IAAW,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAvC,GAAG,CAAwC,CAAC;YAC1E,MAAM;IACR,CAAC;IAED,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,UAAmB,IAAI;IAC/D,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,UAAmB,IAAI;IAChE,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC"}
|
|
1
|
+
{"version":3,"file":"message-queue.js","sourceRoot":"","sources":["../../source/utils/message-queue.tsx"],"names":[],"mappings":";AACA,OAAO,YAAY,MAAM,4BAA4B,CAAC;AACtD,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAC1D,OAAO,cAAc,MAAM,8BAA8B,CAAC;AAG1D,+DAA+D;AAC/D,IAAI,oBAAoB,GAAkD,IAAI,CAAC;AAC/E,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAE5B,qCAAqC;AACrC,MAAM,UAAU,qBAAqB,CACpC,cAAoD;IAEpD,oBAAoB,GAAG,cAAc,CAAC;AACvC,CAAC;AAED,0CAA0C;AAC1C,SAAS,UAAU;IAClB,mBAAmB,EAAE,CAAC;IACtB,OAAO,cAAc,mBAAmB,EAAE,CAAC;AAC5C,CAAC;AAED,4BAA4B;AAC5B,SAAS,iBAAiB,CACzB,IAAiB,EACjB,OAAe,EACf,UAAmB,IAAI;IAEvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC3B,6CAA6C;QAC7C,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO;IACR,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,SAA0B,CAAC;IAE/B,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,OAAO;YACX,SAAS,GAAG,CACX,KAAC,YAAY,IAAW,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAvC,GAAG,CAAwC,CAC9D,CAAC;YACF,MAAM;QACP,KAAK,SAAS;YACb,SAAS,GAAG,CACX,KAAC,cAAc,IAAW,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAvC,GAAG,CAAwC,CAChE,CAAC;YACF,MAAM;QACP,KAAK,SAAS;YACb,SAAS,GAAG,CACX,KAAC,cAAc,IAAW,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAvC,GAAG,CAAwC,CAChE,CAAC;YACF,MAAM;QACP,KAAK,MAAM,CAAC;QACZ;YACC,SAAS,GAAG,KAAC,WAAW,IAAW,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAvC,GAAG,CAAwC,CAAC;YAC1E,MAAM;IACR,CAAC;IAED,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,UAAmB,IAAI;IAC/D,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,UAAmB,IAAI;IAChE,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,UAAmB,IAAI;IAClE,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,UAAmB,IAAI;IAClE,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paste-detection.d.ts","sourceRoot":"","sources":["../../source/utils/paste-detection.ts"],"names":[],"mappings":"AAGA,UAAU,qBAAqB;IAE9B,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,MAAM,CAAC;CACtB;AAQD,qBAAa,aAAa;IACzB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,eAAe,CAAK;IAE5B;;;;;OAKG;IACH,WAAW,CACV,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,qBAA6C,GACpD;QACF,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;QAC3C,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE;YACR,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC;YACnB,UAAU,EAAE,MAAM,CAAC;SACnB,CAAC;KACF;
|
|
1
|
+
{"version":3,"file":"paste-detection.d.ts","sourceRoot":"","sources":["../../source/utils/paste-detection.ts"],"names":[],"mappings":"AAGA,UAAU,qBAAqB;IAE9B,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,MAAM,CAAC;CACtB;AAQD,qBAAa,aAAa;IACzB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,eAAe,CAAK;IAE5B;;;;;OAKG;IACH,WAAW,CACV,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,qBAA6C,GACpD;QACF,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;QAC3C,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE;YACR,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC;YACnB,UAAU,EAAE,MAAM,CAAC;SACnB,CAAC;KACF;IAmED;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAI/B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// CLI Paste Detection Utilities
|
|
2
2
|
// Since CLI applications don't receive direct paste events, we use heuristics
|
|
3
3
|
const DEFAULT_PASTE_OPTIONS = {
|
|
4
|
-
timeThreshold:
|
|
5
|
-
charThreshold:
|
|
4
|
+
timeThreshold: 50, // Increased to 50ms to be more forgiving of fast typing
|
|
5
|
+
charThreshold: 5, // Lower threshold - detect pastes of 5+ chars (size method needs 10+ chars)
|
|
6
6
|
lineThreshold: 2, // Multiple lines added instantly
|
|
7
7
|
};
|
|
8
8
|
export class PasteDetector {
|
|
@@ -18,7 +18,12 @@ export class PasteDetector {
|
|
|
18
18
|
const currentTime = Date.now();
|
|
19
19
|
const timeElapsed = currentTime - this.lastInputTime;
|
|
20
20
|
const charsAdded = newText.length - this.lastInputLength;
|
|
21
|
-
|
|
21
|
+
// Calculate lines added in THIS change, not total lines in text
|
|
22
|
+
const previousLineCount = this.lastInputLength > 0
|
|
23
|
+
? newText.slice(0, this.lastInputLength).split('\n').length
|
|
24
|
+
: 1;
|
|
25
|
+
const currentLineCount = newText.split('\n').length;
|
|
26
|
+
const linesAdded = currentLineCount - previousLineCount;
|
|
22
27
|
// Get the added text (assuming it's at the end)
|
|
23
28
|
const addedText = newText.slice(this.lastInputLength);
|
|
24
29
|
// Update tracking
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paste-detection.js","sourceRoot":"","sources":["../../source/utils/paste-detection.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,8EAA8E;AAW9E,MAAM,qBAAqB,GAA0B;IACpD,aAAa,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"paste-detection.js","sourceRoot":"","sources":["../../source/utils/paste-detection.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,8EAA8E;AAW9E,MAAM,qBAAqB,GAA0B;IACpD,aAAa,EAAE,EAAE,EAAE,wDAAwD;IAC3E,aAAa,EAAE,CAAC,EAAE,4EAA4E;IAC9F,aAAa,EAAE,CAAC,EAAE,iCAAiC;CACnD,CAAC;AAEF,MAAM,OAAO,aAAa;IACjB,aAAa,GAAG,CAAC,CAAC;IAClB,eAAe,GAAG,CAAC,CAAC;IAE5B;;;;;OAKG;IACH,WAAW,CACV,OAAe,EACf,UAAiC,qBAAqB;QAWtD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;QACrD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QAEzD,gEAAgE;QAChE,MAAM,iBAAiB,GACtB,IAAI,CAAC,eAAe,GAAG,CAAC;YACvB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;YAC3D,CAAC,CAAC,CAAC,CAAC;QACN,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACpD,MAAM,UAAU,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;QAExD,gDAAgD;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEtD,kBAAkB;QAClB,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;QAEtC,MAAM,OAAO,GAAG;YACf,WAAW;YACX,UAAU;YACV,UAAU;SACV,CAAC;QAEF,8CAA8C;QAC9C,IACC,WAAW,GAAG,OAAO,CAAC,aAAa;YACnC,UAAU,GAAG,OAAO,CAAC,aAAa,EACjC,CAAC;YACF,OAAO;gBACN,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM;gBACd,SAAS;gBACT,OAAO;aACP,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,IAAI,UAAU,GAAG,OAAO,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO;gBACN,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM;gBACd,SAAS;gBACT,OAAO;aACP,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACzC,OAAO;gBACN,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,OAAO;gBACf,SAAS;gBACT,OAAO;aACP,CAAC;QACH,CAAC;QAED,OAAO;YACN,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM;YACd,SAAS;YACT,OAAO;SACP,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACJ,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAAY;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IACpC,CAAC;CACD"}
|
|
@@ -16,24 +16,31 @@ test('PasteDetector detects multi-line input as paste', t => {
|
|
|
16
16
|
const multiLineText = 'line1\nline2\nline3\nline4';
|
|
17
17
|
const result = detector.detectPaste(multiLineText);
|
|
18
18
|
t.true(result.isPaste);
|
|
19
|
-
|
|
19
|
+
// With low thresholds, size method triggers first (25 chars > 1*2 = 2)
|
|
20
|
+
// but still correctly detected as paste
|
|
21
|
+
t.true(['size', 'lines'].includes(result.method));
|
|
20
22
|
t.is(result.addedText, multiLineText);
|
|
21
23
|
});
|
|
22
|
-
test('PasteDetector
|
|
24
|
+
test('PasteDetector detects small paste', t => {
|
|
23
25
|
const detector = new PasteDetector();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
t.
|
|
26
|
+
// 15 characters - enough to trigger size detection (> 5*2 = 10)
|
|
27
|
+
const result = detector.detectPaste('small paste txt');
|
|
28
|
+
t.true(result.isPaste);
|
|
29
|
+
t.is(result.method, 'size'); // 15 chars > 5*2 = 10
|
|
27
30
|
});
|
|
28
|
-
test('PasteDetector
|
|
31
|
+
test('PasteDetector does not detect manual typing', async (t) => {
|
|
29
32
|
const detector = new PasteDetector();
|
|
30
|
-
// First input
|
|
33
|
+
// First input - 5 chars, below 10-char size threshold
|
|
31
34
|
const result1 = detector.detectPaste('hello');
|
|
32
35
|
t.false(result1.isPaste);
|
|
33
|
-
|
|
36
|
+
t.is(result1.method, 'none');
|
|
37
|
+
// Wait to simulate human typing speed (not a paste)
|
|
38
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
39
|
+
// Add more text (incremental) - adds " world" (6 chars), still below threshold
|
|
34
40
|
const result2 = detector.detectPaste('hello world');
|
|
35
41
|
t.false(result2.isPaste);
|
|
36
42
|
t.is(result2.addedText, ' world');
|
|
43
|
+
t.is(result2.method, 'none');
|
|
37
44
|
});
|
|
38
45
|
test('PasteDetector reset clears state', t => {
|
|
39
46
|
const detector = new PasteDetector();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paste-detection.spec.js","sourceRoot":"","sources":["../../source/utils/paste-detection.spec.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAEhD,gCAAgC;AAChC,sCAAsC;AAEtC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAEzC,IAAI,CAAC,4CAA4C,EAAE,CAAC,CAAC,EAAE;IACtD,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IAErC,oEAAoE;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAErD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,gCAAgC;IAC7D,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iDAAiD,EAAE,CAAC,CAAC,EAAE;IAC3D,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IAErC,MAAM,aAAa,GAAG,4BAA4B,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAEnD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"paste-detection.spec.js","sourceRoot":"","sources":["../../source/utils/paste-detection.spec.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAEhD,gCAAgC;AAChC,sCAAsC;AAEtC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAEzC,IAAI,CAAC,4CAA4C,EAAE,CAAC,CAAC,EAAE;IACtD,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IAErC,oEAAoE;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAErD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,gCAAgC;IAC7D,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iDAAiD,EAAE,CAAC,CAAC,EAAE;IAC3D,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IAErC,MAAM,aAAa,GAAG,4BAA4B,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAEnD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,uEAAuE;IACvE,wCAAwC;IACxC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,CAAC,CAAC,EAAE;IAC7C,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IAErC,gEAAgE;IAChE,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAEvD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,sBAAsB;AACpD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC7D,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IAErC,sDAAsD;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,oDAAoD;IACpD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvD,+EAA+E;IAC/E,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACpD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kCAAkC,EAAE,CAAC,CAAC,EAAE;IAC5C,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IAErC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,qCAAqC;AAC1E,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paste-utils.d.ts","sourceRoot":"","sources":["../../source/utils/paste-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EAEV,kBAAkB,EAElB,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,WAAW,CAC1B,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,MAAM,EAC3B,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7D,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAC7C,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"paste-utils.d.ts","sourceRoot":"","sources":["../../source/utils/paste-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EAEV,kBAAkB,EAElB,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,WAAW,CAC1B,UAAU,EAAE,MAAM,EAClB,mBAAmB,EAAE,MAAM,EAC3B,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC7D,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAC7C,UAAU,GAAG,IAAI,CAuCnB"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { PlaceholderType, } from '../types/hooks.js';
|
|
2
2
|
export function handlePaste(pastedText, currentDisplayValue, currentPlaceholderContent, detectionMethod) {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
// No minimum threshold - any detected paste gets a placeholder
|
|
4
|
+
// This is especially important for multi-line pastes where only the first line
|
|
5
|
+
// may be captured by the input component
|
|
6
|
+
if (pastedText.length === 0) {
|
|
5
7
|
return null;
|
|
6
8
|
}
|
|
7
9
|
// Generate simple incrementing ID based on existing paste placeholders
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paste-utils.js","sourceRoot":"","sources":["../../source/utils/paste-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,eAAe,GACf,MAAM,gBAAgB,CAAC;AAExB,MAAM,UAAU,WAAW,CAC1B,UAAkB,EAClB,mBAA2B,EAC3B,yBAA6D,EAC7D,eAA+C;IAE/C,
|
|
1
|
+
{"version":3,"file":"paste-utils.js","sourceRoot":"","sources":["../../source/utils/paste-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,eAAe,GACf,MAAM,gBAAgB,CAAC;AAExB,MAAM,UAAU,WAAW,CAC1B,UAAkB,EAClB,mBAA2B,EAC3B,yBAA6D,EAC7D,eAA+C;IAE/C,+DAA+D;IAC/D,+EAA+E;IAC/E,yCAAyC;IACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,uEAAuE;IACvE,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,MAAM,CACzE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,eAAe,CAAC,KAAK,CACjD,CAAC,MAAM,CAAC;IACT,MAAM,OAAO,GAAG,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpD,MAAM,WAAW,GAAG,WAAW,OAAO,KAAK,UAAU,CAAC,MAAM,SAAS,CAAC;IAEtE,MAAM,YAAY,GAA4B;QAC7C,IAAI,EAAE,eAAe,CAAC,KAAK;QAC3B,WAAW,EAAE,WAAW;QACxB,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,UAAU,CAAC,MAAM;QAC/B,eAAe;QACf,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACrB,CAAC;IAEF,MAAM,qBAAqB,GAAG;QAC7B,GAAG,yBAAyB;QAC5B,CAAC,OAAO,CAAC,EAAE,YAAY;KACvB,CAAC;IAEF,mFAAmF;IACnF,kFAAkF;IAClF,MAAM,eAAe,GAAG,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC/D,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC;QACtD,CAAC,CAAC,mBAAmB,GAAG,WAAW,CAAC;IAErC,OAAO;QACN,YAAY,EAAE,eAAe;QAC7B,kBAAkB,EAAE,qBAAqB;KACzC,CAAC;AACH,CAAC"}
|
|
@@ -4,15 +4,31 @@ import { PlaceholderType } from '../types/hooks.js';
|
|
|
4
4
|
// Tests for handlePaste utility function
|
|
5
5
|
// Validates paste handling logic and placeholder creation
|
|
6
6
|
console.log(`\npaste-utils.spec.ts`);
|
|
7
|
-
test('handlePaste returns null for
|
|
8
|
-
const pastedText = '
|
|
7
|
+
test('handlePaste returns null for empty pastes', t => {
|
|
8
|
+
const pastedText = '';
|
|
9
9
|
const currentDisplayValue = 'existing content';
|
|
10
10
|
const currentPlaceholderContent = {};
|
|
11
11
|
const result = handlePaste(pastedText, currentDisplayValue, currentPlaceholderContent);
|
|
12
12
|
t.is(result, null);
|
|
13
13
|
});
|
|
14
|
+
test('handlePaste creates placeholder for small pastes', t => {
|
|
15
|
+
const pastedText = 'small text';
|
|
16
|
+
const currentDisplayValue = 'existing content';
|
|
17
|
+
const currentPlaceholderContent = {};
|
|
18
|
+
const result = handlePaste(pastedText, currentDisplayValue, currentPlaceholderContent);
|
|
19
|
+
t.truthy(result);
|
|
20
|
+
t.is(typeof result.displayValue, 'string');
|
|
21
|
+
t.true(result.displayValue.includes('[Paste #'));
|
|
22
|
+
t.true(result.displayValue.includes('10 chars]'));
|
|
23
|
+
// Should contain the pasted content in the map
|
|
24
|
+
const pasteIds = Object.keys(result.placeholderContent);
|
|
25
|
+
t.is(pasteIds.length, 1);
|
|
26
|
+
const pasteContent = result.placeholderContent[pasteIds[0]];
|
|
27
|
+
t.is(pasteContent.content, pastedText);
|
|
28
|
+
t.is(pasteContent.type, PlaceholderType.PASTE);
|
|
29
|
+
});
|
|
14
30
|
test('handlePaste creates placeholder for large pastes', t => {
|
|
15
|
-
const pastedText = 'a'.repeat(600);
|
|
31
|
+
const pastedText = 'a'.repeat(600);
|
|
16
32
|
const currentDisplayValue = 'existing content';
|
|
17
33
|
const currentPlaceholderContent = {};
|
|
18
34
|
const result = handlePaste(pastedText, currentDisplayValue, currentPlaceholderContent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paste-utils.spec.js","sourceRoot":"","sources":["../../source/utils/paste-utils.spec.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,KAAK,CAAC;AACvB,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAE9C,yCAAyC;AACzC,0DAA0D;AAE1D,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAErC,IAAI,CAAC,2CAA2C,EAAE,CAAC,CAAC,EAAE;IACrD,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"paste-utils.spec.js","sourceRoot":"","sources":["../../source/utils/paste-utils.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../source/utils/update-checker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAsB,UAAU,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../source/utils/update-checker.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAsB,UAAU,EAAC,MAAM,eAAe,CAAC;AA8GnE;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,CA8D3D"}
|
|
@@ -3,6 +3,16 @@ import { join, dirname } from 'path';
|
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
4
|
import { loadPreferences, savePreferences } from '../config/preferences.js';
|
|
5
5
|
import { logError } from '../utils/message-queue.js';
|
|
6
|
+
import { detectInstallationMethod } from './installation-detector.js';
|
|
7
|
+
const UPDATE_COMMANDS = {
|
|
8
|
+
NPM: 'npm update -g @nanocollective/nanocoder',
|
|
9
|
+
// Check if package exists before upgrading to provide better error messages
|
|
10
|
+
HOMEBREW: 'brew list nanocoder >/dev/null 2>&1 && brew upgrade nanocoder || (echo "Error: nanocoder not found in Homebrew. Please install it first with: brew install nanocoder" && exit 1)',
|
|
11
|
+
};
|
|
12
|
+
const UPDATE_MESSAGES = {
|
|
13
|
+
NIX: 'To update, re-run: nix run github:Nano-Collective/nanocoder (or update your flake).',
|
|
14
|
+
UNKNOWN: 'A new version is available. Please update using your package manager.',
|
|
15
|
+
};
|
|
6
16
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
17
|
const __dirname = dirname(__filename);
|
|
8
18
|
/**
|
|
@@ -90,13 +100,31 @@ export async function checkForUpdates() {
|
|
|
90
100
|
};
|
|
91
101
|
}
|
|
92
102
|
const hasUpdate = isNewerVersion(currentVersion, latestVersion);
|
|
103
|
+
function getUpdateDetails(hasUpdate) {
|
|
104
|
+
if (!hasUpdate) {
|
|
105
|
+
return {};
|
|
106
|
+
}
|
|
107
|
+
const method = detectInstallationMethod();
|
|
108
|
+
// Use constants defined at top of file for maintainability
|
|
109
|
+
switch (method) {
|
|
110
|
+
case 'npm':
|
|
111
|
+
return { command: UPDATE_COMMANDS.NPM };
|
|
112
|
+
case 'homebrew':
|
|
113
|
+
return { command: UPDATE_COMMANDS.HOMEBREW };
|
|
114
|
+
case 'nix':
|
|
115
|
+
return { message: UPDATE_MESSAGES.NIX };
|
|
116
|
+
default:
|
|
117
|
+
// For 'unknown' fallback to a general message (do not attempt to run a command)
|
|
118
|
+
return { message: UPDATE_MESSAGES.UNKNOWN };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const updateDetails = getUpdateDetails(hasUpdate);
|
|
93
122
|
return {
|
|
94
123
|
hasUpdate,
|
|
95
124
|
currentVersion,
|
|
96
125
|
latestVersion,
|
|
97
|
-
updateCommand:
|
|
98
|
-
|
|
99
|
-
: undefined,
|
|
126
|
+
updateCommand: updateDetails.command,
|
|
127
|
+
updateMessage: updateDetails.message,
|
|
100
128
|
};
|
|
101
129
|
}
|
|
102
130
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../source/utils/update-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,IAAI,CAAC;AAChC,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,MAAM,CAAC;AACnC,OAAO,EAAC,aAAa,EAAC,MAAM,KAAK,CAAC;AAClC,OAAO,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../source/utils/update-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.spec.d.ts","sourceRoot":"","sources":["../../source/utils/update-checker.spec.ts"],"names":[],"mappings":""}
|