@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 +1 -1
- package/app/codexhost-distribution.json +1 -1
- package/app/console-web.js +3 -67
- package/app/cpa-live-voice-hook.js +71 -0
- package/app/desktop-controller.mjs +5 -0
- package/app/host-runtime.mjs +1601 -451
- package/app/plugins/codebuddy/plugin.mjs +22 -1
- package/app/plugins/deepseek-harness/manifest.json +2 -2
- package/app/plugins/deepseek-harness/plugin.mjs +67 -7
- package/app/plugins/grok/plugin.mjs +34 -3
- package/app/plugins/opencode/plugin.mjs +6 -2
- package/app/plugins/workbuddy/plugin.mjs +139 -2
- package/app/renderer-extension.js +337 -280
- package/bin/codexhost.exe +0 -0
- package/libexec/codexhost-node-repl.exe +0 -0
- package/libexec/codexhost-shim.exe +0 -0
- package/libexec/codexhost-updater.exe +0 -0
- package/package.json +1 -1
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.
|
|
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.
|
|
1
|
+
{"schemaVersion":1,"version":"0.13.3-1","distribution":"npm","target":"windows-x64"}
|
package/app/console-web.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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");
|