dockito 0.0.0-stage → 0.0.1-beta.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.
Files changed (3) hide show
  1. package/README.md +19 -2
  2. package/dockito.js +50 -0
  3. package/package.json +14 -4
package/README.md CHANGED
@@ -1,3 +1,20 @@
1
- # Temporary Holding Version
1
+ # dockito
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Publish the docs your AI writes as links you can share, from the terminal.
4
+
5
+ ```sh
6
+ npx dockito@beta login
7
+ npx dockito@beta publish plan.md -m "Sent to the client"
8
+ ```
9
+
10
+ | Command | Does |
11
+ |---|---|
12
+ | `login` | Sign in through the browser and choose what this login may do in each workspace |
13
+ | `publish <file...>` | Publish Markdown or HTML; the same file updates the same doc |
14
+ | `ls`, `open`, `get` | List, open and download docs |
15
+ | `history`, `restore`, `save` | A doc's History |
16
+ | `whoami`, `switch`, `logout` | Your login and workspaces |
17
+
18
+ Run `dockito --help` for everything. `--json` gives machine-readable output for agents, and `DOCKITO_TOKEN` uses a token from Account → Tokens instead of a login.
19
+
20
+ This is a beta: commands may still change.
package/dockito.js ADDED
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node
2
+ // @bun
3
+ import{spawn as Un,spawnSync as cn}from"child_process";import{existsSync as je,readFileSync as Fn,statSync as Pn,writeFileSync as Vn}from"fs";import{hostname as Mn}from"os";import{basename as Le,dirname as Jn,resolve as Z}from"path";import{parseArgs as Wn}from"util";class x extends Error{code;status;detail;constructor(e,r,t={}){super(e);this.code=e;this.status=r;this.detail=t}}function te(e){let r=e.url.replace(/\/+$/,"");async function t(o,c,s={}){let l=new URL(`${r}/api${c}`);for(let[b,k]of Object.entries(s.query??{}))if(k!==void 0&&k!==null&&k!=="")l.searchParams.set(b,String(k));let u={},a=s.token===void 0?e.token:s.token;if(a)u.authorization=`Bearer ${a}`;if(e.userAgent)u["user-agent"]=e.userAgent;let p;if(s.json!==void 0)u["content-type"]="application/json",p=JSON.stringify(s.json);else if(s.body)u["content-type"]="application/octet-stream",p=s.body;let h;try{h=await fetch(l,{method:o,headers:u,body:p})}catch{throw new x("offline",0)}return h}async function n(o){let c=await o.json().catch(()=>({}));if(!o.ok){let{error:s,...l}=c;throw new x(typeof s==="string"?s:`http_${o.status}`,o.status,l)}return c}let i=encodeURIComponent;return{url:r,linkOf:(o)=>`${r}/${o}`,startLogin:async(o,c)=>n(await t("POST","/device/code",{json:{client:o,device:c}})),pollLogin:async(o)=>{let c=await t("POST","/device/token",{json:{device_code:o},token:null}),s=await c.json().catch(()=>({}));if(c.ok)return s;if(s.error==="authorization_pending"||s.error==="slow_down")return null;throw new x(s.error??`http_${c.status}`,c.status)},logout:async()=>n(await t("DELETE","/tokens/current")),whoami:async()=>n(await t("GET","/whoami")),projects:async(o)=>(await n(await t("GET",`/workspaces/${i(o)}/projects`))).projects,docs:async(o,c={})=>(await n(await t("GET",`/workspaces/${i(o)}/docs`,{query:c}))).docs,recent:async(o)=>(await n(await t("GET",`/workspaces/${i(o)}/docs/recent`))).docs,doc:async(o)=>n(await t("GET",`/docs/by-code/${i(o)}`)),content:async(o,c)=>{let s=await t("GET",`/docs/${i(o)}/content`,{query:{v:c}});if(!s.ok)await n(s);return{bytes:new Uint8Array(await s.arrayBuffer()),entry:Number(s.headers.get("x-doc-version"))}},create:async(o,c,s,l={})=>n(await t("POST",`/workspaces/${i(o)}/docs`,{query:{name:c,...l,source:e.source},body:s})),update:async(o,c,s,l={})=>n(await t("POST",`/docs/${i(o)}/versions`,{query:{name:c,note:l.note,commit:l.commit,base:l.base,source:e.source},body:s})),restore:async(o,c,s)=>n(await t("POST",`/docs/${i(o)}/history/${c}/restore`,{query:{base:s}})),save:async(o,c,s)=>n(await t("PUT",`/docs/${i(o)}/history/${c}/saved`,{json:{note:s}})),rename:async(o,c)=>n(await t("PATCH",`/docs/${i(o)}`,{json:{title:c}}))}}import{existsSync as dt,mkdirSync as fn,readFileSync as pn,writeFileSync as dn}from"node:fs";import{homedir as gn}from"node:os";import{join as re}from"node:path";var mn="https://dockito-app.dockito.workers.dev";function De(){if(process.env.DOCKITO_CONFIG_DIR)return process.env.DOCKITO_CONFIG_DIR;if(process.platform==="win32"&&process.env.APPDATA)return re(process.env.APPDATA,"dockito");return re(process.env.XDG_CONFIG_HOME||re(gn(),".config"),"dockito")}var Re=()=>re(De(),"state.json");function Be(){try{return JSON.parse(pn(Re(),"utf8"))}catch{return{}}}function U(e){return Be().sites?.[e]??{}}function oe(e,r){let t=Be();t.sites??={};let n=t.sites[e]??={};r(n),fn(De(),{recursive:!0,mode:448}),dn(Re(),JSON.stringify(t,null,2)+`
4
+ `)}var Ue=()=>(process.env.DOCKITO_URL||mn).replace(/\/+$/,""),Fe=(e)=>new URL(e).host;import{spawnSync as kn}from"node:child_process";import{chmodSync as wn,existsSync as ke,mkdirSync as yn,readFileSync as bn,rmSync as Ve,writeFileSync as Tn}from"node:fs";import{dirname as vn,join as On}from"node:path";import{homedir as hn}from"node:os";import{join as he}from"node:path";function Pe(){if(process.env.DOCKITO_CONFIG_DIR)return process.env.DOCKITO_CONFIG_DIR;if(process.platform==="win32"&&process.env.APPDATA)return he(process.env.APPDATA,"dockito");return he(process.env.XDG_CONFIG_HOME||he(hn(),".config"),"dockito")}var V="dockito";function M(e,r,t){try{let n=kn(e,r,{input:t,encoding:"utf8",stdio:["pipe","pipe","pipe"]});return n.error?null:n}catch{return null}}var z=(e)=>On(Pe(),"tokens",`${e.replace(/[^a-z0-9.-]/gi,"_")}`);function $n(e,r){if(process.platform==="darwin"){let t=M("security",["-i"],`add-generic-password -U -s ${V} -a ${e} -l Dockito -w ${r}
5
+ `);return!!t&&t.status===0&&!/error/i.test(t.stderr??"")}if(process.platform==="linux"){let t=M("secret-tool",["store","--label=Dockito","service",V,"account",e],r);return!!t&&t.status===0}return!1}function An(e){let r=process.platform==="darwin"?M("security",["find-generic-password","-s",V,"-a",e,"-w"]):process.platform==="linux"?M("secret-tool",["lookup","service",V,"account",e]):null;return(r?.status===0?r.stdout.trim():"")||null}function jn(e){if(process.platform==="darwin")M("security",["delete-generic-password","-s",V,"-a",e]);else if(process.platform==="linux")M("secret-tool",["clear","service",V,"account",e])}function Me(e,r){if($n(e,r)){if(ke(z(e)))Ve(z(e));return"keychain"}let t=z(e);return yn(vn(t),{recursive:!0,mode:448}),Tn(t,r,{mode:384}),wn(t,384),"file"}function ie(e){if(process.env.DOCKITO_TOKEN)return process.env.DOCKITO_TOKEN.trim();let r=An(e);if(r)return r;let t=z(e);return ke(t)?bn(t,"utf8").trim()||null:null}function Je(e){jn(e);let r=z(e);if(ke(r))Ve(r)}import{existsSync as Dn,readFileSync as en,writeFileSync as nn}from"node:fs";import{dirname as Ce,join as tn,relative as Rn,resolve as rn,sep as Bn}from"node:path";function q(e,r=!1){let t=e.length,n=0,i="",o=0,c=16,s=0,l=0,u=0,a=0,p=0;function h(d,v){let m=0,g=0;while(m<d||!v){let f=e.charCodeAt(n);if(f>=48&&f<=57)g=g*16+f-48;else if(f>=65&&f<=70)g=g*16+f-65+10;else if(f>=97&&f<=102)g=g*16+f-97+10;else break;n++,m++}if(m<d)g=-1;return g}function b(d){n=d,i="",o=0,c=16,p=0}function k(){let d=n;if(e.charCodeAt(n)===48)n++;else{n++;while(n<e.length&&J(e.charCodeAt(n)))n++}if(n<e.length&&e.charCodeAt(n)===46)if(n++,n<e.length&&J(e.charCodeAt(n))){n++;while(n<e.length&&J(e.charCodeAt(n)))n++}else return p=3,e.substring(d,n);let v=n;if(n<e.length&&(e.charCodeAt(n)===69||e.charCodeAt(n)===101)){if(n++,n<e.length&&e.charCodeAt(n)===43||e.charCodeAt(n)===45)n++;if(n<e.length&&J(e.charCodeAt(n))){n++;while(n<e.length&&J(e.charCodeAt(n)))n++;v=n}else p=3}return e.substring(d,v)}function S(){let d="",v=n;while(!0){if(n>=t){d+=e.substring(v,n),p=2;break}let m=e.charCodeAt(n);if(m===34){d+=e.substring(v,n),n++;break}if(m===92){if(d+=e.substring(v,n),n++,n>=t){p=2;break}switch(e.charCodeAt(n++)){case 34:d+='"';break;case 92:d+="\\";break;case 47:d+="/";break;case 98:d+="\b";break;case 102:d+="\f";break;case 110:d+=`
6
+ `;break;case 114:d+="\r";break;case 116:d+="\t";break;case 117:let f=h(4,!0);if(f>=0)d+=String.fromCharCode(f);else p=4;break;default:p=5}v=n;continue}if(m>=0&&m<=31)if(H(m)){d+=e.substring(v,n),p=2;break}else p=6;n++}return d}function A(){if(i="",p=0,o=n,l=s,a=u,n>=t)return o=t,c=17;let d=e.charCodeAt(n);if(we(d)){do n++,i+=String.fromCharCode(d),d=e.charCodeAt(n);while(we(d));return c=15}if(H(d)){if(n++,i+=String.fromCharCode(d),d===13&&e.charCodeAt(n)===10)n++,i+=`
7
+ `;return s++,u=n,c=14}switch(d){case 123:return n++,c=1;case 125:return n++,c=2;case 91:return n++,c=3;case 93:return n++,c=4;case 58:return n++,c=6;case 44:return n++,c=5;case 34:return n++,i=S(),c=10;case 47:let v=n-1;if(e.charCodeAt(n+1)===47){n+=2;while(n<t){if(H(e.charCodeAt(n)))break;n++}return i=e.substring(v,n),c=12}if(e.charCodeAt(n+1)===42){n+=2;let m=t-1,g=!1;while(n<m){let f=e.charCodeAt(n);if(f===42&&e.charCodeAt(n+1)===47){n+=2,g=!0;break}if(n++,H(f)){if(f===13&&e.charCodeAt(n)===10)n++;s++,u=n}}if(!g)n++,p=1;return i=e.substring(v,n),c=13}return i+=String.fromCharCode(d),n++,c=16;case 45:if(i+=String.fromCharCode(d),n++,n===t||!J(e.charCodeAt(n)))return c=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return i+=k(),c=11;default:while(n<t&&N(d))n++,d=e.charCodeAt(n);if(o!==n){switch(i=e.substring(o,n),i){case"true":return c=8;case"false":return c=9;case"null":return c=7}return c=16}return i+=String.fromCharCode(d),n++,c=16}}function N(d){if(we(d)||H(d))return!1;switch(d){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function _(){let d;do d=A();while(d>=12&&d<=15);return d}return{setPosition:b,getPosition:()=>n,scan:r?_:A,getToken:()=>c,getTokenValue:()=>i,getTokenOffset:()=>o,getTokenLength:()=>n-o,getTokenStartLine:()=>l,getTokenStartCharacter:()=>o-a,getTokenError:()=>p}}function we(e){return e===32||e===9}function H(e){return e===10||e===13}function J(e){return e>=48&&e<=57}var We;(function(e){e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.space=32]="space",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.asterisk=42]="asterisk",e[e.backslash=92]="backslash",e[e.closeBrace=125]="closeBrace",e[e.closeBracket=93]="closeBracket",e[e.colon=58]="colon",e[e.comma=44]="comma",e[e.dot=46]="dot",e[e.doubleQuote=34]="doubleQuote",e[e.minus=45]="minus",e[e.openBrace=123]="openBrace",e[e.openBracket=91]="openBracket",e[e.plus=43]="plus",e[e.slash=47]="slash",e[e.formFeed=12]="formFeed",e[e.tab=9]="tab"})(We||(We={}));var E=Array(20).fill(0).map((e,r)=>" ".repeat(r));var ye={" ":{"\n":Array(200).fill(0).map((e,r)=>`
8
+ `+" ".repeat(r)),"\r":Array(200).fill(0).map((e,r)=>"\r"+" ".repeat(r)),"\r\n":Array(200).fill(0).map((e,r)=>`\r
9
+ `+" ".repeat(r))},"\t":{"\n":Array(200).fill(0).map((e,r)=>`
10
+ `+"\t".repeat(r)),"\r":Array(200).fill(0).map((e,r)=>"\r"+"\t".repeat(r)),"\r\n":Array(200).fill(0).map((e,r)=>`\r
11
+ `+"\t".repeat(r))}},Ge=[`
12
+ `,"\r",`\r
13
+ `];function be(e,r,t){let n,i,o,c,s;if(r){c=r.offset,s=c+r.length,o=c;while(o>0&&!Y(e,o-1))o--;let m=s;while(m<e.length&&!Y(e,m))m++;i=e.substring(o,m),n=Nn(i,t)}else i=e,n=0,o=0,c=0,s=e.length;let l=Sn(t,e),u=Ge.includes(l),a=0,p=0,h;if(t.insertSpaces)h=E[t.tabSize||4]??W(E[1],t.tabSize||4);else h="\t";let b=h==="\t"?"\t":" ",k=q(i,!1),S=!1;function A(){if(a>1)return W(l,a)+W(h,n+p);let m=h.length*(n+p);if(!u||m>ye[b][l].length)return l+W(h,n+p);if(m<=0)return l;return ye[b][l][m]}function N(){let m=k.scan();a=0;while(m===15||m===14){if(m===14&&t.keepLines)a+=1;else if(m===14)a=1;m=k.scan()}return S=m===16||k.getTokenError()!==0,m}let _=[];function d(m,g,f){if(!S&&(!r||g<s&&f>c)&&e.substring(g,f)!==m)_.push({offset:g,length:f-g,content:m})}let v=N();if(t.keepLines&&a>0)d(W(l,a),0,0);if(v!==17){let m=k.getTokenOffset()+o,g=h.length*n<20&&t.insertSpaces?E[h.length*n]:W(h,n);d(g,o,m)}while(v!==17){let m=k.getTokenOffset()+k.getTokenLength()+o,g=N(),f="",R=!1;while(a===0&&(g===12||g===13)){let ge=k.getTokenOffset()+o;d(E[1],m,ge),m=k.getTokenOffset()+k.getTokenLength()+o,R=g===12,f=R?A():"",g=N()}if(g===2){if(v!==1)p--;if(t.keepLines&&a>0||!t.keepLines&&v!==1)f=A();else if(t.keepLines)f=E[1]}else if(g===4){if(v!==3)p--;if(t.keepLines&&a>0||!t.keepLines&&v!==3)f=A();else if(t.keepLines)f=E[1]}else{switch(v){case 3:case 1:if(p++,t.keepLines&&a>0||!t.keepLines)f=A();else f=E[1];break;case 5:if(t.keepLines&&a>0||!t.keepLines)f=A();else f=E[1];break;case 12:f=A();break;case 13:if(a>0)f=A();else if(!R)f=E[1];break;case 6:if(t.keepLines&&a>0)f=A();else if(!R)f=E[1];break;case 10:if(t.keepLines&&a>0)f=A();else if(g===6&&!R)f="";break;case 7:case 8:case 9:case 11:case 2:case 4:if(t.keepLines&&a>0)f=A();else if((g===12||g===13)&&!R)f=E[1];else if(g!==5&&g!==17)S=!0;break;case 16:S=!0;break}if(a>0&&(g===12||g===13))f=A()}if(g===17)if(t.keepLines&&a>0)f=A();else f=t.insertFinalNewline?l:"";let de=k.getTokenOffset()+o;d(f,m,de),v=g}return _}function W(e,r){let t="";for(let n=0;n<r;n++)t+=e;return t}function Nn(e,r){let t=0,n=0,i=r.tabSize||4;while(t<e.length){let o=e.charAt(t);if(o===E[1])n++;else if(o==="\t")n+=i;else break;t++}return Math.floor(n/i)}function Sn(e,r){for(let t=0;t<r.length;t++){let n=r.charAt(t);if(n==="\r"){if(t+1<r.length&&r.charAt(t+1)===`
14
+ `)return`\r
15
+ `;return"\r"}else if(n===`
16
+ `)return`
17
+ `}return e&&e.eol||`
18
+ `}function Y(e,r){return`\r
19
+ `.indexOf(e.charAt(r))!==-1}var Q;(function(e){e.DEFAULT={allowTrailingComma:!1}})(Q||(Q={}));function ze(e,r=[],t=Q.DEFAULT){let n=null,i=[],o=[];function c(l){if(Array.isArray(i))i.push(l);else if(n!==null)i[n]=l}return ve(e,{onObjectBegin:()=>{let l={};c(l),o.push(i),i=l,n=null},onObjectProperty:(l)=>{n=l},onObjectEnd:()=>{i=o.pop()},onArrayBegin:()=>{let l=[];c(l),o.push(i),i=l,n=null},onArrayEnd:()=>{i=o.pop()},onLiteralValue:c,onError:(l,u,a)=>{r.push({error:l,offset:u,length:a})}},t),i[0]}function Te(e,r=[],t=Q.DEFAULT){let n={type:"array",offset:-1,length:-1,children:[],parent:void 0};function i(l){if(n.type==="property")n.length=l-n.offset,n=n.parent}function o(l){return n.children.push(l),l}ve(e,{onObjectBegin:(l)=>{n=o({type:"object",offset:l,length:-1,parent:n,children:[]})},onObjectProperty:(l,u,a)=>{n=o({type:"property",offset:u,length:-1,parent:n,children:[]}),n.children.push({type:"string",value:l,offset:u,length:a,parent:n})},onObjectEnd:(l,u)=>{i(l+u),n.length=l+u-n.offset,n=n.parent,i(l+u)},onArrayBegin:(l,u)=>{n=o({type:"array",offset:l,length:-1,parent:n,children:[]})},onArrayEnd:(l,u)=>{n.length=l+u-n.offset,n=n.parent,i(l+u)},onLiteralValue:(l,u,a)=>{o({type:_n(l),offset:u,length:a,parent:n,value:l}),i(u+a)},onSeparator:(l,u,a)=>{if(n.type==="property"){if(l===":")n.colonOffset=u;else if(l===",")i(u)}},onError:(l,u,a)=>{r.push({error:l,offset:u,length:a})}},t);let s=n.children[0];if(s)delete s.parent;return s}function se(e,r){if(!e)return;let t=e;for(let n of r)if(typeof n==="string"){if(t.type!=="object"||!Array.isArray(t.children))return;let i=!1;for(let o of t.children)if(Array.isArray(o.children)&&o.children[0].value===n&&o.children.length===2){t=o.children[1],i=!0;break}if(!i)return}else{let i=n;if(t.type!=="array"||i<0||!Array.isArray(t.children)||i>=t.children.length)return;t=t.children[i]}return t}function ve(e,r,t=Q.DEFAULT){let n=q(e,!1),i=[],o=0;function c(w){return w?()=>o===0&&w(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function s(w){return w?(j)=>o===0&&w(j,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter()):()=>!0}function l(w){return w?(j)=>o===0&&w(j,n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>i.slice()):()=>!0}function u(w){return w?()=>{if(o>0)o++;else if(w(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter(),()=>i.slice())===!1)o=1}:()=>!0}function a(w){return w?()=>{if(o>0)o--;if(o===0)w(n.getTokenOffset(),n.getTokenLength(),n.getTokenStartLine(),n.getTokenStartCharacter())}:()=>!0}let p=u(r.onObjectBegin),h=l(r.onObjectProperty),b=a(r.onObjectEnd),k=u(r.onArrayBegin),S=a(r.onArrayEnd),A=l(r.onLiteralValue),N=s(r.onSeparator),_=c(r.onComment),d=s(r.onError),v=t&&t.disallowComments,m=t&&t.allowTrailingComma;function g(){while(!0){let w=n.scan();switch(n.getTokenError()){case 4:f(14);break;case 5:f(15);break;case 3:f(13);break;case 1:if(!v)f(11);break;case 2:f(12);break;case 6:f(16);break}switch(w){case 12:case 13:if(v)f(10);else _();break;case 16:f(1);break;case 15:case 14:break;default:return w}}}function f(w,j=[],xe=[]){if(d(w),j.length+xe.length>0){let ne=n.getToken();while(ne!==17){if(j.indexOf(ne)!==-1){g();break}else if(xe.indexOf(ne)!==-1)break;ne=g()}}}function R(w){let j=n.getTokenValue();if(w)A(j);else h(j),i.push(j);return g(),!0}function de(){switch(n.getToken()){case 11:let w=n.getTokenValue(),j=Number(w);if(isNaN(j))f(2),j=0;A(j);break;case 7:A(null);break;case 8:A(!0);break;case 9:A(!1);break;default:return!1}return g(),!0}function ge(){if(n.getToken()!==10)return f(3,[],[2,5]),!1;if(R(!1),n.getToken()===6){if(N(":"),g(),!me())f(4,[],[2,5])}else f(5,[],[2,5]);return i.pop(),!0}function an(){p(),g();let w=!1;while(n.getToken()!==2&&n.getToken()!==17){if(n.getToken()===5){if(!w)f(4,[],[]);if(N(","),g(),n.getToken()===2&&m)break}else if(w)f(6,[],[]);if(!ge())f(4,[],[2,5]);w=!0}if(b(),n.getToken()!==2)f(7,[2],[]);else g();return!0}function un(){k(),g();let w=!0,j=!1;while(n.getToken()!==4&&n.getToken()!==17){if(n.getToken()===5){if(!j)f(4,[],[]);if(N(","),g(),n.getToken()===4&&m)break}else if(j)f(6,[],[]);if(w)i.push(0),w=!1;else i[i.length-1]++;if(!me())f(4,[],[4,5]);j=!0}if(S(),!w)i.pop();if(n.getToken()!==4)f(8,[4],[]);else g();return!0}function me(){switch(n.getToken()){case 3:return un();case 1:return an();case 10:return R(!0);default:return de()}}if(g(),n.getToken()===17){if(t.allowEmptyContent)return!0;return f(4,[],[]),!1}if(!me())return f(4,[],[]),!1;if(n.getToken()!==17)f(9,[],[]);return!0}function _n(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"object":{if(!e)return"null";else if(Array.isArray(e))return"array";return"object"}default:return"null"}}function He(e,r,t,n){let i=r.slice(),c=Te(e,[]),s=void 0,l=void 0;while(i.length>0)if(l=i.pop(),s=se(c,i),s===void 0&&t!==void 0)if(typeof l==="string")t={[l]:t};else t=[t];else break;if(!s){if(t===void 0)throw Error("Can not delete in empty document");return P(e,{offset:c?c.offset:0,length:c?c.length:0,content:JSON.stringify(t)},n)}else if(s.type==="object"&&typeof l==="string"&&Array.isArray(s.children)){let u=se(s,[l]);if(u!==void 0)if(t===void 0){if(!u.parent)throw Error("Malformed AST");let a=s.children.indexOf(u.parent),p,h=u.parent.offset+u.parent.length;if(a>0){let b=s.children[a-1];p=b.offset+b.length}else if(p=s.offset+1,s.children.length>1)h=s.children[1].offset;return P(e,{offset:p,length:h-p,content:""},n)}else return P(e,{offset:u.offset,length:u.length,content:JSON.stringify(t)},n);else{if(t===void 0)return[];let a=`${JSON.stringify(l)}: ${JSON.stringify(t)}`,p=n.getInsertionIndex?n.getInsertionIndex(s.children.map((b)=>b.children[0].value)):s.children.length,h;if(p>0){let b=s.children[p-1];h={offset:b.offset+b.length,length:0,content:","+a}}else if(s.children.length===0)h={offset:s.offset+1,length:0,content:a};else h={offset:s.offset+1,length:0,content:a+","};return P(e,h,n)}}else if(s.type==="array"&&typeof l==="number"&&Array.isArray(s.children)){let u=l;if(u===-1){let a=`${JSON.stringify(t)}`,p;if(s.children.length===0)p={offset:s.offset+1,length:0,content:a};else{let h=s.children[s.children.length-1];p={offset:h.offset+h.length,length:0,content:","+a}}return P(e,p,n)}else if(t===void 0&&s.children.length>=0){let a=l,p=s.children[a],h;if(s.children.length===1)h={offset:s.offset+1,length:s.length-2,content:""};else if(s.children.length-1===a){let b=s.children[a-1],k=b.offset+b.length,S=s.offset+s.length;h={offset:k,length:S-2-k,content:""}}else h={offset:p.offset,length:s.children[a+1].offset-p.offset,content:""};return P(e,h,n)}else if(t!==void 0){let a,p=`${JSON.stringify(t)}`;if(!n.isArrayInsertion&&s.children.length>l){let h=s.children[l];a={offset:h.offset,length:h.length,content:p}}else if(s.children.length===0||l===0)a={offset:s.offset+1,length:0,content:s.children.length===0?p:p+","};else{let h=l>s.children.length?s.children.length:l,b=s.children[h-1];a={offset:b.offset+b.length,length:0,content:","+p}}return P(e,a,n)}else throw Error(`Can not ${t===void 0?"remove":n.isArrayInsertion?"insert":"modify"} Array index ${u} as length is not sufficient`)}else throw Error(`Can not add ${typeof l!=="number"?"index":"property"} to parent of type ${s.type}`)}function P(e,r,t){if(!t.formattingOptions)return[r];let n=ce(e,r),i=r.offset,o=r.offset+r.content.length;if(r.length===0||r.content.length===0){while(i>0&&!Y(n,i-1))i--;while(o<n.length&&!Y(n,o))o++}let c=be(n,{offset:i,length:o-i},{...t.formattingOptions,keepLines:!1});for(let l=c.length-1;l>=0;l--){let u=c[l];n=ce(n,u),i=Math.min(i,u.offset),o=Math.max(o,u.offset+u.length),o+=u.content.length-u.length}let s=e.length-(n.length-o)-i;return[{offset:i,length:s,content:n.substring(i,o)}]}function ce(e,r){return e.substring(0,r.offset)+r.content+e.substring(r.offset+r.length)}var qe;(function(e){e[e.None=0]="None",e[e.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=2]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",e[e.InvalidUnicode=4]="InvalidUnicode",e[e.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",e[e.InvalidCharacter=6]="InvalidCharacter"})(qe||(qe={}));var Ye;(function(e){e[e.OpenBraceToken=1]="OpenBraceToken",e[e.CloseBraceToken=2]="CloseBraceToken",e[e.OpenBracketToken=3]="OpenBracketToken",e[e.CloseBracketToken=4]="CloseBracketToken",e[e.CommaToken=5]="CommaToken",e[e.ColonToken=6]="ColonToken",e[e.NullKeyword=7]="NullKeyword",e[e.TrueKeyword=8]="TrueKeyword",e[e.FalseKeyword=9]="FalseKeyword",e[e.StringLiteral=10]="StringLiteral",e[e.NumericLiteral=11]="NumericLiteral",e[e.LineCommentTrivia=12]="LineCommentTrivia",e[e.BlockCommentTrivia=13]="BlockCommentTrivia",e[e.LineBreakTrivia=14]="LineBreakTrivia",e[e.Trivia=15]="Trivia",e[e.Unknown=16]="Unknown",e[e.EOF=17]="EOF"})(Ye||(Ye={}));var Xe=ze;var Qe;(function(e){e[e.InvalidSymbol=1]="InvalidSymbol",e[e.InvalidNumberFormat=2]="InvalidNumberFormat",e[e.PropertyNameExpected=3]="PropertyNameExpected",e[e.ValueExpected=4]="ValueExpected",e[e.ColonExpected=5]="ColonExpected",e[e.CommaExpected=6]="CommaExpected",e[e.CloseBraceExpected=7]="CloseBraceExpected",e[e.CloseBracketExpected=8]="CloseBracketExpected",e[e.EndOfFileExpected=9]="EndOfFileExpected",e[e.InvalidCommentToken=10]="InvalidCommentToken",e[e.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=12]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",e[e.InvalidUnicode=14]="InvalidUnicode",e[e.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",e[e.InvalidCharacter=16]="InvalidCharacter"})(Qe||(Qe={}));function Ze(e,r,t,n){return He(e,r,t,n)}function Ke(e,r){let t=r.slice(0).sort((i,o)=>{let c=i.offset-o.offset;if(c===0)return i.length-o.length;return c}),n=e.length;for(let i=t.length-1;i>=0;i--){let o=t[i];if(o.offset+o.length<=n)e=ce(e,o);else throw Error("Overlapping edit");n=o.offset}return e}var X="dockito.jsonc";function F(e=process.cwd()){for(let r=rn(e);;r=Ce(r)){let t=tn(r,X);if(Dn(t)){let n=[],i=Xe(en(t,"utf8"),n,{allowTrailingComma:!0});if(n.length||!i||typeof i!=="object")throw Error(`${t} isn't valid JSONC.`);return{file:t,dir:r,config:i}}if(Ce(r)===r)return null}}var le=(e,r)=>Rn(e.dir,rn(r)).split(Bn).join("/");function on(e,r,t){let n=en(e.file,"utf8"),i=Ze(n,["docs",le(e,r)],t,{formattingOptions:{insertSpaces:!0,tabSize:2}});nn(e.file,Ke(n,i))}function sn(e,r){let t=["{"," // Where `dockito publish` puts new docs. No secrets in this file.",` "workspace": ${JSON.stringify(r.workspace)},`,r.project?` "project": ${JSON.stringify(r.project)},`:' // "project": "my-project",',r.folder?` "folder": ${JSON.stringify(r.folder)},`:' // "folder": "Folder/Subfolder",'," // Local files and the docs they publish to. Filled in by `dockito publish`.",' "docs": {}',"}",""],n=tn(e,X);return nn(n,t.join(`
20
+ `)),n}var Ne="0.0.1-beta.1",Gn=!process.env.NO_COLOR&&process.stdout.isTTY,ee=(e)=>(r)=>Gn?`\x1B[${e}m${r}\x1B[0m`:r,y=ee("2"),K=ee("1"),I=ee("32"),ae=ee("31"),Oe=ee("33"),O=(e="")=>process.stdout.write(e+`
21
+ `),D=(e="")=>process.stderr.write(e+`
22
+ `);class Se extends Error{}var T=(e)=>{throw new Se(e)},ue={view:"View",publish:"Publish",everything:"Everything"};function $e(e){let r=Math.round((Date.now()-new Date(e).getTime())/1000);if(r<60)return"just now";let t=Math.round(r/60);if(t<60)return`${t} min ago`;let n=Math.round(t/60);if(n<24)return`${n} h ago`;let i=Math.round(n/24);if(i<30)return i===1?"yesterday":`${i} days ago`;return new Date(e).toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"})}function pe(e){let r=(n)=>n.replace(/\x1b\[[0-9;]*m/g,""),t=e[0]?.map((n,i)=>Math.max(...e.map((o)=>r(o[i]??"").length)))??[];for(let n of e)O(n.map((i,o)=>o===n.length-1?i:i+" ".repeat(t[o]-r(i).length)).join(" ").trimEnd())}function zn(e,r){switch(e.code){case"offline":return`Couldn't reach Dockito at ${r}.`;case"invalid_token":return"Your login has ended or was signed out. Run `dockito login`.";case"token_level":return`This needs ${ue[e.detail.needs]??e.detail.needs} access; this login has ${ue[e.detail.has]??e.detail.has}. Run \`dockito login --update\`.`;case"not_for_tokens":return"That can only be done in the browser.";case"not_found":return"Not found, or this login has no access to it. `dockito whoami` lists what it can reach.";case"deleted":return"That doc was deleted.";case"conflict":return"Someone published a newer version since yours. Get it with `dockito get`, or publish anyway with --force.";case"rate_limited":return"Too many requests. Try again in a minute.";case"too_large":return`The file is too large (limit ${Math.round(Number(e.detail.limit??0)/1048576)} MB).`;case"out_of_space":return"The workspace is out of storage.";case"unsupported":return"Dockito takes .md and .html files.";case"other_kind":return"That doc is a different kind of file (Markdown and HTML can't replace each other).";case"empty":return"The file is empty.";case"not_text":return"The file isn't text.";case"folder_gone":return"That project or folder no longer exists.";default:return`Dockito said: ${e.code}`}}var L=Ue(),C=Fe(L),Ee=`dockito-cli/${Ne} (${process.platform})`;function B(){let e=ie(C);if(!e)T("Not logged in. Run `dockito login`.");return te({url:L,token:e,source:"cli",userAgent:Ee})}function ln(e){let[r,t]=process.platform==="darwin"?["open",[e]]:process.platform==="win32"?["cmd",["/c","start","",e]]:["xdg-open",[e]];try{let n=Un(r,t,{stdio:"ignore",detached:!0});return n.on("error",()=>{}),n.unref(),!0}catch{return!1}}var Hn=()=>!process.env.SSH_CONNECTION&&!process.env.CI&&(process.platform!=="linux"||!!process.env.DISPLAY||!!process.env.WAYLAND_DISPLAY),qn=(e)=>new Promise((r)=>setTimeout(r,e)),Yn=()=>Mn().replace(/\.local$/,"").slice(0,60)||"Unknown device";function _e(e,r,t){let n=r??t?.config.workspace??U(L).workspace;if(n){let o=e.workspaces.find((c)=>c.slug===n);if(!o)T(`This login can't reach workspace "${n}". \`dockito whoami\` lists the ones it can.`);return o}if(e.workspaces.length===1)return e.workspaces[0];let i=e.workspaces.find((o)=>o.kind==="personal"&&o.role==="owner");if(i)return i;return T(`Pick a workspace with --workspace, or set one with \`dockito switch\`: ${e.workspaces.map((o)=>o.slug).join(", ")}`)}async function Ie(e,r,t){if(!t)return{project:null,folder:null,label:""};let[n,...i]=t.split("/").filter(Boolean),o=await e.projects(r),c=o.find((u)=>u.slug===n)??o.find((u)=>u.name.toLowerCase()===n.toLowerCase());if(!c)return T(`No project "${n}". Projects: ${o.map((u)=>u.slug).join(", ")||"none"}`);let s=null,l=null;for(let u of i){let a=c.folders.find((p)=>p.parentId===s&&p.name.toLowerCase()===u.toLowerCase());if(!a)return T(`No folder "${u}" in ${c.slug}${s?" at that level":""}.`);l=s=a.id}return{project:c.id,folder:l,label:[c.slug,...i].join("/")}}var Qn=/^[a-z0-9]{12}$/;function G(e,r){let n=(/^https?:\/\//.test(e)?new URL(e).pathname.split("/").filter(Boolean).pop()??"":e).replace(/\.(md|html)$/,"");if(Qn.test(n)&&/\d/.test(n))return n;if(je(e)){let i=(r&&r.config.docs?.[le(r,e)])??U(L).files?.[Z(e)];if(i)return i;T(`${e} hasn't been published yet. Run \`dockito publish ${e}\`.`)}return T(`"${e}" isn't a doc link, code or published file.`)}function Ae(e,r,t){if(e&&Z(r).startsWith(e.dir))on(e,r,t);else oe(L,(n)=>(n.files??={})[Z(r)]=t)}var fe=(e,r)=>oe(L,(t)=>(t.entries??={})[e]=r);function Xn(e){let r=Jn(Z(e)),t=cn("git",["rev-parse","HEAD"],{cwd:r,encoding:"utf8"});if(t.error||t.status!==0)return null;let n=cn("git",["status","--porcelain","--",Le(e)],{cwd:r,encoding:"utf8"});if(n.status!==0||n.stdout.trim())return null;return t.stdout.trim()}async function Zn(e){let r=ie(C);if(e.update&&!r)T("Not logged in. Run `dockito login` first.");if(process.env.DOCKITO_TOKEN)D(Oe("DOCKITO_TOKEN is set, so commands will keep using it instead of this login."));let t=te({url:L,token:e.update?r:null,userAgent:Ee}),n=await t.startLogin("Dockito CLI",Yn()),i=!e["no-browser"]&&Hn()&&ln(n.verification_uri_complete);O(i?`Opening ${n.verification_uri_complete}`:`Open ${K(n.verification_uri)}`),O(`Code: ${K(n.user_code)}`),D(y("Waiting for approval\u2026"));let o=n.interval*1000,c=Date.now()+n.expires_in*1000;while(Date.now()<c){await qn(o);try{let s=await t.pollLogin(n.device_code);if(!s)continue;let l=Me(C,s.token);O(`${I("\u2713")} Logged in as ${s.user.name}${s.user.username?y(` (${s.user.username})`):""}`);for(let u of s.workspaces)O(` ${u.name} ${y(`${u.slug} \xB7 ${ue[u.level]}`)}`);if(l==="file")D(Oe("No keychain found, so the token is in a file only you can read, in ~/.config/dockito."));return}catch(s){if(s instanceof x&&s.code==="access_denied")T("Denied in the browser.");if(s instanceof x&&s.code==="expired_token")T("The code expired. Run `dockito login` again.");if(s instanceof x&&s.code==="offline"){o=Math.min(o*2,30000);continue}throw s}}T("The code expired. Run `dockito login` again.")}async function Kn(){let e=ie(C);if(!e)return O("Not logged in.");if(process.env.DOCKITO_TOKEN)T("DOCKITO_TOKEN is set; unset it or revoke that token in Account \u2192 Tokens.");try{await te({url:L,token:e,userAgent:Ee}).logout()}catch(r){if(!(r instanceof x)||r.code!=="invalid_token"&&r.code!=="not_found")throw r}Je(C),O(`${I("\u2713")} Logged out`)}async function Cn(e){let r=await B().whoami();if(e.json)return O(JSON.stringify(r,null,2));let t=U(L).workspace;if(O(`${r.user.name} ${y(`${r.user.username} \xB7 ${r.user.email}`)}`),r.token)O(y(`${r.token.name} \xB7 ${r.token.source==="cli"?"ends after 90 days without use":`expires ${new Date(r.token.expiresAt).toLocaleDateString()}`}`));if(O(),pe(r.workspaces.map((n)=>[n.slug===t?I("\u25CF"):" ",n.slug,n.name,y(n.level?ue[n.level]:n.role)])),L!=="https://dockito-app.dockito.workers.dev")D(y(`
23
+ ${L}`))}async function et(e){let r=await B().whoami();if(!e){let n=U(L).workspace;return pe(r.workspaces.map((i)=>[i.slug===n?I("\u25CF"):" ",i.slug,i.name]))}let t=r.workspaces.find((n)=>n.slug===e);if(!t)T(`This login can't reach "${e}": ${r.workspaces.map((n)=>n.slug).join(", ")}`);oe(L,(n)=>n.workspace=t.slug),O(`${I("\u2713")} Commands now use ${t.name} ${y(t.slug)}`)}async function nt(e){if(je(X))T(`${X} is already here.`);let r=B(),t=await r.whoami(),n=_e(t,e.workspace,null),[i,...o]=(e.to??"").split("/").filter(Boolean);if(i)await Ie(r,n.id,e.to);let c=sn(process.cwd(),{workspace:n.slug,project:i,folder:o.join("/")||void 0});O(`${I("\u2713")} Wrote ${Le(c)} ${y(`\u2192 ${[n.slug,i,...o].filter(Boolean).join("/")}`)}`)}async function tt(e,r){if(!e.length)T("Name a file: `dockito publish notes.md`");if(r.doc&&e.length>1)T("--doc takes one file.");for(let c of e)if(!je(c)||!Pn(c).isFile())T(`${c} isn't a file.`);let t=B(),n=F(),i=null,o=[];for(let c of e){let s=new Uint8Array(Fn(c)),l=Le(c),u=r.new?null:r.doc?G(r.doc,n):(n&&n.config.docs?.[le(n,c)])??U(L).files?.[Z(c)]??null,a=Xn(c);if(u){let S;try{S=await t.doc(u)}catch(_){if(_ instanceof x&&(_.code==="deleted"||_.code==="not_found"))T(`${c} was published to ${t.linkOf(u)}, which ${_.code==="deleted"?"was deleted":"this login can't reach"}. Publish it as a new doc with --new.`);throw _}let A=r.force?null:U(L).entries?.[S.doc.id]??null,N=await t.update(S.doc.id,l,s,{note:r.message,commit:a,base:A});if(fe(N.id,N.version),r.doc)Ae(n,c,N.slug);if(o.push({file:c,...N,link:t.linkOf(N.slug)}),!r.json)O(N.unchanged?`${y("=")} ${c} ${y("unchanged")} ${t.linkOf(N.slug)}`:`${I("\u2713")} ${c} \u2192 ${t.linkOf(N.slug)}${r.message?y(` \xB7 saved: ${r.message}`):""}`);continue}i??=await t.whoami();let p=_e(i,r.workspace,n),h=r.to??(n&&p.slug===n.config.workspace&&n.config.project?[n.config.project,n.config.folder].filter(Boolean).join("/"):void 0),b=await Ie(t,p.id,h),k=await t.create(p.id,l,s,{project:b.project,folder:b.folder});if(r.message)await t.save(k.id,k.version,r.message);if(fe(k.id,k.version),Ae(n,c,k.slug),o.push({file:c,...k,link:t.linkOf(k.slug),new:!0}),!r.json)O(`${I("\u2713")} ${c} \u2192 ${t.linkOf(k.slug)} ${y(`new in ${[p.slug,b.label].filter(Boolean).join("/")}`)}${r.message?y(` \xB7 saved: ${r.message}`):""}`)}if(r.json)O(JSON.stringify(o,null,2))}async function rt(e,r){let t=B(),n=await t.whoami(),i=_e(n,r.workspace,F()),o=await Ie(t,i.id,e),[c,s]=await Promise.all([t.docs(i.id,{project:o.project,folder:o.folder}),e?Promise.resolve([]):t.projects(i.id)]),l=e?(await t.projects(i.id)).find((a)=>a.id===o.project)?.folders.filter((a)=>a.parentId===o.folder)??[]:[];if(r.json)return O(JSON.stringify({workspace:i.slug,place:o.label||null,projects:s,folders:l,docs:c},null,2));let u=[];for(let a of s)u.push([K(`${a.slug}/`),a.name,y(`${a.docs} doc${a.docs===1?"":"s"}`),""]);for(let a of l)u.push([K(`${a.name}/`),"",y(`${a.docs} doc${a.docs===1?"":"s"}`),""]);for(let a of c)u.push([a.slug,a.title+y(a.kind==="html"?" .html":" .md"),y($e(a.updatedAt)),y(a.updatedByName??"")]);if(!u.length)return D(y(`Nothing in ${[i.slug,o.label].filter(Boolean).join("/")} yet.`));pe(u)}async function ot(e){if(!e)T("Name a doc: `dockito open <link, code or file>`");let r=`${L}/${G(e,F())}`;if(!ln(r))O(r)}async function it(e,r){if(!e)T("Name a doc: `dockito get <link, code or file> [-o file]`");let t=B(),n=F(),i=await t.doc(G(e,n)),o=r.entry?Number(r.entry):null;if(r.entry&&(!Number.isInteger(o)||o<1))T("--entry takes an entry number from `dockito history`.");let{bytes:c,entry:s}=await t.content(i.doc.id,o);if(!o)fe(i.doc.id,s);if(!r.output)return void process.stdout.write(c);if(Vn(r.output,c),!o)Ae(n,r.output,i.doc.slug);D(`${I("\u2713")} ${r.output} ${y(`\u2190 ${t.linkOf(i.doc.slug)}${o?` entry ${o}`:""}`)}`)}async function st(e,r){if(!e)T("Name a doc: `dockito history <link, code or file>`");let t=await B().doc(G(e,F()));if(r.json)return O(JSON.stringify(t.versions,null,2));O(`${K(t.doc.title)} ${y(`${L}/${t.doc.slug}`)}`),pe(t.versions.map((n,i)=>[String(n.number),i===0?I("current"):y($e(n.createdAt)),i===0?y($e(n.createdAt)):"",n.byName??"",y(n.source),n.savedAt?`${Oe("saved")}${n.note?` ${n.note}`:""}`:"",n.gitCommit?y(n.gitCommit.slice(0,7)):""]))}async function ct(e,r){let t=Number(r);if(!e||!Number.isInteger(t)||t<1)T("`dockito restore <doc> <entry>`; entries are in `dockito history`.");let n=B(),i=await n.doc(G(e,F())),o=U(L).entries?.[i.doc.id]??i.versions[0]?.number??null,c=await n.restore(i.doc.id,t,o);fe(c.id,c.version),O(`${I("\u2713")} Restored entry ${t} as entry ${c.version} ${y(n.linkOf(c.slug))}`)}async function lt(e,r,t){if(!e)T('`dockito save <doc> [entry] -m "note"`');let n=B(),i=await n.doc(G(e,F())),o=r?Number(r):i.versions[0]?.number;if(!Number.isInteger(o)||o<1)T("Entries are in `dockito history`.");await n.save(i.doc.id,o,t.message??null),O(`${I("\u2713")} Saved entry ${o}${t.message?y(` \xB7 ${t.message}`):""}`)}var at=`Dockito CLI ${Ne}
24
+
25
+ Usage: dockito <command>
26
+
27
+ login [--update] Sign in through the browser (--update changes access)
28
+ logout Sign out this machine
29
+ whoami Who you are and what this login can reach
30
+ switch [workspace] Set the workspace commands use
31
+
32
+ publish <file...> Publish files; the same file updates the same doc
33
+ -m, --message <note> Keep this entry as a saved point
34
+ --to <project/folder> Where new docs go
35
+ --doc <doc> Update this doc instead
36
+ --new Publish as a new doc
37
+ --force Publish even if someone published since
38
+ ls [project/folder] Docs and projects
39
+ open <doc> Open in the browser
40
+ get <doc> [-o file] Download (--entry <n> for a History entry)
41
+ history <doc> History entries
42
+ restore <doc> <entry> Make a History entry current again
43
+ save <doc> [entry] -m ... Keep an entry as a saved point
44
+ init [--to project/folder] Write a dockito.jsonc here
45
+
46
+ <doc> is a link, a code, or a file published before.
47
+ -w, --workspace <slug> Use another workspace
48
+ --json Machine-readable output (whoami, publish, ls, history)
49
+
50
+ Environment: DOCKITO_TOKEN (use this token), DOCKITO_URL (another Dockito)`;async function ut(){let{values:e,positionals:r}=Wn({allowPositionals:!0,options:{message:{type:"string",short:"m"},to:{type:"string"},doc:{type:"string"},new:{type:"boolean"},force:{type:"boolean"},workspace:{type:"string",short:"w"},output:{type:"string",short:"o"},entry:{type:"string"},json:{type:"boolean"},update:{type:"boolean"},"no-browser":{type:"boolean"},help:{type:"boolean",short:"h"},version:{type:"boolean",short:"v"}}}),[t,...n]=r;if(e.version)return O(Ne);if(e.help||!t||t==="help")return O(at);switch(t){case"login":return Zn(e);case"logout":return Kn();case"whoami":return Cn(e);case"switch":return et(n[0]);case"init":return nt(e);case"publish":return tt(n,e);case"ls":return rt(n[0],e);case"open":return ot(n[0]);case"get":return it(n[0],e);case"history":return st(n[0],e);case"restore":return ct(n[0],n[1]);case"save":return lt(n[0],n[1],e);default:T(`Unknown command "${t}". Run \`dockito --help\`.`)}}ut().then(()=>process.exit(0),(e)=>{if(e instanceof Se)D(ae(e.message));else if(e instanceof x)D(ae(zn(e,L)));else if(e instanceof TypeError&&/parseArgs|option|positional/i.test(String(e.message)))D(ae(`${e.message}. Run \`dockito --help\`.`));else D(ae(String(e?.stack??e)));process.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,16 @@
1
1
  {
2
2
  "name": "dockito",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.0.1-beta.1",
4
+ "description": "Dockito CLI: publish the docs your AI writes as links you can share.",
5
+ "license": "UNLICENSED",
6
+ "homepage": "https://dockito-site.dockito.workers.dev",
7
+ "keywords": ["dockito", "docs", "markdown", "publish", "cli", "ai"],
8
+ "type": "module",
9
+ "bin": {
10
+ "dockito": "dockito.js"
11
+ },
12
+ "files": ["dockito.js", "README.md"],
13
+ "engines": {
14
+ "node": ">=18.17"
15
+ }
16
+ }