@karlorz/codexhost-cli-win32-x64 0.13.3-1 → 0.13.3-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/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.3-1
10
+ npm install -g @karlorz/codexhost-cli@0.13.3-3
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.3-1","distribution":"npm","target":"windows-x64"}
1
+ {"schemaVersion":1,"version":"0.13.3-3","distribution":"npm","target":"windows-x64"}
@@ -20663,6 +20663,14 @@ th[aria-sort] .console-usage-sort__mark {
20663
20663
  otherSection: "Other",
20664
20664
  appearanceDescription: "Conversation display and local resource management.",
20665
20665
  appearanceGroup: "Appearance",
20666
+ hideCodexUsageBannerTitle: "Hide Codex usage warning",
20667
+ hideCodexUsageBannerDescription: "On by default. Hide the out-of-usage card on every Composer.",
20668
+ hideCodexUsageBannerHelpLabel: "About hiding the Codex usage warning",
20669
+ hideCodexUsageBannerHelp: Object.freeze([
20670
+ "The native card appears when the signed-in ChatGPT Codex quota is exhausted.",
20671
+ "When this is on, that card is hidden on every Composer, including Codex threads. Reset usage and Upgrade stay available in Settings.",
20672
+ "Turning this off only shows the native card again. Send on this Composer, including Codex threads, is already separated from that quota card."
20673
+ ]),
20666
20674
  cpaLiveVoiceTitle: "Override live voice",
20667
20675
  cpaLiveVoiceDescription: "On by default. Host creates the realtime call instead of ChatGPT.",
20668
20676
  cpaLiveVoiceHelpLabel: "About overriding live voice",
@@ -20946,6 +20954,14 @@ th[aria-sort] .console-usage-sort__mark {
20946
20954
  otherSection: "\u5176\u4ED6",
20947
20955
  appearanceDescription: "\u4F1A\u8BDD\u663E\u793A\u4E0E\u672C\u5730\u8D44\u6E90\u7BA1\u7406\u3002",
20948
20956
  appearanceGroup: "\u5916\u89C2",
20957
+ hideCodexUsageBannerTitle: "\u9690\u85CF Codex \u989D\u5EA6\u8B66\u544A",
20958
+ hideCodexUsageBannerDescription: "\u9ED8\u8BA4\u5F00\u542F\u3002\u5728\u6240\u6709 Composer \u4E0A\u9690\u85CF\u989D\u5EA6\u8017\u5C3D\u5361\u7247\u3002",
20959
+ hideCodexUsageBannerHelpLabel: "\u9690\u85CF Codex \u989D\u5EA6\u8B66\u544A\u8BF4\u660E",
20960
+ hideCodexUsageBannerHelp: Object.freeze([
20961
+ "\u5DF2\u767B\u5F55\u7684 ChatGPT Codex \u989D\u5EA6\u8017\u5C3D\u65F6\uFF0CDesktop \u4F1A\u663E\u793A\u539F\u751F\u8B66\u544A\u5361\u7247\u3002",
20962
+ "\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",
20963
+ "\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"
20964
+ ]),
20949
20965
  cpaLiveVoiceTitle: "\u6539\u5199\u5B9E\u65F6\u8BED\u97F3",
20950
20966
  cpaLiveVoiceDescription: "\u9ED8\u8BA4\u5F00\u542F\u3002\u7531 Host \u521B\u5EFA realtime \u901A\u8BDD\uFF0C\u800C\u4E0D\u662F ChatGPT\u3002",
20951
20967
  cpaLiveVoiceHelpLabel: "\u6539\u5199\u5B9E\u65F6\u8BED\u97F3\u8BF4\u660E",
@@ -26745,6 +26761,27 @@ ${error51.stderrTail}`] : []
26745
26761
  };
26746
26762
  }
26747
26763
 
26764
+ // src/renderer-codex-usage-banner-preference.ts
26765
+ var CODEX_USAGE_BANNER_STORAGE_KEY = "codexhost.codex-usage-banner-hidden.v1";
26766
+ var CODEX_USAGE_BANNER_CHANGE_EVENT = "codexhost:codex-usage-banner-changed";
26767
+ function readCodexUsageBannerPreference(owner) {
26768
+ if (!owner) return true;
26769
+ try {
26770
+ return owner.localStorage.getItem(CODEX_USAGE_BANNER_STORAGE_KEY) !== "0";
26771
+ } catch {
26772
+ return true;
26773
+ }
26774
+ }
26775
+ function writeCodexUsageBannerPreference(owner, enabled) {
26776
+ try {
26777
+ owner.localStorage.setItem(CODEX_USAGE_BANNER_STORAGE_KEY, enabled ? "1" : "0");
26778
+ } catch {
26779
+ return false;
26780
+ }
26781
+ owner.dispatchEvent(new Event(CODEX_USAGE_BANNER_CHANGE_EVENT));
26782
+ return true;
26783
+ }
26784
+
26748
26785
  // src/renderer-transcript-dom.ts
26749
26786
  var REASONING_SOFT_WRAP_STORAGE_KEY = "codexhost.reasoning-soft-wrap.v1";
26750
26787
  var REASONING_SOFT_WRAP_CHANGE_EVENT = "codexhost:reasoning-soft-wrap-changed";
@@ -27011,6 +27048,31 @@ ${error51.stderrTail}`] : []
27011
27048
  description.className = "settings-page-description";
27012
27049
  description.textContent = messages.appearanceDescription;
27013
27050
  const { group, card } = createPreferenceGroup(document2, messages.appearanceGroup);
27051
+ const usageBannerId = preferenceId("hide-codex-usage-banner");
27052
+ const usageBannerRow = createPreferenceItem(document2, {
27053
+ title: messages.hideCodexUsageBannerTitle,
27054
+ description: messages.hideCodexUsageBannerDescription,
27055
+ controlId: usageBannerId,
27056
+ help: {
27057
+ label: messages.hideCodexUsageBannerHelpLabel,
27058
+ lines: messages.hideCodexUsageBannerHelp
27059
+ }
27060
+ });
27061
+ const usageBanner = createPreferenceSwitch(
27062
+ document2,
27063
+ usageBannerId,
27064
+ usageBannerRow.description.id
27065
+ );
27066
+ usageBanner.checked = readCodexUsageBannerPreference(ownerWindow);
27067
+ usageBanner.addEventListener("change", () => {
27068
+ writeCodexUsageBannerPreference(ownerWindow, usageBanner.checked);
27069
+ });
27070
+ const syncUsageBanner = () => {
27071
+ usageBanner.checked = readCodexUsageBannerPreference(ownerWindow);
27072
+ };
27073
+ ownerWindow.addEventListener(CODEX_USAGE_BANNER_CHANGE_EVENT, syncUsageBanner);
27074
+ usageBannerRow.item.append(usageBanner);
27075
+ card.append(usageBannerRow.item);
27014
27076
  const liveVoiceId = preferenceId("cpa-live-voice");
27015
27077
  const liveVoiceRow = createPreferenceItem(document2, {
27016
27078
  title: messages.cpaLiveVoiceTitle,
@@ -27060,6 +27122,7 @@ ${error51.stderrTail}`] : []
27060
27122
  getLoadedSessionsClient
27061
27123
  );
27062
27124
  return () => {
27125
+ ownerWindow.removeEventListener(CODEX_USAGE_BANNER_CHANGE_EVENT, syncUsageBanner);
27063
27126
  ownerWindow.removeEventListener(CPA_LIVE_VOICE_CHANGE_EVENT, syncLiveVoice);
27064
27127
  ownerWindow.removeEventListener(REASONING_SOFT_WRAP_CHANGE_EVENT, sync);
27065
27128
  disposeIdleRelease();
@@ -29339,6 +29339,18 @@ function projectItem(item, outcome, defaultCwd, includeCommandOutput = true, sen
29339
29339
  changes: projectFileChanges(item.changes),
29340
29340
  status: itemStatus(outcome)
29341
29341
  };
29342
+ case "generatedImage":
29343
+ return {
29344
+ id: item.itemId,
29345
+ type: "imageGeneration",
29346
+ status: itemStatus(outcome),
29347
+ savedPath: item.savedPath,
29348
+ result: "",
29349
+ revisedPrompt: item.revisedPrompt ?? null,
29350
+ inputImages: [],
29351
+ failure: null,
29352
+ transparentBackground: null
29353
+ };
29342
29354
  case "subagentDelegation": {
29343
29355
  const primary = item.subagents[0];
29344
29356
  const sameConfiguration = item.subagents.every((subagent) => subagent.model === primary?.model && subagent.reasoningEffort === primary?.reasoningEffort);