@karlorz/codexhost-cli-darwin-arm64 0.13.2-3 → 0.13.3-0

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-0
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":"macos-arm64"}
1
+ {"schemaVersion":1,"version":"0.13.3-0","distribution":"npm","target":"macos-arm64"}
@@ -20662,14 +20662,6 @@ th[aria-sort] .console-usage-sort__mark {
20662
20662
  otherSection: "Other",
20663
20663
  appearanceDescription: "Conversation display and local resource management.",
20664
20664
  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
20665
  cpaLiveVoiceTitle: "Override live voice",
20674
20666
  cpaLiveVoiceDescription: "On by default. Host creates the realtime call instead of ChatGPT.",
20675
20667
  cpaLiveVoiceHelpLabel: "About overriding live voice",
@@ -20842,7 +20834,7 @@ th[aria-sort] .console-usage-sort__mark {
20842
20834
  launchPathSaveError: "Could not save. Enter an existing absolute installation folder on this Host and check configuration permissions.",
20843
20835
  connectionOfficialWebsite: "Visit official website",
20844
20836
  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.",
20837
+ 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
20838
  connectionInstall: "Install",
20847
20839
  connectionInstallDescription: "This Harness was not detected.",
20848
20840
  connectionInstallRunning: "Installing on the selected Host. You can leave this page; login or setup may still be required afterward.",
@@ -20953,14 +20945,6 @@ th[aria-sort] .console-usage-sort__mark {
20953
20945
  otherSection: "\u5176\u4ED6",
20954
20946
  appearanceDescription: "\u4F1A\u8BDD\u663E\u793A\u4E0E\u672C\u5730\u8D44\u6E90\u7BA1\u7406\u3002",
20955
20947
  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
20948
  cpaLiveVoiceTitle: "\u6539\u5199\u5B9E\u65F6\u8BED\u97F3",
20965
20949
  cpaLiveVoiceDescription: "\u9ED8\u8BA4\u5F00\u542F\u3002\u7531 Host \u521B\u5EFA realtime \u901A\u8BDD\uFF0C\u800C\u4E0D\u662F ChatGPT\u3002",
20966
20950
  cpaLiveVoiceHelpLabel: "\u6539\u5199\u5B9E\u65F6\u8BED\u97F3\u8BF4\u660E",
@@ -21133,7 +21117,7 @@ th[aria-sort] .console-usage-sort__mark {
21133
21117
  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
21118
  connectionOfficialWebsite: "\u8BBF\u95EE\u5B98\u7F51",
21135
21119
  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",
21120
+ 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
21121
  connectionInstall: "\u5B89\u88C5",
21138
21122
  connectionInstallDescription: "\u5C1A\u672A\u68C0\u6D4B\u5230\u8BE5 Harness\u3002",
21139
21123
  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 +21248,6 @@ th[aria-sort] .console-usage-sort__mark {
21264
21248
  // src/renderer-usage-control.ts
21265
21249
  var ENGLISH_USAGE_MESSAGES = Object.freeze({
21266
21250
  usage: "Usage",
21267
- account: "Account",
21268
21251
  context: "Context",
21269
21252
  recordedCredits: "Recorded usage",
21270
21253
  latestCacheHit: "Latest cache hit (CH)",
@@ -21290,7 +21273,6 @@ th[aria-sort] .console-usage-sort__mark {
21290
21273
  });
21291
21274
  var CHINESE_USAGE_MESSAGES = Object.freeze({
21292
21275
  usage: "\u7528\u91CF",
21293
- account: "\u8D26\u53F7",
21294
21276
  context: "\u4E0A\u4E0B\u6587",
21295
21277
  recordedCredits: "\u5DF2\u8BB0\u5F55\u6D88\u8017",
21296
21278
  latestCacheHit: "\u6700\u8FD1\u7F13\u5B58\u547D\u4E2D\uFF08CH\uFF09",
@@ -26762,27 +26744,6 @@ ${error51.stderrTail}`] : []
26762
26744
  };
26763
26745
  }
26764
26746
 
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
26747
  // src/renderer-transcript-dom.ts
26787
26748
  var REASONING_SOFT_WRAP_STORAGE_KEY = "codexhost.reasoning-soft-wrap.v1";
26788
26749
  var REASONING_SOFT_WRAP_CHANGE_EVENT = "codexhost:reasoning-soft-wrap-changed";
@@ -27049,31 +27010,6 @@ ${error51.stderrTail}`] : []
27049
27010
  description.className = "settings-page-description";
27050
27011
  description.textContent = messages.appearanceDescription;
27051
27012
  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
27013
  const liveVoiceId = preferenceId("cpa-live-voice");
27078
27014
  const liveVoiceRow = createPreferenceItem(document2, {
27079
27015
  title: messages.cpaLiveVoiceTitle,
@@ -27123,7 +27059,6 @@ ${error51.stderrTail}`] : []
27123
27059
  getLoadedSessionsClient
27124
27060
  );
27125
27061
  return () => {
27126
- ownerWindow.removeEventListener(CODEX_USAGE_BANNER_CHANGE_EVENT, syncUsageBanner);
27127
27062
  ownerWindow.removeEventListener(CPA_LIVE_VOICE_CHANGE_EVENT, syncLiveVoice);
27128
27063
  ownerWindow.removeEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
27129
27064
  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");