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/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
- <meta charset="utf-8" />
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.24.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 function parseWranglerGzipBytes(output: string): number
2
- export function requireGzipBudget(output: string, maxBytes: number): number
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 }
@@ -4,23 +4,33 @@ const SIZE_UNITS = Object.freeze({
4
4
  MiB: 1024 * 1024,
5
5
  })
6
6
 
7
- /** Extract Wrangler's total compressed upload size in bytes. */
8
- export function parseWranglerGzipBytes(output) {
9
- const match = /Total Upload:[^\n/]+\/ gzip:\s*([0-9]+(?:\.[0-9]+)?)\s*(B|KiB|MiB)/u.exec(output)
10
- if (match === null) throw new Error('Wrangler did not report a compressed upload size.')
11
- return Math.ceil(Number(match[1]) * SIZE_UNITS[match[2]])
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 compressed Worker artifact above the repository budget. */
15
- export function requireGzipBudget(output, maxBytes) {
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 actualBytes = parseWranglerGzipBytes(output)
20
- if (actualBytes > maxBytes) {
29
+ const sizes = parseWranglerUploadSizes(output)
30
+ if (sizes.bytes > maxBytes) {
21
31
  throw new Error(
22
- `Direct Worker gzip size ${actualBytes} bytes exceeds the ${maxBytes}-byte budget.`,
32
+ `Worker size ${sizes.bytes} bytes exceeds Cloudflare's ${maxBytes}-byte uncompressed limit.`,
23
33
  )
24
34
  }
25
- return actualBytes
35
+ return sizes
26
36
  }
@@ -0,0 +1,2 @@
1
+ export const STARTUP_BUDGET_MS: number
2
+ export function profileDurationMs(profile: { startTime?: unknown, endTime?: unknown }): number
@@ -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
+ }