dsh-edge 0.24.0 → 0.26.0-alpha.2
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.i18n.yaml +2 -2
- package/README.md +6 -4
- package/README.zh.md +6 -4
- package/THIRD_PARTY_NOTICES.md +1 -230
- package/dist/index.html +2 -2
- package/package.json +3 -1
- package/scripts/bundle-size.d.mts +3 -2
- package/scripts/bundle-size.mjs +21 -11
- package/scripts/check-startup.d.mts +2 -0
- package/scripts/check-startup.mjs +74 -0
- package/worker/direct/index.js +1930 -1401
- package/worker/isolated/index.js +1574 -1045
package/dist/index.html
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!doctype html>
|
|
2
2
|
<html lang="en">
|
|
3
|
-
<head><script>(() => {
|
|
3
|
+
<head><meta charset="utf-8" /><script>(() => {
|
|
4
4
|
const transport = globalThis.__DSH_TRANSPORT__
|
|
5
5
|
globalThis.__DSH_TRANSPORT__ = { ...(transport ?? {}), ownsHost: true }
|
|
6
6
|
const originalFetch = window.fetch.bind(window)
|
|
@@ -42,7 +42,7 @@ window.__ModuleLoader__={
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
})()</script><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=b23455a17f0d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=f96cbbc29dcb"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=565b82de7963"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=1b22bf8a6d4a"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-job-controller/client.js?rev=7dcb6969b2d8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=3de1a9338e24"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=0f8db6e81d89"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=de2e0d637eaf"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=81e52051ff8c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=041d4fc1500a"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=52d407f01307"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=7eb7011a1537"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-shortcuts/client.js?rev=508cb7b3981c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-shortcuts/client.js?rev=3c6a75f5d8c1"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=844a187dafea"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=3964c918ca1e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=0ccd321cff2d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-resources/client.js?rev=c286431659da"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js?rev=3fc0cb56ec49"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=e29f827bcab0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=f2a0c7113fd4"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-browser/client.js?rev=5bd8be8c5cb8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=6aaeb13f1f8e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=e297e4b42507"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=13f72e0041e0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=9783aac771dc"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=8cc61a9b07a4"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=90a7b1691809"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=fbab223d424c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=4dae09da32ab"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js?rev=8fb2a6f9caf8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js?rev=05785cc669d7"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=5b4ed3efee66"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=5d61823ea6cf"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=04f6394593ee"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=39006d898d28"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=cf682bb89614"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=cab86e1f1d7d"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=72b73382a0fa"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=237e6a66b8a3"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=d7d9407809cb"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=0cb242bf4006"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=ad6ee1946bb5"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=80918bdb27c0"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=f72603327b21"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=da176ca824b8"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=6b95d5889f0f"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-agent-loop/client.js?rev=4f5c8834f9ce"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-subagent/client.js?rev=28448d268d34"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-settings-web-search/client.js?rev=b115be090a5c"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=669d6dfdbb3e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=fe812105feed"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=80059e654a2e"><link rel="preload" as="script" href="/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=8a4bd72bfd65"><link rel="preload" as="script" href="/plugins/dsh-edge-client-ui/client.js?rev=e4a196ed2df5"><script src="/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=b24ab13fe1a1"></script><script>globalThis["__DSH_BOOT__"] = {"rev":"42cc20fcb496","entries":[{"id":"@deepseek-ai/dsh-typert-registry","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=b23455a17f0d","rev":"b23455a17f0d","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-api-gateway","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=f96cbbc29dcb","rev":"f96cbbc29dcb","inject":["@deepseek-ai/dsh-typert-registry","@deepseek-ai/dsh-client-connection"],"immediately":true},{"id":"@deepseek-ai/dsh-client-ui-open-in-app","url":"/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=565b82de7963","rev":"565b82de7963","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-sidebar-documentpreview"]},{"id":"@deepseek-ai/dsh-api-session-controller","url":"/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=1b22bf8a6d4a","rev":"1b22bf8a6d4a","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-file-upload"],"external":["@deepseek-ai/dsh-api-gateway/client"]},{"id":"@deepseek-ai/dsh-api-job-controller","url":"/plugins/@deepseek-ai/dsh-api-job-controller/client.js?rev=7dcb6969b2d8","rev":"7dcb6969b2d8","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-connection"],"external":["@deepseek-ai/dsh-api-gateway/client"]},{"id":"@deepseek-ai/dsh-api-workspace-files","url":"/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=3de1a9338e24","rev":"3de1a9338e24","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-resources"]},{"id":"@deepseek-ai/dsh-api-workspace-controller","url":"/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=0f8db6e81d89","rev":"0f8db6e81d89","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-connection"],"external":["@deepseek-ai/dsh-api-gateway/client"]},{"id":"@deepseek-ai/dsh-client-modules","url":"/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=b24ab13fe1a1","rev":"b24ab13fe1a1","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-connection","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=de2e0d637eaf","rev":"de2e0d637eaf","inject":[],"immediately":true},{"id":"@deepseek-ai/dsh-client-file-upload","url":"/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=81e52051ff8c","rev":"81e52051ff8c","inject":["@deepseek-ai/dsh-api-remotes"],"immediately":true},{"id":"@deepseek-ai/dsh-api-remotes","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=041d4fc1500a","rev":"041d4fc1500a","inject":["@deepseek-ai/dsh-api-gateway"],"immediately":true},{"id":"@deepseek-ai/dsh-client-ui-theme","url":"/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=52d407f01307","rev":"52d407f01307","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"],"immediately":true},{"id":"@deepseek-ai/dsh-client-locale","url":"/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=7eb7011a1537","rev":"7eb7011a1537","inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"],"immediately":true},{"id":"@deepseek-ai/dsh-client-shortcuts","url":"/plugins/@deepseek-ai/dsh-client-shortcuts/client.js?rev=508cb7b3981c","rev":"508cb7b3981c","inject":["@deepseek-ai/dsh-client-locale"]},{"id":"@deepseek-ai/dsh-client-ui-shortcuts","url":"/plugins/@deepseek-ai/dsh-client-ui-shortcuts/client.js?rev=3c6a75f5d8c1","rev":"3c6a75f5d8c1","inject":["@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-layout","url":"/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=844a187dafea","rev":"844a187dafea","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-theme","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-renderer","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=3964c918ca1e","rev":"3964c918ca1e","immediately":true},{"id":"@deepseek-ai/dsh-client-ui-session","url":"/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=0ccd321cff2d","rev":"0ccd321cff2d","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-ui-renderer"]},{"id":"@deepseek-ai/dsh-client-resources","url":"/plugins/@deepseek-ai/dsh-client-resources/client.js?rev=c286431659da","rev":"c286431659da","inject":["@deepseek-ai/dsh-client-ui-renderer"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js?rev=3fc0cb56ec49","rev":"3fc0cb56ec49","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-right","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=e29f827bcab0","rev":"e29f827bcab0","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-documentpreview","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=f2a0c7113fd4","rev":"f2a0c7113fd4","inject":["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-browser","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-browser/client.js?rev=5bd8be8c5cb8","rev":"5bd8be8c5cb8","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-sidebar-files","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=6aaeb13f1f8e","rev":"6aaeb13f1f8e","inject":["@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-settings","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=e297e4b42507","rev":"e297e4b42507","inject":["@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings-general","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=13f72e0041e0","rev":"13f72e0041e0","inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-sidebar","@deepseek-ai/dsh-client-shortcuts"]},{"id":"@deepseek-ai/dsh-client-ui-settings-models","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=9783aac771dc","rev":"9783aac771dc","inject":["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings-plugin-inventory","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=8cc61a9b07a4","rev":"8cc61a9b07a4","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-agent-preset","@deepseek-ai/dsh-client-modules"]},{"id":"@deepseek-ai/dsh-client-ui-conversation","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=90a7b1691809","rev":"90a7b1691809","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-file-upload","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-approval","url":"/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=fbab223d424c","rev":"fbab223d424c","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-chat","url":"/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=4dae09da32ab","rev":"4dae09da32ab","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-brand-official","url":"/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js?rev=8fb2a6f9caf8","rev":"8fb2a6f9caf8","inject":["@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-sidebar"]},{"id":"@deepseek-ai/dsh-client-ui-attachment","url":"/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js?rev=05785cc669d7","rev":"05785cc669d7","inject":["@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-trajectory","@deepseek-ai/dsh-client-ui-tool"]},{"id":"@deepseek-ai/dsh-client-ui-tool","url":"/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=5b4ed3efee66","rev":"5b4ed3efee66","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation"]},{"id":"@deepseek-ai/dsh-client-ui-deliverables","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=5d61823ea6cf","rev":"5d61823ea6cf","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-workspace","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=04f6394593ee","rev":"04f6394593ee","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-sidebar"]},{"id":"@deepseek-ai/dsh-client-ui-workflow-run","url":"/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=39006d898d28","rev":"39006d898d28","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-input-trigger","url":"/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=cf682bb89614","rev":"cf682bb89614","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer"]},{"id":"@deepseek-ai/dsh-client-ui-commands","url":"/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=cab86e1f1d7d","rev":"cab86e1f1d7d","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-conversation"]},{"id":"@deepseek-ai/dsh-client-ui-skill","url":"/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=72b73382a0fa","rev":"72b73382a0fa","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-sidebar-right"]},{"id":"@deepseek-ai/dsh-client-ui-subagent","url":"/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=237e6a66b8a3","rev":"237e6a66b8a3","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-workspace"]},{"id":"@deepseek-ai/dsh-client-ui-reference","url":"/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=d7d9407809cb","rev":"d7d9407809cb","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-sidebar-right"]},{"id":"@deepseek-ai/dsh-client-ui-jobs","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=0cb242bf4006","rev":"0cb242bf4006","inject":["@deepseek-ai/dsh-api-job-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives"]},{"id":"@deepseek-ai/dsh-client-ui-goal","url":"/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=ad6ee1946bb5","rev":"ad6ee1946bb5","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-message-feedback","url":"/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=80918bdb27c0","rev":"80918bdb27c0","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-commands"]},{"id":"@deepseek-ai/dsh-client-ui-model-selection","url":"/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=f72603327b21","rev":"f72603327b21","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-commands","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-agent-preset","url":"/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=da176ca824b8","rev":"da176ca824b8","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings-plugins","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=6b95d5889f0f","rev":"6b95d5889f0f","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings"]},{"id":"@deepseek-ai/dsh-client-ui-settings-agent-loop","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-agent-loop/client.js?rev=4f5c8834f9ce","rev":"4f5c8834f9ce","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui"]},{"id":"@deepseek-ai/dsh-client-ui-settings-subagent","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-subagent/client.js?rev=28448d268d34","rev":"28448d268d34","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-settings-web-search","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-web-search/client.js?rev=b115be090a5c","rev":"b115be090a5c","inject":["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui","@deepseek-ai/dsh-api-remotes"]},{"id":"@deepseek-ai/dsh-client-ui-plan","url":"/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=669d6dfdbb3e","rev":"669d6dfdbb3e","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-user-questions","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-api-session-controller"]},{"id":"@deepseek-ai/dsh-client-ui-user-questions","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=fe812105feed","rev":"fe812105feed","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-chat"]},{"id":"@deepseek-ai/dsh-client-ui-trajectory","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=80059e654a2e","rev":"80059e654a2e","inject":["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{"id":"@deepseek-ai/dsh-client-ui-directory-picker-browse","url":"/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=8a4bd72bfd65","rev":"8a4bd72bfd65","inject":["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale"]},{"id":"dsh-edge-client-ui","url":"/plugins/dsh-edge-client-ui/client.js?rev=e4a196ed2df5","rev":"e4a196ed2df5","inject":["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings-plugins"]}],"batches":[{"phase":"bootstrap","url":"/plugins/@deepseek-ai/dsh-client-modules/client.js?rev=b24ab13fe1a1","rev":"b24ab13fe1a1","entries":["@deepseek-ai/dsh-client-modules"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-typert-registry/client.js?rev=b23455a17f0d","rev":"b23455a17f0d","entries":["@deepseek-ai/dsh-typert-registry"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-gateway/client.js?rev=f96cbbc29dcb","rev":"f96cbbc29dcb","entries":["@deepseek-ai/dsh-api-gateway"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-open-in-app/client.js?rev=565b82de7963","rev":"565b82de7963","entries":["@deepseek-ai/dsh-client-ui-open-in-app"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-session-controller/client.js?rev=1b22bf8a6d4a","rev":"1b22bf8a6d4a","entries":["@deepseek-ai/dsh-api-session-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-job-controller/client.js?rev=7dcb6969b2d8","rev":"7dcb6969b2d8","entries":["@deepseek-ai/dsh-api-job-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-workspace-files/client.js?rev=3de1a9338e24","rev":"3de1a9338e24","entries":["@deepseek-ai/dsh-api-workspace-files"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-workspace-controller/client.js?rev=0f8db6e81d89","rev":"0f8db6e81d89","entries":["@deepseek-ai/dsh-api-workspace-controller"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-connection/client.js?rev=de2e0d637eaf","rev":"de2e0d637eaf","entries":["@deepseek-ai/dsh-client-connection"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-file-upload/client.js?rev=81e52051ff8c","rev":"81e52051ff8c","entries":["@deepseek-ai/dsh-client-file-upload"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-api-remotes/client.js?rev=041d4fc1500a","rev":"041d4fc1500a","entries":["@deepseek-ai/dsh-api-remotes"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-theme/client.js?rev=52d407f01307","rev":"52d407f01307","entries":["@deepseek-ai/dsh-client-ui-theme"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-locale/client.js?rev=7eb7011a1537","rev":"7eb7011a1537","entries":["@deepseek-ai/dsh-client-locale"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-shortcuts/client.js?rev=508cb7b3981c","rev":"508cb7b3981c","entries":["@deepseek-ai/dsh-client-shortcuts"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-shortcuts/client.js?rev=3c6a75f5d8c1","rev":"3c6a75f5d8c1","entries":["@deepseek-ai/dsh-client-ui-shortcuts"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-layout/client.js?rev=844a187dafea","rev":"844a187dafea","entries":["@deepseek-ai/dsh-client-ui-layout"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-renderer/client.js?rev=3964c918ca1e","rev":"3964c918ca1e","entries":["@deepseek-ai/dsh-client-ui-renderer"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-session/client.js?rev=0ccd321cff2d","rev":"0ccd321cff2d","entries":["@deepseek-ai/dsh-client-ui-session"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-resources/client.js?rev=c286431659da","rev":"c286431659da","entries":["@deepseek-ai/dsh-client-resources"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar/client.js?rev=3fc0cb56ec49","rev":"3fc0cb56ec49","entries":["@deepseek-ai/dsh-client-ui-sidebar"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-right/client.js?rev=e29f827bcab0","rev":"e29f827bcab0","entries":["@deepseek-ai/dsh-client-ui-sidebar-right"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-documentpreview/client.js?rev=f2a0c7113fd4","rev":"f2a0c7113fd4","entries":["@deepseek-ai/dsh-client-ui-sidebar-documentpreview"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-browser/client.js?rev=5bd8be8c5cb8","rev":"5bd8be8c5cb8","entries":["@deepseek-ai/dsh-client-ui-sidebar-browser"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-sidebar-files/client.js?rev=6aaeb13f1f8e","rev":"6aaeb13f1f8e","entries":["@deepseek-ai/dsh-client-ui-sidebar-files"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings/client.js?rev=e297e4b42507","rev":"e297e4b42507","entries":["@deepseek-ai/dsh-client-ui-settings"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-general/client.js?rev=13f72e0041e0","rev":"13f72e0041e0","entries":["@deepseek-ai/dsh-client-ui-settings-general"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-models/client.js?rev=9783aac771dc","rev":"9783aac771dc","entries":["@deepseek-ai/dsh-client-ui-settings-models"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/client.js?rev=8cc61a9b07a4","rev":"8cc61a9b07a4","entries":["@deepseek-ai/dsh-client-ui-settings-plugin-inventory"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-conversation/client.js?rev=90a7b1691809","rev":"90a7b1691809","entries":["@deepseek-ai/dsh-client-ui-conversation"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-approval/client.js?rev=fbab223d424c","rev":"fbab223d424c","entries":["@deepseek-ai/dsh-client-ui-approval"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-chat/client.js?rev=4dae09da32ab","rev":"4dae09da32ab","entries":["@deepseek-ai/dsh-client-ui-chat"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-brand-official/client.js?rev=8fb2a6f9caf8","rev":"8fb2a6f9caf8","entries":["@deepseek-ai/dsh-client-ui-brand-official"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-attachment/client.js?rev=05785cc669d7","rev":"05785cc669d7","entries":["@deepseek-ai/dsh-client-ui-attachment"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-tool/client.js?rev=5b4ed3efee66","rev":"5b4ed3efee66","entries":["@deepseek-ai/dsh-client-ui-tool"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-deliverables/client.js?rev=5d61823ea6cf","rev":"5d61823ea6cf","entries":["@deepseek-ai/dsh-client-ui-deliverables"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-workspace/client.js?rev=04f6394593ee","rev":"04f6394593ee","entries":["@deepseek-ai/dsh-client-ui-workspace"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-workflow-run/client.js?rev=39006d898d28","rev":"39006d898d28","entries":["@deepseek-ai/dsh-client-ui-workflow-run"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-input-trigger/client.js?rev=cf682bb89614","rev":"cf682bb89614","entries":["@deepseek-ai/dsh-client-ui-input-trigger"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-commands/client.js?rev=cab86e1f1d7d","rev":"cab86e1f1d7d","entries":["@deepseek-ai/dsh-client-ui-commands"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-skill/client.js?rev=72b73382a0fa","rev":"72b73382a0fa","entries":["@deepseek-ai/dsh-client-ui-skill"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-subagent/client.js?rev=237e6a66b8a3","rev":"237e6a66b8a3","entries":["@deepseek-ai/dsh-client-ui-subagent"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-reference/client.js?rev=d7d9407809cb","rev":"d7d9407809cb","entries":["@deepseek-ai/dsh-client-ui-reference"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-jobs/client.js?rev=0cb242bf4006","rev":"0cb242bf4006","entries":["@deepseek-ai/dsh-client-ui-jobs"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-goal/client.js?rev=ad6ee1946bb5","rev":"ad6ee1946bb5","entries":["@deepseek-ai/dsh-client-ui-goal"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-message-feedback/client.js?rev=80918bdb27c0","rev":"80918bdb27c0","entries":["@deepseek-ai/dsh-client-ui-message-feedback"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-model-selection/client.js?rev=f72603327b21","rev":"f72603327b21","entries":["@deepseek-ai/dsh-client-ui-model-selection"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-agent-preset/client.js?rev=da176ca824b8","rev":"da176ca824b8","entries":["@deepseek-ai/dsh-client-ui-agent-preset"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-plugins/client.js?rev=6b95d5889f0f","rev":"6b95d5889f0f","entries":["@deepseek-ai/dsh-client-ui-settings-plugins"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-agent-loop/client.js?rev=4f5c8834f9ce","rev":"4f5c8834f9ce","entries":["@deepseek-ai/dsh-client-ui-settings-agent-loop"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-subagent/client.js?rev=28448d268d34","rev":"28448d268d34","entries":["@deepseek-ai/dsh-client-ui-settings-subagent"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-settings-web-search/client.js?rev=b115be090a5c","rev":"b115be090a5c","entries":["@deepseek-ai/dsh-client-ui-settings-web-search"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-plan/client.js?rev=669d6dfdbb3e","rev":"669d6dfdbb3e","entries":["@deepseek-ai/dsh-client-ui-plan"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-user-questions/client.js?rev=fe812105feed","rev":"fe812105feed","entries":["@deepseek-ai/dsh-client-ui-user-questions"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-trajectory/client.js?rev=80059e654a2e","rev":"80059e654a2e","entries":["@deepseek-ai/dsh-client-ui-trajectory"]},{"phase":"application","url":"/plugins/@deepseek-ai/dsh-client-ui-directory-picker-browse/client.js?rev=8a4bd72bfd65","rev":"8a4bd72bfd65","entries":["@deepseek-ai/dsh-client-ui-directory-picker-browse"]},{"phase":"application","url":"/plugins/dsh-edge-client-ui/client.js?rev=e4a196ed2df5","rev":"e4a196ed2df5","entries":["dsh-edge-client-ui"]}]}</script>
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
47
47
|
<link rel="manifest" href="./manifest.webmanifest" />
|
|
48
48
|
<link rel="icon" type="image/svg+xml" href="./favicon-dark.svg" media="(prefers-color-scheme: dark)" />
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-edge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0-alpha.2",
|
|
4
4
|
"description": "Your DeepSeek Harness, anywhere — deploy a persistent personal coding agent to Cloudflare Workers in one command",
|
|
5
5
|
"author": "pawaca",
|
|
6
6
|
"license": "MIT",
|
|
@@ -103,6 +103,7 @@
|
|
|
103
103
|
"@deepseek-ai/dsh-llm": "0.2.0-rc.2",
|
|
104
104
|
"@deepseek-ai/dsh-llm-deepseek": "0.2.0-rc.2",
|
|
105
105
|
"@deepseek-ai/dsh-llm-deepseek-api-key": "0.2.0-rc.2",
|
|
106
|
+
"@deepseek-ai/dsh-llm-pi-ai": "0.2.0-rc.2",
|
|
106
107
|
"@deepseek-ai/dsh-llm-retry": "0.2.0-rc.2",
|
|
107
108
|
"@deepseek-ai/dsh-message-feedback": "0.2.0-rc.2",
|
|
108
109
|
"@deepseek-ai/dsh-output-retention": "0.2.0-rc.2",
|
|
@@ -192,6 +193,7 @@
|
|
|
192
193
|
"example:install": "node examples/install-keyless.mjs",
|
|
193
194
|
"install:cloudflare": "pnpm run bundle:workers && node scripts/cli.mjs install",
|
|
194
195
|
"legal:write": "node scripts/legal-files.mjs write",
|
|
196
|
+
"check:startup": "node scripts/check-startup.mjs",
|
|
195
197
|
"pack:verify": "node scripts/verify-packed.mjs",
|
|
196
198
|
"web:build": "pnpm --dir standalone run build:web && node standalone/scripts/promote.mjs web",
|
|
197
199
|
"test": "vitest run --root ../.. --project edge-runtime",
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
export function
|
|
1
|
+
export const WORKER_SIZE_LIMIT_BYTES: number
|
|
2
|
+
export function parseWranglerUploadSizes(output: string): { bytes: number, gzipBytes: number }
|
|
3
|
+
export function requireWorkerSizeLimit(output: string, maxBytes?: number): { bytes: number, gzipBytes: number }
|
package/scripts/bundle-size.mjs
CHANGED
|
@@ -4,23 +4,33 @@ const SIZE_UNITS = Object.freeze({
|
|
|
4
4
|
MiB: 1024 * 1024,
|
|
5
5
|
})
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Cloudflare's Worker size limit: 64 MiB uncompressed on Workers Free and Paid.
|
|
9
|
+
* There is no compressed-size limit; Wrangler's gzip figure is for reference.
|
|
10
|
+
* https://developers.cloudflare.com/workers/platform/limits/
|
|
11
|
+
*/
|
|
12
|
+
export const WORKER_SIZE_LIMIT_BYTES = 64 * 1024 * 1024
|
|
13
|
+
|
|
14
|
+
/** Extract Wrangler's total upload sizes (uncompressed and gzip) in bytes. */
|
|
15
|
+
export function parseWranglerUploadSizes(output) {
|
|
16
|
+
const match = /Total Upload:\s*([0-9]+(?:\.[0-9]+)?)\s*(B|KiB|MiB)\s*\/ gzip:\s*([0-9]+(?:\.[0-9]+)?)\s*(B|KiB|MiB)/u.exec(output)
|
|
17
|
+
if (match === null) throw new Error('Wrangler did not report the upload size.')
|
|
18
|
+
return {
|
|
19
|
+
bytes: Math.ceil(Number(match[1]) * SIZE_UNITS[match[2]]),
|
|
20
|
+
gzipBytes: Math.ceil(Number(match[3]) * SIZE_UNITS[match[4]]),
|
|
21
|
+
}
|
|
12
22
|
}
|
|
13
23
|
|
|
14
|
-
/** Reject a
|
|
15
|
-
export function
|
|
24
|
+
/** Reject a Worker artifact above Cloudflare's uncompressed size limit. */
|
|
25
|
+
export function requireWorkerSizeLimit(output, maxBytes = WORKER_SIZE_LIMIT_BYTES) {
|
|
16
26
|
if (!Number.isSafeInteger(maxBytes) || maxBytes <= 0) {
|
|
17
27
|
throw new TypeError('maxBytes must be a positive safe integer.')
|
|
18
28
|
}
|
|
19
|
-
const
|
|
20
|
-
if (
|
|
29
|
+
const sizes = parseWranglerUploadSizes(output)
|
|
30
|
+
if (sizes.bytes > maxBytes) {
|
|
21
31
|
throw new Error(
|
|
22
|
-
`
|
|
32
|
+
`Worker size ${sizes.bytes} bytes exceeds Cloudflare's ${maxBytes}-byte uncompressed limit.`,
|
|
23
33
|
)
|
|
24
34
|
}
|
|
25
|
-
return
|
|
35
|
+
return sizes
|
|
26
36
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Profile the promoted Worker artifacts' startup with `wrangler check startup`
|
|
3
|
+
* and reject one whose global scope takes longer than the budget.
|
|
4
|
+
*
|
|
5
|
+
* Cloudflare gives a Worker 1 second of startup CPU to parse and run its
|
|
6
|
+
* global scope (https://developers.cloudflare.com/workers/platform/limits/).
|
|
7
|
+
* The profile runs locally on a different CPU, so the budget leaves margin
|
|
8
|
+
* below that limit and serves as a regression guard, not a measurement of the
|
|
9
|
+
* deployed startup time.
|
|
10
|
+
*
|
|
11
|
+
* Usage: node scripts/check-startup.mjs [direct|isolated|all]
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { mkdtemp, readFile, rm } from 'node:fs/promises'
|
|
15
|
+
import { createRequire } from 'node:module'
|
|
16
|
+
import { tmpdir } from 'node:os'
|
|
17
|
+
import { join } from 'node:path'
|
|
18
|
+
import { fileURLToPath } from 'node:url'
|
|
19
|
+
import { execa } from 'execa'
|
|
20
|
+
import { writePrebuiltModeWranglerConfig } from './wrangler-config.mjs'
|
|
21
|
+
|
|
22
|
+
export const STARTUP_BUDGET_MS = 600
|
|
23
|
+
|
|
24
|
+
/** Startup duration of a V8 CPU profile, in milliseconds. */
|
|
25
|
+
export function profileDurationMs(profile) {
|
|
26
|
+
if (typeof profile?.startTime !== 'number' || typeof profile?.endTime !== 'number' || profile.endTime < profile.startTime) {
|
|
27
|
+
throw new Error('The startup profile has no valid start and end times.')
|
|
28
|
+
}
|
|
29
|
+
return (profile.endTime - profile.startTime) / 1000
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const appDirectory = fileURLToPath(new URL('..', import.meta.url))
|
|
33
|
+
const wranglerCli = createRequire(import.meta.url).resolve('wrangler')
|
|
34
|
+
|
|
35
|
+
async function checkStartup(mode) {
|
|
36
|
+
const directory = await mkdtemp(join(tmpdir(), `dsh-edge-startup-${mode}-`))
|
|
37
|
+
try {
|
|
38
|
+
const config = join(directory, 'wrangler.json')
|
|
39
|
+
const profile = join(directory, 'startup.cpuprofile')
|
|
40
|
+
await writePrebuiltModeWranglerConfig(mode, config, { r2BucketName: 'dsh-edge-startup-check' })
|
|
41
|
+
const result = await execa(process.execPath, [
|
|
42
|
+
wranglerCli, 'check', 'startup',
|
|
43
|
+
'--config', config,
|
|
44
|
+
...mode === 'isolated' ? ['--env', 'isolated'] : [],
|
|
45
|
+
'--outfile', profile,
|
|
46
|
+
], { cwd: appDirectory, reject: false, all: true })
|
|
47
|
+
if (result.exitCode !== 0) {
|
|
48
|
+
throw new Error(`wrangler check startup failed for the ${mode} Worker:\n${result.all ?? ''}`)
|
|
49
|
+
}
|
|
50
|
+
const durationMs = profileDurationMs(JSON.parse(await readFile(profile, 'utf8')))
|
|
51
|
+
process.stdout.write(`${mode} Worker startup: ${durationMs.toFixed(0)} ms (budget ${STARTUP_BUDGET_MS} ms, local CPU).\n`)
|
|
52
|
+
if (durationMs > STARTUP_BUDGET_MS) {
|
|
53
|
+
throw new Error(`The ${mode} Worker startup took ${durationMs.toFixed(0)} ms, above the ${STARTUP_BUDGET_MS} ms budget (Cloudflare allows 1000 ms).`)
|
|
54
|
+
}
|
|
55
|
+
} finally {
|
|
56
|
+
await rm(directory, { recursive: true, force: true })
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
61
|
+
const requested = process.argv[2] ?? 'all'
|
|
62
|
+
const modes = requested === 'all' ? ['direct', 'isolated'] : [requested]
|
|
63
|
+
if (!modes.every(mode => mode === 'direct' || mode === 'isolated')) {
|
|
64
|
+
process.stderr.write('Usage: node scripts/check-startup.mjs [direct|isolated|all]\n')
|
|
65
|
+
process.exitCode = 2
|
|
66
|
+
} else {
|
|
67
|
+
try {
|
|
68
|
+
for (const mode of modes) await checkStartup(mode)
|
|
69
|
+
} catch (error) {
|
|
70
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`)
|
|
71
|
+
process.exitCode = 1
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|