@liberseek/boft-cli-win32-arm64 0.6.9 → 0.7.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 +1 -1
- package/THIRD_PARTY_NOTICES.txt +12 -0
- package/app/codexhost-distribution.json +1 -1
- package/app/desktop-controller.mjs +67 -27
- package/app/host-runtime.mjs +1963 -880
- package/app/plugins/antigravity/plugin.mjs +44 -15
- package/app/plugins/claude-code/plugin.mjs +59 -12
- package/app/plugins/codebuddy/plugin.mjs +76 -23
- package/app/plugins/cursor-cli/plugin.mjs +43 -4
- package/app/plugins/deepseek-harness/plugin.mjs +55 -7
- package/app/plugins/enabled.json +3 -1
- package/app/plugins/grok/plugin.mjs +68 -15
- package/app/plugins/hermes/plugin.mjs +40 -3
- package/app/plugins/kiro-cli/plugin.mjs +50 -3
- package/app/plugins/muse/plugin.mjs +40 -0
- package/app/plugins/omp/plugin.mjs +53 -6
- package/app/plugins/opencode/plugin.mjs +92 -46
- package/app/plugins/pi/plugin.mjs +53 -6
- package/app/plugins/qoder/assets/icon.svg +1 -0
- package/app/plugins/qoder/manifest.json +12 -0
- package/app/plugins/qoder/plugin.mjs +52290 -0
- package/app/plugins/qoder-cn/assets/icon.svg +1 -0
- package/app/plugins/qoder-cn/manifest.json +12 -0
- package/app/plugins/qoder-cn/plugin.mjs +52288 -0
- package/app/renderer-extension.js +3297 -162
- package/bin/boft.exe +0 -0
- package/libexec/boft-node-repl.exe +0 -0
- package/libexec/boft-shim.exe +0 -0
- package/libexec/boft-updater.exe +0 -0
- package/licenses/Qoder-Agent-SDK-LICENSE.txt +7 -0
- package/licenses/QoderCN-Agent-SDK-LICENSE.txt +7 -0
- package/licenses/tailwindcss-LICENSE.txt +21 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ BOFT CLI runs Pi and other external harnesses inside Codex Desktop.
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install -g @liberseek/boft-cli@0.
|
|
10
|
+
npm install -g @liberseek/boft-cli@0.7.0
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
Do not install this package directly. npm selects it through the optional dependencies of `@liberseek/boft-cli`.
|
package/THIRD_PARTY_NOTICES.txt
CHANGED
|
@@ -20,6 +20,14 @@ License text: licenses/MCP-SDK-LICENSE.txt
|
|
|
20
20
|
License: MIT
|
|
21
21
|
License text: licenses/OpenCode-SDK-LICENSE.txt
|
|
22
22
|
|
|
23
|
+
@qoder-ai/qoder-agent-sdk 1.0.39
|
|
24
|
+
License: SEE LICENSE IN LICENSE
|
|
25
|
+
License text: licenses/Qoder-Agent-SDK-LICENSE.txt
|
|
26
|
+
|
|
27
|
+
@qodercn-ai/qodercn-agent-sdk 1.0.39
|
|
28
|
+
License: SEE LICENSE IN LICENSE
|
|
29
|
+
License text: licenses/QoderCN-Agent-SDK-LICENSE.txt
|
|
30
|
+
|
|
23
31
|
diff 8.0.2
|
|
24
32
|
License: BSD-3-Clause
|
|
25
33
|
License text: licenses/diff-LICENSE.txt
|
|
@@ -28,6 +36,10 @@ lucide 1.28.0
|
|
|
28
36
|
License: ISC
|
|
29
37
|
License text: licenses/lucide-LICENSE.txt
|
|
30
38
|
|
|
39
|
+
tailwindcss 4.3.3
|
|
40
|
+
License: MIT
|
|
41
|
+
License text: licenses/tailwindcss-LICENSE.txt
|
|
42
|
+
|
|
31
43
|
ws 8.21.3
|
|
32
44
|
License: MIT
|
|
33
45
|
License text: licenses/ws-LICENSE.txt
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"schemaVersion":1,"version":"0.
|
|
1
|
+
{"schemaVersion":1,"version":"0.7.0","distribution":"npm","target":"windows-arm64"}
|
|
@@ -387,6 +387,17 @@ function installDraftPrewarmPolicyBridge(manager, bridge, hostId, target, prewar
|
|
|
387
387
|
const originalDispatchAppServerResponse = manager.dispatchAppServerResponse;
|
|
388
388
|
let selectedModel = null;
|
|
389
389
|
const isRecord4 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
390
|
+
const isUnsupportedPosixBridgeSpawn = (value) => {
|
|
391
|
+
const marker = "AbsolutePathBuf deserialized without a base path";
|
|
392
|
+
if (typeof value === "string") {
|
|
393
|
+
return value.startsWith("Invalid request:") && value.includes(marker);
|
|
394
|
+
}
|
|
395
|
+
if (!isRecord4(value)) return false;
|
|
396
|
+
if (typeof value.message === "string" && value.message.includes(marker)) {
|
|
397
|
+
if (value.code === -32600 || value.message.startsWith("Invalid request:")) return true;
|
|
398
|
+
}
|
|
399
|
+
return value.cause !== value && isUnsupportedPosixBridgeSpawn(value.cause);
|
|
400
|
+
};
|
|
390
401
|
const isRemoteControlHost = hostId.startsWith("remote-control:");
|
|
391
402
|
const retireResponses = isRemoteControlHost ? () => {
|
|
392
403
|
} : retainResponses(bridge, hostId, target);
|
|
@@ -765,7 +776,17 @@ function installDraftPrewarmPolicyBridge(manager, bridge, hostId, target, prewar
|
|
|
765
776
|
const unresolvedThreadId = shouldResolveThreadOwnership(method, routedParameters);
|
|
766
777
|
if (unresolvedThreadId) {
|
|
767
778
|
return resolveThreadOwnership(unresolvedThreadId).then(
|
|
768
|
-
(owner) => owner === "external" ? sendBridged() : sendDirect()
|
|
779
|
+
(owner) => owner === "external" ? sendBridged() : sendDirect(),
|
|
780
|
+
(error) => {
|
|
781
|
+
if ((method === "thread/read" || method === "thread/resume") && isUnsupportedPosixBridgeSpawn(error)) {
|
|
782
|
+
return Promise.resolve(sendDirect()).then((result) => {
|
|
783
|
+
knownOfficialThreadIds.add(unresolvedThreadId);
|
|
784
|
+
knownExternalThreadIds.delete(unresolvedThreadId);
|
|
785
|
+
return result;
|
|
786
|
+
});
|
|
787
|
+
}
|
|
788
|
+
throw error;
|
|
789
|
+
}
|
|
769
790
|
);
|
|
770
791
|
}
|
|
771
792
|
return shouldUseBridge(method, routedParameters) ? sendBridged() : sendDirect();
|
|
@@ -889,17 +910,25 @@ function selectRendererRequestManager(candidates, activeHostIds) {
|
|
|
889
910
|
);
|
|
890
911
|
return eligible.length === 1 ? eligible[0] ?? null : null;
|
|
891
912
|
}
|
|
892
|
-
function requestManagerFromHookState(value) {
|
|
913
|
+
function requestManagerFromHookState(value, activeHostId) {
|
|
893
914
|
const matchesRequestManager = (candidate) => {
|
|
894
|
-
if (candidate == null || typeof candidate !== "object")
|
|
895
|
-
|
|
896
|
-
|
|
915
|
+
if (candidate == null || typeof candidate !== "object" || !("requestClient" in candidate) || !("prewarmedThreadManager" in candidate) || !("sendRequest" in candidate)) {
|
|
916
|
+
return false;
|
|
917
|
+
}
|
|
918
|
+
const requestClient = candidate.requestClient;
|
|
919
|
+
const prewarmedThreadManager = candidate.prewarmedThreadManager;
|
|
920
|
+
return requestClient != null && typeof requestClient === "object" && "prewarmThreadStart" in requestClient && typeof requestClient.prewarmThreadStart === "function" && "sendRequest" in requestClient && typeof requestClient.sendRequest === "function" && "enqueueRequest" in requestClient && typeof requestClient.enqueueRequest === "function" && prewarmedThreadManager != null && typeof prewarmedThreadManager === "object" && "discardAllPrewarmedThreads" in prewarmedThreadManager && typeof prewarmedThreadManager.discardAllPrewarmedThreads === "function" && typeof candidate.sendRequest === "function";
|
|
897
921
|
};
|
|
898
922
|
if (matchesRequestManager(value)) return value;
|
|
899
|
-
if (value != null && typeof value === "object" && matchesRequestManager(value.manager)) {
|
|
923
|
+
if (value != null && typeof value === "object" && "manager" in value && matchesRequestManager(value.manager)) {
|
|
900
924
|
return value.manager;
|
|
901
925
|
}
|
|
902
|
-
return null;
|
|
926
|
+
if (typeof activeHostId !== "string" || activeHostId.length === 0) return null;
|
|
927
|
+
if (value == null || typeof value !== "object" || !("addManager" in value) || typeof value.addManager !== "function" || !("getForHostId" in value) || typeof value.getForHostId !== "function" || !("waitForManagerForHostId" in value) || typeof value.waitForManagerForHostId !== "function") {
|
|
928
|
+
return null;
|
|
929
|
+
}
|
|
930
|
+
const manager = value.getForHostId.call(value, activeHostId);
|
|
931
|
+
return matchesRequestManager(manager) ? manager : null;
|
|
903
932
|
}
|
|
904
933
|
function isRecord2(value) {
|
|
905
934
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -910,32 +939,41 @@ var FIND_REQUEST_MANAGER_EXPRESSION = `(() => {
|
|
|
910
939
|
const editors = [...document.querySelectorAll(
|
|
911
940
|
'[data-codex-composer], [contenteditable="true"][role="textbox"]',
|
|
912
941
|
)];
|
|
913
|
-
if (editors.length
|
|
942
|
+
if (editors.length === 0) {
|
|
914
943
|
return { candidateCount: 0, editorCount: editors.length, hostId: null, sendRequest: null };
|
|
915
944
|
}
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
const key = Object.getOwnPropertyNames(element).find((name) =>
|
|
920
|
-
name.startsWith('__reactFiber$'),
|
|
921
|
-
);
|
|
922
|
-
if (key != null) fiber = element[key];
|
|
923
|
-
element = element.parentElement;
|
|
924
|
-
}
|
|
925
|
-
const managers = new Set();
|
|
945
|
+
// Main and side chat can expose multiple editors backed by the same manager.
|
|
946
|
+
// Resolve their combined Host ownership before consulting any Host registry.
|
|
947
|
+
const composerAncestors = new Set();
|
|
926
948
|
const activeHostIds = new Set();
|
|
927
|
-
for (const
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
949
|
+
for (const editor of editors) {
|
|
950
|
+
let element = editor;
|
|
951
|
+
let fiber = null;
|
|
952
|
+
while (element != null && fiber == null) {
|
|
953
|
+
const key = Object.getOwnPropertyNames(element).find((name) =>
|
|
954
|
+
name.startsWith('__reactFiber$'),
|
|
955
|
+
);
|
|
956
|
+
if (key != null) fiber = element[key];
|
|
957
|
+
element = element.parentElement;
|
|
958
|
+
}
|
|
959
|
+
for (const current of committedReactAncestors(fiber)) {
|
|
960
|
+
composerAncestors.add(current);
|
|
961
|
+
const props = current.memoizedProps;
|
|
962
|
+
if (props != null && typeof props === 'object') {
|
|
963
|
+
for (const name of ['executionTargetHostId', 'permissionsHostId']) {
|
|
964
|
+
const value = props[name];
|
|
965
|
+
if (typeof value === 'string' && value.length > 0) activeHostIds.add(value);
|
|
966
|
+
}
|
|
934
967
|
}
|
|
935
968
|
}
|
|
969
|
+
}
|
|
970
|
+
const activeHostId =
|
|
971
|
+
activeHostIds.size === 1 ? activeHostIds.values().next().value : undefined;
|
|
972
|
+
const managers = new Set();
|
|
973
|
+
for (const fiber of composerAncestors) {
|
|
936
974
|
let hook = fiber.memoizedState;
|
|
937
975
|
for (let index = 0; hook != null && index < 120; index += 1, hook = hook.next) {
|
|
938
|
-
const manager = requestManagerFromHookState(hook.memoizedState);
|
|
976
|
+
const manager = requestManagerFromHookState(hook.memoizedState, activeHostId);
|
|
939
977
|
if (manager != null) managers.add(manager);
|
|
940
978
|
}
|
|
941
979
|
}
|
|
@@ -1456,7 +1494,9 @@ ${rendererSource}`,
|
|
|
1456
1494
|
"muse",
|
|
1457
1495
|
"kiro-cli",
|
|
1458
1496
|
"codebuddy",
|
|
1459
|
-
"cursor-cli"
|
|
1497
|
+
"cursor-cli",
|
|
1498
|
+
"qoder",
|
|
1499
|
+
"qoder-cn"
|
|
1460
1500
|
],
|
|
1461
1501
|
timeoutMs: PRODUCTION_INSTALL_TIMEOUT_MS
|
|
1462
1502
|
},
|