@jingyi0605/codingns 0.9.7 → 0.9.8
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/public/assets/{AdaptiveButlerPage-DclGPzEx.js → AdaptiveButlerPage-D-gXre7Y.js} +2 -2
- package/dist/public/assets/{App-CcDXqFl1.css → App-7zrCMhE-.css} +1 -1
- package/dist/public/assets/App-Dl-mcdqy.js +30 -0
- package/dist/public/assets/{BootstrapPage-Bl21SsuW.js → BootstrapPage-B-yMdfpQ.js} +1 -1
- package/dist/public/assets/ConversationPage-DRQ5Sg_d.js +9 -0
- package/dist/public/assets/{DesktopDetachPreviewPage-uaOHVsjV.js → DesktopDetachPreviewPage-D1DMaGcy.js} +1 -1
- package/dist/public/assets/{DesktopModal-BxsogpLf.js → DesktopModal-BnfGW2gk.js} +1 -1
- package/dist/public/assets/DesktopWindowPage-2SWAi0xz.js +2 -0
- package/dist/public/assets/FileContextPanel-fbPuE9dO.js +1 -0
- package/dist/public/assets/GitSidebar-BkmesJJR.js +6 -0
- package/dist/public/assets/{MobileCreateSessionSheet-CqtmfVNo.js → MobileCreateSessionSheet-CEJcDBZJ.js} +1 -1
- package/dist/public/assets/{MobileSheet-C5IVmUsO.js → MobileSheet-rkn_CUOY.js} +1 -1
- package/dist/public/assets/{MobileTopHeaderFrame-EoBm3-X0.js → MobileTopHeaderFrame-CU0wsYSS.js} +1 -1
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-idl8o1OB.js +1 -0
- package/dist/public/assets/{PluginAccessOverview-CrQiQxxZ.js → PluginAccessOverview-BBgM6tb0.js} +1 -1
- package/dist/public/assets/{PluginContainerPage-_2u-9thM.js → PluginContainerPage-D-ly3i3H.js} +1 -1
- package/dist/public/assets/{PluginDetailPage-F9cKjSCp.js → PluginDetailPage-CWAHYyyG.js} +1 -1
- package/dist/public/assets/{PluginsListPage-BOhcua_4.js → PluginsListPage-Cte3vBgR.js} +1 -1
- package/dist/public/assets/{RelayConnectEntryPage-Ck_uZLzj.js → RelayConnectEntryPage-sRJlstx9.js} +1 -1
- package/dist/public/assets/{ServerSettingsModal-ICd82a_x.js → ServerSettingsModal-BBft9KEC.js} +1 -1
- package/dist/public/assets/SessionIndexPage-CN7cEdl9.js +1 -0
- package/dist/public/assets/SettingsPage-BGT-YqG2.js +2 -0
- package/dist/public/assets/TerminalManagerPanel-6-ZJ8vGn.js +1 -0
- package/dist/public/assets/TerminalPage-CUXXQYU2.js +55 -0
- package/dist/public/assets/{TerminalRuntimeFallbackModal-DGPR_CMh.js → TerminalRuntimeFallbackModal-zc3qqMKJ.js} +1 -1
- package/dist/public/assets/ToolFilesPage-QzsZyr0F.js +1 -0
- package/dist/public/assets/ToolGitPage-CXg4ncuT.js +1 -0
- package/dist/public/assets/ToolProcessesPage-BPsOsg4w.js +1 -0
- package/dist/public/assets/ToolsHomePage-D1n4FU1s.js +1 -0
- package/dist/public/assets/WorkbenchLandingPage-BaU_dXls.js +1 -0
- package/dist/public/assets/WorkbenchLayout-DViAJhHz.js +1027 -0
- package/dist/public/assets/{WorkbenchModal-CsZeLArg.js → WorkbenchModal-DWsNm2B2.js} +1 -1
- package/dist/public/assets/WorkbenchShellRoute-BGfRqBUa.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-f2jWjHWu.css +1 -0
- package/dist/public/assets/WorkspaceDebugDetailPage-BX0zVSsI.js +1 -0
- package/dist/public/assets/WorkspaceDetailPage-Dx6JX4jx.js +1 -0
- package/dist/public/assets/WorkspaceHomePage-DQVJ042Z.js +1 -0
- package/dist/public/assets/{client-runtime-manager-BgGugw8T.js → client-runtime-manager-D9VbgJZ_.js} +1 -1
- package/dist/public/assets/host-alias-0TfFnYxR.js +1 -0
- package/dist/public/assets/index-DREvg1Yu.css +1 -0
- package/dist/public/assets/index-FOhyOpGY.js +50 -0
- package/dist/public/assets/{login-direct-candidate-resolver-ty2uOY5y.js → login-direct-candidate-resolver-17wEvjhh.js} +1 -1
- package/dist/public/assets/peer-host-config-sync-vYkmqzNz.js +1 -0
- package/dist/public/assets/{plugin-permission-copy-iK3faI3n.js → plugin-permission-copy-apDn8EWG.js} +1 -1
- package/dist/public/assets/{plugins-api-CmV7aDGA.js → plugins-api-CnZYRKoS.js} +1 -1
- package/dist/public/assets/{preferences-service-BoSmT_ny.js → preferences-service-PZlLLAWH.js} +1 -1
- package/dist/public/assets/relay-entry-DhHwflXl.js +1 -0
- package/dist/public/assets/terminal-runtime-meta-2zvacxvM.js +1 -0
- package/dist/public/assets/{useRegisteredDebugTemplates-B_vXUtSe.js → useRegisteredDebugTemplates-CJ-o4tFl.js} +1 -1
- package/dist/public/assets/workbench-navigation-aqJ1ay4M.js +1 -0
- package/dist/public/index.html +2 -2
- package/dist/server/middlewares/auth-guard.js +1 -0
- package/dist/server/middlewares/auth-guard.js.map +1 -1
- package/dist/server/modules/peer-host/host-api-proxy-service.d.ts +9 -0
- package/dist/server/modules/peer-host/host-api-proxy-service.js +174 -0
- package/dist/server/modules/peer-host/host-api-proxy-service.js.map +1 -0
- package/dist/server/modules/peer-host/host-handshake-controller.d.ts +7 -0
- package/dist/server/modules/peer-host/host-handshake-controller.js +10 -0
- package/dist/server/modules/peer-host/host-handshake-controller.js.map +1 -0
- package/dist/server/modules/peer-host/host-handshake.d.ts +15 -0
- package/dist/server/modules/peer-host/host-handshake.js +20 -0
- package/dist/server/modules/peer-host/host-handshake.js.map +1 -0
- package/dist/server/modules/peer-host/host-ws-proxy-service.d.ts +14 -0
- package/dist/server/modules/peer-host/host-ws-proxy-service.js +256 -0
- package/dist/server/modules/peer-host/host-ws-proxy-service.js.map +1 -0
- package/dist/server/modules/peer-host/peer-host-controller.d.ts +55 -0
- package/dist/server/modules/peer-host/peer-host-controller.js +62 -0
- package/dist/server/modules/peer-host/peer-host-controller.js.map +1 -0
- package/dist/server/modules/peer-host/peer-host-service.d.ts +77 -0
- package/dist/server/modules/peer-host/peer-host-service.js +529 -0
- package/dist/server/modules/peer-host/peer-host-service.js.map +1 -0
- package/dist/server/modules/sessions/codex-session-title-generator.js +18 -5
- package/dist/server/modules/sessions/codex-session-title-generator.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +12 -1
- package/dist/server/modules/sessions/session-history-service.js +51 -38
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +6 -0
- package/dist/server/modules/sessions/session-live-runtime-service.js +181 -80
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-title-utils.d.ts +3 -0
- package/dist/server/modules/sessions/session-title-utils.js +25 -0
- package/dist/server/modules/sessions/session-title-utils.js.map +1 -0
- package/dist/server/modules/sessions/workspace-office-mcp-config.d.ts +2 -1
- package/dist/server/modules/sessions/workspace-office-mcp-config.js +44 -3
- package/dist/server/modules/sessions/workspace-office-mcp-config.js.map +1 -1
- package/dist/server/modules/tasks/task-manager.d.ts +2 -1
- package/dist/server/modules/tasks/task-manager.js +3 -0
- package/dist/server/modules/tasks/task-manager.js.map +1 -1
- package/dist/server/modules/tasks/task-scheduler.d.ts +2 -1
- package/dist/server/modules/tasks/task-scheduler.js +21 -0
- package/dist/server/modules/tasks/task-scheduler.js.map +1 -1
- package/dist/server/modules/tasks/task-types.d.ts +5 -0
- package/dist/server/modules/tasks/task-types.js.map +1 -1
- package/dist/server/modules/workbench/workbench-controller.js +3 -2
- package/dist/server/modules/workbench/workbench-controller.js.map +1 -1
- package/dist/server/modules/workspace/affairs-library-service.d.ts +1 -0
- package/dist/server/modules/workspace/affairs-library-service.js +80 -0
- package/dist/server/modules/workspace/affairs-library-service.js.map +1 -1
- package/dist/server/routes/peer-hosts.d.ts +3 -0
- package/dist/server/routes/peer-hosts.js +18 -0
- package/dist/server/routes/peer-hosts.js.map +1 -0
- package/dist/server/routes/public.d.ts +2 -1
- package/dist/server/routes/public.js +2 -1
- package/dist/server/routes/public.js.map +1 -1
- package/dist/server/server/create-server.d.ts +4 -0
- package/dist/server/server/create-server.js +30 -2
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/http/error-handler.js +12 -0
- package/dist/server/shared/http/error-handler.js.map +1 -1
- package/dist/server/storage/repositories/peer-host-repository.d.ts +44 -0
- package/dist/server/storage/repositories/peer-host-repository.js +271 -0
- package/dist/server/storage/repositories/peer-host-repository.js.map +1 -0
- package/dist/server/storage/sqlite/client.js +81 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +64 -0
- package/dist/server/types/domain.d.ts +43 -0
- package/dist/server/ws/workbench-ws-hub.js +5 -14
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/dist/server/ws/ws-server.d.ts +2 -1
- package/dist/server/ws/ws-server.js +5 -1
- package/dist/server/ws/ws-server.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +29 -5
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +8 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +3 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +144 -27
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/package.json +1 -1
- package/dist/public/assets/App-BxX5mm9o.js +0 -30
- package/dist/public/assets/ConversationPage-CmiVCV0q.js +0 -9
- package/dist/public/assets/DesktopWindowPage-Bubfw1nC.js +0 -2
- package/dist/public/assets/FileContextPanel-DrYWcTkp.js +0 -1
- package/dist/public/assets/GitSidebar-CQsfJqun.js +0 -6
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-BC8MMQs_.js +0 -1
- package/dist/public/assets/SessionIndexPage-Cox6P6dw.js +0 -1
- package/dist/public/assets/SettingsPage-BI5cM3j5.js +0 -2
- package/dist/public/assets/TerminalManagerPanel-DiVhBQhf.js +0 -1
- package/dist/public/assets/TerminalPage-DUMUO7Ng.js +0 -55
- package/dist/public/assets/ToolFilesPage-m88CAp-r.js +0 -1
- package/dist/public/assets/ToolGitPage-DCYpfTsb.js +0 -1
- package/dist/public/assets/ToolProcessesPage-Bk5ulsyq.js +0 -1
- package/dist/public/assets/ToolsHomePage-BrTwfjI7.js +0 -1
- package/dist/public/assets/WorkbenchLandingPage-q4AAmdMV.js +0 -1
- package/dist/public/assets/WorkbenchLayout-DD8b-m2G.js +0 -1027
- package/dist/public/assets/WorkbenchShellRoute-BaiW_vfb.js +0 -1
- package/dist/public/assets/WorkbenchShellRoute-CxKYZ6uF.css +0 -1
- package/dist/public/assets/WorkspaceDebugDetailPage-BcUUDEyw.js +0 -1
- package/dist/public/assets/WorkspaceDetailPage-zEZ1VARA.js +0 -1
- package/dist/public/assets/WorkspaceHomePage-CR0rqS4e.js +0 -1
- package/dist/public/assets/index-CFyk1rgJ.js +0 -50
- package/dist/public/assets/index-CrU73EIV.css +0 -1
- package/dist/public/assets/relay-entry-C8k5qsl5.js +0 -1
- package/dist/public/assets/terminal-runtime-meta-okQIDzfA.js +0 -1
- package/dist/public/assets/workbench-navigation-DoDaQR4z.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{D as c}from"./index-
|
|
1
|
+
import{D as c}from"./index-FOhyOpGY.js";const l=350,u=2,s={loopback:0,lan:1,tailscale:2,custom:3};async function m(e){var t;const r=e.requestedBaseUrl??e.host.baseUrl;if(!d(e.host,r,e.platform))return r;const n=f(((t=e.host.relayTunnel)==null?void 0:t.candidateEndpoints)??[],r);for(const o of n)if(await y(o.url,e.fetchFn))return o.url;return r}function d(e,r,n){var o;if(n==="web")return!1;const t=e.relayTunnel;return!(t!=null&&t.enabled)||!((o=t.candidateEndpoints)!=null&&o.length)?!1:T(r,e)}function f(e,r){return e.filter(n=>n.kind!=="relay"&&n.url!==r).sort((n,t)=>{if(n.priority!==t.priority)return n.priority-t.priority;const o=s[n.kind],i=s[t.kind];return o!==i?o-i:n.url.localeCompare(t.url)}).slice(0,u)}async function y(e,r=fetch){const n=c("/api/public/bootstrap-status",e),t=typeof AbortController=="function"?new AbortController:null,o=globalThis.setTimeout(()=>{t==null||t.abort()},l);try{const i=await r(n,{method:"GET",signal:t==null?void 0:t.signal});if(!i.ok)return!1;const a=await p(i);return typeof(a==null?void 0:a.initialized)=="boolean"}catch{return!1}finally{globalThis.clearTimeout(o)}}function T(e,r){var o;const n=r.relayTunnel;if(!(n!=null&&n.tunnelDomain))return!1;const t=(o=n.candidateEndpoints)==null?void 0:o.find(i=>i.url===e);if(t)return t.kind==="relay";try{return new URL(e).hostname.toLowerCase()===n.tunnelDomain.trim().toLowerCase()}catch{return!1}}async function p(e){const r=await e.text();if(!r.trim())return null;try{return JSON.parse(r)}catch{return null}}export{m as resolveLoginBaseUrlWithDirectCandidates};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as I,n as b}from"./index-FOhyOpGY.js";import{l as A,n as P}from"./host-alias-0TfFnYxR.js";async function h(){const a=await A();await U(a.items)}async function U(a){var f;const e=I.getState(),d=e.activeHostId??((f=e.hosts[0])==null?void 0:f.id)??null,l=new Date().toISOString(),u=new Map,n=e.hosts.map(t=>(t.peerHostId&&u.set(t.peerHostId,t),t));let s=!1;for(const t of a){const c=u.get(t.id),o=y(t,c,l);if(c){const r=n.findIndex(H=>H.id===c.id);r>=0&&!w(n[r],o)&&(n[r]=o,s=!0);continue}o.id!==d&&!n.some(r=>r.id===o.id)&&(n.push(o),s=!0)}const p=new Set(a.map(t=>t.id)),m=n.filter(t=>!t.peerHostId||p.has(t.peerHostId));m.length!==n.length&&(s=!0),s&&await I.update({hosts:m})}function y(a,e,d){const l=b(a.baseUrl);return{id:(e==null?void 0:e.id)??`peer-host-${a.id}`,name:a.name||C(l),alias:P(a.alias||a.name),baseUrl:l,kind:"lan",peerEnabled:a.status==="reachable",peerHostId:a.id,createdAt:(e==null?void 0:e.createdAt)??a.createdAt??d,updatedAt:a.updatedAt??d,lastConnectedAt:(e==null?void 0:e.lastConnectedAt)??null,lastUserId:(e==null?void 0:e.lastUserId)??null,lastUsername:(e==null?void 0:e.lastUsername)??null,relayTunnel:(e==null?void 0:e.relayTunnel)??null}}function w(a,e){return a.name===e.name&&a.alias===e.alias&&a.baseUrl===e.baseUrl&&a.peerEnabled===e.peerEnabled&&a.peerHostId===e.peerHostId&&a.updatedAt===e.updatedAt}function C(a){try{return new URL(a).host}catch{return a}}export{U as mergePeerHostsIntoClientConfig,h as syncPeerHostsIntoClientConfig};
|
package/dist/public/assets/{plugin-permission-copy-iK3faI3n.js → plugin-permission-copy-apDn8EWG.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./index-
|
|
1
|
+
import{t as e}from"./index-FOhyOpGY.js";function n(i){switch(i){case"workspace.read_file":return e("plugins.permissionNameReadFile");case"workspace.list_dir":return e("plugins.permissionNameListDirectory");case"workspace.write_file":return e("plugins.permissionNameWriteFile");case"desktop.open_file":return e("plugins.permissionNameOpenFile");case"desktop.reveal_in_file_manager":return e("plugins.permissionNameRevealInFileManager");default:return i}}function t(i,r){return i==="workspace"?e("plugins.permissionScopeWorkspace"):r?i==="directory"?e("plugins.permissionScopeDirectory",{scopePath:r}):e("plugins.permissionScopeFile",{scopePath:r}):e("plugins.permissionScopeUnknown")}function o(i){switch(i){case"once":return e("plugins.permissionGrantModeOnce");case"session":return e("plugins.permissionGrantModeSession");case"persistent":return e("plugins.permissionGrantModePersistent");default:return i}}export{t as a,o as b,n as g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{h as t}from"./index-FOhyOpGY.js";function r(){return t.request("/api/plugins")}function u(n){return t.request(`/api/plugins/${encodeURIComponent(n)}`)}function l(n,e){return t.request(`/api/plugins/${encodeURIComponent(n)}/runtime-sessions`,{method:"POST",body:JSON.stringify({workspaceId:e})})}function p(n,e){return t.request(`/api/plugins/${encodeURIComponent(n)}/runtime-sessions/${encodeURIComponent(e)}/close`,{method:"POST"})}function a(n){return t.request(`/api/plugins/${encodeURIComponent(n)}/enable`,{method:"POST"})}function d(n,e){return t.request(`/api/plugins/${encodeURIComponent(n)}/disable`,{method:"POST",body:JSON.stringify({reason:(e==null?void 0:e.trim())||void 0})})}function g(n,e,i,o){return t.request(`/api/plugins/${encodeURIComponent(n)}/actions/${encodeURIComponent(e)}`,{method:"POST",body:JSON.stringify({runtimeSessionId:i,input:o===void 0?null:o})})}function m(n){return t.request(`/api/plugins/${encodeURIComponent(n)}/runs`)}function c(n,e,i){return t.request(`/api/plugins/${encodeURIComponent(n)}/desktop/open-file`,{method:"POST",body:JSON.stringify({runtimeSessionId:e,path:i})})}function f(n,e,i){return t.request(`/api/plugins/${encodeURIComponent(n)}/desktop/reveal-in-file-manager`,{method:"POST",body:JSON.stringify({runtimeSessionId:e,path:i})})}function P(n,e,i){return t.request(`/api/plugins/${encodeURIComponent(n)}/files/read`,{method:"POST",body:JSON.stringify({runtimeSessionId:e,path:i})})}function S(n,e,i,o){return t.request(`/api/plugins/${encodeURIComponent(n)}/files/write`,{method:"POST",body:JSON.stringify({runtimeSessionId:e,path:i,content:o})})}function O(n,e,i){return t.request(`/api/plugins/${encodeURIComponent(n)}/files/list`,{method:"POST",body:JSON.stringify({runtimeSessionId:e,path:(i==null?void 0:i.trim())||void 0})})}function R(n,e){const i=new URLSearchParams({workspaceId:e});return t.request(`/api/plugins/${encodeURIComponent(n)}/permissions/grants?${i.toString()}`)}function y(n,e){return t.request(`/api/plugins/${encodeURIComponent(n)}/permissions/grants`,{method:"POST",body:JSON.stringify(e)})}function C(n,e,i){return t.request(`/api/plugins/${encodeURIComponent(n)}/permissions/grants/${encodeURIComponent(e)}/revoke`,{method:"POST",body:JSON.stringify({workspaceId:i})})}export{m as a,R as b,l as c,d,a as e,p as f,u as g,g as h,O as i,f as j,P as k,r as l,y as m,c as o,C as r,S as w};
|
package/dist/public/assets/{preferences-service-BoSmT_ny.js → preferences-service-PZlLLAWH.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{h as e}from"./index-FOhyOpGY.js";const r="/api/preferences/profile";async function f(){return e.request(r)}async function o(t){return e.request(r,{method:"PUT",body:JSON.stringify(t)})}export{f as fetchPreferencesProfile,o as updatePreferencesProfile};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{l as C,n as m}from"./index-FOhyOpGY.js";function F(e,t,r){var y;const a=p(t.tunnelDomain),o=m(t.controlBaseUrl),l=z(a,o),d=new Date().toISOString(),n=B(e.hosts,l,t.bindingId??null),c=b(r==null?void 0:r.displayName)??(n==null?void 0:n.name)??a,E={endpointId:`relay-entry:${l}`,kind:"relay",url:l,priority:0,expiresAt:null,source:"user_saved"},I=f(t.candidateEndpoints).filter(s=>s.url!==l),h=(((y=n==null?void 0:n.relayTunnel)==null?void 0:y.candidateEndpoints)??[]).filter(s=>s.url!==l),u={id:(n==null?void 0:n.id)??D(t.bindingId??null,a),name:c,alias:(n==null?void 0:n.alias)??k(c,a),baseUrl:l,kind:"remote",peerEnabled:(n==null?void 0:n.peerEnabled)??!1,peerHostId:(n==null?void 0:n.peerHostId)??null,createdAt:(n==null?void 0:n.createdAt)??d,updatedAt:d,lastConnectedAt:(n==null?void 0:n.lastConnectedAt)??null,lastUserId:(n==null?void 0:n.lastUserId)??null,lastUsername:(n==null?void 0:n.lastUsername)??null,relayTunnel:{provider:"codingns_relay",enabled:!0,tunnelDomain:a,controlBaseUrl:o,bindingId:i(t.bindingId??null),hostFingerprint:i(t.hostFingerprint??null),candidateEndpoints:U([E,...I,...h])}},A=n?e.hosts.map(s=>s.id===n.id?u:s):[u,...e.hosts];return{activeHostId:(r==null?void 0:r.activate)===!1?e.activeHostId:u.id,activeDiscoveredHostId:(r==null?void 0:r.activate)===!1?e.activeDiscoveredHostId:null,hosts:A}}async function N(e,t=fetch){var o;const r=C(e);if(!r)return null;const a={tunnelDomain:r.tunnelDomain,controlBaseUrl:r.controlBaseUrl};try{const l=await t(new URL(`/api/v1/tunnels/${encodeURIComponent(r.tunnelDomain)}`,w(r.controlBaseUrl)).toString(),{method:"GET"});if(!l.ok)return a;const n=(await l.json()).binding;return{tunnelDomain:p((n==null?void 0:n.tunnelDomain)??r.tunnelDomain),controlBaseUrl:m((n==null?void 0:n.controlBaseUrl)??r.controlBaseUrl),bindingId:i((n==null?void 0:n.bindingId)??null),hostFingerprint:i((n==null?void 0:n.hostFingerprint)??null),candidateEndpoints:f((o=n==null?void 0:n.runtime)==null?void 0:o.candidateEndpoints)}}catch{return a}}function B(e,t,r){if(r){const a=e.find(o=>{var l;return((l=o.relayTunnel)==null?void 0:l.bindingId)===r})??null;if(a)return a}return e.find(a=>a.baseUrl===t)??null}function D(e,t){return e?`relay-entry:${e}`:`relay-entry:${t}`}function p(e){const t=e.trim().toLowerCase();if(!t||!/^[a-z0-9-]+(\.[a-z0-9-]+)+$/i.test(t))throw new Error("隧道域名无效");return t}function i(e){const t=e==null?void 0:e.trim();return t||null}function b(e){const t=e==null?void 0:e.trim();return t||null}function z(e,t){const r=new URL(t);return r.hostname=e,r.username="",r.password="",r.pathname="",r.search="",r.hash="",m(r.toString())}function w(e){return e.endsWith("/")?e:`${e}/`}function f(e){if(!Array.isArray(e))return[];const t=[];for(const r of e){if(typeof r!="object"||r===null||Array.isArray(r))continue;const a=i(r.endpointId),o=i(r.kind),l=i(r.url),d=r.priority,n=i(r.expiresAt),c=i(r.source);!a||!l||!Number.isFinite(d)||!R(o)||!T(c)||t.push({endpointId:a,kind:o,url:l,priority:Number(d),expiresAt:n,source:c})}return U(t)}function U(e){const t=new Map;for(const r of e)t.has(r.url)||t.set(r.url,r);return Array.from(t.values()).sort((r,a)=>r.priority!==a.priority?r.priority-a.priority:r.url.localeCompare(a.url))}function R(e){return e==="relay"||e==="lan"||e==="loopback"||e==="tailscale"||e==="custom"}function T(e){return e==="host_reported"||e==="desktop_scan"||e==="user_saved"}function k(e,t){const r=e.trim()||t.trim()||"HOST";return Array.from(r).slice(0,4).join("")}export{F as b,N as r};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as a,t as r}from"./index-FOhyOpGY.js";function s(e){return a.request("/api/terminals/shells",{targetHostId:(e==null?void 0:e.targetHostId)??void 0})}function l(e,t){return a.request(`/api/terminals?workspaceId=${encodeURIComponent(e)}`,{targetHostId:(t==null?void 0:t.targetHostId)??void 0})}function d(e,t){return a.request(`/api/terminals/templates/runtime-status?workspaceId=${encodeURIComponent(e)}`,{targetHostId:void 0})}function u(e,t){return a.request(`/api/terminals/templates/${encodeURIComponent(e)}/stop`,{method:"POST",targetHostId:(t==null?void 0:t.targetHostId)??void 0})}function o(e,t){return a.request("/api/terminals",{method:"POST",targetHostId:(t==null?void 0:t.targetHostId)??void 0,body:JSON.stringify(e)})}function c(e,t){return a.request(`/api/terminals/${encodeURIComponent(e)}`,{method:"DELETE",targetHostId:(t==null?void 0:t.targetHostId)??void 0})}function f(e,t){return a.request(`/api/terminals/${encodeURIComponent(e)}/record`,{method:"DELETE",targetHostId:(t==null?void 0:t.targetHostId)??void 0})}function I(e,t={}){const n=new URLSearchParams;typeof t.beforeSeq=="number"&&n.set("beforeSeq",String(t.beforeSeq)),typeof t.limit=="number"&&n.set("limit",String(t.limit));const i=n.toString();return a.request(`/api/terminals/${encodeURIComponent(e)}/history${i?`?${i}`:""}`,{targetHostId:t.targetHostId??void 0})}function g(e,t){return a.request(`/api/terminals/templates?workspaceId=${encodeURIComponent(e)}`,{targetHostId:void 0})}function b(e,t){return a.request("/api/terminals/templates",{method:"POST",targetHostId:(t==null?void 0:t.targetHostId)??void 0,body:JSON.stringify(e)})}function h(e,t,n){return a.request(`/api/terminals/templates/${encodeURIComponent(e)}`,{method:"PUT",targetHostId:(n==null?void 0:n.targetHostId)??void 0,body:JSON.stringify(t)})}function H(e,t){return a.request(`/api/terminals/templates/${encodeURIComponent(e)}`,{method:"DELETE",targetHostId:(t==null?void 0:t.targetHostId)??void 0})}function p(e,t,n){return a.request(`/api/terminals/templates/${encodeURIComponent(e)}/run`,{method:"POST",targetHostId:(n==null?void 0:n.targetHostId)??void 0,body:JSON.stringify(t)})}function S(e){return[{value:"",label:r("terminal.runtimeAutoOption"),description:r("terminal.runtimeAutoDescription")},{value:"tmux",label:e==="windows"?r("terminal.runtimePersistentLabel"):"tmux",description:e==="windows"?r("terminal.runtimeWindowsPersistentDescription"):r("terminal.runtimeTmuxDescription")},{value:"embedded-pty",label:"embedded-pty",description:r("terminal.runtimeEmbeddedDescription")}]}function T(e,t){return e?e==="conpty-powershell"?r("terminal.runtimeConptyPowerShellLabel"):e==="conpty-cmd"?r("terminal.runtimeConptyCmdLabel"):e==="conpty-git-bash"?r("terminal.runtimeConptyGitBashLabel"):e==="tmux"&&t==="windows"?r("terminal.runtimePersistentLabel"):e:r("terminal.runtimeAutoOption")}function q(e,t){return e?e==="embedded-pty"?"pty":e==="conpty-powershell"||e==="conpty-cmd"||e==="conpty-git-bash"||e==="tmux"&&t==="windows"?r("terminal.runtimePersistentShortLabel"):e:r("terminal.runtimeAutoShortLabel")}export{d as a,S as b,l as c,s as d,q as e,c as f,T as g,I as h,o as i,f as j,b as k,g as l,H as m,p as r,u as s,h as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as l,t as s,b as u}from"./index-CFyk1rgJ.js";import{aZ as x,a_ as k}from"./WorkbenchLayout-DD8b-m2G.js";import{l as j,a as p}from"./terminal-runtime-meta-okQIDzfA.js";function O({workspace:e,state:r,variant:t}){return e?t==="mobile"?l.jsx(v,{workspace:e,state:r}):l.jsx(P,{workspace:e,state:r}):l.jsx("p",{className:"workbench-section-empty",children:s("shell.workspaceDetailMissingBody")})}function v({workspace:e,state:r}){const t=r.primaryAnalysis,o=r.analyses.length;return l.jsx(l.Fragment,{children:l.jsxs("section",{className:"mobile-feature-panel surface-card mobile-workspace-composition-panel",children:[l.jsx("div",{className:"mobile-feature-section-header",children:l.jsx("div",{children:l.jsx("h2",{children:s("shell.workspaceDetailRegisteredDebugAnalysisTitle")})})}),r.loading&&t===null?l.jsx("p",{children:s("common.loading")}):null,r.error?l.jsx("p",{className:"status-text","data-tone":"error",children:r.error}):null,t?l.jsxs("div",{className:"mobile-detail-grid mobile-workspace-detail-grid",children:[l.jsxs("div",{className:"mobile-detail-metric",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugFrameworkLabel")}),l.jsx("strong",{children:t.primaryFramework??s("common.unknown")})]}),l.jsxs("div",{className:"mobile-detail-metric",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugConfidenceLabel")}),l.jsx("strong",{children:y(t.confidence)})]}),l.jsxs("div",{className:"mobile-detail-metric",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugSummaryServiceCountLabel")}),l.jsx("strong",{children:o})]}),l.jsxs("div",{className:"mobile-detail-metric",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugCompatibilityLabel")}),l.jsx("strong",{children:D(t.compatibilityLevel)})]}),l.jsxs("div",{className:"mobile-detail-metric",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugLastAnalyzedAtLabel")}),l.jsx("strong",{children:r.lastAnalyzedAt??s("shell.workspaceDetailDebugFrameworkNoteEmpty")})]}),l.jsxs("div",{className:"mobile-detail-metric mobile-detail-metric-wide",children:[l.jsx("span",{children:s("shell.manageWorkspacePathLabel")}),l.jsx("strong",{children:e.path})]})]}):null]})})}function P({workspace:e,state:r}){const t=r.primaryAnalysis,o=r.analyses.length;return l.jsxs("section",{className:"debug-readiness-section surface-card",children:[l.jsx("div",{className:"debug-readiness-section-header",children:l.jsxs("div",{children:[l.jsx("h3",{children:s("shell.workspaceDetailRegisteredDebugAnalysisTitle")}),l.jsx("p",{children:s("shell.workspaceDetailRegisteredDebugAnalysisDescription")})]})}),r.loading&&t===null?l.jsx("p",{className:"workbench-section-empty",children:s("common.loading")}):null,r.error?l.jsx("p",{className:"workbench-manage-status status-text","data-tone":"error",children:r.error}):null,t?l.jsxs("div",{className:"debug-readiness-summary-grid",children:[l.jsxs("article",{className:"debug-readiness-summary-card",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugFrameworkLabel")}),l.jsx("strong",{children:t.primaryFramework??s("common.unknown")})]}),l.jsxs("article",{className:"debug-readiness-summary-card",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugConfidenceLabel")}),l.jsx("strong",{children:y(t.confidence)}),l.jsx("small",{children:r.lastAnalyzedAt??s("shell.workspaceDetailDebugFrameworkNoteEmpty")})]}),l.jsxs("article",{className:"debug-readiness-summary-card",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugSummaryServiceCountLabel")}),l.jsx("strong",{children:o})]}),l.jsxs("article",{className:"debug-readiness-summary-card",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugCompatibilityLabel")}),l.jsx("strong",{children:D(t.compatibilityLevel)})]}),l.jsxs("article",{className:"debug-readiness-summary-card",children:[l.jsx("span",{children:s("shell.manageWorkspacePathLabel")}),l.jsx("strong",{title:e.path,children:e.path})]})]}):null]})}function D(e){switch(e){case"supported":return s("shell.workspaceDetailDebugCompatibilitySupported");case"conditional":return s("shell.workspaceDetailDebugCompatibilityConditional");case"unsupported":return s("shell.workspaceDetailDebugCompatibilityUnsupported");default:return s("shell.workspaceDetailDebugCompatibilityUnknown")}}function y(e){switch(e){case"high":return s("shell.workspaceDetailDebugConfidenceHigh");case"medium":return s("shell.workspaceDetailDebugConfidenceMedium");case"low":return s("shell.workspaceDetailDebugConfidenceLow");default:return s("common.unknown")}}function F(e,r,t){const o=new Map(r.map(i=>[i.templateId,i])),c=new Map(((t==null?void 0:t.services)??[]).map(i=>[i.serviceId,i])),a=new Map;for(const i of e)i.port!==null&&a.set(i.port,(a.get(i.port)??0)+1);const n=e.map(i=>{const g=o.get(i.id)??null,m=c.get(i.id)??null;if(m){const w=m.autoStartAllowed?m.leasedPort!==null&&m.leasedPort!==i.port?"orchestrated":"runnable":"blocked";return{template:i,runtimeStatus:g,planItem:m,decision:w,assignedPort:m.leasedPort,reason:A(i,m)}}return i.port===null?{template:i,runtimeStatus:g,planItem:null,decision:"blocked",assignedPort:null,reason:s("shell.workspaceDetailRegisteredDebugPlanReasonPortMissing")}:(a.get(i.port)??0)>1||g!=null&&g.occupied?{template:i,runtimeStatus:g,planItem:null,decision:"orchestrated",assignedPort:i.port,reason:(a.get(i.port)??0)>1?s("shell.workspaceDetailRegisteredDebugPlanReasonDuplicatePortWillOrchestrate"):s("shell.workspaceDetailRegisteredDebugPlanReasonPortOccupiedWillOrchestrate")}:{template:i,runtimeStatus:g,planItem:null,decision:"runnable",assignedPort:i.port,reason:s("shell.workspaceDetailRegisteredDebugPlanReasonRunnable")}}),h=n.filter(i=>i.decision==="runnable").length,b=n.filter(i=>i.decision==="orchestrated").length,d=n.filter(i=>i.decision==="blocked").length;return{generatedAt:(t==null?void 0:t.runtimeSession.createdAt)??new Date().toISOString(),autoStartAllowed:(t==null?void 0:t.autoStartAllowed)??(n.length>0&&d===0),runnableCount:h,orchestratedCount:b,blockedCount:d,items:n}}function R(e){return e.autoStartAllowed&&e.blockedCount===0}function E(e,r){return r===0?"danger":R(e)?"success":"warn"}function z(e,r){return r===0?s("shell.workspaceDetailRegisteredDebugOverallStatusEmpty"):R(e)?s("shell.workspaceDetailRegisteredDebugOverallStatusReady"):s("shell.workspaceDetailRegisteredDebugOverallStatusPartial")}function W(e,r){return r===0?s("shell.workspaceDetailRegisteredDebugTemplatesEmpty"):s("shell.workspaceDetailRegisteredDebugOverallSummary",{runnable:e.runnableCount,orchestrated:e.orchestratedCount,blocked:e.blockedCount})}function $(e){const r=e.args.join(" ").trim();return r?`${e.command} ${r}`:e.command}function B(e,r){const t=r.replace(/[\\/]+$/,"");return e===t?".":e.startsWith(`${t}/`)||e.startsWith(`${t}\\`)?e.slice(t.length+1):e}function V(e){return e===null?s("shell.workspaceDetailRegisteredDebugTemplatePortMissing"):String(e)}function U(e){if(!e)return s("shell.workspaceDetailDebugPortEmpty");const r=new Date(e);return Number.isNaN(r.getTime())?e:new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(r)}function q(e,r){if(e.port!==null)return r!=null&&r.occupied?"warn":"success"}function _(e,r){return e.port===null?s("shell.workspaceDetailRegisteredDebugTemplateStatusUntracked"):r!=null&&r.occupied?s("shell.workspaceDetailRegisteredDebugTemplateStatusOccupied"):s("shell.workspaceDetailRegisteredDebugTemplateStatusIdle")}function H(e){return e!=null&&e.occupied?e.processId&&e.processName?`PID ${e.processId} · ${e.processName}`:e.processId?`PID ${e.processId}`:e.processName??s("shell.workspaceDetailRegisteredDebugRuntimeUnknown"):s("shell.workspaceDetailRegisteredDebugRuntimeIdle")}function Z(e,r){return e.port===null?s("shell.workspaceDetailRegisteredDebugPlanReasonPortMissing"):r!=null&&r.occupied?s("shell.workspaceDetailRegisteredDebugPlanReasonPortOccupiedWillOrchestrate"):s("shell.workspaceDetailRegisteredDebugPlanReasonRunnable")}function G(e){switch(e){case"runnable":return s("shell.workspaceDetailRegisteredDebugPlanActionStart");case"orchestrated":return s("shell.workspaceDetailRegisteredDebugPlanActionOrchestrated");default:return s("shell.workspaceDetailRegisteredDebugPlanActionBlocked")}}function A(e,r){var t;return r.missingRequirements.length>0?r.missingRequirements.map(o=>C(o)).join(";"):(t=r.aiFallback)!=null&&t.eligible?r.aiFallback.reason:r.leasedPort!==null&&r.leasedPort!==e.port?s("shell.workspaceDetailRegisteredDebugPlanReasonPortOrchestrated",{port:r.leasedPort}):Object.keys(r.envPatch).length>0?s("shell.workspaceDetailRegisteredDebugPlanReasonServiceDiscoveryInjected"):s("shell.workspaceDetailRegisteredDebugPlanReasonRunnable")}function C(e){switch(e){case"analysis":return s("shell.workspaceDetailRegisteredDebugPlanReasonAnalysisMissing");case"service_discovery":return s("shell.workspaceDetailRegisteredDebugPlanReasonServiceDiscoveryMissing");case"callback":return s("shell.workspaceDetailRegisteredDebugPlanReasonCallbackMissing");case"port":return s("shell.workspaceDetailRegisteredDebugPlanReasonPortMissing");default:return e}}function J(e){const[r,t]=u.useState({loading:!1,error:null,targetId:null,targetSourceType:null,services:[],analyses:[],matrixItems:[]}),[o,c]=u.useState(0),a=u.useCallback(()=>{c(d=>d+1)},[]);u.useEffect(()=>{if(!(e!=null&&e.id)||!e.path){t({loading:!1,error:null,targetId:null,targetSourceType:null,services:[],analyses:[],matrixItems:[]});return}let d=!1;return t(i=>({...i,loading:!0,error:null})),(async()=>{try{const[i,g]=await Promise.all([x({workspaceId:e.id,rootPath:e.path}),k()]);if(d)return;t({loading:!1,error:null,targetId:i.target.id,targetSourceType:i.target.sourceType,services:i.services,analyses:i.analyses,matrixItems:g.items})}catch(i){if(d)return;t({loading:!1,error:i instanceof Error?i.message:s("shell.workspaceDetailDebugAnalyzeFailed"),targetId:null,targetSourceType:null,services:[],analyses:[],matrixItems:[]})}})(),()=>{d=!0}},[o,e==null?void 0:e.id,e==null?void 0:e.path]);const n=u.useMemo(()=>N(r.services,r.analyses),[r.analyses,r.services]),h=u.useMemo(()=>r.matrixItems.find(d=>d.framework===((n==null?void 0:n.primaryFramework)??"unknown"))??null,[n==null?void 0:n.primaryFramework,r.matrixItems]),b=u.useMemo(()=>{var d;return((d=r.analyses[0])==null?void 0:d.createdAt)??null},[r.analyses]);return{...r,primaryAnalysis:n,currentCompatibilityItem:h,lastAnalyzedAt:b,refresh:a}}function N(e,r){if(r.length===0)return null;const t=new Map(r.filter(c=>c.serviceId).map(c=>[c.serviceId,c]));return[...e].sort((c,a)=>I(c,a)).map(c=>t.get(c.id)??null).find(c=>c!==null)??r[0]??null}function I(e,r){const t=f(e.role)-f(r.role);return t!==0?t:e.name.localeCompare(r.name)}function f(e){switch(e){case"frontend":return 0;case"backend":return 1;case"worker":return 2;case"mock":return 3;default:return 4}}function K(e){const[r,t]=u.useState({loading:!1,error:null,templates:[],runtimeStatuses:[],lastRefreshedAt:null}),o=u.useCallback(async()=>{if(!(e!=null&&e.id)){t({loading:!1,error:null,templates:[],runtimeStatuses:[],lastRefreshedAt:null});return}t(a=>({...a,loading:!0,error:null}));try{const[a,n]=await Promise.all([j(e.id),p(e.id)]);t({loading:!1,error:null,templates:T(a.items),runtimeStatuses:n.items,lastRefreshedAt:new Date().toISOString()})}catch(a){throw t(n=>({...n,loading:!1,error:a instanceof Error?a.message:s("shell.workspaceDetailRegisteredDebugLoadFailed")})),a}},[e==null?void 0:e.id]),c=u.useCallback(async()=>{if(e!=null&&e.id){t(a=>({...a,loading:!0,error:null}));try{const a=await p(e.id);t(n=>({...n,loading:!1,error:null,runtimeStatuses:a.items,lastRefreshedAt:new Date().toISOString()}))}catch(a){throw t(n=>({...n,loading:!1,error:a instanceof Error?a.message:s("shell.workspaceDetailRegisteredDebugActionRefreshFailed")})),a}}},[e==null?void 0:e.id]);return u.useEffect(()=>{o().catch(()=>{})},[o]),{...r,refreshAll:o,refreshRuntime:c}}function T(e){return[...e].sort((r,t)=>{const o=r.cwd.localeCompare(t.cwd);return o!==0?o:r.name.localeCompare(t.name)})}export{O as D,U as a,F as b,_ as c,B as d,V as e,z as f,H as g,$ as h,Z as i,K as j,W as k,G as l,q as m,E as r,J as u};
|
|
1
|
+
import{j as l,t as s,b as u}from"./index-FOhyOpGY.js";import{aZ as x,a_ as k}from"./WorkbenchLayout-DViAJhHz.js";import{l as j,a as p}from"./terminal-runtime-meta-2zvacxvM.js";function O({workspace:e,state:r,variant:t}){return e?t==="mobile"?l.jsx(v,{workspace:e,state:r}):l.jsx(P,{workspace:e,state:r}):l.jsx("p",{className:"workbench-section-empty",children:s("shell.workspaceDetailMissingBody")})}function v({workspace:e,state:r}){const t=r.primaryAnalysis,o=r.analyses.length;return l.jsx(l.Fragment,{children:l.jsxs("section",{className:"mobile-feature-panel surface-card mobile-workspace-composition-panel",children:[l.jsx("div",{className:"mobile-feature-section-header",children:l.jsx("div",{children:l.jsx("h2",{children:s("shell.workspaceDetailRegisteredDebugAnalysisTitle")})})}),r.loading&&t===null?l.jsx("p",{children:s("common.loading")}):null,r.error?l.jsx("p",{className:"status-text","data-tone":"error",children:r.error}):null,t?l.jsxs("div",{className:"mobile-detail-grid mobile-workspace-detail-grid",children:[l.jsxs("div",{className:"mobile-detail-metric",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugFrameworkLabel")}),l.jsx("strong",{children:t.primaryFramework??s("common.unknown")})]}),l.jsxs("div",{className:"mobile-detail-metric",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugConfidenceLabel")}),l.jsx("strong",{children:y(t.confidence)})]}),l.jsxs("div",{className:"mobile-detail-metric",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugSummaryServiceCountLabel")}),l.jsx("strong",{children:o})]}),l.jsxs("div",{className:"mobile-detail-metric",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugCompatibilityLabel")}),l.jsx("strong",{children:D(t.compatibilityLevel)})]}),l.jsxs("div",{className:"mobile-detail-metric",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugLastAnalyzedAtLabel")}),l.jsx("strong",{children:r.lastAnalyzedAt??s("shell.workspaceDetailDebugFrameworkNoteEmpty")})]}),l.jsxs("div",{className:"mobile-detail-metric mobile-detail-metric-wide",children:[l.jsx("span",{children:s("shell.manageWorkspacePathLabel")}),l.jsx("strong",{children:e.path})]})]}):null]})})}function P({workspace:e,state:r}){const t=r.primaryAnalysis,o=r.analyses.length;return l.jsxs("section",{className:"debug-readiness-section surface-card",children:[l.jsx("div",{className:"debug-readiness-section-header",children:l.jsxs("div",{children:[l.jsx("h3",{children:s("shell.workspaceDetailRegisteredDebugAnalysisTitle")}),l.jsx("p",{children:s("shell.workspaceDetailRegisteredDebugAnalysisDescription")})]})}),r.loading&&t===null?l.jsx("p",{className:"workbench-section-empty",children:s("common.loading")}):null,r.error?l.jsx("p",{className:"workbench-manage-status status-text","data-tone":"error",children:r.error}):null,t?l.jsxs("div",{className:"debug-readiness-summary-grid",children:[l.jsxs("article",{className:"debug-readiness-summary-card",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugFrameworkLabel")}),l.jsx("strong",{children:t.primaryFramework??s("common.unknown")})]}),l.jsxs("article",{className:"debug-readiness-summary-card",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugConfidenceLabel")}),l.jsx("strong",{children:y(t.confidence)}),l.jsx("small",{children:r.lastAnalyzedAt??s("shell.workspaceDetailDebugFrameworkNoteEmpty")})]}),l.jsxs("article",{className:"debug-readiness-summary-card",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugSummaryServiceCountLabel")}),l.jsx("strong",{children:o})]}),l.jsxs("article",{className:"debug-readiness-summary-card",children:[l.jsx("span",{children:s("shell.workspaceDetailDebugCompatibilityLabel")}),l.jsx("strong",{children:D(t.compatibilityLevel)})]}),l.jsxs("article",{className:"debug-readiness-summary-card",children:[l.jsx("span",{children:s("shell.manageWorkspacePathLabel")}),l.jsx("strong",{title:e.path,children:e.path})]})]}):null]})}function D(e){switch(e){case"supported":return s("shell.workspaceDetailDebugCompatibilitySupported");case"conditional":return s("shell.workspaceDetailDebugCompatibilityConditional");case"unsupported":return s("shell.workspaceDetailDebugCompatibilityUnsupported");default:return s("shell.workspaceDetailDebugCompatibilityUnknown")}}function y(e){switch(e){case"high":return s("shell.workspaceDetailDebugConfidenceHigh");case"medium":return s("shell.workspaceDetailDebugConfidenceMedium");case"low":return s("shell.workspaceDetailDebugConfidenceLow");default:return s("common.unknown")}}function F(e,r,t){const o=new Map(r.map(i=>[i.templateId,i])),c=new Map(((t==null?void 0:t.services)??[]).map(i=>[i.serviceId,i])),a=new Map;for(const i of e)i.port!==null&&a.set(i.port,(a.get(i.port)??0)+1);const n=e.map(i=>{const g=o.get(i.id)??null,m=c.get(i.id)??null;if(m){const w=m.autoStartAllowed?m.leasedPort!==null&&m.leasedPort!==i.port?"orchestrated":"runnable":"blocked";return{template:i,runtimeStatus:g,planItem:m,decision:w,assignedPort:m.leasedPort,reason:A(i,m)}}return i.port===null?{template:i,runtimeStatus:g,planItem:null,decision:"blocked",assignedPort:null,reason:s("shell.workspaceDetailRegisteredDebugPlanReasonPortMissing")}:(a.get(i.port)??0)>1||g!=null&&g.occupied?{template:i,runtimeStatus:g,planItem:null,decision:"orchestrated",assignedPort:i.port,reason:(a.get(i.port)??0)>1?s("shell.workspaceDetailRegisteredDebugPlanReasonDuplicatePortWillOrchestrate"):s("shell.workspaceDetailRegisteredDebugPlanReasonPortOccupiedWillOrchestrate")}:{template:i,runtimeStatus:g,planItem:null,decision:"runnable",assignedPort:i.port,reason:s("shell.workspaceDetailRegisteredDebugPlanReasonRunnable")}}),h=n.filter(i=>i.decision==="runnable").length,b=n.filter(i=>i.decision==="orchestrated").length,d=n.filter(i=>i.decision==="blocked").length;return{generatedAt:(t==null?void 0:t.runtimeSession.createdAt)??new Date().toISOString(),autoStartAllowed:(t==null?void 0:t.autoStartAllowed)??(n.length>0&&d===0),runnableCount:h,orchestratedCount:b,blockedCount:d,items:n}}function R(e){return e.autoStartAllowed&&e.blockedCount===0}function E(e,r){return r===0?"danger":R(e)?"success":"warn"}function z(e,r){return r===0?s("shell.workspaceDetailRegisteredDebugOverallStatusEmpty"):R(e)?s("shell.workspaceDetailRegisteredDebugOverallStatusReady"):s("shell.workspaceDetailRegisteredDebugOverallStatusPartial")}function W(e,r){return r===0?s("shell.workspaceDetailRegisteredDebugTemplatesEmpty"):s("shell.workspaceDetailRegisteredDebugOverallSummary",{runnable:e.runnableCount,orchestrated:e.orchestratedCount,blocked:e.blockedCount})}function $(e){const r=e.args.join(" ").trim();return r?`${e.command} ${r}`:e.command}function B(e,r){const t=r.replace(/[\\/]+$/,"");return e===t?".":e.startsWith(`${t}/`)||e.startsWith(`${t}\\`)?e.slice(t.length+1):e}function V(e){return e===null?s("shell.workspaceDetailRegisteredDebugTemplatePortMissing"):String(e)}function U(e){if(!e)return s("shell.workspaceDetailDebugPortEmpty");const r=new Date(e);return Number.isNaN(r.getTime())?e:new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(r)}function q(e,r){if(e.port!==null)return r!=null&&r.occupied?"warn":"success"}function _(e,r){return e.port===null?s("shell.workspaceDetailRegisteredDebugTemplateStatusUntracked"):r!=null&&r.occupied?s("shell.workspaceDetailRegisteredDebugTemplateStatusOccupied"):s("shell.workspaceDetailRegisteredDebugTemplateStatusIdle")}function H(e){return e!=null&&e.occupied?e.processId&&e.processName?`PID ${e.processId} · ${e.processName}`:e.processId?`PID ${e.processId}`:e.processName??s("shell.workspaceDetailRegisteredDebugRuntimeUnknown"):s("shell.workspaceDetailRegisteredDebugRuntimeIdle")}function Z(e,r){return e.port===null?s("shell.workspaceDetailRegisteredDebugPlanReasonPortMissing"):r!=null&&r.occupied?s("shell.workspaceDetailRegisteredDebugPlanReasonPortOccupiedWillOrchestrate"):s("shell.workspaceDetailRegisteredDebugPlanReasonRunnable")}function G(e){switch(e){case"runnable":return s("shell.workspaceDetailRegisteredDebugPlanActionStart");case"orchestrated":return s("shell.workspaceDetailRegisteredDebugPlanActionOrchestrated");default:return s("shell.workspaceDetailRegisteredDebugPlanActionBlocked")}}function A(e,r){var t;return r.missingRequirements.length>0?r.missingRequirements.map(o=>C(o)).join(";"):(t=r.aiFallback)!=null&&t.eligible?r.aiFallback.reason:r.leasedPort!==null&&r.leasedPort!==e.port?s("shell.workspaceDetailRegisteredDebugPlanReasonPortOrchestrated",{port:r.leasedPort}):Object.keys(r.envPatch).length>0?s("shell.workspaceDetailRegisteredDebugPlanReasonServiceDiscoveryInjected"):s("shell.workspaceDetailRegisteredDebugPlanReasonRunnable")}function C(e){switch(e){case"analysis":return s("shell.workspaceDetailRegisteredDebugPlanReasonAnalysisMissing");case"service_discovery":return s("shell.workspaceDetailRegisteredDebugPlanReasonServiceDiscoveryMissing");case"callback":return s("shell.workspaceDetailRegisteredDebugPlanReasonCallbackMissing");case"port":return s("shell.workspaceDetailRegisteredDebugPlanReasonPortMissing");default:return e}}function J(e){const[r,t]=u.useState({loading:!1,error:null,targetId:null,targetSourceType:null,services:[],analyses:[],matrixItems:[]}),[o,c]=u.useState(0),a=u.useCallback(()=>{c(d=>d+1)},[]);u.useEffect(()=>{if(!(e!=null&&e.id)||!e.path){t({loading:!1,error:null,targetId:null,targetSourceType:null,services:[],analyses:[],matrixItems:[]});return}let d=!1;return t(i=>({...i,loading:!0,error:null})),(async()=>{try{const[i,g]=await Promise.all([x({workspaceId:e.id,rootPath:e.path}),k()]);if(d)return;t({loading:!1,error:null,targetId:i.target.id,targetSourceType:i.target.sourceType,services:i.services,analyses:i.analyses,matrixItems:g.items})}catch(i){if(d)return;t({loading:!1,error:i instanceof Error?i.message:s("shell.workspaceDetailDebugAnalyzeFailed"),targetId:null,targetSourceType:null,services:[],analyses:[],matrixItems:[]})}})(),()=>{d=!0}},[o,e==null?void 0:e.id,e==null?void 0:e.path]);const n=u.useMemo(()=>N(r.services,r.analyses),[r.analyses,r.services]),h=u.useMemo(()=>r.matrixItems.find(d=>d.framework===((n==null?void 0:n.primaryFramework)??"unknown"))??null,[n==null?void 0:n.primaryFramework,r.matrixItems]),b=u.useMemo(()=>{var d;return((d=r.analyses[0])==null?void 0:d.createdAt)??null},[r.analyses]);return{...r,primaryAnalysis:n,currentCompatibilityItem:h,lastAnalyzedAt:b,refresh:a}}function N(e,r){if(r.length===0)return null;const t=new Map(r.filter(c=>c.serviceId).map(c=>[c.serviceId,c]));return[...e].sort((c,a)=>I(c,a)).map(c=>t.get(c.id)??null).find(c=>c!==null)??r[0]??null}function I(e,r){const t=f(e.role)-f(r.role);return t!==0?t:e.name.localeCompare(r.name)}function f(e){switch(e){case"frontend":return 0;case"backend":return 1;case"worker":return 2;case"mock":return 3;default:return 4}}function K(e){const[r,t]=u.useState({loading:!1,error:null,templates:[],runtimeStatuses:[],lastRefreshedAt:null}),o=u.useCallback(async()=>{if(!(e!=null&&e.id)){t({loading:!1,error:null,templates:[],runtimeStatuses:[],lastRefreshedAt:null});return}t(a=>({...a,loading:!0,error:null}));try{const[a,n]=await Promise.all([j(e.id),p(e.id)]);t({loading:!1,error:null,templates:T(a.items),runtimeStatuses:n.items,lastRefreshedAt:new Date().toISOString()})}catch(a){throw t(n=>({...n,loading:!1,error:a instanceof Error?a.message:s("shell.workspaceDetailRegisteredDebugLoadFailed")})),a}},[e==null?void 0:e.id]),c=u.useCallback(async()=>{if(e!=null&&e.id){t(a=>({...a,loading:!0,error:null}));try{const a=await p(e.id);t(n=>({...n,loading:!1,error:null,runtimeStatuses:a.items,lastRefreshedAt:new Date().toISOString()}))}catch(a){throw t(n=>({...n,loading:!1,error:a instanceof Error?a.message:s("shell.workspaceDetailRegisteredDebugActionRefreshFailed")})),a}}},[e==null?void 0:e.id]);return u.useEffect(()=>{o().catch(()=>{})},[o]),{...r,refreshAll:o,refreshRuntime:c}}function T(e){return[...e].sort((r,t)=>{const o=r.cwd.localeCompare(t.cwd);return o!==0?o:r.name.localeCompare(t.name)})}export{O as D,U as a,F as b,_ as c,B as d,V as e,z as f,H as g,$ as h,Z as i,K as j,W as k,G as l,q as m,E as r,J as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as s,t as h}from"./index-FOhyOpGY.js";function Q({heading:e,description:t,actions:n,tone:a="default",className:r,children:l}){return s.jsxs("section",{className:f("modal-section",r),"data-tone":a,children:[e||t||n?s.jsxs("div",{className:"modal-section-header",children:[s.jsxs("div",{className:"modal-section-copy",children:[e?s.jsx("strong",{className:"modal-section-heading",children:e}):null,t?s.jsx("p",{className:"modal-section-description",children:t}):null]}),n?s.jsx("div",{className:"modal-section-actions",children:n}):null]}):null,l]})}function X({label:e,description:t,className:n,htmlFor:a,children:r}){return s.jsxs("div",{className:f("workbench-modal-field","modal-field",n),children:[s.jsxs("div",{className:"modal-field-copy",children:[a?s.jsx("label",{className:"modal-field-label",htmlFor:a,children:e}):s.jsx("span",{className:"modal-field-label",children:e}),t?s.jsx("span",{className:"modal-field-description",children:t}):null]}),r]})}function Y({align:e="end",stack:t=!1,className:n,children:a,...r}){return s.jsx("div",{className:f("workbench-modal-actions","modal-actions",n),"data-align":e,"data-stack":t?"true":void 0,...r,children:a})}function Z({compact:e=!1,className:t,children:n,...a}){return s.jsx("div",{className:f("modal-list",t),"data-compact":e?"true":void 0,...a,children:n})}function ee(e){const{as:t="div",label:n,description:a,leading:r,trailing:l,tone:o="default",selected:u=!1,className:d,children:w,...b}=e,P={className:f("modal-list-item",d),"data-tone":o!=="default"?o:void 0,"data-selected":u?"true":void 0,"data-interactive":t==="button"?"true":void 0},S=s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"modal-list-item-main",children:[r?s.jsx("div",{className:"modal-list-item-leading",children:r}):null,s.jsxs("div",{className:"modal-list-item-copy",children:[n?s.jsx("span",{className:"modal-list-item-label",children:n}):null,a?s.jsx("span",{className:"modal-list-item-description",children:a}):null,w]})]}),l?s.jsx("div",{className:"modal-list-item-trailing",children:l}):null]});if(t==="button"){const I=b;return s.jsx("button",{type:I.type??"button",...I,...P,children:S})}return s.jsx("div",{...b,...P,children:S})}function te({title:e,description:t,action:n,className:a,compact:r=!1}){return s.jsxs("div",{className:f("modal-empty-state",a),"data-compact":r?"true":void 0,children:[s.jsx("strong",{className:"modal-empty-state-title",children:e}),t?s.jsx("p",{className:"modal-empty-state-description",children:t}):null,n?s.jsx("div",{className:"modal-empty-state-action",children:n}):null]})}function ne({tone:e="default",className:t,children:n,...a}){return s.jsx("span",{className:f("modal-tag",t),"data-tone":e!=="default"?e:void 0,...a,children:n})}function f(...e){return e.filter(Boolean).join(" ")}const v={"parallel-group-1":{accent:"#0ea5e9",soft:"rgba(14, 165, 233, 0.16)",surface:"rgba(14, 165, 233, 0.08)"},"parallel-group-2":{accent:"#10b981",soft:"rgba(16, 185, 129, 0.16)",surface:"rgba(16, 185, 129, 0.08)"},"parallel-group-3":{accent:"#f59e0b",soft:"rgba(245, 158, 11, 0.16)",surface:"rgba(245, 158, 11, 0.08)"},"parallel-group-4":{accent:"#ec4899",soft:"rgba(236, 72, 153, 0.16)",surface:"rgba(236, 72, 153, 0.08)"},"parallel-group-5":{accent:"#8b5cf6",soft:"rgba(139, 92, 246, 0.16)",surface:"rgba(139, 92, 246, 0.08)"},"parallel-group-6":{accent:"#f97316",soft:"rgba(249, 115, 22, 0.16)",surface:"rgba(249, 115, 22, 0.08)"}},T=2600,C="workbench.parallel.pane.palette";let m=null;const N=["#34C759","#22C55E","#14B8A6","#06B6D4","#0EA5E9","#3B82F6","#6366F1","#8B5CF6","#A855F7","#D946EF","#EC4899","#F43F5E","#EF4444","#F97316","#F59E0B","#EAB308","#84CC16","#10B981"];function D(e="create"){return e==="append"?{totalDurationMs:1200,sidebarCollapseDurationMs:0,paneEnterDelayMs:0,paneEnterDurationMs:1e3,gridRevealDelayMs:0,gridRevealDurationMs:920,shellExpandDurationMs:0,paneStaggerMs:80}:{totalDurationMs:2e3,sidebarCollapseDurationMs:720,paneEnterDelayMs:520,paneEnterDurationMs:1480,gridRevealDelayMs:420,gridRevealDurationMs:1360,shellExpandDurationMs:720,paneStaggerMs:96}}function L(e){var n,a;const t=(n=e.displayParentSessionId)==null?void 0:n.trim();return t||((a=e.parentSessionId)==null?void 0:a.trim())||null}function ae(e){var a;const t=(a=e==null?void 0:e.colorToken)==null?void 0:a.trim();if(!t)return;const n=v[t]??v["parallel-group-1"];return{"--parallel-group-accent":n.accent,"--parallel-group-soft":n.soft,"--parallel-group-surface":n.surface}}function re(e){const t=g(e.overrideColor)??k(e.groupId,e.ordinal);return{"--parallel-group-accent":t,"--parallel-group-soft":M(t,.08),"--parallel-group-surface":M(t,.03)}}function se(e){if(typeof window>"u")return null;const t=e.trim();if(!t)return null;const n=x();return g(n[t]??null)}function le(e,t){if(typeof window>"u")return g(t);const n=e.trim();if(!n)return null;const a=x(),r=g(t);return r?a[n]=r:delete a[n],window.localStorage.setItem(C,JSON.stringify(a)),r}function k(e,t){const n=N.length,a=Math.abs(U(e))%n;return N[(a+t*5)%n]}function oe(e){return e?e.role==="anchor"?h("shell.parallelGroupAnchorBadge"):h("shell.parallelGroupMemberBadge"):null}function ie(e){return e?h("shell.parallelGroupBadge",{count:e.memberCount}):null}function ce(e){var n;return((n=e==null?void 0:e.branchName)==null?void 0:n.trim())||null}function ue(e){var n,a,r;return((a=(n=e==null?void 0:e.parallelGroup)==null?void 0:n.groupId)==null?void 0:a.trim())?((r=e==null?void 0:e.sessionIsolatedWorkspace)==null?void 0:r.lifecycleStatus)!=="promoted":!1}function de(e,t){return t&&(t.lifecycleStatus==="active"||t.lifecycleStatus==="removing")?t.sourceWorkspaceId:e.workspaceId}function fe(e,t){return t&&(t.lifecycleStatus==="active"||t.lifecycleStatus==="promoted")?t.workspaceId:e.workspaceId}function me(e,t="create"){m={groupId:e,createdAt:Date.now(),...D(t)}}function pe(e){return!m||m.groupId!==e?null:Date.now()-m.createdAt>T?(m=null,null):m}function x(){if(typeof window>"u")return{};const e=window.localStorage.getItem(C);if(!e)return{};try{const t=JSON.parse(e);return!t||typeof t!="object"?{}:t}catch{return{}}}function U(e){let t=0;for(const n of e)t=t*31+n.charCodeAt(0)|0;return t}function g(e){const t=(e==null?void 0:e.trim().toUpperCase())??"";return/^#[0-9A-F]{6}$/.test(t)?t:null}function M(e,t){const n=Math.max(0,Math.min(t,1)),a=Number.parseInt(e.slice(1,3),16),r=Number.parseInt(e.slice(3,5),16),l=Number.parseInt(e.slice(5,7),16);return`rgba(${a}, ${r}, ${l}, ${n})`}function R(e,t){const n=new Map(e.map(l=>[t.getId(l),l])),a=new Map,r=[];for(const l of e){const o=W(l,n,t);if(!o){r.push(l);continue}const u=a.get(o)??[];a.set(o,[...u,l])}return[...r].sort(t.compare).map(l=>E(l,0,a,t,new Set))}function p(e){return Array.isArray(e==null?void 0:e.children)?e.children:[]}function _(e){return e.flatMap(t=>[t.item,..._(p(t))])}function B(e){return e.flatMap(t=>[t,...B(p(t))])}function F(e,t){return e.some(n=>t(n.item)||F(p(n),t))}function y(e,t,n){return e?n(e.item)===t?!0:p(e).some(a=>y(a,t,n)):!1}function O(e,t,n){for(const a of e){const r=n(a.item);if(r===t)return[];const l=O(p(a),t,n);if(y(a,t,n)&&l.length>=0)return[r,...l]}return[]}function E(e,t,n,a,r){const l=a.getId(e),o=new Set(r);o.add(l);const u=[...n.get(l)??[]].filter(d=>!o.has(a.getId(d))).sort(a.compare).map(d=>E(d,t+1,n,a,o));return{item:e,depth:t,children:u}}function W(e,t,n){const a=A(n.getParentId(e));if(!a)return null;const r=t.get(a);if(!r)return null;const l=new Set([n.getId(e)]);let o=r;for(;o;){const u=n.getId(o);if(l.has(u))return null;l.add(u);const d=A(n.getParentId(o));if(!d||(o=t.get(d),!o))return a}return a}function A(e){const t=e==null?void 0:e.trim();return t||null}function ge(){return"/workspaces"}function c(e){return`/workspaces/${encodeURIComponent(e)}`}function he(e,t){return i(c(e),t)}function be(e,t){return i(`${c(e)}/debug`,t)}function Pe(e,t){return i(`/workspaces/${encodeURIComponent(e)}/sessions`,t)}function G(e,t,n){return i(`/workspaces/${encodeURIComponent(e)}/sessions/${encodeURIComponent(t)}`,n)}function z(){return"/affairs"}function Se(e){return z()}function Ie(e,t,n){const a=`${c(e)}/tools`;if(!t)return i(a,n);const r=new URLSearchParams({tab:t});return i(`${a}?${r.toString()}`,n)}function ve(e,t){return i(`${c(e)}/tools/files`,t)}function Ne(e,t){return i(`${c(e)}/tools/git`,t)}function i(e,t){const n=(t==null?void 0:t.hostId)==="current"?null:t==null?void 0:t.hostId;if(!n)return e;const a=e.includes("?")?"&":"?";return`${e}${a}targetHostId=${encodeURIComponent(n)}`}function Me(e,t){return i(`${c(e)}/tools/processes`,t)}function Ae(e,t){return i(`${c(e)}/plugins`,t)}function Ce(e,t,n){return i(`${c(e)}/plugins/${encodeURIComponent(t)}`,n)}function xe(e,t,n){return i(`${c(e)}/plugins/${encodeURIComponent(t)}/run`,n)}function ye(e,t){return i(`${c(e)}/terminals`,t)}function Ee(e,t,n){const a=`${c(e)}/butler`;if(!t)return i(a,n);const r=new URLSearchParams({tab:t});return i(`${a}?${r.toString()}`,n)}function $e(e){return j(e.flatMap(t=>[...t.sessions.map(n=>({session:n,workspace:t.workspace})),...$(t.childWorktrees??[])])).sort((t,n)=>(n.session.lastMessageAt??n.session.updatedAt).localeCompare(t.session.lastMessageAt??t.session.updatedAt))}function je(e,t){return R(j(e),{getId:n=>n.session.sessionId,getParentId:n=>H(n.session,t),compare:V})}function H(e,t){var n;return(t==null?void 0:t.mode)==="mobile"?((n=e.parentSessionId)==null?void 0:n.trim())||null:L(e)}function we(e,t,n){const a=J(),r=G(e,a,n),l=new URLSearchParams({provider:t}),o=r.includes("?")?"&":"?";return`${r}${o}${l.toString()}`}function J(){const e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?`draft-${e.randomUUID()}`:`draft-${Date.now()}-${Math.random().toString(16).slice(2)}`}function V(e,t){return(t.session.lastMessageAt??t.session.updatedAt).localeCompare(e.session.lastMessageAt??e.session.updatedAt)}function $(e){return e.flatMap(t=>[...t.sessions.map(n=>({session:n,workspace:t.workspace})),...$(t.children)])}function j(e){const t=[],n=new Set;for(const a of e){const r=a.session.sessionId.trim();!r||n.has(r)||(n.add(r),t.push(a))}return t}export{me as A,H as B,Ie as C,Ee as D,Me as E,he as F,ve as G,Ne as H,oe as I,B as J,ne as K,Ce as L,Y as M,Ae as N,xe as O,N as P,z as Q,we as R,R as S,be as T,L as U,_ as V,Se as a,Pe as b,Q as c,X as d,G as e,$e as f,je as g,D as h,p as i,pe as j,se as k,ae as l,re as m,ie as n,ce as o,fe as p,ye as q,de as r,O as s,F as t,Z as u,ee as v,le as w,te as x,ge as y,ue as z};
|
package/dist/public/index.html
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
|
6
6
|
<title>CodingNS</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-FOhyOpGY.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DREvg1Yu.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="root"></div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-guard.js","sourceRoot":"","sources":["../../../src/middlewares/auth-guard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth-guard.js","sourceRoot":"","sources":["../../../src/middlewares/auth-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FastifyReply, FastifyRequest } from "fastify";
|
|
2
|
+
import type { PeerHostService } from "./peer-host-service.js";
|
|
3
|
+
export declare class HostApiProxyService {
|
|
4
|
+
private readonly peerHostService;
|
|
5
|
+
private readonly fetchImpl;
|
|
6
|
+
constructor(peerHostService: PeerHostService, fetchImpl?: typeof fetch);
|
|
7
|
+
proxy(request: FastifyRequest, reply: FastifyReply): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare function ensureAllowedProxyPath(method: string, pathname: string): void;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { AppError } from "../../shared/errors/app-error.js";
|
|
2
|
+
const HOP_BY_HOP_HEADERS = new Set([
|
|
3
|
+
"connection",
|
|
4
|
+
"keep-alive",
|
|
5
|
+
"proxy-authenticate",
|
|
6
|
+
"proxy-authorization",
|
|
7
|
+
"te",
|
|
8
|
+
"trailer",
|
|
9
|
+
"transfer-encoding",
|
|
10
|
+
"upgrade",
|
|
11
|
+
"host",
|
|
12
|
+
"content-length",
|
|
13
|
+
"authorization",
|
|
14
|
+
]);
|
|
15
|
+
const ALLOWED_PROXY_METHODS = new Set([
|
|
16
|
+
"GET",
|
|
17
|
+
"HEAD",
|
|
18
|
+
"POST",
|
|
19
|
+
"PUT",
|
|
20
|
+
"PATCH",
|
|
21
|
+
"DELETE",
|
|
22
|
+
]);
|
|
23
|
+
const DENIED_PROXY_PATH_PREFIXES = [
|
|
24
|
+
"/api/auth",
|
|
25
|
+
"/api/public",
|
|
26
|
+
"/api/peer-hosts",
|
|
27
|
+
"/api/host-proxy",
|
|
28
|
+
];
|
|
29
|
+
export class HostApiProxyService {
|
|
30
|
+
peerHostService;
|
|
31
|
+
fetchImpl;
|
|
32
|
+
constructor(peerHostService, fetchImpl = fetch) {
|
|
33
|
+
this.peerHostService = peerHostService;
|
|
34
|
+
this.fetchImpl = fetchImpl;
|
|
35
|
+
}
|
|
36
|
+
async proxy(request, reply) {
|
|
37
|
+
const ownerUserId = request.auth?.user.userId;
|
|
38
|
+
if (!ownerUserId) {
|
|
39
|
+
throw new AppError({
|
|
40
|
+
statusCode: 401,
|
|
41
|
+
errorCode: "UNAUTHORIZED",
|
|
42
|
+
detail: "当前请求缺少有效登录态",
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
const params = request.params;
|
|
46
|
+
const peerHostId = typeof params.peerHostId === "string" ? params.peerHostId : "";
|
|
47
|
+
const targetPath = normalizeProxyPath(params["*"]);
|
|
48
|
+
ensureAllowedProxyPath(request.method, targetPath);
|
|
49
|
+
const peerHost = this.peerHostService.ensureProxyReady(ownerUserId, peerHostId);
|
|
50
|
+
const accessToken = await this.peerHostService.getAccessTokenForProxy(ownerUserId, peerHost);
|
|
51
|
+
const targetUrl = `${peerHost.baseUrl}${targetPath}${readQueryString(request.url)}`;
|
|
52
|
+
const response = await this.fetchImpl(targetUrl, {
|
|
53
|
+
method: request.method,
|
|
54
|
+
headers: buildForwardHeaders(request, accessToken),
|
|
55
|
+
body: shouldForwardBody(request.method)
|
|
56
|
+
? JSON.stringify(request.body ?? {})
|
|
57
|
+
: undefined,
|
|
58
|
+
}).catch((error) => {
|
|
59
|
+
throw createPeerHostProxyFetchError(peerHostId, targetUrl, error);
|
|
60
|
+
});
|
|
61
|
+
if (response.status === 401) {
|
|
62
|
+
this.peerHostService.clearSession(ownerUserId, peerHostId);
|
|
63
|
+
}
|
|
64
|
+
forwardResponseHeaders(response, reply);
|
|
65
|
+
reply.status(response.status).send(await response.text());
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function normalizeProxyPath(value) {
|
|
69
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
70
|
+
throw new AppError({
|
|
71
|
+
statusCode: 400,
|
|
72
|
+
errorCode: "HOST_PROXY_PATH_REQUIRED",
|
|
73
|
+
detail: "缺少要代理的目标路径",
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const decoded = value.startsWith("/") ? value : `/${value}`;
|
|
77
|
+
return decoded.replace(/\/{2,}/g, "/");
|
|
78
|
+
}
|
|
79
|
+
export function ensureAllowedProxyPath(method, pathname) {
|
|
80
|
+
const normalizedMethod = method.toUpperCase();
|
|
81
|
+
if (!ALLOWED_PROXY_METHODS.has(normalizedMethod)) {
|
|
82
|
+
throw new AppError({
|
|
83
|
+
statusCode: 403,
|
|
84
|
+
errorCode: "HOST_PROXY_METHOD_NOT_ALLOWED",
|
|
85
|
+
detail: "这个请求方法不允许通过 Peer HOST 代理",
|
|
86
|
+
data: { method: normalizedMethod, pathname },
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
if (!pathname.startsWith("/api/")) {
|
|
90
|
+
throw new AppError({
|
|
91
|
+
statusCode: 403,
|
|
92
|
+
errorCode: "HOST_PROXY_PATH_NOT_ALLOWED",
|
|
93
|
+
detail: "只有正式 API 才允许通过 Peer HOST 代理",
|
|
94
|
+
data: { method: normalizedMethod, pathname },
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const deniedPrefix = DENIED_PROXY_PATH_PREFIXES.find((prefix) => pathname === prefix || pathname.startsWith(`${prefix}/`));
|
|
98
|
+
if (deniedPrefix) {
|
|
99
|
+
throw new AppError({
|
|
100
|
+
statusCode: 403,
|
|
101
|
+
errorCode: "HOST_PROXY_PATH_NOT_ALLOWED",
|
|
102
|
+
detail: "这个 API 路径不允许通过 Peer HOST 代理",
|
|
103
|
+
data: { method: normalizedMethod, pathname, deniedPrefix },
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function readQueryString(url) {
|
|
108
|
+
const index = url.indexOf("?");
|
|
109
|
+
return index >= 0 ? url.slice(index) : "";
|
|
110
|
+
}
|
|
111
|
+
function shouldForwardBody(method) {
|
|
112
|
+
const normalized = method.toUpperCase();
|
|
113
|
+
return normalized !== "GET" && normalized !== "HEAD";
|
|
114
|
+
}
|
|
115
|
+
function buildForwardHeaders(request, accessToken) {
|
|
116
|
+
const headers = new Headers();
|
|
117
|
+
for (const [name, value] of Object.entries(request.headers)) {
|
|
118
|
+
const normalized = name.toLowerCase();
|
|
119
|
+
if (HOP_BY_HOP_HEADERS.has(normalized)) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (Array.isArray(value)) {
|
|
123
|
+
headers.set(name, value.join(", "));
|
|
124
|
+
}
|
|
125
|
+
else if (typeof value === "string") {
|
|
126
|
+
headers.set(name, value);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
headers.set("authorization", `Bearer ${accessToken}`);
|
|
130
|
+
if (shouldForwardBody(request.method) && !headers.has("content-type")) {
|
|
131
|
+
headers.set("content-type", "application/json");
|
|
132
|
+
}
|
|
133
|
+
return headers;
|
|
134
|
+
}
|
|
135
|
+
function forwardResponseHeaders(response, reply) {
|
|
136
|
+
response.headers.forEach((value, name) => {
|
|
137
|
+
if (HOP_BY_HOP_HEADERS.has(name.toLowerCase())) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
reply.header(name, value);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
function createPeerHostProxyFetchError(peerHostId, targetUrl, error) {
|
|
144
|
+
const cause = readErrorCause(error);
|
|
145
|
+
const code = readErrorCode(cause) ?? readErrorCode(error);
|
|
146
|
+
return new AppError({
|
|
147
|
+
statusCode: 502,
|
|
148
|
+
errorCode: "PEER_HOST_PROXY_UNREACHABLE",
|
|
149
|
+
detail: "无法连接 Peer HOST,请确认目标 HOST 正在运行并且当前主机可以访问它",
|
|
150
|
+
data: {
|
|
151
|
+
peerHostId,
|
|
152
|
+
targetUrl,
|
|
153
|
+
causeCode: code,
|
|
154
|
+
causeMessage: cause instanceof Error
|
|
155
|
+
? cause.message
|
|
156
|
+
: error instanceof Error
|
|
157
|
+
? error.message
|
|
158
|
+
: String(error),
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
function readErrorCause(error) {
|
|
163
|
+
return typeof error === "object" && error !== null && "cause" in error
|
|
164
|
+
? error.cause
|
|
165
|
+
: null;
|
|
166
|
+
}
|
|
167
|
+
function readErrorCode(error) {
|
|
168
|
+
if (typeof error !== "object" || error === null || !("code" in error)) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
const code = error.code;
|
|
172
|
+
return typeof code === "string" && code.trim() ? code.trim() : null;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=host-api-proxy-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-api-proxy-service.js","sourceRoot":"","sources":["../../../../src/modules/peer-host/host-api-proxy-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FastifyReply, FastifyRequest } from "fastify";
|
|
2
|
+
import type { HostHandshakeService } from "./host-handshake.js";
|
|
3
|
+
export declare class HostHandshakeController {
|
|
4
|
+
private readonly hostHandshakeService;
|
|
5
|
+
constructor(hostHandshakeService: HostHandshakeService);
|
|
6
|
+
readonly getHandshake: (_request: FastifyRequest, reply: FastifyReply) => Promise<void>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export class HostHandshakeController {
|
|
2
|
+
hostHandshakeService;
|
|
3
|
+
constructor(hostHandshakeService) {
|
|
4
|
+
this.hostHandshakeService = hostHandshakeService;
|
|
5
|
+
}
|
|
6
|
+
getHandshake = async (_request, reply) => {
|
|
7
|
+
reply.send(this.hostHandshakeService.getHandshake());
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=host-handshake-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-handshake-controller.js","sourceRoot":"","sources":["../../../../src/modules/peer-host/host-handshake-controller.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,uBAAuB;IACL;IAA7B,YAA6B,oBAA0C;QAA1C,yBAAoB,GAApB,oBAAoB,CAAsB;IAAG,CAAC;IAElE,YAAY,GAAG,KAAK,EAC3B,QAAwB,EACxB,KAAmB,EACJ,EAAE;QACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC;CACH"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { InstanceRelayTunnelIdentityRepository } from "../../storage/repositories/instance-relay-tunnel-identity-repository.js";
|
|
2
|
+
export declare const PEER_HOST_API_COMPATIBILITY = "2026-06-peer-host-proxy-v1";
|
|
3
|
+
export declare const HOST_HANDSHAKE_PRODUCT = "CodingNS";
|
|
4
|
+
export interface HostHandshakeDto {
|
|
5
|
+
product: typeof HOST_HANDSHAKE_PRODUCT;
|
|
6
|
+
version: string;
|
|
7
|
+
apiCompatibility: string;
|
|
8
|
+
hostFingerprint: string | null;
|
|
9
|
+
time: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class HostHandshakeService {
|
|
12
|
+
private readonly relayTunnelIdentityRepository?;
|
|
13
|
+
constructor(relayTunnelIdentityRepository?: Pick<InstanceRelayTunnelIdentityRepository, "findIdentity"> | undefined);
|
|
14
|
+
getHandshake(): HostHandshakeDto;
|
|
15
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { readHostPackageVersion } from "../client/client-service.js";
|
|
2
|
+
export const PEER_HOST_API_COMPATIBILITY = "2026-06-peer-host-proxy-v1";
|
|
3
|
+
export const HOST_HANDSHAKE_PRODUCT = "CodingNS";
|
|
4
|
+
export class HostHandshakeService {
|
|
5
|
+
relayTunnelIdentityRepository;
|
|
6
|
+
constructor(relayTunnelIdentityRepository) {
|
|
7
|
+
this.relayTunnelIdentityRepository = relayTunnelIdentityRepository;
|
|
8
|
+
}
|
|
9
|
+
getHandshake() {
|
|
10
|
+
return {
|
|
11
|
+
product: HOST_HANDSHAKE_PRODUCT,
|
|
12
|
+
version: readHostPackageVersion(),
|
|
13
|
+
apiCompatibility: PEER_HOST_API_COMPATIBILITY,
|
|
14
|
+
hostFingerprint: this.relayTunnelIdentityRepository?.findIdentity()?.keyFingerprint ??
|
|
15
|
+
null,
|
|
16
|
+
time: new Date().toISOString(),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=host-handshake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-handshake.js","sourceRoot":"","sources":["../../../../src/modules/peer-host/host-handshake.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,CAAC,MAAM,2BAA2B,GAAG,4BAA4B,CAAC;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAUjD,MAAM,OAAO,oBAAoB;IAEZ;IADnB,YACmB,6BAGhB;QAHgB,kCAA6B,GAA7B,6BAA6B,CAG7C;IACA,CAAC;IAEJ,YAAY;QACV,OAAO;YACL,OAAO,EAAE,sBAAsB;YAC/B,OAAO,EAAE,sBAAsB,EAAE;YACjC,gBAAgB,EAAE,2BAA2B;YAC7C,eAAe,EACb,IAAI,CAAC,6BAA6B,EAAE,YAAY,EAAE,EAAE,cAAc;gBAClE,IAAI;YACN,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC/B,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IncomingMessage } from "node:http";
|
|
2
|
+
import type { Duplex } from "node:stream";
|
|
3
|
+
import type { WsAuthGuard } from "../../ws/ws-auth-guard.js";
|
|
4
|
+
import type { PeerHostService } from "./peer-host-service.js";
|
|
5
|
+
export declare class HostWsProxyService {
|
|
6
|
+
private readonly wsAuthGuard;
|
|
7
|
+
private readonly peerHostService;
|
|
8
|
+
private readonly clientWss;
|
|
9
|
+
constructor(wsAuthGuard: WsAuthGuard, peerHostService: PeerHostService);
|
|
10
|
+
canHandleUpgrade(request: IncomingMessage): boolean;
|
|
11
|
+
handleUpgrade(request: IncomingMessage, socket: Duplex, head: Buffer): boolean;
|
|
12
|
+
private openProxy;
|
|
13
|
+
private bindSockets;
|
|
14
|
+
}
|