toc-ocra 0.2.10 → 0.2.11

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.
@@ -1,2 +1,2 @@
1
- var Te=Object.create;var ie=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var xe=Object.getOwnPropertyNames;var Ee=Object.getPrototypeOf,Be=Object.prototype.hasOwnProperty;var ne=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}};var Ie=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of xe(t))!Be.call(e,c)&&c!==r&&ie(e,c,{get:()=>t[c],enumerable:!(o=Le(t,c))||o.enumerable});return e};var P=(e,t,r)=>(r=e!=null?Te(Ee(e)):{},Ie(t||!e||!e.__esModule?ie(r,"default",{value:e,enumerable:!0}):r,e));var W=ne((rt,le)=>{var se=globalThis.__TOC_PLUGIN_SHARED__,de=se&&se.react;if(!de)throw new Error("The host does not provide react; this plugin needs a newer app version.");le.exports=de});var G=ne((it,ge)=>{var pe=globalThis.__TOC_PLUGIN_SHARED__,ue=pe&&pe["@toc-starter/plugin-sdk/ui"];if(!ue)throw new Error("The host does not provide @toc-starter/plugin-sdk/ui; this plugin needs a newer app version.");ge.exports=ue});var M=ne((ct,be)=>{var fe=globalThis.__TOC_PLUGIN_SHARED__,ve=fe&&fe["react/jsx-runtime"];if(!ve)throw new Error("The host does not provide react/jsx-runtime; this plugin needs a newer app version.");be.exports=ve});var y=P(W(),1);var ce=P(W(),1);function me(e){if(!e||typeof e.activate!="function")throw new TypeError("definePlugin() needs an object with an activate(context) function");return e}function re(e,t){return(0,ce.useSyncExternalStore)(r=>e.core.onContextChange(t,r),()=>e.core.context(t))}var m=P(G(),1);var X="http://127.0.0.1:17339",L=class extends Error{constructor(r,o,c=""){super(o);this.kind=r;this.code=c}kind;code};async function q(e,t,r={}){let o=new Headers(r.headers);r.token&&o.set("Authorization",`Bearer ${r.token}`),r.body&&o.set("Content-Type","application/json");let c;try{c=await fetch(`${e.replace(/\/+$/,"")}${t}`,{...r,headers:o,cache:"no-store"})}catch{throw new L("offline","local service unreachable")}let h=await c.json().catch(()=>null);if(c.status===401)throw new L("unauthorized","unauthorized");if(!c.ok){let s=typeof h?.error=="string"?h.error:"",v=typeof h?.message=="string"?h.message:s||`HTTP ${c.status}`;throw new L("rejected",v,s)}return h}var E={info:e=>q(e,"/control/info"),pair:(e,t)=>q(e,"/control/pair",{method:"POST",body:JSON.stringify({code:t})}),status:(e,t)=>q(e,"/control/status",{token:t}),enroll:(e,t,r,o)=>q(e,"/control/enroll",{method:"POST",token:t,body:JSON.stringify({server_url:r,code:o})}),unpair:(e,t)=>q(e,"/control/unpair",{method:"POST",token:t}),detect:(e,t)=>q(e,"/control/detect",{method:"POST",token:t})};function Q(e,t){let r=o=>{try{return new URL(o).origin.toLowerCase()}catch{return o.trim().replace(/\/+$/,"").toLowerCase()}};return!!(e&&t)&&r(e)===r(t)}var C=P(W(),1),b=P(G(),1);var he=P(W(),1),we=P(G(),1);var Y=P(M(),1),A="controlToken",Z="localUrl",F="autoBind",ee="localService";function j(e,t){return t instanceof L&&t.kind==="offline"?e.t("error.offline"):t instanceof Error?t.message:String(t)}function K({ctx:e,value:t}){let[r,o]=(0,he.useState)(!1);return(0,Y.jsxs)("div",{className:"da-command",children:[(0,Y.jsx)("code",{children:t}),(0,Y.jsx)(we.Btn,{onClick:()=>{navigator.clipboard.writeText(t).then(()=>{o(!0),window.setTimeout(()=>o(!1),1500)})},children:r?e.t("common.copied"):e.t("common.copy")})]})}var n=P(M(),1),ae=["linux","mac","win"],Re=1e4,Ue=3e3,te="remoteServerUrl",Oe=new Set(["127.0.0.1","localhost","[::1]","::1","0.0.0.0"]);function De(e){try{let t=new URL(e.trim());return t.protocol==="http:"||t.protocol==="https:"?t.origin:null}catch{return null}}function Ae(e){try{return Oe.has(new URL(e).hostname)}catch{return!1}}function $e(e,t,r){let o=`toc-ocra setup --code ${t} --server ${r}`;return e==="win"?`npm install -g toc-ocra@latest; if ($?) { ${o} }`:`npm install -g toc-ocra@latest && ${o}`}function ze({ctx:e,device:t}){return t.status==="online"?(0,n.jsx)(b.Badge,{variant:"ok",children:e.t("remote.status.online")}):t.status==="disabled"?(0,n.jsx)(b.Badge,{variant:"warn",children:e.t("remote.status.disabled")}):t.status==="offline"?(0,n.jsx)(b.Badge,{variant:"err",children:e.t("remote.status.offline")}):(0,n.jsx)(b.Badge,{variant:"muted",children:e.t("remote.status.notConnected")})}function ye({ctx:e,server:t,workspace:r,localDeviceId:o}){let[c,h]=(0,C.useState)(null),[s,v]=(0,C.useState)(""),[u,d]=(0,C.useState)(!1),[g,p]=(0,C.useState)(null),[x,I]=(0,C.useState)(!1),[U,O]=(0,C.useState)(""),[S,N]=(0,C.useState)("linux"),[_,f]=(0,C.useState)(()=>e.storage.get(te,"")||t?.origin||""),B=(0,C.useRef)(g);B.current=g;let R=(0,C.useRef)(!0);(0,C.useEffect)(()=>{!e.storage.get(te,"")&&t?.origin&&f(t.origin)},[e,t?.origin]);let $=(0,C.useCallback)(async()=>{if(r?.id)try{let i=await e.core.request(`/workspaces/${encodeURIComponent(r.id)}/devices`);if(!R.current)return;let k=(i.items??[]).filter(z=>z.is_mine&&z.id!==o);h(k);let D=B.current;if(D&&!D.matched){let z=k.find(Pe=>Pe.id===D.deviceId);z?.agent_id&&z.agent_id!==D.baseline&&z.terminal_online&&(p({...D,matched:!0}),e.notify({title:e.t("page.title"),body:e.t("remote.matchedNotice",{name:z.name})}))}}catch(i){R.current&&v(j(e,i))}},[e,o,r?.id]),V=!!(g&&!g.matched);(0,C.useEffect)(()=>{R.current=!0,$();let i=window.setInterval(()=>{$()},V?Ue:Re);return()=>{R.current=!1,window.clearInterval(i)}},[$,V]);let l=async i=>{d(!0),v("");try{await i()}catch(k){v(j(e,k))}finally{d(!1)}},w=De(_),T=i=>{f(i),i.trim()&&i.trim()!==t?.origin?e.storage.set(te,i.trim()):e.storage.remove(te)},oe=i=>l(async()=>{if(!w)throw new Error(e.t("remote.serverInvalid"));let k=await e.core.request(`/devices/${encodeURIComponent(i.id)}/pairing-code`,{method:"POST"});p({deviceId:i.id,deviceName:i.name,platform:ae.includes(i.platform)?i.platform:"linux",code:k.code,expiresAt:k.expires_at,baseline:i.agent_id??null,matched:!1})}),Se=()=>l(async()=>{if(!r?.id)throw new Error(e.t("bind.noWorkspace"));if(!w)throw new Error(e.t("remote.serverInvalid"));let i=U.trim()||e.t(`remote.platform.${S}`),k=await e.core.request(`/workspaces/${encodeURIComponent(r.id)}/devices`,{method:"POST",body:JSON.stringify({name:i,location:S==="linux"?"cloud":"local",platform:S,note:"",share_to_workspace:!1})}),D=await e.core.request(`/devices/${encodeURIComponent(k.id)}/pairing-code`,{method:"POST"});p({deviceId:k.id,deviceName:k.name||i,platform:S,code:D.code,expiresAt:D.expires_at,baseline:null,matched:!1}),I(!1),O(""),await $()}),Ne=(i,k)=>l(async()=>{await e.core.request(`/devices/${encodeURIComponent(i.id)}/enabled`,{method:"PUT",body:JSON.stringify({enabled:k})}),await $()});return(0,n.jsxs)(n.Fragment,{children:[s&&(0,n.jsx)("div",{role:"alert",className:"da-alert",children:s}),(0,n.jsxs)(b.Card,{children:[(0,n.jsx)(b.CardTitle,{children:e.t("remote.title")}),(0,n.jsx)("p",{className:"da-text",children:e.t("remote.body")}),(0,n.jsxs)("label",{className:"da-field",children:[(0,n.jsx)("span",{children:e.t("remote.server")}),(0,n.jsx)(b.Input,{value:_,onChange:i=>T(i.target.value),spellCheck:!1,className:"da-mono"})]}),!w&&(0,n.jsx)("p",{className:"da-muted da-warn",children:e.t("remote.serverInvalid")}),w&&Ae(w)&&(0,n.jsx)("p",{className:"da-muted da-warn",children:e.t("remote.loopback")}),!x&&(0,n.jsx)("div",{className:"da-row",children:(0,n.jsx)(b.Btn,{primary:!0,disabled:u||!r?.id,onClick:()=>I(!0),children:e.t("remote.add")})}),x&&(0,n.jsxs)("form",{className:"da-form",onSubmit:i=>{i.preventDefault(),Se()},children:[(0,n.jsxs)("label",{className:"da-field",children:[(0,n.jsx)("span",{children:e.t("remote.platformLabel")}),(0,n.jsx)("select",{className:"da-select",value:S,onChange:i=>N(i.target.value),children:ae.map(i=>(0,n.jsx)("option",{value:i,children:e.t(`remote.platform.${i}`)},i))})]}),(0,n.jsxs)("label",{className:"da-field",children:[(0,n.jsx)("span",{children:e.t("remote.name")}),(0,n.jsx)(b.Input,{value:U,onChange:i=>O(i.target.value),maxLength:100,placeholder:e.t("remote.namePlaceholder")})]}),(0,n.jsxs)("div",{className:"da-row",children:[(0,n.jsx)(b.Btn,{primary:!0,type:"submit",disabled:u||!w,children:e.t(u?"remote.working":"remote.generate")}),(0,n.jsx)(b.Btn,{type:"button",disabled:u,onClick:()=>I(!1),children:e.t("remote.cancel")})]})]})]}),g&&w&&(0,n.jsx)(Me,{ctx:e,pending:g,origin:w,busy:u,onPlatform:i=>p({...g,platform:i}),onRegenerate:()=>{oe({id:g.deviceId,name:g.deviceName,platform:g.platform,agent_id:g.baseline})},onClose:()=>p(null)}),(0,n.jsxs)(b.Card,{children:[(0,n.jsx)(b.CardTitle,{children:e.t("remote.listTitle")}),c===null&&(0,n.jsx)("p",{className:"da-muted",children:e.t("common.checking")}),c?.length===0&&(0,n.jsx)("p",{className:"da-muted",children:e.t("remote.empty")}),c&&c.length>0&&(0,n.jsx)("ul",{className:"da-devices",children:c.map(i=>(0,n.jsxs)("li",{children:[(0,n.jsxs)("div",{className:"da-device-main",children:[(0,n.jsx)("span",{className:"da-device-name",children:i.name}),(0,n.jsxs)("span",{className:"da-muted",children:[e.t(`remote.platform.${ae.includes(i.platform)?i.platform:"linux"}`),i.agent_version?` \xB7 toc-ocra ${i.agent_version}`:""]})]}),(0,n.jsx)(ze,{ctx:e,device:i}),(0,n.jsxs)("div",{className:"da-device-actions",children:[(!i.paired||i.status==="offline"||i.status==="not_connected")&&(0,n.jsx)(b.Btn,{disabled:u||!w,onClick:()=>{oe(i)},children:e.t(i.paired?"remote.repair":"remote.install")}),i.paired&&(0,n.jsxs)("label",{className:"da-toggle",children:[(0,n.jsx)("span",{children:e.t("remote.enabled")}),(0,n.jsx)(b.Toggle,{checked:!i.disabled,disabled:u,label:e.t("remote.enabled"),onChange:k=>{Ne(i,k)}})]})]})]},i.id))}),(0,n.jsx)("p",{className:"da-muted",children:e.t("remote.disableHint")}),(0,n.jsx)("div",{className:"da-step",children:e.t("remote.uninstall")}),(0,n.jsx)(K,{ctx:e,value:"toc-ocra service:uninstall"})]})]})}function Me({ctx:e,pending:t,origin:r,busy:o,onPlatform:c,onRegenerate:h,onClose:s}){let[v,u]=(0,C.useState)(()=>Math.floor(Date.now()/1e3));(0,C.useEffect)(()=>{if(t.matched)return;let p=window.setInterval(()=>u(Math.floor(Date.now()/1e3)),1e3);return()=>window.clearInterval(p)},[t.matched]);let d=Math.max(0,t.expiresAt-v),g=!t.matched&&d===0;return(0,n.jsxs)(b.Card,{children:[(0,n.jsx)(b.CardTitle,{children:e.t("remote.pendingTitle",{name:t.deviceName})}),t.matched?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("p",{className:"da-text",children:[(0,n.jsx)(b.Badge,{variant:"ok",children:e.t("remote.matched")})," ",e.t("remote.matchedBody",{name:t.deviceName})]}),(0,n.jsx)("div",{className:"da-row",children:(0,n.jsx)(b.Btn,{primary:!0,onClick:s,children:e.t("remote.done")})})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"da-text",children:e.t("remote.pendingBody")}),(0,n.jsx)("div",{className:"da-segment",role:"radiogroup","aria-label":e.t("remote.platformLabel"),children:ae.map(p=>(0,n.jsx)("button",{type:"button",role:"radio","aria-checked":t.platform===p,className:t.platform===p?"da-seg da-seg-active":"da-seg",onClick:()=>c(p),children:e.t(`remote.platform.${p}`)},p))}),(0,n.jsx)(K,{ctx:e,value:$e(t.platform,t.code,r)}),(0,n.jsxs)("ul",{className:"da-hints",children:[(0,n.jsx)("li",{children:e.t("remote.hintNode")}),t.platform==="linux"&&(0,n.jsx)("li",{children:e.t("remote.hintLinux")}),t.platform==="win"&&(0,n.jsx)("li",{children:e.t("remote.hintWindows")}),(0,n.jsx)("li",{children:g?e.t("remote.expired"):e.t("remote.expires",{minutes:Math.floor(d/60),seconds:String(d%60).padStart(2,"0")})})]}),(0,n.jsx)("p",{className:"da-muted",children:g?"":e.t("remote.waiting")}),(0,n.jsxs)("div",{className:"da-row",children:[(0,n.jsx)(b.Btn,{disabled:o,onClick:h,children:e.t("remote.regenerate")}),(0,n.jsx)(b.Btn,{disabled:o,onClick:s,children:e.t("remote.cancel")})]})]})]})}var a=P(M(),1),Ke=3e3,qe=1e4,He=6e4,We=3,Ce="tab",Ye=new URL("../../assets/icon.svg",import.meta.url).href;function Fe(){return(0,a.jsx)("img",{src:Ye,alt:"",width:16,height:16,draggable:!1})}function _e(e){let t=e.core.service;try{return t&&t.available()?t:void 0}catch{return}}var J=e=>e?.state==="running"||e?.state==="starting";async function ke(e){try{return await E.info(e),!0}catch{return!1}}var H;function je({ctx:e}){let t=re(e,"server"),r=re(e,"workspace"),[o,c]=(0,y.useState)(()=>e.storage.get(Ce,"local")==="remote"?"remote":"local"),h=l=>{e.storage.set(Ce,l),c(l)},[s]=(0,y.useState)(()=>e.storage.get(Z,X)),[v,u]=(0,y.useState)(()=>e.secureStorage.get(A,"")),[d,g]=(0,y.useState)({kind:"checking"}),[p,x]=(0,y.useState)(null),[I,U]=(0,y.useState)(""),[O,S]=(0,y.useState)(!1),N=(0,y.useRef)(!0),_=_e(e),f=(0,y.useCallback)(async()=>{let l=null;if(_)try{l=await _.status()}catch{l=null}if(!N.current)return;x(l);let w=v;J(l)&&l?.token&&(w=l.token,l.token!==v&&(e.secureStorage.set(A,l.token),u(l.token)));try{await E.info(s)}catch{N.current&&g({kind:J(l)?"starting":"offline"});return}if(!w){N.current&&g({kind:"needsCode"});return}try{let T=await E.status(s,w);N.current&&g({kind:"ready",status:T})}catch(T){if(!N.current)return;T instanceof L&&T.kind==="unauthorized"?(e.secureStorage.remove(A),u(""),g({kind:"needsCode"})):g({kind:"offline"})}},[e,s,_,v]);(0,y.useEffect)(()=>{N.current=!0,f();let l=window.setInterval(()=>{f()},Ke);return()=>{N.current=!1,window.clearInterval(l)}},[f]),(0,y.useEffect)(()=>{if(d.kind==="ready"){let l=d.status;e.reportHealth(l.paired&&l.connected?{status:"healthy",summary:e.t("health.online",{name:l.device_name})}:{status:"degraded",summary:e.t(l.paired?"health.disconnected":"health.unpaired")})}else d.kind==="offline"&&e.reportHealth({status:"degraded",summary:e.t(_?"health.disabled":"health.offline")})},[e,d,_]);let B=async l=>{S(!0),U("");try{await l()}catch(w){U(j(e,w))}finally{S(!1)}},R=l=>B(async()=>{if(!_)return;if(!l){e.storage.set(ee,"off"),x(await _.stop()),await f();return}if(e.storage.set(ee,"on"),e.storage.remove(F),!J(p)&&await ke(s)){H?.(),await f();return}let w=await _.start();x(w),w.token&&(e.secureStorage.set(A,w.token),u(w.token)),await Je(s,()=>N.current)&&H?.(),await f()}),$=p?.state==="exited"?p:null,V=!!_&&!J(p)&&(d.kind==="ready"||d.kind==="needsCode");return(0,a.jsxs)("div",{className:"da-app",children:[(0,a.jsx)(m.PageHeader,{title:e.t("page.title"),subtitle:e.t("page.subtitle")}),(0,a.jsx)("div",{className:"da-tabs",role:"tablist","aria-label":e.t("page.title"),children:["local","remote"].map(l=>(0,a.jsx)("button",{type:"button",role:"tab","aria-selected":o===l,className:o===l?"da-tab da-tab-active":"da-tab",onClick:()=>h(l),children:e.t(`tabs.${l}`)},l))}),I&&(0,a.jsx)("div",{role:"alert",className:"da-alert",children:I}),o==="remote"&&(0,a.jsx)(ye,{ctx:e,server:t,workspace:r,localDeviceId:d.kind==="ready"&&d.status.paired?d.status.device_id:""}),o==="local"&&(0,a.jsxs)(a.Fragment,{children:[_&&(0,a.jsx)(Ve,{ctx:e,status:p,external:V,exit:$,busy:O,onToggle:l=>{R(l)}}),d.kind==="checking"&&(0,a.jsx)(m.Card,{children:(0,a.jsx)("span",{className:"da-muted",children:e.t("common.checking")})}),d.kind==="starting"&&(0,a.jsx)(m.Card,{children:(0,a.jsx)("span",{className:"da-muted",children:e.t("service.starting")})}),d.kind==="offline"&&!_&&(0,a.jsx)(Ge,{ctx:e,localUrl:s}),d.kind==="needsCode"&&(0,a.jsx)(Xe,{ctx:e,busy:O,onPair:l=>B(async()=>{let w=await E.pair(s,l).catch(T=>{throw T instanceof L&&T.code==="code_wrong"?new Error(e.t("pair.wrong")):T instanceof L&&T.code==="locked"?new Error(e.t("pair.locked")):T});e.secureStorage.set(A,w.token),u(w.token)})}),d.kind==="ready"&&(0,a.jsx)(Qe,{ctx:e,status:d.status,server:t,workspace:r,busy:O,run:B,localUrl:s,token:v,onStatus:l=>g({kind:"ready",status:l})})]})]})}async function Je(e,t){for(let r=0;r<30&&t();r+=1)try{return await E.info(e),!0}catch{await new Promise(o=>window.setTimeout(o,500))}return!1}function Ve({ctx:e,status:t,external:r,exit:o,busy:c,onToggle:h}){let s=J(t),v=!s&&r,u=s||v,d=o?.exitCode===We;return(0,a.jsxs)(m.Card,{children:[(0,a.jsxs)("div",{className:"da-switch",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(m.CardTitle,{children:e.t("service.title")}),(0,a.jsx)("p",{className:"da-text",children:e.t(v?"service.onExternalBody":u?"service.onBody":"service.offBody")})]}),(0,a.jsx)(m.Toggle,{checked:u,disabled:c||v,label:e.t("service.title"),onChange:h})]}),s&&(0,a.jsx)("p",{className:"da-muted",children:e.t("service.followsApp")}),v&&(0,a.jsx)("p",{className:"da-muted",children:e.t("service.external")}),!u&&d&&(0,a.jsx)("p",{className:"da-muted",children:e.t("service.portTaken")}),o&&!d&&o.exitCode!==0&&(0,a.jsx)("div",{role:"alert",className:"da-alert",children:e.t("service.crashed",{error:o.error||`exit ${o.exitCode??o.signal??"?"}`})})]})}function Ge({ctx:e,localUrl:t}){return(0,a.jsxs)(m.Card,{children:[(0,a.jsx)(m.CardTitle,{children:e.t("offline.title")}),(0,a.jsx)("p",{className:"da-text",children:e.t("offline.body",{url:t})}),(0,a.jsx)("div",{className:"da-step",children:e.t("offline.once")}),(0,a.jsx)(K,{ctx:e,value:"npx toc-ocra@latest run"}),(0,a.jsx)("div",{className:"da-step",children:e.t("offline.service")}),(0,a.jsx)(K,{ctx:e,value:"npm install -g toc-ocra@latest && toc-ocra service:install"}),(0,a.jsx)("p",{className:"da-muted",children:e.t("offline.node")})]})}function Xe({ctx:e,busy:t,onPair:r}){let[o,c]=(0,y.useState)(""),h=/^\d{6}$/.test(o);return(0,a.jsxs)(m.Card,{children:[(0,a.jsx)(m.CardTitle,{children:e.t("pair.title")}),(0,a.jsx)("p",{className:"da-text",children:e.t("pair.body")}),(0,a.jsx)(K,{ctx:e,value:"toc-ocra code"}),(0,a.jsxs)("form",{className:"da-row",onSubmit:s=>{s.preventDefault(),h&&r(o)},children:[(0,a.jsx)(m.Input,{value:o,onChange:s=>c(s.target.value.replace(/\D/g,"").slice(0,6)),placeholder:e.t("pair.placeholder"),inputMode:"numeric",autoComplete:"one-time-code","aria-label":e.t("pair.placeholder"),className:"da-code-input"}),(0,a.jsx)(m.Btn,{primary:!0,type:"submit",disabled:!h||t,children:e.t("pair.submit")})]})]})}function Qe({ctx:e,status:t,server:r,workspace:o,busy:c,run:h,localUrl:s,token:v,onStatus:u}){let d=t.paired&&r&&!Q(t.server_url,r.origin),g=()=>h(async()=>{t.device_id&&r&&Q(t.server_url,r.origin)&&await e.core.request(`/devices/${encodeURIComponent(t.device_id)}/agent`,{method:"DELETE"}).catch(()=>{}),e.storage.set(F,"off"),u(await E.unpair(s,v))});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(m.Card,{children:[(0,a.jsx)(m.CardTitle,{children:e.t("status.title")}),(0,a.jsxs)("dl",{className:"da-grid",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:e.t("status.service")}),(0,a.jsxs)("dd",{children:["toc-ocra ",t.version," \xB7 ",t.hostname]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:e.t("status.binding")}),(0,a.jsx)("dd",{children:(0,a.jsx)(Ze,{ctx:e,status:t})})]}),t.paired&&(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:e.t("status.device")}),(0,a.jsx)("dd",{children:t.device_name})]}),t.paired&&(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:e.t("status.server")}),(0,a.jsx)("dd",{className:"da-mono",children:t.server_url})]}),t.paired&&(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:e.t("status.runs")}),(0,a.jsx)("dd",{children:t.active_runs})]})]}),t.paired&&!t.connected&&t.connection_error&&(0,a.jsx)("p",{className:"da-muted",children:e.t("status.lastError",{error:t.connection_error})}),t.token_from_env&&(0,a.jsx)("p",{className:"da-muted",children:e.t("status.tokenFromEnv")}),t.paired&&(0,a.jsx)("div",{className:"da-row",children:(0,a.jsx)(m.Btn,{danger:!0,disabled:c||t.token_from_env,onClick:()=>{g()},children:e.t("status.unpair")})})]}),(!t.paired||t.unauthorized||d)&&(0,a.jsx)(et,{ctx:e,status:t,server:r,workspace:o,busy:c,run:h,localUrl:s,token:v,onStatus:u,rebind:t.paired}),(0,a.jsxs)(m.Card,{children:[(0,a.jsx)(m.CardTitle,{children:e.t("cli.title")}),(0,a.jsxs)("ul",{className:"da-list",children:[t.providers.filter(p=>p.installed).map(p=>(0,a.jsxs)("li",{children:[(0,a.jsx)("span",{className:"da-mono",children:p.id}),(0,a.jsx)("span",{className:"da-muted",children:p.version}),p.runnable?(0,a.jsx)(m.Badge,{variant:"ok",children:e.t("cli.runnable")}):(0,a.jsx)(m.Badge,{variant:"muted",children:e.t("cli.detectOnly")})]},p.id)),!t.providers.some(p=>p.installed)&&(0,a.jsx)("li",{className:"da-muted",children:e.t("cli.none")})]}),(0,a.jsx)("div",{className:"da-row",children:(0,a.jsx)(m.Btn,{disabled:c,onClick:()=>{h(async()=>u(await E.detect(s,v)))},children:e.t("cli.redetect")})})]})]})}function Ze({ctx:e,status:t}){return t.paired?t.unauthorized?(0,a.jsx)(m.Badge,{variant:"err",children:e.t("binding.revoked")}):t.connected?(0,a.jsx)(m.Badge,{variant:"ok",children:e.t("binding.online")}):(0,a.jsx)(m.Badge,{variant:"warn",children:e.t("binding.connecting")}):(0,a.jsx)(m.Badge,{variant:"muted",children:e.t("binding.unpaired")})}function et({ctx:e,status:t,server:r,workspace:o,busy:c,run:h,localUrl:s,token:v,onStatus:u,rebind:d}){let[g,p]=(0,y.useState)([]),[x,I]=(0,y.useState)("new"),[U,O]=(0,y.useState)(t.hostname),[S,N]=(0,y.useState)(r?.origin??"");(0,y.useEffect)(()=>{r?.origin&&N(r.origin)},[r?.origin]),(0,y.useEffect)(()=>{if(!o?.id)return;let f=!1;return e.core.request(`/workspaces/${encodeURIComponent(o.id)}/devices`).then(B=>{f||p((B.items??[]).filter(R=>R.is_mine))}).catch(()=>{f||p([])}),()=>{f=!0}},[e,o?.id]);let _=()=>h(async()=>{if(!o?.id)throw new Error(e.t("bind.noWorkspace"));if(!S.trim())throw new Error(e.t("bind.noServer"));let f=x;x==="new"&&(f=(await e.core.request(`/workspaces/${encodeURIComponent(o.id)}/devices`,{method:"POST",body:JSON.stringify({name:U.trim()||t.hostname,location:"local",platform:t.platform,note:"",share_to_workspace:!1})})).id,I(f));let B=await e.core.request(`/devices/${encodeURIComponent(f)}/pairing-code`,{method:"POST"});u(await E.enroll(s,v,S.trim(),B.code)),e.storage.remove(F),e.notify({title:e.t("page.title"),body:e.t("bind.done",{server:r?.name??S})})});return(0,a.jsxs)(m.Card,{children:[(0,a.jsx)(m.CardTitle,{children:e.t(d?"bind.rebindTitle":"bind.title")}),d&&t.unauthorized&&(0,a.jsx)("p",{className:"da-text",children:e.t("bind.revoked")}),d&&!t.unauthorized&&(0,a.jsx)("p",{className:"da-text",children:e.t("bind.elsewhere",{bound:t.server_url,current:r?.origin??""})}),(0,a.jsx)("p",{className:"da-text",children:e.t("bind.body",{server:r?.name??"",workspace:o?.name??""})}),(0,a.jsxs)("label",{className:"da-field",children:[(0,a.jsx)("span",{children:e.t("bind.server")}),(0,a.jsx)(m.Input,{value:S,onChange:f=>N(f.target.value),spellCheck:!1,className:"da-mono"})]}),(0,a.jsxs)("label",{className:"da-field",children:[(0,a.jsx)("span",{children:e.t("bind.device")}),(0,a.jsxs)("select",{className:"da-select",value:x,onChange:f=>I(f.target.value),children:[(0,a.jsx)("option",{value:"new",children:e.t("bind.newDevice")}),g.map(f=>(0,a.jsxs)("option",{value:f.id,children:[f.name,f.paired?` \xB7 ${e.t("bind.replaces")}`:""]},f.id))]})]}),x==="new"&&(0,a.jsxs)("label",{className:"da-field",children:[(0,a.jsx)("span",{children:e.t("bind.name")}),(0,a.jsx)(m.Input,{value:U,onChange:f=>O(f.target.value),maxLength:100})]}),(0,a.jsx)("div",{className:"da-row",children:(0,a.jsx)(m.Btn,{primary:!0,disabled:c||!o?.id,onClick:()=>{_()},children:e.t(c?"bind.working":"bind.submit")})})]})}function tt(e){let t=!1,r="",o=new Map,c=async()=>{if(t||e.signal.aborted)return;let s=e.core.context("server"),v=e.secureStorage.get(A,"");if(!(!s?.origin||!v||e.storage.get(F,"on")==="off")&&!(Date.now()-(o.get(s.origin)??0)<He)){t=!0;try{let u=e.storage.get(Z,X),d=await E.status(u,v);if(!d.machine_id||d.token_from_env)return;if(d.paired&&(d.unauthorized||Q(d.server_url,s.origin))){r="";return}if(d.active_runs>0){r!==s.origin&&(r=s.origin,e.notify({title:e.t("page.title"),body:e.t("auto.deferred",{server:s.name||s.origin})}));return}let g=await e.core.request("/devices/machine/pairing-code",{method:"POST",body:JSON.stringify({machine_id:d.machine_id,hostname:d.hostname,platform:d.platform,current_device_id:d.paired?d.device_id:""})});await E.enroll(u,v,s.origin,g.code),r="",o.delete(s.origin),e.notify({title:e.t("page.title"),body:e.t("auto.done",{server:s.name||s.origin,device:g.device_name})})}catch(u){(!(u instanceof L)||u.kind==="rejected")&&o.set(s.origin,Date.now())}finally{t=!1}}},h=window.setInterval(()=>{c()},qe);H=()=>{c()},e.registerDisposer(()=>{window.clearInterval(h),H=void 0}),e.registerDisposer(e.core.onContextChange("server",()=>{c()})),window.setTimeout(()=>{c()},1500)}function at(e){let t=_e(e);if(!t||e.storage.get(ee,"off")!=="on")return;let r=e.storage.get(Z,X);ke(r).then(o=>{if(o){window.setTimeout(()=>H?.(),3e3);return}return t.start()}).then(o=>{o&&(o.token&&e.secureStorage.set(A,o.token),window.setTimeout(()=>H?.(),3e3))}).catch(()=>{})}var yt=me({activate(e){e.registerNavigation("agent.nav",(0,a.jsx)(Fe,{})),e.registerRoute("agent.home",(0,a.jsx)(je,{ctx:e})),at(e),tt(e)}});export{yt as default};
1
+ var Te=Object.create;var ie=Object.defineProperty;var Le=Object.getOwnPropertyDescriptor;var xe=Object.getOwnPropertyNames;var Ee=Object.getPrototypeOf,Be=Object.prototype.hasOwnProperty;var ne=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}};var Ie=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of xe(t))!Be.call(e,c)&&c!==r&&ie(e,c,{get:()=>t[c],enumerable:!(o=Le(t,c))||o.enumerable});return e};var P=(e,t,r)=>(r=e!=null?Te(Ee(e)):{},Ie(t||!e||!e.__esModule?ie(r,"default",{value:e,enumerable:!0}):r,e));var W=ne((rt,le)=>{var se=globalThis.__TOC_PLUGIN_SHARED__,de=se&&se.react;if(!de)throw new Error("The host does not provide react; this plugin needs a newer app version.");le.exports=de});var G=ne((it,ge)=>{var pe=globalThis.__TOC_PLUGIN_SHARED__,ue=pe&&pe["@toc-starter/plugin-sdk/ui"];if(!ue)throw new Error("The host does not provide @toc-starter/plugin-sdk/ui; this plugin needs a newer app version.");ge.exports=ue});var M=ne((ct,be)=>{var fe=globalThis.__TOC_PLUGIN_SHARED__,ve=fe&&fe["react/jsx-runtime"];if(!ve)throw new Error("The host does not provide react/jsx-runtime; this plugin needs a newer app version.");be.exports=ve});var y=P(W(),1);var ce=P(W(),1);function me(e){if(!e||typeof e.activate!="function")throw new TypeError("definePlugin() needs an object with an activate(context) function");return e}function re(e,t){return(0,ce.useSyncExternalStore)(r=>e.core.onContextChange(t,r),()=>e.core.context(t))}var m=P(G(),1);var X="http://127.0.0.1:17339",x=class extends Error{constructor(r,o,c=""){super(o);this.kind=r;this.code=c}kind;code};async function q(e,t,r={}){let o=new Headers(r.headers);r.token&&o.set("Authorization",`Bearer ${r.token}`),r.body&&o.set("Content-Type","application/json");let c;try{c=await fetch(`${e.replace(/\/+$/,"")}${t}`,{...r,headers:o,cache:"no-store"})}catch{throw new x("offline","local service unreachable")}let h=await c.json().catch(()=>null);if(c.status===401)throw new x("unauthorized","unauthorized");if(!c.ok){let s=typeof h?.error=="string"?h.error:"",v=typeof h?.message=="string"?h.message:s||`HTTP ${c.status}`;throw new x("rejected",v,s)}return h}var I={info:e=>q(e,"/control/info"),pair:(e,t)=>q(e,"/control/pair",{method:"POST",body:JSON.stringify({code:t})}),status:(e,t)=>q(e,"/control/status",{token:t}),enroll:(e,t,r,o)=>q(e,"/control/enroll",{method:"POST",token:t,body:JSON.stringify({server_url:r,code:o})}),unpair:(e,t)=>q(e,"/control/unpair",{method:"POST",token:t}),detect:(e,t)=>q(e,"/control/detect",{method:"POST",token:t})};function Q(e,t){let r=o=>{try{return new URL(o).origin.toLowerCase()}catch{return o.trim().replace(/\/+$/,"").toLowerCase()}};return!!(e&&t)&&r(e)===r(t)}var C=P(W(),1),b=P(G(),1);var he=P(W(),1),we=P(G(),1);var Y=P(M(),1),A="controlToken",Z="localUrl",F="autoBind",ee="localService";function j(e,t){return t instanceof x&&t.kind==="offline"?e.t("error.offline"):t instanceof Error?t.message:String(t)}function K({ctx:e,value:t}){let[r,o]=(0,he.useState)(!1);return(0,Y.jsxs)("div",{className:"da-command",children:[(0,Y.jsx)("code",{children:t}),(0,Y.jsx)(we.Btn,{onClick:()=>{navigator.clipboard.writeText(t).then(()=>{o(!0),window.setTimeout(()=>o(!1),1500)})},children:r?e.t("common.copied"):e.t("common.copy")})]})}var n=P(M(),1),ae=["linux","mac","win"],Re=1e4,Oe=3e3,te="remoteServerUrl",Ue=new Set(["127.0.0.1","localhost","[::1]","::1","0.0.0.0"]);function De(e){try{let t=new URL(e.trim());return t.protocol==="http:"||t.protocol==="https:"?t.origin:null}catch{return null}}function Ae(e){try{return Ue.has(new URL(e).hostname)}catch{return!1}}function ze(e,t,r){let o=`toc-ocra setup --code ${t} --server ${r}`;return e==="win"?`npm install -g toc-ocra@latest; if ($?) { ${o} }`:`npm install -g toc-ocra@latest && ${o}`}function $e({ctx:e,device:t}){return t.status==="online"?(0,n.jsx)(b.Badge,{variant:"ok",children:e.t("remote.status.online")}):t.status==="disabled"?(0,n.jsx)(b.Badge,{variant:"warn",children:e.t("remote.status.disabled")}):t.status==="offline"?(0,n.jsx)(b.Badge,{variant:"err",children:e.t("remote.status.offline")}):(0,n.jsx)(b.Badge,{variant:"muted",children:e.t("remote.status.notConnected")})}function ye({ctx:e,server:t,workspace:r,localDeviceId:o}){let[c,h]=(0,C.useState)(null),[s,v]=(0,C.useState)(""),[u,d]=(0,C.useState)(!1),[g,p]=(0,C.useState)(null),[E,R]=(0,C.useState)(!1),[O,U]=(0,C.useState)(""),[S,N]=(0,C.useState)("linux"),[_,f]=(0,C.useState)(()=>e.storage.get(te,"")||t?.origin||""),T=(0,C.useRef)(g);T.current=g;let B=(0,C.useRef)(!0);(0,C.useEffect)(()=>{!e.storage.get(te,"")&&t?.origin&&f(t.origin)},[e,t?.origin]);let z=(0,C.useCallback)(async()=>{if(r?.id)try{let i=await e.core.request(`/workspaces/${encodeURIComponent(r.id)}/devices`);if(!B.current)return;let k=(i.items??[]).filter($=>$.is_mine&&$.id!==o);h(k);let D=T.current;if(D&&!D.matched){let $=k.find(Pe=>Pe.id===D.deviceId);$?.agent_id&&$.agent_id!==D.baseline&&$.terminal_online&&(p({...D,matched:!0}),e.notify({title:e.t("page.title"),body:e.t("remote.matchedNotice",{name:$.name})}))}}catch(i){B.current&&v(j(e,i))}},[e,o,r?.id]),V=!!(g&&!g.matched);(0,C.useEffect)(()=>{B.current=!0,z();let i=window.setInterval(()=>{z()},V?Oe:Re);return()=>{B.current=!1,window.clearInterval(i)}},[z,V]);let l=async i=>{d(!0),v("");try{await i()}catch(k){v(j(e,k))}finally{d(!1)}},w=De(_),L=i=>{f(i),i.trim()&&i.trim()!==t?.origin?e.storage.set(te,i.trim()):e.storage.remove(te)},oe=i=>l(async()=>{if(!w)throw new Error(e.t("remote.serverInvalid"));let k=await e.core.request(`/devices/${encodeURIComponent(i.id)}/pairing-code`,{method:"POST"});p({deviceId:i.id,deviceName:i.name,platform:ae.includes(i.platform)?i.platform:"linux",code:k.code,expiresAt:k.expires_at,baseline:i.agent_id??null,matched:!1})}),Se=()=>l(async()=>{if(!r?.id)throw new Error(e.t("bind.noWorkspace"));if(!w)throw new Error(e.t("remote.serverInvalid"));let i=O.trim()||e.t(`remote.platform.${S}`),k=await e.core.request(`/workspaces/${encodeURIComponent(r.id)}/devices`,{method:"POST",body:JSON.stringify({name:i,location:S==="linux"?"cloud":"local",platform:S,note:"",share_to_workspace:!1})}),D=await e.core.request(`/devices/${encodeURIComponent(k.id)}/pairing-code`,{method:"POST"});p({deviceId:k.id,deviceName:k.name||i,platform:S,code:D.code,expiresAt:D.expires_at,baseline:null,matched:!1}),R(!1),U(""),await z()}),Ne=(i,k)=>l(async()=>{await e.core.request(`/devices/${encodeURIComponent(i.id)}/enabled`,{method:"PUT",body:JSON.stringify({enabled:k})}),await z()});return(0,n.jsxs)(n.Fragment,{children:[s&&(0,n.jsx)("div",{role:"alert",className:"da-alert",children:s}),(0,n.jsxs)(b.Card,{children:[(0,n.jsx)(b.CardTitle,{children:e.t("remote.title")}),(0,n.jsx)("p",{className:"da-text",children:e.t("remote.body")}),(0,n.jsxs)("label",{className:"da-field",children:[(0,n.jsx)("span",{children:e.t("remote.server")}),(0,n.jsx)(b.Input,{value:_,onChange:i=>L(i.target.value),spellCheck:!1,className:"da-mono"})]}),!w&&(0,n.jsx)("p",{className:"da-muted da-warn",children:e.t("remote.serverInvalid")}),w&&Ae(w)&&(0,n.jsx)("p",{className:"da-muted da-warn",children:e.t("remote.loopback")}),!E&&(0,n.jsx)("div",{className:"da-row",children:(0,n.jsx)(b.Btn,{primary:!0,disabled:u||!r?.id,onClick:()=>R(!0),children:e.t("remote.add")})}),E&&(0,n.jsxs)("form",{className:"da-form",onSubmit:i=>{i.preventDefault(),Se()},children:[(0,n.jsxs)("label",{className:"da-field",children:[(0,n.jsx)("span",{children:e.t("remote.platformLabel")}),(0,n.jsx)("select",{className:"da-select",value:S,onChange:i=>N(i.target.value),children:ae.map(i=>(0,n.jsx)("option",{value:i,children:e.t(`remote.platform.${i}`)},i))})]}),(0,n.jsxs)("label",{className:"da-field",children:[(0,n.jsx)("span",{children:e.t("remote.name")}),(0,n.jsx)(b.Input,{value:O,onChange:i=>U(i.target.value),maxLength:100,placeholder:e.t("remote.namePlaceholder")})]}),(0,n.jsxs)("div",{className:"da-row",children:[(0,n.jsx)(b.Btn,{primary:!0,type:"submit",disabled:u||!w,children:e.t(u?"remote.working":"remote.generate")}),(0,n.jsx)(b.Btn,{type:"button",disabled:u,onClick:()=>R(!1),children:e.t("remote.cancel")})]})]})]}),g&&w&&(0,n.jsx)(Me,{ctx:e,pending:g,origin:w,busy:u,onPlatform:i=>p({...g,platform:i}),onRegenerate:()=>{oe({id:g.deviceId,name:g.deviceName,platform:g.platform,agent_id:g.baseline})},onClose:()=>p(null)}),(0,n.jsxs)(b.Card,{children:[(0,n.jsx)(b.CardTitle,{children:e.t("remote.listTitle")}),c===null&&(0,n.jsx)("p",{className:"da-muted",children:e.t("common.checking")}),c?.length===0&&(0,n.jsx)("p",{className:"da-muted",children:e.t("remote.empty")}),c&&c.length>0&&(0,n.jsx)("ul",{className:"da-devices",children:c.map(i=>(0,n.jsxs)("li",{children:[(0,n.jsxs)("div",{className:"da-device-main",children:[(0,n.jsx)("span",{className:"da-device-name",children:i.name}),(0,n.jsxs)("span",{className:"da-muted",children:[e.t(`remote.platform.${ae.includes(i.platform)?i.platform:"linux"}`),i.agent_version?` \xB7 toc-ocra ${i.agent_version}`:""]})]}),(0,n.jsx)($e,{ctx:e,device:i}),(0,n.jsxs)("div",{className:"da-device-actions",children:[(!i.paired||i.status==="offline"||i.status==="not_connected")&&(0,n.jsx)(b.Btn,{disabled:u||!w,onClick:()=>{oe(i)},children:e.t(i.paired?"remote.repair":"remote.install")}),i.paired&&(0,n.jsxs)("label",{className:"da-toggle",children:[(0,n.jsx)("span",{children:e.t("remote.enabled")}),(0,n.jsx)(b.Toggle,{checked:!i.disabled,disabled:u,label:e.t("remote.enabled"),onChange:k=>{Ne(i,k)}})]})]})]},i.id))}),(0,n.jsx)("p",{className:"da-muted",children:e.t("remote.disableHint")}),(0,n.jsx)("div",{className:"da-step",children:e.t("remote.uninstall")}),(0,n.jsx)(K,{ctx:e,value:"toc-ocra service:uninstall"})]})]})}function Me({ctx:e,pending:t,origin:r,busy:o,onPlatform:c,onRegenerate:h,onClose:s}){let[v,u]=(0,C.useState)(()=>Math.floor(Date.now()/1e3));(0,C.useEffect)(()=>{if(t.matched)return;let p=window.setInterval(()=>u(Math.floor(Date.now()/1e3)),1e3);return()=>window.clearInterval(p)},[t.matched]);let d=Math.max(0,t.expiresAt-v),g=!t.matched&&d===0;return(0,n.jsxs)(b.Card,{children:[(0,n.jsx)(b.CardTitle,{children:e.t("remote.pendingTitle",{name:t.deviceName})}),t.matched?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("p",{className:"da-text",children:[(0,n.jsx)(b.Badge,{variant:"ok",children:e.t("remote.matched")})," ",e.t("remote.matchedBody",{name:t.deviceName})]}),(0,n.jsx)("div",{className:"da-row",children:(0,n.jsx)(b.Btn,{primary:!0,onClick:s,children:e.t("remote.done")})})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"da-text",children:e.t("remote.pendingBody")}),(0,n.jsx)("div",{className:"da-segment",role:"radiogroup","aria-label":e.t("remote.platformLabel"),children:ae.map(p=>(0,n.jsx)("button",{type:"button",role:"radio","aria-checked":t.platform===p,className:t.platform===p?"da-seg da-seg-active":"da-seg",onClick:()=>c(p),children:e.t(`remote.platform.${p}`)},p))}),(0,n.jsx)(K,{ctx:e,value:ze(t.platform,t.code,r)}),(0,n.jsxs)("ul",{className:"da-hints",children:[(0,n.jsx)("li",{children:e.t("remote.hintNode")}),t.platform==="linux"&&(0,n.jsx)("li",{children:e.t("remote.hintLinux")}),t.platform==="win"&&(0,n.jsx)("li",{children:e.t("remote.hintWindows")}),(0,n.jsx)("li",{children:g?e.t("remote.expired"):e.t("remote.expires",{minutes:Math.floor(d/60),seconds:String(d%60).padStart(2,"0")})})]}),(0,n.jsx)("p",{className:"da-muted",children:g?"":e.t("remote.waiting")}),(0,n.jsxs)("div",{className:"da-row",children:[(0,n.jsx)(b.Btn,{disabled:o,onClick:h,children:e.t("remote.regenerate")}),(0,n.jsx)(b.Btn,{disabled:o,onClick:s,children:e.t("remote.cancel")})]})]})]})}var a=P(M(),1),Ke=3e3,qe=1e4,He=6e4,We=3,Ce="tab",Ye=new URL("../../assets/icon.svg",import.meta.url).href;function Fe(){return(0,a.jsx)("img",{src:Ye,alt:"",width:16,height:16,draggable:!1})}function _e(e){let t=e.core.service;try{return t&&t.available()?t:void 0}catch{return}}var J=e=>e?.state==="running"||e?.state==="starting";async function ke(e){try{return await I.info(e),!0}catch{return!1}}var H;function je({ctx:e}){let t=re(e,"server"),r=re(e,"workspace"),[o,c]=(0,y.useState)(()=>e.storage.get(Ce,"local")==="remote"?"remote":"local"),h=l=>{e.storage.set(Ce,l),c(l)},[s]=(0,y.useState)(()=>e.storage.get(Z,X)),[v,u]=(0,y.useState)(()=>e.secureStorage.get(A,"")),[d,g]=(0,y.useState)({kind:"checking"}),[p,E]=(0,y.useState)(null),[R,O]=(0,y.useState)(""),[U,S]=(0,y.useState)(!1),N=(0,y.useRef)(!0),_=_e(e),f=(0,y.useCallback)(async()=>{let l=null;if(_)try{l=await _.status()}catch{l=null}if(!N.current)return;E(l);let w=v;J(l)&&l?.token&&(w=l.token,l.token!==v&&(e.secureStorage.set(A,l.token),u(l.token)));try{await I.info(s)}catch{N.current&&g({kind:J(l)?"starting":"offline"});return}if(!w){N.current&&g({kind:"needsCode"});return}try{let L=await I.status(s,w);N.current&&g({kind:"ready",status:L})}catch(L){if(!N.current)return;L instanceof x&&L.kind==="unauthorized"?(e.secureStorage.remove(A),u(""),g({kind:"needsCode"})):g({kind:"offline"})}},[e,s,_,v]);(0,y.useEffect)(()=>{N.current=!0,f();let l=window.setInterval(()=>{f()},Ke);return()=>{N.current=!1,window.clearInterval(l)}},[f]),(0,y.useEffect)(()=>{if(d.kind==="ready"){let l=d.status;e.reportHealth(l.paired&&l.connected?{status:"healthy",summary:e.t("health.online",{name:l.device_name})}:{status:"degraded",summary:e.t(l.paired?"health.disconnected":"health.unpaired")})}else d.kind==="offline"&&e.reportHealth({status:"degraded",summary:e.t(_?"health.disabled":"health.offline")})},[e,d,_]);let T=async l=>{S(!0),O("");try{await l()}catch(w){O(j(e,w))}finally{S(!1)}},B=l=>T(async()=>{if(!_)return;if(!l){e.storage.set(ee,"off"),E(await _.stop()),await f();return}if(e.storage.set(ee,"on"),e.storage.remove(F),!J(p)&&await ke(s)){H?.(),await f();return}let w=await _.start();E(w),w.token&&(e.secureStorage.set(A,w.token),u(w.token)),await Je(s,()=>N.current)&&H?.(),await f()}),z=p?.state==="exited"?p:null,V=!!_&&!J(p)&&(d.kind==="ready"||d.kind==="needsCode");return(0,a.jsxs)("div",{className:"da-app",children:[(0,a.jsx)(m.PageHeader,{title:e.t("page.title"),subtitle:e.t("page.subtitle")}),(0,a.jsx)("div",{className:"da-tabs",role:"tablist","aria-label":e.t("page.title"),children:["local","remote"].map(l=>(0,a.jsx)("button",{type:"button",role:"tab","aria-selected":o===l,className:o===l?"da-tab da-tab-active":"da-tab",onClick:()=>h(l),children:e.t(`tabs.${l}`)},l))}),R&&(0,a.jsx)("div",{role:"alert",className:"da-alert",children:R}),o==="remote"&&(0,a.jsx)(ye,{ctx:e,server:t,workspace:r,localDeviceId:d.kind==="ready"&&d.status.paired?d.status.device_id:""}),o==="local"&&(0,a.jsxs)(a.Fragment,{children:[_&&(0,a.jsx)(Ve,{ctx:e,status:p,external:V,exit:z,busy:U,onToggle:l=>{B(l)}}),d.kind==="checking"&&(0,a.jsx)(m.Card,{children:(0,a.jsx)("span",{className:"da-muted",children:e.t("common.checking")})}),d.kind==="starting"&&(0,a.jsx)(m.Card,{children:(0,a.jsx)("span",{className:"da-muted",children:e.t("service.starting")})}),d.kind==="offline"&&!_&&(0,a.jsx)(Ge,{ctx:e,localUrl:s}),d.kind==="needsCode"&&(0,a.jsx)(Xe,{ctx:e,busy:U,onPair:l=>T(async()=>{let w=await I.pair(s,l).catch(L=>{throw L instanceof x&&L.code==="code_wrong"?new Error(e.t("pair.wrong")):L instanceof x&&L.code==="locked"?new Error(e.t("pair.locked")):L});e.secureStorage.set(A,w.token),u(w.token)})}),d.kind==="ready"&&(0,a.jsx)(Qe,{ctx:e,status:d.status,server:t,workspace:r,busy:U,run:T,localUrl:s,token:v,onStatus:l=>g({kind:"ready",status:l})})]})]})}async function Je(e,t){for(let r=0;r<30&&t();r+=1)try{return await I.info(e),!0}catch{await new Promise(o=>window.setTimeout(o,500))}return!1}function Ve({ctx:e,status:t,external:r,exit:o,busy:c,onToggle:h}){let s=J(t),v=!s&&r,u=s||v,d=o?.exitCode===We;return(0,a.jsxs)(m.Card,{children:[(0,a.jsxs)("div",{className:"da-switch",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(m.CardTitle,{children:e.t("service.title")}),(0,a.jsx)("p",{className:"da-text",children:e.t(v?"service.onExternalBody":u?"service.onBody":"service.offBody")})]}),(0,a.jsx)(m.Toggle,{checked:u,disabled:c||v,label:e.t("service.title"),onChange:h})]}),s&&(0,a.jsx)("p",{className:"da-muted",children:e.t("service.followsApp")}),v&&(0,a.jsx)("p",{className:"da-muted",children:e.t("service.external")}),!u&&d&&(0,a.jsx)("p",{className:"da-muted",children:e.t("service.portTaken")}),o&&!d&&o.exitCode!==0&&(0,a.jsx)("div",{role:"alert",className:"da-alert",children:e.t("service.crashed",{error:o.error||`exit ${o.exitCode??o.signal??"?"}`})})]})}function Ge({ctx:e,localUrl:t}){return(0,a.jsxs)(m.Card,{children:[(0,a.jsx)(m.CardTitle,{children:e.t("offline.title")}),(0,a.jsx)("p",{className:"da-text",children:e.t("offline.body",{url:t})}),(0,a.jsx)("div",{className:"da-step",children:e.t("offline.once")}),(0,a.jsx)(K,{ctx:e,value:"npx toc-ocra@latest run"}),(0,a.jsx)("div",{className:"da-step",children:e.t("offline.service")}),(0,a.jsx)(K,{ctx:e,value:"npm install -g toc-ocra@latest && toc-ocra service:install"}),(0,a.jsx)("p",{className:"da-muted",children:e.t("offline.node")})]})}function Xe({ctx:e,busy:t,onPair:r}){let[o,c]=(0,y.useState)(""),h=/^\d{6}$/.test(o);return(0,a.jsxs)(m.Card,{children:[(0,a.jsx)(m.CardTitle,{children:e.t("pair.title")}),(0,a.jsx)("p",{className:"da-text",children:e.t("pair.body")}),(0,a.jsx)(K,{ctx:e,value:"toc-ocra code"}),(0,a.jsxs)("form",{className:"da-row",onSubmit:s=>{s.preventDefault(),h&&r(o)},children:[(0,a.jsx)(m.Input,{value:o,onChange:s=>c(s.target.value.replace(/\D/g,"").slice(0,6)),placeholder:e.t("pair.placeholder"),inputMode:"numeric",autoComplete:"one-time-code","aria-label":e.t("pair.placeholder"),className:"da-code-input"}),(0,a.jsx)(m.Btn,{primary:!0,type:"submit",disabled:!h||t,children:e.t("pair.submit")})]})]})}function Qe({ctx:e,status:t,server:r,workspace:o,busy:c,run:h,localUrl:s,token:v,onStatus:u}){let d=t.paired&&r&&!Q(t.server_url,r.origin),g=()=>h(async()=>{t.device_id&&r&&Q(t.server_url,r.origin)&&await e.core.request(`/devices/${encodeURIComponent(t.device_id)}/agent`,{method:"DELETE"}).catch(()=>{}),e.storage.set(F,"off"),u(await I.unpair(s,v))});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(m.Card,{children:[(0,a.jsx)(m.CardTitle,{children:e.t("status.title")}),(0,a.jsxs)("dl",{className:"da-grid",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:e.t("status.service")}),(0,a.jsxs)("dd",{children:["toc-ocra ",t.version," \xB7 ",t.hostname]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:e.t("status.binding")}),(0,a.jsx)("dd",{children:(0,a.jsx)(Ze,{ctx:e,status:t})})]}),t.paired&&(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:e.t("status.device")}),(0,a.jsx)("dd",{children:t.device_name})]}),t.paired&&(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:e.t("status.server")}),(0,a.jsx)("dd",{className:"da-mono",children:t.server_url})]}),t.paired&&(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{children:e.t("status.runs")}),(0,a.jsx)("dd",{children:t.active_runs})]})]}),t.paired&&!t.connected&&t.connection_error&&(0,a.jsx)("p",{className:"da-muted",children:e.t("status.lastError",{error:t.connection_error})}),t.token_from_env&&(0,a.jsx)("p",{className:"da-muted",children:e.t("status.tokenFromEnv")}),t.paired&&(0,a.jsx)("div",{className:"da-row",children:(0,a.jsx)(m.Btn,{danger:!0,disabled:c||t.token_from_env,onClick:()=>{g()},children:e.t("status.unpair")})})]}),(!t.paired||t.unauthorized||d)&&(0,a.jsx)(et,{ctx:e,status:t,server:r,workspace:o,busy:c,run:h,localUrl:s,token:v,onStatus:u,rebind:t.paired}),(0,a.jsxs)(m.Card,{children:[(0,a.jsx)(m.CardTitle,{children:e.t("cli.title")}),(0,a.jsxs)("ul",{className:"da-list",children:[t.providers.filter(p=>p.installed).map(p=>(0,a.jsxs)("li",{children:[(0,a.jsx)("span",{className:"da-mono",children:p.id}),(0,a.jsx)("span",{className:"da-muted",children:p.version}),p.runnable?(0,a.jsx)(m.Badge,{variant:"ok",children:e.t("cli.runnable")}):(0,a.jsx)(m.Badge,{variant:"muted",children:e.t("cli.detectOnly")})]},p.id)),!t.providers.some(p=>p.installed)&&(0,a.jsx)("li",{className:"da-muted",children:e.t("cli.none")})]}),(0,a.jsx)("div",{className:"da-row",children:(0,a.jsx)(m.Btn,{disabled:c,onClick:()=>{h(async()=>u(await I.detect(s,v)))},children:e.t("cli.redetect")})})]})]})}function Ze({ctx:e,status:t}){return t.paired?t.unauthorized?(0,a.jsx)(m.Badge,{variant:"err",children:e.t("binding.revoked")}):t.connected?(0,a.jsx)(m.Badge,{variant:"ok",children:e.t("binding.online")}):(0,a.jsx)(m.Badge,{variant:"warn",children:e.t("binding.connecting")}):(0,a.jsx)(m.Badge,{variant:"muted",children:e.t("binding.unpaired")})}function et({ctx:e,status:t,server:r,workspace:o,busy:c,run:h,localUrl:s,token:v,onStatus:u,rebind:d}){let[g,p]=(0,y.useState)([]),[E,R]=(0,y.useState)("new"),[O,U]=(0,y.useState)(t.hostname),[S,N]=(0,y.useState)(r?.origin??"");(0,y.useEffect)(()=>{r?.origin&&N(r.origin)},[r?.origin]),(0,y.useEffect)(()=>{if(!o?.id)return;let f=!1;return e.core.request(`/workspaces/${encodeURIComponent(o.id)}/devices`).then(T=>{f||p((T.items??[]).filter(B=>B.is_mine))}).catch(()=>{f||p([])}),()=>{f=!0}},[e,o?.id]);let _=()=>h(async()=>{if(!o?.id)throw new Error(e.t("bind.noWorkspace"));if(!S.trim())throw new Error(e.t("bind.noServer"));let f=E,T;if(E==="new"){if(!t.machine_id)throw new Error(e.t("bind.identityRequired"));let B=await e.core.request("/devices/machine/pairing-code",{method:"POST",body:JSON.stringify({machine_id:t.machine_id,hostname:O.trim()||t.hostname,platform:t.platform,current_device_id:t.paired?t.device_id:""})});f=B.device_id,R(f),T=B}else T=await e.core.request(`/devices/${encodeURIComponent(f)}/pairing-code`,{method:"POST"});u(await I.enroll(s,v,S.trim(),T.code)),e.storage.remove(F),e.notify({title:e.t("page.title"),body:e.t("bind.done",{server:r?.name??S})})});return(0,a.jsxs)(m.Card,{children:[(0,a.jsx)(m.CardTitle,{children:e.t(d?"bind.rebindTitle":"bind.title")}),d&&t.unauthorized&&(0,a.jsx)("p",{className:"da-text",children:e.t("bind.revoked")}),d&&!t.unauthorized&&(0,a.jsx)("p",{className:"da-text",children:e.t("bind.elsewhere",{bound:t.server_url,current:r?.origin??""})}),(0,a.jsx)("p",{className:"da-text",children:e.t("bind.body",{server:r?.name??"",workspace:o?.name??""})}),(0,a.jsxs)("label",{className:"da-field",children:[(0,a.jsx)("span",{children:e.t("bind.server")}),(0,a.jsx)(m.Input,{value:S,onChange:f=>N(f.target.value),spellCheck:!1,className:"da-mono"})]}),(0,a.jsxs)("label",{className:"da-field",children:[(0,a.jsx)("span",{children:e.t("bind.device")}),(0,a.jsxs)("select",{className:"da-select",value:E,onChange:f=>R(f.target.value),children:[(0,a.jsx)("option",{value:"new",children:e.t("bind.newDevice")}),g.map(f=>(0,a.jsxs)("option",{value:f.id,children:[f.name,f.paired?` \xB7 ${e.t("bind.replaces")}`:""]},f.id))]})]}),E==="new"&&(0,a.jsxs)("label",{className:"da-field",children:[(0,a.jsx)("span",{children:e.t("bind.name")}),(0,a.jsx)(m.Input,{value:O,onChange:f=>U(f.target.value),maxLength:100})]}),(0,a.jsx)("div",{className:"da-row",children:(0,a.jsx)(m.Btn,{primary:!0,disabled:c||!o?.id,onClick:()=>{_()},children:e.t(c?"bind.working":"bind.submit")})})]})}function tt(e){let t=!1,r="",o=new Map,c=async()=>{if(t||e.signal.aborted)return;let s=e.core.context("server"),v=e.secureStorage.get(A,"");if(!(!s?.origin||!v||e.storage.get(F,"on")==="off")&&!(Date.now()-(o.get(s.origin)??0)<He)){t=!0;try{let u=e.storage.get(Z,X),d=await I.status(u,v);if(!d.machine_id||d.token_from_env)return;if(d.paired&&(d.unauthorized||Q(d.server_url,s.origin))){r="";return}if(d.active_runs>0){r!==s.origin&&(r=s.origin,e.notify({title:e.t("page.title"),body:e.t("auto.deferred",{server:s.name||s.origin})}));return}let g=await e.core.request("/devices/machine/pairing-code",{method:"POST",body:JSON.stringify({machine_id:d.machine_id,hostname:d.hostname,platform:d.platform,current_device_id:d.paired?d.device_id:""})});await I.enroll(u,v,s.origin,g.code),r="",o.delete(s.origin),e.notify({title:e.t("page.title"),body:e.t("auto.done",{server:s.name||s.origin,device:g.device_name})})}catch(u){(!(u instanceof x)||u.kind==="rejected")&&o.set(s.origin,Date.now())}finally{t=!1}}},h=window.setInterval(()=>{c()},qe);H=()=>{c()},e.registerDisposer(()=>{window.clearInterval(h),H=void 0}),e.registerDisposer(e.core.onContextChange("server",()=>{c()})),window.setTimeout(()=>{c()},1500)}function at(e){let t=_e(e);if(!t||e.storage.get(ee,"off")!=="on")return;let r=e.storage.get(Z,X);ke(r).then(o=>{if(o){window.setTimeout(()=>H?.(),3e3);return}return t.start()}).then(o=>{o&&(o.token&&e.secureStorage.set(A,o.token),window.setTimeout(()=>H?.(),3e3))}).catch(()=>{})}var yt=me({activate(e){e.registerNavigation("agent.nav",(0,a.jsx)(Fe,{})),e.registerRoute("agent.home",(0,a.jsx)(je,{ctx:e})),at(e),tt(e)}});export{yt as default};
2
2
  //# sourceMappingURL=renderer.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["toc-shared:react", "toc-shared:@toc-starter/plugin-sdk/ui", "toc-shared:react/jsx-runtime", "../../plugin/index.tsx", "../../node_modules/@toc-starter/plugin-sdk/index.js", "../../plugin/local.ts", "../../plugin/remote.tsx", "../../plugin/shared.tsx"],
4
- "sourcesContent": ["var registry = globalThis[\"__TOC_PLUGIN_SHARED__\"];\nvar shared = registry && registry[\"react\"];\nif (!shared) throw new Error(\"The host does not provide react; this plugin needs a newer app version.\");\nmodule.exports = shared;", "var registry = globalThis[\"__TOC_PLUGIN_SHARED__\"];\nvar shared = registry && registry[\"@toc-starter/plugin-sdk/ui\"];\nif (!shared) throw new Error(\"The host does not provide @toc-starter/plugin-sdk/ui; this plugin needs a newer app version.\");\nmodule.exports = shared;", "var registry = globalThis[\"__TOC_PLUGIN_SHARED__\"];\nvar shared = registry && registry[\"react/jsx-runtime\"];\nif (!shared) throw new Error(\"The host does not provide react/jsx-runtime; this plugin needs a newer app version.\");\nmodule.exports = shared;", "import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { definePlugin, useHostContext, type LocalServiceApi, type LocalServiceStatus, type PluginContext } from \"@toc-starter/plugin-sdk\";\nimport { Badge, Btn, Card, CardTitle, Input, PageHeader, Toggle } from \"@toc-starter/plugin-sdk/ui\";\nimport \"./styles.css\";\nimport { DEFAULT_LOCAL_URL, LocalError, local, sameServer, type LocalStatus } from \"./local\";\nimport { RemoteTab } from \"./remote\";\nimport { AUTO_BIND_KEY, Command, LOCAL_SERVICE_KEY, LOCAL_URL_KEY, TOKEN_KEY, errorText, type Device, type ServerContext, type WorkspaceContext } from \"./shared\";\n\nconst POLL_MS = 3_000;\nconst AUTO_BIND_MS = 10_000;\nconst AUTO_BIND_RETRY_MS = 60_000;\n/** toc-ocra's service entry exits with this when another toc-ocra holds the local port. */\nconst EXIT_PORT_IN_USE = 3;\nconst TAB_KEY = \"tab\";\n\n/** Resolved against dist/plugin/renderer.js. */\nconst iconUrl = new URL(\"../../assets/icon.svg\", import.meta.url).href;\n\ntype Phase =\n | { kind: \"checking\" }\n | { kind: \"offline\" }\n | { kind: \"starting\" }\n | { kind: \"needsCode\" }\n | { kind: \"ready\"; status: LocalStatus };\n\ntype Tab = \"local\" | \"remote\";\n\nfunction Icon() {\n return <img src={iconUrl} alt=\"\" width={16} height={16} draggable={false} />;\n}\n\n/** The desktop app's service API; undefined on hosts that predate it. */\nfunction localService(ctx: PluginContext): LocalServiceApi | undefined {\n const service = (ctx.core as { service?: LocalServiceApi }).service;\n try {\n return service && service.available() ? service : undefined;\n } catch {\n return undefined;\n }\n}\n\nconst isActive = (status: LocalServiceStatus | null | undefined) => status?.state === \"running\" || status?.state === \"starting\";\n\n/** Another toc-ocra (background service, terminal) already answers on this computer. */\nasync function hasLocalInstance(localUrl: string): Promise<boolean> {\n try {\n await local.info(localUrl);\n return true;\n } catch {\n return false;\n }\n}\n\n/** Runs the auto-bind check right away (set by {@link startAutoBind}). */\nlet triggerAutoBind: (() => void) | undefined;\n\nfunction AgentPage({ ctx }: { ctx: PluginContext }) {\n const server = useHostContext<ServerContext>(ctx, \"server\");\n const workspace = useHostContext<WorkspaceContext>(ctx, \"workspace\");\n const [tab, setTabState] = useState<Tab>(() => (ctx.storage.get<string>(TAB_KEY, \"local\") === \"remote\" ? \"remote\" : \"local\"));\n const setTab = (next: Tab) => {\n ctx.storage.set(TAB_KEY, next);\n setTabState(next);\n };\n const [localUrl] = useState(() => ctx.storage.get(LOCAL_URL_KEY, DEFAULT_LOCAL_URL));\n const [token, setToken] = useState(() => ctx.secureStorage.get(TOKEN_KEY, \"\"));\n const [phase, setPhase] = useState<Phase>({ kind: \"checking\" });\n const [service, setService] = useState<LocalServiceStatus | null>(null);\n const [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const alive = useRef(true);\n const svc = localService(ctx);\n\n const refresh = useCallback(async () => {\n let hosted: LocalServiceStatus | null = null;\n if (svc) {\n try {\n hosted = await svc.status();\n } catch {\n hosted = null;\n }\n }\n if (!alive.current) return;\n setService(hosted);\n // A service the app started brings its own control token.\n let active = token;\n if (isActive(hosted) && hosted?.token) {\n active = hosted.token;\n if (hosted.token !== token) {\n ctx.secureStorage.set(TOKEN_KEY, hosted.token);\n setToken(hosted.token);\n }\n }\n try {\n await local.info(localUrl);\n } catch {\n if (alive.current) setPhase({ kind: isActive(hosted) ? \"starting\" : \"offline\" });\n return;\n }\n if (!active) {\n if (alive.current) setPhase({ kind: \"needsCode\" });\n return;\n }\n try {\n const status = await local.status(localUrl, active);\n if (alive.current) setPhase({ kind: \"ready\", status });\n } catch (reason) {\n if (!alive.current) return;\n if (reason instanceof LocalError && reason.kind === \"unauthorized\") {\n // Reinstalled service (new control token), or another toc-ocra holds the port: pair again.\n ctx.secureStorage.remove(TOKEN_KEY);\n setToken(\"\");\n setPhase({ kind: \"needsCode\" });\n } else {\n setPhase({ kind: \"offline\" });\n }\n }\n }, [ctx, localUrl, svc, token]);\n\n useEffect(() => {\n alive.current = true;\n void refresh();\n const timer = window.setInterval(() => void refresh(), POLL_MS);\n return () => { alive.current = false; window.clearInterval(timer); };\n }, [refresh]);\n\n useEffect(() => {\n if (phase.kind === \"ready\") {\n const s = phase.status;\n ctx.reportHealth(s.paired && s.connected ? { status: \"healthy\", summary: ctx.t(\"health.online\", { name: s.device_name }) } : { status: \"degraded\", summary: ctx.t(s.paired ? \"health.disconnected\" : \"health.unpaired\") });\n } else if (phase.kind === \"offline\") {\n ctx.reportHealth({ status: \"degraded\", summary: ctx.t(svc ? \"health.disabled\" : \"health.offline\") });\n }\n }, [ctx, phase, svc]);\n\n const run = async (action: () => Promise<void>) => {\n setBusy(true);\n setError(\"\");\n try {\n await action();\n } catch (reason) {\n setError(errorText(ctx, reason));\n } finally {\n setBusy(false);\n }\n };\n\n const toggleService = (on: boolean) => run(async () => {\n if (!svc) return;\n if (!on) {\n ctx.storage.set(LOCAL_SERVICE_KEY, \"off\");\n setService(await svc.stop());\n await refresh();\n return;\n }\n ctx.storage.set(LOCAL_SERVICE_KEY, \"on\");\n // Turning it on means \"take tasks here\": undo a manual unbind.\n ctx.storage.remove(AUTO_BIND_KEY);\n // A background service already runs the agent: use it, do not start a\n // second one that could only fail on the taken port.\n if (!isActive(service) && (await hasLocalInstance(localUrl))) {\n triggerAutoBind?.();\n await refresh();\n return;\n }\n const started = await svc.start();\n setService(started);\n if (started.token) {\n ctx.secureStorage.set(TOKEN_KEY, started.token);\n setToken(started.token);\n }\n if (await waitForLocalService(localUrl, () => alive.current)) triggerAutoBind?.();\n await refresh();\n });\n\n const hostedExit = service?.state === \"exited\" ? service : null;\n const external = Boolean(svc) && !isActive(service) && (phase.kind === \"ready\" || phase.kind === \"needsCode\");\n\n return (\n <div className=\"da-app\">\n <PageHeader title={ctx.t(\"page.title\")} subtitle={ctx.t(\"page.subtitle\")} />\n <div className=\"da-tabs\" role=\"tablist\" aria-label={ctx.t(\"page.title\")}>\n {([\"local\", \"remote\"] as const).map(item => (\n <button key={item} type=\"button\" role=\"tab\" aria-selected={tab === item} className={tab === item ? \"da-tab da-tab-active\" : \"da-tab\"} onClick={() => setTab(item)}>\n {ctx.t(`tabs.${item}`)}\n </button>\n ))}\n </div>\n {error && <div role=\"alert\" className=\"da-alert\">{error}</div>}\n\n {tab === \"remote\" && (\n <RemoteTab ctx={ctx} server={server} workspace={workspace} localDeviceId={phase.kind === \"ready\" && phase.status.paired ? phase.status.device_id : \"\"} />\n )}\n\n {tab === \"local\" && (\n <>\n {svc && (\n <LocalServiceCard\n ctx={ctx}\n status={service}\n external={external}\n exit={hostedExit}\n busy={busy}\n onToggle={on => void toggleService(on)}\n />\n )}\n {phase.kind === \"checking\" && <Card><span className=\"da-muted\">{ctx.t(\"common.checking\")}</span></Card>}\n {phase.kind === \"starting\" && <Card><span className=\"da-muted\">{ctx.t(\"service.starting\")}</span></Card>}\n {phase.kind === \"offline\" && !svc && <OfflineCard ctx={ctx} localUrl={localUrl} />}\n {phase.kind === \"needsCode\" && (\n <PairCard ctx={ctx} busy={busy} onPair={code => run(async () => {\n const result = await local.pair(localUrl, code).catch((reason: unknown) => {\n if (reason instanceof LocalError && reason.code === \"code_wrong\") throw new Error(ctx.t(\"pair.wrong\"));\n if (reason instanceof LocalError && reason.code === \"locked\") throw new Error(ctx.t(\"pair.locked\"));\n throw reason;\n });\n ctx.secureStorage.set(TOKEN_KEY, result.token);\n setToken(result.token);\n })} />\n )}\n {phase.kind === \"ready\" && (\n <ReadyView\n ctx={ctx}\n status={phase.status}\n server={server}\n workspace={workspace}\n busy={busy}\n run={run}\n localUrl={localUrl}\n token={token}\n onStatus={status => setPhase({ kind: \"ready\", status })}\n />\n )}\n </>\n )}\n </div>\n );\n}\n\n/** Waits up to 15 s for the local service to answer. */\nasync function waitForLocalService(localUrl: string, alive: () => boolean): Promise<boolean> {\n for (let attempt = 0; attempt < 30 && alive(); attempt += 1) {\n try {\n await local.info(localUrl);\n return true;\n } catch {\n await new Promise(resolve => window.setTimeout(resolve, 500));\n }\n }\n return false;\n}\n\nfunction LocalServiceCard({ ctx, status, external, exit, busy, onToggle }: {\n ctx: PluginContext;\n status: LocalServiceStatus | null;\n external: boolean;\n exit: LocalServiceStatus | null;\n busy: boolean;\n onToggle: (on: boolean) => void;\n}) {\n const hosted = isActive(status);\n // Another toc-ocra (background service / terminal) already serves this\n // computer: the agent is on, it just is not owned by the desktop app.\n const viaExternal = !hosted && external;\n const on = hosted || viaExternal;\n const portTaken = exit?.exitCode === EXIT_PORT_IN_USE;\n return (\n <Card>\n <div className=\"da-switch\">\n <div>\n <CardTitle>{ctx.t(\"service.title\")}</CardTitle>\n <p className=\"da-text\">{ctx.t(viaExternal ? \"service.onExternalBody\" : on ? \"service.onBody\" : \"service.offBody\")}</p>\n </div>\n <Toggle checked={on} disabled={busy || viaExternal} label={ctx.t(\"service.title\")} onChange={onToggle} />\n </div>\n {hosted && <p className=\"da-muted\">{ctx.t(\"service.followsApp\")}</p>}\n {viaExternal && <p className=\"da-muted\">{ctx.t(\"service.external\")}</p>}\n {!on && portTaken && <p className=\"da-muted\">{ctx.t(\"service.portTaken\")}</p>}\n {exit && !portTaken && exit.exitCode !== 0 && (\n <div role=\"alert\" className=\"da-alert\">{ctx.t(\"service.crashed\", { error: exit.error || `exit ${exit.exitCode ?? exit.signal ?? \"?\"}` })}</div>\n )}\n </Card>\n );\n}\n\nfunction OfflineCard({ ctx, localUrl }: { ctx: PluginContext; localUrl: string }) {\n return (\n <Card>\n <CardTitle>{ctx.t(\"offline.title\")}</CardTitle>\n <p className=\"da-text\">{ctx.t(\"offline.body\", { url: localUrl })}</p>\n <div className=\"da-step\">{ctx.t(\"offline.once\")}</div>\n <Command ctx={ctx} value=\"npx toc-ocra@latest run\" />\n <div className=\"da-step\">{ctx.t(\"offline.service\")}</div>\n <Command ctx={ctx} value=\"npm install -g toc-ocra@latest && toc-ocra service:install\" />\n <p className=\"da-muted\">{ctx.t(\"offline.node\")}</p>\n </Card>\n );\n}\n\nfunction PairCard({ ctx, busy, onPair }: { ctx: PluginContext; busy: boolean; onPair: (code: string) => void }) {\n const [code, setCode] = useState(\"\");\n const valid = /^\\d{6}$/.test(code);\n return (\n <Card>\n <CardTitle>{ctx.t(\"pair.title\")}</CardTitle>\n <p className=\"da-text\">{ctx.t(\"pair.body\")}</p>\n <Command ctx={ctx} value=\"toc-ocra code\" />\n <form className=\"da-row\" onSubmit={event => { event.preventDefault(); if (valid) onPair(code); }}>\n <Input\n value={code}\n onChange={event => setCode(event.target.value.replace(/\\D/g, \"\").slice(0, 6))}\n placeholder={ctx.t(\"pair.placeholder\")}\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n aria-label={ctx.t(\"pair.placeholder\")}\n className=\"da-code-input\"\n />\n <Btn primary type=\"submit\" disabled={!valid || busy}>{ctx.t(\"pair.submit\")}</Btn>\n </form>\n </Card>\n );\n}\n\nfunction ReadyView({ ctx, status, server, workspace, busy, run, localUrl, token, onStatus }: {\n ctx: PluginContext;\n status: LocalStatus;\n server: ServerContext | undefined;\n workspace: WorkspaceContext | undefined;\n busy: boolean;\n run: (action: () => Promise<void>) => Promise<void>;\n localUrl: string;\n token: string;\n onStatus: (status: LocalStatus) => void;\n}) {\n const boundElsewhere = status.paired && server && !sameServer(status.server_url, server.origin);\n const unpair = () => run(async () => {\n // Revoke on the server too when the device belongs to the server shown.\n if (status.device_id && server && sameServer(status.server_url, server.origin)) {\n await ctx.core.request(`/devices/${encodeURIComponent(status.device_id)}/agent`, { method: \"DELETE\" }).catch(() => undefined);\n }\n ctx.storage.set(AUTO_BIND_KEY, \"off\");\n onStatus(await local.unpair(localUrl, token));\n });\n return (\n <>\n <Card>\n <CardTitle>{ctx.t(\"status.title\")}</CardTitle>\n <dl className=\"da-grid\">\n <div><dt>{ctx.t(\"status.service\")}</dt><dd>toc-ocra {status.version} \u00B7 {status.hostname}</dd></div>\n <div><dt>{ctx.t(\"status.binding\")}</dt><dd><BindingBadge ctx={ctx} status={status} /></dd></div>\n {status.paired && <div><dt>{ctx.t(\"status.device\")}</dt><dd>{status.device_name}</dd></div>}\n {status.paired && <div><dt>{ctx.t(\"status.server\")}</dt><dd className=\"da-mono\">{status.server_url}</dd></div>}\n {status.paired && <div><dt>{ctx.t(\"status.runs\")}</dt><dd>{status.active_runs}</dd></div>}\n </dl>\n {status.paired && !status.connected && status.connection_error && <p className=\"da-muted\">{ctx.t(\"status.lastError\", { error: status.connection_error })}</p>}\n {status.token_from_env && <p className=\"da-muted\">{ctx.t(\"status.tokenFromEnv\")}</p>}\n {status.paired && (\n <div className=\"da-row\">\n <Btn danger disabled={busy || status.token_from_env} onClick={() => void unpair()}>{ctx.t(\"status.unpair\")}</Btn>\n </div>\n )}\n </Card>\n\n {(!status.paired || status.unauthorized || boundElsewhere) && (\n <BindCard ctx={ctx} status={status} server={server} workspace={workspace} busy={busy} run={run} localUrl={localUrl} token={token} onStatus={onStatus} rebind={status.paired} />\n )}\n\n <Card>\n <CardTitle>{ctx.t(\"cli.title\")}</CardTitle>\n <ul className=\"da-list\">\n {status.providers.filter(provider => provider.installed).map(provider => (\n <li key={provider.id}>\n <span className=\"da-mono\">{provider.id}</span>\n <span className=\"da-muted\">{provider.version}</span>\n {provider.runnable ? <Badge variant=\"ok\">{ctx.t(\"cli.runnable\")}</Badge> : <Badge variant=\"muted\">{ctx.t(\"cli.detectOnly\")}</Badge>}\n </li>\n ))}\n {!status.providers.some(provider => provider.installed) && <li className=\"da-muted\">{ctx.t(\"cli.none\")}</li>}\n </ul>\n <div className=\"da-row\">\n <Btn disabled={busy} onClick={() => void run(async () => onStatus(await local.detect(localUrl, token)))}>{ctx.t(\"cli.redetect\")}</Btn>\n </div>\n </Card>\n </>\n );\n}\n\nfunction BindingBadge({ ctx, status }: { ctx: PluginContext; status: LocalStatus }) {\n if (!status.paired) return <Badge variant=\"muted\">{ctx.t(\"binding.unpaired\")}</Badge>;\n if (status.unauthorized) return <Badge variant=\"err\">{ctx.t(\"binding.revoked\")}</Badge>;\n if (status.connected) return <Badge variant=\"ok\">{ctx.t(\"binding.online\")}</Badge>;\n return <Badge variant=\"warn\">{ctx.t(\"binding.connecting\")}</Badge>;\n}\n\nfunction BindCard({ ctx, status, server, workspace, busy, run, localUrl, token, onStatus, rebind }: {\n ctx: PluginContext;\n status: LocalStatus;\n server: ServerContext | undefined;\n workspace: WorkspaceContext | undefined;\n busy: boolean;\n run: (action: () => Promise<void>) => Promise<void>;\n localUrl: string;\n token: string;\n onStatus: (status: LocalStatus) => void;\n rebind: boolean;\n}) {\n const [devices, setDevices] = useState<Device[]>([]);\n const [choice, setChoice] = useState(\"new\");\n const [name, setName] = useState(status.hostname);\n const [serverUrl, setServerUrl] = useState(server?.origin ?? \"\");\n useEffect(() => { if (server?.origin) setServerUrl(server.origin); }, [server?.origin]);\n\n useEffect(() => {\n if (!workspace?.id) return;\n let cancelled = false;\n ctx.core.request<{ items?: Device[] }>(`/workspaces/${encodeURIComponent(workspace.id)}/devices`)\n .then(result => { if (!cancelled) setDevices((result.items ?? []).filter(device => device.is_mine)); })\n .catch(() => { if (!cancelled) setDevices([]); });\n return () => { cancelled = true; };\n }, [ctx, workspace?.id]);\n\n const bind = () => run(async () => {\n if (!workspace?.id) throw new Error(ctx.t(\"bind.noWorkspace\"));\n if (!serverUrl.trim()) throw new Error(ctx.t(\"bind.noServer\"));\n let deviceId = choice;\n if (choice === \"new\") {\n const created = await ctx.core.request<{ id: string }>(`/workspaces/${encodeURIComponent(workspace.id)}/devices`, {\n method: \"POST\",\n body: JSON.stringify({ name: name.trim() || status.hostname, location: \"local\", platform: status.platform, note: \"\", share_to_workspace: false }),\n });\n deviceId = created.id;\n setChoice(deviceId);\n }\n const pairing = await ctx.core.request<{ code: string }>(`/devices/${encodeURIComponent(deviceId)}/pairing-code`, { method: \"POST\" });\n onStatus(await local.enroll(localUrl, token, serverUrl.trim(), pairing.code));\n ctx.storage.remove(AUTO_BIND_KEY);\n ctx.notify({ title: ctx.t(\"page.title\"), body: ctx.t(\"bind.done\", { server: server?.name ?? serverUrl }) });\n });\n\n return (\n <Card>\n <CardTitle>{ctx.t(rebind ? \"bind.rebindTitle\" : \"bind.title\")}</CardTitle>\n {rebind && status.unauthorized && <p className=\"da-text\">{ctx.t(\"bind.revoked\")}</p>}\n {rebind && !status.unauthorized && <p className=\"da-text\">{ctx.t(\"bind.elsewhere\", { bound: status.server_url, current: server?.origin ?? \"\" })}</p>}\n <p className=\"da-text\">{ctx.t(\"bind.body\", { server: server?.name ?? \"\", workspace: workspace?.name ?? \"\" })}</p>\n <label className=\"da-field\">\n <span>{ctx.t(\"bind.server\")}</span>\n <Input value={serverUrl} onChange={event => setServerUrl(event.target.value)} spellCheck={false} className=\"da-mono\" />\n </label>\n <label className=\"da-field\">\n <span>{ctx.t(\"bind.device\")}</span>\n <select className=\"da-select\" value={choice} onChange={event => setChoice(event.target.value)}>\n <option value=\"new\">{ctx.t(\"bind.newDevice\")}</option>\n {devices.map(device => (\n <option key={device.id} value={device.id}>{device.name}{device.paired ? ` \u00B7 ${ctx.t(\"bind.replaces\")}` : \"\"}</option>\n ))}\n </select>\n </label>\n {choice === \"new\" && (\n <label className=\"da-field\">\n <span>{ctx.t(\"bind.name\")}</span>\n <Input value={name} onChange={event => setName(event.target.value)} maxLength={100} />\n </label>\n )}\n <div className=\"da-row\">\n <Btn primary disabled={busy || !workspace?.id} onClick={() => void bind()}>{ctx.t(busy ? \"bind.working\" : \"bind.submit\")}</Btn>\n </div>\n </Card>\n );\n}\n\n/**\n * Keeps this computer bound to the server the desktop app is signed in to\n * (public or LAN): when they differ, asks the server for this machine's device\n * (matched by machine id, so the same device is reused) and re-enrolls the\n * local service. Waits while tasks are running; stays out of the way after\n * the user unbinds by hand or when the server revoked the device.\n */\nfunction startAutoBind(ctx: PluginContext) {\n let busy = false;\n let deferredFor = \"\";\n const failedAt = new Map<string, number>();\n\n const tick = async () => {\n if (busy || ctx.signal.aborted) return;\n const server = ctx.core.context<ServerContext>(\"server\");\n const token = ctx.secureStorage.get(TOKEN_KEY, \"\");\n if (!server?.origin || !token || ctx.storage.get<string>(AUTO_BIND_KEY, \"on\") === \"off\") return;\n if (Date.now() - (failedAt.get(server.origin) ?? 0) < AUTO_BIND_RETRY_MS) return;\n busy = true;\n try {\n const localUrl = ctx.storage.get(LOCAL_URL_KEY, DEFAULT_LOCAL_URL);\n const status = await local.status(localUrl, token);\n if (!status.machine_id || status.token_from_env) return;\n if (status.paired && (status.unauthorized || sameServer(status.server_url, server.origin))) {\n deferredFor = \"\";\n return;\n }\n if (status.active_runs > 0) {\n if (deferredFor !== server.origin) {\n deferredFor = server.origin;\n ctx.notify({ title: ctx.t(\"page.title\"), body: ctx.t(\"auto.deferred\", { server: server.name || server.origin }) });\n }\n return;\n }\n const pairing = await ctx.core.request<{ code: string; device_name: string }>(\"/devices/machine/pairing-code\", {\n method: \"POST\",\n body: JSON.stringify({\n machine_id: status.machine_id,\n hostname: status.hostname,\n platform: status.platform,\n current_device_id: status.paired ? status.device_id : \"\",\n }),\n });\n await local.enroll(localUrl, token, server.origin, pairing.code);\n deferredFor = \"\";\n failedAt.delete(server.origin);\n ctx.notify({ title: ctx.t(\"page.title\"), body: ctx.t(\"auto.done\", { server: server.name || server.origin, device: pairing.device_name }) });\n } catch (reason) {\n // Local service offline / plugin not paired yet: just try again next tick.\n // A server or enroll failure backs off for this server.\n if (!(reason instanceof LocalError) || reason.kind === \"rejected\") failedAt.set(server.origin, Date.now());\n } finally {\n busy = false;\n }\n };\n\n const timer = window.setInterval(() => void tick(), AUTO_BIND_MS);\n triggerAutoBind = () => void tick();\n ctx.registerDisposer(() => {\n window.clearInterval(timer);\n triggerAutoBind = undefined;\n });\n ctx.registerDisposer(ctx.core.onContextChange(\"server\", () => void tick()));\n window.setTimeout(() => void tick(), 1_500);\n}\n\n/**\n * Follows the desktop app: when the user left the local agent on, start it\n * again with the app. The app stops it when it quits.\n */\nfunction startLocalServiceIfEnabled(ctx: PluginContext) {\n const svc = localService(ctx);\n if (!svc || ctx.storage.get<string>(LOCAL_SERVICE_KEY, \"off\") !== \"on\") return;\n const localUrl = ctx.storage.get(LOCAL_URL_KEY, DEFAULT_LOCAL_URL);\n void hasLocalInstance(localUrl)\n .then(running => {\n if (running) {\n // Already served by a background service: nothing to start.\n window.setTimeout(() => triggerAutoBind?.(), 3_000);\n return undefined;\n }\n return svc.start();\n })\n .then(status => {\n if (!status) return;\n if (status.token) ctx.secureStorage.set(TOKEN_KEY, status.token);\n window.setTimeout(() => triggerAutoBind?.(), 3_000);\n })\n .catch(() => undefined);\n}\n\nexport default definePlugin({\n activate(ctx) {\n ctx.registerNavigation(\"agent.nav\", <Icon />);\n ctx.registerRoute(\"agent.home\", <AgentPage ctx={ctx} />);\n startLocalServiceIfEnabled(ctx);\n startAutoBind(ctx);\n },\n});\n", "/**\n * Runtime part of the SDK that ends up inside plugin bundles. Keep it tiny:\n * everything here is copied into every plugin. Build-time helpers live in lib/.\n * `react` resolves to the host's instance through `toc-plugin build`.\n */\nimport { useSyncExternalStore } from \"react\";\n\n/** Host contract this SDK targets. Must match PLUGIN_API_VERSION in lib/constants.mjs. */\nexport const PLUGIN_API_VERSION = \"1.0.0\";\n\n/**\n * Identity helper that gives a plugin module full type inference.\n *\n * @template {import(\"./index\").PluginModule} T\n * @param {T} plugin\n * @returns {T}\n */\nexport function definePlugin(plugin) {\n if (!plugin || typeof plugin.activate !== \"function\") {\n throw new TypeError(\"definePlugin() needs an object with an activate(context) function\");\n }\n return plugin;\n}\n\n/**\n * Re-renders when the app publishes a new value under `key`.\n *\n * @template T\n * @param {import(\"./index\").PluginContext} ctx\n * @param {string} key\n * @returns {T | undefined}\n */\nexport function useHostContext(ctx, key) {\n return useSyncExternalStore(\n listener => ctx.core.onContextChange(key, listener),\n () => ctx.core.context(key),\n );\n}\n", "/**\n * Client for the local toc-ocra service (`toc-ocra run`) on this computer.\n * The plugin pairs once with the 6-digit connection code and then sends the\n * control token as a bearer token.\n */\nexport const DEFAULT_LOCAL_URL = \"http://127.0.0.1:17339\";\n\nexport interface LocalInfo {\n name: string;\n version: string;\n protocol: number;\n paired: boolean;\n}\n\nexport interface LocalProvider {\n id: string;\n installed: boolean;\n runnable: boolean;\n version: string;\n}\n\nexport interface LocalStatus {\n version: string;\n hostname: string;\n /** Stable id of this installation (older services omit it). */\n machine_id?: string;\n platform: \"mac\" | \"win\" | \"linux\";\n paired: boolean;\n running: boolean;\n device_id: string;\n device_name: string;\n server_url: string;\n connected: boolean;\n unauthorized: boolean;\n connection_error: string;\n active_runs: number;\n allowed_roots: string[];\n token_from_env: boolean;\n providers: LocalProvider[];\n}\n\n/** Why a local call failed: the service is not running, the token is not accepted, or the service said no. */\nexport class LocalError extends Error {\n constructor(readonly kind: \"offline\" | \"unauthorized\" | \"rejected\", message: string, readonly code = \"\") {\n super(message);\n }\n}\n\nasync function call<T>(base: string, path: string, init: RequestInit & { token?: string } = {}): Promise<T> {\n const headers = new Headers(init.headers);\n if (init.token) headers.set(\"Authorization\", `Bearer ${init.token}`);\n if (init.body) headers.set(\"Content-Type\", \"application/json\");\n let response: Response;\n try {\n response = await fetch(`${base.replace(/\\/+$/, \"\")}${path}`, { ...init, headers, cache: \"no-store\" });\n } catch {\n throw new LocalError(\"offline\", \"local service unreachable\");\n }\n const body = (await response.json().catch(() => null)) as Record<string, unknown> | null;\n if (response.status === 401) throw new LocalError(\"unauthorized\", \"unauthorized\");\n if (!response.ok) {\n const code = typeof body?.error === \"string\" ? body.error : \"\";\n const message = typeof body?.message === \"string\" ? body.message : code || `HTTP ${response.status}`;\n throw new LocalError(\"rejected\", message, code);\n }\n return body as T;\n}\n\nexport const local = {\n info: (base: string) => call<LocalInfo>(base, \"/control/info\"),\n pair: (base: string, code: string) => call<{ token: string }>(base, \"/control/pair\", { method: \"POST\", body: JSON.stringify({ code }) }),\n status: (base: string, token: string) => call<LocalStatus>(base, \"/control/status\", { token }),\n enroll: (base: string, token: string, serverUrl: string, code: string) =>\n call<LocalStatus>(base, \"/control/enroll\", { method: \"POST\", token, body: JSON.stringify({ server_url: serverUrl, code }) }),\n unpair: (base: string, token: string) => call<LocalStatus>(base, \"/control/unpair\", { method: \"POST\", token }),\n detect: (base: string, token: string) => call<LocalStatus>(base, \"/control/detect\", { method: \"POST\", token }),\n};\n\n/** Two backend addresses name the same server (trailing slash and case insensitive). */\nexport function sameServer(left: string, right: string): boolean {\n const normalize = (value: string) => {\n try {\n return new URL(value).origin.toLowerCase();\n } catch {\n return value.trim().replace(/\\/+$/, \"\").toLowerCase();\n }\n };\n return Boolean(left && right) && normalize(left) === normalize(right);\n}\n", "import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { PluginContext } from \"@toc-starter/plugin-sdk\";\nimport { Badge, Btn, Card, CardTitle, Input, Toggle } from \"@toc-starter/plugin-sdk/ui\";\nimport { Command, errorText, type Device, type ServerContext, type WorkspaceContext } from \"./shared\";\n\n/**\n * \u5176\u4ED6\u7535\u8111: install the device agent on another machine (a Linux server,\n * another Mac, Windows). The page creates the device and a one-time pairing\n * code, shows one command to run there (install + pair + background\n * service), and polls until that machine comes online. Enabling / disabling\n * later is a server-side switch that keeps the pairing.\n */\n\ntype Platform = \"mac\" | \"linux\" | \"win\";\nconst PLATFORMS: readonly Platform[] = [\"linux\", \"mac\", \"win\"];\nconst IDLE_POLL_MS = 10_000;\nconst WAIT_POLL_MS = 3_000;\nconst REMOTE_SERVER_KEY = \"remoteServerUrl\";\n\ninterface Pending {\n deviceId: string;\n deviceName: string;\n platform: Platform;\n code: string;\n expiresAt: number;\n /** Credential id before pairing; a new one means the command ran. */\n baseline: string | null;\n matched: boolean;\n}\n\nconst LOOPBACK = new Set([\"127.0.0.1\", \"localhost\", \"[::1]\", \"::1\", \"0.0.0.0\"]);\n\n/** The server origin to put in the command, or null when it is not an http(s) URL. */\nfunction commandServer(value: string): string | null {\n try {\n const url = new URL(value.trim());\n return url.protocol === \"http:\" || url.protocol === \"https:\" ? url.origin : null;\n } catch {\n return null;\n }\n}\n\nfunction isLoopback(origin: string): boolean {\n try {\n return LOOPBACK.has(new URL(origin).hostname);\n } catch {\n return false;\n }\n}\n\nexport function setupCommand(platform: Platform, code: string, server: string): string {\n const setup = `toc-ocra setup --code ${code} --server ${server}`;\n // PowerShell 5.1 has no `&&`; `if ($?)` runs setup only after a successful install.\n if (platform === \"win\") return `npm install -g toc-ocra@latest; if ($?) { ${setup} }`;\n return `npm install -g toc-ocra@latest && ${setup}`;\n}\n\nfunction DeviceBadge({ ctx, device }: { ctx: PluginContext; device: Device }) {\n if (device.status === \"online\") return <Badge variant=\"ok\">{ctx.t(\"remote.status.online\")}</Badge>;\n if (device.status === \"disabled\") return <Badge variant=\"warn\">{ctx.t(\"remote.status.disabled\")}</Badge>;\n if (device.status === \"offline\") return <Badge variant=\"err\">{ctx.t(\"remote.status.offline\")}</Badge>;\n return <Badge variant=\"muted\">{ctx.t(\"remote.status.notConnected\")}</Badge>;\n}\n\nexport function RemoteTab({ ctx, server, workspace, localDeviceId }: {\n ctx: PluginContext;\n server: ServerContext | undefined;\n workspace: WorkspaceContext | undefined;\n /** This computer's device, listed on the \u672C\u673A tab instead. */\n localDeviceId: string;\n}) {\n const [devices, setDevices] = useState<Device[] | null>(null);\n const [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [pending, setPending] = useState<Pending | null>(null);\n const [adding, setAdding] = useState(false);\n const [name, setName] = useState(\"\");\n const [platform, setPlatform] = useState<Platform>(\"linux\");\n const [serverUrl, setServerUrl] = useState(() => ctx.storage.get<string>(REMOTE_SERVER_KEY, \"\") || server?.origin || \"\");\n const pendingRef = useRef(pending);\n pendingRef.current = pending;\n const alive = useRef(true);\n\n useEffect(() => {\n if (!ctx.storage.get<string>(REMOTE_SERVER_KEY, \"\") && server?.origin) setServerUrl(server.origin);\n }, [ctx, server?.origin]);\n\n const load = useCallback(async () => {\n if (!workspace?.id) return;\n try {\n const result = await ctx.core.request<{ items?: Device[] }>(`/workspaces/${encodeURIComponent(workspace.id)}/devices`);\n if (!alive.current) return;\n const mine = (result.items ?? []).filter(device => device.is_mine && device.id !== localDeviceId);\n setDevices(mine);\n const waiting = pendingRef.current;\n if (waiting && !waiting.matched) {\n const device = mine.find(item => item.id === waiting.deviceId);\n if (device?.agent_id && device.agent_id !== waiting.baseline && device.terminal_online) {\n setPending({ ...waiting, matched: true });\n ctx.notify({ title: ctx.t(\"page.title\"), body: ctx.t(\"remote.matchedNotice\", { name: device.name }) });\n }\n }\n } catch (reason) {\n if (alive.current) setError(errorText(ctx, reason));\n }\n }, [ctx, localDeviceId, workspace?.id]);\n\n const waiting = Boolean(pending && !pending.matched);\n useEffect(() => {\n alive.current = true;\n void load();\n const timer = window.setInterval(() => void load(), waiting ? WAIT_POLL_MS : IDLE_POLL_MS);\n return () => { alive.current = false; window.clearInterval(timer); };\n }, [load, waiting]);\n\n const run = async (action: () => Promise<void>) => {\n setBusy(true);\n setError(\"\");\n try {\n await action();\n } catch (reason) {\n setError(errorText(ctx, reason));\n } finally {\n setBusy(false);\n }\n };\n\n const origin = commandServer(serverUrl);\n const saveServer = (value: string) => {\n setServerUrl(value);\n if (value.trim() && value.trim() !== server?.origin) ctx.storage.set(REMOTE_SERVER_KEY, value.trim());\n else ctx.storage.remove(REMOTE_SERVER_KEY);\n };\n\n const pair = (device: Pick<Device, \"id\" | \"name\" | \"platform\" | \"agent_id\">) => run(async () => {\n if (!origin) throw new Error(ctx.t(\"remote.serverInvalid\"));\n const result = await ctx.core.request<{ code: string; expires_at: number }>(`/devices/${encodeURIComponent(device.id)}/pairing-code`, { method: \"POST\" });\n setPending({\n deviceId: device.id,\n deviceName: device.name,\n platform: PLATFORMS.includes(device.platform) ? device.platform : \"linux\",\n code: result.code,\n expiresAt: result.expires_at,\n baseline: device.agent_id ?? null,\n matched: false,\n });\n });\n\n const addComputer = () => run(async () => {\n if (!workspace?.id) throw new Error(ctx.t(\"bind.noWorkspace\"));\n if (!origin) throw new Error(ctx.t(\"remote.serverInvalid\"));\n const deviceName = name.trim() || ctx.t(`remote.platform.${platform}`);\n const created = await ctx.core.request<Device>(`/workspaces/${encodeURIComponent(workspace.id)}/devices`, {\n method: \"POST\",\n body: JSON.stringify({ name: deviceName, location: platform === \"linux\" ? \"cloud\" : \"local\", platform, note: \"\", share_to_workspace: false }),\n });\n const result = await ctx.core.request<{ code: string; expires_at: number }>(`/devices/${encodeURIComponent(created.id)}/pairing-code`, { method: \"POST\" });\n setPending({ deviceId: created.id, deviceName: created.name || deviceName, platform, code: result.code, expiresAt: result.expires_at, baseline: null, matched: false });\n setAdding(false);\n setName(\"\");\n await load();\n });\n\n const setEnabled = (device: Device, enabled: boolean) => run(async () => {\n await ctx.core.request(`/devices/${encodeURIComponent(device.id)}/enabled`, { method: \"PUT\", body: JSON.stringify({ enabled }) });\n await load();\n });\n\n return (\n <>\n {error && <div role=\"alert\" className=\"da-alert\">{error}</div>}\n <Card>\n <CardTitle>{ctx.t(\"remote.title\")}</CardTitle>\n <p className=\"da-text\">{ctx.t(\"remote.body\")}</p>\n <label className=\"da-field\">\n <span>{ctx.t(\"remote.server\")}</span>\n <Input value={serverUrl} onChange={event => saveServer(event.target.value)} spellCheck={false} className=\"da-mono\" />\n </label>\n {!origin && <p className=\"da-muted da-warn\">{ctx.t(\"remote.serverInvalid\")}</p>}\n {origin && isLoopback(origin) && <p className=\"da-muted da-warn\">{ctx.t(\"remote.loopback\")}</p>}\n {!adding && (\n <div className=\"da-row\">\n <Btn primary disabled={busy || !workspace?.id} onClick={() => setAdding(true)}>{ctx.t(\"remote.add\")}</Btn>\n </div>\n )}\n {adding && (\n <form className=\"da-form\" onSubmit={event => { event.preventDefault(); void addComputer(); }}>\n <label className=\"da-field\">\n <span>{ctx.t(\"remote.platformLabel\")}</span>\n <select className=\"da-select\" value={platform} onChange={event => setPlatform(event.target.value as Platform)}>\n {PLATFORMS.map(item => <option key={item} value={item}>{ctx.t(`remote.platform.${item}`)}</option>)}\n </select>\n </label>\n <label className=\"da-field\">\n <span>{ctx.t(\"remote.name\")}</span>\n <Input value={name} onChange={event => setName(event.target.value)} maxLength={100} placeholder={ctx.t(\"remote.namePlaceholder\")} />\n </label>\n <div className=\"da-row\">\n <Btn primary type=\"submit\" disabled={busy || !origin}>{ctx.t(busy ? \"remote.working\" : \"remote.generate\")}</Btn>\n <Btn type=\"button\" disabled={busy} onClick={() => setAdding(false)}>{ctx.t(\"remote.cancel\")}</Btn>\n </div>\n </form>\n )}\n </Card>\n\n {pending && origin && (\n <PendingCard ctx={ctx} pending={pending} origin={origin} busy={busy}\n onPlatform={value => setPending({ ...pending, platform: value })}\n onRegenerate={() => void pair({ id: pending.deviceId, name: pending.deviceName, platform: pending.platform, agent_id: pending.baseline })}\n onClose={() => setPending(null)} />\n )}\n\n <Card>\n <CardTitle>{ctx.t(\"remote.listTitle\")}</CardTitle>\n {devices === null && <p className=\"da-muted\">{ctx.t(\"common.checking\")}</p>}\n {devices?.length === 0 && <p className=\"da-muted\">{ctx.t(\"remote.empty\")}</p>}\n {devices && devices.length > 0 && (\n <ul className=\"da-devices\">\n {devices.map(device => (\n <li key={device.id}>\n <div className=\"da-device-main\">\n <span className=\"da-device-name\">{device.name}</span>\n <span className=\"da-muted\">{ctx.t(`remote.platform.${PLATFORMS.includes(device.platform) ? device.platform : \"linux\"}`)}{device.agent_version ? ` \u00B7 toc-ocra ${device.agent_version}` : \"\"}</span>\n </div>\n <DeviceBadge ctx={ctx} device={device} />\n <div className=\"da-device-actions\">\n {(!device.paired || device.status === \"offline\" || device.status === \"not_connected\") && (\n <Btn disabled={busy || !origin} onClick={() => void pair(device)}>{ctx.t(device.paired ? \"remote.repair\" : \"remote.install\")}</Btn>\n )}\n {device.paired && (\n <label className=\"da-toggle\">\n <span>{ctx.t(\"remote.enabled\")}</span>\n <Toggle checked={!device.disabled} disabled={busy} label={ctx.t(\"remote.enabled\")} onChange={value => void setEnabled(device, value)} />\n </label>\n )}\n </div>\n </li>\n ))}\n </ul>\n )}\n <p className=\"da-muted\">{ctx.t(\"remote.disableHint\")}</p>\n <div className=\"da-step\">{ctx.t(\"remote.uninstall\")}</div>\n <Command ctx={ctx} value=\"toc-ocra service:uninstall\" />\n </Card>\n </>\n );\n}\n\nfunction PendingCard({ ctx, pending, origin, busy, onPlatform, onRegenerate, onClose }: {\n ctx: PluginContext;\n pending: Pending;\n origin: string;\n busy: boolean;\n onPlatform: (platform: Platform) => void;\n onRegenerate: () => void;\n onClose: () => void;\n}) {\n const [now, setNow] = useState(() => Math.floor(Date.now() / 1000));\n useEffect(() => {\n if (pending.matched) return;\n const timer = window.setInterval(() => setNow(Math.floor(Date.now() / 1000)), 1_000);\n return () => window.clearInterval(timer);\n }, [pending.matched]);\n const left = Math.max(0, pending.expiresAt - now);\n const expired = !pending.matched && left === 0;\n\n return (\n <Card>\n <CardTitle>{ctx.t(\"remote.pendingTitle\", { name: pending.deviceName })}</CardTitle>\n {pending.matched ? (\n <>\n <p className=\"da-text\"><Badge variant=\"ok\">{ctx.t(\"remote.matched\")}</Badge> {ctx.t(\"remote.matchedBody\", { name: pending.deviceName })}</p>\n <div className=\"da-row\"><Btn primary onClick={onClose}>{ctx.t(\"remote.done\")}</Btn></div>\n </>\n ) : (\n <>\n <p className=\"da-text\">{ctx.t(\"remote.pendingBody\")}</p>\n <div className=\"da-segment\" role=\"radiogroup\" aria-label={ctx.t(\"remote.platformLabel\")}>\n {PLATFORMS.map(item => (\n <button key={item} type=\"button\" role=\"radio\" aria-checked={pending.platform === item} className={pending.platform === item ? \"da-seg da-seg-active\" : \"da-seg\"} onClick={() => onPlatform(item)}>\n {ctx.t(`remote.platform.${item}`)}\n </button>\n ))}\n </div>\n <Command ctx={ctx} value={setupCommand(pending.platform, pending.code, origin)} />\n <ul className=\"da-hints\">\n <li>{ctx.t(\"remote.hintNode\")}</li>\n {pending.platform === \"linux\" && <li>{ctx.t(\"remote.hintLinux\")}</li>}\n {pending.platform === \"win\" && <li>{ctx.t(\"remote.hintWindows\")}</li>}\n <li>{expired ? ctx.t(\"remote.expired\") : ctx.t(\"remote.expires\", { minutes: Math.floor(left / 60), seconds: String(left % 60).padStart(2, \"0\") })}</li>\n </ul>\n <p className=\"da-muted\">{expired ? \"\" : ctx.t(\"remote.waiting\")}</p>\n <div className=\"da-row\">\n <Btn disabled={busy} onClick={onRegenerate}>{ctx.t(\"remote.regenerate\")}</Btn>\n <Btn disabled={busy} onClick={onClose}>{ctx.t(\"remote.cancel\")}</Btn>\n </div>\n </>\n )}\n </Card>\n );\n}\n", "import { useState } from \"react\";\nimport type { PluginContext } from \"@toc-starter/plugin-sdk\";\nimport { Btn } from \"@toc-starter/plugin-sdk/ui\";\nimport { LocalError } from \"./local\";\n\nexport const TOKEN_KEY = \"controlToken\";\nexport const LOCAL_URL_KEY = \"localUrl\";\n/** \"off\" after the user unbinds by hand; binding by hand turns it back on. */\nexport const AUTO_BIND_KEY = \"autoBind\";\n/** \"on\" while the user wants the desktop app to run the local agent. */\nexport const LOCAL_SERVICE_KEY = \"localService\";\n\nexport interface ServerContext { kind: \"cloud\" | \"lan\"; name: string; origin: string }\nexport interface WorkspaceContext { id: string; name: string }\n\n/** The fields of echo_admin's device view the plugin uses. */\nexport interface Device {\n id: string;\n name: string;\n platform: \"mac\" | \"win\" | \"linux\";\n location?: string;\n paired: boolean;\n status: \"not_connected\" | \"online\" | \"offline\" | \"disabled\";\n is_mine: boolean;\n /** Terminal agent credential id; only the owner sees it. Changes on every pairing. */\n agent_id?: string | null;\n terminal_online?: boolean;\n disabled?: boolean;\n agent_version?: string;\n last_seen_at?: number | null;\n}\n\nexport function errorText(ctx: PluginContext, error: unknown): string {\n if (error instanceof LocalError && error.kind === \"offline\") return ctx.t(\"error.offline\");\n return error instanceof Error ? error.message : String(error);\n}\n\nexport function Command({ ctx, value }: { ctx: PluginContext; value: string }) {\n const [copied, setCopied] = useState(false);\n return (\n <div className=\"da-command\">\n <code>{value}</code>\n <Btn onClick={() => void navigator.clipboard.writeText(value).then(() => { setCopied(true); window.setTimeout(() => setCopied(false), 1500); })}>\n {copied ? ctx.t(\"common.copied\") : ctx.t(\"common.copy\")}\n </Btn>\n </div>\n );\n}\n"],
5
- "mappings": "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",
6
- "names": ["require_react", "__commonJSMin", "exports", "module", "registry", "shared", "require_ui", "__commonJSMin", "exports", "module", "registry", "shared", "require_jsx_runtime", "__commonJSMin", "exports", "module", "registry", "shared", "import_react", "import_react", "definePlugin", "plugin", "useHostContext", "ctx", "key", "listener", "import_ui", "DEFAULT_LOCAL_URL", "LocalError", "kind", "message", "code", "call", "base", "path", "init", "headers", "response", "body", "local", "token", "serverUrl", "sameServer", "left", "right", "normalize", "value", "import_react", "import_ui", "import_react", "import_ui", "import_jsx_runtime", "TOKEN_KEY", "LOCAL_URL_KEY", "AUTO_BIND_KEY", "LOCAL_SERVICE_KEY", "errorText", "ctx", "error", "LocalError", "Command", "value", "copied", "setCopied", "import_jsx_runtime", "PLATFORMS", "IDLE_POLL_MS", "WAIT_POLL_MS", "REMOTE_SERVER_KEY", "LOOPBACK", "commandServer", "value", "url", "isLoopback", "origin", "setupCommand", "platform", "code", "server", "setup", "DeviceBadge", "ctx", "device", "RemoteTab", "workspace", "localDeviceId", "devices", "setDevices", "error", "setError", "busy", "setBusy", "pending", "setPending", "adding", "setAdding", "name", "setName", "setPlatform", "serverUrl", "setServerUrl", "pendingRef", "alive", "load", "result", "mine", "waiting", "item", "reason", "errorText", "timer", "run", "action", "saveServer", "pair", "addComputer", "deviceName", "created", "setEnabled", "enabled", "event", "PendingCard", "Command", "onPlatform", "onRegenerate", "onClose", "now", "setNow", "left", "expired", "import_jsx_runtime", "POLL_MS", "AUTO_BIND_MS", "AUTO_BIND_RETRY_MS", "EXIT_PORT_IN_USE", "TAB_KEY", "iconUrl", "Icon", "localService", "ctx", "service", "isActive", "status", "hasLocalInstance", "localUrl", "local", "triggerAutoBind", "AgentPage", "server", "useHostContext", "workspace", "tab", "setTabState", "setTab", "next", "LOCAL_URL_KEY", "DEFAULT_LOCAL_URL", "token", "setToken", "TOKEN_KEY", "phase", "setPhase", "setService", "error", "setError", "busy", "setBusy", "alive", "svc", "refresh", "hosted", "active", "reason", "LocalError", "timer", "s", "run", "action", "errorText", "toggleService", "on", "LOCAL_SERVICE_KEY", "AUTO_BIND_KEY", "started", "waitForLocalService", "hostedExit", "external", "item", "RemoteTab", "LocalServiceCard", "OfflineCard", "PairCard", "code", "result", "ReadyView", "attempt", "resolve", "exit", "onToggle", "viaExternal", "portTaken", "Command", "onPair", "setCode", "valid", "event", "onStatus", "boundElsewhere", "sameServer", "unpair", "BindingBadge", "BindCard", "provider", "rebind", "devices", "setDevices", "choice", "setChoice", "name", "setName", "serverUrl", "setServerUrl", "cancelled", "device", "bind", "deviceId", "pairing", "startAutoBind", "deferredFor", "failedAt", "tick", "startLocalServiceIfEnabled", "running", "index_default", "definePlugin"]
4
+ "sourcesContent": ["var registry = globalThis[\"__TOC_PLUGIN_SHARED__\"];\nvar shared = registry && registry[\"react\"];\nif (!shared) throw new Error(\"The host does not provide react; this plugin needs a newer app version.\");\nmodule.exports = shared;", "var registry = globalThis[\"__TOC_PLUGIN_SHARED__\"];\nvar shared = registry && registry[\"@toc-starter/plugin-sdk/ui\"];\nif (!shared) throw new Error(\"The host does not provide @toc-starter/plugin-sdk/ui; this plugin needs a newer app version.\");\nmodule.exports = shared;", "var registry = globalThis[\"__TOC_PLUGIN_SHARED__\"];\nvar shared = registry && registry[\"react/jsx-runtime\"];\nif (!shared) throw new Error(\"The host does not provide react/jsx-runtime; this plugin needs a newer app version.\");\nmodule.exports = shared;", "import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { definePlugin, useHostContext, type LocalServiceApi, type LocalServiceStatus, type PluginContext } from \"@toc-starter/plugin-sdk\";\nimport { Badge, Btn, Card, CardTitle, Input, PageHeader, Toggle } from \"@toc-starter/plugin-sdk/ui\";\nimport \"./styles.css\";\nimport { DEFAULT_LOCAL_URL, LocalError, local, sameServer, type LocalStatus } from \"./local\";\nimport { RemoteTab } from \"./remote\";\nimport { AUTO_BIND_KEY, Command, LOCAL_SERVICE_KEY, LOCAL_URL_KEY, TOKEN_KEY, errorText, type Device, type ServerContext, type WorkspaceContext } from \"./shared\";\n\nconst POLL_MS = 3_000;\nconst AUTO_BIND_MS = 10_000;\nconst AUTO_BIND_RETRY_MS = 60_000;\n/** toc-ocra's service entry exits with this when another toc-ocra holds the local port. */\nconst EXIT_PORT_IN_USE = 3;\nconst TAB_KEY = \"tab\";\n\n/** Resolved against dist/plugin/renderer.js. */\nconst iconUrl = new URL(\"../../assets/icon.svg\", import.meta.url).href;\n\ntype Phase =\n | { kind: \"checking\" }\n | { kind: \"offline\" }\n | { kind: \"starting\" }\n | { kind: \"needsCode\" }\n | { kind: \"ready\"; status: LocalStatus };\n\ntype Tab = \"local\" | \"remote\";\n\nfunction Icon() {\n return <img src={iconUrl} alt=\"\" width={16} height={16} draggable={false} />;\n}\n\n/** The desktop app's service API; undefined on hosts that predate it. */\nfunction localService(ctx: PluginContext): LocalServiceApi | undefined {\n const service = (ctx.core as { service?: LocalServiceApi }).service;\n try {\n return service && service.available() ? service : undefined;\n } catch {\n return undefined;\n }\n}\n\nconst isActive = (status: LocalServiceStatus | null | undefined) => status?.state === \"running\" || status?.state === \"starting\";\n\n/** Another toc-ocra (background service, terminal) already answers on this computer. */\nasync function hasLocalInstance(localUrl: string): Promise<boolean> {\n try {\n await local.info(localUrl);\n return true;\n } catch {\n return false;\n }\n}\n\n/** Runs the auto-bind check right away (set by {@link startAutoBind}). */\nlet triggerAutoBind: (() => void) | undefined;\n\nfunction AgentPage({ ctx }: { ctx: PluginContext }) {\n const server = useHostContext<ServerContext>(ctx, \"server\");\n const workspace = useHostContext<WorkspaceContext>(ctx, \"workspace\");\n const [tab, setTabState] = useState<Tab>(() => (ctx.storage.get<string>(TAB_KEY, \"local\") === \"remote\" ? \"remote\" : \"local\"));\n const setTab = (next: Tab) => {\n ctx.storage.set(TAB_KEY, next);\n setTabState(next);\n };\n const [localUrl] = useState(() => ctx.storage.get(LOCAL_URL_KEY, DEFAULT_LOCAL_URL));\n const [token, setToken] = useState(() => ctx.secureStorage.get(TOKEN_KEY, \"\"));\n const [phase, setPhase] = useState<Phase>({ kind: \"checking\" });\n const [service, setService] = useState<LocalServiceStatus | null>(null);\n const [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const alive = useRef(true);\n const svc = localService(ctx);\n\n const refresh = useCallback(async () => {\n let hosted: LocalServiceStatus | null = null;\n if (svc) {\n try {\n hosted = await svc.status();\n } catch {\n hosted = null;\n }\n }\n if (!alive.current) return;\n setService(hosted);\n // A service the app started brings its own control token.\n let active = token;\n if (isActive(hosted) && hosted?.token) {\n active = hosted.token;\n if (hosted.token !== token) {\n ctx.secureStorage.set(TOKEN_KEY, hosted.token);\n setToken(hosted.token);\n }\n }\n try {\n await local.info(localUrl);\n } catch {\n if (alive.current) setPhase({ kind: isActive(hosted) ? \"starting\" : \"offline\" });\n return;\n }\n if (!active) {\n if (alive.current) setPhase({ kind: \"needsCode\" });\n return;\n }\n try {\n const status = await local.status(localUrl, active);\n if (alive.current) setPhase({ kind: \"ready\", status });\n } catch (reason) {\n if (!alive.current) return;\n if (reason instanceof LocalError && reason.kind === \"unauthorized\") {\n // Reinstalled service (new control token), or another toc-ocra holds the port: pair again.\n ctx.secureStorage.remove(TOKEN_KEY);\n setToken(\"\");\n setPhase({ kind: \"needsCode\" });\n } else {\n setPhase({ kind: \"offline\" });\n }\n }\n }, [ctx, localUrl, svc, token]);\n\n useEffect(() => {\n alive.current = true;\n void refresh();\n const timer = window.setInterval(() => void refresh(), POLL_MS);\n return () => { alive.current = false; window.clearInterval(timer); };\n }, [refresh]);\n\n useEffect(() => {\n if (phase.kind === \"ready\") {\n const s = phase.status;\n ctx.reportHealth(s.paired && s.connected ? { status: \"healthy\", summary: ctx.t(\"health.online\", { name: s.device_name }) } : { status: \"degraded\", summary: ctx.t(s.paired ? \"health.disconnected\" : \"health.unpaired\") });\n } else if (phase.kind === \"offline\") {\n ctx.reportHealth({ status: \"degraded\", summary: ctx.t(svc ? \"health.disabled\" : \"health.offline\") });\n }\n }, [ctx, phase, svc]);\n\n const run = async (action: () => Promise<void>) => {\n setBusy(true);\n setError(\"\");\n try {\n await action();\n } catch (reason) {\n setError(errorText(ctx, reason));\n } finally {\n setBusy(false);\n }\n };\n\n const toggleService = (on: boolean) => run(async () => {\n if (!svc) return;\n if (!on) {\n ctx.storage.set(LOCAL_SERVICE_KEY, \"off\");\n setService(await svc.stop());\n await refresh();\n return;\n }\n ctx.storage.set(LOCAL_SERVICE_KEY, \"on\");\n // Turning it on means \"take tasks here\": undo a manual unbind.\n ctx.storage.remove(AUTO_BIND_KEY);\n // A background service already runs the agent: use it, do not start a\n // second one that could only fail on the taken port.\n if (!isActive(service) && (await hasLocalInstance(localUrl))) {\n triggerAutoBind?.();\n await refresh();\n return;\n }\n const started = await svc.start();\n setService(started);\n if (started.token) {\n ctx.secureStorage.set(TOKEN_KEY, started.token);\n setToken(started.token);\n }\n if (await waitForLocalService(localUrl, () => alive.current)) triggerAutoBind?.();\n await refresh();\n });\n\n const hostedExit = service?.state === \"exited\" ? service : null;\n const external = Boolean(svc) && !isActive(service) && (phase.kind === \"ready\" || phase.kind === \"needsCode\");\n\n return (\n <div className=\"da-app\">\n <PageHeader title={ctx.t(\"page.title\")} subtitle={ctx.t(\"page.subtitle\")} />\n <div className=\"da-tabs\" role=\"tablist\" aria-label={ctx.t(\"page.title\")}>\n {([\"local\", \"remote\"] as const).map(item => (\n <button key={item} type=\"button\" role=\"tab\" aria-selected={tab === item} className={tab === item ? \"da-tab da-tab-active\" : \"da-tab\"} onClick={() => setTab(item)}>\n {ctx.t(`tabs.${item}`)}\n </button>\n ))}\n </div>\n {error && <div role=\"alert\" className=\"da-alert\">{error}</div>}\n\n {tab === \"remote\" && (\n <RemoteTab ctx={ctx} server={server} workspace={workspace} localDeviceId={phase.kind === \"ready\" && phase.status.paired ? phase.status.device_id : \"\"} />\n )}\n\n {tab === \"local\" && (\n <>\n {svc && (\n <LocalServiceCard\n ctx={ctx}\n status={service}\n external={external}\n exit={hostedExit}\n busy={busy}\n onToggle={on => void toggleService(on)}\n />\n )}\n {phase.kind === \"checking\" && <Card><span className=\"da-muted\">{ctx.t(\"common.checking\")}</span></Card>}\n {phase.kind === \"starting\" && <Card><span className=\"da-muted\">{ctx.t(\"service.starting\")}</span></Card>}\n {phase.kind === \"offline\" && !svc && <OfflineCard ctx={ctx} localUrl={localUrl} />}\n {phase.kind === \"needsCode\" && (\n <PairCard ctx={ctx} busy={busy} onPair={code => run(async () => {\n const result = await local.pair(localUrl, code).catch((reason: unknown) => {\n if (reason instanceof LocalError && reason.code === \"code_wrong\") throw new Error(ctx.t(\"pair.wrong\"));\n if (reason instanceof LocalError && reason.code === \"locked\") throw new Error(ctx.t(\"pair.locked\"));\n throw reason;\n });\n ctx.secureStorage.set(TOKEN_KEY, result.token);\n setToken(result.token);\n })} />\n )}\n {phase.kind === \"ready\" && (\n <ReadyView\n ctx={ctx}\n status={phase.status}\n server={server}\n workspace={workspace}\n busy={busy}\n run={run}\n localUrl={localUrl}\n token={token}\n onStatus={status => setPhase({ kind: \"ready\", status })}\n />\n )}\n </>\n )}\n </div>\n );\n}\n\n/** Waits up to 15 s for the local service to answer. */\nasync function waitForLocalService(localUrl: string, alive: () => boolean): Promise<boolean> {\n for (let attempt = 0; attempt < 30 && alive(); attempt += 1) {\n try {\n await local.info(localUrl);\n return true;\n } catch {\n await new Promise(resolve => window.setTimeout(resolve, 500));\n }\n }\n return false;\n}\n\nfunction LocalServiceCard({ ctx, status, external, exit, busy, onToggle }: {\n ctx: PluginContext;\n status: LocalServiceStatus | null;\n external: boolean;\n exit: LocalServiceStatus | null;\n busy: boolean;\n onToggle: (on: boolean) => void;\n}) {\n const hosted = isActive(status);\n // Another toc-ocra (background service / terminal) already serves this\n // computer: the agent is on, it just is not owned by the desktop app.\n const viaExternal = !hosted && external;\n const on = hosted || viaExternal;\n const portTaken = exit?.exitCode === EXIT_PORT_IN_USE;\n return (\n <Card>\n <div className=\"da-switch\">\n <div>\n <CardTitle>{ctx.t(\"service.title\")}</CardTitle>\n <p className=\"da-text\">{ctx.t(viaExternal ? \"service.onExternalBody\" : on ? \"service.onBody\" : \"service.offBody\")}</p>\n </div>\n <Toggle checked={on} disabled={busy || viaExternal} label={ctx.t(\"service.title\")} onChange={onToggle} />\n </div>\n {hosted && <p className=\"da-muted\">{ctx.t(\"service.followsApp\")}</p>}\n {viaExternal && <p className=\"da-muted\">{ctx.t(\"service.external\")}</p>}\n {!on && portTaken && <p className=\"da-muted\">{ctx.t(\"service.portTaken\")}</p>}\n {exit && !portTaken && exit.exitCode !== 0 && (\n <div role=\"alert\" className=\"da-alert\">{ctx.t(\"service.crashed\", { error: exit.error || `exit ${exit.exitCode ?? exit.signal ?? \"?\"}` })}</div>\n )}\n </Card>\n );\n}\n\nfunction OfflineCard({ ctx, localUrl }: { ctx: PluginContext; localUrl: string }) {\n return (\n <Card>\n <CardTitle>{ctx.t(\"offline.title\")}</CardTitle>\n <p className=\"da-text\">{ctx.t(\"offline.body\", { url: localUrl })}</p>\n <div className=\"da-step\">{ctx.t(\"offline.once\")}</div>\n <Command ctx={ctx} value=\"npx toc-ocra@latest run\" />\n <div className=\"da-step\">{ctx.t(\"offline.service\")}</div>\n <Command ctx={ctx} value=\"npm install -g toc-ocra@latest && toc-ocra service:install\" />\n <p className=\"da-muted\">{ctx.t(\"offline.node\")}</p>\n </Card>\n );\n}\n\nfunction PairCard({ ctx, busy, onPair }: { ctx: PluginContext; busy: boolean; onPair: (code: string) => void }) {\n const [code, setCode] = useState(\"\");\n const valid = /^\\d{6}$/.test(code);\n return (\n <Card>\n <CardTitle>{ctx.t(\"pair.title\")}</CardTitle>\n <p className=\"da-text\">{ctx.t(\"pair.body\")}</p>\n <Command ctx={ctx} value=\"toc-ocra code\" />\n <form className=\"da-row\" onSubmit={event => { event.preventDefault(); if (valid) onPair(code); }}>\n <Input\n value={code}\n onChange={event => setCode(event.target.value.replace(/\\D/g, \"\").slice(0, 6))}\n placeholder={ctx.t(\"pair.placeholder\")}\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n aria-label={ctx.t(\"pair.placeholder\")}\n className=\"da-code-input\"\n />\n <Btn primary type=\"submit\" disabled={!valid || busy}>{ctx.t(\"pair.submit\")}</Btn>\n </form>\n </Card>\n );\n}\n\nfunction ReadyView({ ctx, status, server, workspace, busy, run, localUrl, token, onStatus }: {\n ctx: PluginContext;\n status: LocalStatus;\n server: ServerContext | undefined;\n workspace: WorkspaceContext | undefined;\n busy: boolean;\n run: (action: () => Promise<void>) => Promise<void>;\n localUrl: string;\n token: string;\n onStatus: (status: LocalStatus) => void;\n}) {\n const boundElsewhere = status.paired && server && !sameServer(status.server_url, server.origin);\n const unpair = () => run(async () => {\n // Revoke on the server too when the device belongs to the server shown.\n if (status.device_id && server && sameServer(status.server_url, server.origin)) {\n await ctx.core.request(`/devices/${encodeURIComponent(status.device_id)}/agent`, { method: \"DELETE\" }).catch(() => undefined);\n }\n ctx.storage.set(AUTO_BIND_KEY, \"off\");\n onStatus(await local.unpair(localUrl, token));\n });\n return (\n <>\n <Card>\n <CardTitle>{ctx.t(\"status.title\")}</CardTitle>\n <dl className=\"da-grid\">\n <div><dt>{ctx.t(\"status.service\")}</dt><dd>toc-ocra {status.version} \u00B7 {status.hostname}</dd></div>\n <div><dt>{ctx.t(\"status.binding\")}</dt><dd><BindingBadge ctx={ctx} status={status} /></dd></div>\n {status.paired && <div><dt>{ctx.t(\"status.device\")}</dt><dd>{status.device_name}</dd></div>}\n {status.paired && <div><dt>{ctx.t(\"status.server\")}</dt><dd className=\"da-mono\">{status.server_url}</dd></div>}\n {status.paired && <div><dt>{ctx.t(\"status.runs\")}</dt><dd>{status.active_runs}</dd></div>}\n </dl>\n {status.paired && !status.connected && status.connection_error && <p className=\"da-muted\">{ctx.t(\"status.lastError\", { error: status.connection_error })}</p>}\n {status.token_from_env && <p className=\"da-muted\">{ctx.t(\"status.tokenFromEnv\")}</p>}\n {status.paired && (\n <div className=\"da-row\">\n <Btn danger disabled={busy || status.token_from_env} onClick={() => void unpair()}>{ctx.t(\"status.unpair\")}</Btn>\n </div>\n )}\n </Card>\n\n {(!status.paired || status.unauthorized || boundElsewhere) && (\n <BindCard ctx={ctx} status={status} server={server} workspace={workspace} busy={busy} run={run} localUrl={localUrl} token={token} onStatus={onStatus} rebind={status.paired} />\n )}\n\n <Card>\n <CardTitle>{ctx.t(\"cli.title\")}</CardTitle>\n <ul className=\"da-list\">\n {status.providers.filter(provider => provider.installed).map(provider => (\n <li key={provider.id}>\n <span className=\"da-mono\">{provider.id}</span>\n <span className=\"da-muted\">{provider.version}</span>\n {provider.runnable ? <Badge variant=\"ok\">{ctx.t(\"cli.runnable\")}</Badge> : <Badge variant=\"muted\">{ctx.t(\"cli.detectOnly\")}</Badge>}\n </li>\n ))}\n {!status.providers.some(provider => provider.installed) && <li className=\"da-muted\">{ctx.t(\"cli.none\")}</li>}\n </ul>\n <div className=\"da-row\">\n <Btn disabled={busy} onClick={() => void run(async () => onStatus(await local.detect(localUrl, token)))}>{ctx.t(\"cli.redetect\")}</Btn>\n </div>\n </Card>\n </>\n );\n}\n\nfunction BindingBadge({ ctx, status }: { ctx: PluginContext; status: LocalStatus }) {\n if (!status.paired) return <Badge variant=\"muted\">{ctx.t(\"binding.unpaired\")}</Badge>;\n if (status.unauthorized) return <Badge variant=\"err\">{ctx.t(\"binding.revoked\")}</Badge>;\n if (status.connected) return <Badge variant=\"ok\">{ctx.t(\"binding.online\")}</Badge>;\n return <Badge variant=\"warn\">{ctx.t(\"binding.connecting\")}</Badge>;\n}\n\nfunction BindCard({ ctx, status, server, workspace, busy, run, localUrl, token, onStatus, rebind }: {\n ctx: PluginContext;\n status: LocalStatus;\n server: ServerContext | undefined;\n workspace: WorkspaceContext | undefined;\n busy: boolean;\n run: (action: () => Promise<void>) => Promise<void>;\n localUrl: string;\n token: string;\n onStatus: (status: LocalStatus) => void;\n rebind: boolean;\n}) {\n const [devices, setDevices] = useState<Device[]>([]);\n const [choice, setChoice] = useState(\"new\");\n const [name, setName] = useState(status.hostname);\n const [serverUrl, setServerUrl] = useState(server?.origin ?? \"\");\n useEffect(() => { if (server?.origin) setServerUrl(server.origin); }, [server?.origin]);\n\n useEffect(() => {\n if (!workspace?.id) return;\n let cancelled = false;\n ctx.core.request<{ items?: Device[] }>(`/workspaces/${encodeURIComponent(workspace.id)}/devices`)\n .then(result => { if (!cancelled) setDevices((result.items ?? []).filter(device => device.is_mine)); })\n .catch(() => { if (!cancelled) setDevices([]); });\n return () => { cancelled = true; };\n }, [ctx, workspace?.id]);\n\n const bind = () => run(async () => {\n if (!workspace?.id) throw new Error(ctx.t(\"bind.noWorkspace\"));\n if (!serverUrl.trim()) throw new Error(ctx.t(\"bind.noServer\"));\n let deviceId = choice;\n let pairing: { code: string };\n if (choice === \"new\") {\n if (!status.machine_id) throw new Error(ctx.t(\"bind.identityRequired\"));\n const matched = await ctx.core.request<{ device_id: string; code: string }>(\"/devices/machine/pairing-code\", {\n method: \"POST\",\n body: JSON.stringify({ machine_id: status.machine_id, hostname: name.trim() || status.hostname, platform: status.platform, current_device_id: status.paired ? status.device_id : \"\" }),\n });\n deviceId = matched.device_id;\n setChoice(deviceId);\n pairing = matched;\n } else {\n pairing = await ctx.core.request<{ code: string }>(`/devices/${encodeURIComponent(deviceId)}/pairing-code`, { method: \"POST\" });\n }\n onStatus(await local.enroll(localUrl, token, serverUrl.trim(), pairing.code));\n ctx.storage.remove(AUTO_BIND_KEY);\n ctx.notify({ title: ctx.t(\"page.title\"), body: ctx.t(\"bind.done\", { server: server?.name ?? serverUrl }) });\n });\n\n return (\n <Card>\n <CardTitle>{ctx.t(rebind ? \"bind.rebindTitle\" : \"bind.title\")}</CardTitle>\n {rebind && status.unauthorized && <p className=\"da-text\">{ctx.t(\"bind.revoked\")}</p>}\n {rebind && !status.unauthorized && <p className=\"da-text\">{ctx.t(\"bind.elsewhere\", { bound: status.server_url, current: server?.origin ?? \"\" })}</p>}\n <p className=\"da-text\">{ctx.t(\"bind.body\", { server: server?.name ?? \"\", workspace: workspace?.name ?? \"\" })}</p>\n <label className=\"da-field\">\n <span>{ctx.t(\"bind.server\")}</span>\n <Input value={serverUrl} onChange={event => setServerUrl(event.target.value)} spellCheck={false} className=\"da-mono\" />\n </label>\n <label className=\"da-field\">\n <span>{ctx.t(\"bind.device\")}</span>\n <select className=\"da-select\" value={choice} onChange={event => setChoice(event.target.value)}>\n <option value=\"new\">{ctx.t(\"bind.newDevice\")}</option>\n {devices.map(device => (\n <option key={device.id} value={device.id}>{device.name}{device.paired ? ` \u00B7 ${ctx.t(\"bind.replaces\")}` : \"\"}</option>\n ))}\n </select>\n </label>\n {choice === \"new\" && (\n <label className=\"da-field\">\n <span>{ctx.t(\"bind.name\")}</span>\n <Input value={name} onChange={event => setName(event.target.value)} maxLength={100} />\n </label>\n )}\n <div className=\"da-row\">\n <Btn primary disabled={busy || !workspace?.id} onClick={() => void bind()}>{ctx.t(busy ? \"bind.working\" : \"bind.submit\")}</Btn>\n </div>\n </Card>\n );\n}\n\n/**\n * Keeps this computer bound to the server the desktop app is signed in to\n * (public or LAN): when they differ, asks the server for this machine's device\n * (matched by machine id, so the same device is reused) and re-enrolls the\n * local service. Waits while tasks are running; stays out of the way after\n * the user unbinds by hand or when the server revoked the device.\n */\nfunction startAutoBind(ctx: PluginContext) {\n let busy = false;\n let deferredFor = \"\";\n const failedAt = new Map<string, number>();\n\n const tick = async () => {\n if (busy || ctx.signal.aborted) return;\n const server = ctx.core.context<ServerContext>(\"server\");\n const token = ctx.secureStorage.get(TOKEN_KEY, \"\");\n if (!server?.origin || !token || ctx.storage.get<string>(AUTO_BIND_KEY, \"on\") === \"off\") return;\n if (Date.now() - (failedAt.get(server.origin) ?? 0) < AUTO_BIND_RETRY_MS) return;\n busy = true;\n try {\n const localUrl = ctx.storage.get(LOCAL_URL_KEY, DEFAULT_LOCAL_URL);\n const status = await local.status(localUrl, token);\n if (!status.machine_id || status.token_from_env) return;\n if (status.paired && (status.unauthorized || sameServer(status.server_url, server.origin))) {\n deferredFor = \"\";\n return;\n }\n if (status.active_runs > 0) {\n if (deferredFor !== server.origin) {\n deferredFor = server.origin;\n ctx.notify({ title: ctx.t(\"page.title\"), body: ctx.t(\"auto.deferred\", { server: server.name || server.origin }) });\n }\n return;\n }\n const pairing = await ctx.core.request<{ code: string; device_name: string }>(\"/devices/machine/pairing-code\", {\n method: \"POST\",\n body: JSON.stringify({\n machine_id: status.machine_id,\n hostname: status.hostname,\n platform: status.platform,\n current_device_id: status.paired ? status.device_id : \"\",\n }),\n });\n await local.enroll(localUrl, token, server.origin, pairing.code);\n deferredFor = \"\";\n failedAt.delete(server.origin);\n ctx.notify({ title: ctx.t(\"page.title\"), body: ctx.t(\"auto.done\", { server: server.name || server.origin, device: pairing.device_name }) });\n } catch (reason) {\n // Local service offline / plugin not paired yet: just try again next tick.\n // A server or enroll failure backs off for this server.\n if (!(reason instanceof LocalError) || reason.kind === \"rejected\") failedAt.set(server.origin, Date.now());\n } finally {\n busy = false;\n }\n };\n\n const timer = window.setInterval(() => void tick(), AUTO_BIND_MS);\n triggerAutoBind = () => void tick();\n ctx.registerDisposer(() => {\n window.clearInterval(timer);\n triggerAutoBind = undefined;\n });\n ctx.registerDisposer(ctx.core.onContextChange(\"server\", () => void tick()));\n window.setTimeout(() => void tick(), 1_500);\n}\n\n/**\n * Follows the desktop app: when the user left the local agent on, start it\n * again with the app. The app stops it when it quits.\n */\nfunction startLocalServiceIfEnabled(ctx: PluginContext) {\n const svc = localService(ctx);\n if (!svc || ctx.storage.get<string>(LOCAL_SERVICE_KEY, \"off\") !== \"on\") return;\n const localUrl = ctx.storage.get(LOCAL_URL_KEY, DEFAULT_LOCAL_URL);\n void hasLocalInstance(localUrl)\n .then(running => {\n if (running) {\n // Already served by a background service: nothing to start.\n window.setTimeout(() => triggerAutoBind?.(), 3_000);\n return undefined;\n }\n return svc.start();\n })\n .then(status => {\n if (!status) return;\n if (status.token) ctx.secureStorage.set(TOKEN_KEY, status.token);\n window.setTimeout(() => triggerAutoBind?.(), 3_000);\n })\n .catch(() => undefined);\n}\n\nexport default definePlugin({\n activate(ctx) {\n ctx.registerNavigation(\"agent.nav\", <Icon />);\n ctx.registerRoute(\"agent.home\", <AgentPage ctx={ctx} />);\n startLocalServiceIfEnabled(ctx);\n startAutoBind(ctx);\n },\n});\n", "/**\n * Runtime part of the SDK that ends up inside plugin bundles. Keep it tiny:\n * everything here is copied into every plugin. Build-time helpers live in lib/.\n * `react` resolves to the host's instance through `toc-plugin build`.\n */\nimport { useSyncExternalStore } from \"react\";\n\n/** Host contract this SDK targets. Must match PLUGIN_API_VERSION in lib/constants.mjs. */\nexport const PLUGIN_API_VERSION = \"1.0.0\";\n\n/**\n * Identity helper that gives a plugin module full type inference.\n *\n * @template {import(\"./index\").PluginModule} T\n * @param {T} plugin\n * @returns {T}\n */\nexport function definePlugin(plugin) {\n if (!plugin || typeof plugin.activate !== \"function\") {\n throw new TypeError(\"definePlugin() needs an object with an activate(context) function\");\n }\n return plugin;\n}\n\n/**\n * Re-renders when the app publishes a new value under `key`.\n *\n * @template T\n * @param {import(\"./index\").PluginContext} ctx\n * @param {string} key\n * @returns {T | undefined}\n */\nexport function useHostContext(ctx, key) {\n return useSyncExternalStore(\n listener => ctx.core.onContextChange(key, listener),\n () => ctx.core.context(key),\n );\n}\n", "/**\n * Client for the local toc-ocra service (`toc-ocra run`) on this computer.\n * The plugin pairs once with the 6-digit connection code and then sends the\n * control token as a bearer token.\n */\nexport const DEFAULT_LOCAL_URL = \"http://127.0.0.1:17339\";\n\nexport interface LocalInfo {\n name: string;\n version: string;\n protocol: number;\n paired: boolean;\n}\n\nexport interface LocalProvider {\n id: string;\n installed: boolean;\n runnable: boolean;\n version: string;\n}\n\nexport interface LocalStatus {\n version: string;\n hostname: string;\n /** Stable id of this installation (older services omit it). */\n machine_id?: string;\n platform: \"mac\" | \"win\" | \"linux\";\n paired: boolean;\n running: boolean;\n device_id: string;\n device_name: string;\n server_url: string;\n connected: boolean;\n unauthorized: boolean;\n connection_error: string;\n active_runs: number;\n allowed_roots: string[];\n token_from_env: boolean;\n providers: LocalProvider[];\n}\n\n/** Why a local call failed: the service is not running, the token is not accepted, or the service said no. */\nexport class LocalError extends Error {\n constructor(readonly kind: \"offline\" | \"unauthorized\" | \"rejected\", message: string, readonly code = \"\") {\n super(message);\n }\n}\n\nasync function call<T>(base: string, path: string, init: RequestInit & { token?: string } = {}): Promise<T> {\n const headers = new Headers(init.headers);\n if (init.token) headers.set(\"Authorization\", `Bearer ${init.token}`);\n if (init.body) headers.set(\"Content-Type\", \"application/json\");\n let response: Response;\n try {\n response = await fetch(`${base.replace(/\\/+$/, \"\")}${path}`, { ...init, headers, cache: \"no-store\" });\n } catch {\n throw new LocalError(\"offline\", \"local service unreachable\");\n }\n const body = (await response.json().catch(() => null)) as Record<string, unknown> | null;\n if (response.status === 401) throw new LocalError(\"unauthorized\", \"unauthorized\");\n if (!response.ok) {\n const code = typeof body?.error === \"string\" ? body.error : \"\";\n const message = typeof body?.message === \"string\" ? body.message : code || `HTTP ${response.status}`;\n throw new LocalError(\"rejected\", message, code);\n }\n return body as T;\n}\n\nexport const local = {\n info: (base: string) => call<LocalInfo>(base, \"/control/info\"),\n pair: (base: string, code: string) => call<{ token: string }>(base, \"/control/pair\", { method: \"POST\", body: JSON.stringify({ code }) }),\n status: (base: string, token: string) => call<LocalStatus>(base, \"/control/status\", { token }),\n enroll: (base: string, token: string, serverUrl: string, code: string) =>\n call<LocalStatus>(base, \"/control/enroll\", { method: \"POST\", token, body: JSON.stringify({ server_url: serverUrl, code }) }),\n unpair: (base: string, token: string) => call<LocalStatus>(base, \"/control/unpair\", { method: \"POST\", token }),\n detect: (base: string, token: string) => call<LocalStatus>(base, \"/control/detect\", { method: \"POST\", token }),\n};\n\n/** Two backend addresses name the same server (trailing slash and case insensitive). */\nexport function sameServer(left: string, right: string): boolean {\n const normalize = (value: string) => {\n try {\n return new URL(value).origin.toLowerCase();\n } catch {\n return value.trim().replace(/\\/+$/, \"\").toLowerCase();\n }\n };\n return Boolean(left && right) && normalize(left) === normalize(right);\n}\n", "import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { PluginContext } from \"@toc-starter/plugin-sdk\";\nimport { Badge, Btn, Card, CardTitle, Input, Toggle } from \"@toc-starter/plugin-sdk/ui\";\nimport { Command, errorText, type Device, type ServerContext, type WorkspaceContext } from \"./shared\";\n\n/**\n * \u5176\u4ED6\u7535\u8111: install the device agent on another machine (a Linux server,\n * another Mac, Windows). The page creates the device and a one-time pairing\n * code, shows one command to run there (install + pair + background\n * service), and polls until that machine comes online. Enabling / disabling\n * later is a server-side switch that keeps the pairing.\n */\n\ntype Platform = \"mac\" | \"linux\" | \"win\";\nconst PLATFORMS: readonly Platform[] = [\"linux\", \"mac\", \"win\"];\nconst IDLE_POLL_MS = 10_000;\nconst WAIT_POLL_MS = 3_000;\nconst REMOTE_SERVER_KEY = \"remoteServerUrl\";\n\ninterface Pending {\n deviceId: string;\n deviceName: string;\n platform: Platform;\n code: string;\n expiresAt: number;\n /** Credential id before pairing; a new one means the command ran. */\n baseline: string | null;\n matched: boolean;\n}\n\nconst LOOPBACK = new Set([\"127.0.0.1\", \"localhost\", \"[::1]\", \"::1\", \"0.0.0.0\"]);\n\n/** The server origin to put in the command, or null when it is not an http(s) URL. */\nfunction commandServer(value: string): string | null {\n try {\n const url = new URL(value.trim());\n return url.protocol === \"http:\" || url.protocol === \"https:\" ? url.origin : null;\n } catch {\n return null;\n }\n}\n\nfunction isLoopback(origin: string): boolean {\n try {\n return LOOPBACK.has(new URL(origin).hostname);\n } catch {\n return false;\n }\n}\n\nexport function setupCommand(platform: Platform, code: string, server: string): string {\n const setup = `toc-ocra setup --code ${code} --server ${server}`;\n // PowerShell 5.1 has no `&&`; `if ($?)` runs setup only after a successful install.\n if (platform === \"win\") return `npm install -g toc-ocra@latest; if ($?) { ${setup} }`;\n return `npm install -g toc-ocra@latest && ${setup}`;\n}\n\nfunction DeviceBadge({ ctx, device }: { ctx: PluginContext; device: Device }) {\n if (device.status === \"online\") return <Badge variant=\"ok\">{ctx.t(\"remote.status.online\")}</Badge>;\n if (device.status === \"disabled\") return <Badge variant=\"warn\">{ctx.t(\"remote.status.disabled\")}</Badge>;\n if (device.status === \"offline\") return <Badge variant=\"err\">{ctx.t(\"remote.status.offline\")}</Badge>;\n return <Badge variant=\"muted\">{ctx.t(\"remote.status.notConnected\")}</Badge>;\n}\n\nexport function RemoteTab({ ctx, server, workspace, localDeviceId }: {\n ctx: PluginContext;\n server: ServerContext | undefined;\n workspace: WorkspaceContext | undefined;\n /** This computer's device, listed on the \u672C\u673A tab instead. */\n localDeviceId: string;\n}) {\n const [devices, setDevices] = useState<Device[] | null>(null);\n const [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [pending, setPending] = useState<Pending | null>(null);\n const [adding, setAdding] = useState(false);\n const [name, setName] = useState(\"\");\n const [platform, setPlatform] = useState<Platform>(\"linux\");\n const [serverUrl, setServerUrl] = useState(() => ctx.storage.get<string>(REMOTE_SERVER_KEY, \"\") || server?.origin || \"\");\n const pendingRef = useRef(pending);\n pendingRef.current = pending;\n const alive = useRef(true);\n\n useEffect(() => {\n if (!ctx.storage.get<string>(REMOTE_SERVER_KEY, \"\") && server?.origin) setServerUrl(server.origin);\n }, [ctx, server?.origin]);\n\n const load = useCallback(async () => {\n if (!workspace?.id) return;\n try {\n const result = await ctx.core.request<{ items?: Device[] }>(`/workspaces/${encodeURIComponent(workspace.id)}/devices`);\n if (!alive.current) return;\n const mine = (result.items ?? []).filter(device => device.is_mine && device.id !== localDeviceId);\n setDevices(mine);\n const waiting = pendingRef.current;\n if (waiting && !waiting.matched) {\n const device = mine.find(item => item.id === waiting.deviceId);\n if (device?.agent_id && device.agent_id !== waiting.baseline && device.terminal_online) {\n setPending({ ...waiting, matched: true });\n ctx.notify({ title: ctx.t(\"page.title\"), body: ctx.t(\"remote.matchedNotice\", { name: device.name }) });\n }\n }\n } catch (reason) {\n if (alive.current) setError(errorText(ctx, reason));\n }\n }, [ctx, localDeviceId, workspace?.id]);\n\n const waiting = Boolean(pending && !pending.matched);\n useEffect(() => {\n alive.current = true;\n void load();\n const timer = window.setInterval(() => void load(), waiting ? WAIT_POLL_MS : IDLE_POLL_MS);\n return () => { alive.current = false; window.clearInterval(timer); };\n }, [load, waiting]);\n\n const run = async (action: () => Promise<void>) => {\n setBusy(true);\n setError(\"\");\n try {\n await action();\n } catch (reason) {\n setError(errorText(ctx, reason));\n } finally {\n setBusy(false);\n }\n };\n\n const origin = commandServer(serverUrl);\n const saveServer = (value: string) => {\n setServerUrl(value);\n if (value.trim() && value.trim() !== server?.origin) ctx.storage.set(REMOTE_SERVER_KEY, value.trim());\n else ctx.storage.remove(REMOTE_SERVER_KEY);\n };\n\n const pair = (device: Pick<Device, \"id\" | \"name\" | \"platform\" | \"agent_id\">) => run(async () => {\n if (!origin) throw new Error(ctx.t(\"remote.serverInvalid\"));\n const result = await ctx.core.request<{ code: string; expires_at: number }>(`/devices/${encodeURIComponent(device.id)}/pairing-code`, { method: \"POST\" });\n setPending({\n deviceId: device.id,\n deviceName: device.name,\n platform: PLATFORMS.includes(device.platform) ? device.platform : \"linux\",\n code: result.code,\n expiresAt: result.expires_at,\n baseline: device.agent_id ?? null,\n matched: false,\n });\n });\n\n const addComputer = () => run(async () => {\n if (!workspace?.id) throw new Error(ctx.t(\"bind.noWorkspace\"));\n if (!origin) throw new Error(ctx.t(\"remote.serverInvalid\"));\n const deviceName = name.trim() || ctx.t(`remote.platform.${platform}`);\n const created = await ctx.core.request<Device>(`/workspaces/${encodeURIComponent(workspace.id)}/devices`, {\n method: \"POST\",\n body: JSON.stringify({ name: deviceName, location: platform === \"linux\" ? \"cloud\" : \"local\", platform, note: \"\", share_to_workspace: false }),\n });\n const result = await ctx.core.request<{ code: string; expires_at: number }>(`/devices/${encodeURIComponent(created.id)}/pairing-code`, { method: \"POST\" });\n setPending({ deviceId: created.id, deviceName: created.name || deviceName, platform, code: result.code, expiresAt: result.expires_at, baseline: null, matched: false });\n setAdding(false);\n setName(\"\");\n await load();\n });\n\n const setEnabled = (device: Device, enabled: boolean) => run(async () => {\n await ctx.core.request(`/devices/${encodeURIComponent(device.id)}/enabled`, { method: \"PUT\", body: JSON.stringify({ enabled }) });\n await load();\n });\n\n return (\n <>\n {error && <div role=\"alert\" className=\"da-alert\">{error}</div>}\n <Card>\n <CardTitle>{ctx.t(\"remote.title\")}</CardTitle>\n <p className=\"da-text\">{ctx.t(\"remote.body\")}</p>\n <label className=\"da-field\">\n <span>{ctx.t(\"remote.server\")}</span>\n <Input value={serverUrl} onChange={event => saveServer(event.target.value)} spellCheck={false} className=\"da-mono\" />\n </label>\n {!origin && <p className=\"da-muted da-warn\">{ctx.t(\"remote.serverInvalid\")}</p>}\n {origin && isLoopback(origin) && <p className=\"da-muted da-warn\">{ctx.t(\"remote.loopback\")}</p>}\n {!adding && (\n <div className=\"da-row\">\n <Btn primary disabled={busy || !workspace?.id} onClick={() => setAdding(true)}>{ctx.t(\"remote.add\")}</Btn>\n </div>\n )}\n {adding && (\n <form className=\"da-form\" onSubmit={event => { event.preventDefault(); void addComputer(); }}>\n <label className=\"da-field\">\n <span>{ctx.t(\"remote.platformLabel\")}</span>\n <select className=\"da-select\" value={platform} onChange={event => setPlatform(event.target.value as Platform)}>\n {PLATFORMS.map(item => <option key={item} value={item}>{ctx.t(`remote.platform.${item}`)}</option>)}\n </select>\n </label>\n <label className=\"da-field\">\n <span>{ctx.t(\"remote.name\")}</span>\n <Input value={name} onChange={event => setName(event.target.value)} maxLength={100} placeholder={ctx.t(\"remote.namePlaceholder\")} />\n </label>\n <div className=\"da-row\">\n <Btn primary type=\"submit\" disabled={busy || !origin}>{ctx.t(busy ? \"remote.working\" : \"remote.generate\")}</Btn>\n <Btn type=\"button\" disabled={busy} onClick={() => setAdding(false)}>{ctx.t(\"remote.cancel\")}</Btn>\n </div>\n </form>\n )}\n </Card>\n\n {pending && origin && (\n <PendingCard ctx={ctx} pending={pending} origin={origin} busy={busy}\n onPlatform={value => setPending({ ...pending, platform: value })}\n onRegenerate={() => void pair({ id: pending.deviceId, name: pending.deviceName, platform: pending.platform, agent_id: pending.baseline })}\n onClose={() => setPending(null)} />\n )}\n\n <Card>\n <CardTitle>{ctx.t(\"remote.listTitle\")}</CardTitle>\n {devices === null && <p className=\"da-muted\">{ctx.t(\"common.checking\")}</p>}\n {devices?.length === 0 && <p className=\"da-muted\">{ctx.t(\"remote.empty\")}</p>}\n {devices && devices.length > 0 && (\n <ul className=\"da-devices\">\n {devices.map(device => (\n <li key={device.id}>\n <div className=\"da-device-main\">\n <span className=\"da-device-name\">{device.name}</span>\n <span className=\"da-muted\">{ctx.t(`remote.platform.${PLATFORMS.includes(device.platform) ? device.platform : \"linux\"}`)}{device.agent_version ? ` \u00B7 toc-ocra ${device.agent_version}` : \"\"}</span>\n </div>\n <DeviceBadge ctx={ctx} device={device} />\n <div className=\"da-device-actions\">\n {(!device.paired || device.status === \"offline\" || device.status === \"not_connected\") && (\n <Btn disabled={busy || !origin} onClick={() => void pair(device)}>{ctx.t(device.paired ? \"remote.repair\" : \"remote.install\")}</Btn>\n )}\n {device.paired && (\n <label className=\"da-toggle\">\n <span>{ctx.t(\"remote.enabled\")}</span>\n <Toggle checked={!device.disabled} disabled={busy} label={ctx.t(\"remote.enabled\")} onChange={value => void setEnabled(device, value)} />\n </label>\n )}\n </div>\n </li>\n ))}\n </ul>\n )}\n <p className=\"da-muted\">{ctx.t(\"remote.disableHint\")}</p>\n <div className=\"da-step\">{ctx.t(\"remote.uninstall\")}</div>\n <Command ctx={ctx} value=\"toc-ocra service:uninstall\" />\n </Card>\n </>\n );\n}\n\nfunction PendingCard({ ctx, pending, origin, busy, onPlatform, onRegenerate, onClose }: {\n ctx: PluginContext;\n pending: Pending;\n origin: string;\n busy: boolean;\n onPlatform: (platform: Platform) => void;\n onRegenerate: () => void;\n onClose: () => void;\n}) {\n const [now, setNow] = useState(() => Math.floor(Date.now() / 1000));\n useEffect(() => {\n if (pending.matched) return;\n const timer = window.setInterval(() => setNow(Math.floor(Date.now() / 1000)), 1_000);\n return () => window.clearInterval(timer);\n }, [pending.matched]);\n const left = Math.max(0, pending.expiresAt - now);\n const expired = !pending.matched && left === 0;\n\n return (\n <Card>\n <CardTitle>{ctx.t(\"remote.pendingTitle\", { name: pending.deviceName })}</CardTitle>\n {pending.matched ? (\n <>\n <p className=\"da-text\"><Badge variant=\"ok\">{ctx.t(\"remote.matched\")}</Badge> {ctx.t(\"remote.matchedBody\", { name: pending.deviceName })}</p>\n <div className=\"da-row\"><Btn primary onClick={onClose}>{ctx.t(\"remote.done\")}</Btn></div>\n </>\n ) : (\n <>\n <p className=\"da-text\">{ctx.t(\"remote.pendingBody\")}</p>\n <div className=\"da-segment\" role=\"radiogroup\" aria-label={ctx.t(\"remote.platformLabel\")}>\n {PLATFORMS.map(item => (\n <button key={item} type=\"button\" role=\"radio\" aria-checked={pending.platform === item} className={pending.platform === item ? \"da-seg da-seg-active\" : \"da-seg\"} onClick={() => onPlatform(item)}>\n {ctx.t(`remote.platform.${item}`)}\n </button>\n ))}\n </div>\n <Command ctx={ctx} value={setupCommand(pending.platform, pending.code, origin)} />\n <ul className=\"da-hints\">\n <li>{ctx.t(\"remote.hintNode\")}</li>\n {pending.platform === \"linux\" && <li>{ctx.t(\"remote.hintLinux\")}</li>}\n {pending.platform === \"win\" && <li>{ctx.t(\"remote.hintWindows\")}</li>}\n <li>{expired ? ctx.t(\"remote.expired\") : ctx.t(\"remote.expires\", { minutes: Math.floor(left / 60), seconds: String(left % 60).padStart(2, \"0\") })}</li>\n </ul>\n <p className=\"da-muted\">{expired ? \"\" : ctx.t(\"remote.waiting\")}</p>\n <div className=\"da-row\">\n <Btn disabled={busy} onClick={onRegenerate}>{ctx.t(\"remote.regenerate\")}</Btn>\n <Btn disabled={busy} onClick={onClose}>{ctx.t(\"remote.cancel\")}</Btn>\n </div>\n </>\n )}\n </Card>\n );\n}\n", "import { useState } from \"react\";\nimport type { PluginContext } from \"@toc-starter/plugin-sdk\";\nimport { Btn } from \"@toc-starter/plugin-sdk/ui\";\nimport { LocalError } from \"./local\";\n\nexport const TOKEN_KEY = \"controlToken\";\nexport const LOCAL_URL_KEY = \"localUrl\";\n/** \"off\" after the user unbinds by hand; binding by hand turns it back on. */\nexport const AUTO_BIND_KEY = \"autoBind\";\n/** \"on\" while the user wants the desktop app to run the local agent. */\nexport const LOCAL_SERVICE_KEY = \"localService\";\n\nexport interface ServerContext { kind: \"cloud\" | \"lan\"; name: string; origin: string }\nexport interface WorkspaceContext { id: string; name: string }\n\n/** The fields of echo_admin's device view the plugin uses. */\nexport interface Device {\n id: string;\n name: string;\n platform: \"mac\" | \"win\" | \"linux\";\n location?: string;\n paired: boolean;\n status: \"not_connected\" | \"online\" | \"offline\" | \"disabled\";\n is_mine: boolean;\n /** Terminal agent credential id; only the owner sees it. Changes on every pairing. */\n agent_id?: string | null;\n terminal_online?: boolean;\n disabled?: boolean;\n agent_version?: string;\n last_seen_at?: number | null;\n}\n\nexport function errorText(ctx: PluginContext, error: unknown): string {\n if (error instanceof LocalError && error.kind === \"offline\") return ctx.t(\"error.offline\");\n return error instanceof Error ? error.message : String(error);\n}\n\nexport function Command({ ctx, value }: { ctx: PluginContext; value: string }) {\n const [copied, setCopied] = useState(false);\n return (\n <div className=\"da-command\">\n <code>{value}</code>\n <Btn onClick={() => void navigator.clipboard.writeText(value).then(() => { setCopied(true); window.setTimeout(() => setCopied(false), 1500); })}>\n {copied ? ctx.t(\"common.copied\") : ctx.t(\"common.copy\")}\n </Btn>\n </div>\n );\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["require_react", "__commonJSMin", "exports", "module", "registry", "shared", "require_ui", "__commonJSMin", "exports", "module", "registry", "shared", "require_jsx_runtime", "__commonJSMin", "exports", "module", "registry", "shared", "import_react", "import_react", "definePlugin", "plugin", "useHostContext", "ctx", "key", "listener", "import_ui", "DEFAULT_LOCAL_URL", "LocalError", "kind", "message", "code", "call", "base", "path", "init", "headers", "response", "body", "local", "token", "serverUrl", "sameServer", "left", "right", "normalize", "value", "import_react", "import_ui", "import_react", "import_ui", "import_jsx_runtime", "TOKEN_KEY", "LOCAL_URL_KEY", "AUTO_BIND_KEY", "LOCAL_SERVICE_KEY", "errorText", "ctx", "error", "LocalError", "Command", "value", "copied", "setCopied", "import_jsx_runtime", "PLATFORMS", "IDLE_POLL_MS", "WAIT_POLL_MS", "REMOTE_SERVER_KEY", "LOOPBACK", "commandServer", "value", "url", "isLoopback", "origin", "setupCommand", "platform", "code", "server", "setup", "DeviceBadge", "ctx", "device", "RemoteTab", "workspace", "localDeviceId", "devices", "setDevices", "error", "setError", "busy", "setBusy", "pending", "setPending", "adding", "setAdding", "name", "setName", "setPlatform", "serverUrl", "setServerUrl", "pendingRef", "alive", "load", "result", "mine", "waiting", "item", "reason", "errorText", "timer", "run", "action", "saveServer", "pair", "addComputer", "deviceName", "created", "setEnabled", "enabled", "event", "PendingCard", "Command", "onPlatform", "onRegenerate", "onClose", "now", "setNow", "left", "expired", "import_jsx_runtime", "POLL_MS", "AUTO_BIND_MS", "AUTO_BIND_RETRY_MS", "EXIT_PORT_IN_USE", "TAB_KEY", "iconUrl", "Icon", "localService", "ctx", "service", "isActive", "status", "hasLocalInstance", "localUrl", "local", "triggerAutoBind", "AgentPage", "server", "useHostContext", "workspace", "tab", "setTabState", "setTab", "next", "LOCAL_URL_KEY", "DEFAULT_LOCAL_URL", "token", "setToken", "TOKEN_KEY", "phase", "setPhase", "setService", "error", "setError", "busy", "setBusy", "alive", "svc", "refresh", "hosted", "active", "reason", "LocalError", "timer", "s", "run", "action", "errorText", "toggleService", "on", "LOCAL_SERVICE_KEY", "AUTO_BIND_KEY", "started", "waitForLocalService", "hostedExit", "external", "item", "RemoteTab", "LocalServiceCard", "OfflineCard", "PairCard", "code", "result", "ReadyView", "attempt", "resolve", "exit", "onToggle", "viaExternal", "portTaken", "Command", "onPair", "setCode", "valid", "event", "onStatus", "boundElsewhere", "sameServer", "unpair", "BindingBadge", "BindCard", "provider", "rebind", "devices", "setDevices", "choice", "setChoice", "name", "setName", "serverUrl", "setServerUrl", "cancelled", "device", "bind", "deviceId", "pairing", "matched", "startAutoBind", "deferredFor", "failedAt", "tick", "startLocalServiceIfEnabled", "running", "index_default", "definePlugin"]
7
7
  }
@@ -11,7 +11,7 @@ import { delimiter as delimiter5, join as join10 } from "node:path";
11
11
 
12
12
  // src/config.ts
13
13
  import { randomUUID } from "node:crypto";
14
- import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
14
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
15
15
  import { chmod, mkdir, rename, writeFile } from "node:fs/promises";
16
16
  import { homedir, hostname as hostname3, platform } from "node:os";
17
17
  import { delimiter, dirname, join, resolve, sep } from "node:path";
@@ -14570,17 +14570,23 @@ async function writeFileConfig(configPath, value) {
14570
14570
  await chmod(configPath, 384);
14571
14571
  }
14572
14572
  function ensureMachineId(configPath, file2) {
14573
- if (file2.machineId) return file2.machineId;
14574
- const machineId = randomUUID();
14573
+ const identityPath = `${configPath}.machine-id`;
14574
+ let machineId;
14575
14575
  try {
14576
+ machineId = readFileSync(identityPath, "utf8").trim();
14577
+ } catch (error51) {
14578
+ if (error51.code !== "ENOENT") throw error51;
14576
14579
  mkdirSync(dirname(configPath), { recursive: true, mode: 448 });
14577
- const temporary = `${configPath}.${process.pid}.mid.tmp`;
14578
- writeFileSync(temporary, JSON.stringify({ ...file2, machineId }, null, 2), { mode: 384 });
14579
- renameSync(temporary, configPath);
14580
- chmodSync(configPath, 384);
14581
- file2.machineId = machineId;
14582
- } catch {
14580
+ machineId = file2.machineId ?? randomUUID();
14581
+ try {
14582
+ writeFileSync(identityPath, machineId, { flag: "wx", mode: 384 });
14583
+ } catch (writeError) {
14584
+ if (writeError.code !== "EEXIST") throw writeError;
14585
+ machineId = readFileSync(identityPath, "utf8").trim();
14586
+ }
14583
14587
  }
14588
+ if (!/^[a-zA-Z0-9_-]{8,64}$/.test(machineId)) throw new Error("\u672C\u673A\u8BBE\u5907\u8EAB\u4EFD\u6587\u4EF6\u65E0\u6548");
14589
+ file2.machineId = machineId;
14584
14590
  return machineId;
14585
14591
  }
14586
14592
  function normalizeServerUrl(value) {
@@ -14593,11 +14599,12 @@ function normalizeServerUrl(value) {
14593
14599
  async function enrollDevice(options) {
14594
14600
  const configPath = resolve(options.configPath ?? defaultConfigPath());
14595
14601
  const existing = readFileConfig(configPath);
14602
+ const machineId = ensureMachineId(configPath, existing);
14596
14603
  const serverUrl = normalizeServerUrl(options.serverUrl ?? process.env.TOC_OCRA_SERVER_URL ?? existing.serverUrl ?? DEFAULT_SERVER_URL);
14597
14604
  const response = await fetch(`${serverUrl}/api/agent/enroll`, {
14598
14605
  method: "POST",
14599
14606
  headers: { "content-type": "application/json" },
14600
- body: JSON.stringify({ code: options.code, hostname: hostname3(), platform: platform(), agent_version: options.agentVersion })
14607
+ body: JSON.stringify({ code: options.code, machine_id: machineId, hostname: hostname3(), platform: platform(), agent_version: options.agentVersion })
14601
14608
  });
14602
14609
  const body = await response.json().catch(() => null);
14603
14610
  if (!response.ok || !body?.success || !body.data) {
@@ -14605,6 +14612,7 @@ async function enrollDevice(options) {
14605
14612
  }
14606
14613
  await writeFileConfig(configPath, {
14607
14614
  ...existing,
14615
+ machineId,
14608
14616
  serverUrl,
14609
14617
  token: body.data.token,
14610
14618
  deviceId: body.data.device_id,
@@ -14987,11 +14995,11 @@ async function readJson(request) {
14987
14995
  // src/logging/diagnostic-log.ts
14988
14996
  import {
14989
14997
  appendFileSync,
14990
- chmodSync as chmodSync2,
14998
+ chmodSync,
14991
14999
  existsSync as existsSync3,
14992
15000
  mkdirSync as mkdirSync2,
14993
15001
  readFileSync as readFileSync3,
14994
- renameSync as renameSync2,
15002
+ renameSync,
14995
15003
  statSync,
14996
15004
  unlinkSync,
14997
15005
  writeFileSync as writeFileSync2
@@ -15034,7 +15042,7 @@ function createDiagnosticLogger(filePath, options = {}) {
15034
15042
  const destination = `${filePath}.${index}`;
15035
15043
  if (!existsSync3(source)) continue;
15036
15044
  if (existsSync3(destination)) unlinkSync(destination);
15037
- renameSync2(source, destination);
15045
+ renameSync(source, destination);
15038
15046
  }
15039
15047
  currentBytes = 0;
15040
15048
  } catch {
@@ -15060,7 +15068,7 @@ function createDiagnosticLogger(filePath, options = {}) {
15060
15068
  const content = kept.length > 0 ? `${kept.join("\n")}
15061
15069
  ` : "";
15062
15070
  writeFileSync2(path, content, { mode: PRIVATE_FILE_MODE });
15063
- chmodSync2(path, PRIVATE_FILE_MODE);
15071
+ chmodSync(path, PRIVATE_FILE_MODE);
15064
15072
  }
15065
15073
  } catch {
15066
15074
  disabled = true;
@@ -18110,6 +18118,7 @@ var AgentRuntime = class {
18110
18118
  if (!this.chatOnly) try {
18111
18119
  const response = await this.client.heartbeat({
18112
18120
  agent_version: this.version,
18121
+ machine_id: this.config.machineId,
18113
18122
  hostname: this.config.hostname,
18114
18123
  capabilities: this.capabilitySummary(),
18115
18124
  active_runs: this.runs.activeTaskRunIds(),
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
3
  import { chmod, mkdir, rename, writeFile } from 'node:fs/promises';
4
4
  import { homedir, hostname, platform } from 'node:os';
5
5
  import { delimiter, dirname, join, resolve, sep } from 'node:path';
@@ -65,20 +65,30 @@ async function writeFileConfig(configPath, value) {
65
65
  * reuses the same device record there.
66
66
  */
67
67
  function ensureMachineId(configPath, file) {
68
- if (file.machineId)
69
- return file.machineId;
70
- const machineId = randomUUID();
68
+ const identityPath = `${configPath}.machine-id`;
69
+ let machineId;
71
70
  try {
72
- mkdirSync(dirname(configPath), { recursive: true, mode: 0o700 });
73
- const temporary = `${configPath}.${process.pid}.mid.tmp`;
74
- writeFileSync(temporary, JSON.stringify({ ...file, machineId }, null, 2), { mode: 0o600 });
75
- renameSync(temporary, configPath);
76
- chmodSync(configPath, 0o600);
77
- file.machineId = machineId;
71
+ machineId = readFileSync(identityPath, 'utf8').trim();
78
72
  }
79
- catch {
80
- // Read-only config: keep the id for this process only.
73
+ catch (error) {
74
+ if (error.code !== 'ENOENT')
75
+ throw error;
76
+ mkdirSync(dirname(configPath), { recursive: true, mode: 0o700 });
77
+ machineId = file.machineId ?? randomUUID();
78
+ try {
79
+ writeFileSync(identityPath, machineId, { flag: 'wx', mode: 0o600 });
80
+ }
81
+ catch (writeError) {
82
+ if (writeError.code !== 'EEXIST')
83
+ throw writeError;
84
+ machineId = readFileSync(identityPath, 'utf8').trim();
85
+ }
81
86
  }
87
+ if (!/^[a-zA-Z0-9_-]{8,64}$/.test(machineId))
88
+ throw new Error('本机设备身份文件无效');
89
+ // Do not rewrite a config snapshot at startup: an enrollment in another
90
+ // process may just have saved newer credentials. The identity file is durable.
91
+ file.machineId = machineId;
82
92
  return machineId;
83
93
  }
84
94
  export function normalizeServerUrl(value) {
@@ -92,11 +102,12 @@ export function normalizeServerUrl(value) {
92
102
  export async function enrollDevice(options) {
93
103
  const configPath = resolve(options.configPath ?? defaultConfigPath());
94
104
  const existing = readFileConfig(configPath);
105
+ const machineId = ensureMachineId(configPath, existing);
95
106
  const serverUrl = normalizeServerUrl(options.serverUrl ?? process.env.TOC_OCRA_SERVER_URL ?? existing.serverUrl ?? DEFAULT_SERVER_URL);
96
107
  const response = await fetch(`${serverUrl}/api/agent/enroll`, {
97
108
  method: 'POST',
98
109
  headers: { 'content-type': 'application/json' },
99
- body: JSON.stringify({ code: options.code, hostname: hostname(), platform: platform(), agent_version: options.agentVersion })
110
+ body: JSON.stringify({ code: options.code, machine_id: machineId, hostname: hostname(), platform: platform(), agent_version: options.agentVersion })
100
111
  });
101
112
  const body = await response.json().catch(() => null);
102
113
  if (!response.ok || !body?.success || !body.data) {
@@ -104,6 +115,7 @@ export async function enrollDevice(options) {
104
115
  }
105
116
  await writeFileConfig(configPath, {
106
117
  ...existing,
118
+ machineId,
107
119
  serverUrl,
108
120
  token: body.data.token,
109
121
  deviceId: body.data.device_id,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -144,6 +144,7 @@ export class AgentRuntime {
144
144
  try {
145
145
  const response = await this.client.heartbeat({
146
146
  agent_version: this.version,
147
+ machine_id: this.config.machineId,
147
148
  hostname: this.config.hostname,
148
149
  capabilities: this.capabilitySummary(),
149
150
  active_runs: this.runs.activeTaskRunIds(),
@@ -1 +1 @@
1
- {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../../src/runtime/agent-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-runtime.js","sourceRoot":"","sources":["../../../src/runtime/agent-runtime.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export declare class GatewayClient {
17
17
  private request;
18
18
  heartbeat(body: {
19
19
  agent_version: string;
20
+ machine_id?: string;
20
21
  hostname: string;
21
22
  capabilities: unknown;
22
23
  active_runs: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../../src/transport/gateway-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAW/C;;;;GAIG;AAEH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACC;IAAtC,YAAY,OAAe,EAAW,MAAc;QAClD,KAAK,CAAC,OAAO,CAAC,CAAA;QADsB,WAAM,GAAN,MAAM,CAAQ;IAEpD,CAAC;IAED,8DAA8D;IAC9D,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,KAAK,GAAG,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAE5C,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAa,EAAE,SAAiB,EAAE,MAAoB;QAC3G,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;QAC7D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;QACxC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,aAAa,IAAI,EAAE,EAAE;gBACxE,MAAM;gBACN,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;oBAC5C,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;iBACtE;gBACD,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7D,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAA;YACF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAA0B,CAAA;YACjF,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACvC,MAAM,IAAI,YAAY,CAAC,QAAQ,EAAE,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;YACzF,CAAC;YACD,OAAO,QAAQ,CAAC,IAAS,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,YAAY;gBAAE,MAAM,KAAK,CAAA;YAC9C,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAI,YAAY,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;YAC5F,MAAM,IAAI,YAAY,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QACnF,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,SAAS,CAAC,IAAoI;QAC5I,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACzD,CAAC;IAED,yEAAyE;IACzE,KAAK,CAAC,IAAI,CAAC,WAAmB,EAAE,MAAoB;QAClD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAA6B,KAAK,EAAE,kBAAkB,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,CAAA;QAClJ,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;IACzB,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,SAAmB,EAAE,UAAoB;QACvE,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAA;IACrH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,WAAmB,EAAE,QAAgB,EAAE,MAAoB;QACxE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAA6B,KAAK,EAAE,uBAAuB,WAAW,cAAc,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,CAAA;QACjM,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;IACzB,CAAC;IAED,aAAa,CAAC,SAAiB,EAAE,IAA6G;QAC5I,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,kBAAkB,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAChG,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,MAAiB;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,kBAAkB,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAA;IACnG,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,OAAe;QAC5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,eAAe,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE;YAC7I,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SAC/F,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAA;QACpE,IAAI,QAAQ,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;YAAE,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;QAC5E,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;QAC1D,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;YAAE,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;QAChF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,UAAU,CAAC,KAAa,EAAE,IAAsB;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACzF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,MAAc,EAAE,WAAmB,EAAE,IAAY,EAAE,MAAc,EAAE,MAAmB;QAClH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,UAAU,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE;YACvI,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;SAClJ,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAAE,MAAM,IAAI,YAAY,CAAC,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;QACvG,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QACvD,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAAC,CAAC;QACtH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;QACjC,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,EAAE,SAAS,CAAC,KAAa,EAAE,SAAS,EAAE,QAAQ;gBAC3E,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAA;gBACxB,IAAI,QAAQ,GAAG,IAAI,EAAE,CAAC;oBAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;oBAAC,OAAM;gBAAC,CAAC;gBAClE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBAClB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACvB,CAAC,EAAE,CAAC,CAAA;QACJ,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3E,MAAM,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAA8C,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QACvH,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAC7F,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,IAAuB;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAC1F,CAAC;CACF"}
1
+ {"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../../src/transport/gateway-client.ts"],"names":[],"mappings":"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"}
package/locales/en.json CHANGED
@@ -61,9 +61,10 @@
61
61
  "body": "Once bound, tasks sent to this device in \"{{workspace}}\" run on this computer (server: {{server}}).",
62
62
  "server": "Server address",
63
63
  "device": "Device",
64
- "newDevice": "Create a new device",
64
+ "newDevice": "Find this computer automatically",
65
65
  "replaces": "replaces its current binding",
66
- "name": "Device name",
66
+ "name": "Name for first registration",
67
+ "identityRequired": "Update the device agent or select an existing device to bind.",
67
68
  "submit": "Bind",
68
69
  "working": "Binding…",
69
70
  "noWorkspace": "Select a workspace first.",
@@ -61,9 +61,10 @@
61
61
  "body": "绑定后,「{{workspace}}」里派发给这台设备的任务会在本机执行(服务器:{{server}})。",
62
62
  "server": "服务器地址",
63
63
  "device": "设备",
64
- "newDevice": "新建一台设备",
64
+ "newDevice": "自动关联本机设备",
65
65
  "replaces": "将替换原来的绑定",
66
- "name": "设备名称",
66
+ "name": "首次注册名称",
67
+ "identityRequired": "请更新设备代理后重试,或选择已有设备绑定。",
67
68
  "submit": "绑定",
68
69
  "working": "正在绑定…",
69
70
  "noWorkspace": "请先选择一个工作空间。",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "toc-ocra",
3
- "version": "0.2.10",
3
+ "version": "0.2.11",
4
4
  "description": "Echo device agent: local CLI execution service plus its desktop plugin (heartbeat + long-poll, headless CLIs)",
5
5
  "type": "module",
6
6
  "bin": {