@karlorz/codexhost-cli-win32-x64 0.13.2-3 → 0.13.3-1

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 CHANGED
@@ -7,7 +7,7 @@ Run Pi and Claude Code as first-class external harnesses inside Codex Desktop.
7
7
  ## Install
8
8
 
9
9
  ```bash
10
- npm install -g @karlorz/codexhost-cli@0.13.2-3
10
+ npm install -g @karlorz/codexhost-cli@0.13.3-1
11
11
  ```
12
12
 
13
13
  Do not install this package directly. npm selects it through the optional dependencies of `@karlorz/codexhost-cli`.
@@ -1 +1 @@
1
- {"schemaVersion":1,"version":"0.13.2-3","distribution":"npm","target":"windows-x64"}
1
+ {"schemaVersion":1,"version":"0.13.3-1","distribution":"npm","target":"windows-x64"}
@@ -18856,6 +18856,7 @@ th[aria-sort] .console-usage-sort__mark {
18856
18856
  "Codex Desktop installation discovered": "findDesktop",
18857
18857
  "acquiring Launcher ownership": "ownership",
18858
18858
  "Launcher ownership acquired": "ownership",
18859
+ "recovering leftover Desktop Controller": "ownership",
18859
18860
  "attached to existing controlled Desktop": "ownership",
18860
18861
  "launching Codex Desktop": "launchDesktop",
18861
18862
  "Codex Desktop launched": "launchDesktop",
@@ -20662,14 +20663,6 @@ th[aria-sort] .console-usage-sort__mark {
20662
20663
  otherSection: "Other",
20663
20664
  appearanceDescription: "Conversation display and local resource management.",
20664
20665
  appearanceGroup: "Appearance",
20665
- hideCodexUsageBannerTitle: "Hide Codex usage warning",
20666
- hideCodexUsageBannerDescription: "On by default. Hide the out-of-usage card on every Composer.",
20667
- hideCodexUsageBannerHelpLabel: "About hiding the Codex usage warning",
20668
- hideCodexUsageBannerHelp: Object.freeze([
20669
- "The native card appears when the signed-in ChatGPT Codex quota is exhausted.",
20670
- "When this is on, that card is hidden on every Composer, including Codex threads. Reset usage and Upgrade stay available in Settings.",
20671
- "Turning this off only shows the native card again. Send on this Composer, including Codex threads, is already separated from that quota card."
20672
- ]),
20673
20666
  cpaLiveVoiceTitle: "Override live voice",
20674
20667
  cpaLiveVoiceDescription: "On by default. Host creates the realtime call instead of ChatGPT.",
20675
20668
  cpaLiveVoiceHelpLabel: "About overriding live voice",
@@ -20842,7 +20835,7 @@ th[aria-sort] .console-usage-sort__mark {
20842
20835
  launchPathSaveError: "Could not save. Enter an existing absolute installation folder on this Host and check configuration permissions.",
20843
20836
  connectionOfficialWebsite: "Visit official website",
20844
20837
  connectionOpenHarnessWeb: "Open DeepSeek Harness Web",
20845
- connectionDeepSeekTestedVersions: "Supported DSH versions: 0.1.7-rc.1, 0.1.7-rc.2, 0.2.0-rc.1 and 0.2.0-rc.2. Versions newer than 0.2.0-rc.2 can be tried, but compatibility may be limited; versions older than 0.1.7-rc.1 must be upgraded first.",
20838
+ connectionDeepSeekTestedVersions: "Supported DSH versions: 0.1.7-rc.1, 0.1.7-rc.2, 0.2.0-rc.1, 0.2.0-rc.2, 0.2.1-rc.1 and 0.2.1-rc.2. Versions newer than 0.2.1-rc.2 can be tried, but compatibility may be limited; versions older than 0.1.7-rc.1 must be upgraded first.",
20846
20839
  connectionInstall: "Install",
20847
20840
  connectionInstallDescription: "This Harness was not detected.",
20848
20841
  connectionInstallRunning: "Installing on the selected Host. You can leave this page; login or setup may still be required afterward.",
@@ -20953,14 +20946,6 @@ th[aria-sort] .console-usage-sort__mark {
20953
20946
  otherSection: "\u5176\u4ED6",
20954
20947
  appearanceDescription: "\u4F1A\u8BDD\u663E\u793A\u4E0E\u672C\u5730\u8D44\u6E90\u7BA1\u7406\u3002",
20955
20948
  appearanceGroup: "\u5916\u89C2",
20956
- hideCodexUsageBannerTitle: "\u9690\u85CF Codex \u989D\u5EA6\u8B66\u544A",
20957
- hideCodexUsageBannerDescription: "\u9ED8\u8BA4\u5F00\u542F\u3002\u5728\u6240\u6709 Composer \u4E0A\u9690\u85CF\u989D\u5EA6\u8017\u5C3D\u5361\u7247\u3002",
20958
- hideCodexUsageBannerHelpLabel: "\u9690\u85CF Codex \u989D\u5EA6\u8B66\u544A\u8BF4\u660E",
20959
- hideCodexUsageBannerHelp: Object.freeze([
20960
- "\u5DF2\u767B\u5F55\u7684 ChatGPT Codex \u989D\u5EA6\u8017\u5C3D\u65F6\uFF0CDesktop \u4F1A\u663E\u793A\u539F\u751F\u8B66\u544A\u5361\u7247\u3002",
20961
- "\u5F00\u542F\u540E\uFF0C\u6240\u6709 Composer \u90FD\u9690\u85CF\u8BE5\u5361\u7247\uFF0C\u5305\u62EC Codex \u4F1A\u8BDD\u3002\u300C\u91CD\u7F6E\u7528\u91CF\u300D\u548C\u300C\u5347\u7EA7\u300D\u4ECD\u53EF\u5728\u8BBE\u7F6E\u4E2D\u4F7F\u7528\u3002",
20962
- "\u5173\u95ED\u6B64\u5F00\u5173\u53EA\u4F1A\u91CD\u65B0\u663E\u793A\u539F\u751F\u5361\u7247\u3002\u5F53\u524D Composer \u7684\u53D1\u9001\uFF08\u5305\u62EC Codex \u4F1A\u8BDD\uFF09\u5DF2\u4E0E\u8BE5\u989D\u5EA6\u5361\u7247\u5206\u79BB\u3002"
20963
- ]),
20964
20949
  cpaLiveVoiceTitle: "\u6539\u5199\u5B9E\u65F6\u8BED\u97F3",
20965
20950
  cpaLiveVoiceDescription: "\u9ED8\u8BA4\u5F00\u542F\u3002\u7531 Host \u521B\u5EFA realtime \u901A\u8BDD\uFF0C\u800C\u4E0D\u662F ChatGPT\u3002",
20966
20951
  cpaLiveVoiceHelpLabel: "\u6539\u5199\u5B9E\u65F6\u8BED\u97F3\u8BF4\u660E",
@@ -21133,7 +21118,7 @@ th[aria-sort] .console-usage-sort__mark {
21133
21118
  launchPathSaveError: "\u4FDD\u5B58\u5931\u8D25\u3002\u8BF7\u586B\u5199\u6B64 Host \u4E0A\u5B9E\u9645\u5B58\u5728\u7684\u5B89\u88C5\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u5E76\u786E\u8BA4\u914D\u7F6E\u76EE\u5F55\u53EF\u5199\u3002",
21134
21119
  connectionOfficialWebsite: "\u8BBF\u95EE\u5B98\u7F51",
21135
21120
  connectionOpenHarnessWeb: "\u6253\u5F00 DeepSeek Harness Web",
21136
- connectionDeepSeekTestedVersions: "\u652F\u6301 DSH \u7248\u672C\uFF1A0.1.7-rc.1\u30010.1.7-rc.2\u30010.2.0-rc.1 \u548C 0.2.0-rc.2\u3002\u9AD8\u4E8E 0.2.0-rc.2 \u7684\u7248\u672C\u53EF\u4EE5\u5C1D\u8BD5\u8FDE\u63A5\uFF0C\u4F46\u9002\u914D\u5EA6\u53EF\u80FD\u6709\u9650\uFF1B\u4F4E\u4E8E 0.1.7-rc.1 \u7684\u7248\u672C\u9700\u8981\u5148\u5347\u7EA7\u3002",
21121
+ connectionDeepSeekTestedVersions: "\u652F\u6301 DSH \u7248\u672C\uFF1A0.1.7-rc.1\u30010.1.7-rc.2\u30010.2.0-rc.1\u30010.2.0-rc.2\u30010.2.1-rc.1 \u548C 0.2.1-rc.2\u3002\u9AD8\u4E8E 0.2.1-rc.2 \u7684\u7248\u672C\u53EF\u4EE5\u5C1D\u8BD5\u8FDE\u63A5\uFF0C\u4F46\u9002\u914D\u5EA6\u53EF\u80FD\u6709\u9650\uFF1B\u4F4E\u4E8E 0.1.7-rc.1 \u7684\u7248\u672C\u9700\u8981\u5148\u5347\u7EA7\u3002",
21137
21122
  connectionInstall: "\u5B89\u88C5",
21138
21123
  connectionInstallDescription: "\u5C1A\u672A\u68C0\u6D4B\u5230\u8BE5 Harness\u3002",
21139
21124
  connectionInstallRunning: "\u6B63\u5728\u6240\u9009 Host \u4E0A\u5B89\u88C5\uFF0C\u79BB\u5F00\u9875\u9762\u4E0D\u4F1A\u4E2D\u65AD\u3002\u5B89\u88C5\u540E\u53EF\u80FD\u4ECD\u9700\u767B\u5F55\u6216\u914D\u7F6E\u3002",
@@ -21264,7 +21249,6 @@ th[aria-sort] .console-usage-sort__mark {
21264
21249
  // src/renderer-usage-control.ts
21265
21250
  var ENGLISH_USAGE_MESSAGES = Object.freeze({
21266
21251
  usage: "Usage",
21267
- account: "Account",
21268
21252
  context: "Context",
21269
21253
  recordedCredits: "Recorded usage",
21270
21254
  latestCacheHit: "Latest cache hit (CH)",
@@ -21290,7 +21274,6 @@ th[aria-sort] .console-usage-sort__mark {
21290
21274
  });
21291
21275
  var CHINESE_USAGE_MESSAGES = Object.freeze({
21292
21276
  usage: "\u7528\u91CF",
21293
- account: "\u8D26\u53F7",
21294
21277
  context: "\u4E0A\u4E0B\u6587",
21295
21278
  recordedCredits: "\u5DF2\u8BB0\u5F55\u6D88\u8017",
21296
21279
  latestCacheHit: "\u6700\u8FD1\u7F13\u5B58\u547D\u4E2D\uFF08CH\uFF09",
@@ -26762,27 +26745,6 @@ ${error51.stderrTail}`] : []
26762
26745
  };
26763
26746
  }
26764
26747
 
26765
- // src/renderer-codex-usage-banner-preference.ts
26766
- var CODEX_USAGE_BANNER_STORAGE_KEY = "codexhost.codex-usage-banner-hidden.v1";
26767
- var CODEX_USAGE_BANNER_CHANGE_EVENT = "codexhost:codex-usage-banner-changed";
26768
- function readCodexUsageBannerPreference(owner) {
26769
- if (!owner) return true;
26770
- try {
26771
- return owner.localStorage.getItem(CODEX_USAGE_BANNER_STORAGE_KEY) !== "0";
26772
- } catch {
26773
- return true;
26774
- }
26775
- }
26776
- function writeCodexUsageBannerPreference(owner, enabled) {
26777
- try {
26778
- owner.localStorage.setItem(CODEX_USAGE_BANNER_STORAGE_KEY, enabled ? "1" : "0");
26779
- } catch {
26780
- return false;
26781
- }
26782
- owner.dispatchEvent(new Event(CODEX_USAGE_BANNER_CHANGE_EVENT));
26783
- return true;
26784
- }
26785
-
26786
26748
  // src/renderer-transcript-dom.ts
26787
26749
  var REASONING_SOFT_WRAP_STORAGE_KEY = "codexhost.reasoning-soft-wrap.v1";
26788
26750
  var REASONING_SOFT_WRAP_CHANGE_EVENT = "codexhost:reasoning-soft-wrap-changed";
@@ -27049,31 +27011,6 @@ ${error51.stderrTail}`] : []
27049
27011
  description.className = "settings-page-description";
27050
27012
  description.textContent = messages.appearanceDescription;
27051
27013
  const { group, card } = createPreferenceGroup(document2, messages.appearanceGroup);
27052
- const usageBannerId = preferenceId("hide-codex-usage-banner");
27053
- const usageBannerRow = createPreferenceItem(document2, {
27054
- title: messages.hideCodexUsageBannerTitle,
27055
- description: messages.hideCodexUsageBannerDescription,
27056
- controlId: usageBannerId,
27057
- help: {
27058
- label: messages.hideCodexUsageBannerHelpLabel,
27059
- lines: messages.hideCodexUsageBannerHelp
27060
- }
27061
- });
27062
- const usageBanner = createPreferenceSwitch(
27063
- document2,
27064
- usageBannerId,
27065
- usageBannerRow.description.id
27066
- );
27067
- usageBanner.checked = readCodexUsageBannerPreference(ownerWindow);
27068
- usageBanner.addEventListener("change", () => {
27069
- writeCodexUsageBannerPreference(ownerWindow, usageBanner.checked);
27070
- });
27071
- const syncUsageBanner = () => {
27072
- usageBanner.checked = readCodexUsageBannerPreference(ownerWindow);
27073
- };
27074
- ownerWindow.addEventListener(CODEX_USAGE_BANNER_CHANGE_EVENT, syncUsageBanner);
27075
- usageBannerRow.item.append(usageBanner);
27076
- card.append(usageBannerRow.item);
27077
27014
  const liveVoiceId = preferenceId("cpa-live-voice");
27078
27015
  const liveVoiceRow = createPreferenceItem(document2, {
27079
27016
  title: messages.cpaLiveVoiceTitle,
@@ -27123,7 +27060,6 @@ ${error51.stderrTail}`] : []
27123
27060
  getLoadedSessionsClient
27124
27061
  );
27125
27062
  return () => {
27126
- ownerWindow.removeEventListener(CODEX_USAGE_BANNER_CHANGE_EVENT, syncUsageBanner);
27127
27063
  ownerWindow.removeEventListener(CPA_LIVE_VOICE_CHANGE_EVENT, syncLiveVoice);
27128
27064
  ownerWindow.removeEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
27129
27065
  disposeIdleRelease();
@@ -144,6 +144,77 @@
144
144
  return handle;
145
145
  }
146
146
 
147
+ // src/renderer-overlay-thread-isolation.ts
148
+ function isRecord2(value) {
149
+ return value !== null && typeof value === "object" && !Array.isArray(value);
150
+ }
151
+ var BLOCKED_METHODS = /* @__PURE__ */ new Set(["thread/started"]);
152
+ function isAvatarOverlayHref(href) {
153
+ try {
154
+ const url = new URL(href);
155
+ if (url.pathname === "/avatar-overlay.html") return true;
156
+ return url.searchParams.get("initialRoute") === "/avatar-overlay";
157
+ } catch {
158
+ return false;
159
+ }
160
+ }
161
+ function overlayBlocksHostNotification(method, threadId, activeRealtimeThreadIds) {
162
+ if (method.startsWith("thread/realtime/")) {
163
+ return false;
164
+ }
165
+ if (threadId !== void 0 && activeRealtimeThreadIds.has(threadId)) {
166
+ return false;
167
+ }
168
+ if (BLOCKED_METHODS.has(method)) return true;
169
+ return method.startsWith("turn/") || method.startsWith("item/");
170
+ }
171
+ function notificationThreadId(params) {
172
+ if (!isRecord2(params)) return void 0;
173
+ if (typeof params.threadId === "string" && params.threadId.length > 0) return params.threadId;
174
+ const thread = params.thread;
175
+ if (isRecord2(thread) && typeof thread.id === "string" && thread.id.length > 0) {
176
+ return thread.id;
177
+ }
178
+ return void 0;
179
+ }
180
+ function installOverlayThreadIsolation(target = typeof globalThis === "undefined" ? null : globalThis) {
181
+ if (!target || typeof target.addEventListener !== "function") {
182
+ return { status: "disabled", dispose() {
183
+ } };
184
+ }
185
+ const href = target.location?.href;
186
+ if (typeof href !== "string" || !isAvatarOverlayHref(href)) {
187
+ return { status: "disabled", dispose() {
188
+ } };
189
+ }
190
+ const activeRealtimeThreadIds = /* @__PURE__ */ new Set();
191
+ const listener = (event) => {
192
+ const message = event.data;
193
+ if (!isRecord2(message) || message.type !== "mcp-notification") return;
194
+ if (typeof message.method !== "string") return;
195
+ const threadId = notificationThreadId(message.params);
196
+ if (message.method === "thread/realtime/started" && threadId) {
197
+ activeRealtimeThreadIds.add(threadId);
198
+ return;
199
+ }
200
+ if ((message.method === "thread/realtime/closed" || message.method === "thread/realtime/error") && threadId) {
201
+ activeRealtimeThreadIds.delete(threadId);
202
+ return;
203
+ }
204
+ if (overlayBlocksHostNotification(message.method, threadId, activeRealtimeThreadIds)) {
205
+ event.stopImmediatePropagation();
206
+ }
207
+ };
208
+ target.addEventListener("message", listener, true);
209
+ return {
210
+ status: "active",
211
+ dispose() {
212
+ target.removeEventListener("message", listener, true);
213
+ }
214
+ };
215
+ }
216
+
147
217
  // src/cpa-live-voice-entry.ts
148
218
  installCpaLiveVoiceHook();
219
+ installOverlayThreadIsolation();
149
220
  })();
@@ -17133,6 +17133,11 @@ function createDraftPrewarmPolicyBridge(manager, bridge, hostId2, target, prewar
17133
17133
  throw new Error("Renderer request manager is retired");
17134
17134
  return manager;
17135
17135
  },
17136
+ selectedModel() {
17137
+ if (disposed || isCurrentManager && !isCurrentManager())
17138
+ throw new Error("Renderer request manager is retired");
17139
+ return selectedModel;
17140
+ },
17136
17141
  select(model2) {
17137
17142
  if (disposed || isCurrentManager && !isCurrentManager())
17138
17143
  throw new Error("Renderer request manager is retired");