@liberseek/boft-cli-win32-arm64 0.6.8 → 0.6.9

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 @@ 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.6.8
10
+ npm install -g @liberseek/boft-cli@0.6.9
11
11
  ```
12
12
 
13
13
  Do not install this package directly. npm selects it through the optional dependencies of `@liberseek/boft-cli`.
@@ -35,3 +35,7 @@ License text: licenses/ws-LICENSE.txt
35
35
  zod 4.4.3
36
36
  License: MIT
37
37
  License text: licenses/zod-LICENSE.txt
38
+
39
+ opencodex native profiles (2d4d7a22381a2e497c2442902104619e25f937c7)
40
+ License: MIT
41
+ License text: licenses/opencodex-LICENSE.txt
@@ -1 +1 @@
1
- {"schemaVersion":1,"version":"0.6.8","distribution":"npm","target":"windows-arm64"}
1
+ {"schemaVersion":1,"version":"0.6.9","distribution":"npm","target":"windows-arm64"}
@@ -285,10 +285,99 @@ var CdpClient = class _CdpClient {
285
285
  }
286
286
  };
287
287
 
288
+ // packages/desktop-control/src/renderer-react-ownership.ts
289
+ function committedReactAncestors(value) {
290
+ const MAX_VISITED_FIBERS = 2e4;
291
+ const fiber = (value2) => typeof value2 === "object" && value2 !== null ? value2 : null;
292
+ const first = fiber(value);
293
+ if (!first) return [];
294
+ const previous = [];
295
+ const seen = /* @__PURE__ */ new Set();
296
+ for (let node = first; node; node = fiber(node.return)) {
297
+ if (seen.has(node) || seen.size >= MAX_VISITED_FIBERS) return [];
298
+ seen.add(node);
299
+ previous.push(node);
300
+ }
301
+ const rootState = fiber(previous.at(-1)?.stateNode);
302
+ if (!rootState || !("current" in rootState)) return previous;
303
+ const current = fiber(rootState.current);
304
+ if (!current) return [];
305
+ const stack = [{ node: current, parent: null }];
306
+ const alternate = fiber(first.alternate);
307
+ seen.clear();
308
+ while (stack.length > 0 && seen.size < MAX_VISITED_FIBERS) {
309
+ const entry = stack.pop();
310
+ if (!entry) break;
311
+ if (seen.has(entry.node)) return [];
312
+ seen.add(entry.node);
313
+ if (entry.node === first || entry.node === alternate) {
314
+ const ancestors = [];
315
+ for (let cursor = entry; cursor; cursor = cursor.parent)
316
+ ancestors.push(cursor.node);
317
+ return ancestors;
318
+ }
319
+ const sibling = entry.parent && fiber(entry.node.sibling);
320
+ if (sibling) stack.push({ node: sibling, parent: entry.parent });
321
+ const child = fiber(entry.node.child);
322
+ if (child) stack.push({ node: child, parent: entry });
323
+ }
324
+ return [];
325
+ }
326
+
327
+ // packages/desktop-control/src/renderer-host-response-ownership.ts
328
+ function retainRendererHostResponses(client, hostId, target) {
329
+ if (typeof client.addRequestLifecycleListener !== "function" || typeof target.addEventListener !== "function" || typeof target.removeEventListener !== "function")
330
+ return () => {
331
+ };
332
+ const isRecord4 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
333
+ const pending = /* @__PURE__ */ new Set();
334
+ let retired = false;
335
+ let unsubscribe = () => {
336
+ };
337
+ const detach = () => {
338
+ target.removeEventListener?.("message", receive);
339
+ unsubscribe();
340
+ };
341
+ const receive = (event) => {
342
+ const { source, origin, data } = event;
343
+ if (source != null && source !== target) return;
344
+ const ownOrigin = target.location?.origin;
345
+ if (source === target && ownOrigin && ownOrigin !== "null" && origin !== ownOrigin) return;
346
+ if (!isRecord4(data) || data.type !== "mcp-response" || data.hostId !== hostId) return;
347
+ const message = data.message;
348
+ if (!isRecord4(message)) return;
349
+ const id = message.id;
350
+ if (typeof id !== "string" && typeof id !== "number" || !pending.has(id)) return;
351
+ const hasError = isRecord4(message.error);
352
+ if (!hasError && !Object.prototype.hasOwnProperty.call(message, "result")) return;
353
+ queueMicrotask(() => {
354
+ if (!pending.has(id)) return;
355
+ if (hasError) client.onError(id, message.error, data.hostMetrics);
356
+ else client.onResult(id, message.result, data.hostMetrics);
357
+ });
358
+ };
359
+ target.addEventListener("message", receive);
360
+ unsubscribe = client.addRequestLifecycleListener((event) => {
361
+ if (!isRecord4(event) || event.hostId !== hostId) return;
362
+ const id = event.id;
363
+ if (typeof id !== "string" && typeof id !== "number") return;
364
+ if (!retired && event.type === "started" && typeof event.method === "string" && event.method.startsWith("codexhost/"))
365
+ pending.add(id);
366
+ else if (event.type === "completed" || event.type === "failed") {
367
+ pending.delete(id);
368
+ if (retired && pending.size === 0) detach();
369
+ }
370
+ });
371
+ return () => {
372
+ retired = true;
373
+ if (pending.size === 0) detach();
374
+ };
375
+ }
376
+
288
377
  // packages/desktop-control/src/renderer-draft-prewarm-runtime.ts
289
- function installDraftPrewarmPolicyBridge(manager, bridge, hostId, target, prewarmedThreadManager) {
378
+ function installDraftPrewarmPolicyBridge(manager, bridge, hostId, target, prewarmedThreadManager, isCurrentManager, retainResponses = retainRendererHostResponses) {
290
379
  const existing = target.__codexhostDraftPrewarmPolicyV1;
291
- if (existing?.owns?.length === 4 && existing.owns(manager, bridge, hostId, prewarmedThreadManager) === true) {
380
+ if (existing?.owns?.length === 5 && existing.owns(manager, bridge, hostId, prewarmedThreadManager, !!isCurrentManager) === true) {
292
381
  return { state: "ready", reason: "owned-request-bridge" };
293
382
  }
294
383
  existing?.dispose?.();
@@ -297,9 +386,10 @@ function installDraftPrewarmPolicyBridge(manager, bridge, hostId, target, prewar
297
386
  const originalOnNotification = manager.onNotification;
298
387
  const originalDispatchAppServerResponse = manager.dispatchAppServerResponse;
299
388
  let selectedModel = null;
300
- let selectedCodexAccountId = null;
301
389
  const isRecord4 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
302
390
  const isRemoteControlHost = hostId.startsWith("remote-control:");
391
+ const retireResponses = isRemoteControlHost ? () => {
392
+ } : retainResponses(bridge, hostId, target);
303
393
  const knownExternalThreadIds = /* @__PURE__ */ new Set();
304
394
  const knownOfficialThreadIds = /* @__PURE__ */ new Set();
305
395
  const threadOwnershipResolutions = /* @__PURE__ */ new Map();
@@ -650,7 +740,7 @@ function installDraftPrewarmPolicyBridge(manager, bridge, hostId, target, prewar
650
740
  if (method.startsWith("codexhost/")) return true;
651
741
  if (method === "thread/list") return true;
652
742
  if (method === "thread/start") {
653
- return isRecord4(parameters) && (typeof parameters.model === "string" && parameters.model.startsWith("codexhost/") || typeof parameters.__codexhostAccountId === "string");
743
+ return isRecord4(parameters) && typeof parameters.model === "string" && parameters.model.startsWith("codexhost/");
654
744
  }
655
745
  const threadId = threadIdFromParameters(parameters);
656
746
  if (threadId && knownExternalThreadIds.has(threadId)) return true;
@@ -661,13 +751,10 @@ function installDraftPrewarmPolicyBridge(manager, bridge, hostId, target, prewar
661
751
  if (!isRecord4(parameters) || parameters.ephemeral === true) {
662
752
  return parameters;
663
753
  }
664
- const routed = {
754
+ return {
665
755
  ...parameters,
666
- ...selectedModel === null ? {} : { model: selectedModel },
667
- ...selectedCodexAccountId === null ? {} : { __codexhostAccountId: selectedCodexAccountId }
756
+ ...selectedModel === null ? {} : { model: selectedModel }
668
757
  };
669
- selectedCodexAccountId = null;
670
- return routed;
671
758
  };
672
759
  const routedSend = (method, parameters, options) => {
673
760
  const routedParameters = method === "thread/start" ? routeThreadStart(parameters) : parameters;
@@ -725,10 +812,12 @@ function installDraftPrewarmPolicyBridge(manager, bridge, hostId, target, prewar
725
812
  const policy = Object.freeze({
726
813
  state: "ready",
727
814
  hostId,
728
- owns(candidateManager, candidate, candidateHostId, candidatePrewarmedThreadManager) {
729
- return candidateManager === manager && candidate === bridge && candidateHostId === hostId && candidatePrewarmedThreadManager === prewarmedThreadManager;
815
+ owns(candidateManager, candidate, candidateHostId, candidatePrewarmedThreadManager, requiresCurrentManager) {
816
+ return candidateManager === manager && candidate === bridge && candidateHostId === hostId && candidatePrewarmedThreadManager === prewarmedThreadManager && requiresCurrentManager === !!isCurrentManager;
730
817
  },
731
818
  requestTarget() {
819
+ if (isCurrentManager && !isCurrentManager())
820
+ throw new Error("Renderer request manager is retired");
732
821
  return manager;
733
822
  },
734
823
  select(model) {
@@ -739,19 +828,12 @@ function installDraftPrewarmPolicyBridge(manager, bridge, hostId, target, prewar
739
828
  selectedModel = model;
740
829
  return true;
741
830
  },
742
- selectAccount(accountId) {
743
- if (accountId !== null && !/^[A-Za-z0-9._~-]+$/u.test(accountId)) {
744
- throw new Error("Draft Codex Account ID must be filename-safe");
745
- }
746
- if (selectedCodexAccountId === accountId) return false;
747
- selectedCodexAccountId = accountId;
748
- return true;
749
- },
750
831
  clear() {
751
832
  prewarmedThreadManager.discardAllPrewarmedThreads();
752
833
  return Promise.resolve();
753
834
  },
754
835
  dispose() {
836
+ retireResponses();
755
837
  if (bridge.sendRequest === routedSend) bridge.sendRequest = originalSend;
756
838
  if (bridge.prewarmThreadStart === routedPrewarm) {
757
839
  bridge.prewarmThreadStart = originalPrewarm;
@@ -781,7 +863,6 @@ function installDraftPrewarmPolicyBridge(manager, bridge, hostId, target, prewar
781
863
  knownOfficialThreadIds.clear();
782
864
  threadOwnershipResolutions.clear();
783
865
  selectedModel = null;
784
- selectedCodexAccountId = null;
785
866
  }
786
867
  });
787
868
  Object.defineProperty(target, "__codexhostDraftPrewarmPolicyV1", {
@@ -825,11 +906,12 @@ function isRecord2(value) {
825
906
  }
826
907
  var FIND_REQUEST_MANAGER_EXPRESSION = `(() => {
827
908
  const requestManagerFromHookState = ${requestManagerFromHookState.toString()};
909
+ const committedReactAncestors = ${committedReactAncestors.toString()};
828
910
  const editors = [...document.querySelectorAll(
829
911
  '[data-codex-composer], [contenteditable="true"][role="textbox"]',
830
912
  )];
831
913
  if (editors.length !== 1) {
832
- return { candidateCount: 0, hostId: null, sendRequest: null };
914
+ return { candidateCount: 0, editorCount: editors.length, hostId: null, sendRequest: null };
833
915
  }
834
916
  let element = editors[0];
835
917
  let fiber = null;
@@ -842,7 +924,8 @@ var FIND_REQUEST_MANAGER_EXPRESSION = `(() => {
842
924
  }
843
925
  const managers = new Set();
844
926
  const activeHostIds = new Set();
845
- for (let depth = 0; fiber != null && depth < 200; depth += 1, fiber = fiber.return) {
927
+ for (const current of committedReactAncestors(fiber)) {
928
+ const fiber = current;
846
929
  const props = fiber.memoizedProps;
847
930
  if (props != null && typeof props === 'object') {
848
931
  for (const name of ['executionTargetHostId', 'permissionsHostId']) {
@@ -873,12 +956,20 @@ var FIND_REQUEST_MANAGER_EXPRESSION = `(() => {
873
956
  const selected = (${selectRendererRequestManager.toString()})(candidates, [...activeHostIds]);
874
957
  return {
875
958
  candidateCount: selected == null ? candidates.length : 1,
959
+ editorCount: editors.length,
876
960
  hostId: selected?.hostId ?? null,
877
961
  manager: selected?.manager ?? null,
878
962
  requestClient: selected?.requestClient ?? null,
879
963
  prewarmedThreadManager: selected?.prewarmedThreadManager ?? null,
880
964
  };
881
965
  })()`;
966
+ var IS_CURRENT_REQUEST_MANAGER = `function(manager, requestClient, hostId, prewarmedThreadManager) {
967
+ const current = ${FIND_REQUEST_MANAGER_EXPRESSION};
968
+ return current.editorCount === 0 || (
969
+ current.manager === manager && current.requestClient === requestClient &&
970
+ current.hostId === hostId && current.prewarmedThreadManager === prewarmedThreadManager
971
+ );
972
+ }`;
882
973
  var INSTALL_RENDERER_POLICY_FUNCTION = `function(requestClient, hostId, prewarmedThreadManager) {
883
974
  return (${installDraftPrewarmPolicyBridge.toString()})(
884
975
  this,
@@ -886,6 +977,8 @@ var INSTALL_RENDERER_POLICY_FUNCTION = `function(requestClient, hostId, prewarme
886
977
  hostId,
887
978
  window,
888
979
  prewarmedThreadManager,
980
+ () => (${IS_CURRENT_REQUEST_MANAGER})(this, requestClient, hostId, prewarmedThreadManager),
981
+ (${retainRendererHostResponses.toString()}),
889
982
  );
890
983
  }`;
891
984
  var REQUEST_MANAGER_WAIT_TIMEOUT_MS = 6e4;
@@ -911,6 +1004,10 @@ function directRendererInstaller() {
911
1004
  selected.hostId,
912
1005
  window,
913
1006
  selected.prewarmedThreadManager,
1007
+ () => (${IS_CURRENT_REQUEST_MANAGER})(
1008
+ selected.manager, selected.requestClient, selected.hostId, selected.prewarmedThreadManager,
1009
+ ),
1010
+ (${retainRendererHostResponses.toString()}),
914
1011
  );
915
1012
  })()`;
916
1013
  }