getaimeter 0.7.2 → 0.7.3
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/package.json +1 -1
- package/service.js +29 -22
package/package.json
CHANGED
package/service.js
CHANGED
|
@@ -98,37 +98,44 @@ WshShell.Run """${nodePath}"" ""${script}"" watch", 0, False
|
|
|
98
98
|
* These are proper Windows shortcuts with icon and description.
|
|
99
99
|
*/
|
|
100
100
|
function createWindowsShortcuts(nodePath, script) {
|
|
101
|
-
const
|
|
101
|
+
const { execSync } = require('child_process');
|
|
102
|
+
const iconPath = path.join(__dirname, 'icon.ico');
|
|
103
|
+
|
|
102
104
|
const locations = [
|
|
103
|
-
|
|
104
|
-
|
|
105
|
+
path.join(os.homedir(), 'Desktop', 'AIMeter.lnk'),
|
|
106
|
+
path.join(os.homedir(), 'AppData', 'Roaming', 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'AIMeter.lnk'),
|
|
105
107
|
];
|
|
106
108
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
$
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
$
|
|
121
|
-
|
|
109
|
+
// Write a temporary PS1 file to avoid all escaping issues
|
|
110
|
+
const ps1Path = path.join(os.tmpdir(), 'aimeter-shortcut.ps1');
|
|
111
|
+
|
|
112
|
+
for (const lnkPath of locations) {
|
|
113
|
+
// Use single quotes in PS1 with doubled single-quote escaping
|
|
114
|
+
const ps1Content = [
|
|
115
|
+
'$ws = New-Object -ComObject WScript.Shell',
|
|
116
|
+
`$s = $ws.CreateShortcut('${lnkPath.replace(/'/g, "''")}')`,
|
|
117
|
+
`$s.TargetPath = '${nodePath.replace(/\\\\/g, '\\').replace(/'/g, "''")}'`,
|
|
118
|
+
`$s.Arguments = [char]34 + '${script.replace(/\\\\/g, '\\').replace(/'/g, "''")}' + [char]34 + ' start'`,
|
|
119
|
+
`$s.WorkingDirectory = '${os.homedir().replace(/'/g, "''")}'`,
|
|
120
|
+
`$s.Description = 'AIMeter - AI coding cost optimizer'`,
|
|
121
|
+
`$s.WindowStyle = 7`,
|
|
122
|
+
`$icon = '${iconPath.replace(/'/g, "''")}'`,
|
|
123
|
+
`if (Test-Path $icon) { $s.IconLocation = $icon }`,
|
|
124
|
+
`$s.Save()`,
|
|
125
|
+
].join('\n');
|
|
122
126
|
|
|
123
127
|
try {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
fs.writeFileSync(ps1Path, ps1Content, 'utf8');
|
|
129
|
+
execSync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${ps1Path}"`, {
|
|
130
|
+
stdio: 'ignore',
|
|
131
|
+
timeout: 10000,
|
|
132
|
+
});
|
|
128
133
|
} catch {
|
|
129
134
|
// Non-critical — shortcuts are convenience, not required
|
|
130
135
|
}
|
|
131
136
|
}
|
|
137
|
+
|
|
138
|
+
try { fs.unlinkSync(ps1Path); } catch {}
|
|
132
139
|
}
|
|
133
140
|
|
|
134
141
|
function uninstallWindows() {
|