toc-ocra 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/plugin/renderer.js +1 -1
- package/dist/plugin/renderer.js.map +3 -3
- package/dist/src/config.d.ts +1 -0
- package/dist/src/config.js +27 -1
- package/dist/src/config.js.map +1 -1
- package/dist/src/runtime/agent-service.js +1 -0
- package/dist/src/runtime/agent-service.js.map +1 -1
- package/locales/en.json +1 -0
- package/locales/zh-CN.json +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ node dist/src/index.js run
|
|
|
31
31
|
|
|
32
32
|
本机控制接口(`/control/*`)只接受 `127.0.0.1` / `localhost` 的 Host 和来源,除 `info`、`pair` 外都要 `Authorization: Bearer <控制令牌>`。控制令牌保存在数据目录的 `control-token`(0600),连接码在 `connection-code`(0600,使用后或连续输错 5 次后更换)。
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
发布:`./publish-latest.sh`(或 `npm run publish:latest`)。脚本会构建、校验插件包,本地版本不高于 npm 上的版本时自动升一个补丁号,再发布到 npm;npm 令牌在终端里输入,或通过环境变量 `NPM_TOKEN` 传入。管理员在「系统管理 › 插件目录」收录包名 `toc-ocra` 并批准版本后,用户即可在插件市场安装。
|
|
35
35
|
|
|
36
36
|
## 配置
|
|
37
37
|
|
package/dist/plugin/renderer.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Y=Object.create;var B=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames;var Z=Object.getPrototypeOf,ee=Object.prototype.hasOwnProperty;var P=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}};var ne=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of X(t))!ee.call(e,i)&&i!==r&&B(e,i,{get:()=>t[i],enumerable:!(a=Q(t,i))||a.enumerable});return e};var S=(e,t,r)=>(r=e!=null?Y(Z(e)):{},ne(t||!e||!e.__esModule?B(r,"default",{value:e,enumerable:!0}):r,e));var L=P((me,$)=>{var I=globalThis.__TOC_PLUGIN_SHARED__,D=I&&I.react;if(!D)throw new Error("The host does not provide react; this plugin needs a newer app version.");$.exports=D});var q=P((ve,F)=>{var M=globalThis.__TOC_PLUGIN_SHARED__,j=M&&M["@toc-starter/plugin-sdk/ui"];if(!j)throw new Error("The host does not provide @toc-starter/plugin-sdk/ui; this plugin needs a newer app version.");F.exports=j});var U=P((ye,K)=>{var G=globalThis.__TOC_PLUGIN_SHARED__,J=G&&G["react/jsx-runtime"];if(!J)throw new Error("The host does not provide react/jsx-runtime; this plugin needs a newer app version.");K.exports=J});var s=S(L(),1);var A=S(L(),1);function H(e){if(!e||typeof e.activate!="function")throw new TypeError("definePlugin() needs an object with an activate(context) function");return e}function T(e,t){return(0,A.useSyncExternalStore)(r=>e.core.onContextChange(t,r),()=>e.core.context(t))}var o=S(q(),1);var W="http://127.0.0.1:17339",f=class extends Error{constructor(r,a,i=""){super(a);this.kind=r;this.code=i}kind;code};async function _(e,t,r={}){let a=new Headers(r.headers);r.token&&a.set("Authorization",`Bearer ${r.token}`),r.body&&a.set("Content-Type","application/json");let i;try{i=await fetch(`${e.replace(/\/+$/,"")}${t}`,{...r,headers:a,cache:"no-store"})}catch{throw new f("offline","local service unreachable")}let p=await i.json().catch(()=>null);if(i.status===401)throw new f("unauthorized","unauthorized");if(!i.ok){let d=typeof p?.error=="string"?p.error:"",u=typeof p?.message=="string"?p.message:d||`HTTP ${i.status}`;throw new f("rejected",u,d)}return p}var y={info:e=>_(e,"/control/info"),pair:(e,t)=>_(e,"/control/pair",{method:"POST",body:JSON.stringify({code:t})}),status:(e,t)=>_(e,"/control/status",{token:t}),enroll:(e,t,r,a)=>_(e,"/control/enroll",{method:"POST",token:t,body:JSON.stringify({server_url:r,code:a})}),unpair:(e,t)=>_(e,"/control/unpair",{method:"POST",token:t}),detect:(e,t)=>_(e,"/control/detect",{method:"POST",token:t})};function E(e,t){let r=a=>{try{return new URL(a).origin.toLowerCase()}catch{return a.trim().replace(/\/+$/,"").toLowerCase()}};return!!(e&&t)&&r(e)===r(t)}var n=S(U(),1),z="controlToken",te="localUrl",re=3e3,ae=new URL("../../assets/icon.svg",import.meta.url).href;function oe(){return(0,n.jsx)("img",{src:ae,alt:"",width:16,height:16,draggable:!1})}function ie(e,t){return t instanceof f&&t.kind==="offline"?e.t("error.offline"):t instanceof Error?t.message:String(t)}function R({ctx:e,value:t}){let[r,a]=(0,s.useState)(!1);return(0,n.jsxs)("div",{className:"da-command",children:[(0,n.jsx)("code",{children:t}),(0,n.jsx)(o.Btn,{onClick:()=>{navigator.clipboard.writeText(t).then(()=>{a(!0),window.setTimeout(()=>a(!1),1500)})},children:r?e.t("common.copied"):e.t("common.copy")})]})}function de({ctx:e}){let t=T(e,"server"),r=T(e,"workspace"),[a]=(0,s.useState)(()=>e.storage.get(te,W)),[i,p]=(0,s.useState)(()=>e.secureStorage.get(z,"")),[d,u]=(0,s.useState)({kind:"checking"}),[h,b]=(0,s.useState)(""),[k,g]=(0,s.useState)(!1),m=(0,s.useRef)(!0),C=(0,s.useCallback)(async()=>{try{await y.info(a)}catch{m.current&&u({kind:"offline"});return}if(!i){m.current&&u({kind:"needsCode"});return}try{let l=await y.status(a,i);m.current&&u({kind:"ready",status:l})}catch(l){if(!m.current)return;l instanceof f&&l.kind==="unauthorized"?(e.secureStorage.remove(z),p(""),u({kind:"needsCode"})):u({kind:"offline"})}},[e,a,i]);(0,s.useEffect)(()=>{m.current=!0,C();let l=window.setInterval(()=>{C()},re);return()=>{m.current=!1,window.clearInterval(l)}},[C]),(0,s.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.offline")})},[e,d]);let x=async l=>{g(!0),b("");try{await l()}catch(v){b(ie(e,v))}finally{g(!1)}};return(0,n.jsxs)("div",{className:"da-app",children:[(0,n.jsx)(o.PageHeader,{title:e.t("page.title"),subtitle:e.t("page.subtitle")}),h&&(0,n.jsx)("div",{role:"alert",className:"da-alert",children:h}),d.kind==="checking"&&(0,n.jsx)(o.Card,{children:(0,n.jsx)("span",{className:"da-muted",children:e.t("common.checking")})}),d.kind==="offline"&&(0,n.jsx)(se,{ctx:e,localUrl:a}),d.kind==="needsCode"&&(0,n.jsx)(le,{ctx:e,busy:k,onPair:l=>x(async()=>{let v=await y.pair(a,l).catch(w=>{throw w instanceof f&&w.code==="code_wrong"?new Error(e.t("pair.wrong")):w instanceof f&&w.code==="locked"?new Error(e.t("pair.locked")):w});e.secureStorage.set(z,v.token),p(v.token)})}),d.kind==="ready"&&(0,n.jsx)(ce,{ctx:e,status:d.status,server:t,workspace:r,busy:k,run:x,localUrl:a,token:i,onStatus:l=>u({kind:"ready",status:l})})]})}function se({ctx:e,localUrl:t}){return(0,n.jsxs)(o.Card,{children:[(0,n.jsx)(o.CardTitle,{children:e.t("offline.title")}),(0,n.jsx)("p",{className:"da-text",children:e.t("offline.body",{url:t})}),(0,n.jsx)("div",{className:"da-step",children:e.t("offline.once")}),(0,n.jsx)(R,{ctx:e,value:"npx toc-ocra@latest run"}),(0,n.jsx)("div",{className:"da-step",children:e.t("offline.service")}),(0,n.jsx)(R,{ctx:e,value:"npm install -g toc-ocra@latest && toc-ocra service:install"}),(0,n.jsx)("p",{className:"da-muted",children:e.t("offline.node")})]})}function le({ctx:e,busy:t,onPair:r}){let[a,i]=(0,s.useState)(""),p=/^\d{6}$/.test(a);return(0,n.jsxs)(o.Card,{children:[(0,n.jsx)(o.CardTitle,{children:e.t("pair.title")}),(0,n.jsx)("p",{className:"da-text",children:e.t("pair.body")}),(0,n.jsx)(R,{ctx:e,value:"toc-ocra code"}),(0,n.jsxs)("form",{className:"da-row",onSubmit:d=>{d.preventDefault(),p&&r(a)},children:[(0,n.jsx)(o.Input,{value:a,onChange:d=>i(d.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,n.jsx)(o.Btn,{primary:!0,type:"submit",disabled:!p||t,children:e.t("pair.submit")})]})]})}function ce({ctx:e,status:t,server:r,workspace:a,busy:i,run:p,localUrl:d,token:u,onStatus:h}){let b=t.paired&&r&&!E(t.server_url,r.origin),k=()=>p(async()=>{t.device_id&&r&&E(t.server_url,r.origin)&&await e.core.request(`/devices/${encodeURIComponent(t.device_id)}/agent`,{method:"DELETE"}).catch(()=>{}),h(await y.unpair(d,u))});return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(o.Card,{children:[(0,n.jsx)(o.CardTitle,{children:e.t("status.title")}),(0,n.jsxs)("dl",{className:"da-grid",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e.t("status.service")}),(0,n.jsxs)("dd",{children:["toc-ocra ",t.version," \xB7 ",t.hostname]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e.t("status.binding")}),(0,n.jsx)("dd",{children:(0,n.jsx)(pe,{ctx:e,status:t})})]}),t.paired&&(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e.t("status.device")}),(0,n.jsx)("dd",{children:t.device_name})]}),t.paired&&(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e.t("status.server")}),(0,n.jsx)("dd",{className:"da-mono",children:t.server_url})]}),t.paired&&(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e.t("status.runs")}),(0,n.jsx)("dd",{children:t.active_runs})]})]}),t.paired&&!t.connected&&t.connection_error&&(0,n.jsx)("p",{className:"da-muted",children:e.t("status.lastError",{error:t.connection_error})}),t.token_from_env&&(0,n.jsx)("p",{className:"da-muted",children:e.t("status.tokenFromEnv")}),t.paired&&(0,n.jsx)("div",{className:"da-row",children:(0,n.jsx)(o.Btn,{danger:!0,disabled:i||t.token_from_env,onClick:()=>{k()},children:e.t("status.unpair")})})]}),(!t.paired||t.unauthorized||b)&&(0,n.jsx)(ue,{ctx:e,status:t,server:r,workspace:a,busy:i,run:p,localUrl:d,token:u,onStatus:h,rebind:t.paired}),(0,n.jsxs)(o.Card,{children:[(0,n.jsx)(o.CardTitle,{children:e.t("cli.title")}),(0,n.jsxs)("ul",{className:"da-list",children:[t.providers.filter(g=>g.installed).map(g=>(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{className:"da-mono",children:g.id}),(0,n.jsx)("span",{className:"da-muted",children:g.version}),g.runnable?(0,n.jsx)(o.Badge,{variant:"ok",children:e.t("cli.runnable")}):(0,n.jsx)(o.Badge,{variant:"muted",children:e.t("cli.detectOnly")})]},g.id)),!t.providers.some(g=>g.installed)&&(0,n.jsx)("li",{className:"da-muted",children:e.t("cli.none")})]}),(0,n.jsx)("div",{className:"da-row",children:(0,n.jsx)(o.Btn,{disabled:i,onClick:()=>{p(async()=>h(await y.detect(d,u)))},children:e.t("cli.redetect")})})]})]})}function pe({ctx:e,status:t}){return t.paired?t.unauthorized?(0,n.jsx)(o.Badge,{variant:"err",children:e.t("binding.revoked")}):t.connected?(0,n.jsx)(o.Badge,{variant:"ok",children:e.t("binding.online")}):(0,n.jsx)(o.Badge,{variant:"warn",children:e.t("binding.connecting")}):(0,n.jsx)(o.Badge,{variant:"muted",children:e.t("binding.unpaired")})}function ue({ctx:e,status:t,server:r,workspace:a,busy:i,run:p,localUrl:d,token:u,onStatus:h,rebind:b}){let[k,g]=(0,s.useState)([]),[m,C]=(0,s.useState)("new"),[x,l]=(0,s.useState)(t.hostname),[v,w]=(0,s.useState)(r?.origin??"");(0,s.useEffect)(()=>{r?.origin&&w(r.origin)},[r?.origin]),(0,s.useEffect)(()=>{if(!a?.id)return;let c=!1;return e.core.request(`/workspaces/${encodeURIComponent(a.id)}/devices`).then(N=>{c||g((N.items??[]).filter(O=>O.is_mine))}).catch(()=>{c||g([])}),()=>{c=!0}},[e,a?.id]);let V=()=>p(async()=>{if(!a?.id)throw new Error(e.t("bind.noWorkspace"));if(!v.trim())throw new Error(e.t("bind.noServer"));let c=m;m==="new"&&(c=(await e.core.request(`/workspaces/${encodeURIComponent(a.id)}/devices`,{method:"POST",body:JSON.stringify({name:x.trim()||t.hostname,location:"local",platform:t.platform,note:"",share_to_workspace:!1})})).id,C(c));let N=await e.core.request(`/devices/${encodeURIComponent(c)}/pairing-code`,{method:"POST"});h(await y.enroll(d,u,v.trim(),N.code)),e.notify({title:e.t("page.title"),body:e.t("bind.done",{server:r?.name??v})})});return(0,n.jsxs)(o.Card,{children:[(0,n.jsx)(o.CardTitle,{children:e.t(b?"bind.rebindTitle":"bind.title")}),b&&t.unauthorized&&(0,n.jsx)("p",{className:"da-text",children:e.t("bind.revoked")}),b&&!t.unauthorized&&(0,n.jsx)("p",{className:"da-text",children:e.t("bind.elsewhere",{bound:t.server_url,current:r?.origin??""})}),(0,n.jsx)("p",{className:"da-text",children:e.t("bind.body",{server:r?.name??"",workspace:a?.name??""})}),(0,n.jsxs)("label",{className:"da-field",children:[(0,n.jsx)("span",{children:e.t("bind.server")}),(0,n.jsx)(o.Input,{value:v,onChange:c=>w(c.target.value),spellCheck:!1,className:"da-mono"})]}),(0,n.jsxs)("label",{className:"da-field",children:[(0,n.jsx)("span",{children:e.t("bind.device")}),(0,n.jsxs)("select",{className:"da-select",value:m,onChange:c=>C(c.target.value),children:[(0,n.jsx)("option",{value:"new",children:e.t("bind.newDevice")}),k.map(c=>(0,n.jsxs)("option",{value:c.id,children:[c.name,c.paired?` \xB7 ${e.t("bind.replaces")}`:""]},c.id))]})]}),m==="new"&&(0,n.jsxs)("label",{className:"da-field",children:[(0,n.jsx)("span",{children:e.t("bind.name")}),(0,n.jsx)(o.Input,{value:x,onChange:c=>l(c.target.value),maxLength:100})]}),(0,n.jsx)("div",{className:"da-row",children:(0,n.jsx)(o.Btn,{primary:!0,disabled:i||!a?.id,onClick:()=>{V()},children:e.t(i?"bind.working":"bind.submit")})})]})}var xe=H({activate(e){e.registerNavigation("agent.nav",(0,n.jsx)(oe,{})),e.registerRoute("agent.home",(0,n.jsx)(de,{ctx:e}))}});export{xe as default};
|
|
1
|
+
var X=Object.create;var D=Object.defineProperty;var Z=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var ne=Object.getPrototypeOf,te=Object.prototype.hasOwnProperty;var x=(e,n)=>()=>{try{return n||e((n={exports:{}}).exports,n),n.exports}catch(r){throw n=0,r}};var re=(e,n,r,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let d of ee(n))!te.call(e,d)&&d!==r&&D(e,d,{get:()=>n[d],enumerable:!(i=Z(n,d))||i.enumerable});return e};var N=(e,n,r)=>(r=e!=null?X(ne(e)):{},re(n||!e||!e.__esModule?D(r,"default",{value:e,enumerable:!0}):r,e));var E=x((be,M)=>{var A=globalThis.__TOC_PLUGIN_SHARED__,$=A&&A.react;if(!$)throw new Error("The host does not provide react; this plugin needs a newer app version.");M.exports=$});var G=x((ye,W)=>{var F=globalThis.__TOC_PLUGIN_SHARED__,q=F&&F["@toc-starter/plugin-sdk/ui"];if(!q)throw new Error("The host does not provide @toc-starter/plugin-sdk/ui; this plugin needs a newer app version.");W.exports=q});var B=x((Se,Y)=>{var J=globalThis.__TOC_PLUGIN_SHARED__,K=J&&J["react/jsx-runtime"];if(!K)throw new Error("The host does not provide react/jsx-runtime; this plugin needs a newer app version.");Y.exports=K});var s=N(E(),1);var H=N(E(),1);function j(e){if(!e||typeof e.activate!="function")throw new TypeError("definePlugin() needs an object with an activate(context) function");return e}function U(e,n){return(0,H.useSyncExternalStore)(r=>e.core.onContextChange(n,r),()=>e.core.context(n))}var a=N(G(),1);var O="http://127.0.0.1:17339",h=class extends Error{constructor(r,i,d=""){super(i);this.kind=r;this.code=d}kind;code};async function C(e,n,r={}){let i=new Headers(r.headers);r.token&&i.set("Authorization",`Bearer ${r.token}`),r.body&&i.set("Content-Type","application/json");let d;try{d=await fetch(`${e.replace(/\/+$/,"")}${n}`,{...r,headers:i,cache:"no-store"})}catch{throw new h("offline","local service unreachable")}let c=await d.json().catch(()=>null);if(d.status===401)throw new h("unauthorized","unauthorized");if(!d.ok){let o=typeof c?.error=="string"?c.error:"",u=typeof c?.message=="string"?c.message:o||`HTTP ${d.status}`;throw new h("rejected",u,o)}return c}var y={info:e=>C(e,"/control/info"),pair:(e,n)=>C(e,"/control/pair",{method:"POST",body:JSON.stringify({code:n})}),status:(e,n)=>C(e,"/control/status",{token:n}),enroll:(e,n,r,i)=>C(e,"/control/enroll",{method:"POST",token:n,body:JSON.stringify({server_url:r,code:i})}),unpair:(e,n)=>C(e,"/control/unpair",{method:"POST",token:n}),detect:(e,n)=>C(e,"/control/detect",{method:"POST",token:n})};function T(e,n){let r=i=>{try{return new URL(i).origin.toLowerCase()}catch{return i.trim().replace(/\/+$/,"").toLowerCase()}};return!!(e&&n)&&r(e)===r(n)}var t=N(B(),1),P="controlToken",V="localUrl",ie=3e3,z="autoBind",oe=1e4,ae=6e4,de=new URL("../../assets/icon.svg",import.meta.url).href;function se(){return(0,t.jsx)("img",{src:de,alt:"",width:16,height:16,draggable:!1})}function le(e,n){return n instanceof h&&n.kind==="offline"?e.t("error.offline"):n instanceof Error?n.message:String(n)}function R({ctx:e,value:n}){let[r,i]=(0,s.useState)(!1);return(0,t.jsxs)("div",{className:"da-command",children:[(0,t.jsx)("code",{children:n}),(0,t.jsx)(a.Btn,{onClick:()=>{navigator.clipboard.writeText(n).then(()=>{i(!0),window.setTimeout(()=>i(!1),1500)})},children:r?e.t("common.copied"):e.t("common.copy")})]})}function ce({ctx:e}){let n=U(e,"server"),r=U(e,"workspace"),[i]=(0,s.useState)(()=>e.storage.get(V,O)),[d,c]=(0,s.useState)(()=>e.secureStorage.get(P,"")),[o,u]=(0,s.useState)({kind:"checking"}),[m,l]=(0,s.useState)(""),[b,f]=(0,s.useState)(!1),v=(0,s.useRef)(!0),k=(0,s.useCallback)(async()=>{try{await y.info(i)}catch{v.current&&u({kind:"offline"});return}if(!d){v.current&&u({kind:"needsCode"});return}try{let p=await y.status(i,d);v.current&&u({kind:"ready",status:p})}catch(p){if(!v.current)return;p instanceof h&&p.kind==="unauthorized"?(e.secureStorage.remove(P),c(""),u({kind:"needsCode"})):u({kind:"offline"})}},[e,i,d]);(0,s.useEffect)(()=>{v.current=!0,k();let p=window.setInterval(()=>{k()},ie);return()=>{v.current=!1,window.clearInterval(p)}},[k]),(0,s.useEffect)(()=>{if(o.kind==="ready"){let p=o.status;e.reportHealth(p.paired&&p.connected?{status:"healthy",summary:e.t("health.online",{name:p.device_name})}:{status:"degraded",summary:e.t(p.paired?"health.disconnected":"health.unpaired")})}else o.kind==="offline"&&e.reportHealth({status:"degraded",summary:e.t("health.offline")})},[e,o]);let S=async p=>{f(!0),l("");try{await p()}catch(w){l(le(e,w))}finally{f(!1)}};return(0,t.jsxs)("div",{className:"da-app",children:[(0,t.jsx)(a.PageHeader,{title:e.t("page.title"),subtitle:e.t("page.subtitle")}),m&&(0,t.jsx)("div",{role:"alert",className:"da-alert",children:m}),o.kind==="checking"&&(0,t.jsx)(a.Card,{children:(0,t.jsx)("span",{className:"da-muted",children:e.t("common.checking")})}),o.kind==="offline"&&(0,t.jsx)(pe,{ctx:e,localUrl:i}),o.kind==="needsCode"&&(0,t.jsx)(ue,{ctx:e,busy:b,onPair:p=>S(async()=>{let w=await y.pair(i,p).catch(_=>{throw _ instanceof h&&_.code==="code_wrong"?new Error(e.t("pair.wrong")):_ instanceof h&&_.code==="locked"?new Error(e.t("pair.locked")):_});e.secureStorage.set(P,w.token),c(w.token)})}),o.kind==="ready"&&(0,t.jsx)(ge,{ctx:e,status:o.status,server:n,workspace:r,busy:b,run:S,localUrl:i,token:d,onStatus:p=>u({kind:"ready",status:p})})]})}function pe({ctx:e,localUrl:n}){return(0,t.jsxs)(a.Card,{children:[(0,t.jsx)(a.CardTitle,{children:e.t("offline.title")}),(0,t.jsx)("p",{className:"da-text",children:e.t("offline.body",{url:n})}),(0,t.jsx)("div",{className:"da-step",children:e.t("offline.once")}),(0,t.jsx)(R,{ctx:e,value:"npx toc-ocra@latest run"}),(0,t.jsx)("div",{className:"da-step",children:e.t("offline.service")}),(0,t.jsx)(R,{ctx:e,value:"npm install -g toc-ocra@latest && toc-ocra service:install"}),(0,t.jsx)("p",{className:"da-muted",children:e.t("offline.node")})]})}function ue({ctx:e,busy:n,onPair:r}){let[i,d]=(0,s.useState)(""),c=/^\d{6}$/.test(i);return(0,t.jsxs)(a.Card,{children:[(0,t.jsx)(a.CardTitle,{children:e.t("pair.title")}),(0,t.jsx)("p",{className:"da-text",children:e.t("pair.body")}),(0,t.jsx)(R,{ctx:e,value:"toc-ocra code"}),(0,t.jsxs)("form",{className:"da-row",onSubmit:o=>{o.preventDefault(),c&&r(i)},children:[(0,t.jsx)(a.Input,{value:i,onChange:o=>d(o.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,t.jsx)(a.Btn,{primary:!0,type:"submit",disabled:!c||n,children:e.t("pair.submit")})]})]})}function ge({ctx:e,status:n,server:r,workspace:i,busy:d,run:c,localUrl:o,token:u,onStatus:m}){let l=n.paired&&r&&!T(n.server_url,r.origin),b=()=>c(async()=>{n.device_id&&r&&T(n.server_url,r.origin)&&await e.core.request(`/devices/${encodeURIComponent(n.device_id)}/agent`,{method:"DELETE"}).catch(()=>{}),e.storage.set(z,"off"),m(await y.unpair(o,u))});return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(a.Card,{children:[(0,t.jsx)(a.CardTitle,{children:e.t("status.title")}),(0,t.jsxs)("dl",{className:"da-grid",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("dt",{children:e.t("status.service")}),(0,t.jsxs)("dd",{children:["toc-ocra ",n.version," \xB7 ",n.hostname]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("dt",{children:e.t("status.binding")}),(0,t.jsx)("dd",{children:(0,t.jsx)(me,{ctx:e,status:n})})]}),n.paired&&(0,t.jsxs)("div",{children:[(0,t.jsx)("dt",{children:e.t("status.device")}),(0,t.jsx)("dd",{children:n.device_name})]}),n.paired&&(0,t.jsxs)("div",{children:[(0,t.jsx)("dt",{children:e.t("status.server")}),(0,t.jsx)("dd",{className:"da-mono",children:n.server_url})]}),n.paired&&(0,t.jsxs)("div",{children:[(0,t.jsx)("dt",{children:e.t("status.runs")}),(0,t.jsx)("dd",{children:n.active_runs})]})]}),n.paired&&!n.connected&&n.connection_error&&(0,t.jsx)("p",{className:"da-muted",children:e.t("status.lastError",{error:n.connection_error})}),n.token_from_env&&(0,t.jsx)("p",{className:"da-muted",children:e.t("status.tokenFromEnv")}),n.paired&&(0,t.jsx)("div",{className:"da-row",children:(0,t.jsx)(a.Btn,{danger:!0,disabled:d||n.token_from_env,onClick:()=>{b()},children:e.t("status.unpair")})})]}),(!n.paired||n.unauthorized||l)&&(0,t.jsx)(fe,{ctx:e,status:n,server:r,workspace:i,busy:d,run:c,localUrl:o,token:u,onStatus:m,rebind:n.paired}),(0,t.jsxs)(a.Card,{children:[(0,t.jsx)(a.CardTitle,{children:e.t("cli.title")}),(0,t.jsxs)("ul",{className:"da-list",children:[n.providers.filter(f=>f.installed).map(f=>(0,t.jsxs)("li",{children:[(0,t.jsx)("span",{className:"da-mono",children:f.id}),(0,t.jsx)("span",{className:"da-muted",children:f.version}),f.runnable?(0,t.jsx)(a.Badge,{variant:"ok",children:e.t("cli.runnable")}):(0,t.jsx)(a.Badge,{variant:"muted",children:e.t("cli.detectOnly")})]},f.id)),!n.providers.some(f=>f.installed)&&(0,t.jsx)("li",{className:"da-muted",children:e.t("cli.none")})]}),(0,t.jsx)("div",{className:"da-row",children:(0,t.jsx)(a.Btn,{disabled:d,onClick:()=>{c(async()=>m(await y.detect(o,u)))},children:e.t("cli.redetect")})})]})]})}function me({ctx:e,status:n}){return n.paired?n.unauthorized?(0,t.jsx)(a.Badge,{variant:"err",children:e.t("binding.revoked")}):n.connected?(0,t.jsx)(a.Badge,{variant:"ok",children:e.t("binding.online")}):(0,t.jsx)(a.Badge,{variant:"warn",children:e.t("binding.connecting")}):(0,t.jsx)(a.Badge,{variant:"muted",children:e.t("binding.unpaired")})}function fe({ctx:e,status:n,server:r,workspace:i,busy:d,run:c,localUrl:o,token:u,onStatus:m,rebind:l}){let[b,f]=(0,s.useState)([]),[v,k]=(0,s.useState)("new"),[S,p]=(0,s.useState)(n.hostname),[w,_]=(0,s.useState)(r?.origin??"");(0,s.useEffect)(()=>{r?.origin&&_(r.origin)},[r?.origin]),(0,s.useEffect)(()=>{if(!i?.id)return;let g=!1;return e.core.request(`/workspaces/${encodeURIComponent(i.id)}/devices`).then(L=>{g||f((L.items??[]).filter(I=>I.is_mine))}).catch(()=>{g||f([])}),()=>{g=!0}},[e,i?.id]);let Q=()=>c(async()=>{if(!i?.id)throw new Error(e.t("bind.noWorkspace"));if(!w.trim())throw new Error(e.t("bind.noServer"));let g=v;v==="new"&&(g=(await e.core.request(`/workspaces/${encodeURIComponent(i.id)}/devices`,{method:"POST",body:JSON.stringify({name:S.trim()||n.hostname,location:"local",platform:n.platform,note:"",share_to_workspace:!1})})).id,k(g));let L=await e.core.request(`/devices/${encodeURIComponent(g)}/pairing-code`,{method:"POST"});m(await y.enroll(o,u,w.trim(),L.code)),e.storage.remove(z),e.notify({title:e.t("page.title"),body:e.t("bind.done",{server:r?.name??w})})});return(0,t.jsxs)(a.Card,{children:[(0,t.jsx)(a.CardTitle,{children:e.t(l?"bind.rebindTitle":"bind.title")}),l&&n.unauthorized&&(0,t.jsx)("p",{className:"da-text",children:e.t("bind.revoked")}),l&&!n.unauthorized&&(0,t.jsx)("p",{className:"da-text",children:e.t("bind.elsewhere",{bound:n.server_url,current:r?.origin??""})}),(0,t.jsx)("p",{className:"da-text",children:e.t("bind.body",{server:r?.name??"",workspace:i?.name??""})}),(0,t.jsxs)("label",{className:"da-field",children:[(0,t.jsx)("span",{children:e.t("bind.server")}),(0,t.jsx)(a.Input,{value:w,onChange:g=>_(g.target.value),spellCheck:!1,className:"da-mono"})]}),(0,t.jsxs)("label",{className:"da-field",children:[(0,t.jsx)("span",{children:e.t("bind.device")}),(0,t.jsxs)("select",{className:"da-select",value:v,onChange:g=>k(g.target.value),children:[(0,t.jsx)("option",{value:"new",children:e.t("bind.newDevice")}),b.map(g=>(0,t.jsxs)("option",{value:g.id,children:[g.name,g.paired?` \xB7 ${e.t("bind.replaces")}`:""]},g.id))]})]}),v==="new"&&(0,t.jsxs)("label",{className:"da-field",children:[(0,t.jsx)("span",{children:e.t("bind.name")}),(0,t.jsx)(a.Input,{value:S,onChange:g=>p(g.target.value),maxLength:100})]}),(0,t.jsx)("div",{className:"da-row",children:(0,t.jsx)(a.Btn,{primary:!0,disabled:d||!i?.id,onClick:()=>{Q()},children:e.t(d?"bind.working":"bind.submit")})})]})}function ve(e){let n=!1,r="",i=new Map,d=async()=>{if(n||e.signal.aborted)return;let o=e.core.context("server"),u=e.secureStorage.get(P,"");if(!(!o?.origin||!u||e.storage.get(z,"on")==="off")&&!(Date.now()-(i.get(o.origin)??0)<ae)){n=!0;try{let m=e.storage.get(V,O),l=await y.status(m,u);if(!l.machine_id||l.token_from_env)return;if(l.paired&&(l.unauthorized||T(l.server_url,o.origin))){r="";return}if(l.active_runs>0){r!==o.origin&&(r=o.origin,e.notify({title:e.t("page.title"),body:e.t("auto.deferred",{server:o.name||o.origin})}));return}let b=await e.core.request("/devices/machine/pairing-code",{method:"POST",body:JSON.stringify({machine_id:l.machine_id,hostname:l.hostname,platform:l.platform,current_device_id:l.paired?l.device_id:""})});await y.enroll(m,u,o.origin,b.code),r="",i.delete(o.origin),e.notify({title:e.t("page.title"),body:e.t("auto.done",{server:o.name||o.origin,device:b.device_name})})}catch(m){(!(m instanceof h)||m.kind==="rejected")&&i.set(o.origin,Date.now())}finally{n=!1}}},c=window.setInterval(()=>{d()},oe);e.registerDisposer(()=>window.clearInterval(c)),e.registerDisposer(e.core.onContextChange("server",()=>{d()})),window.setTimeout(()=>{d()},1500)}var Le=j({activate(e){e.registerNavigation("agent.nav",(0,t.jsx)(se,{})),e.registerRoute("agent.home",(0,t.jsx)(ce,{ctx:e})),ve(e)}});export{Le 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"],
|
|
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 PluginContext } from \"@toc-starter/plugin-sdk\";\nimport { Badge, Btn, Card, CardTitle, Input, PageHeader } from \"@toc-starter/plugin-sdk/ui\";\nimport \"./styles.css\";\nimport { DEFAULT_LOCAL_URL, LocalError, local, sameServer, type LocalStatus } from \"./local\";\n\nconst TOKEN_KEY = \"controlToken\";\nconst LOCAL_URL_KEY = \"localUrl\";\nconst POLL_MS = 3_000;\n\n/** Resolved against dist/plugin/renderer.js. */\nconst iconUrl = new URL(\"../../assets/icon.svg\", import.meta.url).href;\n\ninterface ServerContext { kind: \"cloud\" | \"lan\"; name: string; origin: string }\ninterface WorkspaceContext { id: string; name: string }\ninterface Device { id: string; name: string; platform: string; paired: boolean; status: string; is_mine: boolean }\n\ntype Phase =\n | { kind: \"checking\" }\n | { kind: \"offline\" }\n | { kind: \"needsCode\" }\n | { kind: \"ready\"; status: LocalStatus };\n\nfunction Icon() {\n return <img src={iconUrl} alt=\"\" width={16} height={16} draggable={false} />;\n}\n\nfunction 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\nfunction 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\nfunction AgentPage({ ctx }: { ctx: PluginContext }) {\n const server = useHostContext<ServerContext>(ctx, \"server\");\n const workspace = useHostContext<WorkspaceContext>(ctx, \"workspace\");\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 [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const alive = useRef(true);\n\n const refresh = useCallback(async () => {\n try {\n await local.info(localUrl);\n } catch {\n if (alive.current) setPhase({ kind: \"offline\" });\n return;\n }\n if (!token) {\n if (alive.current) setPhase({ kind: \"needsCode\" });\n return;\n }\n try {\n const status = await local.status(localUrl, token);\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 // The service was reinstalled (new control token): 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, 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(\"health.offline\") });\n }\n }, [ctx, phase]);\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 return (\n <div className=\"da-app\">\n <PageHeader title={ctx.t(\"page.title\")} subtitle={ctx.t(\"page.subtitle\")} />\n {error && <div role=\"alert\" className=\"da-alert\">{error}</div>}\n {phase.kind === \"checking\" && <Card><span className=\"da-muted\">{ctx.t(\"common.checking\")}</span></Card>}\n {phase.kind === \"offline\" && <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 </div>\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 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.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\nexport default definePlugin({\n activate(ctx) {\n ctx.registerNavigation(\"agent.nav\", <Icon />);\n ctx.registerRoute(\"agent.home\", <AgentPage ctx={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 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"],
|
|
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_jsx_runtime", "TOKEN_KEY", "LOCAL_URL_KEY", "POLL_MS", "iconUrl", "Icon", "errorText", "ctx", "error", "LocalError", "Command", "value", "copied", "setCopied", "AgentPage", "server", "useHostContext", "workspace", "localUrl", "DEFAULT_LOCAL_URL", "token", "setToken", "phase", "setPhase", "setError", "busy", "setBusy", "alive", "refresh", "local", "status", "reason", "timer", "s", "run", "action", "OfflineCard", "PairCard", "code", "result", "ReadyView", "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", "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 PluginContext } from \"@toc-starter/plugin-sdk\";\nimport { Badge, Btn, Card, CardTitle, Input, PageHeader } from \"@toc-starter/plugin-sdk/ui\";\nimport \"./styles.css\";\nimport { DEFAULT_LOCAL_URL, LocalError, local, sameServer, type LocalStatus } from \"./local\";\n\nconst TOKEN_KEY = \"controlToken\";\nconst LOCAL_URL_KEY = \"localUrl\";\nconst POLL_MS = 3_000;\n/** \"off\" after the user unbinds by hand; binding by hand turns it back on. */\nconst AUTO_BIND_KEY = \"autoBind\";\nconst AUTO_BIND_MS = 10_000;\nconst AUTO_BIND_RETRY_MS = 60_000;\n\n/** Resolved against dist/plugin/renderer.js. */\nconst iconUrl = new URL(\"../../assets/icon.svg\", import.meta.url).href;\n\ninterface ServerContext { kind: \"cloud\" | \"lan\"; name: string; origin: string }\ninterface WorkspaceContext { id: string; name: string }\ninterface Device { id: string; name: string; platform: string; paired: boolean; status: string; is_mine: boolean }\n\ntype Phase =\n | { kind: \"checking\" }\n | { kind: \"offline\" }\n | { kind: \"needsCode\" }\n | { kind: \"ready\"; status: LocalStatus };\n\nfunction Icon() {\n return <img src={iconUrl} alt=\"\" width={16} height={16} draggable={false} />;\n}\n\nfunction 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\nfunction 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\nfunction AgentPage({ ctx }: { ctx: PluginContext }) {\n const server = useHostContext<ServerContext>(ctx, \"server\");\n const workspace = useHostContext<WorkspaceContext>(ctx, \"workspace\");\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 [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const alive = useRef(true);\n\n const refresh = useCallback(async () => {\n try {\n await local.info(localUrl);\n } catch {\n if (alive.current) setPhase({ kind: \"offline\" });\n return;\n }\n if (!token) {\n if (alive.current) setPhase({ kind: \"needsCode\" });\n return;\n }\n try {\n const status = await local.status(localUrl, token);\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 // The service was reinstalled (new control token): 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, 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(\"health.offline\") });\n }\n }, [ctx, phase]);\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 return (\n <div className=\"da-app\">\n <PageHeader title={ctx.t(\"page.title\")} subtitle={ctx.t(\"page.subtitle\")} />\n {error && <div role=\"alert\" className=\"da-alert\">{error}</div>}\n {phase.kind === \"checking\" && <Card><span className=\"da-muted\">{ctx.t(\"common.checking\")}</span></Card>}\n {phase.kind === \"offline\" && <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 </div>\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 ctx.registerDisposer(() => window.clearInterval(timer));\n ctx.registerDisposer(ctx.core.onContextChange(\"server\", () => void tick()));\n window.setTimeout(() => void tick(), 1_500);\n}\n\nexport default definePlugin({\n activate(ctx) {\n ctx.registerNavigation(\"agent.nav\", <Icon />);\n ctx.registerRoute(\"agent.home\", <AgentPage ctx={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"],
|
|
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_jsx_runtime", "TOKEN_KEY", "LOCAL_URL_KEY", "POLL_MS", "AUTO_BIND_KEY", "AUTO_BIND_MS", "AUTO_BIND_RETRY_MS", "iconUrl", "Icon", "errorText", "ctx", "error", "LocalError", "Command", "value", "copied", "setCopied", "AgentPage", "server", "useHostContext", "workspace", "localUrl", "DEFAULT_LOCAL_URL", "token", "setToken", "phase", "setPhase", "setError", "busy", "setBusy", "alive", "refresh", "local", "status", "reason", "timer", "s", "run", "action", "OfflineCard", "PairCard", "code", "result", "ReadyView", "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", "index_default", "definePlugin"]
|
|
7
7
|
}
|
package/dist/src/config.d.ts
CHANGED
package/dist/src/config.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
2
3
|
import { chmod, mkdir, rename, writeFile } from 'node:fs/promises';
|
|
3
4
|
import { homedir, hostname, platform } from 'node:os';
|
|
4
5
|
import { delimiter, dirname, join, resolve, sep } from 'node:path';
|
|
@@ -23,6 +24,8 @@ const FileConfigSchema = z
|
|
|
23
24
|
token: z.string().min(1).optional(),
|
|
24
25
|
deviceId: z.string().min(1).optional(),
|
|
25
26
|
deviceName: z.string().min(1).optional(),
|
|
27
|
+
/** Stable id of this installation; lets any server recognise the same computer. */
|
|
28
|
+
machineId: z.string().min(8).max(64).optional(),
|
|
26
29
|
allowedRoots: z.array(z.string()).optional(),
|
|
27
30
|
maxConcurrentRuns: z.number().int().positive().max(64).optional(),
|
|
28
31
|
maxRunSeconds: z.number().int().positive().max(7 * 86_400).optional(),
|
|
@@ -56,6 +59,28 @@ async function writeFileConfig(configPath, value) {
|
|
|
56
59
|
await rename(temporary, configPath);
|
|
57
60
|
await chmod(configPath, 0o600);
|
|
58
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Returns this installation's machine id, generating and persisting it on
|
|
64
|
+
* first use. It survives unpairing, so re-binding to another server (or back)
|
|
65
|
+
* reuses the same device record there.
|
|
66
|
+
*/
|
|
67
|
+
function ensureMachineId(configPath, file) {
|
|
68
|
+
if (file.machineId)
|
|
69
|
+
return file.machineId;
|
|
70
|
+
const machineId = randomUUID();
|
|
71
|
+
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;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Read-only config: keep the id for this process only.
|
|
81
|
+
}
|
|
82
|
+
return machineId;
|
|
83
|
+
}
|
|
59
84
|
export function normalizeServerUrl(value) {
|
|
60
85
|
const url = new URL(value);
|
|
61
86
|
url.pathname = url.pathname.replace(/\/+$/, '').replace(/\/api$/, '');
|
|
@@ -133,6 +158,7 @@ export function loadBaseConfig() {
|
|
|
133
158
|
token,
|
|
134
159
|
deviceId: file.deviceId ?? '',
|
|
135
160
|
deviceName: file.deviceName ?? hostname(),
|
|
161
|
+
machineId: ensureMachineId(configPath, file),
|
|
136
162
|
hostname: hostname(),
|
|
137
163
|
platform: platform(),
|
|
138
164
|
allowedRoots: roots.map((root) => resolve(root)),
|
package/dist/src/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACnG,OAAO,EAAE,KAAK,EAAE,KAAK,EAAY,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAA;AAEzD,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,mFAAmF;IACnF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC/C,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACjE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,QAAQ,EAAE;IACrE,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACrC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IACzD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;CAChE,CAAC;KACD,MAAM,EAAE,CAAA;AAyBX,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,CAAC,CAAA;IACvG,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;IAC3F,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAA;AAC3F,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,cAAc,EAAE,CAAC,CAAA;AACnE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAG,cAAc,EAAE;IAC1D,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC3G,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,KAAiB;IAClE,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAClE,MAAM,SAAS,GAAG,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,MAAM,CAAA;IACpD,MAAM,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC3E,MAAM,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IACnC,MAAM,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;AAChC,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,UAAkB,EAAE,IAAgB;IAC3D,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,SAAS,CAAA;IACzC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAA;IAC9B,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAChE,MAAM,SAAS,GAAG,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,UAAU,CAAA;QACxD,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1F,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QACjC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;IAC1B,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IACrE,GAAG,CAAC,MAAM,GAAG,EAAE,CAAA;IACf,GAAG,CAAC,IAAI,GAAG,EAAE,CAAA;IACb,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AAC3C,CAAC;AAID,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA0B;IAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,iBAAiB,EAAE,CAAC,CAAA;IACrE,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,QAAQ,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAA;IACtI,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,mBAAmB,EAAE;QAC5D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;KAC9H,CAAC,CAAA;IACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAuC,CAAA;IAC1F,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,IAAI,aAAa,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;IACnE,CAAC;IACD,MAAM,eAAe,CAAC,UAAU,EAAE;QAChC,GAAG,QAAQ;QACX,SAAS;QACT,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;QACtB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;QAC7B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;KAClC,CAAC,CAAA;IACF,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAA;AACpG,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB;IAC3C,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;QAAE,OAAO,SAAS,CAAA;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;IAChE,OAAO,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC1E,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAA;IACnG,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,CAAA;AAC7D,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,iEAAiE,CAAA;AAErG,6EAA6E;AAC7E,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IACxD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,cAAc,EAAE,CAAA;IAChC,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC7C,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;IAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAA;IAC7E,IAAI,UAAU,GAAG,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IAC3F,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IAChG,OAAO;QACL,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACtG,KAAK;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,QAAQ,EAAE;QACzC,SAAS,EAAE,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC;QAC5C,QAAQ,EAAE,QAAQ,EAAE;QACpB,QAAQ,EAAE,QAAQ,EAAE;QACpB,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC;QAC7E,aAAa,EAAE,MAAM,CAAC,0BAA0B,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,GAAG,IAAI;QACnF,aAAa,EAAE,OAAO,CAAC,yBAAyB,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK;QAChF,UAAU,EAAE,OAAO,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK;QACvE,OAAO;QACP,UAAU;QACV,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC;QAC3C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,UAAU,IAAI,WAAW;QAC9E,UAAU;QACV,QAAQ,EAAG,OAAO,CAAC,GAAG,CAAC,kBAA2C,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM;KAC9F,CAAA;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,aAAqB,iBAAiB,EAAE;IAC5E,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAC3C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAA;IACzF,MAAM,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAmB;IAChD,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAmB,EAAE,IAAY;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;QAAE,OAAM;IAChI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAClD,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC5G,MAAM,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAA;AACzE,CAAC"}
|
|
@@ -88,6 +88,7 @@ export class AgentService {
|
|
|
88
88
|
version: this.version,
|
|
89
89
|
protocol: CONTROL_PROTOCOL_VERSION,
|
|
90
90
|
hostname: this.config.hostname,
|
|
91
|
+
machine_id: this.config.machineId,
|
|
91
92
|
platform: devicePlatform(this.config.platform),
|
|
92
93
|
started_at: this.startedAt,
|
|
93
94
|
paired: Boolean(this.config.token),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-service.js","sourceRoot":"","sources":["../../../src/runtime/agent-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-service.js","sourceRoot":"","sources":["../../../src/runtime/agent-service.ts"],"names":[],"mappings":"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"}
|
package/locales/en.json
CHANGED
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"noServer": "The server address is missing.",
|
|
57
57
|
"done": "This computer is now bound to {{server}}"
|
|
58
58
|
},
|
|
59
|
+
"auto": { "done": "Switched to {{server}} automatically (device: {{device}})", "deferred": "Tasks are running; this computer switches to {{server}} when they finish" },
|
|
59
60
|
"cli": {
|
|
60
61
|
"title": "CLIs on this computer",
|
|
61
62
|
"runnable": "Runnable",
|
package/locales/zh-CN.json
CHANGED
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "toc-ocra",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
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": {
|
|
7
|
-
"toc-ocra": "
|
|
7
|
+
"toc-ocra": "dist/src/index.js"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"dist/src/",
|