@bryanhu/codexly 0.3.0 → 0.5.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/CHANGELOG.md +45 -1
- package/README.md +3 -1
- package/README.zh-CN.md +3 -1
- package/dist/{chunk-Y7HG5THF.js → chunk-4PA52XB7.js} +938 -83
- package/dist/{chunk-VZLNYRY3.js → chunk-AGMOIRX4.js} +1 -1
- package/dist/{chunk-3OBVX5TN.js → chunk-RNTA4MFS.js} +9 -1
- package/dist/{chunk-6HXWAD7A.js → chunk-UAJCHOZK.js} +1260 -466
- package/dist/{chunk-DR6HEQ7V.js → chunk-ZSWNUDDK.js} +123 -7
- package/dist/cli.js +10 -6
- package/dist/client/index.js +35 -5
- package/dist/core/index.js +1 -1
- package/dist/protocol/index.js +1 -1
- package/dist/providers/codex/index.js +3 -3
- package/dist/server/index.js +5 -5
- package/dist/sqlite-state-worker.js +117 -7
- package/dist/web/.vite/manifest.json +406 -273
- package/dist/web/.vite/manifest.json.br +0 -0
- package/dist/web/.vite/manifest.json.gz +0 -0
- package/dist/web/assets/button-group-GolVMDRO.js +1 -0
- package/dist/web/assets/button-group-GolVMDRO.js.br +0 -0
- package/dist/web/assets/button-group-GolVMDRO.js.gz +0 -0
- package/dist/web/assets/check-DufG-ZUa.js +1 -0
- package/dist/web/assets/check-DufG-ZUa.js.br +0 -0
- package/dist/web/assets/check-DufG-ZUa.js.gz +0 -0
- package/dist/web/assets/checkbox-37DlWLBa.js +1 -0
- package/dist/web/assets/checkbox-37DlWLBa.js.br +0 -0
- package/dist/web/assets/checkbox-37DlWLBa.js.gz +0 -0
- package/dist/web/assets/{chunk-BO2N2NFS-Cv0xdEIU.js → chunk-BO2N2NFS-C9R62W5i.js} +4 -4
- package/dist/web/assets/chunk-BO2N2NFS-C9R62W5i.js.br +0 -0
- package/dist/web/assets/chunk-BO2N2NFS-C9R62W5i.js.gz +0 -0
- package/dist/web/assets/{code-highlighter-XA2cEb7n.js → code-highlighter-B_sQt157.js} +1 -1
- package/dist/web/assets/code-highlighter-B_sQt157.js.br +0 -0
- package/dist/web/assets/code-highlighter-B_sQt157.js.gz +0 -0
- package/dist/web/assets/code-languages-lQDTaxNN.js +2 -0
- package/dist/web/assets/code-languages-lQDTaxNN.js.br +0 -0
- package/dist/web/assets/code-languages-lQDTaxNN.js.gz +0 -0
- package/dist/web/assets/context-menu-Dag_JnAP.js +1 -0
- package/dist/web/assets/context-menu-Dag_JnAP.js.br +0 -0
- package/dist/web/assets/context-menu-Dag_JnAP.js.gz +0 -0
- package/dist/web/assets/cpp-DrC1WCyF.js +1 -0
- package/dist/web/assets/cpp-DrC1WCyF.js.br +0 -0
- package/dist/web/assets/cpp-DrC1WCyF.js.gz +0 -0
- package/dist/web/assets/cpp-DuI2J82L.js +1 -0
- package/dist/web/assets/cpp-DuI2J82L.js.br +0 -0
- package/dist/web/assets/cpp-DuI2J82L.js.gz +0 -0
- package/dist/web/assets/dist-D75B5EEW.js +1 -0
- package/dist/web/assets/dist-D75B5EEW.js.br +0 -0
- package/dist/web/assets/dist-D75B5EEW.js.gz +0 -0
- package/dist/web/assets/dist-rI8Y0b5t.js +1 -0
- package/dist/web/assets/dist-rI8Y0b5t.js.br +0 -0
- package/dist/web/assets/dist-rI8Y0b5t.js.gz +0 -0
- package/dist/web/assets/{engine-compile-DQ0HPfe0.js → engine-compile-Bqjaa_8Z.js} +14 -14
- package/dist/web/assets/engine-compile-Bqjaa_8Z.js.br +0 -0
- package/dist/web/assets/engine-compile-Bqjaa_8Z.js.gz +0 -0
- package/dist/web/assets/es2015-Bu8fG2VP.js +41 -0
- package/dist/web/assets/es2015-Bu8fG2VP.js.br +0 -0
- package/dist/web/assets/es2015-Bu8fG2VP.js.gz +0 -0
- package/dist/web/assets/file-code-corner-BfUyC-bF.js +1 -0
- package/dist/web/assets/file-code-corner-BfUyC-bF.js.br +1 -0
- package/dist/web/assets/file-code-corner-BfUyC-bF.js.gz +0 -0
- package/dist/web/assets/file-navigation-view-preference-De4_ih3I.js +1 -0
- package/dist/web/assets/file-navigation-view-preference-De4_ih3I.js.br +0 -0
- package/dist/web/assets/file-navigation-view-preference-De4_ih3I.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-D6itznUk.js +2 -0
- package/dist/web/assets/file-review-dialog-D6itznUk.js.br +0 -0
- package/dist/web/assets/file-review-dialog-D6itznUk.js.gz +0 -0
- package/dist/web/assets/file-tree-CFUaXf_b.js +1 -0
- package/dist/web/assets/file-tree-CFUaXf_b.js.br +0 -0
- package/dist/web/assets/file-tree-CFUaXf_b.js.gz +0 -0
- package/dist/web/assets/git-commit-horizontal-BsjVPZ9W.js +1 -0
- package/dist/web/assets/git-commit-horizontal-BsjVPZ9W.js.br +0 -0
- package/dist/web/assets/git-commit-horizontal-BsjVPZ9W.js.gz +0 -0
- package/dist/web/assets/git-history-panel-DIr_4cfP.js +2 -0
- package/dist/web/assets/git-history-panel-DIr_4cfP.js.br +0 -0
- package/dist/web/assets/git-history-panel-DIr_4cfP.js.gz +0 -0
- package/dist/web/assets/global-settings-dialog-CWeXTy89.js +1 -0
- package/dist/web/assets/global-settings-dialog-CWeXTy89.js.br +0 -0
- package/dist/web/assets/global-settings-dialog-CWeXTy89.js.gz +0 -0
- package/dist/web/assets/grammar-cpp-support-CH6jZNJS.js +1 -0
- package/dist/web/assets/grammar-cpp-support-CH6jZNJS.js.br +0 -0
- package/dist/web/assets/grammar-cpp-support-CH6jZNJS.js.gz +0 -0
- package/dist/web/assets/{highlighted-body-OFNGDK62-3Xd1uGCw.js → highlighted-body-OFNGDK62-J6vd4AIe.js} +1 -1
- package/dist/web/assets/highlighted-body-OFNGDK62-J6vd4AIe.js.br +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-J6vd4AIe.js.gz +0 -0
- package/dist/web/assets/index-CMCPev5S.js +4 -0
- package/dist/web/assets/index-CMCPev5S.js.br +0 -0
- package/dist/web/assets/index-CMCPev5S.js.gz +0 -0
- package/dist/web/assets/index-CcSDzrvO.css +2 -0
- package/dist/web/assets/index-CcSDzrvO.css.br +0 -0
- package/dist/web/assets/index-CcSDzrvO.css.gz +0 -0
- package/dist/web/assets/lazy-message-response-kziUJe0I.js +2 -0
- package/dist/web/assets/lazy-message-response-kziUJe0I.js.br +0 -0
- package/dist/web/assets/lazy-message-response-kziUJe0I.js.gz +0 -0
- package/dist/web/assets/loader-circle-DUyazd0N.js +1 -0
- package/dist/web/assets/loader-circle-DUyazd0N.js.br +0 -0
- package/dist/web/assets/loader-circle-DUyazd0N.js.gz +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-6KIGYUKQ.js +1 -0
- package/dist/web/assets/mermaid-GHXKKRXX-6KIGYUKQ.js.br +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-6KIGYUKQ.js.gz +0 -0
- package/dist/web/assets/message-response-BH1WLiOG.js +7 -0
- package/dist/web/assets/message-response-BH1WLiOG.js.br +0 -0
- package/dist/web/assets/message-response-BH1WLiOG.js.gz +0 -0
- package/dist/web/assets/{patch-diff-viewer-DHfvCO4S.js → patch-diff-viewer-BP7d9z00.js} +2 -2
- package/dist/web/assets/patch-diff-viewer-BP7d9z00.js.br +0 -0
- package/dist/web/assets/patch-diff-viewer-BP7d9z00.js.gz +0 -0
- package/dist/web/assets/{perl-Br95gH8g.js → perl-C4NAnH_t.js} +1 -1
- package/dist/web/assets/perl-C4NAnH_t.js.br +0 -0
- package/dist/web/assets/{perl-Br95gH8g.js.gz → perl-C4NAnH_t.js.gz} +0 -0
- package/dist/web/assets/{php-CYrBA5iX.js → php-CQT4wx5i.js} +1 -1
- package/dist/web/assets/php-CQT4wx5i.js.br +0 -0
- package/dist/web/assets/{php-CYrBA5iX.js.gz → php-CQT4wx5i.js.gz} +0 -0
- package/dist/web/assets/project-file-popup-page-BqEZEv1s.js +1 -0
- package/dist/web/assets/project-file-popup-page-BqEZEv1s.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-BqEZEv1s.js.gz +0 -0
- package/dist/web/assets/project-source-panel-BkRa6eOs.js +3 -0
- package/dist/web/assets/project-source-panel-BkRa6eOs.js.br +0 -0
- package/dist/web/assets/project-source-panel-BkRa6eOs.js.gz +0 -0
- package/dist/web/assets/prompt-input-controls-5tCLhg2X.js +1 -0
- package/dist/web/assets/prompt-input-controls-5tCLhg2X.js.br +0 -0
- package/dist/web/assets/prompt-input-controls-5tCLhg2X.js.gz +0 -0
- package/dist/web/assets/prompt-reference-token-Dnq6GpIQ.js +1 -0
- package/dist/web/assets/prompt-reference-token-Dnq6GpIQ.js.br +3 -0
- package/dist/web/assets/prompt-reference-token-Dnq6GpIQ.js.gz +0 -0
- package/dist/web/assets/provider-connection-queries-BPczkhUT.js +1 -0
- package/dist/web/assets/provider-connection-queries-BPczkhUT.js.br +0 -0
- package/dist/web/assets/provider-connection-queries-BPczkhUT.js.gz +0 -0
- package/dist/web/assets/{ruby-CbXu8Ywv.js → ruby-Oh3ZbUP2.js} +1 -1
- package/dist/web/assets/ruby-Oh3ZbUP2.js.br +0 -0
- package/dist/web/assets/ruby-Oh3ZbUP2.js.gz +0 -0
- package/dist/web/assets/{shiki-bundle-CNYWcrCX.js → shiki-bundle-VSjMZiOC.js} +1 -1
- package/dist/web/assets/shiki-bundle-VSjMZiOC.js.br +0 -0
- package/dist/web/assets/shiki-bundle-VSjMZiOC.js.gz +0 -0
- package/dist/web/assets/swift-CyEgAFGc.js +1 -0
- package/dist/web/assets/swift-CyEgAFGc.js.br +0 -0
- package/dist/web/assets/swift-CyEgAFGc.js.gz +0 -0
- package/dist/web/assets/tooltip-jGsHGylL.js +1 -0
- package/dist/web/assets/tooltip-jGsHGylL.js.br +0 -0
- package/dist/web/assets/tooltip-jGsHGylL.js.gz +0 -0
- package/dist/web/assets/upload-D6X3pnK5.js +1 -0
- package/dist/web/assets/upload-D6X3pnK5.js.br +0 -0
- package/dist/web/assets/upload-D6X3pnK5.js.gz +0 -0
- package/dist/web/assets/useInfiniteQuery-Bs3l5hx7.js +1 -0
- package/dist/web/assets/useInfiniteQuery-Bs3l5hx7.js.br +0 -0
- package/dist/web/assets/useInfiniteQuery-Bs3l5hx7.js.gz +0 -0
- package/dist/web/assets/{vue-BpAUjojh.js → vue-BcFuTOIy.js} +1 -1
- package/dist/web/assets/vue-BcFuTOIy.js.br +0 -0
- package/dist/web/assets/vue-BcFuTOIy.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-BbHDvE9x.js +2 -0
- package/dist/web/assets/workbench-inspector-changes-BbHDvE9x.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-BbHDvE9x.js.gz +0 -0
- package/dist/web/assets/workbench-pet-canvas-DRzsdZ1c.js +1 -0
- package/dist/web/assets/workbench-pet-canvas-DRzsdZ1c.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-DRzsdZ1c.js.gz +0 -0
- package/dist/web/assets/workbench-shell-wnOOfeVI.js +15 -0
- package/dist/web/assets/workbench-shell-wnOOfeVI.js.br +0 -0
- package/dist/web/assets/workbench-shell-wnOOfeVI.js.gz +0 -0
- package/dist/web/index.html +12 -8
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/package.json +7 -10
- package/dist/web/assets/button-B0Zy5xUw.js +0 -1
- package/dist/web/assets/button-B0Zy5xUw.js.br +0 -0
- package/dist/web/assets/button-B0Zy5xUw.js.gz +0 -0
- package/dist/web/assets/button-group-Czp67RFV.js +0 -1
- package/dist/web/assets/button-group-Czp67RFV.js.br +0 -0
- package/dist/web/assets/button-group-Czp67RFV.js.gz +0 -0
- package/dist/web/assets/checkbox-J-dVFT8h.js +0 -1
- package/dist/web/assets/checkbox-J-dVFT8h.js.br +0 -0
- package/dist/web/assets/checkbox-J-dVFT8h.js.gz +0 -0
- package/dist/web/assets/chunk-BO2N2NFS-Cv0xdEIU.js.br +0 -0
- package/dist/web/assets/chunk-BO2N2NFS-Cv0xdEIU.js.gz +0 -0
- package/dist/web/assets/code-highlighter-XA2cEb7n.js.br +0 -0
- package/dist/web/assets/code-highlighter-XA2cEb7n.js.gz +0 -0
- package/dist/web/assets/code-languages-B1bG8xP9.js +0 -2
- package/dist/web/assets/code-languages-B1bG8xP9.js.br +0 -0
- package/dist/web/assets/code-languages-B1bG8xP9.js.gz +0 -0
- package/dist/web/assets/cpp-BcHBJY00.js +0 -1
- package/dist/web/assets/cpp-BcHBJY00.js.br +0 -0
- package/dist/web/assets/cpp-BcHBJY00.js.gz +0 -0
- package/dist/web/assets/cpp-CIkEvbIe.js +0 -1
- package/dist/web/assets/cpp-CIkEvbIe.js.br +0 -0
- package/dist/web/assets/cpp-CIkEvbIe.js.gz +0 -0
- package/dist/web/assets/engine-compile-DQ0HPfe0.js.br +0 -0
- package/dist/web/assets/engine-compile-DQ0HPfe0.js.gz +0 -0
- package/dist/web/assets/es2015-D1QRD4rq.js +0 -41
- package/dist/web/assets/es2015-D1QRD4rq.js.br +0 -0
- package/dist/web/assets/es2015-D1QRD4rq.js.gz +0 -0
- package/dist/web/assets/file-fDjkn3KE.js +0 -1
- package/dist/web/assets/file-fDjkn3KE.js.br +0 -2
- package/dist/web/assets/file-fDjkn3KE.js.gz +0 -0
- package/dist/web/assets/file-review-dialog-a4LVk4QA.js +0 -2
- package/dist/web/assets/file-review-dialog-a4LVk4QA.js.br +0 -0
- package/dist/web/assets/file-review-dialog-a4LVk4QA.js.gz +0 -0
- package/dist/web/assets/file-tree-Dh8mZi4H.js +0 -1
- package/dist/web/assets/file-tree-Dh8mZi4H.js.br +0 -0
- package/dist/web/assets/file-tree-Dh8mZi4H.js.gz +0 -0
- package/dist/web/assets/git-commit-horizontal-DqCudnTd.js +0 -1
- package/dist/web/assets/git-commit-horizontal-DqCudnTd.js.br +0 -0
- package/dist/web/assets/git-commit-horizontal-DqCudnTd.js.gz +0 -0
- package/dist/web/assets/git-history-panel-C0BqsVJw.js +0 -2
- package/dist/web/assets/git-history-panel-C0BqsVJw.js.br +0 -0
- package/dist/web/assets/git-history-panel-C0BqsVJw.js.gz +0 -0
- package/dist/web/assets/global-settings-dialog-DAk0qzab.js +0 -1
- package/dist/web/assets/global-settings-dialog-DAk0qzab.js.br +0 -0
- package/dist/web/assets/global-settings-dialog-DAk0qzab.js.gz +0 -0
- package/dist/web/assets/grammar-cpp-support-CV8oNpIY.js +0 -1
- package/dist/web/assets/grammar-cpp-support-CV8oNpIY.js.br +0 -0
- package/dist/web/assets/grammar-cpp-support-CV8oNpIY.js.gz +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-3Xd1uGCw.js.br +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-3Xd1uGCw.js.gz +0 -0
- package/dist/web/assets/index-C9MtcGVc.js +0 -4
- package/dist/web/assets/index-C9MtcGVc.js.br +0 -0
- package/dist/web/assets/index-C9MtcGVc.js.gz +0 -0
- package/dist/web/assets/index-DAs_avwK.css +0 -2
- package/dist/web/assets/index-DAs_avwK.css.br +0 -0
- package/dist/web/assets/index-DAs_avwK.css.gz +0 -0
- package/dist/web/assets/lazy-message-response-BDqsH4Ww.js +0 -2
- package/dist/web/assets/lazy-message-response-BDqsH4Ww.js.br +0 -0
- package/dist/web/assets/lazy-message-response-BDqsH4Ww.js.gz +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-Cp6mRHuL.js +0 -1
- package/dist/web/assets/mermaid-GHXKKRXX-Cp6mRHuL.js.br +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-Cp6mRHuL.js.gz +0 -0
- package/dist/web/assets/message-response-DyFE9GSy.js +0 -7
- package/dist/web/assets/message-response-DyFE9GSy.js.br +0 -0
- package/dist/web/assets/message-response-DyFE9GSy.js.gz +0 -0
- package/dist/web/assets/patch-diff-viewer-DHfvCO4S.js.br +0 -0
- package/dist/web/assets/patch-diff-viewer-DHfvCO4S.js.gz +0 -0
- package/dist/web/assets/perl-Br95gH8g.js.br +0 -0
- package/dist/web/assets/php-CYrBA5iX.js.br +0 -0
- package/dist/web/assets/prompt-input-controls-CLj9lxlf.js +0 -1
- package/dist/web/assets/prompt-input-controls-CLj9lxlf.js.br +0 -0
- package/dist/web/assets/prompt-input-controls-CLj9lxlf.js.gz +0 -0
- package/dist/web/assets/prompt-reference-token-Cxx6C-IR.js +0 -1
- package/dist/web/assets/prompt-reference-token-Cxx6C-IR.js.br +0 -0
- package/dist/web/assets/prompt-reference-token-Cxx6C-IR.js.gz +0 -0
- package/dist/web/assets/provider-connection-queries-C2Fn0xx2.js +0 -1
- package/dist/web/assets/provider-connection-queries-C2Fn0xx2.js.br +0 -0
- package/dist/web/assets/provider-connection-queries-C2Fn0xx2.js.gz +0 -0
- package/dist/web/assets/ruby-CbXu8Ywv.js.br +0 -0
- package/dist/web/assets/ruby-CbXu8Ywv.js.gz +0 -0
- package/dist/web/assets/shiki-bundle-CNYWcrCX.js.br +0 -0
- package/dist/web/assets/shiki-bundle-CNYWcrCX.js.gz +0 -0
- package/dist/web/assets/swift-DonLKvLd.js +0 -1
- package/dist/web/assets/swift-DonLKvLd.js.br +0 -0
- package/dist/web/assets/swift-DonLKvLd.js.gz +0 -0
- package/dist/web/assets/vue-BpAUjojh.js.br +0 -0
- package/dist/web/assets/vue-BpAUjojh.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-fibkZGwp.js +0 -1
- package/dist/web/assets/workbench-inspector-changes-fibkZGwp.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-fibkZGwp.js.gz +0 -0
- package/dist/web/assets/workbench-shell-eo1pFJFk.js +0 -13
- package/dist/web/assets/workbench-shell-eo1pFJFk.js.br +0 -0
- package/dist/web/assets/workbench-shell-eo1pFJFk.js.gz +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
|
-
import { PendingRequestResolutionError } from './chunk-
|
|
3
|
-
import { TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_HISTORY_IMAGE_TOTAL_BYTES, isAgentFastModeAvailable, MAX_REALTIME_FILE_CHANGES, MAX_REALTIME_DIFF_BYTES, stripLeadingAgentSkillReferences, MAX_AGENT_HISTORY_IMAGES, MAX_AGENT_TEXT_BYTES } from './chunk-
|
|
2
|
+
import { WorkbenchPetProviderError, PendingRequestResolutionError } from './chunk-RNTA4MFS.js';
|
|
3
|
+
import { TEMPORARY_TASK_SCOPE_ID, MAX_AGENT_HISTORY_IMAGE_TOTAL_BYTES, isAgentFastModeAvailable, MAX_REALTIME_FILE_CHANGES, MAX_REALTIME_DIFF_BYTES, stripLeadingAgentSkillReferences, MAX_AGENT_HISTORY_IMAGES, MAX_AGENT_TEXT_BYTES } from './chunk-ZSWNUDDK.js';
|
|
4
4
|
import { __commonJS, __require, __toESM } from './chunk-K6J42667.js';
|
|
5
5
|
import { execFile, spawn } from 'child_process';
|
|
6
6
|
import { constants, mkdtempSync, rmSync, createReadStream, mkdirSync, unlinkSync, renameSync, writeFileSync, openSync, readSync, closeSync, statSync } from 'fs';
|
|
7
|
-
import {
|
|
7
|
+
import { readFile, mkdir, writeFile, rename, rm, readdir, realpath, stat, access, lstat, opendir } from 'fs/promises';
|
|
8
8
|
import { createRequire as createRequire$1 } from 'module';
|
|
9
|
-
import { resolve, basename, dirname,
|
|
9
|
+
import { resolve, basename, dirname, join, relative, sep, win32, posix, isAbsolute, extname } from 'path';
|
|
10
10
|
import { promisify } from 'util';
|
|
11
|
-
import {
|
|
11
|
+
import { randomUUID, createHash } from 'crypto';
|
|
12
12
|
import { Buffer as Buffer$1 } from 'buffer';
|
|
13
13
|
import { tmpdir, homedir } from 'os';
|
|
14
14
|
import { StringDecoder } from 'string_decoder';
|
|
@@ -1250,7 +1250,7 @@ var require_sonic_boom = __commonJS({
|
|
|
1250
1250
|
if (!(this instanceof SonicBoom)) {
|
|
1251
1251
|
return new SonicBoom(opts);
|
|
1252
1252
|
}
|
|
1253
|
-
let { fd, dest, minLength, maxLength, maxWrite, periodicFlush, sync, append = true, mkdir, retryEAGAIN, fsync, contentMode, mode } = opts || {};
|
|
1253
|
+
let { fd, dest, minLength, maxLength, maxWrite, periodicFlush, sync, append = true, mkdir: mkdir2, retryEAGAIN, fsync, contentMode, mode } = opts || {};
|
|
1254
1254
|
fd = fd || dest;
|
|
1255
1255
|
this._len = 0;
|
|
1256
1256
|
this.fd = -1;
|
|
@@ -1275,7 +1275,7 @@ var require_sonic_boom = __commonJS({
|
|
|
1275
1275
|
this.append = append || false;
|
|
1276
1276
|
this.mode = mode;
|
|
1277
1277
|
this.retryEAGAIN = retryEAGAIN || (() => true);
|
|
1278
|
-
this.mkdir =
|
|
1278
|
+
this.mkdir = mkdir2 || false;
|
|
1279
1279
|
let fsWriteSync;
|
|
1280
1280
|
let fsWrite;
|
|
1281
1281
|
if (contentMode === kContentModeBuffer) {
|
|
@@ -1983,7 +1983,7 @@ var require_thread_stream = __commonJS({
|
|
|
1983
1983
|
var { version } = require_package();
|
|
1984
1984
|
var { EventEmitter } = __require("events");
|
|
1985
1985
|
var { Worker: Worker2 } = __require("worker_threads");
|
|
1986
|
-
var { join:
|
|
1986
|
+
var { join: join6 } = __require("path");
|
|
1987
1987
|
var { pathToFileURL } = __require("url");
|
|
1988
1988
|
var { wait } = require_wait();
|
|
1989
1989
|
var {
|
|
@@ -2034,7 +2034,7 @@ var require_thread_stream = __commonJS({
|
|
|
2034
2034
|
function createWorker(stream, opts) {
|
|
2035
2035
|
const { filename, workerData } = opts;
|
|
2036
2036
|
const bundlerOverrides = "__bundlerPathsOverrides" in globalThis ? globalThis.__bundlerPathsOverrides : {};
|
|
2037
|
-
const toExecute = bundlerOverrides["thread-stream-worker"] ||
|
|
2037
|
+
const toExecute = bundlerOverrides["thread-stream-worker"] || join6(__dirname, "lib", "worker.js");
|
|
2038
2038
|
const worker = new Worker2(toExecute, {
|
|
2039
2039
|
...opts.workerOpts,
|
|
2040
2040
|
name: opts.workerOpts?.name || "thread-stream",
|
|
@@ -2501,7 +2501,7 @@ var require_transport = __commonJS({
|
|
|
2501
2501
|
var { createRequire: createRequire2 } = __require("module");
|
|
2502
2502
|
var { existsSync } = __require("fs");
|
|
2503
2503
|
var getCallers = require_caller();
|
|
2504
|
-
var { join:
|
|
2504
|
+
var { join: join6, isAbsolute: isAbsolute7, sep: sep3 } = __require("path");
|
|
2505
2505
|
var { fileURLToPath } = __require("url");
|
|
2506
2506
|
var sleep = require_atomic_sleep();
|
|
2507
2507
|
var onExit = require_on_exit_leak_free();
|
|
@@ -2573,7 +2573,7 @@ var require_transport = __commonJS({
|
|
|
2573
2573
|
return false;
|
|
2574
2574
|
}
|
|
2575
2575
|
}
|
|
2576
|
-
return
|
|
2576
|
+
return isAbsolute7(path) && !existsSync(path);
|
|
2577
2577
|
}
|
|
2578
2578
|
function stripQuotes(value) {
|
|
2579
2579
|
const first = value[0];
|
|
@@ -2654,7 +2654,7 @@ var require_transport = __commonJS({
|
|
|
2654
2654
|
throw new Error("only one of target or targets can be specified");
|
|
2655
2655
|
}
|
|
2656
2656
|
if (targets) {
|
|
2657
|
-
target = bundlerOverrides["pino-worker"] ||
|
|
2657
|
+
target = bundlerOverrides["pino-worker"] || join6(__dirname, "worker.js");
|
|
2658
2658
|
options.targets = targets.filter((dest) => dest.target).map((dest) => {
|
|
2659
2659
|
return {
|
|
2660
2660
|
...dest,
|
|
@@ -2672,7 +2672,7 @@ var require_transport = __commonJS({
|
|
|
2672
2672
|
});
|
|
2673
2673
|
});
|
|
2674
2674
|
} else if (pipeline) {
|
|
2675
|
-
target = bundlerOverrides["pino-worker"] ||
|
|
2675
|
+
target = bundlerOverrides["pino-worker"] || join6(__dirname, "worker.js");
|
|
2676
2676
|
options.pipelines = [pipeline.map((dest) => {
|
|
2677
2677
|
return {
|
|
2678
2678
|
...dest,
|
|
@@ -2691,16 +2691,16 @@ var require_transport = __commonJS({
|
|
|
2691
2691
|
return buildStream(fixTarget(target), options, worker, sync, name);
|
|
2692
2692
|
function fixTarget(origin) {
|
|
2693
2693
|
origin = bundlerOverrides[origin] || origin;
|
|
2694
|
-
if (
|
|
2694
|
+
if (isAbsolute7(origin) || origin.indexOf("file://") === 0) {
|
|
2695
2695
|
return origin;
|
|
2696
2696
|
}
|
|
2697
2697
|
if (origin === "pino/file") {
|
|
2698
|
-
return
|
|
2698
|
+
return join6(__dirname, "..", "file.js");
|
|
2699
2699
|
}
|
|
2700
2700
|
let fixTarget2;
|
|
2701
2701
|
for (const filePath of callers) {
|
|
2702
2702
|
try {
|
|
2703
|
-
const context = filePath === "node:repl" ? process.cwd() +
|
|
2703
|
+
const context = filePath === "node:repl" ? process.cwd() + sep3 : filePath;
|
|
2704
2704
|
fixTarget2 = createRequire2(context).resolve(origin);
|
|
2705
2705
|
break;
|
|
2706
2706
|
} catch (err) {
|
|
@@ -3670,7 +3670,7 @@ var require_safe_stable_stringify = __commonJS({
|
|
|
3670
3670
|
return circularValue;
|
|
3671
3671
|
}
|
|
3672
3672
|
let res = "";
|
|
3673
|
-
let
|
|
3673
|
+
let join6 = ",";
|
|
3674
3674
|
const originalIndentation = indentation;
|
|
3675
3675
|
if (Array.isArray(value)) {
|
|
3676
3676
|
if (value.length === 0) {
|
|
@@ -3684,7 +3684,7 @@ var require_safe_stable_stringify = __commonJS({
|
|
|
3684
3684
|
indentation += spacer;
|
|
3685
3685
|
res += `
|
|
3686
3686
|
${indentation}`;
|
|
3687
|
-
|
|
3687
|
+
join6 = `,
|
|
3688
3688
|
${indentation}`;
|
|
3689
3689
|
}
|
|
3690
3690
|
const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
|
|
@@ -3692,13 +3692,13 @@ ${indentation}`;
|
|
|
3692
3692
|
for (; i < maximumValuesToStringify - 1; i++) {
|
|
3693
3693
|
const tmp2 = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation);
|
|
3694
3694
|
res += tmp2 !== void 0 ? tmp2 : "null";
|
|
3695
|
-
res +=
|
|
3695
|
+
res += join6;
|
|
3696
3696
|
}
|
|
3697
3697
|
const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation);
|
|
3698
3698
|
res += tmp !== void 0 ? tmp : "null";
|
|
3699
3699
|
if (value.length - 1 > maximumBreadth) {
|
|
3700
3700
|
const removedKeys = value.length - maximumBreadth - 1;
|
|
3701
|
-
res += `${
|
|
3701
|
+
res += `${join6}"... ${getItemCount(removedKeys)} not stringified"`;
|
|
3702
3702
|
}
|
|
3703
3703
|
if (spacer !== "") {
|
|
3704
3704
|
res += `
|
|
@@ -3719,7 +3719,7 @@ ${originalIndentation}`;
|
|
|
3719
3719
|
let separator = "";
|
|
3720
3720
|
if (spacer !== "") {
|
|
3721
3721
|
indentation += spacer;
|
|
3722
|
-
|
|
3722
|
+
join6 = `,
|
|
3723
3723
|
${indentation}`;
|
|
3724
3724
|
whitespace = " ";
|
|
3725
3725
|
}
|
|
@@ -3733,13 +3733,13 @@ ${indentation}`;
|
|
|
3733
3733
|
const tmp = stringifyFnReplacer(key2, value, stack, replacer, spacer, indentation);
|
|
3734
3734
|
if (tmp !== void 0) {
|
|
3735
3735
|
res += `${separator}${strEscape(key2)}:${whitespace}${tmp}`;
|
|
3736
|
-
separator =
|
|
3736
|
+
separator = join6;
|
|
3737
3737
|
}
|
|
3738
3738
|
}
|
|
3739
3739
|
if (keyLength > maximumBreadth) {
|
|
3740
3740
|
const removedKeys = keyLength - maximumBreadth;
|
|
3741
3741
|
res += `${separator}"...":${whitespace}"${getItemCount(removedKeys)} not stringified"`;
|
|
3742
|
-
separator =
|
|
3742
|
+
separator = join6;
|
|
3743
3743
|
}
|
|
3744
3744
|
if (spacer !== "" && separator.length > 1) {
|
|
3745
3745
|
res = `
|
|
@@ -3780,7 +3780,7 @@ ${originalIndentation}`;
|
|
|
3780
3780
|
}
|
|
3781
3781
|
const originalIndentation = indentation;
|
|
3782
3782
|
let res = "";
|
|
3783
|
-
let
|
|
3783
|
+
let join6 = ",";
|
|
3784
3784
|
if (Array.isArray(value)) {
|
|
3785
3785
|
if (value.length === 0) {
|
|
3786
3786
|
return "[]";
|
|
@@ -3793,7 +3793,7 @@ ${originalIndentation}`;
|
|
|
3793
3793
|
indentation += spacer;
|
|
3794
3794
|
res += `
|
|
3795
3795
|
${indentation}`;
|
|
3796
|
-
|
|
3796
|
+
join6 = `,
|
|
3797
3797
|
${indentation}`;
|
|
3798
3798
|
}
|
|
3799
3799
|
const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
|
|
@@ -3801,13 +3801,13 @@ ${indentation}`;
|
|
|
3801
3801
|
for (; i < maximumValuesToStringify - 1; i++) {
|
|
3802
3802
|
const tmp2 = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation);
|
|
3803
3803
|
res += tmp2 !== void 0 ? tmp2 : "null";
|
|
3804
|
-
res +=
|
|
3804
|
+
res += join6;
|
|
3805
3805
|
}
|
|
3806
3806
|
const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation);
|
|
3807
3807
|
res += tmp !== void 0 ? tmp : "null";
|
|
3808
3808
|
if (value.length - 1 > maximumBreadth) {
|
|
3809
3809
|
const removedKeys = value.length - maximumBreadth - 1;
|
|
3810
|
-
res += `${
|
|
3810
|
+
res += `${join6}"... ${getItemCount(removedKeys)} not stringified"`;
|
|
3811
3811
|
}
|
|
3812
3812
|
if (spacer !== "") {
|
|
3813
3813
|
res += `
|
|
@@ -3820,7 +3820,7 @@ ${originalIndentation}`;
|
|
|
3820
3820
|
let whitespace = "";
|
|
3821
3821
|
if (spacer !== "") {
|
|
3822
3822
|
indentation += spacer;
|
|
3823
|
-
|
|
3823
|
+
join6 = `,
|
|
3824
3824
|
${indentation}`;
|
|
3825
3825
|
whitespace = " ";
|
|
3826
3826
|
}
|
|
@@ -3829,7 +3829,7 @@ ${indentation}`;
|
|
|
3829
3829
|
const tmp = stringifyArrayReplacer(key2, value[key2], stack, replacer, spacer, indentation);
|
|
3830
3830
|
if (tmp !== void 0) {
|
|
3831
3831
|
res += `${separator}${strEscape(key2)}:${whitespace}${tmp}`;
|
|
3832
|
-
separator =
|
|
3832
|
+
separator = join6;
|
|
3833
3833
|
}
|
|
3834
3834
|
}
|
|
3835
3835
|
if (spacer !== "" && separator.length > 1) {
|
|
@@ -3887,20 +3887,20 @@ ${originalIndentation}`;
|
|
|
3887
3887
|
indentation += spacer;
|
|
3888
3888
|
let res2 = `
|
|
3889
3889
|
${indentation}`;
|
|
3890
|
-
const
|
|
3890
|
+
const join7 = `,
|
|
3891
3891
|
${indentation}`;
|
|
3892
3892
|
const maximumValuesToStringify = Math.min(value.length, maximumBreadth);
|
|
3893
3893
|
let i = 0;
|
|
3894
3894
|
for (; i < maximumValuesToStringify - 1; i++) {
|
|
3895
3895
|
const tmp2 = stringifyIndent(String(i), value[i], stack, spacer, indentation);
|
|
3896
3896
|
res2 += tmp2 !== void 0 ? tmp2 : "null";
|
|
3897
|
-
res2 +=
|
|
3897
|
+
res2 += join7;
|
|
3898
3898
|
}
|
|
3899
3899
|
const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation);
|
|
3900
3900
|
res2 += tmp !== void 0 ? tmp : "null";
|
|
3901
3901
|
if (value.length - 1 > maximumBreadth) {
|
|
3902
3902
|
const removedKeys = value.length - maximumBreadth - 1;
|
|
3903
|
-
res2 += `${
|
|
3903
|
+
res2 += `${join7}"... ${getItemCount(removedKeys)} not stringified"`;
|
|
3904
3904
|
}
|
|
3905
3905
|
res2 += `
|
|
3906
3906
|
${originalIndentation}`;
|
|
@@ -3916,16 +3916,16 @@ ${originalIndentation}`;
|
|
|
3916
3916
|
return '"[Object]"';
|
|
3917
3917
|
}
|
|
3918
3918
|
indentation += spacer;
|
|
3919
|
-
const
|
|
3919
|
+
const join6 = `,
|
|
3920
3920
|
${indentation}`;
|
|
3921
3921
|
let res = "";
|
|
3922
3922
|
let separator = "";
|
|
3923
3923
|
let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth);
|
|
3924
3924
|
if (isTypedArrayWithEntries(value)) {
|
|
3925
|
-
res += stringifyTypedArray(value,
|
|
3925
|
+
res += stringifyTypedArray(value, join6, maximumBreadth);
|
|
3926
3926
|
keys = keys.slice(value.length);
|
|
3927
3927
|
maximumPropertiesToStringify -= value.length;
|
|
3928
|
-
separator =
|
|
3928
|
+
separator = join6;
|
|
3929
3929
|
}
|
|
3930
3930
|
if (deterministic) {
|
|
3931
3931
|
keys = sort(keys, comparator);
|
|
@@ -3936,13 +3936,13 @@ ${indentation}`;
|
|
|
3936
3936
|
const tmp = stringifyIndent(key2, value[key2], stack, spacer, indentation);
|
|
3937
3937
|
if (tmp !== void 0) {
|
|
3938
3938
|
res += `${separator}${strEscape(key2)}: ${tmp}`;
|
|
3939
|
-
separator =
|
|
3939
|
+
separator = join6;
|
|
3940
3940
|
}
|
|
3941
3941
|
}
|
|
3942
3942
|
if (keyLength > maximumBreadth) {
|
|
3943
3943
|
const removedKeys = keyLength - maximumBreadth;
|
|
3944
3944
|
res += `${separator}"...": "${getItemCount(removedKeys)} not stringified"`;
|
|
3945
|
-
separator =
|
|
3945
|
+
separator = join6;
|
|
3946
3946
|
}
|
|
3947
3947
|
if (separator !== "") {
|
|
3948
3948
|
res = `
|
|
@@ -5434,38 +5434,73 @@ function mapFileChangeKind(value) {
|
|
|
5434
5434
|
}
|
|
5435
5435
|
throw new CodexProtocolMappingError("Codex file change kind is invalid");
|
|
5436
5436
|
}
|
|
5437
|
-
function
|
|
5437
|
+
function countNewlines(value) {
|
|
5438
|
+
let count = 0;
|
|
5439
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
5440
|
+
if (value.charCodeAt(index) === 10) count += 1;
|
|
5441
|
+
}
|
|
5442
|
+
return count;
|
|
5443
|
+
}
|
|
5444
|
+
function retainHeadTailLines(value, totalNewlines) {
|
|
5445
|
+
const totalLines = value.length === 0 ? 0 : totalNewlines + 1;
|
|
5446
|
+
if (totalLines <= MAX_COMMAND_OUTPUT_LINES) return value;
|
|
5447
|
+
const headLines = Math.ceil(MAX_COMMAND_OUTPUT_LINES / 2);
|
|
5448
|
+
const tailLines = MAX_COMMAND_OUTPUT_LINES - headLines;
|
|
5449
|
+
let prefixEnd = 0;
|
|
5450
|
+
let seenHeadNewlines = 0;
|
|
5451
|
+
for (; prefixEnd < value.length; prefixEnd += 1) {
|
|
5452
|
+
if (value.charCodeAt(prefixEnd) !== 10) continue;
|
|
5453
|
+
seenHeadNewlines += 1;
|
|
5454
|
+
if (seenHeadNewlines === headLines) break;
|
|
5455
|
+
}
|
|
5456
|
+
let suffixStart = value.length;
|
|
5457
|
+
let seenTailNewlines = 0;
|
|
5458
|
+
for (; suffixStart > 0; suffixStart -= 1) {
|
|
5459
|
+
if (value.charCodeAt(suffixStart - 1) !== 10) continue;
|
|
5460
|
+
seenTailNewlines += 1;
|
|
5461
|
+
if (seenTailNewlines === tailLines) break;
|
|
5462
|
+
}
|
|
5463
|
+
return `${value.slice(0, prefixEnd)}
|
|
5464
|
+
${value.slice(suffixStart)}`;
|
|
5465
|
+
}
|
|
5466
|
+
function trimTrailingPartialUtf8(value) {
|
|
5467
|
+
let index = value.length - 1;
|
|
5468
|
+
while (index >= 0 && ((value[index] ?? 0) & 192) === 128 && value.length - index <= 3) {
|
|
5469
|
+
index -= 1;
|
|
5470
|
+
}
|
|
5471
|
+
if (index < 0) return value;
|
|
5472
|
+
const lead = value[index] ?? 0;
|
|
5473
|
+
const expected = lead < 128 ? 1 : lead < 224 ? 2 : lead < 240 ? 3 : lead < 248 ? 4 : 0;
|
|
5474
|
+
return expected > 0 && value.length - index < expected ? value.subarray(0, index) : value;
|
|
5475
|
+
}
|
|
5476
|
+
function trimLeadingContinuationUtf8(value) {
|
|
5477
|
+
let index = 0;
|
|
5478
|
+
while (index < value.length && ((value[index] ?? 0) & 192) === 128) index += 1;
|
|
5479
|
+
return value.subarray(index);
|
|
5480
|
+
}
|
|
5481
|
+
function retainHeadTailBytes(value) {
|
|
5438
5482
|
const encoded = Buffer$1.from(value, "utf8");
|
|
5439
|
-
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
|
|
5445
|
-
|
|
5446
|
-
}
|
|
5447
|
-
return encoded.subarray(start).toString("utf8");
|
|
5483
|
+
if (encoded.length <= MAX_COMMAND_OUTPUT_BYTES) return value;
|
|
5484
|
+
const headBytes = Math.ceil(MAX_COMMAND_OUTPUT_BYTES / 2);
|
|
5485
|
+
const tailBytes = MAX_COMMAND_OUTPUT_BYTES - headBytes;
|
|
5486
|
+
const head = trimTrailingPartialUtf8(encoded.subarray(0, headBytes)).toString("utf8");
|
|
5487
|
+
const tail = trimLeadingContinuationUtf8(encoded.subarray(encoded.length - tailBytes)).toString(
|
|
5488
|
+
"utf8"
|
|
5489
|
+
);
|
|
5490
|
+
return `${head}${tail}`;
|
|
5448
5491
|
}
|
|
5449
5492
|
function boundCommandOutput(value) {
|
|
5450
|
-
|
|
5451
|
-
|
|
5452
|
-
|
|
5453
|
-
|
|
5454
|
-
|
|
5455
|
-
|
|
5456
|
-
|
|
5457
|
-
|
|
5458
|
-
|
|
5459
|
-
output = output.slice(index + 1);
|
|
5460
|
-
outputTruncated = true;
|
|
5461
|
-
break;
|
|
5493
|
+
const originalBytes = Buffer$1.byteLength(value, "utf8");
|
|
5494
|
+
const originalLines = countNewlines(value);
|
|
5495
|
+
const lineBounded = retainHeadTailLines(value, originalLines);
|
|
5496
|
+
const output = retainHeadTailBytes(lineBounded);
|
|
5497
|
+
return {
|
|
5498
|
+
output,
|
|
5499
|
+
outputOmitted: {
|
|
5500
|
+
bytes: originalBytes - Buffer$1.byteLength(output, "utf8"),
|
|
5501
|
+
lines: originalLines - countNewlines(output)
|
|
5462
5502
|
}
|
|
5463
|
-
}
|
|
5464
|
-
if (Buffer$1.byteLength(output, "utf8") > MAX_COMMAND_OUTPUT_BYTES) {
|
|
5465
|
-
output = sliceUtf8Tail(output, MAX_COMMAND_OUTPUT_BYTES);
|
|
5466
|
-
outputTruncated = true;
|
|
5467
|
-
}
|
|
5468
|
-
return { output, outputTruncated };
|
|
5503
|
+
};
|
|
5469
5504
|
}
|
|
5470
5505
|
function mapToolError(value) {
|
|
5471
5506
|
if (value === null || value === void 0) {
|
|
@@ -6304,7 +6339,7 @@ function mapAgentItem(value, subagentNicknames = /* @__PURE__ */ new Map(), mapI
|
|
|
6304
6339
|
...exitCode === void 0 ? {} : { exitCode },
|
|
6305
6340
|
id,
|
|
6306
6341
|
...output === void 0 ? {} : { output: output.output },
|
|
6307
|
-
|
|
6342
|
+
outputOmitted: output?.outputOmitted ?? { bytes: 0, lines: 0 },
|
|
6308
6343
|
status: mapItemStatus(item["status"]),
|
|
6309
6344
|
type: "command"
|
|
6310
6345
|
};
|
|
@@ -7070,8 +7105,8 @@ var JsonlFrameProcessor = class {
|
|
|
7070
7105
|
const id = this.#nextRequestId++;
|
|
7071
7106
|
const transferable = Uint8Array.from(frame);
|
|
7072
7107
|
const transferredBuffer = transferable.buffer;
|
|
7073
|
-
return new Promise((
|
|
7074
|
-
this.#pending.set(id, { reject, resolve:
|
|
7108
|
+
return new Promise((resolve7, reject) => {
|
|
7109
|
+
this.#pending.set(id, { reject, resolve: resolve7 });
|
|
7075
7110
|
this.#worker.postMessage({ frame: transferredBuffer, id }, [transferredBuffer]);
|
|
7076
7111
|
});
|
|
7077
7112
|
}
|
|
@@ -7181,7 +7216,7 @@ function parseRpcError(value) {
|
|
|
7181
7216
|
function writeRpcMessage(output, message, timeoutMs) {
|
|
7182
7217
|
const frame = `${JSON.stringify(message)}
|
|
7183
7218
|
`;
|
|
7184
|
-
return new Promise((
|
|
7219
|
+
return new Promise((resolve7, reject) => {
|
|
7185
7220
|
const timer = setTimeout(() => {
|
|
7186
7221
|
reject(new RpcConnectionClosedError(`RPC write timed out after ${String(timeoutMs)}ms`));
|
|
7187
7222
|
}, timeoutMs);
|
|
@@ -7192,7 +7227,7 @@ function writeRpcMessage(output, message, timeoutMs) {
|
|
|
7192
7227
|
reject(new RpcConnectionClosedError(`RPC write failed: ${error.message}`));
|
|
7193
7228
|
return;
|
|
7194
7229
|
}
|
|
7195
|
-
|
|
7230
|
+
resolve7();
|
|
7196
7231
|
});
|
|
7197
7232
|
});
|
|
7198
7233
|
}
|
|
@@ -7366,7 +7401,7 @@ var JsonlRpcClient = class {
|
|
|
7366
7401
|
}
|
|
7367
7402
|
const id = this.#nextRequestId++;
|
|
7368
7403
|
const request = params === void 0 ? { id, method } : { id, method, params };
|
|
7369
|
-
return new Promise((
|
|
7404
|
+
return new Promise((resolve7, reject) => {
|
|
7370
7405
|
const pending = new RpcPendingRequest({
|
|
7371
7406
|
onTimeout: () => {
|
|
7372
7407
|
if (this.#removePending(id, pending)) {
|
|
@@ -7375,7 +7410,7 @@ var JsonlRpcClient = class {
|
|
|
7375
7410
|
},
|
|
7376
7411
|
reject,
|
|
7377
7412
|
request,
|
|
7378
|
-
resolve:
|
|
7413
|
+
resolve: resolve7,
|
|
7379
7414
|
timeoutMs
|
|
7380
7415
|
});
|
|
7381
7416
|
this.#pending.set(id, pending);
|
|
@@ -9427,6 +9462,7 @@ var CodexAgentProviderQueue = class extends CodexAgentProviderBase {
|
|
|
9427
9462
|
),
|
|
9428
9463
|
id: expectString(queued["id"], "thread queue submission id"),
|
|
9429
9464
|
skills,
|
|
9465
|
+
status: "queued",
|
|
9430
9466
|
text: content.text
|
|
9431
9467
|
};
|
|
9432
9468
|
}
|
|
@@ -9579,8 +9615,8 @@ var CodexAgentProviderTurns = class extends CodexAgentProviderQueue {
|
|
|
9579
9615
|
);
|
|
9580
9616
|
}
|
|
9581
9617
|
let resolveStartedTurn = () => void 0;
|
|
9582
|
-
const startedTurn = new Promise((
|
|
9583
|
-
resolveStartedTurn =
|
|
9618
|
+
const startedTurn = new Promise((resolve7) => {
|
|
9619
|
+
resolveStartedTurn = resolve7;
|
|
9584
9620
|
});
|
|
9585
9621
|
const listener = (event) => {
|
|
9586
9622
|
if (event.taskId === taskId && event.type === "turn.started") {
|
|
@@ -11401,7 +11437,7 @@ var CodexFuzzyFileSearchService = class {
|
|
|
11401
11437
|
throw abortError("File search request was aborted");
|
|
11402
11438
|
}
|
|
11403
11439
|
this.#clearIdleTimer(session);
|
|
11404
|
-
return new Promise((
|
|
11440
|
+
return new Promise((resolve7, reject) => {
|
|
11405
11441
|
const cachedSnapshot = session.lastSnapshot?.query === input.query ? session.lastSnapshot : void 0;
|
|
11406
11442
|
const request = {
|
|
11407
11443
|
data: cachedSnapshot?.data ?? [],
|
|
@@ -11409,7 +11445,7 @@ var CodexFuzzyFileSearchService = class {
|
|
|
11409
11445
|
query: input.query,
|
|
11410
11446
|
receivedUpdate: cachedSnapshot !== void 0,
|
|
11411
11447
|
reject,
|
|
11412
|
-
resolve:
|
|
11448
|
+
resolve: resolve7,
|
|
11413
11449
|
settled: false
|
|
11414
11450
|
};
|
|
11415
11451
|
request.detachAbort = this.#listenForAbort(session, request, input.signal);
|
|
@@ -12143,8 +12179,8 @@ var CodexAppServerShutdownError = class extends RpcConnectionClosedError {
|
|
|
12143
12179
|
}
|
|
12144
12180
|
};
|
|
12145
12181
|
function delay(milliseconds) {
|
|
12146
|
-
return new Promise((
|
|
12147
|
-
const timer = setTimeout(
|
|
12182
|
+
return new Promise((resolve7) => {
|
|
12183
|
+
const timer = setTimeout(resolve7, milliseconds);
|
|
12148
12184
|
timer.unref();
|
|
12149
12185
|
});
|
|
12150
12186
|
}
|
|
@@ -12177,8 +12213,8 @@ var CodexAppServerProcess = class {
|
|
|
12177
12213
|
child.stderr.on("data", (chunk) => {
|
|
12178
12214
|
this.#appendStderr(typeof chunk === "string" ? chunk : chunk.toString("utf8"));
|
|
12179
12215
|
});
|
|
12180
|
-
this.#spawnPromise = new Promise((
|
|
12181
|
-
child.once("spawn",
|
|
12216
|
+
this.#spawnPromise = new Promise((resolve7, reject) => {
|
|
12217
|
+
child.once("spawn", resolve7);
|
|
12182
12218
|
child.once("error", (error) => {
|
|
12183
12219
|
const spawnError = new CodexAppServerSpawnError(
|
|
12184
12220
|
`Failed to start Codex App Server: ${error.message}`,
|
|
@@ -12194,10 +12230,10 @@ var CodexAppServerProcess = class {
|
|
|
12194
12230
|
this.client.close(new CodexAppServerExitedError({ code, signal }, this.#stderr.trim()));
|
|
12195
12231
|
}
|
|
12196
12232
|
});
|
|
12197
|
-
this.#exitPromise = new Promise((
|
|
12233
|
+
this.#exitPromise = new Promise((resolve7) => {
|
|
12198
12234
|
child.once("close", (code, signal) => {
|
|
12199
12235
|
this.#closed = true;
|
|
12200
|
-
|
|
12236
|
+
resolve7({ code, signal });
|
|
12201
12237
|
});
|
|
12202
12238
|
});
|
|
12203
12239
|
this.client.onError(() => {
|
|
@@ -12662,4 +12698,823 @@ var CodexProjectRepository = class {
|
|
|
12662
12698
|
}
|
|
12663
12699
|
};
|
|
12664
12700
|
|
|
12665
|
-
|
|
12701
|
+
// packages/provider-codex/src/workbench-pet-catalog.ts
|
|
12702
|
+
var PET_PACK_VERSION = "v1";
|
|
12703
|
+
var PET_CDN_BASE_URL = "https://persistent.oaistatic.com/codex/pets/v1";
|
|
12704
|
+
var PET_FRAME = { columns: 8, height: 208, rows: 9, width: 192 };
|
|
12705
|
+
var PET_SPRITESHEET = { height: 1872, width: 1536 };
|
|
12706
|
+
var BUILTIN_PETS = [
|
|
12707
|
+
{
|
|
12708
|
+
description: "The original Codex companion",
|
|
12709
|
+
displayName: "Codex",
|
|
12710
|
+
file: "codex-spritesheet-v4.webp",
|
|
12711
|
+
id: "codex"
|
|
12712
|
+
},
|
|
12713
|
+
{
|
|
12714
|
+
description: "A tidy duck for calm workspace days",
|
|
12715
|
+
displayName: "Dewey",
|
|
12716
|
+
file: "dewey-spritesheet-v4.webp",
|
|
12717
|
+
id: "dewey"
|
|
12718
|
+
},
|
|
12719
|
+
{
|
|
12720
|
+
description: "Hot path energy for fast iteration",
|
|
12721
|
+
displayName: "Fireball",
|
|
12722
|
+
file: "fireball-spritesheet-v4.webp",
|
|
12723
|
+
id: "fireball"
|
|
12724
|
+
},
|
|
12725
|
+
{
|
|
12726
|
+
description: "A steady rock when the diff gets large",
|
|
12727
|
+
displayName: "Rocky",
|
|
12728
|
+
file: "rocky-spritesheet-v4.webp",
|
|
12729
|
+
id: "rocky"
|
|
12730
|
+
},
|
|
12731
|
+
{
|
|
12732
|
+
description: "Small green shoots for new ideas",
|
|
12733
|
+
displayName: "Seedy",
|
|
12734
|
+
file: "seedy-spritesheet-v4.webp",
|
|
12735
|
+
id: "seedy"
|
|
12736
|
+
},
|
|
12737
|
+
{
|
|
12738
|
+
description: "A balanced stack for deep work",
|
|
12739
|
+
displayName: "Stacky",
|
|
12740
|
+
file: "stacky-spritesheet-v4.webp",
|
|
12741
|
+
id: "stacky"
|
|
12742
|
+
},
|
|
12743
|
+
{
|
|
12744
|
+
description: "A tiny blue-screen gremlin",
|
|
12745
|
+
displayName: "BSOD",
|
|
12746
|
+
file: "bsod-spritesheet-v4.webp",
|
|
12747
|
+
id: "bsod"
|
|
12748
|
+
},
|
|
12749
|
+
{
|
|
12750
|
+
description: "Quiet signal from the void",
|
|
12751
|
+
displayName: "Null Signal",
|
|
12752
|
+
file: "null-signal-spritesheet-v4.webp",
|
|
12753
|
+
id: "null-signal"
|
|
12754
|
+
}
|
|
12755
|
+
];
|
|
12756
|
+
var idleFrames = [
|
|
12757
|
+
[0, 1680],
|
|
12758
|
+
[1, 660],
|
|
12759
|
+
[2, 660],
|
|
12760
|
+
[3, 840],
|
|
12761
|
+
[4, 840],
|
|
12762
|
+
[5, 1920]
|
|
12763
|
+
];
|
|
12764
|
+
function idleAnimation() {
|
|
12765
|
+
return {
|
|
12766
|
+
fallback: "idle",
|
|
12767
|
+
frames: idleFrames.map(([spriteIndex, durationMs]) => ({ durationMs, spriteIndex })),
|
|
12768
|
+
loopStart: 0
|
|
12769
|
+
};
|
|
12770
|
+
}
|
|
12771
|
+
function stateAnimation(row, frameCount, durationMs, finalDurationMs) {
|
|
12772
|
+
const primary = Array.from({ length: frameCount }, (_, column) => ({
|
|
12773
|
+
durationMs: column === frameCount - 1 ? finalDurationMs : durationMs,
|
|
12774
|
+
spriteIndex: row * PET_FRAME.columns + column
|
|
12775
|
+
}));
|
|
12776
|
+
return {
|
|
12777
|
+
fallback: "idle",
|
|
12778
|
+
frames: [...primary, ...primary, ...primary, ...idleAnimation().frames],
|
|
12779
|
+
loopStart: primary.length * 3
|
|
12780
|
+
};
|
|
12781
|
+
}
|
|
12782
|
+
function createDefaultPetAnimations() {
|
|
12783
|
+
const tracks = {
|
|
12784
|
+
failed: stateAnimation(5, 8, 140, 240),
|
|
12785
|
+
idle: idleAnimation(),
|
|
12786
|
+
jumping: stateAnimation(4, 5, 140, 280),
|
|
12787
|
+
review: stateAnimation(8, 6, 150, 280),
|
|
12788
|
+
"running-left": stateAnimation(2, 8, 120, 220),
|
|
12789
|
+
"running-right": stateAnimation(1, 8, 120, 220),
|
|
12790
|
+
running: stateAnimation(7, 6, 120, 220),
|
|
12791
|
+
waiting: stateAnimation(6, 6, 150, 260),
|
|
12792
|
+
waving: stateAnimation(3, 4, 140, 280)
|
|
12793
|
+
};
|
|
12794
|
+
return {
|
|
12795
|
+
...tracks,
|
|
12796
|
+
bounce: tracks.jumping,
|
|
12797
|
+
move_left: tracks["running-left"],
|
|
12798
|
+
move_right: tracks["running-right"],
|
|
12799
|
+
sad: tracks.failed,
|
|
12800
|
+
wave: tracks.waving
|
|
12801
|
+
};
|
|
12802
|
+
}
|
|
12803
|
+
function createBuiltinDescriptor(pet, assetId, availability) {
|
|
12804
|
+
return {
|
|
12805
|
+
animations: createDefaultPetAnimations(),
|
|
12806
|
+
assetId,
|
|
12807
|
+
availability,
|
|
12808
|
+
description: pet.description,
|
|
12809
|
+
displayName: pet.displayName,
|
|
12810
|
+
frame: PET_FRAME,
|
|
12811
|
+
id: pet.id,
|
|
12812
|
+
source: "builtin"
|
|
12813
|
+
};
|
|
12814
|
+
}
|
|
12815
|
+
|
|
12816
|
+
// node_modules/.pnpm/image-dimensions@2.5.1/node_modules/image-dimensions/utilities.js
|
|
12817
|
+
function isValidOffsetToRead(dataView, offset, bytesToRead) {
|
|
12818
|
+
return dataView.byteLength >= offset + bytesToRead;
|
|
12819
|
+
}
|
|
12820
|
+
function getUint32(dataView, offset, littleEndian = false) {
|
|
12821
|
+
if (isValidOffsetToRead(dataView, offset, 4)) {
|
|
12822
|
+
return dataView.getUint32(offset, littleEndian);
|
|
12823
|
+
}
|
|
12824
|
+
}
|
|
12825
|
+
function getUint16(dataView, offset, littleEndian = false) {
|
|
12826
|
+
if (isValidOffsetToRead(dataView, offset, 2)) {
|
|
12827
|
+
return dataView.getUint16(offset, littleEndian);
|
|
12828
|
+
}
|
|
12829
|
+
}
|
|
12830
|
+
function getIsobmffFtypBrands(bytes) {
|
|
12831
|
+
if (bytes.length < 16) {
|
|
12832
|
+
return;
|
|
12833
|
+
}
|
|
12834
|
+
const isFtyp = bytes[4] === 102 && bytes[5] === 116 && bytes[6] === 121 && bytes[7] === 112;
|
|
12835
|
+
if (!isFtyp) {
|
|
12836
|
+
return;
|
|
12837
|
+
}
|
|
12838
|
+
const dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
12839
|
+
const size = getUint32(dataView, 0);
|
|
12840
|
+
if (size === void 0 || size < 16 || size > bytes.length) {
|
|
12841
|
+
return;
|
|
12842
|
+
}
|
|
12843
|
+
const brands = [];
|
|
12844
|
+
brands.push(String.fromCodePoint(...bytes.slice(8, 12)));
|
|
12845
|
+
for (let i = 16; i + 4 <= size; i += 4) {
|
|
12846
|
+
brands.push(String.fromCodePoint(...bytes.slice(i, i + 4)));
|
|
12847
|
+
}
|
|
12848
|
+
return brands;
|
|
12849
|
+
}
|
|
12850
|
+
function unboxIsobmffBox(data, offset) {
|
|
12851
|
+
const dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
12852
|
+
const size = getUint32(dataView, offset);
|
|
12853
|
+
if (size === void 0) {
|
|
12854
|
+
return;
|
|
12855
|
+
}
|
|
12856
|
+
if (data.length < size + offset || size < 8) {
|
|
12857
|
+
return;
|
|
12858
|
+
}
|
|
12859
|
+
return {
|
|
12860
|
+
type: String.fromCodePoint(...data.slice(offset + 4, offset + 8)),
|
|
12861
|
+
data: data.slice(offset + 8, offset + size),
|
|
12862
|
+
tail: offset + size
|
|
12863
|
+
};
|
|
12864
|
+
}
|
|
12865
|
+
function getIsobmffIspeSizesFromMeta(data) {
|
|
12866
|
+
const sizes = [];
|
|
12867
|
+
let offset = 0;
|
|
12868
|
+
while (offset < data.length) {
|
|
12869
|
+
const box = unboxIsobmffBox(data, offset);
|
|
12870
|
+
if (!box) {
|
|
12871
|
+
break;
|
|
12872
|
+
}
|
|
12873
|
+
if (box.type === "meta") {
|
|
12874
|
+
parseIsobmffMetaBox(box.data, sizes);
|
|
12875
|
+
}
|
|
12876
|
+
offset = box.tail;
|
|
12877
|
+
}
|
|
12878
|
+
return sizes;
|
|
12879
|
+
}
|
|
12880
|
+
function parseIsobmffMetaBox(data, sizes) {
|
|
12881
|
+
let offset = 4;
|
|
12882
|
+
while (offset < data.length) {
|
|
12883
|
+
const box = unboxIsobmffBox(data, offset);
|
|
12884
|
+
if (!box) {
|
|
12885
|
+
break;
|
|
12886
|
+
}
|
|
12887
|
+
if (box.type === "iprp") {
|
|
12888
|
+
parseIsobmffIprpBox(box.data, sizes);
|
|
12889
|
+
}
|
|
12890
|
+
offset = box.tail;
|
|
12891
|
+
}
|
|
12892
|
+
return sizes;
|
|
12893
|
+
}
|
|
12894
|
+
function parseIsobmffIprpBox(data, sizes) {
|
|
12895
|
+
let offset = 0;
|
|
12896
|
+
while (offset < data.length) {
|
|
12897
|
+
const box = unboxIsobmffBox(data, offset);
|
|
12898
|
+
if (!box) {
|
|
12899
|
+
break;
|
|
12900
|
+
}
|
|
12901
|
+
if (box.type === "ipco") {
|
|
12902
|
+
parseIsobmffIpcoBox(box.data, sizes);
|
|
12903
|
+
}
|
|
12904
|
+
offset = box.tail;
|
|
12905
|
+
}
|
|
12906
|
+
}
|
|
12907
|
+
function parseIsobmffIpcoBox(data, sizes) {
|
|
12908
|
+
let offset = 0;
|
|
12909
|
+
while (offset < data.length) {
|
|
12910
|
+
const box = unboxIsobmffBox(data, offset);
|
|
12911
|
+
if (!box) {
|
|
12912
|
+
break;
|
|
12913
|
+
}
|
|
12914
|
+
if (box.type === "ispe") {
|
|
12915
|
+
const dataView = new DataView(box.data.buffer, box.data.byteOffset, box.data.byteLength);
|
|
12916
|
+
const width = getUint32(dataView, 4);
|
|
12917
|
+
const height = getUint32(dataView, 8);
|
|
12918
|
+
if (width === void 0 || height === void 0) {
|
|
12919
|
+
return;
|
|
12920
|
+
}
|
|
12921
|
+
sizes.push({
|
|
12922
|
+
width,
|
|
12923
|
+
height
|
|
12924
|
+
});
|
|
12925
|
+
}
|
|
12926
|
+
offset = box.tail;
|
|
12927
|
+
}
|
|
12928
|
+
}
|
|
12929
|
+
function getLargestAreaSize(sizes) {
|
|
12930
|
+
let maxSize = sizes[0];
|
|
12931
|
+
for (const size of sizes) {
|
|
12932
|
+
if (size.width * size.height > maxSize.width * maxSize.height) {
|
|
12933
|
+
maxSize = size;
|
|
12934
|
+
}
|
|
12935
|
+
}
|
|
12936
|
+
return maxSize;
|
|
12937
|
+
}
|
|
12938
|
+
|
|
12939
|
+
// node_modules/.pnpm/image-dimensions@2.5.1/node_modules/image-dimensions/types/png.js
|
|
12940
|
+
var isPng = (bytes) => bytes[0] === 137 && bytes[1] === 80 && bytes[2] === 78 && bytes[3] === 71 && bytes[4] === 13 && bytes[5] === 10 && bytes[6] === 26 && bytes[7] === 10;
|
|
12941
|
+
var isAppleMinifiedPng = (bytes) => bytes[12] === 67 && bytes[13] === 103 && bytes[14] === 66 && bytes[15] === 73;
|
|
12942
|
+
function png(bytes) {
|
|
12943
|
+
if (!isPng(bytes)) {
|
|
12944
|
+
return;
|
|
12945
|
+
}
|
|
12946
|
+
const dataView = new DataView(bytes.buffer);
|
|
12947
|
+
const isAppleMinified = isAppleMinifiedPng(bytes);
|
|
12948
|
+
const width = getUint32(dataView, isAppleMinified ? 32 : 16, false);
|
|
12949
|
+
const height = getUint32(dataView, isAppleMinified ? 36 : 20, false);
|
|
12950
|
+
if (width === void 0 || height === void 0) {
|
|
12951
|
+
return;
|
|
12952
|
+
}
|
|
12953
|
+
return {
|
|
12954
|
+
width,
|
|
12955
|
+
height,
|
|
12956
|
+
type: "png"
|
|
12957
|
+
};
|
|
12958
|
+
}
|
|
12959
|
+
|
|
12960
|
+
// node_modules/.pnpm/image-dimensions@2.5.1/node_modules/image-dimensions/types/jpeg.js
|
|
12961
|
+
var SOF0 = 65472;
|
|
12962
|
+
var SOF3 = 65475;
|
|
12963
|
+
var jsJpeg = (bytes) => bytes[0] === 255 && bytes[1] === 216 && bytes[2] === 255;
|
|
12964
|
+
function jpeg(bytes) {
|
|
12965
|
+
if (!jsJpeg(bytes)) {
|
|
12966
|
+
return;
|
|
12967
|
+
}
|
|
12968
|
+
const dataView = new DataView(bytes.buffer);
|
|
12969
|
+
let offset = 2;
|
|
12970
|
+
while (isValidOffsetToRead(dataView, offset, 2)) {
|
|
12971
|
+
const marker = dataView.getUint16(offset);
|
|
12972
|
+
offset += 2;
|
|
12973
|
+
if (marker >= SOF0 && marker <= SOF3) {
|
|
12974
|
+
const height = getUint16(dataView, offset + 3, false);
|
|
12975
|
+
const width = getUint16(dataView, offset + 5, false);
|
|
12976
|
+
if (height === void 0 || width === void 0) {
|
|
12977
|
+
return;
|
|
12978
|
+
}
|
|
12979
|
+
return {
|
|
12980
|
+
height,
|
|
12981
|
+
width,
|
|
12982
|
+
type: "jpeg"
|
|
12983
|
+
};
|
|
12984
|
+
}
|
|
12985
|
+
const segmentLength = getUint16(dataView, offset);
|
|
12986
|
+
if (segmentLength === void 0) {
|
|
12987
|
+
return;
|
|
12988
|
+
}
|
|
12989
|
+
offset += segmentLength;
|
|
12990
|
+
if (offset > dataView.byteLength) {
|
|
12991
|
+
return;
|
|
12992
|
+
}
|
|
12993
|
+
}
|
|
12994
|
+
}
|
|
12995
|
+
|
|
12996
|
+
// node_modules/.pnpm/image-dimensions@2.5.1/node_modules/image-dimensions/types/gif.js
|
|
12997
|
+
var isGif = (bytes) => bytes[0] === 71 && bytes[1] === 73 && bytes[2] === 70 && bytes[3] === 56 && (bytes[4] === 55 || bytes[4] === 57) && bytes[5] === 97;
|
|
12998
|
+
function gif(bytes) {
|
|
12999
|
+
if (!isGif(bytes)) {
|
|
13000
|
+
return;
|
|
13001
|
+
}
|
|
13002
|
+
const dataView = new DataView(bytes.buffer);
|
|
13003
|
+
const width = getUint16(dataView, 6, true);
|
|
13004
|
+
const height = getUint16(dataView, 8, true);
|
|
13005
|
+
if (width === void 0 || height === void 0) {
|
|
13006
|
+
return;
|
|
13007
|
+
}
|
|
13008
|
+
return {
|
|
13009
|
+
width,
|
|
13010
|
+
height,
|
|
13011
|
+
type: "gif"
|
|
13012
|
+
};
|
|
13013
|
+
}
|
|
13014
|
+
|
|
13015
|
+
// node_modules/.pnpm/image-dimensions@2.5.1/node_modules/image-dimensions/types/webp.js
|
|
13016
|
+
var isWebp = (bytes) => (
|
|
13017
|
+
// RIFF
|
|
13018
|
+
bytes[0] === 82 && bytes[1] === 73 && bytes[2] === 70 && bytes[3] === 70 && bytes[8] === 87 && bytes[9] === 69 && bytes[10] === 66 && bytes[11] === 80
|
|
13019
|
+
);
|
|
13020
|
+
var isVP8Lossy = (bytes) => (
|
|
13021
|
+
// `VP8 ` (note the space)
|
|
13022
|
+
bytes[12] === 86 && bytes[13] === 80 && bytes[14] === 56 && bytes[15] === 32
|
|
13023
|
+
);
|
|
13024
|
+
var isVP8Lossless = (bytes) => (
|
|
13025
|
+
// `VP8L`
|
|
13026
|
+
bytes[12] === 86 && bytes[13] === 80 && bytes[14] === 56 && bytes[15] === 76
|
|
13027
|
+
);
|
|
13028
|
+
var isVP8Extended = (bytes) => (
|
|
13029
|
+
// `VP8X`
|
|
13030
|
+
bytes[12] === 86 && bytes[13] === 80 && bytes[14] === 56 && bytes[15] === 88
|
|
13031
|
+
);
|
|
13032
|
+
function readUInt24LE(dataView, offset) {
|
|
13033
|
+
const byte1 = dataView.getUint8(offset);
|
|
13034
|
+
const byte2 = dataView.getUint8(offset + 1);
|
|
13035
|
+
const byte3 = dataView.getUint8(offset + 2);
|
|
13036
|
+
return byte3 << 16 | byte2 << 8 | byte1;
|
|
13037
|
+
}
|
|
13038
|
+
function webp(bytes) {
|
|
13039
|
+
if (!isWebp(bytes)) {
|
|
13040
|
+
return;
|
|
13041
|
+
}
|
|
13042
|
+
const dataView = new DataView(bytes.buffer);
|
|
13043
|
+
const maxSize = 16383;
|
|
13044
|
+
if (isVP8Lossy(bytes)) {
|
|
13045
|
+
if (!isValidOffsetToRead(dataView, 28, 2)) {
|
|
13046
|
+
return;
|
|
13047
|
+
}
|
|
13048
|
+
return {
|
|
13049
|
+
// eslint-disable-next-line no-bitwise
|
|
13050
|
+
width: dataView.getUint16(26, true) & maxSize,
|
|
13051
|
+
// eslint-disable-next-line no-bitwise
|
|
13052
|
+
height: dataView.getUint16(28, true) & maxSize,
|
|
13053
|
+
type: "webp"
|
|
13054
|
+
};
|
|
13055
|
+
}
|
|
13056
|
+
if (isVP8Lossless(bytes)) {
|
|
13057
|
+
const bits = getUint32(dataView, 21, true);
|
|
13058
|
+
if (bits === void 0) {
|
|
13059
|
+
return;
|
|
13060
|
+
}
|
|
13061
|
+
return {
|
|
13062
|
+
// eslint-disable-next-line no-bitwise
|
|
13063
|
+
width: (bits & maxSize) + 1,
|
|
13064
|
+
// eslint-disable-next-line no-bitwise
|
|
13065
|
+
height: (bits >> 14 & maxSize) + 1,
|
|
13066
|
+
type: "webp"
|
|
13067
|
+
};
|
|
13068
|
+
}
|
|
13069
|
+
if (isVP8Extended(bytes)) {
|
|
13070
|
+
if (!isValidOffsetToRead(dataView, 27, 3)) {
|
|
13071
|
+
return;
|
|
13072
|
+
}
|
|
13073
|
+
return {
|
|
13074
|
+
width: readUInt24LE(dataView, 24) + 1,
|
|
13075
|
+
height: readUInt24LE(dataView, 27) + 1,
|
|
13076
|
+
type: "webp"
|
|
13077
|
+
};
|
|
13078
|
+
}
|
|
13079
|
+
}
|
|
13080
|
+
|
|
13081
|
+
// node_modules/.pnpm/image-dimensions@2.5.1/node_modules/image-dimensions/types/avif.js
|
|
13082
|
+
var avifBrands = /* @__PURE__ */ new Set([
|
|
13083
|
+
"avif",
|
|
13084
|
+
"avis",
|
|
13085
|
+
"avio"
|
|
13086
|
+
]);
|
|
13087
|
+
var isAvif = (bytes) => {
|
|
13088
|
+
const brands = getIsobmffFtypBrands(bytes);
|
|
13089
|
+
if (!brands) {
|
|
13090
|
+
return false;
|
|
13091
|
+
}
|
|
13092
|
+
return brands.some((brand) => avifBrands.has(brand));
|
|
13093
|
+
};
|
|
13094
|
+
function avif(bytes) {
|
|
13095
|
+
if (!isAvif(bytes)) {
|
|
13096
|
+
return;
|
|
13097
|
+
}
|
|
13098
|
+
const sizes = getIsobmffIspeSizesFromMeta(bytes);
|
|
13099
|
+
if (sizes.length === 0) {
|
|
13100
|
+
return;
|
|
13101
|
+
}
|
|
13102
|
+
return {
|
|
13103
|
+
...getLargestAreaSize(sizes),
|
|
13104
|
+
type: "avif"
|
|
13105
|
+
};
|
|
13106
|
+
}
|
|
13107
|
+
|
|
13108
|
+
// node_modules/.pnpm/image-dimensions@2.5.1/node_modules/image-dimensions/types/heic.js
|
|
13109
|
+
var heifBrands = /* @__PURE__ */ new Set([
|
|
13110
|
+
"mif1",
|
|
13111
|
+
"msf1",
|
|
13112
|
+
"heic",
|
|
13113
|
+
"heix",
|
|
13114
|
+
"hevc",
|
|
13115
|
+
"hevx",
|
|
13116
|
+
"heim",
|
|
13117
|
+
"heis",
|
|
13118
|
+
"hevm",
|
|
13119
|
+
"hevs"
|
|
13120
|
+
]);
|
|
13121
|
+
var isHeic = (bytes) => {
|
|
13122
|
+
const brands = getIsobmffFtypBrands(bytes);
|
|
13123
|
+
if (!brands) {
|
|
13124
|
+
return false;
|
|
13125
|
+
}
|
|
13126
|
+
return brands.some((brand) => heifBrands.has(brand));
|
|
13127
|
+
};
|
|
13128
|
+
function heic(bytes) {
|
|
13129
|
+
if (!isHeic(bytes)) {
|
|
13130
|
+
return;
|
|
13131
|
+
}
|
|
13132
|
+
const sizes = getIsobmffIspeSizesFromMeta(bytes);
|
|
13133
|
+
if (sizes.length === 0) {
|
|
13134
|
+
return;
|
|
13135
|
+
}
|
|
13136
|
+
return {
|
|
13137
|
+
...getLargestAreaSize(sizes),
|
|
13138
|
+
type: "heic"
|
|
13139
|
+
};
|
|
13140
|
+
}
|
|
13141
|
+
|
|
13142
|
+
// node_modules/.pnpm/image-dimensions@2.5.1/node_modules/image-dimensions/index.js
|
|
13143
|
+
function imageDimensionsFromData(bytes) {
|
|
13144
|
+
if (bytes.length < 3) {
|
|
13145
|
+
return;
|
|
13146
|
+
}
|
|
13147
|
+
bytes = new Uint8Array(bytes);
|
|
13148
|
+
return png(bytes) ?? gif(bytes) ?? jpeg(bytes) ?? webp(bytes) ?? avif(bytes) ?? heic(bytes);
|
|
13149
|
+
}
|
|
13150
|
+
|
|
13151
|
+
// packages/provider-codex/src/workbench-pet-image.ts
|
|
13152
|
+
function readWebpDimensions(data) {
|
|
13153
|
+
const dimensions = imageDimensionsFromData(data);
|
|
13154
|
+
if (dimensions?.type !== "webp") {
|
|
13155
|
+
throw new Error("Pet spritesheet must be a valid WebP image");
|
|
13156
|
+
}
|
|
13157
|
+
return dimensions;
|
|
13158
|
+
}
|
|
13159
|
+
async function readWebpDimensionsFromFile(path) {
|
|
13160
|
+
return readWebpDimensions(await readFile(path));
|
|
13161
|
+
}
|
|
13162
|
+
var MAX_MANIFEST_BYTES = 64 * 1024;
|
|
13163
|
+
var MAX_CUSTOM_ASSET_BYTES = 16 * 1024 * 1024;
|
|
13164
|
+
var MAX_FRAMES = 256;
|
|
13165
|
+
var MAX_FPS = 60;
|
|
13166
|
+
async function loadCustomPet(input) {
|
|
13167
|
+
const baseDirectory = await realpath(input.directory);
|
|
13168
|
+
const manifestPath = resolve(baseDirectory, input.manifestName);
|
|
13169
|
+
const manifestStats = await stat(manifestPath);
|
|
13170
|
+
if (!manifestStats.isFile() || manifestStats.size > MAX_MANIFEST_BYTES) {
|
|
13171
|
+
throw new Error("Pet manifest is missing or too large");
|
|
13172
|
+
}
|
|
13173
|
+
const raw = await readFile(manifestPath, "utf8");
|
|
13174
|
+
const manifest = parseRecord(JSON.parse(raw), "Pet manifest");
|
|
13175
|
+
const spritesheetPath = readOptionalString(manifest, "spritesheetPath") ?? "spritesheet.webp";
|
|
13176
|
+
if (isAbsolute(spritesheetPath) || spritesheetPath.split(/[\\/]/u).includes("..")) {
|
|
13177
|
+
throw new Error("Pet spritesheet must stay inside its directory");
|
|
13178
|
+
}
|
|
13179
|
+
const path = await realpath(resolve(baseDirectory, spritesheetPath));
|
|
13180
|
+
assertContained(baseDirectory, path);
|
|
13181
|
+
const assetStats = await stat(path);
|
|
13182
|
+
if (!assetStats.isFile() || assetStats.size > MAX_CUSTOM_ASSET_BYTES) {
|
|
13183
|
+
throw new Error("Pet spritesheet is missing or too large");
|
|
13184
|
+
}
|
|
13185
|
+
const dimensions = await readWebpDimensionsFromFile(path);
|
|
13186
|
+
const frame = parseFrame(manifest["frame"]);
|
|
13187
|
+
const frameCount = validateFrame(frame, dimensions.width, dimensions.height);
|
|
13188
|
+
const animations = parseAnimations(manifest["animations"], frameCount);
|
|
13189
|
+
const manifestId = readOptionalString(manifest, "id");
|
|
13190
|
+
return {
|
|
13191
|
+
assetId: input.assetId,
|
|
13192
|
+
baseDirectory,
|
|
13193
|
+
descriptor: {
|
|
13194
|
+
animations,
|
|
13195
|
+
assetId: input.assetId,
|
|
13196
|
+
availability: "ready",
|
|
13197
|
+
description: readOptionalString(manifest, "description") ?? "",
|
|
13198
|
+
displayName: readOptionalString(manifest, "displayName") ?? manifestId ?? input.folder,
|
|
13199
|
+
frame,
|
|
13200
|
+
id: `custom:${input.folder}`,
|
|
13201
|
+
source: input.source
|
|
13202
|
+
},
|
|
13203
|
+
path
|
|
13204
|
+
};
|
|
13205
|
+
}
|
|
13206
|
+
async function validatePetAsset(record) {
|
|
13207
|
+
const [baseDirectory, resolved] = await Promise.all([
|
|
13208
|
+
realpath(record.baseDirectory),
|
|
13209
|
+
realpath(record.path)
|
|
13210
|
+
]);
|
|
13211
|
+
assertContained(baseDirectory, resolved);
|
|
13212
|
+
const assetStats = await stat(resolved);
|
|
13213
|
+
if (!assetStats.isFile() || assetStats.size > MAX_CUSTOM_ASSET_BYTES) {
|
|
13214
|
+
throw new Error("Pet spritesheet is unavailable");
|
|
13215
|
+
}
|
|
13216
|
+
const dimensions = await readWebpDimensionsFromFile(resolved);
|
|
13217
|
+
validateFrame(record.descriptor.frame, dimensions.width, dimensions.height);
|
|
13218
|
+
return { mtimeMs: assetStats.mtimeMs, size: assetStats.size };
|
|
13219
|
+
}
|
|
13220
|
+
function parseFrame(value) {
|
|
13221
|
+
if (value === void 0 || value === null) return PET_FRAME;
|
|
13222
|
+
const frame = parseRecord(value, "Pet frame");
|
|
13223
|
+
return {
|
|
13224
|
+
columns: readPositiveInteger(frame, "columns"),
|
|
13225
|
+
height: readPositiveInteger(frame, "height"),
|
|
13226
|
+
rows: readPositiveInteger(frame, "rows"),
|
|
13227
|
+
width: readPositiveInteger(frame, "width")
|
|
13228
|
+
};
|
|
13229
|
+
}
|
|
13230
|
+
function validateFrame(frame, width, height) {
|
|
13231
|
+
if (width === void 0 || height === void 0 || frame.width * frame.columns !== width || frame.height * frame.rows !== height) {
|
|
13232
|
+
throw new Error("Pet frame grid must cover the spritesheet exactly");
|
|
13233
|
+
}
|
|
13234
|
+
const frameCount = frame.columns * frame.rows;
|
|
13235
|
+
if (frameCount > MAX_FRAMES) throw new Error("Pet frame count exceeds the maximum");
|
|
13236
|
+
return frameCount;
|
|
13237
|
+
}
|
|
13238
|
+
function parseAnimations(value, frameCount) {
|
|
13239
|
+
const defaults = createDefaultPetAnimations();
|
|
13240
|
+
if (value === void 0 || value === null) return defaults;
|
|
13241
|
+
const source = parseRecord(value, "Pet animations");
|
|
13242
|
+
if (Object.keys(source).length === 0) return defaults;
|
|
13243
|
+
const animations = { ...defaults };
|
|
13244
|
+
for (const [name, raw] of Object.entries(source)) {
|
|
13245
|
+
const spec = parseRecord(raw, `Pet animation ${name}`);
|
|
13246
|
+
const frames = spec["frames"];
|
|
13247
|
+
if (!Array.isArray(frames) || frames.length === 0) {
|
|
13248
|
+
throw new Error(`Pet animation ${name} requires frames`);
|
|
13249
|
+
}
|
|
13250
|
+
const spriteIndices = frames.map((frame) => {
|
|
13251
|
+
if (!Number.isInteger(frame) || Number(frame) < 0 || Number(frame) >= frameCount) {
|
|
13252
|
+
throw new Error(`Pet animation ${name} has an invalid frame`);
|
|
13253
|
+
}
|
|
13254
|
+
return Number(frame);
|
|
13255
|
+
});
|
|
13256
|
+
const fps = spec["fps"] === void 0 ? 8 : Number(spec["fps"]);
|
|
13257
|
+
if (!Number.isFinite(fps) || fps <= 0 || fps > MAX_FPS) {
|
|
13258
|
+
throw new Error(`Pet animation ${name} has an invalid fps`);
|
|
13259
|
+
}
|
|
13260
|
+
const loops = spec["loop"] === void 0 ? true : spec["loop"];
|
|
13261
|
+
if (typeof loops !== "boolean") throw new Error(`Pet animation ${name} has an invalid loop`);
|
|
13262
|
+
animations[name] = {
|
|
13263
|
+
fallback: readOptionalString(spec, "fallback") ?? "idle",
|
|
13264
|
+
frames: spriteIndices.map((spriteIndex) => ({
|
|
13265
|
+
durationMs: Math.max(1, Math.round(1e3 / fps)),
|
|
13266
|
+
spriteIndex
|
|
13267
|
+
})),
|
|
13268
|
+
loopStart: loops ? 0 : null
|
|
13269
|
+
};
|
|
13270
|
+
}
|
|
13271
|
+
for (const [name, animation] of Object.entries(animations)) {
|
|
13272
|
+
if (animations[animation.fallback] === void 0) {
|
|
13273
|
+
throw new Error(`Pet animation ${name} has an unknown fallback`);
|
|
13274
|
+
}
|
|
13275
|
+
}
|
|
13276
|
+
return animations;
|
|
13277
|
+
}
|
|
13278
|
+
function assertContained(base, target) {
|
|
13279
|
+
const child = relative(base, target);
|
|
13280
|
+
if (child === "" || !child.startsWith(`..${sep}`) && child !== ".." && !isAbsolute(child)) {
|
|
13281
|
+
return;
|
|
13282
|
+
}
|
|
13283
|
+
throw new Error("Pet asset escapes its directory");
|
|
13284
|
+
}
|
|
13285
|
+
function parseRecord(value, label) {
|
|
13286
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
13287
|
+
throw new Error(`${label} must be an object`);
|
|
13288
|
+
}
|
|
13289
|
+
return value;
|
|
13290
|
+
}
|
|
13291
|
+
function readOptionalString(record, key) {
|
|
13292
|
+
const value = record[key];
|
|
13293
|
+
if (value === void 0 || value === null) return void 0;
|
|
13294
|
+
if (typeof value !== "string") throw new Error(`Pet ${key} must be a string`);
|
|
13295
|
+
const normalized = value.trim();
|
|
13296
|
+
return normalized.length === 0 ? void 0 : normalized;
|
|
13297
|
+
}
|
|
13298
|
+
function readPositiveInteger(record, key) {
|
|
13299
|
+
const value = record[key];
|
|
13300
|
+
if (!Number.isInteger(value) || Number(value) <= 0) {
|
|
13301
|
+
throw new Error(`Pet frame ${key} must be a positive integer`);
|
|
13302
|
+
}
|
|
13303
|
+
return Number(value);
|
|
13304
|
+
}
|
|
13305
|
+
|
|
13306
|
+
// packages/provider-codex/src/workbench-pets.ts
|
|
13307
|
+
var MAX_DOWNLOAD_BYTES = 4 * 1024 * 1024;
|
|
13308
|
+
var DOWNLOAD_TIMEOUT_MS = 6e4;
|
|
13309
|
+
var MAX_CONCURRENT_DOWNLOADS = 2;
|
|
13310
|
+
var CodexWorkbenchPetProvider = class {
|
|
13311
|
+
#assetRecords = /* @__PURE__ */ new Map();
|
|
13312
|
+
#codexHome;
|
|
13313
|
+
#fetch;
|
|
13314
|
+
#inFlight = /* @__PURE__ */ new Map();
|
|
13315
|
+
#logger;
|
|
13316
|
+
#downloadWaiters = [];
|
|
13317
|
+
#activeDownloads = 0;
|
|
13318
|
+
constructor(options) {
|
|
13319
|
+
this.#codexHome = resolve(options.codexHome);
|
|
13320
|
+
this.#fetch = options.fetch ?? globalThis.fetch;
|
|
13321
|
+
this.#logger = options.logger;
|
|
13322
|
+
}
|
|
13323
|
+
async listPets() {
|
|
13324
|
+
this.#assetRecords.clear();
|
|
13325
|
+
const builtins = await Promise.all(BUILTIN_PETS.map((pet) => this.#describeBuiltin(pet)));
|
|
13326
|
+
const preferred = await this.#scanCustomRoot("pets", "pet.json", "custom");
|
|
13327
|
+
const preferredFolders = new Set(preferred.map((record) => record.descriptor.id));
|
|
13328
|
+
const legacy = (await this.#scanCustomRoot("avatars", "avatar.json", "legacy")).filter(
|
|
13329
|
+
(record) => !preferredFolders.has(record.descriptor.id)
|
|
13330
|
+
);
|
|
13331
|
+
for (const record of [...preferred, ...legacy]) this.#assetRecords.set(record.assetId, record);
|
|
13332
|
+
return [...builtins, ...preferred, ...legacy].map(
|
|
13333
|
+
(item) => "descriptor" in item ? item.descriptor : item
|
|
13334
|
+
);
|
|
13335
|
+
}
|
|
13336
|
+
ensurePetAsset(petId) {
|
|
13337
|
+
if (petId.startsWith("custom:")) {
|
|
13338
|
+
return Promise.reject(
|
|
13339
|
+
new WorkbenchPetProviderError("invalid", "Only built-in pets can be downloaded")
|
|
13340
|
+
);
|
|
13341
|
+
}
|
|
13342
|
+
const pet = BUILTIN_PETS.find((candidate) => candidate.id === petId);
|
|
13343
|
+
if (pet === void 0) {
|
|
13344
|
+
return Promise.reject(new WorkbenchPetProviderError("not_found", "Unknown built-in pet"));
|
|
13345
|
+
}
|
|
13346
|
+
const existing = this.#inFlight.get(petId);
|
|
13347
|
+
if (existing !== void 0) return existing;
|
|
13348
|
+
const promise = this.#ensureBuiltin(pet).finally(() => this.#inFlight.delete(petId));
|
|
13349
|
+
this.#inFlight.set(petId, promise);
|
|
13350
|
+
return promise;
|
|
13351
|
+
}
|
|
13352
|
+
async openPetAsset(assetId) {
|
|
13353
|
+
let record = this.#assetRecords.get(assetId);
|
|
13354
|
+
if (record === void 0) {
|
|
13355
|
+
await this.listPets();
|
|
13356
|
+
record = this.#assetRecords.get(assetId);
|
|
13357
|
+
}
|
|
13358
|
+
if (record?.descriptor.availability !== "ready") return void 0;
|
|
13359
|
+
try {
|
|
13360
|
+
const metadata = await validatePetAsset(record);
|
|
13361
|
+
const content = await readFile(record.path);
|
|
13362
|
+
return {
|
|
13363
|
+
content,
|
|
13364
|
+
contentType: "image/webp",
|
|
13365
|
+
etag: `W/"${String(metadata.size)}-${String(Math.trunc(metadata.mtimeMs))}"`,
|
|
13366
|
+
size: metadata.size
|
|
13367
|
+
};
|
|
13368
|
+
} catch {
|
|
13369
|
+
throw new WorkbenchPetProviderError("invalid", "Pet asset is invalid");
|
|
13370
|
+
}
|
|
13371
|
+
}
|
|
13372
|
+
async #describeBuiltin(pet) {
|
|
13373
|
+
const assetId = stableAssetId(`builtin:${PET_PACK_VERSION}:${pet.id}:${pet.file}`);
|
|
13374
|
+
const path = this.#builtinPath(pet);
|
|
13375
|
+
const baseDirectory = dirname(path);
|
|
13376
|
+
let availability = "downloadable";
|
|
13377
|
+
try {
|
|
13378
|
+
await validateBuiltinFile(path);
|
|
13379
|
+
availability = "ready";
|
|
13380
|
+
} catch {
|
|
13381
|
+
}
|
|
13382
|
+
const descriptor = createBuiltinDescriptor(pet, assetId, availability);
|
|
13383
|
+
this.#assetRecords.set(assetId, { assetId, baseDirectory, descriptor, path });
|
|
13384
|
+
return descriptor;
|
|
13385
|
+
}
|
|
13386
|
+
async #ensureBuiltin(pet) {
|
|
13387
|
+
const cached = await this.#describeBuiltin(pet);
|
|
13388
|
+
if (cached.availability === "ready") return cached;
|
|
13389
|
+
await this.#acquireDownloadSlot();
|
|
13390
|
+
const destination = this.#builtinPath(pet);
|
|
13391
|
+
const staging = join(dirname(destination), `.${pet.file}.download-${randomUUID()}.webp`);
|
|
13392
|
+
try {
|
|
13393
|
+
const secondCheck = await this.#describeBuiltin(pet);
|
|
13394
|
+
if (secondCheck.availability === "ready") return secondCheck;
|
|
13395
|
+
const bytes = await this.#download(pet);
|
|
13396
|
+
await mkdir(dirname(destination), { recursive: true });
|
|
13397
|
+
await writeFile(staging, bytes, { flag: "wx" });
|
|
13398
|
+
await validateBuiltinFile(staging);
|
|
13399
|
+
try {
|
|
13400
|
+
await rename(staging, destination);
|
|
13401
|
+
} catch {
|
|
13402
|
+
await rm(destination, { force: true });
|
|
13403
|
+
await rename(staging, destination);
|
|
13404
|
+
}
|
|
13405
|
+
return await this.#describeBuiltin(pet);
|
|
13406
|
+
} catch (cause) {
|
|
13407
|
+
throw new WorkbenchPetProviderError(
|
|
13408
|
+
"download_failed",
|
|
13409
|
+
cause instanceof Error ? cause.message : "Pet asset download failed"
|
|
13410
|
+
);
|
|
13411
|
+
} finally {
|
|
13412
|
+
await rm(staging, { force: true });
|
|
13413
|
+
this.#releaseDownloadSlot();
|
|
13414
|
+
}
|
|
13415
|
+
}
|
|
13416
|
+
async #download(pet) {
|
|
13417
|
+
const url = `${PET_CDN_BASE_URL}/${pet.file}`;
|
|
13418
|
+
const response = await this.#fetch(url, {
|
|
13419
|
+
redirect: "follow",
|
|
13420
|
+
signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS)
|
|
13421
|
+
});
|
|
13422
|
+
if (!response.ok) throw new Error(`Pet asset download failed with ${String(response.status)}`);
|
|
13423
|
+
if (response.url.length > 0) validateDownloadUrl(response.url);
|
|
13424
|
+
const contentLength = Number(response.headers.get("content-length"));
|
|
13425
|
+
if (Number.isFinite(contentLength) && contentLength > MAX_DOWNLOAD_BYTES) {
|
|
13426
|
+
throw new Error("Pet asset download exceeded 4MiB");
|
|
13427
|
+
}
|
|
13428
|
+
if (response.body === null) throw new Error("Pet asset download returned no body");
|
|
13429
|
+
const body = response.body;
|
|
13430
|
+
const reader = body.getReader();
|
|
13431
|
+
const chunks = [];
|
|
13432
|
+
let size = 0;
|
|
13433
|
+
for (; ; ) {
|
|
13434
|
+
const result = await reader.read();
|
|
13435
|
+
if (result.done) break;
|
|
13436
|
+
size += result.value.byteLength;
|
|
13437
|
+
if (size > MAX_DOWNLOAD_BYTES) {
|
|
13438
|
+
await reader.cancel();
|
|
13439
|
+
throw new Error("Pet asset download exceeded 4MiB");
|
|
13440
|
+
}
|
|
13441
|
+
chunks.push(result.value);
|
|
13442
|
+
}
|
|
13443
|
+
const bytes = new Uint8Array(size);
|
|
13444
|
+
let offset = 0;
|
|
13445
|
+
for (const chunk of chunks) {
|
|
13446
|
+
bytes.set(chunk, offset);
|
|
13447
|
+
offset += chunk.byteLength;
|
|
13448
|
+
}
|
|
13449
|
+
const dimensions = readWebpDimensions(bytes);
|
|
13450
|
+
if (dimensions.width !== PET_SPRITESHEET.width || dimensions.height !== PET_SPRITESHEET.height) {
|
|
13451
|
+
throw new Error("Pet asset has invalid dimensions");
|
|
13452
|
+
}
|
|
13453
|
+
return bytes;
|
|
13454
|
+
}
|
|
13455
|
+
async #scanCustomRoot(rootName, manifestName, source) {
|
|
13456
|
+
const root = join(this.#codexHome, rootName);
|
|
13457
|
+
let entries;
|
|
13458
|
+
try {
|
|
13459
|
+
entries = await readdir(root, { withFileTypes: true });
|
|
13460
|
+
} catch {
|
|
13461
|
+
return [];
|
|
13462
|
+
}
|
|
13463
|
+
const records = [];
|
|
13464
|
+
for (const entry of entries) {
|
|
13465
|
+
if (!entry.isDirectory()) continue;
|
|
13466
|
+
try {
|
|
13467
|
+
const directory = join(root, entry.name);
|
|
13468
|
+
const assetId = stableAssetId(`${source}:${entry.name}`);
|
|
13469
|
+
records.push(
|
|
13470
|
+
await loadCustomPet({ assetId, directory, folder: entry.name, manifestName, source })
|
|
13471
|
+
);
|
|
13472
|
+
} catch {
|
|
13473
|
+
this.#logger?.warn(`Skipped invalid ${source} pet ${entry.name}`);
|
|
13474
|
+
}
|
|
13475
|
+
}
|
|
13476
|
+
return records;
|
|
13477
|
+
}
|
|
13478
|
+
#builtinPath(pet) {
|
|
13479
|
+
return join(this.#codexHome, "cache", "tui-pets", PET_PACK_VERSION, "assets", pet.file);
|
|
13480
|
+
}
|
|
13481
|
+
async #acquireDownloadSlot() {
|
|
13482
|
+
if (this.#activeDownloads < MAX_CONCURRENT_DOWNLOADS) {
|
|
13483
|
+
this.#activeDownloads += 1;
|
|
13484
|
+
return;
|
|
13485
|
+
}
|
|
13486
|
+
await new Promise((resolveWaiter) => this.#downloadWaiters.push(resolveWaiter));
|
|
13487
|
+
this.#activeDownloads += 1;
|
|
13488
|
+
}
|
|
13489
|
+
#releaseDownloadSlot() {
|
|
13490
|
+
this.#activeDownloads -= 1;
|
|
13491
|
+
this.#downloadWaiters.shift()?.();
|
|
13492
|
+
}
|
|
13493
|
+
};
|
|
13494
|
+
function createCodexWorkbenchPetProvider(options) {
|
|
13495
|
+
return new CodexWorkbenchPetProvider(options);
|
|
13496
|
+
}
|
|
13497
|
+
async function validateBuiltinFile(path) {
|
|
13498
|
+
const [root, resolved] = await Promise.all([realpath(dirname(path)), realpath(path)]);
|
|
13499
|
+
const child = relative(root, resolved);
|
|
13500
|
+
if (child === ".." || child.startsWith(`..${sep}`)) throw new Error("Pet cache path escaped");
|
|
13501
|
+
const metadata = await stat(resolved);
|
|
13502
|
+
if (!metadata.isFile() || metadata.size > MAX_DOWNLOAD_BYTES) {
|
|
13503
|
+
throw new Error("Pet cache file is invalid");
|
|
13504
|
+
}
|
|
13505
|
+
const dimensions = await readWebpDimensionsFromFile(resolved);
|
|
13506
|
+
if (dimensions.width !== PET_SPRITESHEET.width || dimensions.height !== PET_SPRITESHEET.height) {
|
|
13507
|
+
throw new Error("Pet cache file has invalid dimensions");
|
|
13508
|
+
}
|
|
13509
|
+
}
|
|
13510
|
+
function stableAssetId(value) {
|
|
13511
|
+
return createHash("sha256").update(value).digest("hex");
|
|
13512
|
+
}
|
|
13513
|
+
function validateDownloadUrl(value) {
|
|
13514
|
+
const url = new URL(value);
|
|
13515
|
+
if (url.protocol !== "https:" || url.hostname !== "persistent.oaistatic.com") {
|
|
13516
|
+
throw new Error("Pet asset download redirected outside the allowed host");
|
|
13517
|
+
}
|
|
13518
|
+
}
|
|
13519
|
+
|
|
13520
|
+
export { CodexAppServerExitedError, CodexAppServerProcess, CodexAppServerShutdownError, CodexAppServerSpawnError, CodexProjectRepository, CodexProtocolMappingError, CodexProviderConnectionError, CodexProviderConnectionService, CodexRuntimeProvider, CodexWorkbenchPetProvider, JsonlRpcClient, RpcConnectionClosedError, RpcProtocolError, RpcResponseError, RpcTimeoutError, SUPPORTED_CODEX_VERSION, checkCodexVersion, createCodexRuntimeProvider, createCodexWorkbenchPetProvider, locateCodexBinary, require_pino, require_safe_stable_stringify, startCodexAppServer };
|