clauderipple 0.8.2 → 0.8.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/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.8.3 — 2026-10-06
4
+
5
+ ### Fixed
6
+
7
+ - **No PowerShell window at every Windows logon** (#49). With Windows Terminal as the default
8
+ terminal — the Windows 11 default — the router task's PowerShell window stayed on screen after
9
+ each logon, because Windows Terminal ignores `-WindowStyle Hidden`. The task now starts
10
+ PowerShell inside a headless console host. Updating re-registers the task; where Windows
11
+ refuses that, the old task is kept and the router runs as before.
12
+
3
13
  ## 0.8.2 — 2026-10-06
4
14
 
5
15
  ### Fixed
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "private": true,
3
- "version": "0.8.2",
3
+ "version": "0.8.3",
4
4
  "type": "commonjs"
5
5
  }
@@ -63,7 +63,7 @@ export function taskDefinitionMatches(value, expected) {
63
63
  return false;
64
64
  const task = value;
65
65
  return (task.actionCount === 1 &&
66
- task.execute?.toLowerCase() === "powershell.exe" &&
66
+ task.execute?.toLowerCase() === expected.execute.toLowerCase() &&
67
67
  task.arguments === expected.arguments &&
68
68
  sameAccount(task.userId, expected.userId) &&
69
69
  task.runLevel === 0 &&
@@ -143,16 +143,24 @@ export function existingTaskDefinition() {
143
143
  export function installAgent(opts) {
144
144
  const launcher = writeLauncher({ program: opts.program, args: opts.args ?? [], home: opts.home, ...(opts.env ? { env: opts.env } : {}) });
145
145
  const user = taskUser();
146
- const actionArgs = `-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File "${launcher}"`;
146
+ const powershellArgs = `-NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -File "${launcher}"`;
147
+ // PowerShell is started inside a headless console host. Started directly, it gets a console from
148
+ // the user's default terminal, and when that is Windows Terminal (the Windows 11 default)
149
+ // `-WindowStyle Hidden` hides nothing: a PowerShell window sat on screen after every logon (#49;
150
+ // measured 2026-10-06 in a Windows 11 24H2 VM — a CASCADIA_HOSTING_WINDOW_CLASS window appeared
151
+ // for `powershell.exe`, none for `conhost.exe --headless powershell.exe`, and both ran the script).
152
+ const execute = "conhost.exe";
153
+ const actionArgs = `--headless powershell.exe ${powershellArgs}`;
154
+ const existing = existingTaskDefinition();
147
155
  // Updating the generated launcher does not require re-registering an otherwise correct task.
148
156
  // Some Windows installations protect an existing per-user task's security descriptor so that
149
157
  // even the same unelevated user gets E_ACCESSDENIED from Register-ScheduledTask -Force. Treat the
150
158
  // verified existing definition as success; never silently accept a same-named foreign task.
151
- if (taskDefinitionMatches(existingTaskDefinition(), { arguments: actionArgs, userId: user }))
159
+ if (taskDefinitionMatches(existing, { execute, arguments: actionArgs, userId: user }))
152
160
  return launcher;
153
161
  const script = [
154
162
  `$ErrorActionPreference = 'Stop'`,
155
- `$a = New-ScheduledTaskAction -Execute ${ps("powershell.exe")} -Argument ${ps(actionArgs)}`,
163
+ `$a = New-ScheduledTaskAction -Execute ${ps(execute)} -Argument ${ps(actionArgs)}`,
156
164
  `$t = New-ScheduledTaskTrigger -AtLogOn -User ${ps(user)}`,
157
165
  // Limited: the router needs no elevation, and asking for it would put a UAC prompt at every logon.
158
166
  `$p = New-ScheduledTaskPrincipal -UserId ${ps(user)} -LogonType Interactive -RunLevel Limited`,
@@ -161,8 +169,13 @@ export function installAgent(opts) {
161
169
  `'ok'`,
162
170
  ].join("; ");
163
171
  const r = run(script);
164
- if (!r.ok)
172
+ if (!r.ok) {
173
+ // The task from before #49 still starts and supervises the router, only with a window. On an
174
+ // install that cannot re-register it (E_ACCESSDENIED, above), keeping it beats failing the update.
175
+ if (taskDefinitionMatches(existing, { execute: "powershell.exe", arguments: powershellArgs, userId: user }))
176
+ return launcher;
165
177
  throw new Error(`Register-ScheduledTask failed: ${r.out}`);
178
+ }
166
179
  return launcher;
167
180
  }
168
181
  export function removeAgent() {
@@ -5,4 +5,4 @@
5
5
  // from the manifests. Until 0.1.1 the router and the CLI each carried their own literal, and both
6
6
  // still said "0.1.0" in the 0.1.1 release: after an update nobody could tell which router was
7
7
  // running, and the tray app had nothing to compare (2026-09-15, reported from a Windows install).
8
- export const VERSION = "0.8.2";
8
+ export const VERSION = "0.8.3";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clauderipple",
3
- "version": "0.8.2",
3
+ "version": "0.8.3",
4
4
  "description": "Use GPT (ChatGPT Plus/Pro), DeepSeek and 400+ other models in the Claude Desktop Code tab and Claude Code while staying signed in to your Claude subscription — no third-party gateway mode. Several ChatGPT accounts that take over when one runs out, in Codex too.",
5
5
  "license": "GPL-3.0-only",
6
6
  "workspaces": [