@lsamien/yaovi 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/build-info.json +44 -3
  2. package/desktop/main.mjs +18 -9
  3. package/dist/assets/{AboutDialog-BW25cB-W.js → AboutDialog-CJ9tCjSs.js} +2 -2
  4. package/dist/assets/AboutDialog-CJ9tCjSs.js.map +1 -0
  5. package/dist/assets/{BotAutomationsView-BoK2R918.js → BotAutomationsView-CsoI3js3.js} +2 -2
  6. package/dist/assets/{BotAutomationsView-BoK2R918.js.map → BotAutomationsView-CsoI3js3.js.map} +1 -1
  7. package/dist/assets/{BotControlSettingsPanel-BbhD2eC0.js → BotControlSettingsPanel-DIuBZlLu.js} +2 -2
  8. package/dist/assets/{BotControlSettingsPanel-BbhD2eC0.js.map → BotControlSettingsPanel-DIuBZlLu.js.map} +1 -1
  9. package/dist/assets/{BotPluginsDialog-DjwFw-lt.js → BotPluginsDialog-BsGszDMH.js} +2 -2
  10. package/dist/assets/{BotPluginsDialog-DjwFw-lt.js.map → BotPluginsDialog-BsGszDMH.js.map} +1 -1
  11. package/dist/assets/{BotSettingsPanel-DLmnL6pH.js → BotSettingsPanel-j3ThYgt2.js} +3 -3
  12. package/dist/assets/{BotSettingsPanel-DLmnL6pH.js.map → BotSettingsPanel-j3ThYgt2.js.map} +1 -1
  13. package/dist/assets/{ComputerPanel-CRIF1YEd.js → ComputerPanel-DdlgOm-B.js} +2 -2
  14. package/dist/assets/{ComputerPanel-CRIF1YEd.js.map → ComputerPanel-DdlgOm-B.js.map} +1 -1
  15. package/dist/assets/{ComputerViewerView-CizYWH2R.js → ComputerViewerView-I3adPI6O.js} +2 -2
  16. package/dist/assets/{ComputerViewerView-CizYWH2R.js.map → ComputerViewerView-I3adPI6O.js.map} +1 -1
  17. package/dist/assets/ConversationsView-CBhzg-9w.css +1 -0
  18. package/dist/assets/{ConversationsView-1igFR9VY.js → ConversationsView-CxVFk5sQ.js} +73 -73
  19. package/dist/assets/ConversationsView-CxVFk5sQ.js.map +1 -0
  20. package/dist/assets/{DevicePairingDialog-orOS4xqu.js → DevicePairingDialog-C307ARt-.js} +2 -2
  21. package/dist/assets/{DevicePairingDialog-orOS4xqu.js.map → DevicePairingDialog-C307ARt-.js.map} +1 -1
  22. package/dist/assets/{LocalVmSettingsPanel-DzM--Lpg.js → LocalVmSettingsPanel-Zs7CiXdf.js} +2 -2
  23. package/dist/assets/{LocalVmSettingsPanel-DzM--Lpg.js.map → LocalVmSettingsPanel-Zs7CiXdf.js.map} +1 -1
  24. package/dist/assets/{ProviderLoginDialog-Bw5KVMfi.js → ProviderLoginDialog-D3mqdAlo.js} +2 -2
  25. package/dist/assets/{ProviderLoginDialog-Bw5KVMfi.js.map → ProviderLoginDialog-D3mqdAlo.js.map} +1 -1
  26. package/dist/assets/{RunnerSettingsPanel-B-fwuBEs.js → RunnerSettingsPanel-DjMGnXGP.js} +2 -2
  27. package/dist/assets/{RunnerSettingsPanel-B-fwuBEs.js.map → RunnerSettingsPanel-DjMGnXGP.js.map} +1 -1
  28. package/dist/assets/{StandaloneDialog-7GkhtRlT.js → StandaloneDialog-BXCK22Dx.js} +2 -2
  29. package/dist/assets/{StandaloneDialog-7GkhtRlT.js.map → StandaloneDialog-BXCK22Dx.js.map} +1 -1
  30. package/dist/assets/{UpdateCheckDialog-DYiM4xBv.js → UpdateCheckDialog-DAY0VEQm.js} +2 -2
  31. package/dist/assets/{UpdateCheckDialog-DYiM4xBv.js.map → UpdateCheckDialog-DAY0VEQm.js.map} +1 -1
  32. package/dist/assets/{UsageView-D1cjS1hy.js → UsageView-DNwG8LAx.js} +2 -2
  33. package/dist/assets/{UsageView-D1cjS1hy.js.map → UsageView-DNwG8LAx.js.map} +1 -1
  34. package/dist/assets/{WorkspaceKnowledgePanel-DcGdLRS1.js → WorkspaceKnowledgePanel-hy_IkIJI.js} +2 -2
  35. package/dist/assets/{WorkspaceKnowledgePanel-DcGdLRS1.js.map → WorkspaceKnowledgePanel-hy_IkIJI.js.map} +1 -1
  36. package/dist/assets/{WorkspaceRoutinesPanel-DLntimKs.js → WorkspaceRoutinesPanel-B7PkBP7x.js} +2 -2
  37. package/dist/assets/{WorkspaceRoutinesPanel-DLntimKs.js.map → WorkspaceRoutinesPanel-B7PkBP7x.js.map} +1 -1
  38. package/dist/assets/{WorkstreamsView-DMoeV8Eu.js → WorkstreamsView-BeE2TRXK.js} +2 -2
  39. package/dist/assets/{WorkstreamsView-DMoeV8Eu.js.map → WorkstreamsView-BeE2TRXK.js.map} +1 -1
  40. package/dist/assets/{index-D0pMYnOi.js → index-D11cgXI9.js} +3 -3
  41. package/dist/assets/{index-D0pMYnOi.js.map → index-D11cgXI9.js.map} +1 -1
  42. package/dist/assets/{pdf-BCisgslg.js → pdf-BjTcV6As.js} +2 -2
  43. package/dist/assets/{pdf-BCisgslg.js.map → pdf-BjTcV6As.js.map} +1 -1
  44. package/dist/index.html +1 -1
  45. package/dist-server/server/botControl.js +13 -1
  46. package/dist-server/server/desktopEnvironments.js +10 -9
  47. package/dist-server/server/desktopHostProtocol.js +1 -1
  48. package/dist-server/server/harness/agentRuntime.js +22 -8
  49. package/dist-server/server/workspaceDialoguePolicy.js +3 -1
  50. package/dist-server/server/workspaceKnowledge.js +25 -16
  51. package/dist-server/server/workspaceMemoryContext.js +75 -19
  52. package/dist-server/server/workspacePrompt.js +11 -4
  53. package/dist-server/server/workspaceRuntime.js +35 -13
  54. package/dist-server/shared/botEnvironment.js +10 -4
  55. package/dist-server/shared/fileTransferEndpoint.mjs +5 -5
  56. package/dist-server/shared/hostPaths.mjs +14 -4
  57. package/package.json +4 -3
  58. package/release.json +3 -3
  59. package/runtime/hermes/hermes_state_messages.py +17 -0
  60. package/runtime/worker.py +34 -1
  61. package/dist/assets/AboutDialog-BW25cB-W.js.map +0 -1
  62. package/dist/assets/ConversationsView-1igFR9VY.js.map +0 -1
  63. package/dist/assets/ConversationsView-h94_iPtv.css +0 -1
  64. package/dist-server/server/harness/context.js +0 -88
@@ -1,2 +1,2 @@
1
- import{A as e,Dt as t,F as n,M as r,b as i,d as a,et as o,f as s,m as c,p as l,t as u}from"./_plugin-vue_export-helper-BumXM028.js";import{I as d,w as f}from"./index-D0pMYnOi.js";import{t as p}from"./ComputerPanel-CRIF1YEd.js";var m={key:1,class:`viewer-loading`,role:`status`},h=u(i({__name:`ComputerViewerView`,setup(i){let u=d(),h=o(),g=o(``),_=o(),v=o(),y=o(),b;async function x(){await window.yaoviDesktop?.computerClosed()}async function S(e,t){await window.yaoviDesktop?.computerTargetChanged?.({backend:e,host:t})}async function C(){_.value?await _.value.close():await window.yaoviDesktop?.computerClosed()}return r(async()=>{b=window.yaoviDesktop?.onComputerClose(()=>{C()});try{let e=u.query.backend,t=u.query.host;if(e!==void 0&&e!==`cloud`&&e!==`vm`&&e!==`managed-browser`||t!==void 0)throw Error(`所选电脑无效,请关闭窗口后重新选择`);v.value=e,y.value=typeof t==`string`?t:void 0;let n=await f(`/api/app/agents`);if(h.value=n.agents.find(e=>e.id===u.params.agentId),!h.value)throw Error(`这台电脑不可用,或你已没有访问权限`)}catch(e){g.value=e instanceof Error?e.message:`无法打开电脑`}}),e(()=>b?.()),(e,r)=>h.value?(n(),s(p,{key:0,ref_key:`panel`,ref:_,agents:[h.value],backend:v.value,host:y.value,standalone:``,"auto-take":``,onClose:x,onTargetChanged:S},null,8,[`agents`,`backend`,`host`])):(n(),c(`main`,m,[a(`p`,null,t(g.value||`正在连接电脑…`),1),g.value?(n(),c(`button`,{key:0,onClick:C},`关闭窗口`)):l(``,!0)]))}}),[[`__scopeId`,`data-v-787db822`]]);export{h as default};
2
- //# sourceMappingURL=ComputerViewerView-CizYWH2R.js.map
1
+ import{A as e,Dt as t,F as n,M as r,b as i,d as a,et as o,f as s,m as c,p as l,t as u}from"./_plugin-vue_export-helper-BumXM028.js";import{I as d,w as f}from"./index-D11cgXI9.js";import{t as p}from"./ComputerPanel-DdlgOm-B.js";var m={key:1,class:`viewer-loading`,role:`status`},h=u(i({__name:`ComputerViewerView`,setup(i){let u=d(),h=o(),g=o(``),_=o(),v=o(),y=o(),b;async function x(){await window.yaoviDesktop?.computerClosed()}async function S(e,t){await window.yaoviDesktop?.computerTargetChanged?.({backend:e,host:t})}async function C(){_.value?await _.value.close():await window.yaoviDesktop?.computerClosed()}return r(async()=>{b=window.yaoviDesktop?.onComputerClose(()=>{C()});try{let e=u.query.backend,t=u.query.host;if(e!==void 0&&e!==`cloud`&&e!==`vm`&&e!==`managed-browser`||t!==void 0)throw Error(`所选电脑无效,请关闭窗口后重新选择`);v.value=e,y.value=typeof t==`string`?t:void 0;let n=await f(`/api/app/agents`);if(h.value=n.agents.find(e=>e.id===u.params.agentId),!h.value)throw Error(`这台电脑不可用,或你已没有访问权限`)}catch(e){g.value=e instanceof Error?e.message:`无法打开电脑`}}),e(()=>b?.()),(e,r)=>h.value?(n(),s(p,{key:0,ref_key:`panel`,ref:_,agents:[h.value],backend:v.value,host:y.value,standalone:``,"auto-take":``,onClose:x,onTargetChanged:S},null,8,[`agents`,`backend`,`host`])):(n(),c(`main`,m,[a(`p`,null,t(g.value||`正在连接电脑…`),1),g.value?(n(),c(`button`,{key:0,onClick:C},`关闭窗口`)):l(``,!0)]))}}),[[`__scopeId`,`data-v-787db822`]]);export{h as default};
2
+ //# sourceMappingURL=ComputerViewerView-I3adPI6O.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComputerViewerView-CizYWH2R.js","names":[],"sources":["../../src/client/views/ComputerViewerView.vue","../../src/client/views/ComputerViewerView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ComputerBackend } from '@shared/managedBrowser'\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { apiRequest } from '@/api/client'\nimport ComputerPanel from '@/components/workspace/ComputerPanel.vue'\nimport type { WorkspaceAgent } from '@shared/workspace'\nconst route = useRoute(), agent = ref<WorkspaceAgent>(), error = ref(''), panel = ref<InstanceType<typeof ComputerPanel>>()\nconst backend = ref<ComputerBackend>(), host = ref<string>()\nlet detach: (() => void) | undefined\nasync function finish(){await window.yaoviDesktop?.computerClosed()}\nasync function targetChanged(backend: ComputerBackend, host?: string) {\n await window.yaoviDesktop?.computerTargetChanged?.({backend,host})\n}\nasync function close() {\n if (panel.value) await panel.value.close()\n else await window.yaoviDesktop?.computerClosed()\n}\nonMounted(async () => {\n detach = window.yaoviDesktop?.onComputerClose(() => { void close() })\n try {\n const requestedBackend = route.query.backend, requestedHost = route.query.host\n if (requestedBackend !== undefined && requestedBackend !== 'cloud' && requestedBackend !== 'vm' && requestedBackend !== 'managed-browser')\n throw new Error('所选电脑无效,请关闭窗口后重新选择')\n if (requestedHost !== undefined)\n throw new Error('所选电脑无效,请关闭窗口后重新选择')\n backend.value = requestedBackend\n host.value = typeof requestedHost === 'string' ? requestedHost : undefined\n const result = await apiRequest<{agents: WorkspaceAgent[]}>('/api/app/agents')\n agent.value = result.agents.find(item => item.id === route.params.agentId)\n if (!agent.value) throw new Error('这台电脑不可用,或你已没有访问权限')\n } catch (cause) { error.value = cause instanceof Error ? cause.message : '无法打开电脑' }\n})\nonBeforeUnmount(() => detach?.())\n</script>\n<template>\n <ComputerPanel v-if=\"agent\" ref=\"panel\" :agents=\"[agent]\" :backend=\"backend\" :host=\"host\" standalone auto-take @close=\"finish\" @target-changed=\"targetChanged\" />\n <main v-else class=\"viewer-loading\" role=\"status\"><p>{{ error || '正在连接电脑…' }}</p><button v-if=\"error\" @click=\"close\">关闭窗口</button></main>\n</template>\n<style scoped>\n.viewer-loading{height:100dvh;display:grid;place-content:center;background:#111315;color:#f4f4f4;text-align:center}.viewer-loading button{padding:12px;border-radius:8px;border:1px solid #666;background:#292c30;color:inherit}\n</style>\n","<script setup lang=\"ts\">\nimport type { ComputerBackend } from '@shared/managedBrowser'\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { apiRequest } from '@/api/client'\nimport ComputerPanel from '@/components/workspace/ComputerPanel.vue'\nimport type { WorkspaceAgent } from '@shared/workspace'\nconst route = useRoute(), agent = ref<WorkspaceAgent>(), error = ref(''), panel = ref<InstanceType<typeof ComputerPanel>>()\nconst backend = ref<ComputerBackend>(), host = ref<string>()\nlet detach: (() => void) | undefined\nasync function finish(){await window.yaoviDesktop?.computerClosed()}\nasync function targetChanged(backend: ComputerBackend, host?: string) {\n await window.yaoviDesktop?.computerTargetChanged?.({backend,host})\n}\nasync function close() {\n if (panel.value) await panel.value.close()\n else await window.yaoviDesktop?.computerClosed()\n}\nonMounted(async () => {\n detach = window.yaoviDesktop?.onComputerClose(() => { void close() })\n try {\n const requestedBackend = route.query.backend, requestedHost = route.query.host\n if (requestedBackend !== undefined && requestedBackend !== 'cloud' && requestedBackend !== 'vm' && requestedBackend !== 'managed-browser')\n throw new Error('所选电脑无效,请关闭窗口后重新选择')\n if (requestedHost !== undefined)\n throw new Error('所选电脑无效,请关闭窗口后重新选择')\n backend.value = requestedBackend\n host.value = typeof requestedHost === 'string' ? requestedHost : undefined\n const result = await apiRequest<{agents: WorkspaceAgent[]}>('/api/app/agents')\n agent.value = result.agents.find(item => item.id === route.params.agentId)\n if (!agent.value) throw new Error('这台电脑不可用,或你已没有访问权限')\n } catch (cause) { error.value = cause instanceof Error ? cause.message : '无法打开电脑' }\n})\nonBeforeUnmount(() => detach?.())\n</script>\n<template>\n <ComputerPanel v-if=\"agent\" ref=\"panel\" :agents=\"[agent]\" :backend=\"backend\" :host=\"host\" standalone auto-take @close=\"finish\" @target-changed=\"targetChanged\" />\n <main v-else class=\"viewer-loading\" role=\"status\"><p>{{ error || '正在连接电脑…' }}</p><button v-if=\"error\" @click=\"close\">关闭窗口</button></main>\n</template>\n<style scoped>\n.viewer-loading{height:100dvh;display:grid;place-content:center;background:#111315;color:#f4f4f4;text-align:center}.viewer-loading button{padding:12px;border-radius:8px;border:1px solid #666;background:#292c30;color:inherit}\n</style>\n"],"mappings":"kUAOA,IAAM,EAAQ,EAAS,EAAG,EAAQ,EAAoB,EAAG,EAAQ,EAAI,EAAE,EAAG,EAAQ,EAAwC,EACpH,EAAU,EAAqB,EAAG,EAAO,EAAY,EACvD,EACJ,eAAe,GAAQ,CAAC,MAAM,OAAO,cAAc,eAAe,CAAC,CACnE,eAAe,EAAc,EAA0B,EAAe,CACpE,MAAM,OAAO,cAAc,wBAAwB,CAAC,UAAQ,MAAI,CAAC,CACnE,CACA,eAAe,GAAQ,CACjB,EAAM,MAAO,MAAM,EAAM,MAAM,MAAM,EACpC,MAAM,OAAO,cAAc,eAAe,CACjD,QACA,EAAU,SAAY,CACpB,EAAS,OAAO,cAAc,oBAAsB,CAAE,EAAW,CAAE,CAAC,EACpE,GAAI,CACF,IAAM,EAAmB,EAAM,MAAM,QAAS,EAAgB,EAAM,MAAM,KAG1E,GAFI,IAAqB,IAAA,IAAa,IAAqB,SAAW,IAAqB,MAAQ,IAAqB,mBAEpH,IAAkB,IAAA,GACpB,MAAU,MAAM,mBAAmB,EACrC,EAAQ,MAAQ,EAChB,EAAK,MAAQ,OAAO,GAAkB,SAAW,EAAgB,IAAA,GACjE,IAAM,EAAS,MAAM,EAAuC,iBAAiB,EAE7E,GADA,EAAM,MAAQ,EAAO,OAAO,KAAK,GAAQ,EAAK,KAAO,EAAM,OAAO,OAAO,EACrE,CAAC,EAAM,MAAO,MAAU,MAAM,mBAAmB,CACvD,OAAS,EAAO,CAAE,EAAM,MAAQ,aAAiB,MAAQ,EAAM,QAAU,QAAS,CACpF,CAAC,EACD,MAAsB,IAAS,CAAC,SAGT,EAAA,OAArB,EAAA,EAAA,EAAiK,EAAA,OAAjI,QAAA,QAAJ,IAAI,EAAS,OAAM,CAAG,EAAA,KAAK,EAAI,QAAS,EAAA,MAAU,KAAM,EAAA,MAAM,WAAA,GAAW,YAAA,GAAW,QAAO,EAAS,gBAAgB,oCAChJ,CAAA,IAAA,EAAA,EAAA,EAAyI,OAAzI,EAAyI,CAAvF,EAA+B,IAAA,KAAA,EAAzB,EAAA,OAAK,SAAA,EAAA,CAAA,EAAkC,EAAA,OAAd,EAAA,EAAA,EAAiD,SAAA,OAA3B,QAAO,CAAO,EAAA,MAAI,GAAA,EAAA,GAAA,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"ComputerViewerView-I3adPI6O.js","names":[],"sources":["../../src/client/views/ComputerViewerView.vue","../../src/client/views/ComputerViewerView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ComputerBackend } from '@shared/managedBrowser'\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { apiRequest } from '@/api/client'\nimport ComputerPanel from '@/components/workspace/ComputerPanel.vue'\nimport type { WorkspaceAgent } from '@shared/workspace'\nconst route = useRoute(), agent = ref<WorkspaceAgent>(), error = ref(''), panel = ref<InstanceType<typeof ComputerPanel>>()\nconst backend = ref<ComputerBackend>(), host = ref<string>()\nlet detach: (() => void) | undefined\nasync function finish(){await window.yaoviDesktop?.computerClosed()}\nasync function targetChanged(backend: ComputerBackend, host?: string) {\n await window.yaoviDesktop?.computerTargetChanged?.({backend,host})\n}\nasync function close() {\n if (panel.value) await panel.value.close()\n else await window.yaoviDesktop?.computerClosed()\n}\nonMounted(async () => {\n detach = window.yaoviDesktop?.onComputerClose(() => { void close() })\n try {\n const requestedBackend = route.query.backend, requestedHost = route.query.host\n if (requestedBackend !== undefined && requestedBackend !== 'cloud' && requestedBackend !== 'vm' && requestedBackend !== 'managed-browser')\n throw new Error('所选电脑无效,请关闭窗口后重新选择')\n if (requestedHost !== undefined)\n throw new Error('所选电脑无效,请关闭窗口后重新选择')\n backend.value = requestedBackend\n host.value = typeof requestedHost === 'string' ? requestedHost : undefined\n const result = await apiRequest<{agents: WorkspaceAgent[]}>('/api/app/agents')\n agent.value = result.agents.find(item => item.id === route.params.agentId)\n if (!agent.value) throw new Error('这台电脑不可用,或你已没有访问权限')\n } catch (cause) { error.value = cause instanceof Error ? cause.message : '无法打开电脑' }\n})\nonBeforeUnmount(() => detach?.())\n</script>\n<template>\n <ComputerPanel v-if=\"agent\" ref=\"panel\" :agents=\"[agent]\" :backend=\"backend\" :host=\"host\" standalone auto-take @close=\"finish\" @target-changed=\"targetChanged\" />\n <main v-else class=\"viewer-loading\" role=\"status\"><p>{{ error || '正在连接电脑…' }}</p><button v-if=\"error\" @click=\"close\">关闭窗口</button></main>\n</template>\n<style scoped>\n.viewer-loading{height:100dvh;display:grid;place-content:center;background:#111315;color:#f4f4f4;text-align:center}.viewer-loading button{padding:12px;border-radius:8px;border:1px solid #666;background:#292c30;color:inherit}\n</style>\n","<script setup lang=\"ts\">\nimport type { ComputerBackend } from '@shared/managedBrowser'\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { apiRequest } from '@/api/client'\nimport ComputerPanel from '@/components/workspace/ComputerPanel.vue'\nimport type { WorkspaceAgent } from '@shared/workspace'\nconst route = useRoute(), agent = ref<WorkspaceAgent>(), error = ref(''), panel = ref<InstanceType<typeof ComputerPanel>>()\nconst backend = ref<ComputerBackend>(), host = ref<string>()\nlet detach: (() => void) | undefined\nasync function finish(){await window.yaoviDesktop?.computerClosed()}\nasync function targetChanged(backend: ComputerBackend, host?: string) {\n await window.yaoviDesktop?.computerTargetChanged?.({backend,host})\n}\nasync function close() {\n if (panel.value) await panel.value.close()\n else await window.yaoviDesktop?.computerClosed()\n}\nonMounted(async () => {\n detach = window.yaoviDesktop?.onComputerClose(() => { void close() })\n try {\n const requestedBackend = route.query.backend, requestedHost = route.query.host\n if (requestedBackend !== undefined && requestedBackend !== 'cloud' && requestedBackend !== 'vm' && requestedBackend !== 'managed-browser')\n throw new Error('所选电脑无效,请关闭窗口后重新选择')\n if (requestedHost !== undefined)\n throw new Error('所选电脑无效,请关闭窗口后重新选择')\n backend.value = requestedBackend\n host.value = typeof requestedHost === 'string' ? requestedHost : undefined\n const result = await apiRequest<{agents: WorkspaceAgent[]}>('/api/app/agents')\n agent.value = result.agents.find(item => item.id === route.params.agentId)\n if (!agent.value) throw new Error('这台电脑不可用,或你已没有访问权限')\n } catch (cause) { error.value = cause instanceof Error ? cause.message : '无法打开电脑' }\n})\nonBeforeUnmount(() => detach?.())\n</script>\n<template>\n <ComputerPanel v-if=\"agent\" ref=\"panel\" :agents=\"[agent]\" :backend=\"backend\" :host=\"host\" standalone auto-take @close=\"finish\" @target-changed=\"targetChanged\" />\n <main v-else class=\"viewer-loading\" role=\"status\"><p>{{ error || '正在连接电脑…' }}</p><button v-if=\"error\" @click=\"close\">关闭窗口</button></main>\n</template>\n<style scoped>\n.viewer-loading{height:100dvh;display:grid;place-content:center;background:#111315;color:#f4f4f4;text-align:center}.viewer-loading button{padding:12px;border-radius:8px;border:1px solid #666;background:#292c30;color:inherit}\n</style>\n"],"mappings":"kUAOA,IAAM,EAAQ,EAAS,EAAG,EAAQ,EAAoB,EAAG,EAAQ,EAAI,EAAE,EAAG,EAAQ,EAAwC,EACpH,EAAU,EAAqB,EAAG,EAAO,EAAY,EACvD,EACJ,eAAe,GAAQ,CAAC,MAAM,OAAO,cAAc,eAAe,CAAC,CACnE,eAAe,EAAc,EAA0B,EAAe,CACpE,MAAM,OAAO,cAAc,wBAAwB,CAAC,UAAQ,MAAI,CAAC,CACnE,CACA,eAAe,GAAQ,CACjB,EAAM,MAAO,MAAM,EAAM,MAAM,MAAM,EACpC,MAAM,OAAO,cAAc,eAAe,CACjD,QACA,EAAU,SAAY,CACpB,EAAS,OAAO,cAAc,oBAAsB,CAAE,EAAW,CAAE,CAAC,EACpE,GAAI,CACF,IAAM,EAAmB,EAAM,MAAM,QAAS,EAAgB,EAAM,MAAM,KAG1E,GAFI,IAAqB,IAAA,IAAa,IAAqB,SAAW,IAAqB,MAAQ,IAAqB,mBAEpH,IAAkB,IAAA,GACpB,MAAU,MAAM,mBAAmB,EACrC,EAAQ,MAAQ,EAChB,EAAK,MAAQ,OAAO,GAAkB,SAAW,EAAgB,IAAA,GACjE,IAAM,EAAS,MAAM,EAAuC,iBAAiB,EAE7E,GADA,EAAM,MAAQ,EAAO,OAAO,KAAK,GAAQ,EAAK,KAAO,EAAM,OAAO,OAAO,EACrE,CAAC,EAAM,MAAO,MAAU,MAAM,mBAAmB,CACvD,OAAS,EAAO,CAAE,EAAM,MAAQ,aAAiB,MAAQ,EAAM,QAAU,QAAS,CACpF,CAAC,EACD,MAAsB,IAAS,CAAC,SAGT,EAAA,OAArB,EAAA,EAAA,EAAiK,EAAA,OAAjI,QAAA,QAAJ,IAAI,EAAS,OAAM,CAAG,EAAA,KAAK,EAAI,QAAS,EAAA,MAAU,KAAM,EAAA,MAAM,WAAA,GAAW,YAAA,GAAW,QAAO,EAAS,gBAAgB,oCAChJ,CAAA,IAAA,EAAA,EAAA,EAAyI,OAAzI,EAAyI,CAAvF,EAA+B,IAAA,KAAA,EAAzB,EAAA,OAAK,SAAA,EAAA,CAAA,EAAkC,EAAA,OAAd,EAAA,EAAA,EAAiD,SAAA,OAA3B,QAAO,CAAO,EAAA,MAAI,GAAA,EAAA,GAAA,EAAA,CAAA,CAAA"}