document360-writer 0.4.21 → 0.4.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -75,5 +75,5 @@ Model: ${b.model}${b.forced?" (forced)":" \u2014 mechanical work; /model to over
|
|
|
75
75
|
`)+re}),K([S]);return}Je.current=Date.now(),pt(0),q(!0);let D=new AbortController;De.current=D,ue({total:I.length,done:0,active:[],tools:0,chars:0,lastAt:Date.now(),startedAt:Date.now()}),d({kind:"note",tone:"info",text:`Converting ${A.length} articles across ${I.length} partitions (\u2264${N} agents at once) on ${b.model}\u2026 (esc to stop)`});try{for await(let _ of Vr({cwd:e,partitions:I,promptFor:Io,concurrency:N,profileName:s,allowProdWrites:gt.current,model:b.model,signal:D.signal}))if(_.type==="partition_status")_.status==="running"?(ue(F=>F&&{...F,active:[...F.active,_.label],lastAt:Date.now()}),d({kind:"note",tone:"info",text:` \u25B8 ${_.label} \u2014 converting\u2026`})):(ue(F=>F&&{...F,active:F.active.filter(re=>re!==_.label),done:F.done+1,lastAt:Date.now()}),d({kind:"note",tone:_.status==="done"?"ok":"error",text:` ${_.status==="done"?"\u2713":"\u2717"} ${_.label}`}));else if(_.type==="partition_event")ue(F=>{if(!F)return F;let re={...F,lastAt:Date.now()};return _.event.type==="tool"?re.tools=F.tools+1:_.event.type==="text"&&(re.chars=F.chars+_.event.delta.length),re});else if(_.type==="run_done"){xt(tt=>tt+_.totalCostUsd),yt(tt=>tt+_.results.reduce((us,ds)=>us+ds.outputTokens,0));let F=_.aborted?"Stopped. ":"",re=t.kind==="api"?"api":"subscription";d({kind:"note",tone:_.aborted?"warn":_.ok?"ok":"warn",text:F+_o(_.results,I,re).join(`
|
|
76
76
|
`)})}}catch(_){d({kind:"note",tone:"error",text:`Convert run failed: ${_.message}`})}finally{De.current=null,ue(null),q(!1)}return}case"sync":{let m=(k[0]??"status").toLowerCase();try{if(m==="status"){d({kind:"note",tone:"info",text:"Checking Document360 for drift\u2026"});let g=await Go({cwd:e,profileName:s});d({kind:"note",tone:"info",text:Ut(g).join(`
|
|
77
77
|
`)});return}if(m==="pull"){let g=k[1];if(!g){d({kind:"note",tone:"error",text:"Usage: /sync pull <article-path> | --all"});return}let w;if(g==="--all"){if(d({kind:"note",tone:"info",text:"Checking Document360 for drift\u2026"}),w=(await Go({cwd:e,profileName:s})).entries.filter(N=>N.status==="remote-ahead"&&N.path).map(N=>N.path),w.length===0){d({kind:"note",tone:"ok",text:"\u2713 Nothing is remote-ahead \u2014 no pulls needed. (Conflicts are never bulk-pulled; pull them one by one.)"});return}}else w=[g.replace(/\\/g,"/")];let A=[];for(let I of w)A.push(await sa({cwd:e,profileName:s,relPath:I}));ye.current=A,vt();return}d({kind:"note",tone:"error",text:`Unknown subcommand: /sync ${m} \u2014 use /sync or /sync pull <path>|--all.`})}catch(g){d({kind:"note",tone:"error",text:`Sync failed: ${g.message}`})}return}case"scope":{if(!ie(e)){d({kind:"note",tone:"error",text:"No .d360-writer.json here. Run /init first."});return}let m=ia(e);if(m.length===0){d({kind:"note",tone:"info",text:'No candidate source folders found. Set "authoritativeSourceFiles" in .d360-writer.json manually.'});return}qe({cursor:0,rows:m.map(g=>({...g,checked:g.recommended}))});return}case"audit":case"capture-setup":{let g=await(i==="audit"?Lt:qt)(k,void 0);g.kind==="forward-to-agent"&&g.prompt&&await be(g.prompt,{display:g.display,echoDisplay:!0});return}case"screenshot":{let m=Uo(k);if(m.mode==="list"){if(!ie(e)){d({kind:"note",tone:"error",text:"No .d360-writer.json here. Run /init first."});return}d({kind:"note",tone:"info",text:Fo(Wo(e,m.scope),m.scope).join(`
|
|
78
|
-
`)});return}if(m.mode==="single"){let b=await Ht(k);b.kind==="forward-to-agent"&&b.prompt&&await be(b.prompt,{display:b.display,echoDisplay:!0});return}if(!ie(e)){d({kind:"note",tone:"error",text:"No .d360-writer.json here. Run /init first."});return}let g=m.mode==="scope"?m.scope:void 0,w=da(e,{scope:g}).map(b=>b.id);if(w.length===0){d({kind:"note",tone:"info",text:g?`No screenshot placeholders under ${g}.`:"No screenshot placeholders found in the docs."});return}let A=3,I=ua(w,3),N=Yr(e,"standard");Je.current=Date.now(),pt(0),q(!0);let S=new AbortController;De.current=S,ue({verb:"Authoring",total:I.length,done:0,active:[],tools:0,chars:0,lastAt:Date.now(),startedAt:Date.now()}),d({kind:"note",tone:"info",text:`Authoring ${w.length} screenshot spec${w.length===1?"":"s"} across ${I.length} partition${I.length===1?"":"s"} (\u2264${A} agents at once) on ${N.model}${N.forced?" (forced)":""}\u2026 (esc to stop)`});try{for await(let b of Vr({cwd:e,partitions:I,promptFor:xr,concurrency:A,profileName:s,allowProdWrites:gt.current,model:N.model,signal:S.signal}))if(b.type==="partition_status")b.status==="running"?(ue(D=>D&&{...D,active:[...D.active,b.label],lastAt:Date.now()}),d({kind:"note",tone:"info",text:` \u25B8 ${b.label} \u2014 authoring\u2026`})):(ue(D=>D&&{...D,active:D.active.filter(_=>_!==b.label),done:D.done+1,lastAt:Date.now()}),d({kind:"note",tone:b.status==="done"?"ok":"error",text:` ${b.status==="done"?"\u2713":"\u2717"} ${b.label}`}));else if(b.type==="partition_event")ue(D=>{if(!D)return D;let _={...D,lastAt:Date.now()};return b.event.type==="tool"?_.tools=D.tools+1:b.event.type==="text"&&(_.chars=D.chars+b.event.delta.length),_});else if(b.type==="run_done"){xt(F=>F+b.totalCostUsd),yt(F=>F+b.results.reduce((re,tt)=>re+tt.outputTokens,0));let D=b.results.filter(F=>F.ok).length,_=b.aborted?"Stopped. ":"";d({kind:"note",tone:b.aborted?"warn":b.ok?"ok":"warn",text:`${_}Authored specs \u2014 ${D}/${b.results.length} batches ok. Next: /capture-setup, then d360-capture capture.`})}}catch(b){d({kind:"note",tone:"error",text:`Spec authoring failed: ${b.message}`})}finally{De.current=null,ue(null),q(!1)}return}default:d({kind:"note",tone:"error",text:`Unknown command: /${i} \u2014 type /help.`})}},[e,r,s,vt,d,he,be]),Ct=G(a=>{let l=(a??R).trim();if($(""),mt(null),Oe(0),l.startsWith("/")){let k=g=>g.trim().split(/\s+/).slice(1).join(" "),m=k(l);K(g=>g.filter(w=>w.trim()!==l&&!(m&&k(w)===m)))}if(!l||cn(l))return;so.current.push(l);let i=Lr(l,Jo.current);l.startsWith("/")?un(i):be(i,{display:l})},[R,cn,un,be]),dn=G(a=>{if(a.length>1){if(a.includes("\x1B"))return;let l=Mr(a);if(_r(l)){let i=Nr(++ss.current,l);Jo.current.set(i,l),j(i)}else j(l);return}j(a)},[j]),ze=Math.max(10,Me-6),pn=Zt(()=>Jt(f.text,ze),[f.text,ze]),mo=G(a=>x(l=>({...l,pos:Math.max(0,Math.min(l.text.length,l.pos+a))})),[]),Pt=G(a=>x(l=>({...l,pos:Ur(Jt(l.text,ze),l.pos,a)})),[ze]),et=G(a=>x(l=>({...l,pos:Wr(Jt(l.text,ze),l.pos,a)})),[ze]),as=["\x1B[H","\x1B[1~","\x1BOH"],cs=["\x1B[F","\x1B[4~","\x1BOF"],mn=G((a,l)=>l.leftArrow?(mo(-1),!0):l.rightArrow?(mo(1),!0):a&&as.includes(a)?(et("start"),!0):a&&cs.includes(a)?(et("end"),!0):l.ctrl&&a==="a"?(et("start"),!0):l.ctrl&&a==="e"?(et("end"),!0):!1,[mo,et]);return Ul((a,l)=>{if(l.ctrl&&a==="c"){te.current?.close(),r();return}if(!z){if(M){if(l.escape){if(De.current){De.current.signal.aborted||(d({kind:"note",tone:"warn",text:"\u238B Stopping the convert run (finishing in-flight articles)\u2026"}),De.current.abort());return}ht.current||(ht.current=!0,d({kind:"note",tone:"warn",text:"\u238B Interrupting\u2026"}),te.current?.interrupt());return}if(l.return){let i=R.trim();if(!i)return;Ee.current.push(i),io([...Ee.current]),$("");return}if(mn(a,l))return;if(l.upArrow){Pt(-1);return}if(l.downArrow){Pt(1);return}if(l.backspace||l.delete){T();return}a&&!l.ctrl&&!l.meta&&dn(a);return}if(Re){if(l.upArrow){je(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){je(i=>i&&{...i,cursor:Math.min(pe.length-1,i.cursor+1)});return}if(a&&/^[1-9]$/.test(a)&&Number(a)<=pe.length){je(i=>i&&{...i,cursor:Number(a)-1});return}if(l.return){let i=pe[Re.cursor];je(null);let{lines:k,changed:m,effective:g}=ct(e,i.value??"default");for(let w of k)d({kind:"note",tone:w.startsWith("\u26A0")?"warn":w.startsWith("\u2713")?"ok":"info",text:w});m&&(on(w=>w+1),te.current?.setModel(g));return}if(a==="s"){let i=pe[Re.cursor];je(null),te.current?.setModel(i.value??void 0),d({kind:"note",tone:"ok",text:`\u2713 Using ${i.label} for this session only (your saved default is unchanged).`});return}if(l.escape){je(null);return}return}if(fe){if(l.upArrow){We(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){We(i=>i&&{...i,cursor:Math.min(i.rows.length-1,i.cursor+1)});return}if(a&&/^[1-9]$/.test(a)&&Number(a)<=fe.rows.length){We(i=>i&&{...i,cursor:Number(a)-1});return}if(l.return||a==="s"){let i=fe.rows[fe.cursor];We(null),po(i.name,l.return===!0);return}if(l.escape){We(null);return}return}if(xe){if(l.upArrow){Fe(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){Fe(i=>i&&{...i,cursor:Math.min(i.rows.length-1,i.cursor+1)});return}if(a&&/^[1-9]$/.test(a)&&Number(a)<=xe.rows.length){Fe(i=>i&&{...i,cursor:Number(a)-1});return}if(l.return){let i=xe.rows[xe.cursor].name;if(Fe(null),!En(e,i).created){d({kind:"note",tone:"error",text:"Could not scaffold \u2014 .d360-writer.json already exists."});return}d({kind:"note",tone:"ok",text:`\u2713 Wrote .d360-writer.json (environment "${i}").`});let m=!1;try{let g=Le(i);m=!!g&&!(Se(g)&&!g.refreshToken)}catch{}m?(d({kind:"note",tone:"info",text:`Already signed in to ${i} \u2014 next: pick a workspace.`}),K(["/workspace"])):(d({kind:"note",tone:"info",text:`Next: sign in to Document360 (${i}).`}),K(["/login"])),we(g=>g+1);return}if(l.escape){Fe(null);return}return}if(J){if(l.upArrow){Be(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){Be(i=>i&&{...i,cursor:Math.min(i.rows.length-1,i.cursor+1)});return}if(a&&/^[1-9]$/.test(a)&&Number(a)<=J.rows.length){Be(i=>i&&{...i,cursor:Number(a)-1});return}if(l.return){let i=J.rows[J.cursor],{profile:k,projectId:m}=J;Be(null),an(k,m,i);return}if(l.escape){Be(null);return}return}if(Q){if(l.upArrow){qe(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){qe(i=>i&&{...i,cursor:Math.min(i.rows.length-1,i.cursor+1)});return}if(a===" "){qe(i=>i&&{...i,rows:i.rows.map((k,m)=>m===i.cursor?{...k,checked:!k.checked}:k)});return}if(l.return){let i=Q.rows.filter(k=>k.checked).map(k=>k.path);if(qe(null),i.length===0){d({kind:"note",tone:"info",text:"Nothing selected \u2014 scope unchanged."});return}xo(e,i),d({kind:"note",tone:"ok",text:`\u2713 Scoped to ${i.length} folder(s) \u2014 written to .d360-writer.json`});for(let k of i)d({kind:"note",tone:"info",text:` ${k}`});d({kind:"note",tone:"info",text:"Next: ask me to analyze these folders and propose a docs structure."});return}if(l.escape){qe(null);return}return}if(ge){if(l.upArrow){He(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){He(i=>i&&{...i,cursor:Math.min(i.rows.length-1,i.cursor+1)});return}if(a&&/^[1-9]$/.test(a)&&Number(a)<=ge.rows.length){He(i=>i&&{...i,cursor:Number(a)-1});return}if(l.return){let i=ge.rows[ge.cursor],k=ge.rows.filter(m=>m.path!=="--all").map(m=>m.path);He(null),be(i.path==="--all"?it(k):Nt(i.path),{display:i.path==="--all"?"/publish --all":`/publish ${i.path}`,echoDisplay:!0});return}if(l.escape){He(null);return}return}if(oe){if(l.escape){Ae(null);return}if(l.upArrow){Ae(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){Ae(i=>i&&{...i,cursor:Math.min(Math.max(0,$t.length-1),i.cursor+1)});return}if(l.return){let i=$t[oe.cursor];if(i){Ae(null);try{d({kind:"preview",name:qr(i),text:Jr(Hr(to(e,i),"utf8"))})}catch(k){d({kind:"note",tone:"error",text:`Could not read ${i}: ${k.message}`})}}return}if(l.backspace||l.delete){Ae(i=>i&&{...i,query:i.query.slice(0,-1),cursor:0});return}if(a&&!l.ctrl&&!l.meta&&a.length===1){Ae(i=>i&&{...i,query:i.query+a,cursor:0});return}return}if(ne){if(l.escape){Ie(null);return}if(l.upArrow){Ie(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){Ie(i=>i&&{...i,cursor:Math.min(Math.max(0,bt.length-1),i.cursor+1)});return}if(l.return){let i=bt[ne.cursor];i&&(Ie(null),he(i.uuid),Te.current={uuid:i.uuid,firstPrompt:i.firstPrompt,titleFired:!0},zo(i.uuid),d({kind:"note",tone:"ok",text:`Resumed "${i.name}".`}));return}if(l.backspace||l.delete){Ie(i=>i&&{...i,query:i.query.slice(0,-1),cursor:0});return}if(a&&!l.ctrl&&!l.meta&&a.length===1){Ie(i=>i&&{...i,query:i.query+a,cursor:0});return}return}if(l.tab&&!R&&ae){$(ae),ce(null),dt.current++;return}if(!R&&Ke.length>0&&a&&/^[1-9]$/.test(a)){let i=Ke[Number(a)-1];if(i){$(i);return}}if(!mn(a,l)){if(sn){if(l.upArrow){Oe(i=>Math.max(0,i-1));return}if(l.downArrow){Oe(i=>Math.min(Ze.length-1,i+1));return}if(l.tab){$("/"+(Ze[Qe]?.name??"")+" "),Oe(0);return}if(l.return){let i=Ze[Qe];if(i){let k=R.trim().slice(1).split(/\s+/).slice(1).join(" ");if(Dr(i.usage)&&!k){$("/"+i.name+" "),Oe(0);return}Ct("/"+i.name+(k?" "+k:""));return}}}else{if(l.upArrow){if(R!==""&&Ue===null){Pt(-1);return}let i=so.current;if(!i.length)return;let k=Ue===null?i.length-1:Math.max(0,Ue-1);mt(k),$(i[k]??"");return}if(l.downArrow){if(R!==""&&Ue===null){Pt(1);return}let i=so.current;if(Ue===null)return;let k=Ue+1;k>=i.length?(mt(null),$("")):(mt(k),$(i[k]??""));return}}if(l.return){Ct();return}if(l.backspace||l.delete){T();return}if(l.escape){$(""),Oe(0),ce(null),K([]);return}a&&!l.ctrl&&!l.meta&&dn(a)}}}),Ve(()=>{if(M||z)return;let a=Ee.current.shift();a!==void 0&&(io([...Ee.current]),Ct(a))},[M,z,Ct]),O(X,{flexDirection:"column",width:Me,children:[co!==null&&O(X,{marginTop:1,flexDirection:"column",children:[co.truncated&&P(C,{dimColor:!0,children:"\u2026"}),P(C,{children:co.text})]}),M&&(Zo?P(va,{p:Zo}):P($a,{startTime:Je.current,chars:rs})),P(X,{borderStyle:"round",borderColor:rn.prod?"yellow":H,borderTop:!0,borderBottom:!0,borderLeft:!1,borderRight:!1,marginTop:1,flexDirection:"column",children:R?pn.map((a,l)=>{let i=f.text.slice(a.start,a.end),k=l===Qt(pn,f.pos),m=Math.min(f.pos,a.end)-a.start;return O(C,{children:[P(C,{color:H,children:l===0?"> ":" "}),k?O(Xo,{children:[i.slice(0,m),P(eo,{ch:i[m]??" "}),i.slice(m+1)]}):i||" "]},`${l}-${a.start}`)}):O(C,{children:[P(C,{color:H,children:"> "}),ae&&!M?O(Xo,{children:[P(eo,{ch:ae[0],dim:!0}),P(C,{color:"gray",children:ae.slice(1)}),P(C,{dimColor:!0,children:" (tab)"})]}):ao.isSetup||!ns?O(Xo,{children:[P(eo,{ch:ao.text[0],dim:!0}),P(C,{color:"gray",children:ao.text.slice(1)})]}):P(eo,{ch:" "})]})}),Qo.length>0&&P(X,{flexDirection:"column",paddingX:1,children:Qo.map((a,l)=>P(C,{color:"gray",children:`\u29D7 queued: ${a}`},`${l}-${a.slice(0,24)}`))}),Re?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:"Select model"}),P(C,{color:"gray",children:"Your pick becomes your personal default for new sessions (team .d360-writer.json still wins)."}),pe.map((a,l)=>O(C,{color:l===Re.cursor?H:void 0,children:[l===Re.cursor?"\u276F ":" ",`${l+1}. ${a.label}${l===Re.current?" \u2714":""}`.padEnd(16),P(C,{color:"gray",children:a.desc})]},a.label)),P(C,{dimColor:!0,children:"enter set as default \xB7 s this session only \xB7 esc cancel"})]}):fe?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:"Switch connection profile"}),fe.rows.map((a,l)=>O(C,{color:l===fe.cursor?H:void 0,children:[l===fe.cursor?"\u276F ":" ",`${l+1}. ${a.name}${l===fe.current?" \u2714":""}`.padEnd(20),P(C,{color:"gray",children:`${a.env} \xB7 ${a.who??"not signed in"}`}),a.prod?P(C,{color:"yellow",bold:!0,children:" \u26A0 PRODUCTION"}):null]},a.name)),P(C,{dimColor:!0,children:"enter switch (saved as default) \xB7 s this session only \xB7 esc cancel"})]}):xe?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:"Pick your Document360 environment"}),xe.rows.map((a,l)=>O(C,{color:l===xe.cursor?H:void 0,children:[l===xe.cursor?"\u276F ":" ",`${l+1}. ${a.name}`.padEnd(16),P(C,{color:"gray",children:a.apiUrl})]},a.name)),P(C,{dimColor:!0,children:"enter select \xB7 esc cancel"})]}):J?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:"Switch workspace"}),P(C,{dimColor:!0,children:`environment ${J.environment} \xB7 project ${J.projectId.slice(0,8)}\u2026`}),J.rows.map((a,l)=>O(C,{color:l===J.cursor?H:void 0,children:[l===J.cursor?"\u276F ":" ",`${l+1}. ${a.name}${l===J.current?" \u2714":""}`.padEnd(30),P(C,{color:"gray",children:a.type??""})]},a.id)),P(C,{dimColor:!0,children:"enter switch \xB7 esc cancel"})]}):Q?(()=>{let l=Math.min(Math.max(0,Q.cursor-Math.floor(7)),Math.max(0,Q.rows.length-14)),i=Q.rows.slice(l,l+14),k=Q.rows.filter(m=>m.checked).length;return O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:`Which folders back the user docs? (${k} selected of ${Q.rows.length})`}),l>0?P(C,{dimColor:!0,children:` \u2191 ${l} more`}):null,i.map((m,g)=>{let w=l+g;return O(C,{color:w===Q.cursor?H:void 0,children:[w===Q.cursor?"\u276F ":" ",m.checked?"\u25C9 ":"\u25CB ",m.path.padEnd(Math.min(48,Me-34)),P(C,{color:"gray",children:Ot(m)})]},m.path)}),l+14<Q.rows.length?P(C,{dimColor:!0,children:` \u2193 ${Q.rows.length-l-14} more`}):null,P(C,{dimColor:!0,children:"space toggle \xB7 enter save \xB7 esc cancel"})]})})():ge?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:"Publish which article?"}),ge.rows.map((a,l)=>O(C,{color:l===ge.cursor?H:void 0,children:[l===ge.cursor?"\u276F ":" ",`${l+1}. ${a.path}`.padEnd(Math.min(56,Me-30)),P(C,{color:"gray",children:a.label})]},a.path)),P(C,{dimColor:!0,children:"enter publish (draft) \xB7 esc cancel"})]}):oe?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:`Preview article${oe.query?` \u2014 filter: ${oe.query}`:" (type to filter)"}`}),$t.length===0?P(C,{color:"gray",children:"no articles match"}):$t.map((a,l)=>O(C,{color:l===oe.cursor?H:void 0,children:[l===oe.cursor?"\u276F ":" ",a]},a)),P(C,{dimColor:!0,children:"enter preview \xB7 esc cancel"})]}):ne?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:`Resume session${ne.query?` \u2014 filter: ${ne.query}`:" (type to filter)"}`}),bt.length===0?P(C,{color:"gray",children:"no sessions match"}):bt.map((a,l)=>O(C,{color:l===ne.cursor?H:void 0,children:[l===ne.cursor?"\u276F ":" ",a.name.slice(0,28).padEnd(30),P(C,{color:l===ne.cursor?H:"gray",children:a.firstPrompt.slice(0,Math.max(10,Me-40))})]},a.uuid)),P(C,{dimColor:!0,children:"enter resume \xB7 esc cancel"})]}):sn?P(X,{flexDirection:"column",children:Ze.map((a,l)=>O(C,{color:l===Qe?H:void 0,children:[l===Qe?"\u276F ":" ",a.usage.padEnd(22)," ",P(C,{color:l===Qe?H:"gray",children:a.name==="model"&&lo?`${a.desc} (currently ${lo})`:a.desc})]},a.name))}):!R&&Ke.length>0?O(X,{flexDirection:"column",paddingX:1,children:[Ke.map((a,l)=>O(C,{children:[P(C,{color:H,children:l+1})," ",a.slice(0,Math.max(20,Me-5))]},a)),P(C,{dimColor:!0,children:`press 1-${Ke.length} to fill the command \xB7 esc dismiss`})]}):P(X,{paddingX:1,children:O(C,{color:"gray",children:[rn.prod?"\u26A0 PRODUCTION \xB7 ":"",`/help \xB7 ${lo??"model n/a"}${t.kind==="api"?tn>0?` \xB7 ${Ne(tn)}`:"":en>0?` \xB7 ${Wt(en)}`:""} \xB7 \u2191 history \xB7 ctrl+c exit`]})})]})}B();import{jsx as Sa}from"react/jsx-runtime";async function es(e=process.cwd(),t="auto",o,n="0.0.0"){let r=Pa(t);r.kind==="none"&&(console.error(""),console.error(v("ANTHROPIC_API_KEY is not set (required for --auth api).")),console.error(`Get a key at ${y("https://console.anthropic.com/settings/keys")}`),console.error(`Or use your Claude subscription instead: ${y("d360-writer --auth subscription")}`),process.exit(2));let{waitUntilExit:s}=Ca(Sa(Zr,{cwd:e,auth:r,profileName:o,version:n}));await s(),process.stdout.write(`
|
|
78
|
+
`)});return}if(m.mode==="single"){let b=await Ht(k);b.kind==="forward-to-agent"&&b.prompt&&await be(b.prompt,{display:b.display,echoDisplay:!0});return}if(!ie(e)){d({kind:"note",tone:"error",text:"No .d360-writer.json here. Run /init first."});return}let g=m.mode==="scope"?m.scope:void 0,w=da(e,{scope:g}).map(b=>b.id);if(w.length===0){d({kind:"note",tone:"info",text:g?`No screenshot placeholders under ${g}.`:"No screenshot placeholders found in the docs."});return}let A=6,I=ua(w,3),N=Yr(e,"standard");Je.current=Date.now(),pt(0),q(!0);let S=new AbortController;De.current=S,ue({verb:"Authoring",total:I.length,done:0,active:[],tools:0,chars:0,lastAt:Date.now(),startedAt:Date.now()}),d({kind:"note",tone:"info",text:`Authoring ${w.length} screenshot spec${w.length===1?"":"s"} across ${I.length} partition${I.length===1?"":"s"} (\u2264${A} agents at once) on ${N.model}${N.forced?" (forced)":""}\u2026 (esc to stop)`});try{for await(let b of Vr({cwd:e,partitions:I,promptFor:xr,concurrency:A,profileName:s,allowProdWrites:gt.current,model:N.model,signal:S.signal}))if(b.type==="partition_status")b.status==="running"?(ue(D=>D&&{...D,active:[...D.active,b.label],lastAt:Date.now()}),d({kind:"note",tone:"info",text:` \u25B8 ${b.label} \u2014 authoring\u2026`})):(ue(D=>D&&{...D,active:D.active.filter(_=>_!==b.label),done:D.done+1,lastAt:Date.now()}),d({kind:"note",tone:b.status==="done"?"ok":"error",text:` ${b.status==="done"?"\u2713":"\u2717"} ${b.label}`}));else if(b.type==="partition_event")ue(D=>{if(!D)return D;let _={...D,lastAt:Date.now()};return b.event.type==="tool"?_.tools=D.tools+1:b.event.type==="text"&&(_.chars=D.chars+b.event.delta.length),_});else if(b.type==="run_done"){xt(F=>F+b.totalCostUsd),yt(F=>F+b.results.reduce((re,tt)=>re+tt.outputTokens,0));let D=b.results.filter(F=>F.ok).length,_=b.aborted?"Stopped. ":"";d({kind:"note",tone:b.aborted?"warn":b.ok?"ok":"warn",text:`${_}Authored specs \u2014 ${D}/${b.results.length} batches ok. Next: /capture-setup, then d360-capture capture.`})}}catch(b){d({kind:"note",tone:"error",text:`Spec authoring failed: ${b.message}`})}finally{De.current=null,ue(null),q(!1)}return}default:d({kind:"note",tone:"error",text:`Unknown command: /${i} \u2014 type /help.`})}},[e,r,s,vt,d,he,be]),Ct=G(a=>{let l=(a??R).trim();if($(""),mt(null),Oe(0),l.startsWith("/")){let k=g=>g.trim().split(/\s+/).slice(1).join(" "),m=k(l);K(g=>g.filter(w=>w.trim()!==l&&!(m&&k(w)===m)))}if(!l||cn(l))return;so.current.push(l);let i=Lr(l,Jo.current);l.startsWith("/")?un(i):be(i,{display:l})},[R,cn,un,be]),dn=G(a=>{if(a.length>1){if(a.includes("\x1B"))return;let l=Mr(a);if(_r(l)){let i=Nr(++ss.current,l);Jo.current.set(i,l),j(i)}else j(l);return}j(a)},[j]),ze=Math.max(10,Me-6),pn=Zt(()=>Jt(f.text,ze),[f.text,ze]),mo=G(a=>x(l=>({...l,pos:Math.max(0,Math.min(l.text.length,l.pos+a))})),[]),Pt=G(a=>x(l=>({...l,pos:Ur(Jt(l.text,ze),l.pos,a)})),[ze]),et=G(a=>x(l=>({...l,pos:Wr(Jt(l.text,ze),l.pos,a)})),[ze]),as=["\x1B[H","\x1B[1~","\x1BOH"],cs=["\x1B[F","\x1B[4~","\x1BOF"],mn=G((a,l)=>l.leftArrow?(mo(-1),!0):l.rightArrow?(mo(1),!0):a&&as.includes(a)?(et("start"),!0):a&&cs.includes(a)?(et("end"),!0):l.ctrl&&a==="a"?(et("start"),!0):l.ctrl&&a==="e"?(et("end"),!0):!1,[mo,et]);return Ul((a,l)=>{if(l.ctrl&&a==="c"){te.current?.close(),r();return}if(!z){if(M){if(l.escape){if(De.current){De.current.signal.aborted||(d({kind:"note",tone:"warn",text:"\u238B Stopping the convert run (finishing in-flight articles)\u2026"}),De.current.abort());return}ht.current||(ht.current=!0,d({kind:"note",tone:"warn",text:"\u238B Interrupting\u2026"}),te.current?.interrupt());return}if(l.return){let i=R.trim();if(!i)return;Ee.current.push(i),io([...Ee.current]),$("");return}if(mn(a,l))return;if(l.upArrow){Pt(-1);return}if(l.downArrow){Pt(1);return}if(l.backspace||l.delete){T();return}a&&!l.ctrl&&!l.meta&&dn(a);return}if(Re){if(l.upArrow){je(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){je(i=>i&&{...i,cursor:Math.min(pe.length-1,i.cursor+1)});return}if(a&&/^[1-9]$/.test(a)&&Number(a)<=pe.length){je(i=>i&&{...i,cursor:Number(a)-1});return}if(l.return){let i=pe[Re.cursor];je(null);let{lines:k,changed:m,effective:g}=ct(e,i.value??"default");for(let w of k)d({kind:"note",tone:w.startsWith("\u26A0")?"warn":w.startsWith("\u2713")?"ok":"info",text:w});m&&(on(w=>w+1),te.current?.setModel(g));return}if(a==="s"){let i=pe[Re.cursor];je(null),te.current?.setModel(i.value??void 0),d({kind:"note",tone:"ok",text:`\u2713 Using ${i.label} for this session only (your saved default is unchanged).`});return}if(l.escape){je(null);return}return}if(fe){if(l.upArrow){We(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){We(i=>i&&{...i,cursor:Math.min(i.rows.length-1,i.cursor+1)});return}if(a&&/^[1-9]$/.test(a)&&Number(a)<=fe.rows.length){We(i=>i&&{...i,cursor:Number(a)-1});return}if(l.return||a==="s"){let i=fe.rows[fe.cursor];We(null),po(i.name,l.return===!0);return}if(l.escape){We(null);return}return}if(xe){if(l.upArrow){Fe(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){Fe(i=>i&&{...i,cursor:Math.min(i.rows.length-1,i.cursor+1)});return}if(a&&/^[1-9]$/.test(a)&&Number(a)<=xe.rows.length){Fe(i=>i&&{...i,cursor:Number(a)-1});return}if(l.return){let i=xe.rows[xe.cursor].name;if(Fe(null),!En(e,i).created){d({kind:"note",tone:"error",text:"Could not scaffold \u2014 .d360-writer.json already exists."});return}d({kind:"note",tone:"ok",text:`\u2713 Wrote .d360-writer.json (environment "${i}").`});let m=!1;try{let g=Le(i);m=!!g&&!(Se(g)&&!g.refreshToken)}catch{}m?(d({kind:"note",tone:"info",text:`Already signed in to ${i} \u2014 next: pick a workspace.`}),K(["/workspace"])):(d({kind:"note",tone:"info",text:`Next: sign in to Document360 (${i}).`}),K(["/login"])),we(g=>g+1);return}if(l.escape){Fe(null);return}return}if(J){if(l.upArrow){Be(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){Be(i=>i&&{...i,cursor:Math.min(i.rows.length-1,i.cursor+1)});return}if(a&&/^[1-9]$/.test(a)&&Number(a)<=J.rows.length){Be(i=>i&&{...i,cursor:Number(a)-1});return}if(l.return){let i=J.rows[J.cursor],{profile:k,projectId:m}=J;Be(null),an(k,m,i);return}if(l.escape){Be(null);return}return}if(Q){if(l.upArrow){qe(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){qe(i=>i&&{...i,cursor:Math.min(i.rows.length-1,i.cursor+1)});return}if(a===" "){qe(i=>i&&{...i,rows:i.rows.map((k,m)=>m===i.cursor?{...k,checked:!k.checked}:k)});return}if(l.return){let i=Q.rows.filter(k=>k.checked).map(k=>k.path);if(qe(null),i.length===0){d({kind:"note",tone:"info",text:"Nothing selected \u2014 scope unchanged."});return}xo(e,i),d({kind:"note",tone:"ok",text:`\u2713 Scoped to ${i.length} folder(s) \u2014 written to .d360-writer.json`});for(let k of i)d({kind:"note",tone:"info",text:` ${k}`});d({kind:"note",tone:"info",text:"Next: ask me to analyze these folders and propose a docs structure."});return}if(l.escape){qe(null);return}return}if(ge){if(l.upArrow){He(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){He(i=>i&&{...i,cursor:Math.min(i.rows.length-1,i.cursor+1)});return}if(a&&/^[1-9]$/.test(a)&&Number(a)<=ge.rows.length){He(i=>i&&{...i,cursor:Number(a)-1});return}if(l.return){let i=ge.rows[ge.cursor],k=ge.rows.filter(m=>m.path!=="--all").map(m=>m.path);He(null),be(i.path==="--all"?it(k):Nt(i.path),{display:i.path==="--all"?"/publish --all":`/publish ${i.path}`,echoDisplay:!0});return}if(l.escape){He(null);return}return}if(oe){if(l.escape){Ae(null);return}if(l.upArrow){Ae(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){Ae(i=>i&&{...i,cursor:Math.min(Math.max(0,$t.length-1),i.cursor+1)});return}if(l.return){let i=$t[oe.cursor];if(i){Ae(null);try{d({kind:"preview",name:qr(i),text:Jr(Hr(to(e,i),"utf8"))})}catch(k){d({kind:"note",tone:"error",text:`Could not read ${i}: ${k.message}`})}}return}if(l.backspace||l.delete){Ae(i=>i&&{...i,query:i.query.slice(0,-1),cursor:0});return}if(a&&!l.ctrl&&!l.meta&&a.length===1){Ae(i=>i&&{...i,query:i.query+a,cursor:0});return}return}if(ne){if(l.escape){Ie(null);return}if(l.upArrow){Ie(i=>i&&{...i,cursor:Math.max(0,i.cursor-1)});return}if(l.downArrow){Ie(i=>i&&{...i,cursor:Math.min(Math.max(0,bt.length-1),i.cursor+1)});return}if(l.return){let i=bt[ne.cursor];i&&(Ie(null),he(i.uuid),Te.current={uuid:i.uuid,firstPrompt:i.firstPrompt,titleFired:!0},zo(i.uuid),d({kind:"note",tone:"ok",text:`Resumed "${i.name}".`}));return}if(l.backspace||l.delete){Ie(i=>i&&{...i,query:i.query.slice(0,-1),cursor:0});return}if(a&&!l.ctrl&&!l.meta&&a.length===1){Ie(i=>i&&{...i,query:i.query+a,cursor:0});return}return}if(l.tab&&!R&&ae){$(ae),ce(null),dt.current++;return}if(!R&&Ke.length>0&&a&&/^[1-9]$/.test(a)){let i=Ke[Number(a)-1];if(i){$(i);return}}if(!mn(a,l)){if(sn){if(l.upArrow){Oe(i=>Math.max(0,i-1));return}if(l.downArrow){Oe(i=>Math.min(Ze.length-1,i+1));return}if(l.tab){$("/"+(Ze[Qe]?.name??"")+" "),Oe(0);return}if(l.return){let i=Ze[Qe];if(i){let k=R.trim().slice(1).split(/\s+/).slice(1).join(" ");if(Dr(i.usage)&&!k){$("/"+i.name+" "),Oe(0);return}Ct("/"+i.name+(k?" "+k:""));return}}}else{if(l.upArrow){if(R!==""&&Ue===null){Pt(-1);return}let i=so.current;if(!i.length)return;let k=Ue===null?i.length-1:Math.max(0,Ue-1);mt(k),$(i[k]??"");return}if(l.downArrow){if(R!==""&&Ue===null){Pt(1);return}let i=so.current;if(Ue===null)return;let k=Ue+1;k>=i.length?(mt(null),$("")):(mt(k),$(i[k]??""));return}}if(l.return){Ct();return}if(l.backspace||l.delete){T();return}if(l.escape){$(""),Oe(0),ce(null),K([]);return}a&&!l.ctrl&&!l.meta&&dn(a)}}}),Ve(()=>{if(M||z)return;let a=Ee.current.shift();a!==void 0&&(io([...Ee.current]),Ct(a))},[M,z,Ct]),O(X,{flexDirection:"column",width:Me,children:[co!==null&&O(X,{marginTop:1,flexDirection:"column",children:[co.truncated&&P(C,{dimColor:!0,children:"\u2026"}),P(C,{children:co.text})]}),M&&(Zo?P(va,{p:Zo}):P($a,{startTime:Je.current,chars:rs})),P(X,{borderStyle:"round",borderColor:rn.prod?"yellow":H,borderTop:!0,borderBottom:!0,borderLeft:!1,borderRight:!1,marginTop:1,flexDirection:"column",children:R?pn.map((a,l)=>{let i=f.text.slice(a.start,a.end),k=l===Qt(pn,f.pos),m=Math.min(f.pos,a.end)-a.start;return O(C,{children:[P(C,{color:H,children:l===0?"> ":" "}),k?O(Xo,{children:[i.slice(0,m),P(eo,{ch:i[m]??" "}),i.slice(m+1)]}):i||" "]},`${l}-${a.start}`)}):O(C,{children:[P(C,{color:H,children:"> "}),ae&&!M?O(Xo,{children:[P(eo,{ch:ae[0],dim:!0}),P(C,{color:"gray",children:ae.slice(1)}),P(C,{dimColor:!0,children:" (tab)"})]}):ao.isSetup||!ns?O(Xo,{children:[P(eo,{ch:ao.text[0],dim:!0}),P(C,{color:"gray",children:ao.text.slice(1)})]}):P(eo,{ch:" "})]})}),Qo.length>0&&P(X,{flexDirection:"column",paddingX:1,children:Qo.map((a,l)=>P(C,{color:"gray",children:`\u29D7 queued: ${a}`},`${l}-${a.slice(0,24)}`))}),Re?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:"Select model"}),P(C,{color:"gray",children:"Your pick becomes your personal default for new sessions (team .d360-writer.json still wins)."}),pe.map((a,l)=>O(C,{color:l===Re.cursor?H:void 0,children:[l===Re.cursor?"\u276F ":" ",`${l+1}. ${a.label}${l===Re.current?" \u2714":""}`.padEnd(16),P(C,{color:"gray",children:a.desc})]},a.label)),P(C,{dimColor:!0,children:"enter set as default \xB7 s this session only \xB7 esc cancel"})]}):fe?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:"Switch connection profile"}),fe.rows.map((a,l)=>O(C,{color:l===fe.cursor?H:void 0,children:[l===fe.cursor?"\u276F ":" ",`${l+1}. ${a.name}${l===fe.current?" \u2714":""}`.padEnd(20),P(C,{color:"gray",children:`${a.env} \xB7 ${a.who??"not signed in"}`}),a.prod?P(C,{color:"yellow",bold:!0,children:" \u26A0 PRODUCTION"}):null]},a.name)),P(C,{dimColor:!0,children:"enter switch (saved as default) \xB7 s this session only \xB7 esc cancel"})]}):xe?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:"Pick your Document360 environment"}),xe.rows.map((a,l)=>O(C,{color:l===xe.cursor?H:void 0,children:[l===xe.cursor?"\u276F ":" ",`${l+1}. ${a.name}`.padEnd(16),P(C,{color:"gray",children:a.apiUrl})]},a.name)),P(C,{dimColor:!0,children:"enter select \xB7 esc cancel"})]}):J?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:"Switch workspace"}),P(C,{dimColor:!0,children:`environment ${J.environment} \xB7 project ${J.projectId.slice(0,8)}\u2026`}),J.rows.map((a,l)=>O(C,{color:l===J.cursor?H:void 0,children:[l===J.cursor?"\u276F ":" ",`${l+1}. ${a.name}${l===J.current?" \u2714":""}`.padEnd(30),P(C,{color:"gray",children:a.type??""})]},a.id)),P(C,{dimColor:!0,children:"enter switch \xB7 esc cancel"})]}):Q?(()=>{let l=Math.min(Math.max(0,Q.cursor-Math.floor(7)),Math.max(0,Q.rows.length-14)),i=Q.rows.slice(l,l+14),k=Q.rows.filter(m=>m.checked).length;return O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:`Which folders back the user docs? (${k} selected of ${Q.rows.length})`}),l>0?P(C,{dimColor:!0,children:` \u2191 ${l} more`}):null,i.map((m,g)=>{let w=l+g;return O(C,{color:w===Q.cursor?H:void 0,children:[w===Q.cursor?"\u276F ":" ",m.checked?"\u25C9 ":"\u25CB ",m.path.padEnd(Math.min(48,Me-34)),P(C,{color:"gray",children:Ot(m)})]},m.path)}),l+14<Q.rows.length?P(C,{dimColor:!0,children:` \u2193 ${Q.rows.length-l-14} more`}):null,P(C,{dimColor:!0,children:"space toggle \xB7 enter save \xB7 esc cancel"})]})})():ge?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:"Publish which article?"}),ge.rows.map((a,l)=>O(C,{color:l===ge.cursor?H:void 0,children:[l===ge.cursor?"\u276F ":" ",`${l+1}. ${a.path}`.padEnd(Math.min(56,Me-30)),P(C,{color:"gray",children:a.label})]},a.path)),P(C,{dimColor:!0,children:"enter publish (draft) \xB7 esc cancel"})]}):oe?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:`Preview article${oe.query?` \u2014 filter: ${oe.query}`:" (type to filter)"}`}),$t.length===0?P(C,{color:"gray",children:"no articles match"}):$t.map((a,l)=>O(C,{color:l===oe.cursor?H:void 0,children:[l===oe.cursor?"\u276F ":" ",a]},a)),P(C,{dimColor:!0,children:"enter preview \xB7 esc cancel"})]}):ne?O(X,{flexDirection:"column",paddingX:1,children:[P(C,{color:H,bold:!0,children:`Resume session${ne.query?` \u2014 filter: ${ne.query}`:" (type to filter)"}`}),bt.length===0?P(C,{color:"gray",children:"no sessions match"}):bt.map((a,l)=>O(C,{color:l===ne.cursor?H:void 0,children:[l===ne.cursor?"\u276F ":" ",a.name.slice(0,28).padEnd(30),P(C,{color:l===ne.cursor?H:"gray",children:a.firstPrompt.slice(0,Math.max(10,Me-40))})]},a.uuid)),P(C,{dimColor:!0,children:"enter resume \xB7 esc cancel"})]}):sn?P(X,{flexDirection:"column",children:Ze.map((a,l)=>O(C,{color:l===Qe?H:void 0,children:[l===Qe?"\u276F ":" ",a.usage.padEnd(22)," ",P(C,{color:l===Qe?H:"gray",children:a.name==="model"&&lo?`${a.desc} (currently ${lo})`:a.desc})]},a.name))}):!R&&Ke.length>0?O(X,{flexDirection:"column",paddingX:1,children:[Ke.map((a,l)=>O(C,{children:[P(C,{color:H,children:l+1})," ",a.slice(0,Math.max(20,Me-5))]},a)),P(C,{dimColor:!0,children:`press 1-${Ke.length} to fill the command \xB7 esc dismiss`})]}):P(X,{paddingX:1,children:O(C,{color:"gray",children:[rn.prod?"\u26A0 PRODUCTION \xB7 ":"",`/help \xB7 ${lo??"model n/a"}${t.kind==="api"?tn>0?` \xB7 ${Ne(tn)}`:"":en>0?` \xB7 ${Wt(en)}`:""} \xB7 \u2191 history \xB7 ctrl+c exit`]})})]})}B();import{jsx as Sa}from"react/jsx-runtime";async function es(e=process.cwd(),t="auto",o,n="0.0.0"){let r=Pa(t);r.kind==="none"&&(console.error(""),console.error(v("ANTHROPIC_API_KEY is not set (required for --auth api).")),console.error(`Get a key at ${y("https://console.anthropic.com/settings/keys")}`),console.error(`Or use your Claude subscription instead: ${y("d360-writer --auth subscription")}`),process.exit(2));let{waitUntilExit:s}=Ca(Sa(Zr,{cwd:e,auth:r,profileName:o,version:n}));await s(),process.stdout.write(`
|
|
79
79
|
`),process.exit(0)}var Aa=Ra(import.meta.url),ts=Aa("../package.json"),ke=new Ta;function Yo(e){e.env&&(console.error("\u2717 --env was replaced by --profile (connection profiles). Use: --profile <name>"),process.exit(2))}ke.command("login").description("Sign in to Document360 (browser OAuth; project chosen during login)").option("--profile <name>","Connection profile (defaults to the repo's defaultProfile)").option("--env <name>",!1).option("--manual","No local listener \u2014 paste the redirect URL instead (SSH/locked-down setups)").action(async e=>{Yo(e),await At({profile:e.profile,manual:e.manual})});ke.command("logout").description("Remove the stored Document360 session").option("--profile <name>","Connection profile").option("--env <name>",!1).action(async e=>{Yo(e),await vn({profile:e.profile})});ke.command("whoami").description("Show the current Document360 identity (refreshes if expired)").option("--profile <name>","Connection profile").option("--env <name>",!1).action(async e=>{Yo(e),await bn({profile:e.profile})});var Ko=ke.command("profile").description("Manage connection profiles for the current repo");Ko.command("list",{isDefault:!0}).description("List profiles (\u25CF = default)").action(()=>Et(process.cwd()));Ko.command("use <name>").description("Set the default profile for this repo").action(e=>Dt(process.cwd(),e));Ko.command("show [name]").description("Print the resolved profile (connection + project)").action(e=>It(process.cwd(),e));var os=ke.command("workspace").description("Choose the Document360 workspace for this repo (active profile's project)");os.command("select",{isDefault:!0}).description("Interactively pick the workspace (lists in non-TTY)").option("--profile <name>","Connection profile").action(e=>Ge(process.cwd(),e.profile));os.command("use <name>").description("Set the workspace by name (scriptable)").option("--profile <name>","Connection profile").action(async(e,t)=>{process.exitCode=await kn(process.cwd(),e,t.profile)});ke.command("logs").description("Show the Document360 API log files (send these to support when reporting a problem)").action(()=>Pn());ke.command("doctor").description("Health-check: node, Claude auth, Document360 login, profile/workspace, category map, API reachability").action(async()=>{let{renderDoctorChecks:e,runDoctorChecks:t}=await Promise.resolve().then(()=>(Bt(),fr)),o=await t(process.cwd());for(let n of e(o))console.log(n);process.exitCode=o.some(n=>n.level==="fail")?1:0});ke.name("d360-writer").description("Standalone documentation agent CLI. Reads your code, writes your docs.").version(ts.version,"-v, --version").option("-p, --prompt <text>","One-shot prompt mode (non-interactive)").option("-r, --resume <name>","Resume a saved session (with --prompt; use /resume inside the REPL)").option("-C, --cwd <dir>","Working directory",process.cwd()).option("--auth <mode>","Auth mode: auto | api | subscription","auto").option("--profile <name>","Connection profile (defaults to the repo's defaultProfile)").option("--yes","Skip the production write confirmation (for one-shot/CI)").option("--classic","Use the plain readline REPL instead of the Ink TUI").action(async e=>{if(ja.includes(e.auth)||(console.error(`\u2717 Invalid --auth mode: ${e.auth}`),console.error("Run: d360-writer --auth auto | api | subscription"),process.exit(2)),e.prompt){await Sn(e.cwd,e.prompt,e.auth,e.resume,e.profile,e.yes);return}e.resume&&(console.error("\u2717 --resume requires --prompt. In the interactive REPL, use /resume instead."),process.exit(2)),e.classic||!process.stdin.isTTY?await Ar(e.cwd,e.auth,e.profile):await es(e.cwd,e.auth,e.profile,ts.version)});ke.parseAsync(process.argv).catch(e=>{console.error(""),console.error(`\u2717 ${e.message}`),process.exit(1)});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "document360-writer",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.22",
|
|
4
4
|
"description": "Standalone documentation agent CLI. Reads your code, writes your docs. Specialized for Document360 publishing.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@inquirer/prompts": "^8.4.3",
|
|
35
35
|
"commander": "^14.0.3",
|
|
36
36
|
"diff": "^8.0.4",
|
|
37
|
-
"document360-engine": "^0.2.
|
|
37
|
+
"document360-engine": "^0.2.14",
|
|
38
38
|
"ink": "^5.2.1",
|
|
39
39
|
"picocolors": "^1.1.1",
|
|
40
40
|
"react": "^18.3.1",
|