@heybox/hb-sdk 0.9.5-alpha.1 → 0.9.5-alpha.3
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 +20 -0
- package/README.md +1 -1
- package/dist/cli-chunks/{artifact-CevKlc1g.cjs → artifact-qcqjww0s.cjs} +3 -3
- package/dist/cli-chunks/{build-CF1-28D8.cjs → build-DCgpTg32.cjs} +7 -5
- package/dist/cli-chunks/{create-Q50un0Bg.cjs → create-B1R3GzUJ.cjs} +3 -1
- package/dist/cli-chunks/{dev-Bsa-tW7L.cjs → dev-BktX-Knf.cjs} +32 -8
- package/dist/cli-chunks/{dev-context-D007Z2-c.cjs → dev-context-CE4HgJig.cjs} +2 -2
- package/dist/cli-chunks/{doctor-CIWDaPfi.cjs → doctor-ahqYzMjt.cjs} +3 -1
- package/dist/cli-chunks/{games-CNjfXQjT.cjs → games-DeOUz5bI.cjs} +5 -4
- package/dist/cli-chunks/{index-xZw-b2po.cjs → index-C3p93h2e.cjs} +502 -66
- package/dist/cli-chunks/{index-CYTciTqL.cjs → index-Ca7rRS2Z.cjs} +1 -1
- package/dist/cli-chunks/{index.esm-hwkHnZhi.cjs → index.esm-BjwRn4Dl.cjs} +8 -6
- package/dist/cli-chunks/{login-ClnBJiRJ.cjs → login-DuOq0Gm9.cjs} +2 -1
- package/dist/cli-chunks/{project-vite-CgMLPNS6.cjs → project-vite-C48AvOrg.cjs} +1 -1
- package/dist/cli-chunks/{remote-D-N5Gj1e.cjs → remote-BqbatO77.cjs} +8 -8
- package/dist/cli-chunks/{runtime-permission-env-BF-Jw5-T.cjs → runtime-permission-env-BfP6motG.cjs} +2 -2
- package/dist/cli-chunks/{skill-ba1VHnEN.cjs → skill-CN-_HmPx.cjs} +4 -2
- package/dist/cli-chunks/{version-CArGts-T.cjs → version-DyS8HIuU.cjs} +1 -1
- package/dist/cli.cjs +3 -1
- package/dist/devtools/browser-dev-host/assets/brand-watermark-FfehWVaf.svg +8 -0
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-CPoh6wpa.js +102 -0
- package/dist/devtools/browser-dev-host/assets/desktop-app-launch-KWxMdRrR.js +6 -0
- package/dist/devtools/browser-dev-host/assets/index-B0sWGR7o.js +567 -0
- package/dist/devtools/browser-dev-host/assets/index-DSTlrpnQ.css +1 -0
- package/dist/devtools/browser-dev-host/index.html +3 -3
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/vite.cjs.js +1 -1
- package/dist/vite.esm.js +1 -1
- package/package.json +4 -4
- package/skill/SKILL.md +2 -0
- package/skill/skill.json +5 -5
- package/dist/cli-chunks/deploy-lock-CpdL3s9E.cjs +0 -148
- package/dist/devtools/browser-dev-host/assets/browser-dev-host-D9zSDJJ8.js +0 -102
- package/dist/devtools/browser-dev-host/assets/desktop-app-launch-BXS6eaj9.js +0 -6
- package/dist/devtools/browser-dev-host/assets/index-Bn6Xr40h.js +0 -567
- package/dist/devtools/browser-dev-host/assets/index-h-fYisyX.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.hb-avatar{position:relative;box-sizing:border-box;display:inline-flex;flex-shrink:0}.hb-avatar__clip{display:flex;align-items:center;justify-content:center;width:100%;height:100%;overflow:hidden;background:var(--hb-color-bg-surface);border-radius:50%}.hb-avatar__img{display:block;width:100%;height:100%;object-fit:cover}.hb-avatar__fallback{width:66%;height:66%;fill:var(--hb-color-icon-tertiary)}.hb-avatar--logged-out .hb-avatar__fallback{fill:var(--hb-color-icon-disabled)}.hb-avatar__frame{position:absolute;top:50%;left:50%;width:135.3%;height:135.3%;object-fit:contain;pointer-events:none;transform:translate(-50%,-50%)}.hb-v2-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1em;height:1em;line-height:1;color:inherit;vertical-align:-.125em}.hb-v2-icon svg{display:block;width:1em;height:1em;fill:currentColor;vertical-align:0}.hb-v2-icon svg [stroke]:not([stroke=none]){stroke:currentColor}.hb-v2-icon svg [fill]:not([fill=none]){fill:currentColor}.hb-v2-icon--spin svg{animation:hb-v2-icon-spin 1s linear infinite}@keyframes hb-v2-icon-spin{to{transform:rotate(1turn)}}.hb-v2-toast__wrapper{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;box-sizing:border-box;pointer-events:none}.hb-v2-toast{display:flex;align-items:center;justify-content:center;box-sizing:border-box;margin:0;font-family:PingFang SC,Helvetica Neue,Arial,sans-serif;font-size:13px;font-weight:400;line-height:17px;letter-spacing:0;text-align:center;pointer-events:auto}.hb-v2-toast__wrapper-click-through .hb-v2-toast{pointer-events:none}.hb-v2-toast-default,.hb-v2-toast-loading{flex-direction:column;gap:10px;min-width:92px;min-height:91px;max-width:220px;padding:20px;color:var(--hb-color-text-inverse);background:var(--hb-color-bg-toast);border-radius:12px;-webkit-backdrop-filter:blur(12.5px);backdrop-filter:blur(12.5px)}.hb-v2-toast-loading{min-height:101px}.hb-v2-toast-loading-icon-only{gap:0;min-width:0;min-height:0;width:74px;height:74px;padding:20px}.hb-v2-toast__icon{font-size:24px;line-height:24px}.hb-v2-toast__text{position:relative;z-index:1;max-width:180px;color:inherit;overflow-wrap:break-word}.hb-v2-toast__spinner{display:flex;align-items:center;justify-content:center;width:34px;height:34px}.hb-v2-toast__spinner-circular{display:block;width:34px;height:34px;animation:hb-v2-toast-loading-rotate 2s linear infinite}.hb-v2-toast__spinner-bg{stroke:var(--hb-color-game-record-white-30);stroke-width:2.5}.hb-v2-toast__spinner-path{stroke:var(--hb-color-game-record-white-100);stroke-linecap:round;stroke-width:2.5;animation:hb-v2-toast-spin-round 1.5s linear infinite}.hb-v2-toast-fade-enter-active,.hb-v2-toast-fade-leave-active{transition:opacity .16s cubic-bezier(0,0,.58,1)}.hb-v2-toast-fade-enter-from,.hb-v2-toast-fade-leave-to{opacity:0}@keyframes hb-v2-toast-loading-rotate{to{transform:rotate(1turn)}}@keyframes hb-v2-toast-spin-round{0%{stroke-dasharray:20,132;stroke-dashoffset:0}50%{stroke-dasharray:90,62;stroke-dashoffset:-60px}to{stroke-dasharray:20,132;stroke-dashoffset:-152px}}.splitpanes{width:100%;height:100%;display:flex}.splitpanes--vertical{flex-direction:row}.splitpanes--horizontal{flex-direction:column}.splitpanes--dragging .splitpanes__pane{-webkit-user-select:none;user-select:none;pointer-events:none}:has(.splitpanes--dragging){-webkit-user-select:none;user-select:none;pointer-events:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--ready .splitpanes__pane{will-change:width,height;transition:width .2s ease-out,height .2s ease-out}.splitpanes--ready.splitpanes--dragging .splitpanes__pane{transition:none}.splitpanes__splitter{touch-action:none}.splitpanes__splitter:focus{outline:none}.splitpanes--vertical>.splitpanes__splitter{cursor:col-resize;min-width:1px}.splitpanes--horizontal>.splitpanes__splitter{cursor:row-resize;min-height:1px}.default-theme.splitpanes .splitpanes__pane{background-color:#f2f2f2}.default-theme.splitpanes .splitpanes__splitter{box-sizing:border-box;background-color:#fff;flex-shrink:0;position:relative}.default-theme.splitpanes .splitpanes__splitter:focus-visible{outline-offset:-2px;outline:2px solid #3b82f6}.default-theme.splitpanes .splitpanes__splitter:before,.default-theme.splitpanes .splitpanes__splitter:after{content:"";background-color:#00000026;transition:background-color .3s;position:absolute;top:50%;left:50%}.default-theme.splitpanes .splitpanes__splitter:hover:before,.default-theme.splitpanes .splitpanes__splitter:hover:after{background-color:#00000040}.default-theme.splitpanes .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme.splitpanes--vertical>.splitpanes__splitter,.default-theme .splitpanes--vertical>.splitpanes__splitter{border-left:1px solid #eee;width:7px;margin-left:-1px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{width:1px;height:30px;transform:translateY(-50%)}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter,.default-theme .splitpanes--horizontal>.splitpanes__splitter{border-top:1px solid #eee;height:7px;margin-top:-1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{width:30px;height:1px;transform:translate(-50%)}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px}.desktop-window{position:relative;flex:none;overflow:hidden;border-radius:8px;background:var(--hb-color-bg-surface);box-shadow:0 0 0 1px #ffffff26,0 3px 24px #0000004d}.desktop-window.desktop-window--resizing{-webkit-user-select:none;user-select:none}.desktop-window .desktop-window__surface{display:flex;flex-direction:column;overflow:hidden;transform-origin:top left}.desktop-window .desktop-window__titlebar{position:relative;display:flex;flex:none;align-items:center;justify-content:space-between;box-sizing:border-box;padding:8px 6px 8px 16px;gap:8px;background:linear-gradient(#ffffff08,#ffffff08),#2a2d33;box-shadow:inset 0 -1px #ffffff0d;-webkit-user-select:none;user-select:none}.desktop-window .desktop-window__identity{display:flex;flex:1 1 0;min-width:0;height:32px;align-items:center;gap:8px;overflow:hidden}.desktop-window .desktop-window__app-icon{position:relative;display:grid;width:24px;height:24px;flex:none;overflow:hidden;place-items:center;border-radius:4px;color:#fff;background:#ffffff1a;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:14px;line-height:normal;letter-spacing:0px}.desktop-window .desktop-window__app-icon img{width:100%;height:100%;object-fit:cover}.desktop-window .desktop-window__app-icon.desktop-window__app-icon--large{width:46px;height:46px}.desktop-window .desktop-window__title{max-width:180px;min-width:0;overflow:hidden;color:#fff;text-overflow:ellipsis;white-space:nowrap;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:14px;line-height:normal;letter-spacing:0px}.desktop-window .desktop-window__watermark{position:absolute;left:50%;display:grid;width:56px;height:16px;place-items:center;transform:translate(-50%);pointer-events:none}.desktop-window .desktop-window__watermark img{display:block}.desktop-window .desktop-window__controls{position:relative;display:flex;width:132px;height:32px;flex:none;align-items:center;padding:0 2px;overflow:hidden;border-radius:16px;box-shadow:inset 0 0 0 1px #ffffff1a}.desktop-window .desktop-window__control{position:relative;display:grid;width:32px;height:32px;flex:none;padding:0;place-items:center;border:0;background:transparent;cursor:pointer}.desktop-window .desktop-window__control img{position:relative;z-index:1;display:block;grid-area:1/1;pointer-events:none}.desktop-window .desktop-window__control+.desktop-window__control:before{position:absolute;top:8px;left:-1.25px;width:.5px;height:16px;background:#ffffff26;content:""}.desktop-window .desktop-window__control:after{position:absolute;inset:0;content:""}.desktop-window .desktop-window__control:first-child:after{left:-2px;border-radius:16px 0 0 16px}.desktop-window .desktop-window__control:last-child:after{right:-2px;border-radius:0 16px 16px 0}.desktop-window .desktop-window__control:hover:after{background:#ffffff0d}.desktop-window .desktop-window__control[data-state=open]:after,.desktop-window .desktop-window__control:active:after{background:#ffffff1a}.desktop-window .desktop-window__control:focus-visible{outline:none}.desktop-window .desktop-window__control:focus-visible:after{box-shadow:inset 0 0 0 1px var(--hb-color-brand-primary)}.desktop-window .desktop-window__control .desktop-window__close-active{display:none}.desktop-window .desktop-window__control.desktop-window__control--close:hover:after{background:var(--hb-color-status-danger)}.desktop-window .desktop-window__control.desktop-window__control--close:active:after{background:linear-gradient(#ffffff26,#ffffff26),var(--hb-color-status-danger)}.desktop-window .desktop-window__control.desktop-window__control--close:hover .desktop-window__close-idle{display:none}.desktop-window .desktop-window__control.desktop-window__control--close:hover .desktop-window__close-active{display:block}.desktop-window .desktop-window__more{z-index:5;width:min(334px,var(--desktop-window-width) - 16px);overflow:hidden;border-radius:8px;background:#0f1214e6;box-shadow:0 2px 15px #0000004d;outline:none;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.desktop-window .desktop-window__more .desktop-window__more-header{position:relative;display:flex;height:78px;align-items:center;gap:12px;padding:16px;overflow:hidden;background:#ffffff0d}.desktop-window .desktop-window__more .desktop-window__spotlight{position:absolute;top:-118px;left:-92px;pointer-events:none}.desktop-window .desktop-window__more .desktop-window__more-info{position:relative;display:grid;min-width:0;gap:4px}.desktop-window .desktop-window__more .desktop-window__more-info strong,.desktop-window .desktop-window__more .desktop-window__more-info span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.desktop-window .desktop-window__more .desktop-window__more-info strong{color:#d5d7d9;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:14px;line-height:normal;letter-spacing:0px}.desktop-window .desktop-window__more .desktop-window__more-info span{color:#888a8e;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:12px;line-height:16px;letter-spacing:0px;line-height:18px}.desktop-window .desktop-window__more .desktop-window__more-actions{display:flex;align-items:center;justify-content:center;gap:16px;padding:20px 16px}.desktop-window .desktop-window__more .desktop-window__more-action{display:grid;width:62px;flex:none;justify-items:center;gap:8px;padding:0;border:0;color:#9b9fa2;background:transparent;cursor:pointer;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:12px;line-height:16px;letter-spacing:0px;line-height:18px;white-space:nowrap}.desktop-window .desktop-window__more .desktop-window__more-action:hover .desktop-window__action-icon{background:#373a40}.desktop-window .desktop-window__more .desktop-window__more-action:active .desktop-window__action-icon{background:#41454b}.desktop-window .desktop-window__more .desktop-window__more-action:focus-visible{outline:none}.desktop-window .desktop-window__more .desktop-window__more-action:focus-visible .desktop-window__action-icon{box-shadow:inset 0 0 0 1px var(--hb-color-brand-primary)}.desktop-window .desktop-window__more .desktop-window__action-icon{display:grid;width:46px;height:46px;place-items:center;border-radius:50%;background:#26282d}.desktop-window .desktop-window__more .desktop-window__action-icon img{display:block}.desktop-window__content{position:relative;display:grid;flex:1 1 auto;grid-template-rows:minmax(0,1fr);min-height:0;overflow:hidden;background:var(--hb-color-bg-surface)}.desktop-window__resize{position:absolute;z-index:4;touch-action:none}.desktop-window__resize--n,.desktop-window__resize--s{right:10px;left:10px;height:8px;cursor:ns-resize}.desktop-window__resize--n{top:0}.desktop-window__resize--s{bottom:0}.desktop-window__resize--e,.desktop-window__resize--w{top:10px;bottom:10px;width:8px;cursor:ew-resize}.desktop-window__resize--e{right:0}.desktop-window__resize--w{left:0}.desktop-window__resize--ne,.desktop-window__resize--nw,.desktop-window__resize--se,.desktop-window__resize--sw{width:10px;height:10px}.desktop-window__resize--ne{top:0;right:0;cursor:nesw-resize}.desktop-window__resize--nw{top:0;left:0;cursor:nwse-resize}.desktop-window__resize--se{right:0;bottom:0;cursor:nwse-resize}.desktop-window__resize--sw{bottom:0;left:0;cursor:nesw-resize}.local-permissions[data-v-de523d18]{color:var(--hb-color-text-secondary);font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.local-permissions .local-permissions__warning[data-v-de523d18]{margin:0 0 10px;line-height:1.6;overflow-wrap:anywhere}.local-permissions .local-permissions__entries[data-v-de523d18]{display:grid;gap:10px}.local-permissions .local-permissions__entry[data-v-de523d18]{padding-top:10px;border-top:1px solid var(--hb-color-border-muted)}.local-permissions .local-permissions__entry-heading[data-v-de523d18]{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--hb-color-text-primary)}.local-permissions .local-permissions__state[data-v-de523d18]{color:var(--hb-color-text-secondary)}.local-permissions .local-permissions__reason[data-v-de523d18]{margin:4px 0;color:var(--hb-color-text-tertiary);overflow-wrap:anywhere}.local-permissions .local-permissions__apply[data-v-de523d18]{display:inline-block;margin-top:4px;color:var(--hb-color-brand-primary);text-decoration:none;white-space:nowrap}.local-permissions .local-permissions__apply[data-v-de523d18]:hover{text-decoration:underline;text-underline-offset:2px}.sandbox-panel[data-v-d80a18b5]{height:100%;overflow:auto;padding:12px;color:var(--hb-color-text-primary);font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.sandbox-panel__toolbar[data-v-d80a18b5]{display:flex;height:40px;align-items:center;gap:4px;margin:8px 0 4px;border-bottom:1px solid var(--hb-color-border-muted)}.sandbox-panel__path[data-v-d80a18b5]{display:flex;min-width:0;flex:1;align-items:center;gap:6px;overflow:hidden;color:var(--hb-color-text-secondary);text-overflow:ellipsis;white-space:nowrap}.sandbox-panel__entry[data-v-d80a18b5]{display:flex;width:100%;min-height:34px;align-items:center;gap:8px;padding:6px 8px;border:0;border-radius:6px;color:var(--hb-color-text-primary);background:transparent;text-align:left;cursor:pointer}.sandbox-panel__entry[data-v-d80a18b5]:hover:not(:disabled){background:var(--hb-color-bg-subtle)}.sandbox-panel__entry[data-v-d80a18b5]:disabled{color:var(--hb-color-text-secondary);cursor:default}.sandbox-panel__entry-name[data-v-d80a18b5]{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sandbox-panel__entry-chevron[data-v-d80a18b5]{color:var(--hb-color-text-tertiary)}.sandbox-panel__empty[data-v-d80a18b5]{display:grid;min-height:120px;place-content:center;justify-items:center;gap:8px;color:var(--hb-color-text-tertiary)}.sandbox-panel__notice[data-v-d80a18b5]{margin:8px;color:var(--hb-color-text-tertiary)}.sandbox-panel__spin[data-v-d80a18b5]{animation:sandbox-spin-d80a18b5 .9s linear infinite}@keyframes sandbox-spin-d80a18b5{to{transform:rotate(360deg)}}.workbench-log-filters{display:grid;gap:9px}.workbench-log-filters .workbench-select{flex:1}.workbench-log-filters fieldset{display:grid;grid-template-columns:1fr 1fr;margin:0;padding:0;border:0;gap:2px 6px}.workbench-log-filters legend{grid-column:1/-1;width:100%;padding:2px 4px 4px;color:var(--hb-color-text-tertiary);font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.workbench-log-filters label{display:flex;min-width:0;min-height:28px;align-items:center;padding:0 4px;border-radius:5px;color:var(--hb-color-text-secondary);gap:6px;cursor:pointer;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.workbench-log-filters label:hover{background:var(--hb-color-bg-subtle)}.workbench-log-filters input{width:14px;height:14px;margin:0;accent-color:var(--hb-color-brand-primary)}.workbench-log-filters__reset{justify-self:end;min-height:28px;padding:0 7px;border:0;border-radius:5px;color:var(--hb-color-brand-primary);background:transparent;cursor:pointer;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:11px;line-height:16px;letter-spacing:0px}.workbench-log-filters__reset:hover:not(:disabled){background:var(--hb-color-bg-subtle)}.workbench-log-filters__reset:disabled{color:var(--hb-color-text-tertiary);cursor:default}.workbench-log-row{border-left:2px solid transparent}.workbench-log-row:hover,.workbench-log-row[open]{background:var(--hb-color-bg-subtle)}.workbench-log-row[data-level=warn]{border-left-color:#d97a06;background:#d97a0614}.workbench-log-row[data-level=error]{border-left-color:var(--hb-color-status-danger);background:#da2a2a14}.workbench-log-row__summary{display:grid;grid-template-columns:minmax(0,1fr) 13px;align-items:start;padding:6px 8px;gap:6px;cursor:pointer;list-style:none}.workbench-log-row__summary::-webkit-details-marker{display:none}.workbench-log-row__indicator{width:6px;height:6px;margin-top:5px;border-radius:50%;background:var(--hb-color-text-tertiary)}.workbench-log-row[data-level=info] .workbench-log-row__indicator{background:#2679d9}.workbench-log-row[data-level=warn] .workbench-log-row__indicator{background:#d97a06}.workbench-log-row[data-level=error] .workbench-log-row__indicator{background:var(--hb-color-status-danger)}.workbench-log-row__content{display:grid;min-width:0;gap:3px}.workbench-log-row__primary,.workbench-log-row__secondary{display:flex;min-width:0;align-items:center;gap:6px}.workbench-log-row__source{flex:0 0 auto;color:var(--hb-color-text-tertiary);font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.workbench-log-row__method{flex:1 1 auto;min-width:0;overflow:hidden;color:var(--hb-color-text-tertiary);text-overflow:ellipsis;white-space:nowrap;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.workbench-log-row__message{flex:1 1 auto;min-width:0;color:var(--hb-color-text-primary);white-space:pre-wrap;overflow-wrap:anywhere;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.workbench-log-row__outcome,.workbench-log-row__duration,.workbench-log-row__repeat{flex:0 0 auto;color:var(--hb-color-text-tertiary);font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.workbench-log-row__outcome[data-outcome=success]{color:#16865b}.workbench-log-row__outcome[data-outcome=error],.workbench-log-row__outcome[data-outcome=denied]{color:var(--hb-color-status-danger)}.workbench-log-row__time{margin-top:1px;color:var(--hb-color-text-tertiary);white-space:nowrap;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:10px;line-height:13px;letter-spacing:0px}.workbench-log-row__chevron{margin-top:2px;color:var(--hb-color-text-tertiary);transition:transform .15s ease}.workbench-log-row[open] .workbench-log-row__chevron{transform:rotate(90deg)}.workbench-log-row__details{position:relative;padding:0 8px 8px}.workbench-log-row__metadata{display:flex;min-height:24px;align-items:center;padding-right:36px;color:var(--hb-color-text-tertiary);gap:10px;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.workbench-log-row__details pre{max-height:220px;margin:0;overflow:auto;padding:8px 10px;border:1px solid var(--hb-color-border-muted);border-radius:6px;color:var(--hb-color-text-secondary);background:var(--hb-color-bg-surface);white-space:pre-wrap;overflow-wrap:anywhere;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.workbench-log-row__details .workbench-icon-button{position:absolute;top:0;right:5px}.workbench-log-row__source,.workbench-log-row__method,.workbench-log-row__message,.workbench-log-row__outcome,.workbench-log-row__duration,.workbench-log-row__repeat,.workbench-log-row__time,.workbench-log-row__metadata,.workbench-log-row__details pre{font-family:var(--hb-sdk-workbench-font-mono);font-variant-numeric:tabular-nums}:root{--hb-sdk-workbench-control-size: 32px;--hb-sdk-workbench-control-radius: 8px;--hb-sdk-workbench-font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", monospace;--hb-sdk-workbench-menu-radius: 10px}.workbench-icon-button{position:relative;display:grid;width:var(--hb-sdk-workbench-control-size);height:var(--hb-sdk-workbench-control-size);padding:0;place-items:center;border:1px solid var(--hb-color-border-muted);border-radius:var(--hb-sdk-workbench-control-radius);color:var(--hb-color-text-primary);background:var(--hb-color-bg-page);box-shadow:none;cursor:pointer;outline:none;transition:border-color .15s ease,background .15s ease,box-shadow .15s ease}.workbench-icon-button:hover,.workbench-icon-button[data-state=open]{background:var(--hb-color-bg-subtle)}.workbench-icon-button:focus-visible{border-color:var(--hb-color-brand-primary);box-shadow:0 0 0 2px #006ef429}.workbench-icon-button:disabled,.workbench-icon-button[aria-disabled=true]{color:var(--hb-color-text-tertiary);cursor:not-allowed}.workbench-icon-button[data-variant=ghost]{border-color:transparent;background:transparent}.workbench-icon-button[data-variant=glass]{flex:none;border-color:#ffffffbf;border-radius:50%;background:#ffffff9e;box-shadow:0 7px 22px #1f232924,inset 0 0 0 .5px #fffc;-webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4)}.workbench-tooltip{z-index:50;padding:5px 7px;border-radius:5px;color:#fff;background:#191b1feb;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.workbench-popover{z-index:30;display:grid;width:270px;padding:14px;border:1px solid rgba(31,35,41,.09);border-radius:var(--hb-sdk-workbench-menu-radius);gap:10px;background:#fffffff5;box-shadow:0 18px 48px #1f23292e;outline:none;-webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px)}.workbench-popover--compact{width:220px;padding:10px;gap:4px}.workbench-popover__heading{padding:0 2px;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:13px;line-height:17px;letter-spacing:0px}.workbench-menu-item{display:flex;min-width:0;min-height:34px;align-items:center;justify-content:space-between;padding:0 8px;border:0;border-radius:6px;color:var(--hb-color-text-primary);background:transparent;cursor:pointer;outline:none;text-decoration:none;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:12px;line-height:16px;letter-spacing:0px}.workbench-menu-item:hover,.workbench-menu-item:focus-visible,.workbench-menu-item[data-selected=true]{background:var(--hb-color-bg-subtle)}.workbench-menu-item:focus-visible{box-shadow:inset 0 0 0 1px var(--hb-color-brand-primary)}.workbench-menu-item[aria-disabled=true]{color:var(--hb-color-text-tertiary);cursor:not-allowed}.workbench-menu-item__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workbench-select{display:flex;width:100%;min-width:0;height:var(--hb-sdk-workbench-control-size);align-items:center;gap:8px;padding:0 8px;border:1px solid var(--hb-color-border-muted);border-radius:var(--hb-sdk-workbench-control-radius);color:var(--hb-color-text-primary);background:var(--hb-color-bg-page);text-align:left;cursor:pointer;outline:none;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.workbench-select:hover,.workbench-select[data-state=open]{background:var(--hb-color-bg-subtle)}.workbench-select:focus-visible{border-color:var(--hb-color-brand-primary);box-shadow:0 0 0 2px #006ef429}.workbench-select .workbench-select__prefix{display:flex;flex:none;align-items:center;color:var(--hb-color-text-secondary)}.workbench-select .workbench-select__value{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workbench-select[data-placeholder]{color:var(--hb-color-text-secondary)}.workbench-select--glass{border:1px solid rgba(255,255,255,.76);border-radius:14px;background:#ffffffad;box-shadow:0 7px 24px #1f23291f,inset 0 0 0 .5px #ffffffdb;-webkit-backdrop-filter:blur(18px) saturate(1.35);backdrop-filter:blur(18px) saturate(1.35)}.workbench-select-menu{z-index:50;min-width:var(--reka-select-trigger-width);max-width:min(420px,100vw - 24px);max-height:var(--reka-select-content-available-height);overflow:auto;padding:4px;border:1px solid var(--hb-color-border-muted);border-radius:var(--hb-sdk-workbench-menu-radius);color:var(--hb-color-text-primary);background:var(--hb-color-bg-surface);box-shadow:0 14px 36px #1f232929;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.workbench-select-menu .workbench-select-menu__empty{padding:9px;color:var(--hb-color-text-tertiary)}.workbench-select-item{display:grid;min-height:34px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;padding:0 9px;border-radius:6px;outline:none;cursor:pointer}.workbench-select-item>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workbench-select-item[data-highlighted]{background:var(--hb-color-bg-subtle)}.workbench-icon-button--status{display:flex;width:auto;min-width:0;height:24px;gap:5px;padding:0 6px;border-color:transparent;border-radius:5px;color:var(--hb-color-text-secondary);background:transparent;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.workbench-icon-button--status>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:root{--hb-radius-xs: 2px;--hb-radius-s: 3px;--hb-radius-m: 5px;--hb-radius-l: 8px;--hb-radius-xl: 12px;--hb-space-4: 4px;--hb-space-8: 8px;--hb-space-10: 10px;--hb-space-page-gutter: 12px;--hb-color-icon-primary: #14191e;--hb-color-icon-secondary: #64696e;--hb-color-icon-tertiary: #8c9196;--hb-color-icon-disabled: #c8cdd2;--hb-color-icon-inverse: #ffffff;--hb-color-text-primary: #14191e;--hb-color-text-secondary: #64696e;--hb-color-text-tertiary: #8c9196;--hb-color-text-placeholder: #c8cdd2;--hb-color-text-inverse: #ffffff;--hb-color-border-default: #f3f4f5;--hb-color-border-muted: #f1f2f3;--hb-color-border-strong: #dadde0;--hb-color-border-section: #fafbfc;--hb-color-border-inverse: #ffffff;--hb-color-bg-page: #ffffff;--hb-color-bg-surface: #fafbfc;--hb-color-bg-subtle: #f7f8f9;--hb-color-bg-muted: #f3f4f5;--hb-color-bg-raised: #f1f2f3;--hb-color-bg-chat: #f1f2f3;--hb-color-bg-control-secondary: #e7e8e9;--hb-color-bg-chat-bubble: #c4e4fc;--hb-color-bg-toast: rgba(57, 61, 64, .8980392157);--hb-color-bg-popmask: rgba(0, 0, 0, .5019607843);--hb-color-action-link: #004b96;--hb-color-action-link-subtle: rgba(0, 75, 150, .1019607843);--hb-color-brand-primary: #006ef4;--hb-color-status-danger: #fa3c4b;--hb-color-status-success: #32b846;--hb-color-game-price-coupon: #f67010;--hb-color-game-price-low: #32b846;--hb-color-game-price-new-low: #009015;--hb-color-platform-playstation: #0071ce;--hb-color-platform-steam: #021930;--hb-color-platform-switch: #e70012;--hb-color-platform-windows: #81bc0d;--hb-color-platform-xbox: #0f7c10;--hb-color-game-record-white-01: rgba(255, 255, 255, .01);--hb-color-game-record-black-01: rgba(0, 0, 0, .01);--hb-color-game-record-white-02: rgba(255, 255, 255, .02);--hb-color-game-record-black-02: rgba(0, 0, 0, .02);--hb-color-game-record-white-03: rgba(255, 255, 255, .03);--hb-color-game-record-black-03: rgba(0, 0, 0, .03);--hb-color-game-record-white-05: rgba(255, 255, 255, .05);--hb-color-game-record-black-05: rgba(0, 0, 0, .05);--hb-color-game-record-white-08: rgba(255, 255, 255, .08);--hb-color-game-record-black-08: rgba(0, 0, 0, .08);--hb-color-game-record-white-10: rgba(255, 255, 255, .1);--hb-color-game-record-black-10: rgba(0, 0, 0, .1);--hb-color-game-record-white-15: rgba(255, 255, 255, .15);--hb-color-game-record-black-15: rgba(0, 0, 0, .15);--hb-color-game-record-white-20: rgba(255, 255, 255, .2);--hb-color-game-record-black-20: rgba(0, 0, 0, .2);--hb-color-game-record-white-30: rgba(255, 255, 255, .3);--hb-color-game-record-black-30: rgba(0, 0, 0, .3);--hb-color-game-record-white-40: rgba(255, 255, 255, .4);--hb-color-game-record-black-40: rgba(0, 0, 0, .4);--hb-color-game-record-white-50: rgba(255, 255, 255, .5);--hb-color-game-record-black-50: rgba(0, 0, 0, .5);--hb-color-game-record-white-60: rgba(255, 255, 255, .6);--hb-color-game-record-black-60: rgba(0, 0, 0, .6);--hb-color-game-record-white-70: rgba(255, 255, 255, .7);--hb-color-game-record-black-70: rgba(0, 0, 0, .7);--hb-color-game-record-white-80: rgba(255, 255, 255, .8);--hb-color-game-record-black-80: rgba(0, 0, 0, .8);--hb-color-game-record-white-85: rgba(255, 255, 255, .85);--hb-color-game-record-black-85: rgba(0, 0, 0, .85);--hb-color-game-record-white-90: rgba(255, 255, 255, .9);--hb-color-game-record-black-90: rgba(0, 0, 0, .9);--hb-color-game-record-white-100: #ffffff;--hb-color-game-record-black-100: #000000;color-scheme:light}:root[data-hb-theme=light]{--hb-color-icon-primary: #14191e;--hb-color-icon-secondary: #64696e;--hb-color-icon-tertiary: #8c9196;--hb-color-icon-disabled: #c8cdd2;--hb-color-icon-inverse: #ffffff;--hb-color-text-primary: #14191e;--hb-color-text-secondary: #64696e;--hb-color-text-tertiary: #8c9196;--hb-color-text-placeholder: #c8cdd2;--hb-color-text-inverse: #ffffff;--hb-color-border-default: #f3f4f5;--hb-color-border-muted: #f1f2f3;--hb-color-border-strong: #dadde0;--hb-color-border-section: #fafbfc;--hb-color-border-inverse: #ffffff;--hb-color-bg-page: #ffffff;--hb-color-bg-surface: #fafbfc;--hb-color-bg-subtle: #f7f8f9;--hb-color-bg-muted: #f3f4f5;--hb-color-bg-raised: #f1f2f3;--hb-color-bg-chat: #f1f2f3;--hb-color-bg-control-secondary: #e7e8e9;--hb-color-bg-chat-bubble: #c4e4fc;--hb-color-bg-toast: rgba(57, 61, 64, .8980392157);--hb-color-bg-popmask: rgba(0, 0, 0, .5019607843);--hb-color-action-link: #004b96;--hb-color-action-link-subtle: rgba(0, 75, 150, .1019607843);--hb-color-brand-primary: #006ef4;--hb-color-status-danger: #fa3c4b;--hb-color-status-success: #32b846;--hb-color-game-price-coupon: #f67010;--hb-color-game-price-low: #32b846;--hb-color-game-price-new-low: #009015;--hb-color-platform-playstation: #0071ce;--hb-color-platform-steam: #021930;--hb-color-platform-switch: #e70012;--hb-color-platform-windows: #81bc0d;--hb-color-platform-xbox: #0f7c10;--hb-color-game-record-white-01: rgba(255, 255, 255, .01);--hb-color-game-record-black-01: rgba(0, 0, 0, .01);--hb-color-game-record-white-02: rgba(255, 255, 255, .02);--hb-color-game-record-black-02: rgba(0, 0, 0, .02);--hb-color-game-record-white-03: rgba(255, 255, 255, .03);--hb-color-game-record-black-03: rgba(0, 0, 0, .03);--hb-color-game-record-white-05: rgba(255, 255, 255, .05);--hb-color-game-record-black-05: rgba(0, 0, 0, .05);--hb-color-game-record-white-08: rgba(255, 255, 255, .08);--hb-color-game-record-black-08: rgba(0, 0, 0, .08);--hb-color-game-record-white-10: rgba(255, 255, 255, .1);--hb-color-game-record-black-10: rgba(0, 0, 0, .1);--hb-color-game-record-white-15: rgba(255, 255, 255, .15);--hb-color-game-record-black-15: rgba(0, 0, 0, .15);--hb-color-game-record-white-20: rgba(255, 255, 255, .2);--hb-color-game-record-black-20: rgba(0, 0, 0, .2);--hb-color-game-record-white-30: rgba(255, 255, 255, .3);--hb-color-game-record-black-30: rgba(0, 0, 0, .3);--hb-color-game-record-white-40: rgba(255, 255, 255, .4);--hb-color-game-record-black-40: rgba(0, 0, 0, .4);--hb-color-game-record-white-50: rgba(255, 255, 255, .5);--hb-color-game-record-black-50: rgba(0, 0, 0, .5);--hb-color-game-record-white-60: rgba(255, 255, 255, .6);--hb-color-game-record-black-60: rgba(0, 0, 0, .6);--hb-color-game-record-white-70: rgba(255, 255, 255, .7);--hb-color-game-record-black-70: rgba(0, 0, 0, .7);--hb-color-game-record-white-80: rgba(255, 255, 255, .8);--hb-color-game-record-black-80: rgba(0, 0, 0, .8);--hb-color-game-record-white-85: rgba(255, 255, 255, .85);--hb-color-game-record-black-85: rgba(0, 0, 0, .85);--hb-color-game-record-white-90: rgba(255, 255, 255, .9);--hb-color-game-record-black-90: rgba(0, 0, 0, .9);--hb-color-game-record-white-100: #ffffff;--hb-color-game-record-black-100: #000000;color-scheme:light}:root[data-hb-theme=dark]{--hb-color-icon-primary: #cccdce;--hb-color-icon-secondary: #9b9fa2;--hb-color-icon-tertiary: #858687;--hb-color-icon-disabled: #4f5459;--hb-color-icon-inverse: #101112;--hb-color-text-primary: #cccdce;--hb-color-text-secondary: #9b9fa2;--hb-color-text-tertiary: #858687;--hb-color-text-placeholder: #4f5459;--hb-color-text-inverse: #101112;--hb-color-border-default: #242628;--hb-color-border-muted: #2e3031;--hb-color-border-strong: #424547;--hb-color-border-section: #0b0c0e;--hb-color-border-inverse: #101112;--hb-color-bg-page: #101112;--hb-color-bg-surface: #151617;--hb-color-bg-subtle: #1e1f21;--hb-color-bg-muted: #242628;--hb-color-bg-raised: #2e3031;--hb-color-bg-chat: #1e1f21;--hb-color-bg-control-secondary: #373839;--hb-color-bg-chat-bubble: #1f2e4d;--hb-color-bg-toast: rgba(187, 191, 194, .8980392157);--hb-color-bg-popmask: rgba(21, 21, 21, .5019607843);--hb-color-action-link: #66b3ff;--hb-color-action-link-subtle: rgba(102, 179, 255, .1019607843);--hb-color-brand-primary: #006ef4;--hb-color-status-danger: #fa3c4b;--hb-color-status-success: #4cd964;--hb-color-game-price-coupon: #f67010;--hb-color-game-price-low: #32b846;--hb-color-game-price-new-low: #009015;--hb-color-platform-playstation: #0071ce;--hb-color-platform-steam: #234c75;--hb-color-platform-switch: #e70012;--hb-color-platform-windows: #81bc0d;--hb-color-platform-xbox: #0f7c10;--hb-color-game-record-white-01: rgba(0, 0, 0, .01);--hb-color-game-record-black-01: rgba(255, 255, 255, .01);--hb-color-game-record-white-02: rgba(0, 0, 0, .02);--hb-color-game-record-black-02: rgba(255, 255, 255, .02);--hb-color-game-record-white-03: rgba(0, 0, 0, .03);--hb-color-game-record-black-03: rgba(255, 255, 255, .03);--hb-color-game-record-white-05: rgba(0, 0, 0, .05);--hb-color-game-record-black-05: rgba(255, 255, 255, .05);--hb-color-game-record-white-08: rgba(0, 0, 0, .08);--hb-color-game-record-black-08: rgba(255, 255, 255, .08);--hb-color-game-record-white-10: rgba(0, 0, 0, .1);--hb-color-game-record-black-10: rgba(255, 255, 255, .1);--hb-color-game-record-white-15: rgba(0, 0, 0, .15);--hb-color-game-record-black-15: rgba(255, 255, 255, .15);--hb-color-game-record-white-20: rgba(0, 0, 0, .2);--hb-color-game-record-black-20: rgba(255, 255, 255, .2);--hb-color-game-record-white-30: rgba(0, 0, 0, .3);--hb-color-game-record-black-30: rgba(255, 255, 255, .3);--hb-color-game-record-white-40: rgba(0, 0, 0, .4);--hb-color-game-record-black-40: rgba(255, 255, 255, .4);--hb-color-game-record-white-50: rgba(0, 0, 0, .5);--hb-color-game-record-black-50: rgba(255, 255, 255, .5);--hb-color-game-record-white-60: rgba(0, 0, 0, .6);--hb-color-game-record-black-60: rgba(255, 255, 255, .6);--hb-color-game-record-white-70: rgba(0, 0, 0, .7);--hb-color-game-record-black-70: rgba(255, 255, 255, .7);--hb-color-game-record-white-80: rgba(0, 0, 0, .8);--hb-color-game-record-black-80: rgba(255, 255, 255, .8);--hb-color-game-record-white-85: rgba(0, 0, 0, .85);--hb-color-game-record-black-85: rgba(255, 255, 255, .85);--hb-color-game-record-white-90: rgba(0, 0, 0, .9);--hb-color-game-record-black-90: rgba(255, 255, 255, .9);--hb-color-game-record-white-100: #000000;--hb-color-game-record-black-100: #ffffff;color-scheme:dark}:root[data-hb-theme=auto]{--hb-color-icon-primary: #14191e;--hb-color-icon-secondary: #64696e;--hb-color-icon-tertiary: #8c9196;--hb-color-icon-disabled: #c8cdd2;--hb-color-icon-inverse: #ffffff;--hb-color-text-primary: #14191e;--hb-color-text-secondary: #64696e;--hb-color-text-tertiary: #8c9196;--hb-color-text-placeholder: #c8cdd2;--hb-color-text-inverse: #ffffff;--hb-color-border-default: #f3f4f5;--hb-color-border-muted: #f1f2f3;--hb-color-border-strong: #dadde0;--hb-color-border-section: #fafbfc;--hb-color-border-inverse: #ffffff;--hb-color-bg-page: #ffffff;--hb-color-bg-surface: #fafbfc;--hb-color-bg-subtle: #f7f8f9;--hb-color-bg-muted: #f3f4f5;--hb-color-bg-raised: #f1f2f3;--hb-color-bg-chat: #f1f2f3;--hb-color-bg-control-secondary: #e7e8e9;--hb-color-bg-chat-bubble: #c4e4fc;--hb-color-bg-toast: rgba(57, 61, 64, .8980392157);--hb-color-bg-popmask: rgba(0, 0, 0, .5019607843);--hb-color-action-link: #004b96;--hb-color-action-link-subtle: rgba(0, 75, 150, .1019607843);--hb-color-brand-primary: #006ef4;--hb-color-status-danger: #fa3c4b;--hb-color-status-success: #32b846;--hb-color-game-price-coupon: #f67010;--hb-color-game-price-low: #32b846;--hb-color-game-price-new-low: #009015;--hb-color-platform-playstation: #0071ce;--hb-color-platform-steam: #021930;--hb-color-platform-switch: #e70012;--hb-color-platform-windows: #81bc0d;--hb-color-platform-xbox: #0f7c10;--hb-color-game-record-white-01: rgba(255, 255, 255, .01);--hb-color-game-record-black-01: rgba(0, 0, 0, .01);--hb-color-game-record-white-02: rgba(255, 255, 255, .02);--hb-color-game-record-black-02: rgba(0, 0, 0, .02);--hb-color-game-record-white-03: rgba(255, 255, 255, .03);--hb-color-game-record-black-03: rgba(0, 0, 0, .03);--hb-color-game-record-white-05: rgba(255, 255, 255, .05);--hb-color-game-record-black-05: rgba(0, 0, 0, .05);--hb-color-game-record-white-08: rgba(255, 255, 255, .08);--hb-color-game-record-black-08: rgba(0, 0, 0, .08);--hb-color-game-record-white-10: rgba(255, 255, 255, .1);--hb-color-game-record-black-10: rgba(0, 0, 0, .1);--hb-color-game-record-white-15: rgba(255, 255, 255, .15);--hb-color-game-record-black-15: rgba(0, 0, 0, .15);--hb-color-game-record-white-20: rgba(255, 255, 255, .2);--hb-color-game-record-black-20: rgba(0, 0, 0, .2);--hb-color-game-record-white-30: rgba(255, 255, 255, .3);--hb-color-game-record-black-30: rgba(0, 0, 0, .3);--hb-color-game-record-white-40: rgba(255, 255, 255, .4);--hb-color-game-record-black-40: rgba(0, 0, 0, .4);--hb-color-game-record-white-50: rgba(255, 255, 255, .5);--hb-color-game-record-black-50: rgba(0, 0, 0, .5);--hb-color-game-record-white-60: rgba(255, 255, 255, .6);--hb-color-game-record-black-60: rgba(0, 0, 0, .6);--hb-color-game-record-white-70: rgba(255, 255, 255, .7);--hb-color-game-record-black-70: rgba(0, 0, 0, .7);--hb-color-game-record-white-80: rgba(255, 255, 255, .8);--hb-color-game-record-black-80: rgba(0, 0, 0, .8);--hb-color-game-record-white-85: rgba(255, 255, 255, .85);--hb-color-game-record-black-85: rgba(0, 0, 0, .85);--hb-color-game-record-white-90: rgba(255, 255, 255, .9);--hb-color-game-record-black-90: rgba(0, 0, 0, .9);--hb-color-game-record-white-100: #ffffff;--hb-color-game-record-black-100: #000000;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-hb-theme]){--hb-color-icon-primary: #cccdce;--hb-color-icon-secondary: #9b9fa2;--hb-color-icon-tertiary: #858687;--hb-color-icon-disabled: #4f5459;--hb-color-icon-inverse: #101112;--hb-color-text-primary: #cccdce;--hb-color-text-secondary: #9b9fa2;--hb-color-text-tertiary: #858687;--hb-color-text-placeholder: #4f5459;--hb-color-text-inverse: #101112;--hb-color-border-default: #242628;--hb-color-border-muted: #2e3031;--hb-color-border-strong: #424547;--hb-color-border-section: #0b0c0e;--hb-color-border-inverse: #101112;--hb-color-bg-page: #101112;--hb-color-bg-surface: #151617;--hb-color-bg-subtle: #1e1f21;--hb-color-bg-muted: #242628;--hb-color-bg-raised: #2e3031;--hb-color-bg-chat: #1e1f21;--hb-color-bg-control-secondary: #373839;--hb-color-bg-chat-bubble: #1f2e4d;--hb-color-bg-toast: rgba(187, 191, 194, .8980392157);--hb-color-bg-popmask: rgba(21, 21, 21, .5019607843);--hb-color-action-link: #66b3ff;--hb-color-action-link-subtle: rgba(102, 179, 255, .1019607843);--hb-color-brand-primary: #006ef4;--hb-color-status-danger: #fa3c4b;--hb-color-status-success: #4cd964;--hb-color-game-price-coupon: #f67010;--hb-color-game-price-low: #32b846;--hb-color-game-price-new-low: #009015;--hb-color-platform-playstation: #0071ce;--hb-color-platform-steam: #234c75;--hb-color-platform-switch: #e70012;--hb-color-platform-windows: #81bc0d;--hb-color-platform-xbox: #0f7c10;--hb-color-game-record-white-01: rgba(0, 0, 0, .01);--hb-color-game-record-black-01: rgba(255, 255, 255, .01);--hb-color-game-record-white-02: rgba(0, 0, 0, .02);--hb-color-game-record-black-02: rgba(255, 255, 255, .02);--hb-color-game-record-white-03: rgba(0, 0, 0, .03);--hb-color-game-record-black-03: rgba(255, 255, 255, .03);--hb-color-game-record-white-05: rgba(0, 0, 0, .05);--hb-color-game-record-black-05: rgba(255, 255, 255, .05);--hb-color-game-record-white-08: rgba(0, 0, 0, .08);--hb-color-game-record-black-08: rgba(255, 255, 255, .08);--hb-color-game-record-white-10: rgba(0, 0, 0, .1);--hb-color-game-record-black-10: rgba(255, 255, 255, .1);--hb-color-game-record-white-15: rgba(0, 0, 0, .15);--hb-color-game-record-black-15: rgba(255, 255, 255, .15);--hb-color-game-record-white-20: rgba(0, 0, 0, .2);--hb-color-game-record-black-20: rgba(255, 255, 255, .2);--hb-color-game-record-white-30: rgba(0, 0, 0, .3);--hb-color-game-record-black-30: rgba(255, 255, 255, .3);--hb-color-game-record-white-40: rgba(0, 0, 0, .4);--hb-color-game-record-black-40: rgba(255, 255, 255, .4);--hb-color-game-record-white-50: rgba(0, 0, 0, .5);--hb-color-game-record-black-50: rgba(255, 255, 255, .5);--hb-color-game-record-white-60: rgba(0, 0, 0, .6);--hb-color-game-record-black-60: rgba(255, 255, 255, .6);--hb-color-game-record-white-70: rgba(0, 0, 0, .7);--hb-color-game-record-black-70: rgba(255, 255, 255, .7);--hb-color-game-record-white-80: rgba(0, 0, 0, .8);--hb-color-game-record-black-80: rgba(255, 255, 255, .8);--hb-color-game-record-white-85: rgba(0, 0, 0, .85);--hb-color-game-record-black-85: rgba(255, 255, 255, .85);--hb-color-game-record-white-90: rgba(0, 0, 0, .9);--hb-color-game-record-black-90: rgba(255, 255, 255, .9);--hb-color-game-record-white-100: #000000;--hb-color-game-record-black-100: #ffffff;color-scheme:dark}:root[data-hb-theme=auto]{--hb-color-icon-primary: #cccdce;--hb-color-icon-secondary: #9b9fa2;--hb-color-icon-tertiary: #858687;--hb-color-icon-disabled: #4f5459;--hb-color-icon-inverse: #101112;--hb-color-text-primary: #cccdce;--hb-color-text-secondary: #9b9fa2;--hb-color-text-tertiary: #858687;--hb-color-text-placeholder: #4f5459;--hb-color-text-inverse: #101112;--hb-color-border-default: #242628;--hb-color-border-muted: #2e3031;--hb-color-border-strong: #424547;--hb-color-border-section: #0b0c0e;--hb-color-border-inverse: #101112;--hb-color-bg-page: #101112;--hb-color-bg-surface: #151617;--hb-color-bg-subtle: #1e1f21;--hb-color-bg-muted: #242628;--hb-color-bg-raised: #2e3031;--hb-color-bg-chat: #1e1f21;--hb-color-bg-control-secondary: #373839;--hb-color-bg-chat-bubble: #1f2e4d;--hb-color-bg-toast: rgba(187, 191, 194, .8980392157);--hb-color-bg-popmask: rgba(21, 21, 21, .5019607843);--hb-color-action-link: #66b3ff;--hb-color-action-link-subtle: rgba(102, 179, 255, .1019607843);--hb-color-brand-primary: #006ef4;--hb-color-status-danger: #fa3c4b;--hb-color-status-success: #4cd964;--hb-color-game-price-coupon: #f67010;--hb-color-game-price-low: #32b846;--hb-color-game-price-new-low: #009015;--hb-color-platform-playstation: #0071ce;--hb-color-platform-steam: #234c75;--hb-color-platform-switch: #e70012;--hb-color-platform-windows: #81bc0d;--hb-color-platform-xbox: #0f7c10;--hb-color-game-record-white-01: rgba(0, 0, 0, .01);--hb-color-game-record-black-01: rgba(255, 255, 255, .01);--hb-color-game-record-white-02: rgba(0, 0, 0, .02);--hb-color-game-record-black-02: rgba(255, 255, 255, .02);--hb-color-game-record-white-03: rgba(0, 0, 0, .03);--hb-color-game-record-black-03: rgba(255, 255, 255, .03);--hb-color-game-record-white-05: rgba(0, 0, 0, .05);--hb-color-game-record-black-05: rgba(255, 255, 255, .05);--hb-color-game-record-white-08: rgba(0, 0, 0, .08);--hb-color-game-record-black-08: rgba(255, 255, 255, .08);--hb-color-game-record-white-10: rgba(0, 0, 0, .1);--hb-color-game-record-black-10: rgba(255, 255, 255, .1);--hb-color-game-record-white-15: rgba(0, 0, 0, .15);--hb-color-game-record-black-15: rgba(255, 255, 255, .15);--hb-color-game-record-white-20: rgba(0, 0, 0, .2);--hb-color-game-record-black-20: rgba(255, 255, 255, .2);--hb-color-game-record-white-30: rgba(0, 0, 0, .3);--hb-color-game-record-black-30: rgba(255, 255, 255, .3);--hb-color-game-record-white-40: rgba(0, 0, 0, .4);--hb-color-game-record-black-40: rgba(255, 255, 255, .4);--hb-color-game-record-white-50: rgba(0, 0, 0, .5);--hb-color-game-record-black-50: rgba(255, 255, 255, .5);--hb-color-game-record-white-60: rgba(0, 0, 0, .6);--hb-color-game-record-black-60: rgba(255, 255, 255, .6);--hb-color-game-record-white-70: rgba(0, 0, 0, .7);--hb-color-game-record-black-70: rgba(255, 255, 255, .7);--hb-color-game-record-white-80: rgba(0, 0, 0, .8);--hb-color-game-record-black-80: rgba(255, 255, 255, .8);--hb-color-game-record-white-85: rgba(0, 0, 0, .85);--hb-color-game-record-black-85: rgba(255, 255, 255, .85);--hb-color-game-record-white-90: rgba(0, 0, 0, .9);--hb-color-game-record-black-90: rgba(255, 255, 255, .9);--hb-color-game-record-white-100: #000000;--hb-color-game-record-black-100: #ffffff;color-scheme:dark}}*,*:before,*:after{box-sizing:border-box}html{min-height:100%;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;color:var(--hb-color-text-primary, #14191e);background:var(--hb-page-background, var(--hb-color-bg-page, #ffffff));text-size-adjust:100%;-webkit-text-size-adjust:100%}body{min-height:100%;margin:0;color:inherit;background-color:inherit}button,input,select,textarea{font:inherit;color:inherit}img,picture,video,canvas{display:block;max-width:100%}[hidden]{display:none!important}*{box-sizing:border-box}html,body,#app{width:100%;height:100%;margin:0}body{overflow:hidden;background:var(--hb-color-bg-page);color:var(--hb-color-text-primary)}button,input,select{font:inherit;letter-spacing:0}button{color:inherit}.workbench{display:grid;grid-template-rows:52px minmax(0,1fr) 28px;height:100%;background:#f3f4f6}.workbench__header{z-index:20;display:flex;align-items:center;justify-content:space-between;padding:0 20px;border:1px solid var(--hb-color-border-muted);background:var(--hb-color-bg-surface)}.workbench__header:before{position:absolute;top:0;right:0;left:0;height:2px;background:#006ef4;content:""}.brand{display:flex;align-items:center;min-width:0;gap:16px}.brand__logo{display:block;width:54px;height:16px;flex:0 0 54px}.brand__title{color:var(--hb-color-text-primary);white-space:nowrap;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:14px;line-height:normal;letter-spacing:0px}.workbench__header-actions{display:flex;align-items:center;gap:8px}.media-simulation{display:flex;align-items:center;gap:6px;font-size:12px;color:#8b93a1}.media-simulation select{height:26px;padding:0 6px;border:1px solid #d8dce3;border-radius:6px;background:#fff;color:#1f2430;font-size:12px}.desktop-launch{position:relative}.workbench__identity{position:relative;display:flex;align-items:center;gap:10px}.toolbar-asset{display:block;flex:0 0 auto;object-fit:contain;pointer-events:none}.toolbar-asset--12{width:12px;height:12px}.toolbar-asset--16{width:16px;height:16px}.toolbar-asset--18{width:18px;height:18px}.workbench__main{min-width:0;min-height:0}.splitpanes{height:100%}.splitpanes__pane{min-width:0;min-height:0;overflow:hidden}.splitpanes__splitter{position:relative;width:5px;flex:0 0 5px;margin:0 -2px;z-index:8;background:transparent;cursor:col-resize}.splitpanes__splitter:after{position:absolute;top:0;bottom:0;left:2px;width:1px;background:var(--hb-color-border-muted);content:"";transition:background .15s}.splitpanes__splitter:hover:after,.splitpanes__splitter:focus:after{background:var(--hb-color-brand-primary)}.diagnostics{display:grid;height:100%;grid-template-rows:60px 44px 48px minmax(0,1fr);min-width:0;min-height:0;background:#fff}.mini-program-summary{display:flex;height:60px;align-items:center;gap:10px;min-width:0;padding:0 16px}.mini-program-summary__icon{display:grid;width:36px;height:36px;flex:0 0 auto;overflow:hidden;place-items:center;border:0;border-radius:10px;background:#e5f2ff;color:#006ef4}.mini-program-summary__icon img{width:100%;height:100%;object-fit:cover}.mini-program-summary__fallback{font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:14px;line-height:normal;letter-spacing:0px}.mini-program-summary__copy{display:grid;min-width:0;gap:4px}.mini-program-summary__copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:14px;line-height:normal;letter-spacing:0px}.mini-program-summary__copy span{overflow:hidden;color:var(--hb-color-text-secondary);text-overflow:ellipsis;white-space:nowrap;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.diagnostics__tabs{display:flex;height:44px;align-items:center;padding:6px 12px;gap:4px}.diagnostics__tabs button{position:relative;display:flex;height:28px;align-items:center;justify-content:center;padding:4px 12px;border:0;border-radius:8px;color:#1f2126c7;background:var(--hb-color-bg-muted);cursor:pointer;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:11px;line-height:16px;letter-spacing:0px}.diagnostics__tabs button.active{color:#fff;background:linear-gradient(23deg,#464b50 .9%,#14191e 100.9%)}.diagnostics__tabs button.diagnostics__tab--logs{width:46px}.diagnostics__tabs button.diagnostics__tab--storage{width:56px}.diagnostics__tabs button.diagnostics__tab--problems{width:46px}.diagnostics__count{position:absolute;top:-6px;right:-8px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;color:#fff;background:var(--hb-color-status-danger);text-align:center;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:10px;line-height:13px;letter-spacing:0px}.diagnostics__toolbar{display:flex;height:48px;align-items:center;justify-content:space-between;padding:0 12px;border-bottom:1px solid var(--hb-color-border-muted);gap:8px}.search-field{display:flex;width:auto;height:32px;flex:1 1 auto;align-items:center;gap:4px;padding:4px 8px;border:1px solid var(--hb-color-border-muted);border-radius:8px;color:var(--hb-color-text-placeholder);background:var(--hb-color-bg-page)}.search-field:focus-within{border-color:var(--hb-color-border-strong);background:var(--hb-color-bg-surface)}.search-field input{width:100%;min-width:0;border:0;outline:0;color:var(--hb-color-text-primary);background:transparent;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.diagnostics__toolbar-actions{display:flex;flex:0 0 auto;margin-left:auto;align-items:center;gap:8px}.diagnostics__content{width:100%;min-height:0;overflow:hidden}.log-list,.storage-list,.problem-list{height:100%;padding:8px;overflow:auto;overscroll-behavior:contain}.storage-row{width:100%;min-width:0;max-width:100%;margin-bottom:2px;border:1px solid var(--hb-color-border-muted);border-radius:8px;background:var(--hb-color-bg-page)}.storage-row summary{display:flex;height:38px;min-height:38px;align-items:center;justify-content:space-between;padding:4px 8px 4px 12px;list-style:none;cursor:pointer}.storage-row summary::-webkit-details-marker{display:none}.storage-row summary>span{display:grid;min-width:0;flex:1;grid-template-columns:minmax(96px,35%) minmax(0,1fr);align-items:center;gap:8px}.storage-row strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:11px;line-height:16px;letter-spacing:0px}.storage-row small{overflow:hidden;color:var(--hb-color-text-secondary);text-align:right;text-overflow:ellipsis;white-space:nowrap;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.storage-row code{display:block;max-height:160px;overflow:auto;padding:8px 12px;border-top:1px solid var(--hb-color-border-muted);color:var(--hb-color-text-secondary);background:var(--hb-color-bg-subtle);white-space:pre-wrap;overflow-wrap:anywhere;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.problem-row{display:grid;width:100%;min-width:0;max-width:100%;grid-template-columns:3px minmax(0,1fr) 32px;min-height:40px;align-items:center;margin-bottom:2px;padding:0 8px 0 12px;border:1px solid var(--hb-color-border-muted);border-radius:8px;color:var(--hb-color-text-primary);gap:10px}.problem-row__indicator{width:3px;height:24px;border-radius:2px;background:var(--hb-color-status-danger)}.problem-row__content{display:grid;min-width:0;grid-template-columns:minmax(96px,35%) minmax(0,1fr);align-items:center;gap:8px}.problem-row__content strong,.problem-row__content small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.problem-row__content strong{font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:11px;line-height:16px;letter-spacing:0px}.problem-row__content small{color:var(--hb-color-text-secondary);text-align:right;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.empty-state{display:grid;height:180px;margin:0;place-items:center;color:var(--hb-color-text-tertiary);font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:12px;line-height:16px;letter-spacing:0px}.empty-state--error{color:var(--hb-color-status-danger)}.csp-violations{padding:10px 12px;color:var(--hb-color-status-danger);background:#eb4b4b0f;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:11px;line-height:16px;letter-spacing:0px}.csp-violations[hidden]{display:none}.device-stage{position:relative;display:grid;width:100%;height:100%;min-width:0;min-height:0;place-items:center;overflow:hidden;padding:0;background:var(--hb-color-bg-muted)}.desktop-preview{position:relative;display:flex;width:100%;height:100%;min-width:0;min-height:0;align-items:center;justify-content:center;overflow:hidden}.desktop-preview .desktop-window__content{position:relative}.desktop-preview__device{min-height:0}.desktop-preview__placeholder{display:flex;flex-direction:column;align-items:center;color:var(--hb-color-text-secondary);gap:12px;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:13px;line-height:17px;letter-spacing:0px}.desktop-preview__action{height:32px;padding:0 16px;border:1px solid var(--hb-color-border-muted);border-radius:var(--hb-radius-m);background:var(--hb-color-bg-surface);color:var(--hb-color-text-primary);cursor:pointer}.desktop-preview__action:hover{background:var(--hb-color-bg-subtle)}.device-stage__toolbar{position:absolute;top:28px;left:var(--device-toolbar-left);z-index:10;display:flex;align-items:center;gap:12px;transform:none}.device-stage--compact .device-stage__toolbar{top:12px;left:50%;transform:translate(-50%)}.device-select{width:220px}.device-presentation{position:relative;flex:none}.device-shell{position:absolute;top:0;left:0;transform-origin:center}.device-presentation--rotating,.device-presentation--rotating .device-shell{transition-duration:var(--device-rotation-duration, .4s);transition-timing-function:cubic-bezier(.4,0,.2,1)}.device-presentation--rotating{transition-property:width,height}.device-presentation--rotating .device-shell{transition-property:transform}@media(prefers-reduced-motion:reduce){.device-presentation--rotating,.device-presentation--rotating .device-shell{transition:none}}.device-screen{position:absolute;z-index:1;overflow:hidden;background:#fff}.device-viewport{position:absolute;top:0;left:0;display:grid;grid-template-rows:minmax(0,1fr);width:100%;height:100%;transform:rotate(0);transform-origin:center}.host-fullscreen-exit-mount{display:contents}.device-frame{position:absolute;inset:0;z-index:3;display:block;width:var(--device-frame-asset-width);height:var(--device-frame-asset-height);transform:scale(var(--device-frame-scale-x),var(--device-frame-scale-y));transform-origin:top left;pointer-events:none}.mini-program-capsule{position:absolute;top:var(--mini-program-actions-top);right:var(--mini-program-actions-right);z-index:4;display:block;width:87px;height:32px;pointer-events:none}.mini-program-capsule--light{filter:invert(1)}.device-system-navigation{position:absolute;left:50%;z-index:9;display:block;border-radius:999px;transform:translate(-50%);pointer-events:none}.device-system-navigation--ios{bottom:8px;width:157px;height:5px;background:#0d0d0e}.device-system-navigation--android{bottom:10px;width:108px;height:4px;background:#222227}.device-content{position:relative;width:100%;min-width:0;min-height:0;overflow:hidden}.device-content iframe{display:block;width:100%;min-width:0;max-width:none;height:100%;border:0;background:#fff}.browser-mock-preview{display:flex;height:100%;flex-direction:column;align-items:center;justify-content:center;padding-bottom:120px;color:var(--hb-color-text-primary);gap:7px}.browser-mock-preview__icon{display:grid;width:38px;height:38px;place-items:center;border-radius:7px;color:#fff;background:#006ef4;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:14px;line-height:normal;letter-spacing:0px}.browser-mock-preview strong{font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:13px;line-height:17px;letter-spacing:0px}.browser-mock-preview small{color:var(--hb-color-text-secondary);font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:10px;line-height:13px;letter-spacing:0px}.placeholder,.error{display:grid;height:100%;place-items:center;padding:24px;color:var(--hb-color-text-tertiary);text-align:center;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:13px;line-height:17px;letter-spacing:0px}.error{color:var(--hb-color-status-danger)}.host-overlay-layer{position:absolute;inset:0;z-index:8;overflow:hidden;pointer-events:none}.host-overlay-layer>*{pointer-events:auto}.host-overlay-layer .hb-v2-toast__wrapper{position:absolute}.host-overlay-layer>.hb-v2-toast__wrapper{pointer-events:none}.host-feedback-loading-mask{position:absolute;inset:0;z-index:50;background:transparent;pointer-events:auto;touch-action:none}.hb-sdk-auth-dialog{position:absolute;inset:0;display:grid;place-items:center;padding:20px;background:#14161a6b}.hb-sdk-auth-dialog__panel{width:min(320px,100%);padding:18px;border:1px solid rgba(255,255,255,.72);border-radius:12px;background:#fffffff5;box-shadow:0 18px 42px #0003}.hb-sdk-auth-dialog__panel h2{margin:0 0 7px;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:16px;line-height:normal;letter-spacing:0px}.hb-sdk-auth-dialog__app,.hb-sdk-auth-dialog__profile{margin:0 0 10px;color:var(--hb-color-text-secondary);font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:12px;line-height:16px;letter-spacing:0px}.hb-sdk-auth-dialog__scopes{margin:0 0 14px;padding-left:18px;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:12px;line-height:16px;letter-spacing:0px}.hb-sdk-auth-dialog__actions{display:flex;justify-content:flex-end;gap:8px}.hb-sdk-auth-dialog__actions button{height:32px;padding:0 12px;border:1px solid var(--hb-color-border-muted);border-radius:7px;background:#fff;cursor:pointer;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:12px;line-height:16px;letter-spacing:0px}.hb-sdk-auth-dialog__actions .primary{border-color:#f1c232;color:#1f1f1f;background:#f7cb45}.qr-popover__image{width:180px;height:180px;justify-self:center;border-radius:6px;background:var(--hb-color-bg-subtle)}.qr-popover__field{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;color:var(--hb-color-text-tertiary);gap:8px;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.qr-popover__field select{min-width:0;height:28px;border:1px solid var(--hb-color-border-muted);border-radius:6px;padding:0 7px;background:#fff;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.workbench--chrome-hidden .workbench__header,.workbench--chrome-hidden .diagnostics,.workbench--chrome-hidden .device-stage__toolbar{display:none}.workbench--chrome-hidden{grid-template-rows:minmax(0,1fr)}.workbench--chrome-hidden .splitpanes__pane:first-child,.workbench--chrome-hidden .splitpanes__splitter,.workbench--chrome-hidden .activity-bar{display:none}.workbench--chrome-hidden .splitpanes__pane:last-child{width:100%!important}html[data-screenshot-chrome-hidden=true] .workbench__header,html[data-screenshot-chrome-hidden=true] .diagnostics,html[data-screenshot-chrome-hidden=true] .device-stage__toolbar{display:none}html[data-screenshot-chrome-hidden=true] .workbench{grid-template-rows:minmax(0,1fr)}html[data-screenshot-chrome-hidden=true] .splitpanes__pane:first-child,html[data-screenshot-chrome-hidden=true] .splitpanes__splitter,html[data-screenshot-chrome-hidden=true] .activity-bar{display:none}html[data-screenshot-chrome-hidden=true] .splitpanes__pane:last-child{width:100%!important}.activity-bar{z-index:15;display:flex;align-items:center;justify-content:space-between;padding:0 12px;border-top:1px solid var(--hb-color-border-muted);background:var(--hb-color-bg-surface);color:var(--hb-color-text-secondary);font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:400;font-size:11px;line-height:16px;letter-spacing:0px}.activity-bar>div{display:flex;align-items:center;gap:12px}.activity-account,.activity-status{display:flex;align-items:center;color:var(--hb-color-text-primary);gap:12px}.activity-status{font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:11px;line-height:16px;letter-spacing:0px}.activity-status i{width:6px;height:6px;border-radius:50%;background:var(--hb-color-text-tertiary)}.activity-status .activity-status--ready{background:var(--hb-color-status-success)}.activity-status .activity-status--loading{background:#d69e16}.activity-status .activity-status--error{background:var(--hb-color-status-danger)}.toolbar-badge{position:absolute;top:-4px;right:-4px;min-width:15px;height:15px;padding:0 3px;border-radius:8px;color:#fff;background:var(--hb-color-status-danger);text-align:center;font-family:PingFang SC,Noto Sans CJK SC,xiaomi,BlinkMacSystemFont,Microsoft YaHei,sans-serif;font-weight:500;font-size:10px;line-height:13px;letter-spacing:0px}@media(max-width:780px){.device-stage{padding-right:12px;padding-left:12px}}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<meta name="theme-color" content="#f4f5f7" />
|
|
7
7
|
<title>小程序工坊调试台</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="modulepreload" crossorigin href="/assets/desktop-app-launch-
|
|
10
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-B0sWGR7o.js"></script>
|
|
9
|
+
<link rel="modulepreload" crossorigin href="/assets/desktop-app-launch-KWxMdRrR.js">
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DSTlrpnQ.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="app"></div>
|
package/dist/index.cjs.js
CHANGED
|
@@ -7492,7 +7492,7 @@ function createMessageId() {
|
|
|
7492
7492
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
7493
7493
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
7494
7494
|
? undefined
|
|
7495
|
-
: '0.9.5-alpha.
|
|
7495
|
+
: '0.9.5-alpha.3';
|
|
7496
7496
|
|
|
7497
7497
|
const RUNTIME_MODES = new Set(['production', 'preview', 'development', 'unknown']);
|
|
7498
7498
|
const OPERATING_SYSTEM_NAMES = new Set(['android', 'ios', 'ohos', 'windows', 'macos', 'linux', 'unknown']);
|
package/dist/index.esm.js
CHANGED
|
@@ -7488,7 +7488,7 @@ function createMessageId() {
|
|
|
7488
7488
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
7489
7489
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
7490
7490
|
? undefined
|
|
7491
|
-
: '0.9.5-alpha.
|
|
7491
|
+
: '0.9.5-alpha.3';
|
|
7492
7492
|
|
|
7493
7493
|
const RUNTIME_MODES = new Set(['production', 'preview', 'development', 'unknown']);
|
|
7494
7494
|
const OPERATING_SYSTEM_NAMES = new Set(['android', 'ios', 'ohos', 'windows', 'macos', 'linux', 'unknown']);
|
package/dist/vite.cjs.js
CHANGED
|
@@ -10329,7 +10329,7 @@ async function ensureBasicInfoDirectory(rootPath, relative) {
|
|
|
10329
10329
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
10330
10330
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
10331
10331
|
? undefined
|
|
10332
|
-
: '0.9.5-alpha.
|
|
10332
|
+
: '0.9.5-alpha.3';
|
|
10333
10333
|
|
|
10334
10334
|
/**
|
|
10335
10335
|
* iframe 与调试台页面的开发期 console 捕获转发。
|
package/dist/vite.esm.js
CHANGED
|
@@ -10326,7 +10326,7 @@ async function ensureBasicInfoDirectory(rootPath, relative) {
|
|
|
10326
10326
|
/** 构建时替换为当前发布包的实际版本。 */
|
|
10327
10327
|
const HB_SDK_VERSION = typeof undefined === 'string'
|
|
10328
10328
|
? undefined
|
|
10329
|
-
: '0.9.5-alpha.
|
|
10329
|
+
: '0.9.5-alpha.3';
|
|
10330
10330
|
|
|
10331
10331
|
/**
|
|
10332
10332
|
* iframe 与调试台页面的开发期 console 捕获转发。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@heybox/hb-sdk",
|
|
3
|
-
"version": "0.9.5-alpha.
|
|
3
|
+
"version": "0.9.5-alpha.3",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"./src/index.ts",
|
|
6
6
|
"./src/core/singleton.ts",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"undici": "^7.28.0",
|
|
77
77
|
"ws": "^8.18.0",
|
|
78
78
|
"sharp": "^0.34.5",
|
|
79
|
-
"@heybox/hb-sdk-protocol": "0.9.5-alpha.
|
|
79
|
+
"@heybox/hb-sdk-protocol": "0.9.5-alpha.3"
|
|
80
80
|
},
|
|
81
81
|
"peerDependencies": {
|
|
82
82
|
"vite": ">=5"
|
|
@@ -130,8 +130,8 @@
|
|
|
130
130
|
"rollup-plugin-dts": "6.4.0",
|
|
131
131
|
"@heybox-domain/heybox-theme": "~0.1.0",
|
|
132
132
|
"@heybox-domain/heybox-vue3-ui": "~0.1.0",
|
|
133
|
+
"@heybox/hb-sdk-runtime": "~0.9.5-alpha.3",
|
|
133
134
|
"@heybox/hb-api": "~1.28.19",
|
|
134
|
-
"@heybox/hb-sdk-runtime": "~0.9.5-alpha.1",
|
|
135
135
|
"@heybox/runtime": "~0.2.1",
|
|
136
136
|
"@heybox/runtime-policy": "~0.2.1",
|
|
137
137
|
"@heybox/runtime-transport-fetch": "~0.2.1"
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
"changelog:draft": "node scripts/changelog-draft.cjs",
|
|
203
203
|
"check:changelog": "node scripts/check-changelog.cjs",
|
|
204
204
|
"release:verify-tarball": "node scripts/skill/verify-tarball-install.mjs",
|
|
205
|
-
"test:release": "node --test scripts/public-changelog.test.mjs scripts/public-changelog-workflow.test.cjs scripts/release-family.test.cjs ../../ops/jobs/publish-changed-packages/publish.test.cjs",
|
|
205
|
+
"test:release": "node --test scripts/release-notices.test.cjs scripts/public-changelog.test.mjs scripts/public-changelog-workflow.test.cjs scripts/release-family.test.cjs ../../ops/jobs/publish-changed-packages/publish.test.cjs ../../ops/jobs/release-hb-sdk/notify-release.test.cjs",
|
|
206
206
|
"test:compatibility-evidence": "node --test scripts/validate-compatibility-evidence.test.mjs",
|
|
207
207
|
"release:prepare": "node scripts/release-prepare.cjs",
|
|
208
208
|
"release:tag": "node scripts/release-tag.cjs",
|
package/skill/SKILL.md
CHANGED
|
@@ -40,6 +40,8 @@ Before giving hb-sdk-specific guidance or changing hb-sdk consumer code:
|
|
|
40
40
|
3. Use the index titles and summaries to select the smallest relevant set of linked pages; do not guess page URLs.
|
|
41
41
|
4. Resolve relative links against `https://docs.xiaoheihe.cn/hb_sdk/`, fetch those Markdown pages, and verify their responses before acting.
|
|
42
42
|
5. Check the project's installed `@heybox/hb-sdk` version. If it may differ from the live documentation, read the compatibility and changelog pages linked by the index before recommending an API or CLI command.
|
|
43
|
+
6. For proactive SDK update reminders, read the single approved CDN notice at `https://activity.xiaoheihe.cn/u/hb-sdk/approved-notice.json`. The indexed `Release notices` document is manually authored; it is not approval status. Match notices to the installed version and APIs used; link the applicable Changelog details. An empty or unavailable CDN document must not be represented as an approved announcement. Changelog remains the source for API facts and compatibility checks.
|
|
44
|
+
7. When the task upgrades the SDK, prepares a build, or deploys or publishes a mini-program, read the changelog entries for every stable version after the installed version up to the target version, and check each `必须操作` item first. Decide whether it applies from the APIs, permissions, platforms, and CLI workflows the project actually uses; read the linked guide or migration page before changing code, then verify the change. Report applicable items that remain unhandled instead of skipping them silently.
|
|
43
45
|
|
|
44
46
|
Do not use copied package references, an installed Skill snapshot, registry contents, remembered API shapes, or HTML documentation as a fallback. If the index or any required linked Markdown page is unavailable or invalid, report that the canonical hb-sdk documentation is unavailable and stop the hb-sdk-specific part of the task.
|
|
45
47
|
|
package/skill/skill.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hb-sdk",
|
|
3
|
-
"skillVersion": "0.9.5-alpha.
|
|
3
|
+
"skillVersion": "0.9.5-alpha.3+skill.fe3b525ecac8",
|
|
4
4
|
"sdk": {
|
|
5
5
|
"package": "@heybox/hb-sdk",
|
|
6
|
-
"version": "0.9.5-alpha.
|
|
7
|
-
"compatibility": "0.9.5-alpha.
|
|
6
|
+
"version": "0.9.5-alpha.3",
|
|
7
|
+
"compatibility": "0.9.5-alpha.3"
|
|
8
8
|
},
|
|
9
9
|
"distribution": {
|
|
10
10
|
"type": "npm",
|
|
11
11
|
"package": "@heybox/hb-sdk",
|
|
12
|
-
"version": "0.9.5-alpha.
|
|
12
|
+
"version": "0.9.5-alpha.3",
|
|
13
13
|
"path": "skill"
|
|
14
14
|
},
|
|
15
|
-
"integrity": "sha256-
|
|
15
|
+
"integrity": "sha256-fe3b525ecac8431e1774ee453864cf9ba58ff6897272e2356ceb17b621c8c427"
|
|
16
16
|
}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var node_crypto = require('node:crypto');
|
|
4
|
-
var fs = require('node:fs/promises');
|
|
5
|
-
var path = require('node:path');
|
|
6
|
-
var index = require('./index-xZw-b2po.cjs');
|
|
7
|
-
|
|
8
|
-
const DEPLOY_LOCKED_MESSAGE = '当前设备已有同版本产物正在上传,请等待完成后重试';
|
|
9
|
-
const DEPLOY_LOCK_DIRECTORY_NAME = 'deploy-locks';
|
|
10
|
-
const DEPLOY_LOCK_OWNER_FILE = 'owner.json';
|
|
11
|
-
const INCOMPLETE_LOCK_GRACE_MS = 30_000;
|
|
12
|
-
const defaultPaths = index.envPaths('hb-sdk', { suffix: '' });
|
|
13
|
-
class DeployLockConflictError extends Error {
|
|
14
|
-
}
|
|
15
|
-
async function withDeployLock(scope, operation, options = {}) {
|
|
16
|
-
let lock;
|
|
17
|
-
try {
|
|
18
|
-
lock = await acquireDeployLock(scope, options);
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
if (error instanceof DeployLockConflictError) {
|
|
22
|
-
throw error;
|
|
23
|
-
}
|
|
24
|
-
// 本地文件锁只减少重复操作,文件系统异常不阻断服务端上传流程。
|
|
25
|
-
return operation();
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
return await operation();
|
|
29
|
-
}
|
|
30
|
-
finally {
|
|
31
|
-
await lock.release().catch(() => undefined);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async function acquireDeployLock(scope, options = {}) {
|
|
35
|
-
const lockDirectory = getDeployLockDirectory(scope, options.cacheRoot);
|
|
36
|
-
const ownerFile = path.join(lockDirectory, DEPLOY_LOCK_OWNER_FILE);
|
|
37
|
-
const owner = {
|
|
38
|
-
version: 1,
|
|
39
|
-
pid: options.pid ?? process.pid,
|
|
40
|
-
token: options.token ?? node_crypto.randomBytes(16).toString('hex'),
|
|
41
|
-
};
|
|
42
|
-
await fs.mkdir(path.dirname(lockDirectory), { recursive: true, mode: 0o700 });
|
|
43
|
-
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
44
|
-
let created = false;
|
|
45
|
-
try {
|
|
46
|
-
await fs.mkdir(lockDirectory, { mode: 0o700 });
|
|
47
|
-
created = true;
|
|
48
|
-
await fs.writeFile(ownerFile, `${JSON.stringify(owner)}\n`, { encoding: 'utf8', mode: 0o600 });
|
|
49
|
-
return createDeployLock(lockDirectory, ownerFile, owner.token);
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
if (created) {
|
|
53
|
-
await fs.rm(lockDirectory, { force: true, recursive: true });
|
|
54
|
-
throw error;
|
|
55
|
-
}
|
|
56
|
-
if (!isNodeError(error) || error.code !== 'EEXIST') {
|
|
57
|
-
throw error;
|
|
58
|
-
}
|
|
59
|
-
if (!(await canReclaimDeployLock(lockDirectory, ownerFile, options))) {
|
|
60
|
-
throw new DeployLockConflictError(DEPLOY_LOCKED_MESSAGE);
|
|
61
|
-
}
|
|
62
|
-
await reclaimDeployLock(lockDirectory, owner.token);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
throw new DeployLockConflictError(DEPLOY_LOCKED_MESSAGE);
|
|
66
|
-
}
|
|
67
|
-
function getDeployLockDirectory(scope, cacheRoot = defaultPaths.cache) {
|
|
68
|
-
const scopeHash = node_crypto.createHash('sha256').update(`${scope.apiBaseUrl}\0${scope.miniProgramId}\0${scope.version}`).digest('hex');
|
|
69
|
-
return path.join(cacheRoot, DEPLOY_LOCK_DIRECTORY_NAME, scopeHash);
|
|
70
|
-
}
|
|
71
|
-
function createDeployLock(lockDirectory, ownerFile, token) {
|
|
72
|
-
let released = false;
|
|
73
|
-
return {
|
|
74
|
-
async release() {
|
|
75
|
-
if (released)
|
|
76
|
-
return;
|
|
77
|
-
released = true;
|
|
78
|
-
await removeOwnedLock(lockDirectory, ownerFile, token);
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
async function canReclaimDeployLock(lockDirectory, ownerFile, options) {
|
|
83
|
-
const owner = await readDeployLockOwner(ownerFile);
|
|
84
|
-
if (owner) {
|
|
85
|
-
return !(options.isProcessRunning ?? isProcessRunning)(owner.pid);
|
|
86
|
-
}
|
|
87
|
-
try {
|
|
88
|
-
const lockStat = await fs.stat(lockDirectory);
|
|
89
|
-
return (options.now ?? Date.now)() - lockStat.mtimeMs >= INCOMPLETE_LOCK_GRACE_MS;
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
return isNodeError(error) && error.code === 'ENOENT';
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
async function removeOwnedLock(lockDirectory, ownerFile, token) {
|
|
96
|
-
const owner = await readDeployLockOwner(ownerFile);
|
|
97
|
-
if (owner?.token === token) {
|
|
98
|
-
await fs.rm(lockDirectory, { force: true, recursive: true });
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
async function reclaimDeployLock(lockDirectory, token) {
|
|
102
|
-
const reclaimDirectory = `${lockDirectory}.reclaim-${node_crypto.createHash('sha256').update(token).digest('hex')}`;
|
|
103
|
-
try {
|
|
104
|
-
await fs.rename(lockDirectory, reclaimDirectory);
|
|
105
|
-
}
|
|
106
|
-
catch (error) {
|
|
107
|
-
if (isNodeError(error) && error.code === 'ENOENT')
|
|
108
|
-
return;
|
|
109
|
-
throw error;
|
|
110
|
-
}
|
|
111
|
-
await fs.rm(reclaimDirectory, { force: true, recursive: true });
|
|
112
|
-
}
|
|
113
|
-
async function readDeployLockOwner(ownerFile) {
|
|
114
|
-
try {
|
|
115
|
-
const value = JSON.parse(await fs.readFile(ownerFile, 'utf8'));
|
|
116
|
-
return isDeployLockOwner(value) ? value : null;
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
if (isNodeError(error) && error.code === 'ENOENT')
|
|
120
|
-
return null;
|
|
121
|
-
if (error instanceof SyntaxError)
|
|
122
|
-
return null;
|
|
123
|
-
throw error;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
function isDeployLockOwner(value) {
|
|
127
|
-
return (typeof value === 'object' &&
|
|
128
|
-
value !== null &&
|
|
129
|
-
value.version === 1 &&
|
|
130
|
-
Number.isInteger(value.pid) &&
|
|
131
|
-
typeof value.token === 'string');
|
|
132
|
-
}
|
|
133
|
-
function isProcessRunning(pid) {
|
|
134
|
-
try {
|
|
135
|
-
process.kill(pid, 0);
|
|
136
|
-
return true;
|
|
137
|
-
}
|
|
138
|
-
catch (error) {
|
|
139
|
-
return !isNodeError(error) || error.code !== 'ESRCH';
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
function isNodeError(error) {
|
|
143
|
-
return error instanceof Error && 'code' in error;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
exports.DEPLOY_LOCKED_MESSAGE = DEPLOY_LOCKED_MESSAGE;
|
|
147
|
-
exports.acquireDeployLock = acquireDeployLock;
|
|
148
|
-
exports.withDeployLock = withDeployLock;
|