noskills 4.1.49 → 4.1.50
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/chunks/{anthropic-UTLWCK66.js → anthropic-LDUWIUPL.js} +1 -1
- package/chunks/{approve-LCVVXAE3.js → approve-LYDFDSXE.js} +1 -1
- package/chunks/{ask-KPIHJIJZ.js → ask-IZXOXJHB.js} +1 -1
- package/chunks/block-4IUG6QYT.js +1 -0
- package/chunks/cancel-STVRTPSC.js +1 -0
- package/chunks/{chunk-7OIAMA3E.js → chunk-6OQNXZAN.js} +1 -1
- package/chunks/chunk-E7UED6DA.js +3 -0
- package/chunks/{chunk-U3JLX6DY.js → chunk-GOLHD4DZ.js} +1 -1
- package/chunks/chunk-IZMNMJYU.js +16 -0
- package/chunks/chunk-JKKCV4KM.js +3 -0
- package/chunks/chunk-JNVM2KAE.js +1 -0
- package/chunks/claude-code-F64HRHHR.js +1 -0
- package/chunks/done-TLRZYAUZ.js +1 -0
- package/chunks/free-5HORD4VB.js +1 -0
- package/chunks/{init-NJ7KI65T.js → init-A3VTACZC.js} +1 -1
- package/chunks/{invoke-hook-D6BRYBNY.js → invoke-hook-Y2YREMYB.js} +2 -2
- package/chunks/kiro-XJ6XH4Q4.js +3 -0
- package/chunks/{list-FWRKOILC.js → list-SG2MZH7M.js} +1 -1
- package/chunks/{manager-BIVHW3S7.js → manager-5AJ7QWMG.js} +5 -5
- package/chunks/{mod-LORCBZWH.js → mod-AU5SVHO5.js} +1 -1
- package/chunks/next-GSQE7GYI.js +8 -0
- package/chunks/{ollama-VSBCL6RB.js → ollama-IVHLR7VV.js} +1 -1
- package/chunks/opencode-MTSBCZYY.js +1 -0
- package/chunks/{pack-5U7QBA2H.js → pack-KWRZVNBH.js} +1 -1
- package/chunks/{reopen-IR7FAPQE.js → reopen-G7ZMJSB7.js} +1 -1
- package/chunks/reset-WRG3L4QP.js +1 -0
- package/chunks/{rule-YI5GBUAS.js → rule-HMBAP5LJ.js} +1 -1
- package/chunks/{run-B6BBYCQM.js → run-CC6MLCNO.js} +1 -1
- package/chunks/{sdk-LHBUQS75.js → sdk-6IMATOQ3.js} +8 -8
- package/chunks/session-TYOM74BQ.js +1 -0
- package/chunks/spec-LVJCLNRO.js +1 -0
- package/chunks/{status-DJZSCXLA.js → status-YALP7W5Y.js} +1 -1
- package/chunks/{sync-A44KPO5R.js → sync-L7E5Y3OG.js} +1 -1
- package/chunks/{watch-I7NEY7YJ.js → watch-ELIW23EO.js} +6 -6
- package/chunks/wontfix-4L3IAWLG.js +1 -0
- package/noskills.js +1 -1
- package/package.json +1 -1
- package/chunks/block-MNFFAMEP.js +0 -1
- package/chunks/cancel-M3G3XXMU.js +0 -1
- package/chunks/chunk-NLLZQP64.js +0 -1
- package/chunks/chunk-NRCHLNQA.js +0 -3
- package/chunks/chunk-ON7NJA2P.js +0 -3
- package/chunks/chunk-Y2PH2BTY.js +0 -16
- package/chunks/claude-code-R7PCCNRZ.js +0 -1
- package/chunks/done-XDWNPZVT.js +0 -1
- package/chunks/free-MXG3ZUQY.js +0 -1
- package/chunks/kiro-3VFHKARM.js +0 -3
- package/chunks/next-LQLZL4LN.js +0 -8
- package/chunks/opencode-YE3RKOY7.js +0 -1
- package/chunks/reset-XY2HW67W.js +0 -1
- package/chunks/session-5BLO37XK.js +0 -1
- package/chunks/spec-W52NAT6U.js +0 -1
- package/chunks/wontfix-JULEBOGK.js +0 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{a as S,b as p,d as T,e as m,f,g as y}from"./chunk-JKKCV4KM.js";import{a as l}from"./chunk-OLM5RTFK.js";import"./chunk-E7UED6DA.js";import"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var k=class{capabilities=["text_generation","streaming"];provider="kiro";modelId;binary;config;constructor(e,r){this.binary=e,this.config=r,this.modelId=r.model}async generateText(e,r){let i=v(this.config,e),c=y(e.messages,e.system),o=p(this.binary,i,{signal:r,stdinData:c}),u=m(o.stderr),t=await T(o.stdout,this.modelId),d=await o.waitForExit(),s=await u,a=f("kiro",d.code,s);if(a!==null)throw a;return t}async*streamText(e,r){let i=v(this.config,e),c=y(e.messages,e.system),o=p(this.binary,i,{signal:r,stdinData:c}),u=m(o.stderr);try{let t=new TextDecoder,d=o.stdout.getReader(),s="",a=await d.read();for(;a.done!==!0;){s+=t.decode(a.value,{stream:!0});let h=s.split(`
|
|
2
|
+
`);s=h.pop()??"";for(let _ of h){let g=_.trim();if(g.length!==0){try{let A=JSON.parse(g),w=C(A);if(w!==null){yield w;continue}}catch{}yield{kind:"content_delta",textDelta:g+`
|
|
3
|
+
`}}}a=await d.read()}d.releaseLock(),s.trim().length>0&&(yield{kind:"content_delta",textDelta:s.trim()});let E=await o.waitForExit(),b=await u,x=f("kiro",E.code,b);x!==null?yield{kind:"error",error:x}:yield{kind:"message_done",stopReason:"end_turn",usage:{inputTokens:0,outputTokens:0,totalTokens:0}}}catch(t){t instanceof l?yield{kind:"error",error:t}:yield{kind:"error",error:new l(t instanceof Error?t.message:String(t),{provider:"kiro",cause:t instanceof Error?t:void 0})}}}close(){return Promise.resolve()}getRawClient(){return null}},D={provider:"kiro",async createModel(n){let e=await S("kiro",n);return new k(e,n)}},v=(n,e)=>{let r=[];r.push("--output","json"),r.push("--model",n.model),e.maxTokens!==void 0&&r.push("--max-tokens",String(e.maxTokens));let i=n.properties?.args;return i!==void 0&&r.push(...i),r},C=n=>{if(n===null||typeof n!="object")return null;let e=n;if(e.type==="content"||e.type==="text"){let r=e.text??e.content;return r!==void 0?{kind:"content_delta",textDelta:String(r)}:null}return e.type==="done"||e.type==="result"||e.done===!0?{kind:"message_done",stopReason:"end_turn",usage:{inputTokens:e.usage?.input_tokens??0,outputTokens:e.usage?.output_tokens??0,totalTokens:(e.usage?.input_tokens??0)+(e.usage?.output_tokens??0)}}:e.type==="error"?{kind:"error",error:new l(e.error?.message??e.message??"Unknown Kiro error",{provider:"kiro"})}:null};export{k as KiroModel,D as kiroFactory};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as p}from"./chunk-
|
|
1
|
+
import{a as p}from"./chunk-GOLHD4DZ.js";import{c as t,d as a,g as l,m as n,o,q as m,r as d}from"./chunk-K223KAUB.js";import{a as i}from"./chunk-2N4GTHXQ.js";import"./chunk-E7UED6DA.js";import"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var $=async b=>{let e=o({renderer:d.ansi(),sink:m.stdout()});e.writeln(t("AI Providers")),e.writeln("");let r=await p(),v=r.map(s=>[s.available?l("\u25CF"):a("\u25CB"),s.available?t(`${s.name} (${s.alias})`):a(`${s.name} (${s.alias})`),a(s.type),s.available?s.detail:a(s.detail)]);e.writeln(n(["","Provider","Type","Status"],v));let u=r.filter(s=>s.available).length;return e.writeln(a(`${u}/${r.length} providers available`)),await e.close(),i(void 0)};export{$ as main};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{c as N,d as se,e as ne,p as w,q as c,r as M,s as re,t as P,u as _}from"./chunk-4N7N37OY.js";import{b as K}from"./chunk-2X2U2VC5.js";import{A as le,f as ie,k as ae,s as W,v as oe,x as ce,z as q}from"./chunk-AQWB2PVR.js";import"./chunk-K223KAUB.js";import{a as V,b as te}from"./chunk-2N4GTHXQ.js";import{d as ue,e as j,f as de}from"./chunk-
|
|
2
|
-
`);for(let n of r)e.buffer.push(n);e.buffer.length>1e3&&e.buffer.splice(0,e.buffer.length-1e3)},
|
|
3
|
-
`),V(void 0)}let
|
|
1
|
+
import{c as N,d as se,e as ne,p as w,q as c,r as M,s as re,t as P,u as _}from"./chunk-4N7N37OY.js";import{b as K}from"./chunk-2X2U2VC5.js";import{A as le,f as ie,k as ae,s as W,v as oe,x as ce,z as q}from"./chunk-AQWB2PVR.js";import"./chunk-K223KAUB.js";import{a as V,b as te}from"./chunk-2N4GTHXQ.js";import{d as ue,e as j,f as de}from"./chunk-E7UED6DA.js";import{b as L}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var pe=()=>({tabs:[],selectedTabIndex:-1,focus:"list",running:!0});var Se=e=>e===null?"\u2014":{DISCOVERY:"DISC",DISCOVERY_REVIEW:"REVW",SPEC_DRAFT:"DRFT",SPEC_APPROVED:"APPR",EXECUTING:"EXEC",BLOCKED:"BLKD",COMPLETED:"DONE",IDLE:"IDLE"}[e]??e.slice(0,4),Te=e=>{switch(e){case"EXECUTING":return"green";case"DISCOVERY":case"DISCOVERY_REVIEW":return"cyan";case"BLOCKED":return"red";case"SPEC_DRAFT":case"SPEC_APPROVED":return"yellow";case"COMPLETED":return"dim";default:return"dim"}},v=(e,s)=>{let r=new Set(s.filter(a=>a.spec!==null).map(a=>a.spec)),n=e.map(a=>({label:a.name,badge:Se(a.phase),badgeColor:Te(a.phase),active:r.has(a.name),dimmed:a.phase==="COMPLETED"}));return n.length===0&&n.push({label:"No specs yet",dimmed:!0,selectable:!1}),n.push({label:"\u2500".repeat(20),dimmed:!0,selectable:!1}),n.push({label:"[n] New spec",badge:"+",badgeColor:"green"}),n.push({label:"[f] Idle mode",badge:"~",badgeColor:"cyan"}),n},X=(e,s,r,n)=>{let a=v(e,s),t=M.drawBox({x:n.x,y:n.y,width:n.width,height:n.height,title:"Specs",borderStyle:"rounded"}),y=P.renderList(a,r,n);return t+y};var Ie=["IDLE","DISCOVERY","REVIEW","DRAFT","APPROVED","EXECUTING","DONE","IDLE"],Me=e=>{if(e===null||e==="IDLE")return"IDLE";let r={DISCOVERY_REVIEW:"REVIEW",SPEC_DRAFT:"DRAFT",SPEC_APPROVED:"APPROVED",COMPLETED:"DONE"}[e]??e;return Ie.map(n=>n===r?c.bold(`\u2726${n}\u2726`):c.dim(n)).join("\u2192")},Ee=(e,s,r)=>{if(s===0)return c.dim("no tasks");let n=Math.round(e/s*r),a=r-n;return c.green("\u2588".repeat(n))+c.dim("\u2591".repeat(a))+` ${e}/${s}`},Y=(e,s,r)=>{let n=[];return e===null?(n.push(c.dim("No spec selected")),n.push(""),n.push(c.dim("Select a spec from the list or press [n] for new"))):e.mode==="free"?(n.push(c.bold("Mode: ")+c.cyan("IDLE")),n.push(c.dim("No active spec")),n.push(""),n.push(c.dim(`Session: ${e.sessionId}`))):(n.push(c.bold("Spec: ")+(e.spec??"unknown")),n.push(c.bold("Phase: ")+(e.phase??"unknown")),n.push(""),n.push(Me(e.phase)),n.push(""),r!==void 0&&n.push(c.bold("Progress: ")+Ee(r.completed,r.total,15)),n.push(""),n.push(c.dim(`Session: ${e.sessionId}`))),M.fillBox({x:s.x,y:s.y,width:s.width,height:s.height,title:"Monitor",borderStyle:"rounded"},n)};var z=(e,s)=>{let r=e!==null?e.mode==="free"?"Terminal (IDLE)":`Terminal (${e.spec??"?"})`:"Terminal",n=e!==null&&e.widget!==null,a=M.drawBox({x:s.x,y:s.y,width:s.width,height:s.height,title:r,borderStyle:"rounded",skipInterior:n});if(e===null||e.widget===null&&e.buffer.length===0){let S=c.dim("Waiting for output..."),B=" ".repeat(s.width-2),d="";for(let k=1;k<s.height-1;k++)d+=c.moveTo(s.y+k,s.x+1),d+=k===1?c.truncate(S,s.width-2)+" ".repeat(Math.max(0,s.width-2-c.visibleLength(S))):B;return a+d}if(e.widget!==null)return a+e.widget.render(s);let t=s.height-2,y=e.buffer.slice(-t);return M.fillBox({x:s.x,y:s.y,width:s.width,height:s.height,title:r,borderStyle:"rounded"},y)};var U=(e,s)=>({...e,tabs:[...e.tabs,s],selectedTabIndex:e.tabs.length}),me=(e,s)=>{let r=e.tabs.findIndex(t=>t.id===s);if(r===-1)return e;let n=e.tabs[r];n.process!==null&&n.process.kill();let a=e.tabs.filter(t=>t.id!==s);return{...e,tabs:a,selectedTabIndex:Math.min(e.selectedTabIndex,a.length-1)}},ge=(e,s)=>s<0||s>=e.tabs.length?e:{...e,selectedTabIndex:s},G=(e,s)=>{let r=s.split(`
|
|
2
|
+
`);for(let n of r)e.buffer.push(n);e.buffer.length>1e3&&e.buffer.splice(0,e.buffer.length-1e3)},E=e=>e.selectedTabIndex<0||e.selectedTabIndex>=e.tabs.length?null:e.tabs[e.selectedTabIndex]??null;var fe=(e,s,r)=>{if(r&&s==="c")return{type:"quit"};if(s==="tab")return{type:"toggleFocus"};if(e.focus==="list")switch(s){case"up":return{type:"navigate",direction:"up"};case"down":return{type:"navigate",direction:"down"};case"return":return{type:"select"};case"n":return{type:"newSpec"};case"f":return{type:"freeMode"};case"x":return{type:"closeTab"};case"q":return{type:"quit"};default:return{type:"none"}}return{type:"passthrough",data:s}},be=e=>({...e,focus:e.focus==="list"?"terminal":"list"}),J=(e,s,r)=>{let n=P.nextSelectableIndex(r,e.selectedTabIndex,s);return{...e,selectedTabIndex:n}},H=(e,s,r)=>e>=r.x&&e<r.x+r.width&&s>=r.y&&s<r.y+r.height,ye=(e,s,r,n)=>{let a=e.x+1,t=e.y+1;if(H(a,t,s.left)){if(e.type==="wheel")return{type:"scrollSpecs",direction:e.direction==="up"?"up":"down"};if(e.type==="mousedown"&&e.button===0){let y=e.y+1-s.left.y-1;if(y>=0&&y<r.length){let S=r[y];if(S.selectable!==!1)return S.label.includes("[n]")?{type:"clickNewSpec"}:S.label.includes("[f]")?{type:"clickFreeMode"}:{type:"clickSpec",index:y}}}return{type:"none"}}return H(a,t,s.rightBottom)?e.type==="wheel"?{type:"scrollTerminal",direction:e.direction==="up"?"up":"down"}:n!=="terminal"?{type:"clickTerminal"}:{type:"forwardMouse",event:e}:H(a,t,s.rightTop)?{type:"clickMonitor"}:{type:"none"}};var Be=async e=>{let s=e?.includes("--dry-run")??!1,r=L.process.cwd();if(!await le(r))return console.error("noskills is not initialized. Run:",K(),"init"),te({exitCode:1});let a=(await ae(r)).map(i=>({name:i.name,phase:i.state.phase,hasActiveSession:!1})),t=pe(),{cols:y,rows:S}=w.getTerminalSize(),B={leftWidth:.25,rightTopHeight:.35},d=re.calculateLayout(y,S,B),k=new TextEncoder,g=i=>{L.process.writeToStdout(k.encode(i))};if(s){g(w.clearScreenSeq());let i=` noskills manager | ${a.length} spec(s) | ${K()} | Ctrl+C to quit`;g(c.moveTo(d.statusBar.y,d.statusBar.x)),g(c.inverse(c.truncate(i,d.statusBar.width))),g(X(a,t.tabs,t.selectedTabIndex,d.left));let l=E(t);return g(Y(l,d.rightTop)),g(z(l,d.rightBottom)),g(c.moveTo(S,1)),g(`
|
|
3
|
+
`),V(void 0)}let D=new de,F=null,Q=async()=>{for(let i of["claude","claude-code"])try{if(await ue`which ${i}`.noThrow().code()===0)return i}catch{}return"claude"},T=v(a,t.tabs);t.selectedTabIndex=P.nextSelectableIndex(T,-1,"down");let A=async()=>{let i=q();await W(r,{id:i,spec:null,mode:"free",phase:null,pid:0,startedAt:new Date().toISOString(),lastActiveAt:new Date().toISOString(),tool:"claude-code"});let l=d.rightBottom.width-2,p=d.rightBottom.height-2,o=new _(p,l),f={id:`tab-${i}`,spec:null,mode:"free",sessionId:i,process:null,buffer:[],widget:o,active:!0,phase:null};try{let m=await Q(),b=await j({command:m,cwd:r,env:{...L.env.toObject(),NOSKILLS_SESSION:i},cols:l,rows:p});f.process=b,D.add(f.id,b),b.onData(I=>{o.write(I),G(f,I),F?.()})}catch(m){let b=m instanceof Error?m.message:String(m);o.write(`[noskills manager] Failed to spawn claude: ${b}\r
|
|
4
4
|
`),o.write(`Is Claude Code installed? Set command in manifest.yml\r
|
|
5
|
-
`)}Object.assign(t,U(t,f)),t.focus="terminal",T=v(a,t.tabs)},Z=async i=>{let l=t.tabs.find(h=>h.spec===i);if(l!==void 0){let h=t.tabs.indexOf(l);Object.assign(t,ge(t,h)),t.focus="terminal";return}let p=null;try{p=(await ie(r,i)).phase}catch{}let o=q();await W(r,{id:o,spec:i,mode:"spec",phase:p,pid:0,startedAt:new Date().toISOString(),lastActiveAt:new Date().toISOString(),tool:"claude-code"});let f=d.rightBottom.width-2,m=d.rightBottom.height-2,b=new _(m,f),
|
|
6
|
-
`)}Object.assign(t,U(t,
|
|
5
|
+
`)}Object.assign(t,U(t,f)),t.focus="terminal",T=v(a,t.tabs)},Z=async i=>{let l=t.tabs.find(h=>h.spec===i);if(l!==void 0){let h=t.tabs.indexOf(l);Object.assign(t,ge(t,h)),t.focus="terminal";return}let p=null;try{p=(await ie(r,i)).phase}catch{}let o=q();await W(r,{id:o,spec:i,mode:"spec",phase:p,pid:0,startedAt:new Date().toISOString(),lastActiveAt:new Date().toISOString(),tool:"claude-code"});let f=d.rightBottom.width-2,m=d.rightBottom.height-2,b=new _(m,f),I={id:`tab-${o}`,spec:i,mode:"spec",sessionId:o,process:null,buffer:[],widget:b,active:!0,phase:p};try{let h=await Q(),R=await j({command:h,cwd:r,env:{...L.env.toObject(),NOSKILLS_SESSION:o},cols:f,rows:m});I.process=R,D.add(I.id,R),R.onData(ee=>{b.write(ee),G(I,ee),F?.()})}catch(h){let R=h instanceof Error?h.message:String(h);b.write(`[noskills manager] Failed to spawn claude for spec "${i}": ${R}\r
|
|
6
|
+
`)}Object.assign(t,U(t,I)),t.focus="terminal",T=v(a,t.tabs)};g(w.enterAlternateScreen()),g(w.hideCursorSeq()),g(w.clearScreenSeq()),g(N.enableMouse());let u=new Set(["specs","monitor","terminal","status"]),C=()=>{let i=E(t),l=[];if(l.push(w.hideCursorSeq()),u.has("status")||u.size===0){let p=t.focus==="list"?"LIST":"TERM",o=` noskills manager | ${a.length} spec(s) | ${t.tabs.length} tab(s) | [${p}] Tab: toggle | q: quit | n: new | f: free`;l.push(c.moveTo(d.statusBar.y,d.statusBar.x)),l.push(c.inverse(c.truncate(o,d.statusBar.width)+" ".repeat(Math.max(0,d.statusBar.width-c.visibleLength(o)))))}u.has("specs")&&l.push(X(a,t.tabs,t.selectedTabIndex,d.left)),u.has("monitor")&&l.push(Y(i,d.rightTop)),u.has("terminal")&&l.push(z(i,d.rightBottom)),l.push(w.showCursorSeq()),u.clear(),g(l.join(""))},x=()=>{u.add("specs"),u.add("monitor"),u.add("terminal"),u.add("status")},$=!1;F=()=>{u.add("terminal"),!$&&($=!0,setTimeout(()=>{$=!1,t.running&&C()},16))},x(),C();let he=async i=>{let l=ye(i,d,T,t.focus);switch(l.type){case"clickSpec":{t.focus="list",t.selectedTabIndex=l.index;let p=a.find(o=>o.name===T[l.index]?.label)?.name;if(p!==void 0){await Z(p),x();return}u.add("specs"),u.add("monitor"),u.add("status");break}case"clickNewSpec":case"clickFreeMode":{t.focus="list",await A(),x();return}case"clickTerminal":{t.focus="terminal",u.add("status");break}case"clickMonitor":{t.focus="list",u.add("status");break}case"scrollSpecs":{Object.assign(t,J(t,l.direction,T)),u.add("specs"),u.add("monitor");break}case"scrollTerminal":{let p=E(t);if(p?.process!==null&&p!==null){let o=l.direction==="up"?"\x1B[A":"\x1B[B";p.process?.write(o.repeat(3))}break}case"forwardMouse":{t.focus="terminal",u.add("status");let p=E(t);if(p?.process!==null&&p!==null){let o=i.x+1-d.rightBottom.x,f=i.y+1-d.rightBottom.y,m=i.button;i.type==="mousemove"&&(m|=32),i.type==="wheel"&&(m=64|(i.direction==="down"?1:0)),i.shift&&(m|=4),i.ctrl&&(m|=16);let b=i.type==="mouseup"?"m":"M";p.process?.write(`\x1B[<${m};${o};${f}${b}`)}break}case"none":break}};try{await se(async()=>{for await(let i of ne(L.process.stdin)){if(!t.running)break;if(i.kind==="mouse"){await he(i.event),u.size>0&&C();continue}let l=i.event,p=fe(t,l.name,l.ctrl);switch(p.type){case"quit":t.running=!1;break;case"toggleFocus":Object.assign(t,be(t)),u.add("status");break;case"navigate":Object.assign(t,J(t,p.direction,T)),u.add("specs"),u.add("monitor"),u.add("terminal");break;case"freeMode":await A(),x();break;case"newSpec":await A(),x();break;case"select":{let o=T[t.selectedTabIndex];if(o===void 0)break;let f=o.label;if(f.includes("[n]")||f.includes("[f]"))await A();else{let m=a.find(b=>b.name===f)?.name;m!==void 0&&await Z(m)}x();break}case"closeTab":{let o=E(t);o!==null&&(o.process!==null&&D.remove(o.id),await oe(r,o.sessionId),Object.assign(t,me(t,o.id)),T=v(a,t.tabs),t.focus="list"),x();break}case"passthrough":{let o=E(t);o?.process!==null&&o!==null&&o.process?.write(new TextDecoder().decode(l.raw));break}case"none":break}if(!t.running)break;u.size>0&&C()}})}finally{await D.killAll(),D.forceKillAll(),await ce(r),g(N.disableMouse()),g(w.showCursorSeq()),g(w.exitAlternateScreen())}return V(void 0)};export{Be as main};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e,f}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e,f}from"./chunk-E7UED6DA.js";import"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";export{b as CommandBuilder,a as CommandError,f as ProcessGroup,d as exec,c as parseCommand,e as spawnPty};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{b as ye}from"./chunk-MSJSMJL2.js";import{a as ge,b as he,c as Se,d as K}from"./chunk-IZMNMJYU.js";import{a as Y,b as B,d as X}from"./chunk-6OQNXZAN.js";import{a as z}from"./chunk-7UX6WIXX.js";import"./chunk-OCDUS26F.js";import{a as ve,b as we,d as C}from"./chunk-JCIANZPY.js";import{a as be}from"./chunk-WWPJMOT3.js";import{a as _}from"./chunk-RTD42HPS.js";import{a as Pe,b as Ae,c as Fe,d as Ee}from"./chunk-ESTTTPON.js";import{h as V}from"./chunk-TI4CLT2V.js";import{c as j}from"./chunk-2X2U2VC5.js";import{a as xe,b as Ie,c as Z,d as ee,e as De,f as te,g as O,h as se,i as q,j as ne,k as Ce,m as ke,o as ie,p as Re}from"./chunk-JNVM2KAE.js";import{A as fe,a as ae,d as E,f as ce,g as le,j as de,k as pe,l as ue,p as me,r as M,w as G}from"./chunk-AQWB2PVR.js";import{a as N,b as A}from"./chunk-2N4GTHXQ.js";import{b as y}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var Te=a=>a.split(`
|
|
2
|
+
`).map(e=>e.replace(/^[-*]\s+/,"").trim()).filter(e=>e.length>0&&!e.startsWith("#")),Le=async(a,e)=>{let r=[],n=(e.startsWith(a)?e.slice(a.length+1):e).split("/");n.pop();for(let s=n.length;s>=0;s--){let c=`${s===0?a:`${a}/${n.slice(0,s).join("/")}`}/.folder-rules.md`,i=s===0?".":n.slice(0,s).join("/");try{let l=await y.fs.readTextFile(c),d=Te(l);for(let o of d)r.push({folder:i,rule:o})}catch{}}return r},re=async(a,e)=>{let r=new Set,p=[];for(let n of e){let s=await Le(a,n);for(let t of s){let c=`${t.folder}::${t.rule}`;r.has(c)||(r.add(c),p.push(t))}}return p};var ot=async a=>{let e=y.process.cwd(),r=ve(a),p=we(a);if(!await fe(e))return await C({error:`noskills not initialized. Run: ${j("init")}`},r),A({exitCode:1});let n=null;for(let m of p)m.startsWith("--answer=")&&(n=m.slice(9));let s=le(p),t;try{t=await ce(e,s)}catch(m){let f=m instanceof Error?m.message:String(m);return await C({error:f},r),A({exitCode:1})}if(s===null&&t.phase!=="IDLE"&&t.phase!=="COMPLETED")return await C({error:"Error: --spec=<name> is required. Use `noskills spec list` to see available specs."},r),A({exitCode:1});let c=await ue(e);if(c?.command!==void 0){let{setCommandPrefix:m}=await import("./cmd-NWSNAUKC.js");m(c.command)}if(c===null)return await C({error:"No config found"},r),A({exitCode:1});if(t.spec!==null&&t.phase!=="IDLE"&&t.phase!=="COMPLETED"){let m=`${e}/${E.specDir(t.spec)}`;try{await y.fs.stat(m)}catch{return await C({error:!0,message:`Active spec '${t.spec}' directory not found. Files may have been deleted manually.`,suggestion:`Run \`${j("reset")}\` to return to idle, or \`${j("cancel")}\` to mark as cancelled.`},r),A({exitCode:1})}}let i=ye(p,c);t.phase==="DISCOVERY"&&t.discovery.audience!==i&&(t={...t,discovery:{...t.discovery,audience:i}});let d=(await me(e)).filter(m=>c.concerns.includes(m.id));if(n!==null){let m=await V(e),f=await Ne(e,t,c,d,n,m);await M(e,f);let g={...f,lastCalledAt:new Date().toISOString()};await M(e,g);let R=y.env.get("NOSKILLS_SESSION")??null;R!==null&&await G(e,R,g.phase);let H=await Y(e),L=B(H,g.phase),U=g.spec!==null?await _(e,g.spec):null,v=await Oe(e,g),k=await re(e,v),b=X(c?.tools??[]),D=await V(e),I=await K(g,d,L,c,U,k,void 0,b,D),S=n.trim().toLowerCase()==="save",P=g.phase===t.phase;if(S&&P&&(g.phase==="SPEC_DRAFT"||g.phase==="SPEC_APPROVED")){let Q=g.phase==="SPEC_DRAFT"?"Spec draft saved. The spec stays in DRAFT and can be reviewed by anyone. Other users can add ACs (`ac add`), notes (`note add`), or tasks (`task add`) while in draft. When ready, any user can approve with `noskills spec <name> approve`.":'Spec is approved and parked. Others can still add ACs or notes. When ready, run `noskills next --answer="start"` to begin execution.',$e={...I,instruction:Q,saved:!0};return await C($e,r),N(void 0)}return await C(I,r),N(void 0)}let o={...t,lastCalledAt:new Date().toISOString()};await M(e,o);let u=y.env.get("NOSKILLS_SESSION")??null;u!==null&&await G(e,u,o.phase);let h=await Y(e),w=B(h,o.phase),x=o.spec!==null?await _(e,o.spec):null,W=await Oe(e,o),$=await re(e,W),F;o.phase==="IDLE"&&(F={existingSpecs:(await pe(e)).map(f=>({name:f.name,phase:f.state.phase,iteration:f.state.execution.iteration,detail:f.state.phase==="EXECUTING"?`${f.state.execution.completedTasks.length} tasks done, iteration ${f.state.execution.iteration}`:f.state.phase==="SPEC_DRAFT"?"awaiting approval":f.state.phase==="COMPLETED"?"completed":void 0})),rulesCount:w.length});let J=X(c?.tools??[]),T=await V(e),oe=await K(o,d,w,c,x,$,F,J,T);return await C(oe,r),N(void 0)},Ne=async(a,e,r,p,n,s)=>{switch(e.phase){case"DISCOVERY":{let t=e.specDescription!==null&&e.specDescription.length>0,c=e.discovery.mode;if(c===void 0&&t)return["full","validate","technical-depth","ship-fast","explore"].includes(n)?Z(e,n):Z(e,"full");let i=e.discovery.premisesCompleted===!0;if(c!==void 0&&!i){try{let u=JSON.parse(n);if(u!==null&&typeof u=="object"&&"premises"in u){let w=u.premises.map(x=>({text:x.text??"",agreed:x.agreed??!0,revision:x.revision,user:s?.name??"Unknown User",timestamp:new Date().toISOString()}));return ee(e,w)}}catch{}return ee(e,[])}let l=e.discovery.audience==="agent",d=null;try{let u=JSON.parse(n);typeof u=="object"&&u!==null&&!Array.isArray(u)&&(l?ge.map(x=>x.id).every(x=>x in u)&&(d=u):d=u)}catch{}let o=e;if(d!==null)for(let[u,h]of Object.entries(d))typeof h=="string"&&h.length>0&&(o=O(o,u,h,s));else{let u=he(p),h=o.discovery.currentQuestion,w=u[h];if(w===void 0)return e;o=O(o,w.id,n,s),o=Ce(o)}return Se(o.discovery.answers)&&(o=se(o)),o}case"DISCOVERY_REVIEW":{let t=n.trim().toLowerCase();if(t==="approve"){let i=z(e.discovery.answers);return i.detected&&i.proposals.length>=2?ne(e):e.discovery.mode!==void 0?ne(e):q(e)}if(t==="split")return await Me(a,e);if(t==="keep"){let i=ie(e,{id:`decision-split-keep-${Date.now()}`,question:"Split spec into separate areas?",choice:"Chose to keep as single spec despite multiple areas detected",promoted:!1,timestamp:new Date().toISOString()});return q(i)}let c=e.discovery.alternativesPresented===!0;if(e.discovery.approved&&!c){let i;if(t==="skip"||t==="none")i=te(e);else{let l=!1;try{let d=JSON.parse(n);if(d!==null&&typeof d=="object"&&"approach"in d){let o={id:String(d.approach),name:String(d.name??d.approach),summary:String(d.summary??""),effort:String(d.effort??""),risk:String(d.risk??""),user:s?.name??"Unknown User",timestamp:new Date().toISOString()};i=De(e,o),l=!0}}catch{}l||(i=te(e))}return q(i)}try{let i=JSON.parse(n);if(typeof i.revise=="object"&&i.revise!==null){let l=e;for(let[d,o]of Object.entries(i.revise))typeof o=="string"&&o.length>0&&(l=O(l,d,o,s));return l}}catch{}return e}case"SPEC_DRAFT":{if(n.trim().toLowerCase()==="save")return e;if(e.classification===null){let t,c=n.trim().toLowerCase();if(c==="none"||c==="skip")t={involvesWebUI:!1,involvesCLI:!1,involvesPublicAPI:!1,involvesMigration:!1,involvesDataHandling:!1};else try{let l=JSON.parse(n);t={involvesWebUI:l.involvesWebUI===!0||l.involvesUI===!0,involvesCLI:l.involvesCLI===!0||l.involvesUI===!0,involvesPublicAPI:l.involvesPublicAPI===!0,involvesMigration:l.involvesMigration===!0,involvesDataHandling:l.involvesDataHandling===!0}}catch{t={involvesWebUI:!1,involvesCLI:!1,involvesPublicAPI:!1,involvesMigration:!1,involvesDataHandling:!1}}let i={...e,classification:t};try{await be(a,i,p)}catch{}return i}try{let t=JSON.parse(n);if(typeof t.refinement=="string"&&t.refinement.length>0){let c=t.refinement;if(e.spec!==null){let i=`${a}/${E.specFile(e.spec)}`,l=await y.fs.readTextFile(i);if(c.includes("task-")){let o=je(c).map(w=>`- [ ] ${w}`).join(`
|
|
3
|
+
`),u=/## Tasks\n\n([\s\S]*?)(?=\n## |\n*$)/,h=l.replace(u,`## Tasks
|
|
4
|
+
|
|
5
|
+
${o}
|
|
6
|
+
`);await y.fs.writeTextFile(i,h)}}return e}}catch{}return e}case"SPEC_APPROVED":{if(n.trim().toLowerCase()==="save")return e;let t=ke(e);return t.spec!==null&&(await Pe(a,t.spec,"executing"),await Ee(a,t.spec,"executing")),t}case"EXECUTING":{if(!e.execution.awaitingStatusReport){let t={...e,execution:{...e.execution,lastProgress:n}};if(r.verifyCommand!==null&&r.verifyCommand!==void 0&&r.verifyCommand.length>0){let c=await Ve(a,r.verifyCommand);if(t={...t,execution:{...t.execution,lastVerification:c}},!c.passed)return t}return t={...t,execution:{...t.execution,awaitingStatusReport:!0}},t}return await qe(a,e,n,p)}case"BLOCKED":{let t=e.execution.lastProgress??"Unknown",c={id:`d${e.decisions.length+1}`,question:t.replace(/^BLOCKED:\s*/,""),choice:n,promoted:!1,timestamp:new Date().toISOString()},i=ie(e,c);return i=xe(i,"EXECUTING"),i={...i,execution:{...i.execution,lastProgress:`Resolved: ${n}`}},i}default:return e}},Me=async(a,e)=>{let r=z(e.discovery.answers);if(!r.detected||r.proposals.length===0)return e;let p=[];for(let s of r.proposals){let t=`${a}/${E.specDir(s.name)}`;await y.fs.mkdir(t,{recursive:!0});let c=e.discovery.answers.filter(d=>s.relevantAnswers.includes(d.questionId)),l=Ie(ae(),s.name,`spec/${s.name}`);for(let d of c)l=O(l,d.questionId,d.answer);l=se(l),await de(a,s.name,l),p.push(s.name)}return Re(e,"cancelled",`Split into: ${p.join(", ")}`)},je=a=>a.split(/(?=task-\d+:)/).map(e=>e.replace(/[,;\n\s]+$/,"").trim()).filter(e=>/^task-\d+:/.test(e)),qe=async(a,e,r,p)=>{let n;try{n=JSON.parse(r)}catch{return{...e,execution:{...e.execution,lastProgress:r,awaitingStatusReport:!1}}}let s=e;if(e.execution.debt!==null&&e.execution.debt.items.length>0&&typeof e.execution.debt.items[0]=="string"){let k=e.execution.debt.items.map((I,S)=>({id:`legacy-${S+1}`,text:I,since:e.execution.debt.fromIteration}));s={...e,execution:{...e.execution,debt:{...e.execution.debt,items:k}}};let b=new TextEncoder,D=y.process.stderr.getWriter();await D.write(b.encode(`noskills: migrated legacy string[] debt to DebtItem[] format
|
|
7
|
+
`)),D.releaseLock()}let t=new Set(["mandatory-tests","mandatory-docs"]),i=(n.na??[]).filter(v=>t.has(v));if(i.length>0)return{...s,execution:{...s.execution,lastProgress:`REJECTED: Tests and documentation ACs require explicit justification to mark as N/A. Explain why tests or docs are not needed for this spec. Rejected IDs: ${i.join(", ")}`,awaitingStatusReport:!0}};let l=n.completed??[],d=new Set(l),o=n.na??[],u=new Set(o),h=n.newIssues??[],w=n.remaining??[],x=n.blocked??[],W=s.execution.debt?.unaddressedIterations??0,$=s.execution.debt!==null?s.execution.debt.items.filter(v=>!d.has(v.id)&&!u.has(v.id)):[],F=s.execution.debtCounter??0,J=h.map((v,k)=>({id:`debt-${F+k+1}`,text:v,since:s.execution.iteration})),T=[...$,...J],m=w.length===0&&x.length===0&&h.length===0||T.length===0?null:{items:T,fromIteration:s.execution.debt?.fromIteration??s.execution.iteration,unaddressedIterations:$.length>0?W+1:1},f=[...new Set([...s.execution.naItems??[],...o])],g=[];l.length>0&&g.push(`Completed: ${l.join(", ")}`),o.length>0&&g.push(`N/A: ${o.join(", ")}`);let R=g.length>0?g.join("; "):"Status report submitted",H=s.execution.lastVerification===null||s.execution.lastVerification.passed===!0,L=m===null&&H,U=F+h.length;if(L&&s.spec!==null){let v=await _(a,s.spec);if(v!==null){let k=s.execution.completedTasks??[],b=new Set(k),D=[];try{let S=JSON.parse(s.execution.lastProgress??"");Array.isArray(S.completed)&&(D=S.completed.filter(P=>!b.has(P)&&v.tasks.some(Q=>Q.id===P)))}catch{}if(D.length===0){let S=v.tasks.find(P=>!b.has(P.id));S!==void 0&&(D=[S.id])}let I=[];for(let S of D)await Ae(a,s.spec,S),await Fe(a,s.spec,S,"done"),I.push(S);if(I.length>0){let S=I.length===1?`Task ${I[0]} accepted`:`Tasks ${I.join(", ")} accepted`;return{...s,execution:{...s.execution,lastProgress:`${S}: ${R}`,awaitingStatusReport:!1,debt:m,completedTasks:[...k,...I],debtCounter:U,naItems:f}}}}}return{...s,execution:{...s.execution,lastProgress:L?R:`Task not accepted \u2014 remaining items must be addressed first. ${R}`,awaitingStatusReport:!1,debt:m,debtCounter:U,naItems:f}}},Ve=async(a,e)=>{try{let{execSync:r}=await import("node:child_process"),p=r(e,{cwd:a,encoding:"utf-8",timeout:6e4,stdio:["pipe","pipe","pipe"]});return{passed:!0,output:String(p).slice(0,4e3),timestamp:new Date().toISOString()}}catch(r){let p=r,n=((p.stdout??"")+(p.stderr??"")).slice(0,4e3);return p.status!==void 0?{passed:!1,output:n||"Verification failed with no output",timestamp:new Date().toISOString()}:{passed:!1,output:`Verification command failed to execute: ${r instanceof Error?r.message:String(r)}`,timestamp:new Date().toISOString()}}},Oe=async(a,e)=>{let r=[...e.execution.modifiedFiles??[]],p=await _e(a);return[...new Set([...r,...p])]},_e=async a=>{let e=`${a}/${E.stateDir}/files-changed.jsonl`;try{let p=(await y.fs.readTextFile(e)).trim().split(`
|
|
8
|
+
`).filter(Boolean),n=[];for(let s of p)try{let t=JSON.parse(s);n.includes(t.file)||n.push(t.file)}catch{}return n}catch{return[]}};export{Ne as handleAnswer,ot as main,je as parseRefinementTasks};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{c as u}from"./chunk-
|
|
1
|
+
import{c as u}from"./chunk-JKKCV4KM.js";import{a as i,e as m}from"./chunk-OLM5RTFK.js";import"./chunk-E7UED6DA.js";import"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var p="http://localhost:11434",d=class{capabilities=["text_generation","streaming","vision"];provider="ollama";modelId;baseUrl;config;constructor(e,o){this.baseUrl=e,this.config=o,this.modelId=o.model}async generateText(e,o){let s=g(this.config,e,!1);try{let t=await fetch(`${this.baseUrl}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s),signal:o});if(!t.ok)throw await f(t);let r=await t.json();return h(r,this.modelId)}catch(t){throw t instanceof i?t:new i(t instanceof Error?t.message:String(t),{provider:"ollama",cause:t instanceof Error?t:void 0})}}async*streamText(e,o){let s=g(this.config,e,!0);try{let t=await fetch(`${this.baseUrl}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s),signal:o});if(!t.ok){yield{kind:"error",error:await f(t)};return}if(t.body===null){yield{kind:"error",error:new i("No response body",{provider:"ollama"})};return}for await(let r of u(t.body)){let l=k(r);l!==null&&(yield l)}}catch(t){t instanceof i?yield{kind:"error",error:t}:yield{kind:"error",error:new i(t instanceof Error?t.message:String(t),{provider:"ollama",cause:t instanceof Error?t:void 0})}}}close(){return Promise.resolve()}getRawClient(){return null}},v={provider:"ollama",createModel(n){let e=n.properties?.baseUrl??p;return Promise.resolve(new d(e,n))}},g=(n,e,o)=>{let s=y(e.messages,e.system),t={model:n.model,messages:s,stream:o},r={};return e.temperature!==void 0&&(r.temperature=e.temperature),e.maxTokens!==void 0&&(r.num_predict=e.maxTokens),e.topP!==void 0&&(r.top_p=e.topP),e.stopWords!==void 0&&(r.stop=e.stopWords),Object.keys(r).length>0&&(t.options=r),e.responseFormat!==void 0&&(e.responseFormat.type==="json_schema"?t.format=e.responseFormat.jsonSchema:e.responseFormat.type==="json_object"&&(t.format="json")),t},y=(n,e)=>{let o=[];e!==void 0&&o.push({role:"system",content:e});for(let s of n){if(s.role==="system"){let a=[];for(let c of s.content)c.kind==="text"&&a.push(c.text);o.push({role:"system",content:a.join(`
|
|
2
2
|
`)});continue}let t=[],r=[];for(let a of s.content)a.kind==="text"?t.push(a.text):a.kind==="image"&&a.image.url!==void 0&&r.push(a.image.url);let l={role:s.role==="tool"?"user":s.role,content:t.join(`
|
|
3
3
|
`)};r.length>0&&(l.images=r),o.push(l)}return o},h=(n,e)=>{let o=[];return n.message?.content!==void 0&&o.push({kind:"text",text:n.message.content}),{content:o,stopReason:n.done_reason==="length"?"max_tokens":"end_turn",usage:{inputTokens:n.prompt_eval_count??0,outputTokens:n.eval_count??0,totalTokens:(n.prompt_eval_count??0)+(n.eval_count??0)},modelId:e,rawResponse:n}},k=n=>{if(n===null||typeof n!="object")return null;let e=n;return e.done===!0?{kind:"message_done",stopReason:e.done_reason==="length"?"max_tokens":"end_turn",usage:{inputTokens:e.prompt_eval_count??0,outputTokens:e.eval_count??0,totalTokens:(e.prompt_eval_count??0)+(e.eval_count??0)}}:e.message?.content!==void 0&&e.message.content.length>0?{kind:"content_delta",textDelta:e.message.content}:e.response!==void 0&&e.response.length>0?{kind:"content_delta",textDelta:e.response}:null},f=async n=>{let e;try{e=(await n.json()).error??`Ollama HTTP ${n.status}`}catch{e=`Ollama HTTP ${n.status}: ${n.statusText}`}return m("ollama",n.status,new Error(e))};export{d as OllamaModel,v as ollamaFactory};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as h,b as p,c as S,d as k,e as g,f as m,g as f}from"./chunk-JKKCV4KM.js";import{a as c}from"./chunk-OLM5RTFK.js";import"./chunk-E7UED6DA.js";import"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var y=class{capabilities=["text_generation","streaming"];provider="opencode";modelId;binary;config;constructor(e,r){this.binary=e,this.config=r,this.modelId=r.model}async generateText(e,r){let o=w(this.config,e,"json"),i=f(e.messages,e.system),s=p(this.binary,o,{signal:r,stdinData:i}),l=g(s.stderr),t=await k(s.stdout,this.modelId),u=await s.waitForExit(),a=await l,d=m("opencode",u.code,a);if(d!==null)throw d;return t}async*streamText(e,r){let o=w(this.config,e,"stream-json"),i=f(e.messages,e.system),s=p(this.binary,o,{signal:r,stdinData:i}),l=g(s.stderr);try{for await(let d of S(s.stdout)){let x=v(d);x!==null&&(yield x)}let t=await s.waitForExit(),u=await l,a=m("opencode",t.code,u);a!==null&&(yield{kind:"error",error:a})}catch(t){t instanceof c?yield{kind:"error",error:t}:yield{kind:"error",error:new c(t instanceof Error?t.message:String(t),{provider:"opencode",cause:t instanceof Error?t:void 0})}}}close(){return Promise.resolve()}getRawClient(){return null}},b={provider:"opencode",async createModel(n){let e=await h("opencode",n);return new y(e,n)}},w=(n,e,r)=>{let o=["--output-format",r];o.push("--model",n.model),e.maxTokens!==void 0&&o.push("--max-tokens",String(e.maxTokens));let i=n.properties?.args;return i!==void 0&&o.push(...i),o},v=n=>{if(n===null||typeof n!="object")return null;let e=n;if(e.type==="content_block_delta"||e.type==="assistant"){let r=e.delta?.text??e.message?.content?.[0]?.text;return r!==void 0?{kind:"content_delta",textDelta:r}:null}return e.type==="result"||e.done===!0?{kind:"message_done",stopReason:"end_turn",usage:{inputTokens:e.usage?.input_tokens??0,outputTokens:e.usage?.output_tokens??0,totalTokens:(e.usage?.input_tokens??0)+(e.usage?.output_tokens??0)}}:e.type==="error"?{kind:"error",error:new c(e.error?.message??"Unknown OpenCode error",{provider:"opencode"})}:e.content!==void 0&&typeof e.content=="string"?{kind:"content_delta",textDelta:e.content}:null};export{y as OpenCodeModel,b as openCodeFactory};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{e as T}from"./chunk-
|
|
1
|
+
import{e as T}from"./chunk-6OQNXZAN.js";import{b as v}from"./chunk-2X2U2VC5.js";import{d as y,l as F}from"./chunk-AQWB2PVR.js";import{c as h,d as m,f as w,g as I,o as P,q as S,r as C}from"./chunk-K223KAUB.js";import{a as $,b as g}from"./chunk-2N4GTHXQ.js";import{b as f}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var q=r=>{let e=r;if(typeof e?.name!="string"||e.name.length===0)throw new Error("Pack manifest must have a non-empty 'name' field");if(typeof e?.version!="string"||e.version.length===0)throw new Error("Pack manifest must have a non-empty 'version' field");if(typeof e?.description!="string"||e.description.length===0)throw new Error("Pack manifest must have a non-empty 'description' field");return e},U=()=>({installed:[]});var B={name:"typescript",version:"1.0.0",description:"TypeScript best practices",tags:["typescript","types"],rules:["rules/use-strict-types.md","rules/no-any.md","rules/prefer-const.md"],concerns:["concerns/ts-quality.json"]};var L={id:"ts-quality",name:"TypeScript Quality",description:"Enforces TypeScript best practices",extras:[{questionId:"verification",text:"Does the code pass strict TypeScript checks (noEmit, strict mode)?"}],specSections:[],reminders:["Run tsc --noEmit before reporting task complete"],acceptanceCriteria:["TypeScript strict mode passes with zero errors"]};var _={name:"react",version:"1.0.0",description:"React component conventions",tags:["react","frontend"],rules:["rules/component-structure.md","rules/prefer-function-components.md","rules/state-management.md"]};var J={name:"security",version:"1.0.0",description:"Security audit rules",tags:["security","audit"],rules:["rules/no-secrets-in-code.md","rules/validate-input.md","rules/no-eval.md"],concerns:["concerns/security-audit.json"]};var H={id:"security-audit",name:"Security Audit",description:"Security-focused review for every spec",extras:[{questionId:"verification",text:"Has the change been reviewed for injection, XSS, CSRF, and auth bypass?"},{questionId:"scope_boundary",text:"What security boundaries must NOT be crossed?"}],specSections:["Security Review"],reminders:["Check for hardcoded secrets, unsanitized input, and missing auth checks"],acceptanceCriteria:["No hardcoded secrets","All user input validated","Auth checks present on protected routes"]};var ee={"use-strict-types":"Prefer explicit types over inference for function params and returns","no-any":"Never use 'any'. Use 'unknown' when type is genuinely unknown.","prefer-const":"Use const by default, let only when reassignment is needed"},ne={"component-structure":"One component per file. Name file same as component.","prefer-function-components":"Use function components with hooks. No class components.","state-management":"Keep state as close to where it's used as possible."},te={"no-secrets-in-code":"Never hardcode API keys, passwords, or tokens","validate-input":"Validate and sanitize all user input at API boundaries","no-eval":"Never use eval(), new Function(), or equivalent dynamic code execution"},se={manifest:B,ruleContents:ee,concernContents:[L]},re={manifest:_,ruleContents:ne,concernContents:[]},ie={manifest:J,ruleContents:te,concernContents:[H]},x=new Map([["typescript",se],["react",re],["security",ie]]);var K=".eser/packs.json",j=3e4,Ee=async r=>{let e=r?.[0];if(e==="list")return await oe();if(e==="install")return await ce(r?.slice(1));if(e==="uninstall")return await le(r?.slice(1));if(e==="inspect")return await de(r?.slice(1));if(e==="search")return await ue(r?.slice(1));let n=v(),i=P({renderer:C.ansi(),sink:S.stdout()});return i.writeln(`Usage: ${n} pack <list | install <name> | uninstall <name> | inspect <name> | search <query>>`),await i.close(),$(void 0)},D=async r=>{let e=`${r}/${K}`;try{let n=await f.fs.readTextFile(e);return JSON.parse(n)}catch{return U()}},N=async(r,e)=>{let n=`${r}/${K}`;await f.fs.mkdir(`${r}/.eser`,{recursive:!0}),await f.fs.writeTextFile(n,JSON.stringify(e,null,2)+`
|
|
2
2
|
`)},R=r=>x.get(r),M=r=>{let e=r.replace(/^github:/,"").replace(/^gh:/,""),n=e.indexOf("#");if(n===-1)return null;let i=e.slice(0,n),t=e.slice(n+1),l=i.indexOf("/");if(l===-1)return null;let u=i.slice(0,l),c=i.slice(l+1);return u.length===0||c.length===0||t.length===0?null:{owner:u,repo:c,ref:"main",packPath:t}},z=async r=>{let e=M(r);if(e===null)throw new Error(`Invalid pack specifier: ${r}. Expected format: github:owner/repo#pack-name`);let n=`https://raw.githubusercontent.com/${e.owner}/${e.repo}/${e.ref}/packs/${e.packPath}/pack.json`,i=await globalThis.fetch(n,{signal:AbortSignal.timeout(j)});if(!i.ok)throw new Error(`Could not fetch pack from ${r}. HTTP ${i.status}`);let t=JSON.parse(await i.text());return q(t)},E=async(r,e)=>{let n=M(r);if(n===null)throw new Error(`Invalid pack specifier: ${r}`);let i=`https://raw.githubusercontent.com/${n.owner}/${n.repo}/${n.ref}/packs/${n.packPath}/${e}`,t=await globalThis.fetch(i,{signal:AbortSignal.timeout(j)});if(!t.ok)throw new Error(`Could not fetch ${e} from ${r}. HTTP ${t.status}`);return await t.text()},W=async r=>{let e=`${r}/${y.concernsDir}`,n=0;try{for await(let i of f.fs.readDir(e))if(i.isFile&&i.name.endsWith(".json")){let t=i.name.match(/^(\d+)-/);if(t!==null){let l=parseInt(t[1],10);l>n&&(n=l)}}}catch{}return n+1},A=async(r,e,n)=>{let i=[],t=[],l=[],u=`${r}/${y.rulesDir}`;await f.fs.mkdir(u,{recursive:!0});for(let[p,o]of Object.entries(n.ruleContents)){let a=`pack-${e}-${p}.md`;await f.fs.writeTextFile(`${u}/${a}`,o+`
|
|
3
3
|
`),i.push(a)}if(n.concernContents.length>0){let p=`${r}/${y.concernsDir}`;await f.fs.mkdir(p,{recursive:!0});let o=await W(r);for(let a of n.concernContents){let d=`${String(o).padStart(3,"0")}-${a.id}.json`;await f.fs.writeTextFile(`${p}/${d}`,JSON.stringify(a,null,2)+`
|
|
4
4
|
`),t.push(d),o++}}if(n.folderRuleContents!==void 0)for(let[p,o]of Object.entries(n.folderRuleContents)){let a=`${r}/${p}/.folder-rules.md`;await f.fs.mkdir(`${r}/${p}`,{recursive:!0}),await f.fs.writeTextFile(a,o+`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as E}from"./chunk-TI4CLT2V.js";import{
|
|
1
|
+
import{h as E}from"./chunk-TI4CLT2V.js";import{q as y,s as C}from"./chunk-JNVM2KAE.js";import{f,h,i as S,j as g}from"./chunk-AQWB2PVR.js";import{d as l,f as a,g as m,o as d,q as u,r as w}from"./chunk-K223KAUB.js";import{a as p,b as n}from"./chunk-2N4GTHXQ.js";import{b as c}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var A=async k=>{let e=d({renderer:w.ansi(),sink:u.stdout()}),r=c.process.cwd(),i=h(k);if(!i.ok)return e.writeln(a(i.error)),await e.close(),n({exitCode:1});let t;try{t=await f(r,i.spec)}catch(o){let x=o instanceof Error?o.message:String(o);return e.writeln(a(x)),await e.close(),n({exitCode:1})}if(t.phase!=="COMPLETED")return e.writeln(a(`Cannot reopen in phase: ${t.phase}`)),e.writeln(l("Only COMPLETED specs can be reopened.")),await e.close(),n({exitCode:1});let v=await E(r),s=y(t);return s=C(s,"COMPLETED","DISCOVERY",v,"reopened"),await S(r,s),s.spec!==null&&await g(r,s.spec,s),e.writeln(m("\u2714")," Spec reopened. Discovery answers preserved \u2014 run `noskills next` to revise."),await e.close(),p(void 0)};export{A as main};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{v as I}from"./chunk-JNVM2KAE.js";import{d as h,f as g,h as y,i as S,j as k}from"./chunk-AQWB2PVR.js";import{d as a,f as n,g as d,o as u,q as w,r as f}from"./chunk-K223KAUB.js";import{a as c,b as l}from"./chunk-2N4GTHXQ.js";import{b as p}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var E=async A=>{let e=u({renderer:f.ansi(),sink:w.stdout()}),i=p.process.cwd(),o=y(A);if(!o.ok)return e.writeln(n(o.error)),await e.close(),l({exitCode:1});let s;try{s=await g(i,o.spec)}catch(r){let $=r instanceof Error?r.message:String(r);return e.writeln(n($)),await e.close(),l({exitCode:1})}if(s.phase==="IDLE"||s.phase==="UNINITIALIZED")return e.writeln(a("Already idle. Nothing to reset.")),await e.close(),c(void 0);if(s.spec!==null){let r=`${i}/${h.specDir(s.spec)}`;try{await p.fs.stat(r)}catch{e.writeln(n(`Active spec '${s.spec}' directory not found.`)),e.writeln(a("Resetting to idle anyway."))}}let t=s.spec,m=I(s);return await S(i,m),t!==null&&await k(i,t,m),e.writeln(d("\u2714")," Reset to idle."),t!==null&&e.writeln(a(`Spec "${t}" state cleared. Files in .eser/specs/${t}/ preserved.`)),await e.close(),c(void 0)};export{E as main};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as v,e as C}from"./chunk-
|
|
1
|
+
import{a as v,e as C}from"./chunk-6OQNXZAN.js";import{b as A,c as j}from"./chunk-2X2U2VC5.js";import{d as x,l as T}from"./chunk-AQWB2PVR.js";import{c as y,d as a,f as k,g as P,o as d,q as u,r as c}from"./chunk-K223KAUB.js";import{a as g,b as $}from"./chunk-2N4GTHXQ.js";import{b as p}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var q=async e=>{let s=e?.[0];if(s==="add")return await R(e?.slice(1));if(s==="list")return await L();if(s==="promote")return await W(e?.slice(1));let n=A(),t=d({renderer:c.ansi(),sink:u.stdout()});return t.writeln(`Usage: ${n} rule <add "rule text" | list | promote "decision">`),await t.close(),g(void 0)},R=async e=>{let s=d({renderer:c.ansi(),sink:u.stdout()}),n=p.process.cwd(),t=[],r=[],i=[];if(e!==void 0)for(let o of e)o.startsWith("--phases=")?t=o.slice(9).split(",").map(w=>w.trim()):o.startsWith("--applies-to=")?r=o.slice(13).split(",").map(w=>w.trim().replace(/^["']|["']$/g,"")):o.startsWith("-")||i.push(o);let m=i.join(" "),f=await T(n);if(m.length===0)return s.writeln(k("Please provide a rule: "),y(`${j('rule add "Use Deno Tests for all tests"')}`)),await s.close(),$({exitCode:1});let b=m.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,50),l="";(t.length>0||r.length>0)&&(l+=`---
|
|
2
2
|
`,t.length>0&&(l+=`phases: [${t.join(", ")}]
|
|
3
3
|
`),r.length>0&&(l+=`applies_to: [${r.map(o=>`"${o}"`).join(", ")}]
|
|
4
4
|
`),l+=`---
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as D,b as A,g as F}from"./chunk-4N7N37OY.js";import{d as B}from"./chunk-
|
|
1
|
+
import{a as D,b as A,g as F}from"./chunk-4N7N37OY.js";import{d as B}from"./chunk-IZMNMJYU.js";import{c as W,d as X}from"./chunk-6OQNXZAN.js";import"./chunk-7UX6WIXX.js";import"./chunk-OCDUS26F.js";import{b as E,c as V}from"./chunk-2X2U2VC5.js";import{a as _,m as j}from"./chunk-JNVM2KAE.js";import{A as M,e as g,f as N,g as U,i as $,l as G,p as L}from"./chunk-AQWB2PVR.js";import{c as v,d as o,f as l,g as P,h,k as I,o as R,q as O,r as T}from"./chunk-K223KAUB.js";import{a as S,b as w}from"./chunk-2N4GTHXQ.js";import{b as y}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var ue=async t=>{let e=R({renderer:T.ansi(),sink:O.stdout()}),i=y.process.cwd(),n=t?.includes("--unattended")??!1,r=z(t,"--max-turns")??10,p=z(t,"--max-iterations")??50;if(!await M(i))return e.writeln(l(`noskills not initialized. Run: ${V("init")}`)),await e.close(),w({exitCode:1});let x=U(t),c=await N(i,x);if(c.phase!=="EXECUTING"&&c.phase!=="SPEC_APPROVED")return e.writeln(l(`Cannot run from phase: ${c.phase}`)),e.writeln(o("Must be in SPEC_APPROVED or EXECUTING to start.")),await e.close(),w({exitCode:1});if(c.phase==="SPEC_APPROVED"){e.writeln(o("Starting execution from approved spec..."));let s=j(c);await $(i,s)}let u=await G(i);if(u===null)return e.writeln(l("Config not found.")),await e.close(),w({exitCode:1});e.writeln(v(`${E()} run`)),e.writeln(o(`Mode: ${n?"unattended":"interactive"}, max-turns: ${r}, max-iterations: ${p}`)),e.writeln("");let m=0,d=0;for(;m<p;){m++;let s=await g(i);if(s.phase==="COMPLETED"){e.writeln(""),e.writeln(P("\u2714")," Spec completed!"),e.writeln(` Iterations: ${s.execution.iteration}`),e.writeln(` Decisions: ${s.decisions.length}`);break}if(s.phase==="BLOCKED"){let a=s.execution.lastProgress??"Unknown";if(e.writeln(""),e.writeln(h("\u26A0")," Execution blocked: ",o(a)),n){await Z(i,a,m),e.writeln(o("Logged to .eser/.state/blocked.log. Resolve and re-run.")),d=1;break}let C=A(),f=await F(C,{message:"Enter resolution (or leave empty to stop):"});if(D(f)||f===""){e.writeln(o("Stopped by user."));break}let k=_(s,"EXECUTING");await $(i,{...k,execution:{...k.execution,lastProgress:`Resolved: ${f}`}});continue}if(s.phase!=="EXECUTING"){e.writeln(l(`Unexpected phase: ${s.phase}. Stopping.`)),d=1;break}let H=(await L(i)).filter(a=>u.concerns.includes(a.id)),q=await W(i),K=X(u.tools),J=await B(s,H,q,u,void 0,void 0,void 0,K),Q=Y(J);e.writeln(I(`\u2500\u2500 Iteration ${m}`),o(` (execution: ${s.execution.iteration}, debt: ${s.execution.debt?.items.length??0})`)),s.execution.lastProgress!==null&&e.writeln(o(` Last: ${s.execution.lastProgress}`)),s.execution.lastVerification?.passed===!1&&e.writeln(l(" Verification failed \u2014 agent will fix")),s.execution.debt!==null&&e.writeln(h(` Debt: ${s.execution.debt.items.length} items`)),e.writeln(o(" Spawning agent..."));try{await(await import("./mod-AU5SVHO5.js")).exec`claude -p ${Q} --max-turns ${String(r)} --output-format json`.noThrow().text()}catch{e.writeln(l(" Failed to spawn claude CLI. Is it installed?")),d=1;break}e.writeln(o(" Agent exited. Stop hook captured state."));let b=await g(i);if(u.autoCommit===!0&&u.allowGit!==!1)try{let a=await import("./mod-AU5SVHO5.js");if((await a.exec`git diff --name-only`.noThrow().text()).trim().length>0){await a.exec`git add -A`.noThrow().text();let f=`noskills: iteration ${b.execution.iteration} \u2014 ${b.execution.lastProgress??"progress"}`;await a.exec`git commit -m ${f}`.noThrow().text(),e.writeln(o(" Auto-committed."))}}catch{e.writeln(o(" Auto-commit failed (non-fatal)."))}}return m>=p&&(e.writeln(""),e.writeln(h("\u26A0"),` Max iterations (${p}) reached. Stopping.`),d=2),await e.close(),d!==0?w({exitCode:d}):S(void 0)},Y=t=>{let e=[];if(e.push(t.meta.resumeHint),e.push(""),t.meta.spec!==null&&(e.push(`Working on spec: ${t.meta.spec}`),e.push("")),"instruction"in t&&(e.push(t.instruction),e.push("")),"previousIterationDebt"in t){let n=t.previousIterationDebt;if(n!==void 0){e.push(`DEBT from iteration ${n.fromIteration} (address first):`);for(let r of n.items)e.push(`- ${r}`);e.push("")}}if("statusReportRequired"in t){let n=t.statusReport;if(n!==void 0){e.push("Report against these acceptance criteria:");for(let r of n.criteria)e.push(`- ${r}`);e.push("")}}if("verificationFailed"in t&&t.verificationFailed===!0&&(e.push("Test output:"),e.push(("verificationOutput"in t?t.verificationOutput:"")??""),e.push("")),t.behavioral.rules.length>0){e.push("Rules:");for(let n of t.behavioral.rules)e.push(`- ${n}`);e.push("")}if("context"in t){let n=t.context;if(n.concernReminders.length>0){e.push("Reminders:");for(let r of n.concernReminders)e.push(`- ${r}`);e.push("")}}let i=E();return e.push(`When done, report progress: ${i} next --answer="your progress"`),e.push(`If blocked, run: ${i} block "reason"`),e.push(`When all tasks are complete: ${i} done`),e.join(`
|
|
2
2
|
`)},z=(t,e)=>{if(t===void 0)return null;let i=`${e}=`;for(let n of t)if(n.startsWith(i)){let r=parseInt(n.slice(i.length),10);if(!isNaN(r)&&r>0)return r}return null},Z=async(t,e,i)=>{let n=`${t}/.eser/.state/blocked.log`,r=`[${new Date().toISOString()}] iteration=${i} reason=${e}
|
|
3
3
|
`;try{let{appendFileSync:p,mkdirSync:x}=await import("node:fs"),{dirname:c}=await import("node:path");x(c(n),{recursive:!0}),p(n,r)}catch{}};export{ue as main};
|