noskills 4.1.47 → 4.1.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +98 -0
  2. package/chunks/approve-LCVVXAE3.js +1 -0
  3. package/chunks/{ask-SWMI6GK2.js → ask-KPIHJIJZ.js} +1 -1
  4. package/chunks/block-MNFFAMEP.js +1 -0
  5. package/chunks/{browser-AXSE2CPY.js → browser-XLYVEO2J.js} +1 -1
  6. package/chunks/{bun-LARHC47N.js → bun-5VMFSLLY.js} +1 -1
  7. package/chunks/cancel-M3G3XXMU.js +1 -0
  8. package/chunks/{chunk-YK6UG66R.js → chunk-2X2U2VC5.js} +1 -1
  9. package/chunks/chunk-4N7N37OY.js +1 -0
  10. package/chunks/{chunk-G5OCHQQ2.js → chunk-65A35QPF.js} +1 -1
  11. package/chunks/{chunk-OV7ZXBXC.js → chunk-7OIAMA3E.js} +8 -8
  12. package/chunks/{chunk-QYMX2GR3.js → chunk-AQWB2PVR.js} +76 -76
  13. package/chunks/{chunk-DHMCIRLT.js → chunk-CKETVOVQ.js} +1 -1
  14. package/chunks/{chunk-XYJXQHQN.js → chunk-CLCZ7IO3.js} +1 -1
  15. package/chunks/{chunk-6FTHIS2Z.js → chunk-ESTTTPON.js} +1 -1
  16. package/chunks/{chunk-TJZAIUKM.js → chunk-JCIANZPY.js} +1 -1
  17. package/chunks/{chunk-Y6AFIAJP.js → chunk-K223KAUB.js} +1 -1
  18. package/chunks/{chunk-VK7L5SMS.js → chunk-MSJSMJL2.js} +1 -1
  19. package/chunks/chunk-NLLZQP64.js +1 -0
  20. package/chunks/{chunk-XRKWQJMC.js → chunk-NRCHLNQA.js} +1 -1
  21. package/chunks/chunk-OCDUS26F.js +1 -0
  22. package/chunks/{chunk-FEHZCASN.js → chunk-ON7NJA2P.js} +1 -1
  23. package/chunks/{chunk-MNEZ5QGX.js → chunk-RMCTOOQL.js} +1 -1
  24. package/chunks/{chunk-VPXOI7CR.js → chunk-RTD42HPS.js} +1 -1
  25. package/chunks/chunk-TI4CLT2V.js +2 -0
  26. package/chunks/{chunk-TIGKFDKY.js → chunk-U3JLX6DY.js} +1 -1
  27. package/chunks/chunk-WWPJMOT3.js +3 -0
  28. package/chunks/chunk-Y2PH2BTY.js +16 -0
  29. package/chunks/{chunk-4BH6CF3J.js → chunk-YSLRAWBK.js} +1 -1
  30. package/chunks/{claude-code-FZXKRWA5.js → claude-code-R7PCCNRZ.js} +1 -1
  31. package/chunks/cmd-NWSNAUKC.js +1 -0
  32. package/chunks/{concern-XME2LKJJ.js → concern-NQODAEHU.js} +1 -1
  33. package/chunks/config-EPT7NOOO.js +1 -0
  34. package/chunks/{deno-WQJZSBAW.js → deno-QOH6TCLQ.js} +1 -1
  35. package/chunks/done-XDWNPZVT.js +1 -0
  36. package/chunks/{free-KPB37MR3.js → free-MXG3ZUQY.js} +1 -1
  37. package/chunks/{init-HIQXEJDS.js → init-NJ7KI65T.js} +1 -1
  38. package/chunks/invoke-hook-D6BRYBNY.js +11 -0
  39. package/chunks/{kiro-AC5LYTVB.js → kiro-3VFHKARM.js} +1 -1
  40. package/chunks/{list-B5YTFNLR.js → list-FWRKOILC.js} +1 -1
  41. package/chunks/manager-BIVHW3S7.js +6 -0
  42. package/chunks/{mod-RW5J2N5Q.js → mod-LORCBZWH.js} +1 -1
  43. package/chunks/next-LQLZL4LN.js +8 -0
  44. package/chunks/{node-JJN2TSIE.js → node-BPWE6I45.js} +1 -1
  45. package/chunks/{ollama-TM4MMP7N.js → ollama-VSBCL6RB.js} +1 -1
  46. package/chunks/{opencode-YGNBYWQL.js → opencode-YE3RKOY7.js} +1 -1
  47. package/chunks/pack-5U7QBA2H.js +5 -0
  48. package/chunks/{purge-OAHH3MCY.js → purge-573OIQZI.js} +1 -1
  49. package/chunks/reopen-IR7FAPQE.js +1 -0
  50. package/chunks/{reset-O4WA2VGI.js → reset-XY2HW67W.js} +1 -1
  51. package/chunks/{rule-IHME5I6Q.js → rule-YI5GBUAS.js} +1 -1
  52. package/chunks/run-B6BBYCQM.js +3 -0
  53. package/chunks/{session-NSWI2Q3S.js → session-5BLO37XK.js} +1 -1
  54. package/chunks/spec-W52NAT6U.js +1 -0
  55. package/chunks/status-DJZSCXLA.js +1 -0
  56. package/chunks/{sync-YI7WLQP2.js → sync-A44KPO5R.js} +1 -1
  57. package/chunks/{watch-GMTD4676.js → watch-I7NEY7YJ.js} +1 -1
  58. package/chunks/wontfix-JULEBOGK.js +1 -0
  59. package/chunks/{workerd-VA2BYLUO.js → workerd-IIQRIOBX.js} +1 -1
  60. package/noskills.js +1 -1
  61. package/package.json +1 -1
  62. package/chunks/approve-D5AONTPF.js +0 -1
  63. package/chunks/block-MW7CCPRS.js +0 -1
  64. package/chunks/cancel-3JUX5SPS.js +0 -1
  65. package/chunks/chunk-FJCXMC2D.js +0 -1
  66. package/chunks/chunk-IZ4J7VRF.js +0 -1
  67. package/chunks/chunk-MRZT23BL.js +0 -1
  68. package/chunks/chunk-QMZBEPES.js +0 -16
  69. package/chunks/chunk-RBLZTQ64.js +0 -3
  70. package/chunks/cmd-RST2ZPA6.js +0 -1
  71. package/chunks/done-5FR2OAXK.js +0 -1
  72. package/chunks/invoke-hook-NXZYKSHD.js +0 -11
  73. package/chunks/manager-OOJQ6WXI.js +0 -6
  74. package/chunks/next-SP7JFPGS.js +0 -8
  75. package/chunks/reopen-H6WXM2OQ.js +0 -1
  76. package/chunks/run-7OEMPUFO.js +0 -3
  77. package/chunks/spec-2FKI55EV.js +0 -1
  78. package/chunks/status-MOMQ2FRD.js +0 -1
  79. package/chunks/wontfix-2AKBA54I.js +0 -1
@@ -1 +1 @@
1
- import{b as D,d as Q,r as G}from"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";import he from"node:process";function X(){let e=globalThis,r=e.Deno?.build?.os;return typeof r=="string"?r==="windows":e.navigator?.platform?.startsWith("Win")??e.process?.platform?.startsWith("win")??!1}var A=X();function C(e){if(typeof e!="string")throw new TypeError(`Path must be a string, received "${JSON.stringify(e)}"`)}function H(e,r){if(r.length>=e.length)return e;let t=e.length-r.length;for(let o=r.length-1;o>=0;--o)if(e.charCodeAt(t+o)!==r.charCodeAt(o))return e;return e.slice(0,-r.length)}function k(e,r,t=0){let o=!1,s=e.length;for(let i=e.length-1;i>=t;--i)if(r(e.charCodeAt(i))){if(o){t=i+1;break}}else o||(o=!0,s=i+1);return e.slice(t,s)}function L(e,r){if(C(e),e.length===0)return e;if(typeof r!="string")throw new TypeError(`Suffix must be a string, received "${JSON.stringify(r)}"`)}function U(e){if(e=e instanceof URL?e:new URL(e),e.protocol!=="file:")throw new TypeError(`URL must be a file URL: received "${e.protocol}"`);return e}function P(e){return e=U(e),decodeURIComponent(e.pathname.replace(/%(?![0-9A-Fa-f]{2})/g,"%25"))}function S(e,r){if(e.length<=1)return e;let t=e.length;for(let o=e.length-1;o>0&&r(e.charCodeAt(o));o--)t=o;return e.slice(0,t)}function p(e){return e===47}function Y(e,r=""){e instanceof URL&&(e=P(e)),L(e,r);let t=k(e,p),o=S(t,p);return r?H(o,r):o}function V(e){return e===47}function m(e){return e===47||e===92}function R(e){return e>=97&&e<=122||e>=65&&e<=90}function E(e){e=U(e);let r=decodeURIComponent(e.pathname.replace(/\//g,"\\").replace(/%(?![0-9A-Fa-f]{2})/g,"%25")).replace(/^\\*([A-Za-z]:)(\\|$)/,"$1\\");return e.hostname!==""&&(r=`\\\\${e.hostname}${r}`),r}function q(e,r=""){e instanceof URL&&(e=E(e)),L(e,r);let t=0;if(e.length>=2){let i=e.charCodeAt(0);R(i)&&e.charCodeAt(1)===58&&(t=2)}let o=k(e,m,t),s=S(o,m);return r?H(s,r):s}function ee(e,r=""){return A?q(e,r):Y(e,r)}var re=A?";":":",B=A?"\\":"/";function W(e){if(C(e),e.length===0)return"."}function te(e){e instanceof URL&&(e=P(e)),W(e);let r=-1,t=!1;for(let o=e.length-1;o>=1;--o)if(p(e.charCodeAt(o))){if(t){r=o;break}}else t=!0;return r===-1?p(e.charCodeAt(0))?"/":".":S(e.slice(0,r),p)}function oe(e){e instanceof URL&&(e=E(e)),W(e);let r=e.length,t=-1,o=-1,s=!0,i=0,a=e.charCodeAt(0);if(r>1)if(m(a)){if(t=i=1,m(e.charCodeAt(1))){let n=2,l=n;for(;n<r&&!m(e.charCodeAt(n));++n);if(n<r&&n!==l){for(l=n;n<r&&m(e.charCodeAt(n));++n);if(n<r&&n!==l){for(l=n;n<r&&!m(e.charCodeAt(n));++n);if(n===r)return e;n!==l&&(t=i=n+1)}}}}else R(a)&&e.charCodeAt(1)===58&&(t=i=2,r>2&&m(e.charCodeAt(2))&&(t=i=3));else if(m(a))return e;for(let n=r-1;n>=i;--n)if(m(e.charCodeAt(n))){if(!s){o=n;break}}else s=!1;if(o===-1){if(t===-1)return".";o=t}return S(e.slice(0,o),V)}function ie(e){return A?oe(e):te(e)}function ne(e){e instanceof URL&&(e=P(e)),C(e);let r=-1,t=0,o=-1,s=!0,i=0;for(let a=e.length-1;a>=0;--a){let n=e.charCodeAt(a);if(p(n)){if(!s){t=a+1;break}continue}o===-1&&(s=!1,o=a+1),n===46?r===-1?r=a:i!==1&&(i=1):r!==-1&&(i=-1)}return r===-1||o===-1||i===0||i===1&&r===o-1&&r===t+1?"":e.slice(r,o)}function se(e){e instanceof URL&&(e=E(e)),C(e);let r=0,t=-1,o=0,s=-1,i=!0,a=0;e.length>=2&&e.charCodeAt(1)===58&&R(e.charCodeAt(0))&&(r=o=2);for(let n=e.length-1;n>=r;--n){let l=e.charCodeAt(n);if(m(l)){if(!i){o=n+1;break}continue}s===-1&&(i=!1,s=n+1),l===46?t===-1?t=n:a!==1&&(a=1):t!==-1&&(a=-1)}return t===-1||s===-1||a===0||a===1&&t===s-1&&t===o+1?"":e.slice(t,s)}function ae(e){return A?se(e):ne(e)}function N(e,r){let t=r.dir||r.root,o=r.base||(r.name??"")+(r.ext??"");return t?o===e?t:t===r.root?t+o:t+e+o:o}function $(e){if(e===null||typeof e!="object")throw new TypeError(`The "pathObject" argument must be of type Object, received type "${typeof e}"`)}function fe(e){return $(e),N("/",e)}function le(e){return $(e),N("\\",e)}function ce(e){return A?le(e):fe(e)}function j(e){return C(e),e.length>0&&p(e.charCodeAt(0))}function M(e){C(e);let r=e.length;if(r===0)return!1;let t=e.charCodeAt(0);return m(t)?!0:!!(R(t)&&r>2&&e.charCodeAt(1)===58&&m(e.charCodeAt(2)))}function me(e){return A?M(e):j(e)}function I(e){if(C(e),e.length===0)return"."}function _(e,r,t,o){let s="",i=0,a=-1,n=0,l;for(let f=0;f<=e.length;++f){if(f<e.length)l=e.charCodeAt(f);else{if(o(l))break;l=47}if(o(l)){if(!(a===f-1||n===1))if(a!==f-1&&n===2){if(s.length<2||i!==2||s.charCodeAt(s.length-1)!==46||s.charCodeAt(s.length-2)!==46){if(s.length>2){let d=s.lastIndexOf(t);d===-1?(s="",i=0):(s=s.slice(0,d),i=s.length-1-s.lastIndexOf(t)),a=f,n=0;continue}else if(s.length===2||s.length===1){s="",i=0,a=f,n=0;continue}}r&&(s.length>0?s+=`${t}..`:s="..",i=2)}else s.length>0?s+=t+e.slice(a+1,f):s=e.slice(a+1,f),i=f-a-1;a=f,n=0}else l===46&&n!==-1?++n:n=-1}return s}function F(e){e instanceof URL&&(e=P(e)),I(e);let r=p(e.charCodeAt(0)),t=p(e.charCodeAt(e.length-1));return e=_(e,!r,"/",p),e.length===0&&!r&&(e="."),e.length>0&&t&&(e+="/"),r?`/${e}`:e}function K(e,...r){if(e===void 0)return".";e instanceof URL&&(e=P(e)),r=e?[e,...r]:r,r.forEach(o=>C(o));let t=r.filter(o=>o.length>0).join("/");return t===""?".":F(t)}function b(e){e instanceof URL&&(e=E(e)),I(e);let r=e.length,t=0,o,s=!1,i=e.charCodeAt(0);if(r>1)if(m(i))if(s=!0,m(e.charCodeAt(1))){let n=2,l=n;for(;n<r&&!m(e.charCodeAt(n));++n);if(n<r&&n!==l){let f=e.slice(l,n);for(l=n;n<r&&m(e.charCodeAt(n));++n);if(n<r&&n!==l){for(l=n;n<r&&!m(e.charCodeAt(n));++n);if(n===r)return`\\\\${f}\\${e.slice(l)}\\`;n!==l&&(o=`\\\\${f}\\${e.slice(l,n)}`,t=n)}}}else t=1;else R(i)&&e.charCodeAt(1)===58&&(o=e.slice(0,2),t=2,r>2&&m(e.charCodeAt(2))&&(s=!0,t=3));else if(m(i))return"\\";let a;return t<r?a=_(e.slice(t),!s,"\\",m):a="",a.length===0&&!s&&(a="."),a.length>0&&m(e.charCodeAt(r-1))&&(a+="\\"),o===void 0?s?a.length>0?`\\${a}`:"\\":a:s?a.length>0?`${o}\\${a}`:`${o}\\`:o+a}function Z(e,...r){if(e instanceof URL&&(e=E(e)),r=e?[e,...r]:r,r.forEach(a=>C(a)),r=r.filter(a=>a.length>0),r.length===0)return".";let t=!0,o=0,s=r[0];if(m(s.charCodeAt(0))){++o;let a=s.length;a>1&&m(s.charCodeAt(1))&&(++o,a>2&&(m(s.charCodeAt(2))?++o:t=!1))}let i=r.join("\\");if(t){for(;o<i.length&&m(i.charCodeAt(o));++o);o>=2&&(i=`\\${i.slice(o)}`)}return b(i)}function J(e,...r){return A?Z(e,...r):K(e,...r)}function de(e){return A?b(e):F(e)}function ue(e){C(e);let r={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return r;let t=p(e.charCodeAt(0)),o;t?(r.root="/",o=1):o=0;let s=-1,i=0,a=-1,n=!0,l=e.length-1,f=0;for(;l>=o;--l){let d=e.charCodeAt(l);if(p(d)){if(!n){i=l+1;break}continue}a===-1&&(n=!1,a=l+1),d===46?s===-1?s=l:f!==1&&(f=1):s!==-1&&(f=-1)}return s===-1||a===-1||f===0||f===1&&s===a-1&&s===i+1?(a!==-1&&(i===0&&t?r.base=r.name=e.slice(1,a):r.base=r.name=e.slice(i,a)),r.base=r.base||"/"):(i===0&&t?(r.name=e.slice(1,s),r.base=e.slice(1,a)):(r.name=e.slice(i,s),r.base=e.slice(i,a)),r.ext=e.slice(s,a)),i>0?r.dir=S(e.slice(0,i-1),p):t&&(r.dir="/"),r}function pe(e){C(e);let r={root:"",dir:"",base:"",ext:"",name:""},t=e.length;if(t===0)return r;let o=0,s=e.charCodeAt(0);if(t>1){if(m(s)){if(o=1,m(e.charCodeAt(1))){let u=2,c=u;for(;u<t&&!m(e.charCodeAt(u));++u);if(u<t&&u!==c){for(c=u;u<t&&m(e.charCodeAt(u));++u);if(u<t&&u!==c){for(c=u;u<t&&!m(e.charCodeAt(u));++u);u===t?o=u:u!==c&&(o=u+1)}}}}else if(R(s)&&e.charCodeAt(1)===58)if(o=2,t>2){if(m(e.charCodeAt(2))){if(t===3)return r.root=r.dir=e,r.base="\\",r;o=3}}else return r.root=r.dir=e,r}else if(m(s))return r.root=r.dir=e,r.base="\\",r;o>0&&(r.root=e.slice(0,o));let i=-1,a=o,n=-1,l=!0,f=e.length-1,d=0;for(;f>=o;--f){if(s=e.charCodeAt(f),m(s)){if(!l){a=f+1;break}continue}n===-1&&(l=!1,n=f+1),s===46?i===-1?i=f:d!==1&&(d=1):i!==-1&&(d=-1)}return i===-1||n===-1||d===0||d===1&&i===n-1&&i===a+1?n!==-1&&(r.base=r.name=e.slice(a,n)):(r.name=e.slice(a,i),r.base=e.slice(a,n),r.ext=e.slice(i,n)),r.base=r.base||"\\",a>0&&a!==o?r.dir=e.slice(0,a-1):r.dir=r.root,r}function Ae(e){return A?pe(e):ue(e)}function O(...e){let r="",t=!1;for(let o=e.length-1;o>=-1&&!t;o--){let s;if(o>=0)s=e[o];else{let{Deno:i}=globalThis;if(typeof i?.cwd!="function")throw new TypeError("Resolved a relative path without a current working directory (CWD)");s=i.cwd()}C(s),s.length!==0&&(r=`${s}/${r}`,t=p(s.charCodeAt(0)))}return r=_(r,!t,"/",p),t?r.length>0?`/${r}`:"/":r.length>0?r:"."}function z(e,r){if(C(e),C(r),e===r)return""}function Ce(e,r){if(z(e,r),e=O(e),r=O(r),e===r)return"";let t=1,o=e.length;for(;t<o&&p(e.charCodeAt(t));++t);let s=o-t,i=1,a=r.length;for(;i<a&&p(r.charCodeAt(i));++i);let n=a-i,l=s<n?s:n,f=-1,d=0;for(;d<=l;++d){if(d===l){if(n>l){if(p(r.charCodeAt(i+d)))return r.slice(i+d+1);if(d===0)return r.slice(i+d)}else s>l&&(p(e.charCodeAt(t+d))?f=d:d===0&&(f=0));break}let c=e.charCodeAt(t+d),x=r.charCodeAt(i+d);if(c!==x)break;p(c)&&(f=d)}let u="";for(d=t+f+1;d<=o;++d)(d===o||p(e.charCodeAt(d)))&&(u.length===0?u+="..":u+="/..");return u.length>0?u+r.slice(i+f):(i+=f,p(r.charCodeAt(i))&&++i,r.slice(i))}function T(...e){let r="",t="",o=!1;for(let s=e.length-1;s>=-1;s--){let i,{Deno:a}=globalThis;if(s>=0)i=e[s];else if(r){if(typeof a?.env?.get!="function"||typeof a?.cwd!="function")throw new TypeError("Resolved a relative path without a current working directory (CWD)");i=a.cwd(),(i===void 0||i.slice(0,3).toLowerCase()!==`${r.toLowerCase()}\\`)&&(i=`${r}\\`)}else{if(typeof a?.cwd!="function")throw new TypeError("Resolved a drive-letter-less path without a current working directory (CWD)");i=a.cwd()}C(i);let n=i.length;if(n===0)continue;let l=0,f="",d=!1,u=i.charCodeAt(0);if(n>1)if(m(u))if(d=!0,m(i.charCodeAt(1))){let c=2,x=c;for(;c<n&&!m(i.charCodeAt(c));++c);if(c<n&&c!==x){let v=i.slice(x,c);for(x=c;c<n&&m(i.charCodeAt(c));++c);if(c<n&&c!==x){for(x=c;c<n&&!m(i.charCodeAt(c));++c);c===n?(f=`\\\\${v}\\${i.slice(x)}`,l=c):c!==x&&(f=`\\\\${v}\\${i.slice(x,c)}`,l=c)}}}else l=1;else R(u)&&i.charCodeAt(1)===58&&(f=i.slice(0,2),l=2,n>2&&m(i.charCodeAt(2))&&(d=!0,l=3));else m(u)&&(l=1,d=!0);if(!(f.length>0&&r.length>0&&f.toLowerCase()!==r.toLowerCase())&&(r.length===0&&f.length>0&&(r=f),o||(t=`${i.slice(l)}\\${t}`,o=d),o&&r.length>0))break}return t=_(t,!o,"\\",m),r+(o?"\\":"")+t||"."}function xe(e,r){z(e,r);let t=T(e),o=T(r);if(t===o||(e=t.toLowerCase(),r=o.toLowerCase(),e===r))return"";let s=0,i=e.length;for(;s<i&&e.charCodeAt(s)===92;++s);for(;i-1>s&&e.charCodeAt(i-1)===92;--i);let a=i-s,n=0,l=r.length;for(;n<l&&r.charCodeAt(n)===92;++n);for(;l-1>n&&r.charCodeAt(l-1)===92;--l);let f=l-n,d=a<f?a:f,u=-1,c=0;for(;c<=d;++c){if(c===d){if(f>d){if(r.charCodeAt(n+c)===92)return o.slice(n+c+1);if(c===2)return o.slice(n+c)}a>d&&(e.charCodeAt(s+c)===92?u=c:c===2&&(u=3));break}let v=e.charCodeAt(s+c),we=r.charCodeAt(n+c);if(v!==we)break;v===92&&(u=c)}if(c!==d&&u===-1)return o;let x="";for(u===-1&&(u=0),c=s+u+1;c<=i;++c)(c===i||e.charCodeAt(c)===92)&&(x.length===0?x+="..":x+="\\..");return x.length>0?x+o.slice(n+u,l):(n+=u,o.charCodeAt(n)===92&&++n,o.slice(n,l))}function Re(e,r){return A?xe(e,r):Ce(e,r)}function ge(...e){return A?T(...e):O(...e)}var be={fs:!0,fsSync:!0,exec:!0,process:!0,env:!0,stdin:!0,stdout:!0,kv:!0},Oe=()=>{let e=r=>({isFile:r.isFile,isDirectory:r.isDirectory,isSymlink:r.isSymlink,size:r.size,mtime:r.mtime,atime:r.atime,birthtime:r.birthtime});return{async readFile(r,t){try{return await Deno.readFile(r,{signal:t?.signal})}catch(o){throw o instanceof Deno.errors.NotFound?new D(r):o}},async readTextFile(r,t){try{return await Deno.readTextFile(r,{signal:t?.signal})}catch(o){throw o instanceof Deno.errors.NotFound?new D(r):o}},async writeFile(r,t,o){await Deno.writeFile(r,t,{signal:o?.signal,mode:o?.mode,create:o?.create??!0,append:o?.append??!1})},async writeTextFile(r,t,o){await Deno.writeTextFile(r,t,{signal:o?.signal,mode:o?.mode,create:o?.create??!0,append:o?.append??!1})},async exists(r){try{return await Deno.stat(r),!0}catch(t){if(t instanceof Deno.errors.NotFound)return!1;throw t}},async stat(r){try{let t=await Deno.stat(r);return e(t)}catch(t){throw t instanceof Deno.errors.NotFound?new D(r):t}},async lstat(r){try{let t=await Deno.lstat(r);return e(t)}catch(t){throw t instanceof Deno.errors.NotFound?new D(r):t}},async mkdir(r,t){await Deno.mkdir(r,{recursive:t?.recursive??!1,mode:t?.mode})},async ensureDir(r){try{await Deno.mkdir(r,{recursive:!0})}catch(t){if(!(t instanceof Deno.errors.AlreadyExists))throw t}},async remove(r,t){try{await Deno.remove(r,{recursive:t?.recursive??!1})}catch(o){throw o instanceof Deno.errors.NotFound?new D(r):o}},async*readDir(r){try{for await(let t of Deno.readDir(r))yield{name:t.name,isFile:t.isFile,isDirectory:t.isDirectory,isSymlink:t.isSymlink}}catch(t){throw t instanceof Deno.errors.NotFound?new D(r):t}},async copyFile(r,t){await Deno.copyFile(r,t)},async rename(r,t){await Deno.rename(r,t)},async makeTempDir(r){return await Deno.makeTempDir({dir:r?.dir,prefix:r?.prefix,suffix:r?.suffix})},async realPath(r){try{return await Deno.realPath(r)}catch(t){throw t instanceof Deno.errors.NotFound?new D(r):t}},watch(r,t){let o=t?.recursive??!0,s=Deno.watchFs(r,{recursive:o}),i=a=>({kind:a.kind,paths:a.paths,flag:a.flag});return{close:()=>s.close(),[Symbol.asyncIterator]:async function*(){for await(let a of s)yield i(a)}}},async*walk(r,t){let o=t?.includeDirs??!0,s=t?.includeFiles??!0,i=t?.exts,a=t?.skip,n=async function*(l){for await(let f of Deno.readDir(l)){let d=J(l,f.name);if(!a?.some(u=>u.test(d))){if(f.isDirectory)o&&(yield{path:d,name:f.name,isFile:!1,isDirectory:!0,isSymlink:f.isSymlink}),yield*n(d);else if(f.isFile||f.isSymlink){if(!s||i&&!i.some(u=>f.name.endsWith(u.startsWith(".")?u:`.${u}`)))continue;yield{path:d,name:f.name,isFile:f.isFile,isDirectory:!1,isSymlink:f.isSymlink}}}}};yield*n(r)},async chmod(r,t){let{chmod:o}=await import("./unstable_chmod-RZ5DE3XZ.js");await o(r,t)}}},He=()=>({join:J,resolve:ge,dirname:ie,basename:ee,extname:ae,normalize:de,isAbsolute:me,relative:Re,parse:Ae,format:ce,sep:B,delimiter:re}),ke=()=>({async spawn(e,r=[],t){let o=G(t),i=await new Deno.Command(e,{args:r,cwd:t?.cwd,env:t?.env,stdin:o.stdin,stdout:o.stdout,stderr:o.stderr,signal:t?.signal}).output();return{success:i.success,code:i.code,stdout:o.stdout==="piped"?i.stdout:new Uint8Array,stderr:o.stderr==="piped"?i.stderr:new Uint8Array}},async exec(e,r=[],t){let o=await this.spawn(e,r,t);if(!o.success){let s=new TextDecoder().decode(o.stderr);throw new Q(e,o.code,s)}return new TextDecoder().decode(o.stdout).trim()},async execJson(e,r=[],t){let o=await this.exec(e,r,t);return JSON.parse(o)},spawnChild(e,r=[],t){let o=G(t),i=new Deno.Command(e,{args:r,cwd:t?.cwd,env:t?.env,stdin:o.stdin,stdout:o.stdout,stderr:o.stderr,signal:t?.signal}).spawn(),a=(n,l)=>l!=="piped"||!n?Promise.resolve(new Uint8Array):new Response(n).arrayBuffer().then(f=>new Uint8Array(f));return{pid:i.pid,stdin:o.stdin==="piped"?i.stdin:null,stdout:o.stdout==="piped"?i.stdout:null,stderr:o.stderr==="piped"?i.stderr:null,status:i.status.then(n=>({success:n.success,code:n.code,signal:n.signal??void 0})),output:async()=>{let n=o.stdout==="piped"?i.stdout:null,l=o.stderr==="piped"?i.stderr:null,[f,d,u]=await Promise.all([i.status,a(n,o.stdout),a(l,o.stderr)]);return{success:f.success,code:f.code,stdout:d,stderr:u}},kill:n=>{i.kill(n)}}}}),Le=()=>({get(e){return Deno.env.get(e)},set(e,r){Deno.env.set(e,r)},delete(e){Deno.env.delete(e)},has(e){return Deno.env.get(e)!==void 0},toObject(){return Deno.env.toObject()}}),Ue=()=>({exit(e){Deno.exit(e)},setExitCode(e){Deno.exitCode=e},cwd(){return Deno.cwd()},chdir(e){Deno.chdir(e)},hostname(){return Deno.hostname()},execPath(){return Deno.execPath()},argv:he.argv,argv0:he.argv0,args:Deno.args,pid:Deno.pid,stdin:Deno.stdin.readable,stdout:Deno.stdout.writable,stderr:Deno.stderr.writable,isTerminal(e){try{switch(e){case"stdin":return Deno.stdin.isTerminal();case"stdout":return Deno.stdout.isTerminal();case"stderr":return Deno.stderr.isTerminal()}}catch{return!1}},setStdinRaw(e){Deno.stdin.setRaw(e)}}),Dn=()=>{let e=Oe(),r=He(),t=ke(),o=Le(),s=Ue();return{name:"deno",version:Deno.version.deno,capabilities:be,fs:e,path:r,exec:t,env:o,process:s}};export{be as DENO_CAPABILITIES,Dn as createDenoRuntime};
1
+ import{b as D,d as Q,r as G}from"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";import ge from"node:process";function X(){let e=globalThis,r=e.Deno?.build?.os;return typeof r=="string"?r==="windows":e.navigator?.platform?.startsWith("Win")??e.process?.platform?.startsWith("win")??!1}var A=X();function C(e){if(typeof e!="string")throw new TypeError(`Path must be a string, received "${JSON.stringify(e)}"`)}function H(e,r){if(r.length>=e.length)return e;let t=e.length-r.length;for(let o=r.length-1;o>=0;--o)if(e.charCodeAt(t+o)!==r.charCodeAt(o))return e;return e.slice(0,-r.length)}function k(e,r,t=0){let o=!1,s=e.length;for(let i=e.length-1;i>=t;--i)if(r(e.charCodeAt(i))){if(o){t=i+1;break}}else o||(o=!0,s=i+1);return e.slice(t,s)}function L(e,r){if(C(e),e.length===0)return e;if(typeof r!="string")throw new TypeError(`Suffix must be a string, received "${JSON.stringify(r)}"`)}function U(e){if(e=e instanceof URL?e:new URL(e),e.protocol!=="file:")throw new TypeError(`URL must be a file URL: received "${e.protocol}"`);return e}function P(e){return e=U(e),decodeURIComponent(e.pathname.replace(/%(?![0-9A-Fa-f]{2})/g,"%25"))}function S(e,r){if(e.length<=1)return e;let t=e.length;for(let o=e.length-1;o>0&&r(e.charCodeAt(o));o--)t=o;return e.slice(0,t)}function p(e){return e===47}function Y(e,r=""){e instanceof URL&&(e=P(e)),L(e,r);let t=k(e,p),o=S(t,p);return r?H(o,r):o}function V(e){return e===47}function m(e){return e===47||e===92}function R(e){return e>=97&&e<=122||e>=65&&e<=90}function E(e){e=U(e);let r=decodeURIComponent(e.pathname.replace(/\//g,"\\").replace(/%(?![0-9A-Fa-f]{2})/g,"%25")).replace(/^\\*([A-Za-z]:)(\\|$)/,"$1\\");return e.hostname!==""&&(r=`\\\\${e.hostname}${r}`),r}function q(e,r=""){e instanceof URL&&(e=E(e)),L(e,r);let t=0;if(e.length>=2){let i=e.charCodeAt(0);R(i)&&e.charCodeAt(1)===58&&(t=2)}let o=k(e,m,t),s=S(o,m);return r?H(s,r):s}function ee(e,r=""){return A?q(e,r):Y(e,r)}var re=A?";":":",B=A?"\\":"/";function W(e){if(C(e),e.length===0)return"."}function te(e){e instanceof URL&&(e=P(e)),W(e);let r=-1,t=!1;for(let o=e.length-1;o>=1;--o)if(p(e.charCodeAt(o))){if(t){r=o;break}}else t=!0;return r===-1?p(e.charCodeAt(0))?"/":".":S(e.slice(0,r),p)}function oe(e){e instanceof URL&&(e=E(e)),W(e);let r=e.length,t=-1,o=-1,s=!0,i=0,a=e.charCodeAt(0);if(r>1)if(m(a)){if(t=i=1,m(e.charCodeAt(1))){let n=2,l=n;for(;n<r&&!m(e.charCodeAt(n));++n);if(n<r&&n!==l){for(l=n;n<r&&m(e.charCodeAt(n));++n);if(n<r&&n!==l){for(l=n;n<r&&!m(e.charCodeAt(n));++n);if(n===r)return e;n!==l&&(t=i=n+1)}}}}else R(a)&&e.charCodeAt(1)===58&&(t=i=2,r>2&&m(e.charCodeAt(2))&&(t=i=3));else if(m(a))return e;for(let n=r-1;n>=i;--n)if(m(e.charCodeAt(n))){if(!s){o=n;break}}else s=!1;if(o===-1){if(t===-1)return".";o=t}return S(e.slice(0,o),V)}function ie(e){return A?oe(e):te(e)}function ne(e){e instanceof URL&&(e=P(e)),C(e);let r=-1,t=0,o=-1,s=!0,i=0;for(let a=e.length-1;a>=0;--a){let n=e.charCodeAt(a);if(p(n)){if(!s){t=a+1;break}continue}o===-1&&(s=!1,o=a+1),n===46?r===-1?r=a:i!==1&&(i=1):r!==-1&&(i=-1)}return r===-1||o===-1||i===0||i===1&&r===o-1&&r===t+1?"":e.slice(r,o)}function se(e){e instanceof URL&&(e=E(e)),C(e);let r=0,t=-1,o=0,s=-1,i=!0,a=0;e.length>=2&&e.charCodeAt(1)===58&&R(e.charCodeAt(0))&&(r=o=2);for(let n=e.length-1;n>=r;--n){let l=e.charCodeAt(n);if(m(l)){if(!i){o=n+1;break}continue}s===-1&&(i=!1,s=n+1),l===46?t===-1?t=n:a!==1&&(a=1):t!==-1&&(a=-1)}return t===-1||s===-1||a===0||a===1&&t===s-1&&t===o+1?"":e.slice(t,s)}function ae(e){return A?se(e):ne(e)}function N(e,r){let t=r.dir||r.root,o=r.base||(r.name??"")+(r.ext??"");return t?o===e?t:t===r.root?t+o:t+e+o:o}function $(e){if(e===null||typeof e!="object")throw new TypeError(`The "pathObject" argument must be of type Object, received type "${typeof e}"`)}function fe(e){return $(e),N("/",e)}function le(e){return $(e),N("\\",e)}function ce(e){return A?le(e):fe(e)}function j(e){return C(e),e.length>0&&p(e.charCodeAt(0))}function M(e){C(e);let r=e.length;if(r===0)return!1;let t=e.charCodeAt(0);return m(t)?!0:!!(R(t)&&r>2&&e.charCodeAt(1)===58&&m(e.charCodeAt(2)))}function me(e){return A?M(e):j(e)}function I(e){if(C(e),e.length===0)return"."}function _(e,r,t,o){let s="",i=0,a=-1,n=0,l;for(let f=0;f<=e.length;++f){if(f<e.length)l=e.charCodeAt(f);else{if(o(l))break;l=47}if(o(l)){if(!(a===f-1||n===1))if(a!==f-1&&n===2){if(s.length<2||i!==2||s.charCodeAt(s.length-1)!==46||s.charCodeAt(s.length-2)!==46){if(s.length>2){let d=s.lastIndexOf(t);d===-1?(s="",i=0):(s=s.slice(0,d),i=s.length-1-s.lastIndexOf(t)),a=f,n=0;continue}else if(s.length===2||s.length===1){s="",i=0,a=f,n=0;continue}}r&&(s.length>0?s+=`${t}..`:s="..",i=2)}else s.length>0?s+=t+e.slice(a+1,f):s=e.slice(a+1,f),i=f-a-1;a=f,n=0}else l===46&&n!==-1?++n:n=-1}return s}function F(e){e instanceof URL&&(e=P(e)),I(e);let r=p(e.charCodeAt(0)),t=p(e.charCodeAt(e.length-1));return e=_(e,!r,"/",p),e.length===0&&!r&&(e="."),e.length>0&&t&&(e+="/"),r?`/${e}`:e}function K(e,...r){if(e===void 0)return".";e instanceof URL&&(e=P(e)),r=e?[e,...r]:r,r.forEach(o=>C(o));let t=r.filter(o=>o.length>0).join("/");return t===""?".":F(t)}function b(e){e instanceof URL&&(e=E(e)),I(e);let r=e.length,t=0,o,s=!1,i=e.charCodeAt(0);if(r>1)if(m(i))if(s=!0,m(e.charCodeAt(1))){let n=2,l=n;for(;n<r&&!m(e.charCodeAt(n));++n);if(n<r&&n!==l){let f=e.slice(l,n);for(l=n;n<r&&m(e.charCodeAt(n));++n);if(n<r&&n!==l){for(l=n;n<r&&!m(e.charCodeAt(n));++n);if(n===r)return`\\\\${f}\\${e.slice(l)}\\`;n!==l&&(o=`\\\\${f}\\${e.slice(l,n)}`,t=n)}}}else t=1;else R(i)&&e.charCodeAt(1)===58&&(o=e.slice(0,2),t=2,r>2&&m(e.charCodeAt(2))&&(s=!0,t=3));else if(m(i))return"\\";let a;return t<r?a=_(e.slice(t),!s,"\\",m):a="",a.length===0&&!s&&(a="."),a.length>0&&m(e.charCodeAt(r-1))&&(a+="\\"),o===void 0?s?a.length>0?`\\${a}`:"\\":a:s?a.length>0?`${o}\\${a}`:`${o}\\`:o+a}function Z(e,...r){if(e instanceof URL&&(e=E(e)),r=e?[e,...r]:r,r.forEach(a=>C(a)),r=r.filter(a=>a.length>0),r.length===0)return".";let t=!0,o=0,s=r[0];if(m(s.charCodeAt(0))){++o;let a=s.length;a>1&&m(s.charCodeAt(1))&&(++o,a>2&&(m(s.charCodeAt(2))?++o:t=!1))}let i=r.join("\\");if(t){for(;o<i.length&&m(i.charCodeAt(o));++o);o>=2&&(i=`\\${i.slice(o)}`)}return b(i)}function J(e,...r){return A?Z(e,...r):K(e,...r)}function de(e){return A?b(e):F(e)}function ue(e){C(e);let r={root:"",dir:"",base:"",ext:"",name:""};if(e.length===0)return r;let t=p(e.charCodeAt(0)),o;t?(r.root="/",o=1):o=0;let s=-1,i=0,a=-1,n=!0,l=e.length-1,f=0;for(;l>=o;--l){let d=e.charCodeAt(l);if(p(d)){if(!n){i=l+1;break}continue}a===-1&&(n=!1,a=l+1),d===46?s===-1?s=l:f!==1&&(f=1):s!==-1&&(f=-1)}return s===-1||a===-1||f===0||f===1&&s===a-1&&s===i+1?(a!==-1&&(i===0&&t?r.base=r.name=e.slice(1,a):r.base=r.name=e.slice(i,a)),r.base=r.base||"/"):(i===0&&t?(r.name=e.slice(1,s),r.base=e.slice(1,a)):(r.name=e.slice(i,s),r.base=e.slice(i,a)),r.ext=e.slice(s,a)),i>0?r.dir=S(e.slice(0,i-1),p):t&&(r.dir="/"),r}function pe(e){C(e);let r={root:"",dir:"",base:"",ext:"",name:""},t=e.length;if(t===0)return r;let o=0,s=e.charCodeAt(0);if(t>1){if(m(s)){if(o=1,m(e.charCodeAt(1))){let u=2,c=u;for(;u<t&&!m(e.charCodeAt(u));++u);if(u<t&&u!==c){for(c=u;u<t&&m(e.charCodeAt(u));++u);if(u<t&&u!==c){for(c=u;u<t&&!m(e.charCodeAt(u));++u);u===t?o=u:u!==c&&(o=u+1)}}}}else if(R(s)&&e.charCodeAt(1)===58)if(o=2,t>2){if(m(e.charCodeAt(2))){if(t===3)return r.root=r.dir=e,r.base="\\",r;o=3}}else return r.root=r.dir=e,r}else if(m(s))return r.root=r.dir=e,r.base="\\",r;o>0&&(r.root=e.slice(0,o));let i=-1,a=o,n=-1,l=!0,f=e.length-1,d=0;for(;f>=o;--f){if(s=e.charCodeAt(f),m(s)){if(!l){a=f+1;break}continue}n===-1&&(l=!1,n=f+1),s===46?i===-1?i=f:d!==1&&(d=1):i!==-1&&(d=-1)}return i===-1||n===-1||d===0||d===1&&i===n-1&&i===a+1?n!==-1&&(r.base=r.name=e.slice(a,n)):(r.name=e.slice(a,i),r.base=e.slice(a,n),r.ext=e.slice(i,n)),r.base=r.base||"\\",a>0&&a!==o?r.dir=e.slice(0,a-1):r.dir=r.root,r}function Ae(e){return A?pe(e):ue(e)}function O(...e){let r="",t=!1;for(let o=e.length-1;o>=-1&&!t;o--){let s;if(o>=0)s=e[o];else{let{Deno:i}=globalThis;if(typeof i?.cwd!="function")throw new TypeError("Resolved a relative path without a current working directory (CWD)");s=i.cwd()}C(s),s.length!==0&&(r=`${s}/${r}`,t=p(s.charCodeAt(0)))}return r=_(r,!t,"/",p),t?r.length>0?`/${r}`:"/":r.length>0?r:"."}function z(e,r){if(C(e),C(r),e===r)return""}function Ce(e,r){if(z(e,r),e=O(e),r=O(r),e===r)return"";let t=1,o=e.length;for(;t<o&&p(e.charCodeAt(t));++t);let s=o-t,i=1,a=r.length;for(;i<a&&p(r.charCodeAt(i));++i);let n=a-i,l=s<n?s:n,f=-1,d=0;for(;d<=l;++d){if(d===l){if(n>l){if(p(r.charCodeAt(i+d)))return r.slice(i+d+1);if(d===0)return r.slice(i+d)}else s>l&&(p(e.charCodeAt(t+d))?f=d:d===0&&(f=0));break}let c=e.charCodeAt(t+d),x=r.charCodeAt(i+d);if(c!==x)break;p(c)&&(f=d)}let u="";for(d=t+f+1;d<=o;++d)(d===o||p(e.charCodeAt(d)))&&(u.length===0?u+="..":u+="/..");return u.length>0?u+r.slice(i+f):(i+=f,p(r.charCodeAt(i))&&++i,r.slice(i))}function T(...e){let r="",t="",o=!1;for(let s=e.length-1;s>=-1;s--){let i,{Deno:a}=globalThis;if(s>=0)i=e[s];else if(r){if(typeof a?.env?.get!="function"||typeof a?.cwd!="function")throw new TypeError("Resolved a relative path without a current working directory (CWD)");i=a.cwd(),(i===void 0||i.slice(0,3).toLowerCase()!==`${r.toLowerCase()}\\`)&&(i=`${r}\\`)}else{if(typeof a?.cwd!="function")throw new TypeError("Resolved a drive-letter-less path without a current working directory (CWD)");i=a.cwd()}C(i);let n=i.length;if(n===0)continue;let l=0,f="",d=!1,u=i.charCodeAt(0);if(n>1)if(m(u))if(d=!0,m(i.charCodeAt(1))){let c=2,x=c;for(;c<n&&!m(i.charCodeAt(c));++c);if(c<n&&c!==x){let v=i.slice(x,c);for(x=c;c<n&&m(i.charCodeAt(c));++c);if(c<n&&c!==x){for(x=c;c<n&&!m(i.charCodeAt(c));++c);c===n?(f=`\\\\${v}\\${i.slice(x)}`,l=c):c!==x&&(f=`\\\\${v}\\${i.slice(x,c)}`,l=c)}}}else l=1;else R(u)&&i.charCodeAt(1)===58&&(f=i.slice(0,2),l=2,n>2&&m(i.charCodeAt(2))&&(d=!0,l=3));else m(u)&&(l=1,d=!0);if(!(f.length>0&&r.length>0&&f.toLowerCase()!==r.toLowerCase())&&(r.length===0&&f.length>0&&(r=f),o||(t=`${i.slice(l)}\\${t}`,o=d),o&&r.length>0))break}return t=_(t,!o,"\\",m),r+(o?"\\":"")+t||"."}function xe(e,r){z(e,r);let t=T(e),o=T(r);if(t===o||(e=t.toLowerCase(),r=o.toLowerCase(),e===r))return"";let s=0,i=e.length;for(;s<i&&e.charCodeAt(s)===92;++s);for(;i-1>s&&e.charCodeAt(i-1)===92;--i);let a=i-s,n=0,l=r.length;for(;n<l&&r.charCodeAt(n)===92;++n);for(;l-1>n&&r.charCodeAt(l-1)===92;--l);let f=l-n,d=a<f?a:f,u=-1,c=0;for(;c<=d;++c){if(c===d){if(f>d){if(r.charCodeAt(n+c)===92)return o.slice(n+c+1);if(c===2)return o.slice(n+c)}a>d&&(e.charCodeAt(s+c)===92?u=c:c===2&&(u=3));break}let v=e.charCodeAt(s+c),we=r.charCodeAt(n+c);if(v!==we)break;v===92&&(u=c)}if(c!==d&&u===-1)return o;let x="";for(u===-1&&(u=0),c=s+u+1;c<=i;++c)(c===i||e.charCodeAt(c)===92)&&(x.length===0?x+="..":x+="\\..");return x.length>0?x+o.slice(n+u,l):(n+=u,o.charCodeAt(n)===92&&++n,o.slice(n,l))}function Re(e,r){return A?xe(e,r):Ce(e,r)}function he(...e){return A?T(...e):O(...e)}var be={fs:!0,fsSync:!0,exec:!0,process:!0,env:!0,stdin:!0,stdout:!0,kv:!0},Oe=()=>{let e=r=>({isFile:r.isFile,isDirectory:r.isDirectory,isSymlink:r.isSymlink,size:r.size,mtime:r.mtime,atime:r.atime,birthtime:r.birthtime});return{async readFile(r,t){try{return await Deno.readFile(r,{signal:t?.signal})}catch(o){throw o instanceof Deno.errors.NotFound?new D(r):o}},async readTextFile(r,t){try{return await Deno.readTextFile(r,{signal:t?.signal})}catch(o){throw o instanceof Deno.errors.NotFound?new D(r):o}},async writeFile(r,t,o){await Deno.writeFile(r,t,{signal:o?.signal,mode:o?.mode,create:o?.create??!0,append:o?.append??!1})},async writeTextFile(r,t,o){await Deno.writeTextFile(r,t,{signal:o?.signal,mode:o?.mode,create:o?.create??!0,append:o?.append??!1})},async exists(r){try{return await Deno.stat(r),!0}catch(t){if(t instanceof Deno.errors.NotFound)return!1;throw t}},async stat(r){try{let t=await Deno.stat(r);return e(t)}catch(t){throw t instanceof Deno.errors.NotFound?new D(r):t}},async lstat(r){try{let t=await Deno.lstat(r);return e(t)}catch(t){throw t instanceof Deno.errors.NotFound?new D(r):t}},async mkdir(r,t){await Deno.mkdir(r,{recursive:t?.recursive??!1,mode:t?.mode})},async ensureDir(r){try{await Deno.mkdir(r,{recursive:!0})}catch(t){if(!(t instanceof Deno.errors.AlreadyExists))throw t}},async remove(r,t){try{await Deno.remove(r,{recursive:t?.recursive??!1})}catch(o){throw o instanceof Deno.errors.NotFound?new D(r):o}},async*readDir(r){try{for await(let t of Deno.readDir(r))yield{name:t.name,isFile:t.isFile,isDirectory:t.isDirectory,isSymlink:t.isSymlink}}catch(t){throw t instanceof Deno.errors.NotFound?new D(r):t}},async copyFile(r,t){await Deno.copyFile(r,t)},async rename(r,t){await Deno.rename(r,t)},async makeTempDir(r){return await Deno.makeTempDir({dir:r?.dir,prefix:r?.prefix,suffix:r?.suffix})},async realPath(r){try{return await Deno.realPath(r)}catch(t){throw t instanceof Deno.errors.NotFound?new D(r):t}},watch(r,t){let o=t?.recursive??!0,s=Deno.watchFs(r,{recursive:o}),i=a=>({kind:a.kind,paths:a.paths,flag:a.flag});return{close:()=>s.close(),[Symbol.asyncIterator]:async function*(){for await(let a of s)yield i(a)}}},async*walk(r,t){let o=t?.includeDirs??!0,s=t?.includeFiles??!0,i=t?.exts,a=t?.skip,n=async function*(l){for await(let f of Deno.readDir(l)){let d=J(l,f.name);if(!a?.some(u=>u.test(d))){if(f.isDirectory)o&&(yield{path:d,name:f.name,isFile:!1,isDirectory:!0,isSymlink:f.isSymlink}),yield*n(d);else if(f.isFile||f.isSymlink){if(!s||i&&!i.some(u=>f.name.endsWith(u.startsWith(".")?u:`.${u}`)))continue;yield{path:d,name:f.name,isFile:f.isFile,isDirectory:!1,isSymlink:f.isSymlink}}}}};yield*n(r)},async chmod(r,t){let{chmod:o}=await import("./unstable_chmod-RZ5DE3XZ.js");await o(r,t)}}},He=()=>({join:J,resolve:he,dirname:ie,basename:ee,extname:ae,normalize:de,isAbsolute:me,relative:Re,parse:Ae,format:ce,sep:B,delimiter:re}),ke=()=>({async spawn(e,r=[],t){let o=G(t),i=await new Deno.Command(e,{args:r,cwd:t?.cwd,env:t?.env,stdin:o.stdin,stdout:o.stdout,stderr:o.stderr,signal:t?.signal}).output();return{success:i.success,code:i.code,stdout:o.stdout==="piped"?i.stdout:new Uint8Array,stderr:o.stderr==="piped"?i.stderr:new Uint8Array}},async exec(e,r=[],t){let o=await this.spawn(e,r,t);if(!o.success){let s=new TextDecoder().decode(o.stderr);throw new Q(e,o.code,s)}return new TextDecoder().decode(o.stdout).trim()},async execJson(e,r=[],t){let o=await this.exec(e,r,t);return JSON.parse(o)},spawnChild(e,r=[],t){let o=G(t),i=new Deno.Command(e,{args:r,cwd:t?.cwd,env:t?.env,stdin:o.stdin,stdout:o.stdout,stderr:o.stderr,signal:t?.signal}).spawn(),a=(n,l)=>l!=="piped"||!n?Promise.resolve(new Uint8Array):new Response(n).arrayBuffer().then(f=>new Uint8Array(f));return{pid:i.pid,stdin:o.stdin==="piped"?i.stdin:null,stdout:o.stdout==="piped"?i.stdout:null,stderr:o.stderr==="piped"?i.stderr:null,status:i.status.then(n=>({success:n.success,code:n.code,signal:n.signal??void 0})),output:async()=>{let n=o.stdout==="piped"?i.stdout:null,l=o.stderr==="piped"?i.stderr:null,[f,d,u]=await Promise.all([i.status,a(n,o.stdout),a(l,o.stderr)]);return{success:f.success,code:f.code,stdout:d,stderr:u}},kill:n=>{i.kill(n)}}}}),Le=()=>({get(e){return Deno.env.get(e)},set(e,r){Deno.env.set(e,r)},delete(e){Deno.env.delete(e)},has(e){return Deno.env.get(e)!==void 0},toObject(){return Deno.env.toObject()}}),Ue=()=>({exit(e){Deno.exit(e)},setExitCode(e){Deno.exitCode=e},cwd(){return Deno.cwd()},chdir(e){Deno.chdir(e)},hostname(){return Deno.hostname()},execPath(){return Deno.execPath()},argv:ge.argv,argv0:ge.argv0,args:Deno.args,pid:Deno.pid,stdin:Deno.stdin.readable,stdout:Deno.stdout.writable,stderr:Deno.stderr.writable,isTerminal(e){try{switch(e){case"stdin":return Deno.stdin.isTerminal();case"stdout":return Deno.stdout.isTerminal();case"stderr":return Deno.stderr.isTerminal()}}catch{return!1}},setStdinRaw(e){Deno.stdin.setRaw(e)},writeToStdout(e){Deno.stdout.writeSync(e)},consoleSize(){try{return Deno.consoleSize()}catch{return{columns:80,rows:24}}}}),Dn=()=>{let e=Oe(),r=He(),t=ke(),o=Le(),s=Ue();return{name:"deno",version:Deno.version.deno,capabilities:be,fs:e,path:r,exec:t,env:o,process:s}};export{be as DENO_CAPABILITIES,Dn as createDenoRuntime};
@@ -0,0 +1 @@
1
+ import{a as D,d as T}from"./chunk-ESTTTPON.js";import{h as x}from"./chunk-TI4CLT2V.js";import{c as $}from"./chunk-2X2U2VC5.js";import{r as k,u as U}from"./chunk-NLLZQP64.js";import{d as S,f as g,h as E,i as C,j as y}from"./chunk-AQWB2PVR.js";import{c as m,d as o,f as a,g as u,o as w,q as f,r as h}from"./chunk-K223KAUB.js";import{a as d,b as n}from"./chunk-2N4GTHXQ.js";import{b as l}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var F=async I=>{let e=w({renderer:h.ansi(),sink:f.stdout()}),i=l.process.cwd(),p=E(I);if(!p.ok)return e.writeln(a(p.error)),await e.close(),n({exitCode:1});let t;try{t=await g(i,p.spec)}catch(r){let c=r instanceof Error?r.message:String(r);return e.writeln(a(c)),await e.close(),n({exitCode:1})}if(t.phase!=="EXECUTING")return e.writeln(a(`Cannot complete in phase: ${t.phase}`)),e.writeln(o("Only EXECUTING phase can transition to COMPLETED.")),await e.close(),n({exitCode:1});if(t.spec!==null){let r=`${i}/${S.specDir(t.spec)}`;try{await l.fs.stat(r)}catch{return e.writeln(a(`Active spec '${t.spec}' directory not found.`)),e.writeln(o("Run `noskills reset` to return to IDLE.")),await e.close(),n({exitCode:1})}}let P=await x(i),s=k(t,"done");if(s=U(s,"EXECUTING","COMPLETED",P),await C(i,s),s.spec!==null&&await y(i,s.spec,s),s.spec!==null&&(await D(i,s.spec,"completed"),await T(i,s.spec,"completed")),e.writeln(u("\u2714")," Spec completed!"),e.writeln(""),e.writeln(" Spec: ",m(t.spec??"unknown")),e.writeln(` Iterations: ${t.execution.iteration}`),e.writeln(` Decisions: ${t.decisions.length}`),t.decisions.length>0){let r=t.decisions.filter(c=>c.promoted);r.length>0&&e.writeln(o(` Promoted to rules: ${r.length}`))}return e.writeln(""),e.writeln("Start a new spec with: ",m(`${$('spec new "..."')}`)),await e.close(),d(void 0)};export{F as main};
@@ -1 +1 @@
1
- import{c}from"./chunk-YK6UG66R.js";import{c as x,d as g}from"./chunk-FJCXMC2D.js";import{e as E,i as p}from"./chunk-QYMX2GR3.js";import{c as o,d as m,f as n,g as l,o as f,q as u,r as h}from"./chunk-Y6AFIAJP.js";import{a as i,b as r}from"./chunk-2N4GTHXQ.js";import{b as w}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";var b=async d=>{let e=f({renderer:h.ansi(),sink:u.stdout()}),a=w.process.cwd(),S=d!==void 0&&d.some(s=>s==="--exit"),t;try{t=await E(a)}catch(s){let y=s instanceof Error?s.message:String(s);return e.writeln(n(y)),await e.close(),r({exitCode:1})}if(S){if(t.phase!=="FREE")return e.writeln(n(`Cannot exit free mode in phase: ${t.phase}`)),e.writeln(m("Only FREE phase can transition back to IDLE.")),await e.close(),r({exitCode:1});let s=g(t);return await p(a,s),e.writeln(l("\u2714")," Exited free mode. Back to IDLE."),e.writeln(""),e.writeln("Start a spec with: ",o(`${c('spec new "..."')}`)),await e.close(),i(void 0)}if(t.phase!=="IDLE")return e.writeln(n(`Cannot enter free mode in phase: ${t.phase}`)),e.writeln(m("Only IDLE phase can transition to FREE.")),await e.close(),r({exitCode:1});let k=x(t);return await p(a,k),e.writeln(l("\u2714")," Free mode active \u2014 no enforcement."),e.writeln(""),e.writeln("Exit free mode with: ",o(`${c("free --exit")}`)),await e.close(),i(void 0)};export{b as main};
1
+ import{c}from"./chunk-2X2U2VC5.js";import{c as x,d as g}from"./chunk-NLLZQP64.js";import{e as E,i as p}from"./chunk-AQWB2PVR.js";import{c as o,d as m,f as n,g as l,o as f,q as u,r as h}from"./chunk-K223KAUB.js";import{a as i,b as r}from"./chunk-2N4GTHXQ.js";import{b as w}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var b=async d=>{let e=f({renderer:h.ansi(),sink:u.stdout()}),a=w.process.cwd(),S=d!==void 0&&d.some(s=>s==="--exit"),t;try{t=await E(a)}catch(s){let y=s instanceof Error?s.message:String(s);return e.writeln(n(y)),await e.close(),r({exitCode:1})}if(S){if(t.phase!=="FREE")return e.writeln(n(`Cannot exit free mode in phase: ${t.phase}`)),e.writeln(m("Only FREE phase can transition back to IDLE.")),await e.close(),r({exitCode:1});let s=g(t);return await p(a,s),e.writeln(l("\u2714")," Exited free mode. Back to IDLE."),e.writeln(""),e.writeln("Start a spec with: ",o(`${c('spec new "..."')}`)),await e.close(),i(void 0)}if(t.phase!=="IDLE")return e.writeln(n(`Cannot enter free mode in phase: ${t.phase}`)),e.writeln(m("Only IDLE phase can transition to FREE.")),await e.close(),r({exitCode:1});let k=x(t);return await p(a,k),e.writeln(l("\u2714")," Free mode active \u2014 no enforcement."),e.writeln(""),e.writeln("Exit free mode with: ",o(`${c("free --exit")}`)),await e.close(),i(void 0)};export{b as main};
@@ -1 +1 @@
1
- import{a as T,b as J,h as B,i as N,j as q,k as G,l as U,m as h,n as r,o as y}from"./chunk-IZ4J7VRF.js";import{a as ie,b as ne,c as re}from"./chunk-VK7L5SMS.js";import{d as Z}from"./chunk-QMZBEPES.js";import{c as ee,d as te,e as oe}from"./chunk-OV7ZXBXC.js";import"./chunk-7UX6WIXX.js";import{b as I}from"./chunk-MRZT23BL.js";import{d as se}from"./chunk-TJZAIUKM.js";import{a as X,c as A,d as Y}from"./chunk-YK6UG66R.js";import{A as Q,a as W,b as z,i as H,m as _,o as K,q as V}from"./chunk-QYMX2GR3.js";import"./chunk-AGPCY6XP.js";import{a as k}from"./chunk-TIGKFDKY.js";import"./chunk-Y6AFIAJP.js";import"./chunk-5MN3MWQN.js";import"./chunk-OLM5RTFK.js";import{a as F}from"./chunk-XYJXQHQN.js";import{a as S}from"./chunk-2N4GTHXQ.js";import"./chunk-FEHZCASN.js";import{b as g}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";var he=new F({description:"AI provider interface \u2014 ask questions, generate content",modules:{ask:{description:"Send a prompt to an AI provider",load:()=>import("./ask-SWMI6GK2.js")},list:{description:"List available AI providers",load:()=>import("./list-B5YTFNLR.js")}}});var ae=k;var ve=async t=>{try{return await g.fs.stat(t),!0}catch{return!1}},we=[{id:"claude-code",paths:["CLAUDE.md",".claude"]},{id:"cursor",paths:[".cursorrules",".cursor"]},{id:"kiro",paths:[".kiro"]},{id:"copilot",paths:[".github/copilot-instructions.md"]},{id:"windsurf",paths:[".windsurfrules"]},{id:"codex",paths:[".codex",".codex/config.toml"]},{id:"copilot-cli",paths:[".copilot",".github/hooks"]}],le=async t=>{let e=[];for(let i of we)for(let o of i.paths)if(await ve(`${t}/${o}`)){e.push(i.id);break}return e};var a=async t=>{try{return await g.fs.stat(t),!0}catch{return!1}},ce=async(t,e)=>{try{let i=await g.fs.readTextFile(t);return JSON.parse(i)[e]??null}catch{return null}},xe=async t=>{let e=[];return(await a(`${t}/package.json`)||await a(`${t}/deno.json`))&&e.push("typescript"),await a(`${t}/go.mod`)&&e.push("go"),await a(`${t}/Cargo.toml`)&&e.push("rust"),(await a(`${t}/pyproject.toml`)||await a(`${t}/setup.py`))&&e.push("python"),e},Pe=async t=>{let e=[],i=await ce(`${t}/package.json`,"dependencies");return i!==null&&("react"in i&&e.push("react"),"vue"in i&&e.push("vue"),"svelte"in i&&e.push("svelte"),"next"in i&&e.push("nextjs"),"express"in i&&e.push("express"),"hono"in i&&e.push("hono")),e},Se=async t=>{let e=[];return await a(`${t}/.github/workflows`)&&e.push("github-actions"),await a(`${t}/.gitlab-ci.yml`)&&e.push("gitlab-ci"),await a(`${t}/Jenkinsfile`)&&e.push("jenkins"),await a(`${t}/.circleci`)&&e.push("circleci"),e},Te=async t=>{if(await a(`${t}/deno.json`))return"deno";let e=await ce(`${t}/package.json`,"devDependencies");if(e!==null){if("vitest"in e)return"vitest";if("jest"in e)return"jest";if("playwright"in e)return"playwright"}return null},de=async t=>{let[e,i,o,d]=await Promise.all([xe(t),Pe(t),Se(t),Te(t)]);return{languages:e,frameworks:i,ci:o,testRunner:d}};var It=async t=>{let e=g.process.cwd(),i=ne(t),o=J({target:i==="agent"?"non-interactive":"interactive"}),d=re(t),b=pe(d,"--concerns"),f=pe(d,"--tools"),p=d.includes("--non-interactive")||i==="agent";if(await Q(e))return r.warn(o,"noskills is already initialized in this project."),r.info(o,`Run \`${A("sync")}\` to regenerate tool files.`),S(void 0);N(o,"noskills init");let D=y(o,"Scanning project...");D.start();let m=await de(e);D.succeed("Project scanned");for(let s of m.languages)r.step(o,` ${s}`);for(let s of m.frameworks)r.step(o,` ${s}`);for(let s of m.ci)r.step(o,` ${s}`);m.testRunner!==null&&r.step(o,` test runner: ${m.testRunner}`),h(o);let R=y(o,"Detecting coding tools...");R.start();let $=await le(e),v=ie(),E=v!==null&&!$.includes(v)?[v]:[],w=[...new Set([...E,...$])];R.succeed(`${w.length} coding tool(s) detected`);for(let s of w){let n=s===v?" (current)":"";r.step(o,` ${s}${n}`)}let u;if(f!==null){let s=["claude-code","cursor","kiro","copilot","windsurf","opencode","codex","copilot-cli"],n=f.filter(c=>s.includes(c));u=[...new Set([...E,...n])]}else p?u=[...w]:(h(o),u=await Ie(o,w,v));h(o);let M=y(o,"Detecting AI providers...");M.start();let x=(await ae()).filter(s=>s.available).map(s=>s.name);M.succeed(`${x.length} provider(s) detected`),h(o);let P=await I(),l;if(b!==null){let s=P.map(n=>n.id);l=b.filter(n=>s.includes(n)).sort((n,c)=>s.indexOf(n)-s.indexOf(c))}else if(p)l=[];else{let s=P.map(c=>({value:c.id,label:c.name,hint:c.description.slice(0,60)})),n=await B(o,{message:"What kind of project is this? (space to toggle, enter to confirm)",options:s});l=T(n)?[]:[...n]}l.length>0?r.success(o,` Concerns: ${l.join(", ")}`):r.info(o,"No concerns selected. Add later with `concern add <id> [<id2> ...]`."),h(o);let j=y(o,"Initializing...");j.start(),await V(e);let ue=P.filter(s=>l.includes(s.id));for(let s of ue)await K(e,s);let L=await Y();X(L);let C={...z(l,u,x,m),command:L};await _(e,C);let O=W();if(await H(e,O),j.succeed("Scaffolded `.eser/`"),u.length>0){let s=y(o,"Syncing tool files...");s.start();let n=await oe(e,u,C);s.succeed(`Synced ${n.length} tool(s)`)}else r.warn(o,"No tools selected. noskills will work in agentless CLI mode only."),r.info(o,"Add tools later with `noskills sync`.");if(q(o,`Done. ${u.length} tool(s), ${x.length} provider(s), ${l.length} concern(s).`),i==="agent"){let n=(await I()).filter(me=>l.includes(me.id)),c=await ee(e),ge=te(C?.tools??[]),fe=Z(O,n,c,C,void 0,void 0,void 0,ge);await se(fe,"json")}else G(o),U(o,`Start a spec with: ${A('spec new "..."')}`);return S(void 0)},ke=[{value:"claude-code",label:"Claude Code"},{value:"cursor",label:"Cursor"},{value:"kiro",label:"Kiro"},{value:"copilot",label:"GitHub Copilot"},{value:"windsurf",label:"Windsurf"},{value:"opencode",label:"OpenCode"},{value:"codex",label:"Codex CLI"},{value:"copilot-cli",label:"Copilot CLI"}],Ie=async(t,e,i)=>{let o=e.length===0?"No coding tools detected. Which tools do you use? (space to toggle)":"Any additional tools? (space to toggle, enter to skip)",d=new Set(e),b=await B(t,{message:o,options:ke.map(p=>({...p,hint:p.value===i?"you're running inside it":d.has(p.value)?"detected":void 0,disabled:p.value===i})),initialValues:[...e],required:!1});if(T(b))return[...e];let f=[...b];return i!==null&&!f.includes(i)&&f.unshift(i),f},pe=(t,e)=>{if(t===void 0)return null;for(let i of t)if(i.startsWith(`${e}=`))return i.slice(e.length+1).split(",").map(o=>o.trim()).filter(Boolean);return null};export{It as main};
1
+ import{a as T,b as J,h as B,i as N,j as q,k as G,l as U,m as h,n as r,o as y}from"./chunk-4N7N37OY.js";import{a as ie,b as ne,c as re}from"./chunk-MSJSMJL2.js";import{d as Z}from"./chunk-Y2PH2BTY.js";import{c as ee,d as te,e as oe}from"./chunk-7OIAMA3E.js";import"./chunk-7UX6WIXX.js";import{b as I}from"./chunk-OCDUS26F.js";import{d as se}from"./chunk-JCIANZPY.js";import{a as X,c as A,d as Y}from"./chunk-2X2U2VC5.js";import{A as Q,a as W,b as z,i as H,m as _,o as K,q as V}from"./chunk-AQWB2PVR.js";import"./chunk-AGPCY6XP.js";import{a as k}from"./chunk-U3JLX6DY.js";import"./chunk-K223KAUB.js";import"./chunk-5MN3MWQN.js";import"./chunk-OLM5RTFK.js";import{a as F}from"./chunk-CLCZ7IO3.js";import{a as S}from"./chunk-2N4GTHXQ.js";import"./chunk-ON7NJA2P.js";import{b as g}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var he=new F({description:"AI provider interface \u2014 ask questions, generate content",modules:{ask:{description:"Send a prompt to an AI provider",load:()=>import("./ask-KPIHJIJZ.js")},list:{description:"List available AI providers",load:()=>import("./list-FWRKOILC.js")}}});var ae=k;var ve=async t=>{try{return await g.fs.stat(t),!0}catch{return!1}},we=[{id:"claude-code",paths:["CLAUDE.md",".claude"]},{id:"cursor",paths:[".cursorrules",".cursor"]},{id:"kiro",paths:[".kiro"]},{id:"copilot",paths:[".github/copilot-instructions.md"]},{id:"windsurf",paths:[".windsurfrules"]},{id:"codex",paths:[".codex",".codex/config.toml"]},{id:"copilot-cli",paths:[".copilot",".github/hooks"]}],le=async t=>{let e=[];for(let i of we)for(let o of i.paths)if(await ve(`${t}/${o}`)){e.push(i.id);break}return e};var a=async t=>{try{return await g.fs.stat(t),!0}catch{return!1}},ce=async(t,e)=>{try{let i=await g.fs.readTextFile(t);return JSON.parse(i)[e]??null}catch{return null}},xe=async t=>{let e=[];return(await a(`${t}/package.json`)||await a(`${t}/deno.json`))&&e.push("typescript"),await a(`${t}/go.mod`)&&e.push("go"),await a(`${t}/Cargo.toml`)&&e.push("rust"),(await a(`${t}/pyproject.toml`)||await a(`${t}/setup.py`))&&e.push("python"),e},Pe=async t=>{let e=[],i=await ce(`${t}/package.json`,"dependencies");return i!==null&&("react"in i&&e.push("react"),"vue"in i&&e.push("vue"),"svelte"in i&&e.push("svelte"),"next"in i&&e.push("nextjs"),"express"in i&&e.push("express"),"hono"in i&&e.push("hono")),e},Se=async t=>{let e=[];return await a(`${t}/.github/workflows`)&&e.push("github-actions"),await a(`${t}/.gitlab-ci.yml`)&&e.push("gitlab-ci"),await a(`${t}/Jenkinsfile`)&&e.push("jenkins"),await a(`${t}/.circleci`)&&e.push("circleci"),e},Te=async t=>{if(await a(`${t}/deno.json`))return"deno";let e=await ce(`${t}/package.json`,"devDependencies");if(e!==null){if("vitest"in e)return"vitest";if("jest"in e)return"jest";if("playwright"in e)return"playwright"}return null},de=async t=>{let[e,i,o,d]=await Promise.all([xe(t),Pe(t),Se(t),Te(t)]);return{languages:e,frameworks:i,ci:o,testRunner:d}};var It=async t=>{let e=g.process.cwd(),i=ne(t),o=J({target:i==="agent"?"non-interactive":"interactive"}),d=re(t),b=pe(d,"--concerns"),f=pe(d,"--tools"),p=d.includes("--non-interactive")||i==="agent";if(await Q(e))return r.warn(o,"noskills is already initialized in this project."),r.info(o,`Run \`${A("sync")}\` to regenerate tool files.`),S(void 0);N(o,"noskills init");let D=y(o,"Scanning project...");D.start();let m=await de(e);D.succeed("Project scanned");for(let s of m.languages)r.step(o,` ${s}`);for(let s of m.frameworks)r.step(o,` ${s}`);for(let s of m.ci)r.step(o,` ${s}`);m.testRunner!==null&&r.step(o,` test runner: ${m.testRunner}`),h(o);let R=y(o,"Detecting coding tools...");R.start();let $=await le(e),v=ie(),E=v!==null&&!$.includes(v)?[v]:[],w=[...new Set([...E,...$])];R.succeed(`${w.length} coding tool(s) detected`);for(let s of w){let n=s===v?" (current)":"";r.step(o,` ${s}${n}`)}let u;if(f!==null){let s=["claude-code","cursor","kiro","copilot","windsurf","opencode","codex","copilot-cli"],n=f.filter(c=>s.includes(c));u=[...new Set([...E,...n])]}else p?u=[...w]:(h(o),u=await Ie(o,w,v));h(o);let M=y(o,"Detecting AI providers...");M.start();let x=(await ae()).filter(s=>s.available).map(s=>s.name);M.succeed(`${x.length} provider(s) detected`),h(o);let P=await I(),l;if(b!==null){let s=P.map(n=>n.id);l=b.filter(n=>s.includes(n)).sort((n,c)=>s.indexOf(n)-s.indexOf(c))}else if(p)l=[];else{let s=P.map(c=>({value:c.id,label:c.name,hint:c.description.slice(0,60)})),n=await B(o,{message:"What kind of project is this? (space to toggle, enter to confirm)",options:s});l=T(n)?[]:[...n]}l.length>0?r.success(o,` Concerns: ${l.join(", ")}`):r.info(o,"No concerns selected. Add later with `concern add <id> [<id2> ...]`."),h(o);let j=y(o,"Initializing...");j.start(),await V(e);let ue=P.filter(s=>l.includes(s.id));for(let s of ue)await K(e,s);let L=await Y();X(L);let C={...z(l,u,x,m),command:L};await _(e,C);let O=W();if(await H(e,O),j.succeed("Scaffolded `.eser/`"),u.length>0){let s=y(o,"Syncing tool files...");s.start();let n=await oe(e,u,C);s.succeed(`Synced ${n.length} tool(s)`)}else r.warn(o,"No tools selected. noskills will work in agentless CLI mode only."),r.info(o,"Add tools later with `noskills sync`.");if(q(o,`Done. ${u.length} tool(s), ${x.length} provider(s), ${l.length} concern(s).`),i==="agent"){let n=(await I()).filter(me=>l.includes(me.id)),c=await ee(e),ge=te(C?.tools??[]),fe=await Z(O,n,c,C,void 0,void 0,void 0,ge);await se(fe,"json")}else G(o),U(o,`Start a spec with: ${A('spec new "..."')}`);return S(void 0)},ke=[{value:"claude-code",label:"Claude Code"},{value:"cursor",label:"Cursor"},{value:"kiro",label:"Kiro"},{value:"copilot",label:"GitHub Copilot"},{value:"windsurf",label:"Windsurf"},{value:"opencode",label:"OpenCode"},{value:"codex",label:"Codex CLI"},{value:"copilot-cli",label:"Copilot CLI"}],Ie=async(t,e,i)=>{let o=e.length===0?"No coding tools detected. Which tools do you use? (space to toggle)":"Any additional tools? (space to toggle, enter to skip)",d=new Set(e),b=await B(t,{message:o,options:ke.map(p=>({...p,hint:p.value===i?"you're running inside it":d.has(p.value)?"detected":void 0,disabled:p.value===i})),initialValues:[...e],required:!1});if(T(b))return[...e];let f=[...b];return i!==null&&!f.includes(i)&&f.unshift(i),f},pe=(t,e)=>{if(t===void 0)return null;for(let i of t)if(i.startsWith(`${e}=`))return i.slice(e.length+1).split(",").map(o=>o.trim()).filter(Boolean);return null};export{It as main};
@@ -0,0 +1,11 @@
1
+ import{d as P}from"./chunk-Y2PH2BTY.js";import{c as _,d as A}from"./chunk-7OIAMA3E.js";import"./chunk-7UX6WIXX.js";import"./chunk-OCDUS26F.js";import{c as m}from"./chunk-2X2U2VC5.js";import{A as N,d as p,e as x,f as T,l as R,p as C,t as I,u as $}from"./chunk-AQWB2PVR.js";import{a as l}from"./chunk-2N4GTHXQ.js";import{b as a}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var B=new Set(["log","diff","status","show","blame","rev-parse","ls-files","ls-tree","cat-file","describe","shortlog","name-rev","for-each-ref","rev-list","help","version"]),U=new Map([["branch",new Set(["","--list","-l","-a","--all","-r","--remotes","-v","--verbose","--contains","--no-contains","--merged","--no-merged"])],["tag",new Set(["","-l","--list","-v","--verify","-n"])],["stash",new Set(["list","show"])],["remote",new Set(["","-v","--verbose","show","get-url"])],["config",new Set(["--get","--get-all","--get-regexp","--list","-l","--global","--local","--system"])],["reflog",new Set(["","show"])]]),V=new Set(["-C","-c","--git-dir","--work-tree","--namespace","--super-prefix","--config-env"]),M=new Set(["--no-replace-objects","--bare","--no-optional-locks","--literal-pathspecs","--glob-pathspecs","--noglob-pathspecs","--icase-pathspecs","--no-pager","--paginate"]),Y=t=>{let s=0;for(;s<t.length;){let e=t[s];if(V.has(e)){s+=2;continue}if(M.has(e)){s+=1;continue}if(e.startsWith("--git-dir=")||e.startsWith("--work-tree=")||e.startsWith("--namespace=")||e.startsWith("--super-prefix=")||e.startsWith("--config-env=")){s+=1;continue}if(e.startsWith("-C")&&e.length>2){s+=1;continue}if(e.startsWith("-c")&&e.length>2&&e.includes("=")){s+=1;continue}return e}return null},S=t=>{let s=t.trim();if(!s.startsWith("git"))return!0;let e=s.slice(3).trim();if(e.length===0)return!0;let n=e.split(/\s+/),o=Y(n)??"";if(B.has(o))return!0;let i=U.get(o);if(i!==void 0){let r=n.indexOf(o),g=r>=0&&r+1<n.length?n[r+1]:"";if(i.has(g))return!0}return!1};var F=t=>{let s=[/(?:bash|sh|\/bin\/bash|\/bin\/sh)\s+-c\s+["'](.+?)["']/g,/(?:bash|sh|\/bin\/bash|\/bin\/sh)\s+-c\s+(\S+)/g,/eval\s+["'](.+?)["']/g];for(let o of s){let i;for(;(i=o.exec(t))!==null;){let r=i[1]??"";if(r.includes("git")&&!S(r))return!0}}let e=t.split(/\s*\|\s*/);for(let o of e){let i=o.trim();if(i.startsWith("git")&&!S(i))return!0}let n=t.matchAll(/(?:^|[\s($`(])git\b/g);for(let o of n){let r=o[0].indexOf("git"),g=(o.index??0)+r,f=(t.slice(g).split(/[;&|$)`'"]/)[0]??"").trim();if(f.startsWith("git")&&!S(f))return!0}return!1};var E=async()=>{let t=a.process.stdin.getReader(),s=[];try{for(;;){let{done:i,value:r}=await t.read();if(i||r===void 0)break;s.push(r)}}finally{t.releaseLock()}let e=0,n=new Uint8Array(s.reduce((i,r)=>i+r.length,0));for(let i of s)n.set(i,e),e+=i.length;let o=new TextDecoder().decode(n);try{return JSON.parse(o)}catch{return{}}},W=async t=>{let s=new TextEncoder,e=a.process.stdout.getWriter();await e.write(s.encode(JSON.stringify(t))),e.releaseLock()},ne=async t=>{switch(t?.[0]){case"pre-tool-use":return await K();case"stop":return await j();case"post-file-write":return await X();case"post-bash":return await H();case"session-start":return await z();default:return l(void 0)}},O=async t=>{await W({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:`noskills: ${t}`}})},G=(t,s)=>{if(s||!t.includes("git"))return null;let e=t.split(/\s*(?:&&|;)\s*/);for(let n of e){let o=n.trim();if(o.startsWith("git")&&!S(o))return"Git write operations are not allowed. Only read commands (log, diff, status, show, blame, branch, tag) are permitted. The user controls git, the agent controls files."}return F(t)?"Git write operations detected in subshell or pipe. Only read commands are permitted. The user controls git, the agent controls files.":null},K=async()=>{let t=await E(),s=t.tool_name??"unknown",e=t.tool_input??{},n=t.cwd??a.process.cwd(),o=await R(n),i=a.env.get("NOSKILLS_SESSION")??null;if(i!==null){let c=await I(n,i);if(c!==null&&c.mode==="free"){if(s==="Bash"){let u=(e.command??"").trim(),d=o?.allowGit??!1;if(!d&&u.includes("git")){let h=G(u,d);if(h!==null)return await O(h),l(void 0)}}return l(void 0)}}let r={};if(i!==null){let c=await I(n,i);if(c!==null&&c.mode==="spec"&&c.phase!==null)r={phase:c.phase};else if(c!==null&&c.spec!==null)try{r=await T(n,c.spec)}catch{return l(void 0)}else return l(void 0)}else{let c=await $(n);if(c.length>0){let u={DISCOVERY:10,DISCOVERY_REVIEW:10,SPEC_DRAFT:10,SPEC_APPROVED:8,BLOCKED:8,EXECUTING:2,FREE:0,IDLE:0,COMPLETED:0},d="IDLE",h=0;for(let L of c){let v=L.phase??"IDLE",b=u[v]??0;b>h&&(h=b,d=v)}r={phase:d};let y=new TextEncoder,D=a.process.stderr.getWriter();await D.write(y.encode(`noskills: WARNING \u2014 ${c.length} session(s) active but NOSKILLS_SESSION not set. Using most restrictive phase (${d}). Set NOSKILLS_SESSION for correct per-instance enforcement.
2
+ `)),D.releaseLock()}else try{r=await x(n)}catch{return l(void 0)}}if(s==="Bash"){let c=(e.command??"").trim(),u=o?.allowGit??!1,d=G(c,u);return d!==null?(await O(d),l(void 0)):l(void 0)}let g=["Write","Edit","MultiEdit"];if(!g.includes(s))return l(void 0);let w=e.file_path??e.path??"";if(w.includes(".eser/")||w.includes(".claude/"))return l(void 0);let f=r.phase??"UNKNOWN";if(f==="EXECUTING"||f==="IDLE"||f==="FREE"||f==="COMPLETED"||f==="UNKNOWN"){if(f==="EXECUTING"&&g.includes(s)){let c=`${n}/${p.stateDir}/executor-warned.flag`;try{await a.fs.readTextFile(c)}catch{try{await a.fs.mkdir(`${n}/${p.stateDir}`,{recursive:!0}),await a.fs.writeTextFile(c,new Date().toISOString());let u=new TextEncoder,d=a.process.stderr.getWriter();await d.write(u.encode(`noskills: REMINDER \u2014 You should be spawning a noskills-executor sub-agent for implementation work. If you're the main orchestrator agent, delegate to a sub-agent instead of editing directly. If you ARE a sub-agent, ignore this message and continue.
3
+ `)),d.releaseLock()}catch{}}}return l(void 0)}let k={DISCOVERY:`You are in DISCOVERY \u2014 this is a thinking phase, not an implementation phase. Read and discuss only. To write code, complete discovery and get the spec approved first. Run \`${m("next")}\` to continue.`,DISCOVERY_REVIEW:`You are in DISCOVERY_REVIEW \u2014 this is a thinking phase, not an implementation phase. Read and discuss only. To write code, complete discovery and get the spec approved first. Run \`${m('next --answer="approve"')}\` or revise answers.`,SPEC_DRAFT:`You are in SPEC_DRAFT \u2014 this is a thinking phase, not an implementation phase. Read and discuss only. To write code, approve the spec first. Run \`${m("approve")}\``,SPEC_APPROVED:`You are in SPEC_APPROVED \u2014 start execution first: \`${m('next --answer="start"')}\``,BLOCKED:`Execution blocked. Resolve with \`${m('next --answer="resolution"')}\``};return await O(k[f]??`Run \`${m("next")}\` first.`),l(void 0)},j=async()=>{let t=await E();if(t.stop_hook_active===!0)return l(void 0);let s=t.cwd??a.process.cwd(),e;try{let u=await a.fs.readTextFile(`${s}/${p.stateFile}`);e=JSON.parse(u)}catch{return l(void 0)}if(e.phase!=="EXECUTING")return l(void 0);let n=e.execution??{},o=`${s}/${p.stateDir}/files-changed.jsonl`,i=[];try{let d=(await a.fs.readTextFile(o)).trim().split(`
4
+ `).filter(Boolean);i=[...new Set(d.map(h=>{try{return JSON.parse(h).file}catch{return null}}).filter(h=>h!==null))]}catch{}let r=[],g="no changes";try{let{execSync:u}=await import("node:child_process");r=u("git diff --name-only",{cwd:s,encoding:"utf-8",timeout:5e3}).trim().split(`
5
+ `).filter(Boolean);let y=u("git diff --stat",{cwd:s,encoding:"utf-8",timeout:5e3}).trim().split(`
6
+ `);g=y[y.length-1]??"no changes"}catch{}let w=[...new Set([...i,...r])],f=(n.iteration??0)+1,k=`${s}/${p.stateDir}/iterations`;try{await a.fs.mkdir(k,{recursive:!0}),await a.fs.writeTextFile(`${k}/iteration-${f}.json`,JSON.stringify({iteration:f,files:w,gitStat:g.trim(),timestamp:new Date().toISOString()},null,2)+`
7
+ `)}catch{}let c=15;try{let u=await R(s);u!==null&&(c=u.maxIterationsBeforeRestart)}catch{}e.execution={...n,iteration:f,modifiedFiles:w,lastProgress:g.trim()||n.lastProgress||null},e.lastCalledAt=new Date().toISOString();try{await a.fs.writeTextFile(`${s}/${p.stateFile}`,JSON.stringify(e,null,2)+`
8
+ `)}catch{}try{await a.fs.writeTextFile(o,"")}catch{}try{await a.fs.remove(`${s}/${p.stateDir}/executor-warned.flag`)}catch{}if(f>=c){let u=new TextEncoder,d=a.process.stderr.getWriter();await d.write(u.encode(`noskills: iteration ${f} reached threshold (${c}). Consider starting a fresh conversation.
9
+ `)),d.releaseLock()}return l(void 0)},X=async()=>{let t=await E(),s=t.tool_input??{},e=s.file_path??s.path??"";if(!e||e.includes(".eser/")||e.includes(".claude/"))return l(void 0);let n=t.cwd??a.process.cwd(),o=`${n}/${p.stateDir}/files-changed.jsonl`,i=JSON.stringify({file:e,tool:t.tool_name,ts:new Date().toISOString()});try{await a.fs.mkdir(`${n}/${p.stateDir}`,{recursive:!0});let r="";try{r=await a.fs.readTextFile(o)}catch{}await a.fs.writeTextFile(o,r+i+`
10
+ `)}catch{}return l(void 0)},H=async()=>{let t=await E(),e=(t.tool_input??{}).command??"";if(!e.includes("noskills"))return l(void 0);let n=t.cwd??a.process.cwd(),o=`${n}/${p.stateDir}/noskills-calls.jsonl`,i=JSON.stringify({command:e,ts:new Date().toISOString()});try{await a.fs.mkdir(`${n}/${p.stateDir}`,{recursive:!0});let r="";try{r=await a.fs.readTextFile(o)}catch{}await a.fs.writeTextFile(o,r+i+`
11
+ `)}catch{}return l(void 0)},z=async()=>{let t=a.process.cwd();if(!await N(t))return l(void 0);let s=await x(t),e=await R(t),o=(await C(t)).filter(w=>e!==null&&e.concerns.includes(w.id)),i=await _(t),r=A(e?.tools??[]),g=await P(s,o,i,e,void 0,void 0,void 0,r);return await W(g),l(void 0)};export{ne as main};
@@ -1,3 +1,3 @@
1
- import{a as S,b as g,d as T,e as m,f,g as y}from"./chunk-XRKWQJMC.js";import{a as l}from"./chunk-OLM5RTFK.js";import"./chunk-FEHZCASN.js";import"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.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 o=v(this.config,e),c=y(e.messages,e.system);o.push("--prompt",c);let s=g(this.binary,o,{signal:r}),u=m(s.stderr),t=await T(s.stdout,this.modelId),d=await s.waitForExit(),i=await u,a=f("kiro",d.code,i);if(a!==null)throw a;return t}async*streamText(e,r){let o=v(this.config,e),c=y(e.messages,e.system);o.push("--prompt",c);let s=g(this.binary,o,{signal:r}),u=m(s.stderr);try{let t=new TextDecoder,d=s.stdout.getReader(),i="",a=await d.read();for(;a.done!==!0;){i+=t.decode(a.value,{stream:!0});let x=i.split(`
1
+ import{a as S,b as g,d as T,e as m,f,g as y}from"./chunk-NRCHLNQA.js";import{a as l}from"./chunk-OLM5RTFK.js";import"./chunk-ON7NJA2P.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 o=v(this.config,e),c=y(e.messages,e.system);o.push("--prompt",c);let s=g(this.binary,o,{signal:r}),u=m(s.stderr),t=await T(s.stdout,this.modelId),d=await s.waitForExit(),i=await u,a=f("kiro",d.code,i);if(a!==null)throw a;return t}async*streamText(e,r){let o=v(this.config,e),c=y(e.messages,e.system);o.push("--prompt",c);let s=g(this.binary,o,{signal:r}),u=m(s.stderr);try{let t=new TextDecoder,d=s.stdout.getReader(),i="",a=await d.read();for(;a.done!==!0;){i+=t.decode(a.value,{stream:!0});let x=i.split(`
2
2
  `);i=x.pop()??"";for(let _ of x){let p=_.trim();if(p.length!==0){try{let A=JSON.parse(p),w=C(A);if(w!==null){yield w;continue}}catch{}yield{kind:"content_delta",textDelta:p+`
3
3
  `}}}a=await d.read()}d.releaseLock(),i.trim().length>0&&(yield{kind:"content_delta",textDelta:i.trim()});let E=await s.waitForExit(),b=await u,h=f("kiro",E.code,b);h!==null?yield{kind:"error",error:h}: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}},O={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 o=n.properties?.args;return o!==void 0&&r.push(...o),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,O as kiroFactory};
@@ -1 +1 @@
1
- import{a as p}from"./chunk-TIGKFDKY.js";import{c as t,d as a,g as l,m as n,o,q as m,r as d}from"./chunk-Y6AFIAJP.js";import{a as i}from"./chunk-2N4GTHXQ.js";import"./chunk-FEHZCASN.js";import"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.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
+ import{a as p}from"./chunk-U3JLX6DY.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-ON7NJA2P.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};
@@ -0,0 +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-ON7NJA2P.js";import{b as R}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",FREE:"FREE"}[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] Free 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 Ee=["IDLE","DISCOVERY","REVIEW","DRAFT","APPROVED","EXECUTING","DONE"],Me=e=>{if(e===null||e==="FREE")return"FREE (no enforcement)";let r={DISCOVERY_REVIEW:"REVIEW",SPEC_DRAFT:"DRAFT",SPEC_APPROVED:"APPROVED",COMPLETED:"DONE"}[e]??e;return Ee.map(n=>n===r?c.bold(`\u2726${n}\u2726`):c.dim(n)).join("\u2192")},Ie=(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("FREE")),n.push(c.dim("No enforcement active")),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: ")+Ie(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 (FREE)":`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)},I=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=R.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=>{R.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=I(t);return g(Y(l,d.rightTop)),g(z(l,d.rightBottom)),g(c.moveTo(S,1)),g(`
3
+ `),V(void 0)}let L=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 C=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:{...R.env.toObject(),NOSKILLS_SESSION:i},cols:l,rows:p});f.process=b,L.add(f.id,b),b.onData(E=>{o.write(E),G(f,E),F?.()})}catch(m){let b=m instanceof Error?m.message:String(m);o.write(`[noskills manager] Failed to spawn claude: ${b}\r
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),E={id:`tab-${o}`,spec:i,mode:"spec",sessionId:o,process:null,buffer:[],widget:b,active:!0,phase:p};try{let h=await Q(),A=await j({command:h,cwd:r,env:{...R.env.toObject(),NOSKILLS_SESSION:o},cols:f,rows:m});E.process=A,L.add(E.id,A),A.onData(ee=>{b.write(ee),G(E,ee),F?.()})}catch(h){let A=h instanceof Error?h.message:String(h);b.write(`[noskills manager] Failed to spawn claude for spec "${i}": ${A}\r
6
+ `)}Object.assign(t,U(t,E)),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"]),D=()=>{let i=I(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&&D()},16))},x(),D();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 C(),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=I(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=I(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(R.process.stdin)){if(!t.running)break;if(i.kind==="mouse"){await he(i.event),u.size>0&&D();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 C(),x();break;case"newSpec":await C(),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 C();else{let m=a.find(b=>b.name===f)?.name;m!==void 0&&await Z(m)}x();break}case"closeTab":{let o=I(t);o!==null&&(o.process!==null&&L.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=I(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&&D()}})}finally{await L.killAll(),L.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-FEHZCASN.js";import"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";export{b as CommandBuilder,a as CommandError,f as ProcessGroup,d as exec,c as parseCommand,e as spawnPty};
1
+ import{a,b,c,d,e,f}from"./chunk-ON7NJA2P.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-Y2PH2BTY.js";import{a as Y,b as B,d as X}from"./chunk-7OIAMA3E.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 Ee,d as Fe}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,e as Z,f as ee,g as De,h as te,i as O,j as se,k as q,l as ne,m as Ce,o as ke,q as ie,r as Re}from"./chunk-NLLZQP64.js";import{A as fe,a as ae,d as F,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!=="FREE"&&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}/${F.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),E;o.phase==="IDLE"&&(E={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,$,E,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}/${F.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 Fe(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}/${F.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)):[],E=s.execution.debtCounter??0,J=h.map((v,k)=>({id:`debt-${E+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=E+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 Ee(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}/${F.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 +1 @@
1
- import{a as h,b as S,c as P,d as w}from"./chunk-G5OCHQQ2.js";import{s as c,t as f}from"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";import*as p from"node:child_process";import l from"node:process";import{Buffer as d}from"node:buffer";import{Readable as C,Writable as g}from"node:stream";var y={fs:!0,fsSync:!0,exec:!0,process:!0,env:!0,stdin:!0,stdout:!0,kv:!1},b=(i,u=[],s)=>new Promise((e,a)=>{let n=p.spawn(i,u,{cwd:s?.cwd,env:s?.env?{...l.env,...s.env}:void 0,stdio:c(s),signal:s?.signal}),o=[],t=[];n.stdout?.on("data",r=>o.push(r)),n.stderr?.on("data",r=>t.push(r)),n.on("error",a),n.on("close",r=>{e({success:r===0,code:r??1,stdout:new Uint8Array(d.concat(o)),stderr:new Uint8Array(d.concat(t))})})}),A=(i,u=[],s)=>{let e=p.spawn(i,u,{cwd:s?.cwd,env:s?.env?{...l.env,...s.env}:void 0,stdio:c(s),signal:s?.signal}),a=[],n=[];e.stdout?.on("data",t=>a.push(t)),e.stderr?.on("data",t=>n.push(t));let o=new Promise((t,r)=>{e.on("error",r),e.on("close",(m,v)=>{t({success:m===0,code:m??1,signal:v??void 0})})});return{pid:e.pid,stdin:e.stdin?g.toWeb(e.stdin):null,stdout:e.stdout?C.toWeb(e.stdout):null,stderr:e.stderr?C.toWeb(e.stderr):null,status:o,output:async()=>{let t=await o;return{success:t.success,code:t.code,stdout:new Uint8Array(d.concat(a)),stderr:new Uint8Array(d.concat(n))}},kill:t=>{e.kill(t)}}},U=()=>({name:"node",version:l.versions.node,capabilities:y,fs:h(),path:S(),exec:f(b,A),env:P(),process:w()});export{y as NODE_CAPABILITIES,U as createNodeRuntime};
1
+ import{a as h,b as S,c as P,d as w}from"./chunk-65A35QPF.js";import{s as c,t as f}from"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";import*as p from"node:child_process";import l from"node:process";import{Buffer as d}from"node:buffer";import{Readable as C,Writable as g}from"node:stream";var y={fs:!0,fsSync:!0,exec:!0,process:!0,env:!0,stdin:!0,stdout:!0,kv:!1},b=(i,u=[],s)=>new Promise((e,a)=>{let n=p.spawn(i,u,{cwd:s?.cwd,env:s?.env?{...l.env,...s.env}:void 0,stdio:c(s),signal:s?.signal}),o=[],t=[];n.stdout?.on("data",r=>o.push(r)),n.stderr?.on("data",r=>t.push(r)),n.on("error",a),n.on("close",r=>{e({success:r===0,code:r??1,stdout:new Uint8Array(d.concat(o)),stderr:new Uint8Array(d.concat(t))})})}),A=(i,u=[],s)=>{let e=p.spawn(i,u,{cwd:s?.cwd,env:s?.env?{...l.env,...s.env}:void 0,stdio:c(s),signal:s?.signal}),a=[],n=[];e.stdout?.on("data",t=>a.push(t)),e.stderr?.on("data",t=>n.push(t));let o=new Promise((t,r)=>{e.on("error",r),e.on("close",(m,v)=>{t({success:m===0,code:m??1,signal:v??void 0})})});return{pid:e.pid,stdin:e.stdin?g.toWeb(e.stdin):null,stdout:e.stdout?C.toWeb(e.stdout):null,stderr:e.stderr?C.toWeb(e.stderr):null,status:o,output:async()=>{let t=await o;return{success:t.success,code:t.code,stdout:new Uint8Array(d.concat(a)),stderr:new Uint8Array(d.concat(n))}},kill:t=>{e.kill(t)}}},U=()=>({name:"node",version:l.versions.node,capabilities:y,fs:h(),path:S(),exec:f(b,A),env:P(),process:w()});export{y as NODE_CAPABILITIES,U as createNodeRuntime};
@@ -1,3 +1,3 @@
1
- import{c as u}from"./chunk-XRKWQJMC.js";import{a as i,e as m}from"./chunk-OLM5RTFK.js";import"./chunk-FEHZCASN.js";import"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.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(`
1
+ import{c as u}from"./chunk-NRCHLNQA.js";import{a as i,e as m}from"./chunk-OLM5RTFK.js";import"./chunk-ON7NJA2P.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};
@@ -1 +1 @@
1
- import{a as h,b as u,c as S,d as k,e as g,f as m,g as f}from"./chunk-XRKWQJMC.js";import{a as c}from"./chunk-OLM5RTFK.js";import"./chunk-FEHZCASN.js";import"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.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);o.push("-p",i);let s=u(this.binary,o,{signal:r}),l=g(s.stderr),t=await k(s.stdout,this.modelId),p=await s.waitForExit(),a=await l,d=m("opencode",p.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);o.push("-p",i);let s=u(this.binary,o,{signal:r}),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(),p=await l,a=m("opencode",t.code,p);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
+ import{a as h,b as u,c as S,d as k,e as g,f as m,g as f}from"./chunk-NRCHLNQA.js";import{a as c}from"./chunk-OLM5RTFK.js";import"./chunk-ON7NJA2P.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);o.push("-p",i);let s=u(this.binary,o,{signal:r}),l=g(s.stderr),t=await k(s.stdout,this.modelId),p=await s.waitForExit(),a=await l,d=m("opencode",p.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);o.push("-p",i);let s=u(this.binary,o,{signal:r}),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(),p=await l,a=m("opencode",t.code,p);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};
@@ -0,0 +1,5 @@
1
+ import{e as T}from"./chunk-7OIAMA3E.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
+ `)},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
+ `),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
+ `),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+`
5
+ `),l.push(`${p}/.folder-rules.md`)}return{name:e,version:n.manifest.version,installedAt:new Date().toISOString(),source:"builtin",rules:i,concerns:t,folderRules:l}},ae=async(r,e,n)=>{let i=n.name,t=[],l=[],u=[],c=`${r}/${y.rulesDir}`;if(await f.fs.mkdir(c,{recursive:!0}),n.rules!==void 0)for(let o of n.rules){let a=await E(e,o),s=o.replace(/^rules\//,"").replace(/\.md$/,""),d=`pack-${i}-${s}.md`;await f.fs.writeTextFile(`${c}/${d}`,a),t.push(d)}if(n.concerns!==void 0&&n.concerns.length>0){let o=`${r}/${y.concernsDir}`;await f.fs.mkdir(o,{recursive:!0});let a=await W(r);for(let s of n.concerns){let d=await E(e,s),k=JSON.parse(d),O=`${String(a).padStart(3,"0")}-${k.id}.json`;await f.fs.writeTextFile(`${o}/${O}`,d),l.push(O),a++}}if(n.folderRules!==void 0)for(let[o,a]of Object.entries(n.folderRules)){let s=await E(e,a),d=`${r}/${o}/.folder-rules.md`;await f.fs.mkdir(`${r}/${o}`,{recursive:!0}),await f.fs.writeTextFile(d,s),u.push(`${o}/.folder-rules.md`)}return{name:i,version:n.version,installedAt:new Date().toISOString(),source:e,rules:t,concerns:l,folderRules:u}},oe=async()=>{let r=P({renderer:C.ansi(),sink:S.stdout()}),e=f.process.cwd(),n=await D(e),i=new Set(n.installed.map(t=>t.name));r.writeln(h("Built-in packs:"));for(let[t,l]of x){let u=Object.keys(l.ruleContents).length,c=l.concernContents.length,p=[];u>0&&p.push(`${u} rules`),c>0&&p.push(`${c} concern${c>1?"s":""}`),r.writeln(" ",h(t.padEnd(16)),m(l.manifest.description),m(` (${p.join(", ")})`))}if(r.writeln(""),r.writeln(h("Installed packs:")),n.installed.length===0)r.writeln(m(" No packs installed."));else for(let t of n.installed){let l=t.installedAt.slice(0,10);r.writeln(" ",i.has(t.name)?I(t.name.padEnd(16)):h(t.name.padEnd(16)),m(`v${t.version}`),m(` (installed ${l})`))}return await r.close(),$(void 0)},ce=async r=>{let e=P({renderer:C.ansi(),sink:S.stdout()}),n=f.process.cwd(),i=r?.[0];if(i===void 0||i.length===0){let a=v();return e.writeln(w("Please provide a pack name: "),h(`${a} pack install typescript`)),await e.close(),g({exitCode:1})}let t=await D(n),l=i.includes("/")||i.includes(":"),u=l?M(i)?.packPath??i:i;if(t.installed.some(a=>a.name===u))return e.writeln(w(`Pack "${u}" is already installed.`)),e.writeln(m(" Uninstall first to re-install.")),await e.close(),g({exitCode:1});let c;if(l){e.writeln(m(`Fetching pack from ${i}...`));try{let a=await z(i);if(a.requires!==void 0){for(let s of a.requires)if(!t.installed.some(d=>d.name===s)){e.writeln(m(` Installing dependency: ${s}`));let d=R(s);if(d!==void 0){let k=await A(n,s,d);t.installed.push(k)}}}c=await ae(n,i,a)}catch(a){return e.writeln(w(`Failed to install: ${a instanceof Error?a.message:String(a)}`)),await e.close(),g({exitCode:1})}}else{let a=R(i);if(a===void 0)return e.writeln(w(`Unknown pack: ${i}`)),e.writeln(m(` Available built-in packs: ${[...x.keys()].join(", ")}`)),await e.close(),g({exitCode:1});if(a.manifest.requires!==void 0){for(let s of a.manifest.requires)if(!t.installed.some(d=>d.name===s)){e.writeln(m(` Installing dependency: ${s}`));let d=R(s);if(d!==void 0){let k=await A(n,s,d),b=[...t.installed,k];await N(n,{installed:b})}}}c=await A(n,i,a)}let p={installed:[...t.installed,c]};await N(n,p);let o=await F(n);return o!==null&&o.tools.length>0&&(await T(n,o.tools,o),e.writeln(m(" Tool files synced."))),e.writeln(I("\u2714"),` Pack "${c.name}" v${c.version} installed.`),c.rules.length>0&&e.writeln(m(` Rules: ${c.rules.join(", ")}`)),c.concerns.length>0&&e.writeln(m(` Concerns: ${c.concerns.join(", ")}`)),await e.close(),$(void 0)},le=async r=>{let e=P({renderer:C.ansi(),sink:S.stdout()}),n=f.process.cwd(),i=r?.[0];if(i===void 0||i.length===0){let s=v();return e.writeln(w("Please provide a pack name: "),h(`${s} pack uninstall typescript`)),await e.close(),g({exitCode:1})}let t=await D(n),l=t.installed.find(s=>s.name===i);if(l===void 0)return e.writeln(w(`Pack "${i}" is not installed.`)),await e.close(),g({exitCode:1});let u=[];for(let s of t.installed){if(s.name===i)continue;let d=R(s.name);d?.manifest.requires!==void 0&&d.manifest.requires.includes(i)&&u.push(s.name)}u.length>0&&e.writeln(w(`Warning: pack "${i}" is required by: ${u.join(", ")}`));let c=`${n}/${y.rulesDir}`;for(let s of l.rules)try{await f.fs.remove(`${c}/${s}`)}catch{}let p=`${n}/${y.concernsDir}`;for(let s of l.concerns)try{await f.fs.remove(`${p}/${s}`)}catch{}for(let s of l.folderRules)try{await f.fs.remove(`${n}/${s}`)}catch{}let o={installed:t.installed.filter(s=>s.name!==i)};await N(n,o);let a=await F(n);return a!==null&&a.tools.length>0&&(await T(n,a.tools,a),e.writeln(m(" Tool files synced."))),e.writeln(I("\u2714"),` Pack "${i}" uninstalled.`),await e.close(),$(void 0)},de=async r=>{let e=P({renderer:C.ansi(),sink:S.stdout()}),n=r?.[0];if(n===void 0||n.length===0){let s=v();return e.writeln(w("Please provide a pack name: "),h(`${s} pack inspect typescript`)),await e.close(),g({exitCode:1})}let i=n.includes("/")||n.includes(":"),t,l=null,u=null;if(i)try{t=await z(n)}catch(s){return e.writeln(w(`Failed to fetch: ${s instanceof Error?s.message:String(s)}`)),await e.close(),g({exitCode:1})}else{let s=R(n);if(s===void 0)return e.writeln(w(`Unknown pack: ${n}`)),await e.close(),g({exitCode:1});t=s.manifest,l=s.ruleContents,u=s.concernContents}e.writeln(h(`Pack: ${t.name}`),m(` v${t.version}`)),e.writeln(`Description: ${t.description}`),t.author!==void 0&&e.writeln(`Author: ${t.author}`),t.tags!==void 0&&t.tags.length>0&&e.writeln(`Tags: ${t.tags.join(", ")}`),e.writeln("");let c=t.rules?.length??0;if(e.writeln(h(`Rules (${c}):`)),l!==null)for(let[s,d]of Object.entries(l))e.writeln(` - ${s}: `,m(`"${d}"`));else if(t.rules!==void 0)for(let s of t.rules){let d=s.replace(/^rules\//,"").replace(/\.md$/,"");e.writeln(` - ${d}`)}let p=t.concerns?.length??0;if(e.writeln(""),e.writeln(h(`Concerns (${p}):`)),u!==null&&u.length>0)for(let s of u)e.writeln(` - ${s.id}: ${s.name}`),s.acceptanceCriteria.length>0&&e.writeln(m(` ACs: "${s.acceptanceCriteria.join('", "')}"`));else p===0&&e.writeln(m(" none"));let o=t.folderRules!==void 0?Object.keys(t.folderRules).length:0;e.writeln(""),e.writeln(`Folder rules: ${o>0?o:"none"}`);let a=t.requires?.length??0;return e.writeln(`Dependencies: ${a>0?t.requires.join(", "):"none"}`),await e.close(),$(void 0)},ue=async r=>{let e=P({renderer:C.ansi(),sink:S.stdout()}),n=r?.[0]?.toLowerCase();if(n===void 0||n.length===0){let c=v();return e.writeln(w("Please provide a search query: "),h(`${c} pack search typescript`)),await e.close(),g({exitCode:1})}e.writeln(h("Matching packs:"));let i=!1;for(let[c,p]of x){let o=p.manifest.tags??[],a=c.includes(n),s=o.some(k=>k.includes(n)),d=p.manifest.description.toLowerCase().includes(n);(a||s||d)&&(e.writeln(" ",h(c.padEnd(16)),m(p.manifest.description),m(" [builtin]")),i=!0)}let t=f.process.cwd(),u=(await F(t))?.packRegistry;if(u!==void 0)try{let c=await globalThis.fetch(u,{signal:AbortSignal.timeout(j)});if(c.ok){let p=JSON.parse(await c.text());for(let o of p.packs){let a=o.tags??[],s=o.name.includes(n),d=a.some(b=>b.includes(n)),k=o.description.toLowerCase().includes(n);(s||d||k)&&(e.writeln(" ",h(o.name.padEnd(16)),m(o.description),m(` [${o.source}]`)),i=!0)}}}catch{}return i||e.writeln(m(` No packs matching "${n}" found.`)),await e.close(),$(void 0)};export{A as installBuiltinPack,ae as installRemotePack,Ee as main,D as readPacksFile,N as writePacksFile};
@@ -1,4 +1,4 @@
1
- import{a as k,b as C,f as v,n as o}from"./chunk-IZ4J7VRF.js";import{b as D,c as P}from"./chunk-VK7L5SMS.js";import{c as E,d as l,k as R,p as x}from"./chunk-QYMX2GR3.js";import"./chunk-Y6AFIAJP.js";import{a as d,b as $}from"./chunk-2N4GTHXQ.js";import{b as a}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import{e as j}from"./chunk-OTRBRRIO.js";var S=j(E(),1);var Y=async e=>{let t=a.process.cwd(),n=D(e),s=C({target:n==="agent"?"non-interactive":"interactive"}),u=P(e).includes("--force");if(!u&&n==="agent")return o.error(s,"Purge requires `--force` flag in agent mode."),$({exitCode:1});if(u)return o.step(s,"Purging noskills content..."),await q(t,s),o.success(s,"Purge complete."),d(void 0);let g=(await N(t)).filter(i=>i.exists);if(g.length===0)return o.info(s,"Nothing to remove."),d(void 0);let p=[];for(let i of g){let y=await v(s,{message:i.message});if(k(y))return o.info(s,"Aborted."),d(void 0);p.push({id:i.id,confirmed:y===!0})}let f=p.filter(i=>i.confirmed),I=p.filter(i=>!i.confirmed);if(f.length===0)return o.info(s,"Nothing selected for removal."),d(void 0);let T=new Set(f.map(i=>i.id)),w=[];for(let i of f)await H(t,i.id)?o.step(s,` Removed ${h(i.id)}`):(w.push(i.id),o.step(s,` Failed to remove ${h(i.id)}`));for(let i of I)o.step(s,` Kept ${h(i.id)}`);T.size>0&&await b(t);let M=f.length-w.length;return o.success(s,`Purge complete (${M} of ${g.length} categories removed).`),d(void 0)},N=async e=>{let[t,n,s,r]=await Promise.all([O(e),L(e),J(e),U(e)]);return[t,n,s,r]},O=async e=>{let t=await x(e),n=t.map(s=>s.id).join(", ");return{id:"concerns",exists:t.length>0,message:`Remove concerns? (${n})`}},L=async e=>{let t=await R(e),n=0;try{for await(let c of a.fs.readDir(`${e}/${l.specsDir}`))c.isDirectory&&n++}catch{}let s=Math.max(t.length,n);if(s===0)return{id:"specs",exists:!1,message:""};let r=t.map(c=>`${c.name} ${c.state.phase}`).join(", ");return{id:"specs",exists:!0,message:t.length>0?`Remove specs? (${s} specs: ${r})`:`Remove specs? (${s} spec directories)`}},J=async e=>{let t=0;try{for await(let n of a.fs.readDir(`${e}/${l.rulesDir}`))n.isFile&&t++}catch{}return{id:"rules",exists:t>0,message:`Remove rules? (${t} active rules)`}},U=async e=>{let t=!1,n=!1,s=!1;try{let c=await a.fs.readTextFile(`${e}/.claude/settings.json`);t=JSON.parse(c).hooks!==void 0}catch{}try{n=(await a.fs.readTextFile(`${e}/CLAUDE.md`)).includes("<!-- noskills:start -->")}catch{}let r=[`${e}/.claude/agents/noskills-executor.md`,`${e}/.claude/agents/noskills-verifier.md`];for(let c of r)try{await a.fs.stat(c),s=!0;break}catch{}return{id:"agent-integration",exists:t||n||s,message:"Remove agent integration? (.claude/settings.json, CLAUDE.md, .claude/agents/noskills-*.md)"}},h=e=>({concerns:"concerns",specs:"specs",rules:"rules","agent-integration":"agent integration"})[e],H=(e,t)=>{switch(t){case"concerns":return m(`${e}/${l.concernsDir}`);case"specs":return z([`${e}/${l.specsDir}`,`${e}/${l.stateDir}`]);case"rules":return m(`${e}/${l.rulesDir}`);case"agent-integration":return A(e)}},q=async(e,t)=>{await m(`${e}/${l.concernsDir}`)&&o.step(t," Removed `.eser/concerns/`"),await m(`${e}/${l.specsDir}`)&&o.step(t," Removed `.eser/specs/`"),await m(`${e}/${l.rulesDir}`)&&o.step(t," Removed `.eser/rules/`"),await m(`${e}/${l.stateDir}`)&&o.step(t," Removed `.eser/.state/`"),await b(e)&&o.step(t," Removed noskills section from `manifest.yml`"),await A(e)&&o.step(t," Removed agent integration")},m=async e=>{try{await a.fs.stat(e);let{rmSync:t}=await import("node:fs");return t(e,{recursive:!0,force:!0}),!0}catch{return!1}},z=async e=>{let t=!1;for(let n of e)await m(n)&&(t=!0);return t},F=async e=>{try{await a.fs.stat(e);let{unlinkSync:t}=await import("node:fs");return t(e),!0}catch{return!1}},b=async e=>{let t=`${e}/${l.manifestFile}`;try{let n=await a.fs.readTextFile(t),s=S.parseDocument(n);return s.has("noskills")?(s.delete("noskills"),await a.fs.writeTextFile(t,s.toString()),!0):!1}catch{return!1}},B=async e=>{let t=`${e}/CLAUDE.md`,n="<!-- noskills:start -->",s="<!-- noskills:end -->";try{let r=await a.fs.readTextFile(t),u=r.indexOf(n),c=r.indexOf(s);return u!==-1&&c!==-1?(r=r.slice(0,u).trimEnd()+`
1
+ import{a as k,b as C,f as v,n as o}from"./chunk-4N7N37OY.js";import{b as D,c as P}from"./chunk-MSJSMJL2.js";import{c as E,d as l,k as R,p as x}from"./chunk-AQWB2PVR.js";import"./chunk-K223KAUB.js";import{a as d,b as $}from"./chunk-2N4GTHXQ.js";import{b as a}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import{e as j}from"./chunk-OTRBRRIO.js";var S=j(E(),1);var Y=async e=>{let t=a.process.cwd(),n=D(e),s=C({target:n==="agent"?"non-interactive":"interactive"}),u=P(e).includes("--force");if(!u&&n==="agent")return o.error(s,"Purge requires `--force` flag in agent mode."),$({exitCode:1});if(u)return o.step(s,"Purging noskills content..."),await q(t,s),o.success(s,"Purge complete."),d(void 0);let g=(await N(t)).filter(i=>i.exists);if(g.length===0)return o.info(s,"Nothing to remove."),d(void 0);let p=[];for(let i of g){let y=await v(s,{message:i.message});if(k(y))return o.info(s,"Aborted."),d(void 0);p.push({id:i.id,confirmed:y===!0})}let f=p.filter(i=>i.confirmed),I=p.filter(i=>!i.confirmed);if(f.length===0)return o.info(s,"Nothing selected for removal."),d(void 0);let T=new Set(f.map(i=>i.id)),w=[];for(let i of f)await H(t,i.id)?o.step(s,` Removed ${h(i.id)}`):(w.push(i.id),o.step(s,` Failed to remove ${h(i.id)}`));for(let i of I)o.step(s,` Kept ${h(i.id)}`);T.size>0&&await b(t);let M=f.length-w.length;return o.success(s,`Purge complete (${M} of ${g.length} categories removed).`),d(void 0)},N=async e=>{let[t,n,s,r]=await Promise.all([O(e),L(e),J(e),U(e)]);return[t,n,s,r]},O=async e=>{let t=await x(e),n=t.map(s=>s.id).join(", ");return{id:"concerns",exists:t.length>0,message:`Remove concerns? (${n})`}},L=async e=>{let t=await R(e),n=0;try{for await(let c of a.fs.readDir(`${e}/${l.specsDir}`))c.isDirectory&&n++}catch{}let s=Math.max(t.length,n);if(s===0)return{id:"specs",exists:!1,message:""};let r=t.map(c=>`${c.name} ${c.state.phase}`).join(", ");return{id:"specs",exists:!0,message:t.length>0?`Remove specs? (${s} specs: ${r})`:`Remove specs? (${s} spec directories)`}},J=async e=>{let t=0;try{for await(let n of a.fs.readDir(`${e}/${l.rulesDir}`))n.isFile&&t++}catch{}return{id:"rules",exists:t>0,message:`Remove rules? (${t} active rules)`}},U=async e=>{let t=!1,n=!1,s=!1;try{let c=await a.fs.readTextFile(`${e}/.claude/settings.json`);t=JSON.parse(c).hooks!==void 0}catch{}try{n=(await a.fs.readTextFile(`${e}/CLAUDE.md`)).includes("<!-- noskills:start -->")}catch{}let r=[`${e}/.claude/agents/noskills-executor.md`,`${e}/.claude/agents/noskills-verifier.md`];for(let c of r)try{await a.fs.stat(c),s=!0;break}catch{}return{id:"agent-integration",exists:t||n||s,message:"Remove agent integration? (.claude/settings.json, CLAUDE.md, .claude/agents/noskills-*.md)"}},h=e=>({concerns:"concerns",specs:"specs",rules:"rules","agent-integration":"agent integration"})[e],H=(e,t)=>{switch(t){case"concerns":return m(`${e}/${l.concernsDir}`);case"specs":return z([`${e}/${l.specsDir}`,`${e}/${l.stateDir}`]);case"rules":return m(`${e}/${l.rulesDir}`);case"agent-integration":return A(e)}},q=async(e,t)=>{await m(`${e}/${l.concernsDir}`)&&o.step(t," Removed `.eser/concerns/`"),await m(`${e}/${l.specsDir}`)&&o.step(t," Removed `.eser/specs/`"),await m(`${e}/${l.rulesDir}`)&&o.step(t," Removed `.eser/rules/`"),await m(`${e}/${l.stateDir}`)&&o.step(t," Removed `.eser/.state/`"),await b(e)&&o.step(t," Removed noskills section from `manifest.yml`"),await A(e)&&o.step(t," Removed agent integration")},m=async e=>{try{await a.fs.stat(e);let{rmSync:t}=await import("node:fs");return t(e,{recursive:!0,force:!0}),!0}catch{return!1}},z=async e=>{let t=!1;for(let n of e)await m(n)&&(t=!0);return t},F=async e=>{try{await a.fs.stat(e);let{unlinkSync:t}=await import("node:fs");return t(e),!0}catch{return!1}},b=async e=>{let t=`${e}/${l.manifestFile}`;try{let n=await a.fs.readTextFile(t),s=S.parseDocument(n);return s.has("noskills")?(s.delete("noskills"),await a.fs.writeTextFile(t,s.toString()),!0):!1}catch{return!1}},B=async e=>{let t=`${e}/CLAUDE.md`,n="<!-- noskills:start -->",s="<!-- noskills:end -->";try{let r=await a.fs.readTextFile(t),u=r.indexOf(n),c=r.indexOf(s);return u!==-1&&c!==-1?(r=r.slice(0,u).trimEnd()+`
2
2
  `+r.slice(c+s.length).trimStart(),await a.fs.writeTextFile(t,r.trimEnd()+`
3
3
  `),!0):!1}catch{return!1}},K=async e=>{let t=`${e}/.claude/settings.json`;try{let n=await a.fs.readTextFile(t),s=JSON.parse(n);return s.hooks!==void 0?(delete s.hooks,await a.fs.writeTextFile(t,JSON.stringify(s,null,2)+`
4
4
  `),!0):!1}catch{return!1}},A=async e=>{let t=!1;await K(e)&&(t=!0),await B(e)&&(t=!0);let n=[`${e}/.claude/agents/noskills-executor.md`,`${e}/.claude/agents/noskills-verifier.md`];for(let r of n)await F(r)&&(t=!0);let s=[`${e}/.cursorrules`,`${e}/.windsurfrules`,`${e}/.kiro/steering/conventions.md`,`${e}/.github/copilot-instructions.md`];for(let r of s)await F(r)&&(t=!0);return t};export{Y as main};
@@ -0,0 +1 @@
1
+ import{h as E}from"./chunk-TI4CLT2V.js";import{s as y,u as C}from"./chunk-NLLZQP64.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};
@@ -1 +1 @@
1
- import{q as k}from"./chunk-FJCXMC2D.js";import{d as h,f as g,h as y,i as S,j as I}from"./chunk-QYMX2GR3.js";import{d as i,f as n,g as d,o as u,q as w,r as f}from"./chunk-Y6AFIAJP.js";import{a as c,b as p}from"./chunk-2N4GTHXQ.js";import{b as l}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";var x=async D=>{let e=u({renderer:f.ansi(),sink:w.stdout()}),a=l.process.cwd(),o=y(D);if(!o.ok)return e.writeln(n(o.error)),await e.close(),p({exitCode:1});let s;try{s=await g(a,o.spec)}catch(r){let A=r instanceof Error?r.message:String(r);return e.writeln(n(A)),await e.close(),p({exitCode:1})}if(s.phase==="IDLE"||s.phase==="UNINITIALIZED")return e.writeln(i("Already idle. Nothing to reset.")),await e.close(),c(void 0);if(s.spec!==null){let r=`${a}/${h.specDir(s.spec)}`;try{await l.fs.stat(r)}catch{e.writeln(n(`Active spec '${s.spec}' directory not found.`)),e.writeln(i("Resetting to IDLE anyway."))}}let t=s.spec,m=k(s);return await S(a,m),t!==null&&await I(a,t,m),e.writeln(d("\u2714")," Reset to IDLE."),t!==null&&e.writeln(i(`Spec "${t}" state cleared. Files in .eser/specs/${t}/ preserved.`)),await e.close(),c(void 0)};export{x as main};
1
+ import{x as k}from"./chunk-NLLZQP64.js";import{d as h,f as g,h as y,i as S,j as I}from"./chunk-AQWB2PVR.js";import{d as i,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 p}from"./chunk-2N4GTHXQ.js";import{b as l}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var x=async D=>{let e=u({renderer:f.ansi(),sink:w.stdout()}),a=l.process.cwd(),o=y(D);if(!o.ok)return e.writeln(n(o.error)),await e.close(),p({exitCode:1});let s;try{s=await g(a,o.spec)}catch(r){let A=r instanceof Error?r.message:String(r);return e.writeln(n(A)),await e.close(),p({exitCode:1})}if(s.phase==="IDLE"||s.phase==="UNINITIALIZED")return e.writeln(i("Already idle. Nothing to reset.")),await e.close(),c(void 0);if(s.spec!==null){let r=`${a}/${h.specDir(s.spec)}`;try{await l.fs.stat(r)}catch{e.writeln(n(`Active spec '${s.spec}' directory not found.`)),e.writeln(i("Resetting to IDLE anyway."))}}let t=s.spec,m=k(s);return await S(a,m),t!==null&&await I(a,t,m),e.writeln(d("\u2714")," Reset to IDLE."),t!==null&&e.writeln(i(`Spec "${t}" state cleared. Files in .eser/specs/${t}/ preserved.`)),await e.close(),c(void 0)};export{x as main};
@@ -1,4 +1,4 @@
1
- import{a as v,e as C}from"./chunk-OV7ZXBXC.js";import{b as A,c as j}from"./chunk-YK6UG66R.js";import{d as x,l as T}from"./chunk-QYMX2GR3.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-Y6AFIAJP.js";import{a as g,b as $}from"./chunk-2N4GTHXQ.js";import{b as p}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.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+=`---
1
+ import{a as v,e as C}from"./chunk-7OIAMA3E.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+=`---
@@ -0,0 +1,3 @@
1
+ import{a as D,b as A,g as F}from"./chunk-4N7N37OY.js";import{d as B}from"./chunk-Y2PH2BTY.js";import{c as W,d as X}from"./chunk-7OIAMA3E.js";import"./chunk-7UX6WIXX.js";import"./chunk-OCDUS26F.js";import{b as E,c as V}from"./chunk-2X2U2VC5.js";import{a as _,o as j}from"./chunk-NLLZQP64.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-LORCBZWH.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-LORCBZWH.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
+ `)},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
+ `;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};
@@ -1 +1 @@
1
- import{b as I,c as E}from"./chunk-YK6UG66R.js";import{A as R,f as b,k as y,s as A,u as C,v as N,x as $,y as x,z as O}from"./chunk-QYMX2GR3.js";import{c as l,d as n,f as c,g as v,o as f,q as w,r as S}from"./chunk-Y6AFIAJP.js";import{a as u,b as h}from"./chunk-2N4GTHXQ.js";import{b as m}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";var F=async t=>{let s=t?.[0];if(s==="start")return await P(t?.slice(1));if(s==="end")return await D(t?.slice(1));if(s==="list")return await M();if(s==="gc")return await K();let i=I(),e=f({renderer:S.ansi(),sink:w.stdout()});return e.writeln(`Usage: ${i} session <start | end | list | gc>`),e.writeln(""),e.writeln(n(" start --spec=<name> Bind to a spec")),e.writeln(n(" start --free Free mode (no enforcement)")),e.writeln(n(" start --auto Auto-detect spec or free")),e.writeln(n(" end [--id=<id>] End current/specific session")),e.writeln(n(" list Show active sessions")),e.writeln(n(" gc Remove stale sessions")),await e.close(),u(void 0)},P=async t=>{let s=f({renderer:S.ansi(),sink:w.stdout()}),i=m.process.cwd();if(!await R(i))return s.writeln(c("noskills is not initialized.")," Run: ",l(E("init"))),await s.close(),h({exitCode:1});let e=null,o=!1,d=!1;for(let r of t??[])r.startsWith("--spec=")?e=r.slice(7):r==="--free"?o=!0:r==="--auto"&&(d=!0);if(d){let p=(await y(i)).filter(L=>L.state.phase!=="COMPLETED"&&L.state.phase!=="IDLE");p.length===1?e=p[0].name:o=!0}if(e===null&&!o)return s.writeln(c("Specify --spec=<name>, --free, or --auto.")),s.writeln(n(`Example: ${I()} session start --spec=my-feature`)),await s.close(),h({exitCode:1});let a=null;if(e!==null)try{a=(await b(i,e)).phase}catch(r){let p=r instanceof Error?r.message:String(r);return s.writeln(c(`Error: ${p}`)),await s.close(),h({exitCode:1})}let g=O(),k={id:g,spec:e,mode:o?"free":"spec",phase:o?null:a,pid:0,startedAt:new Date().toISOString(),lastActiveAt:new Date().toISOString(),tool:"claude-code"};return await A(i,k),s.writeln(v("Session started.")),s.writeln(" ID: ",l(g)),s.writeln(" Mode: ",l(o?"free":"spec")),e!==null&&(s.writeln(" Spec: ",l(e)),a!==null&&s.writeln(" Phase: ",n(a))),s.writeln(""),s.writeln("Run: ",l(`export NOSKILLS_SESSION=${g}`)),await s.close(),u(void 0)},D=async t=>{let s=f({renderer:S.ansi(),sink:w.stdout()}),i=m.process.cwd(),e=null;for(let d of t??[])d.startsWith("--id=")&&(e=d.slice(5));return e===null&&(e=m.env.get("NOSKILLS_SESSION")??null),e===null?(s.writeln(c("No session specified. Use --id=<id> or set NOSKILLS_SESSION env var.")),await s.close(),h({exitCode:1})):(await N(i,e)?s.writeln(v("Session ended: "),n(e)):s.writeln(c(`Session not found: ${e}`)),await s.close(),u(void 0))},M=async()=>{let t=f({renderer:S.ansi(),sink:w.stdout()}),s=m.process.cwd(),i=await C(s);if(t.writeln(l("Sessions")),t.writeln(""),i.length===0)t.writeln(n(` No active sessions. Start one with: ${E("session start --spec=<name>")}`));else for(let e of i){let o=x(e),d=Date.now()-new Date(e.lastActiveAt).getTime(),a=Math.floor(d/6e4),g=a<60?`${a}min ago`:`${Math.floor(a/60)}h ago`,k=e.mode==="free"?"free":`spec:${e.spec??"?"}`,r=e.phase??"\u2014",p=o?c(" (stale)"):"";t.writeln(" ",l(e.id)," ",n(k.padEnd(25))," ",n(r.padEnd(18))," ",n(g),p)}return await t.close(),u(void 0)},K=async()=>{let t=f({renderer:S.ansi(),sink:w.stdout()}),s=m.process.cwd(),i=await $(s);if(i.length===0)t.writeln(n("No stale sessions to remove."));else{t.writeln(v(`Removed ${i.length} stale session(s):`));for(let e of i)t.writeln(" ",n(e))}return await t.close(),u(void 0)};export{F as main};
1
+ import{b as I,c as E}from"./chunk-2X2U2VC5.js";import{A as R,f as b,k as y,s as A,u as C,v as N,x as $,y as x,z as O}from"./chunk-AQWB2PVR.js";import{c as l,d as n,f as c,g as v,o as f,q as w,r as S}from"./chunk-K223KAUB.js";import{a as u,b as h}from"./chunk-2N4GTHXQ.js";import{b as m}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var F=async t=>{let s=t?.[0];if(s==="start")return await P(t?.slice(1));if(s==="end")return await D(t?.slice(1));if(s==="list")return await M();if(s==="gc")return await K();let i=I(),e=f({renderer:S.ansi(),sink:w.stdout()});return e.writeln(`Usage: ${i} session <start | end | list | gc>`),e.writeln(""),e.writeln(n(" start --spec=<name> Bind to a spec")),e.writeln(n(" start --free Free mode (no enforcement)")),e.writeln(n(" start --auto Auto-detect spec or free")),e.writeln(n(" end [--id=<id>] End current/specific session")),e.writeln(n(" list Show active sessions")),e.writeln(n(" gc Remove stale sessions")),await e.close(),u(void 0)},P=async t=>{let s=f({renderer:S.ansi(),sink:w.stdout()}),i=m.process.cwd();if(!await R(i))return s.writeln(c("noskills is not initialized.")," Run: ",l(E("init"))),await s.close(),h({exitCode:1});let e=null,o=!1,d=!1;for(let r of t??[])r.startsWith("--spec=")?e=r.slice(7):r==="--free"?o=!0:r==="--auto"&&(d=!0);if(d){let p=(await y(i)).filter(L=>L.state.phase!=="COMPLETED"&&L.state.phase!=="IDLE");p.length===1?e=p[0].name:o=!0}if(e===null&&!o)return s.writeln(c("Specify --spec=<name>, --free, or --auto.")),s.writeln(n(`Example: ${I()} session start --spec=my-feature`)),await s.close(),h({exitCode:1});let a=null;if(e!==null)try{a=(await b(i,e)).phase}catch(r){let p=r instanceof Error?r.message:String(r);return s.writeln(c(`Error: ${p}`)),await s.close(),h({exitCode:1})}let g=O(),k={id:g,spec:e,mode:o?"free":"spec",phase:o?null:a,pid:0,startedAt:new Date().toISOString(),lastActiveAt:new Date().toISOString(),tool:"claude-code"};return await A(i,k),s.writeln(v("Session started.")),s.writeln(" ID: ",l(g)),s.writeln(" Mode: ",l(o?"free":"spec")),e!==null&&(s.writeln(" Spec: ",l(e)),a!==null&&s.writeln(" Phase: ",n(a))),s.writeln(""),s.writeln("Run: ",l(`export NOSKILLS_SESSION=${g}`)),await s.close(),u(void 0)},D=async t=>{let s=f({renderer:S.ansi(),sink:w.stdout()}),i=m.process.cwd(),e=null;for(let d of t??[])d.startsWith("--id=")&&(e=d.slice(5));return e===null&&(e=m.env.get("NOSKILLS_SESSION")??null),e===null?(s.writeln(c("No session specified. Use --id=<id> or set NOSKILLS_SESSION env var.")),await s.close(),h({exitCode:1})):(await N(i,e)?s.writeln(v("Session ended: "),n(e)):s.writeln(c(`Session not found: ${e}`)),await s.close(),u(void 0))},M=async()=>{let t=f({renderer:S.ansi(),sink:w.stdout()}),s=m.process.cwd(),i=await C(s);if(t.writeln(l("Sessions")),t.writeln(""),i.length===0)t.writeln(n(` No active sessions. Start one with: ${E("session start --spec=<name>")}`));else for(let e of i){let o=x(e),d=Date.now()-new Date(e.lastActiveAt).getTime(),a=Math.floor(d/6e4),g=a<60?`${a}min ago`:`${Math.floor(a/60)}h ago`,k=e.mode==="free"?"free":`spec:${e.spec??"?"}`,r=e.phase??"\u2014",p=o?c(" (stale)"):"";t.writeln(" ",l(e.id)," ",n(k.padEnd(25))," ",n(r.padEnd(18))," ",n(g),p)}return await t.close(),u(void 0)},K=async()=>{let t=f({renderer:S.ansi(),sink:w.stdout()}),s=m.process.cwd(),i=await $(s);if(i.length===0)t.writeln(n("No stale sessions to remove."));else{t.writeln(v(`Removed ${i.length} stale session(s):`));for(let e of i)t.writeln(" ",n(e))}return await t.close(),u(void 0)};export{F as main};
@@ -0,0 +1 @@
1
+ import{a as _}from"./chunk-7UX6WIXX.js";import{a as K,d as X}from"./chunk-JCIANZPY.js";import{g as z,h as I}from"./chunk-TI4CLT2V.js";import{b as S,c as A}from"./chunk-2X2U2VC5.js";import{b as O,i as M,j as N,r as F,t as B,u as G,v as H,w as q}from"./chunk-NLLZQP64.js";import{A as T,a as U,d as D,f as E,g as W,j as x,k as L}from"./chunk-AQWB2PVR.js";import{c as w,d as c,f as p,g as k,h as P,k as j,o as g,q as y,r as v}from"./chunk-K223KAUB.js";import{a as m,b as d}from"./chunk-2N4GTHXQ.js";import{b as h}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var J=new Set(["new","list","help","next","approve","done","block","reset","cancel","wontfix","reopen","revisit","split","ac","task","note"]),Q=new Map([["next",()=>import("./next-LQLZL4LN.js")],["approve",()=>import("./approve-LCVVXAE3.js")],["done",()=>import("./done-XDWNPZVT.js")],["block",()=>import("./block-MNFFAMEP.js")],["reset",()=>import("./reset-XY2HW67W.js")],["cancel",()=>import("./cancel-M3G3XXMU.js")],["wontfix",()=>import("./wontfix-JULEBOGK.js")],["reopen",()=>import("./reopen-IR7FAPQE.js")]]);var $e=async i=>{let e=i?.[0];if(e==="new")return await Z(i?.slice(1));if(e==="list")return await ee(i?.slice(1));if(e==="help"||e===void 0){let o=S(),r=g({renderer:v.ansi(),sink:y.stdout()});return r.writeln(`Usage: ${o} spec <new <name> "desc" | list | <name> <command>>`),r.writeln(""),r.writeln(c(" Commands for a spec:")),r.writeln(c(" next, approve, done, block, reset, cancel, wontfix, reopen, revisit, split, ac, task, note")),r.writeln(""),r.writeln(c(" Examples:")),r.writeln(c(` ${o} spec new my-feature "Add upload support"`)),r.writeln(c(` ${o} spec my-feature next`)),r.writeln(c(` ${o} spec my-feature next --answer="approve"`)),await r.close(),m(void 0)}let t=e,s=i?.[1];if(s===void 0)return await(await import("./status-DJZSCXLA.js")).main([`--spec=${t}`]);if(s==="split")return await se([`--spec=${t}`,...i?.slice(2)??[]]);if(s==="revisit")return await ne([`--spec=${t}`,...i?.slice(2)??[]]);if(s==="ac")return await ie(t,i?.slice(2));if(s==="task")return await re(t,i?.slice(2));if(s==="note")return await ae(t,i?.slice(2));let l=Q.get(s);if(l!==void 0)return await(await l()).main([`--spec=${t}`,...i?.slice(2)??[]]);let a=g({renderer:v.ansi(),sink:y.stdout()});return a.writeln(p(`Unknown command: spec ${t} ${s}`)),a.writeln(c(" Valid: next, approve, done, block, reset, cancel, wontfix, reopen, revisit, split, ac, task, note")),await a.close(),d({exitCode:1})},Z=async i=>{let e=g({renderer:v.ansi(),sink:y.stdout()}),t=h.process.cwd();if(!await T(t))return e.writeln(p("noskills is not initialized.")," Run: ",w(A("init"))),await e.close(),d({exitCode:1});let s=null,l=[];if(i!==void 0){let $=!1;for(let C of i)C.startsWith("--name=")?(s=C.slice(7),$=!0):C.startsWith("-")||(!$&&s===null?(s=C,$=!0):l.push(C))}let a=null;if(i!==void 0)for(let $ of i)$.startsWith("--from-plan=")&&(a=$.slice(12));let o=l.join(" ");if(s===null||s.length===0)return e.writeln(p("Error: spec name is required.")),e.writeln(c("Example: "),w(`${S()} spec new photo-upload "photo upload feature"`)),await e.close(),d({exitCode:1});if(J.has(s))return e.writeln(p(`"${s}" is a reserved name.`),c(" Choose a different spec name.")),await e.close(),d({exitCode:1});let r=/^[a-z0-9][a-z0-9-]*[a-z0-9]$/;if(s.length>50||s.length>1&&!r.test(s)||s.length===1&&!/^[a-z0-9]$/.test(s))return e.writeln(p("Invalid spec name: "),w(s)),e.writeln(c("Must be lowercase, hyphens, numbers only. Max 50 chars. Regex: /^[a-z0-9][a-z0-9-]*[a-z0-9]$/")),await e.close(),d({exitCode:1});if(o.length===0)return e.writeln(p("Please provide a description: "),w(`${S()} spec new --name=${s} "photo upload feature"`)),await e.close(),d({exitCode:1});if(a!==null)try{if((await h.fs.stat(a)).size>50*1024)return e.writeln(p("Plan file too large. Maximum 50KB.")),await e.close(),d({exitCode:1})}catch{return e.writeln(p(`Plan file not found: ${a}`)),await e.close(),d({exitCode:1})}let n=`spec/${s}`,u=`${t}/${D.specDir(s)}`;try{return await h.fs.stat(u),e.writeln(p(`Spec "${s}" already exists.`),c(` Use a different --name or run \`${S()} reset --spec=${s}\` first.`)),await e.close(),d({exitCode:1})}catch{}let R=U(),f=O(R,s,n,o),b=await I(t),V=G(f,"IDLE","DISCOVERY",b);return a!==null&&(V={...f,discovery:{...f.discovery,planPath:a}}),await h.fs.mkdir(`${t}/${D.specDir(s)}`,{recursive:!0}),await x(t,s,V),e.writeln(k("\u2714")," Spec started: ",w(s)),e.writeln(" Directory: ",c(D.specDir(s))),e.writeln(" Branch: ",c(n)),e.writeln(" Phase: ",P("DISCOVERY")),a!==null&&e.writeln(" Plan: ",c(a)),e.writeln(""),e.writeln("Run ",w(A(`next --spec=${s}`))," to begin discovery questions."),await e.close(),m(void 0)},ee=async i=>{let e=h.process.cwd(),t=K(i),s=await L(e),l=`${e}/${D.specsDir}`,a=new Set(s.map(n=>n.name)),o=[];for(let n of s)o.push({name:n.name,phase:n.state.phase,iteration:n.state.execution.iteration});try{for await(let n of h.fs.readDir(l))n.isDirectory&&!a.has(n.name)&&o.push({name:n.name,phase:"IDLE",iteration:0})}catch{}if(t==="json")return await X(o,"json"),m(void 0);let r=g({renderer:v.ansi(),sink:y.stdout()});if(r.writeln(w("Specs")),r.writeln(""),o.length===0)r.writeln(c(" No specs yet."));else for(let n of o){let u=n.phase==="COMPLETED"?k(n.phase):n.phase==="EXECUTING"?j(n.phase):n.phase==="BLOCKED"?p(n.phase):P(n.phase),R=n.phase==="EXECUTING"?c(` iteration ${n.iteration}`):"";r.writeln(" ",c("\u25CB")," ",n.name," ",u,R)}return await r.close(),m(void 0)},te=i=>{let e=[],t=0;for(;t<i.length;)if(i[t]==="--into"&&t+1<i.length){let s=i[t+1],l=s;t+2<i.length&&!i[t+2].startsWith("-")?(l=i[t+2],t+=3):t+=2,e.push({name:s,description:l})}else t+=1;return e},se=async i=>{let e=g({renderer:v.ansi(),sink:y.stdout()}),t=h.process.cwd();if(!await T(t))return e.writeln(p("noskills is not initialized.")," Run: ",w(A("init"))),await e.close(),d({exitCode:1});let s=W(i??[]);if(s===null)return e.writeln(p("Error: --spec=<name> is required.")),e.writeln(c("Example: "),w(`${S()} spec split --spec=parent --into name1 "desc1" --into name2 "desc2"`)),await e.close(),d({exitCode:1});let l;try{l=await E(t,s)}catch(n){let u=n instanceof Error?n.message:String(n);return e.writeln(p(`Error: ${u}`)),await e.close(),d({exitCode:1})}if(l.phase!=="DISCOVERY"&&l.phase!=="DISCOVERY_REVIEW")return e.writeln(p(`Cannot split spec in phase ${l.phase}. Must be in DISCOVERY or DISCOVERY_REVIEW.`)),await e.close(),d({exitCode:1});let a=te(i??[]);if(a.length<2){let n=_(l.discovery.answers);if(!n.detected||n.proposals.length<2)return e.writeln(p("Error: at least 2 --into entries required, or discovery answers must contain 2+ independent areas.")),await e.close(),d({exitCode:1});let u=[];for(let f of n.proposals){let b=`${t}/${D.specDir(f.name)}`;await h.fs.mkdir(b,{recursive:!0});let Y=l.discovery.answers.filter(C=>f.relevantAnswers.includes(C.questionId)),$=O(U(),f.name,`spec/${f.name}`);for(let C of Y)$=M($,C.questionId,C.answer);$=N($),await x(t,f.name,$),u.push(f.name)}let R=F(l,"cancelled",`Split into: ${u.join(", ")}`);await x(t,s,R),e.writeln(k("Split complete."),` Created ${u.length} sub-specs:`);for(let f of u)e.writeln(" ",c("\u25CB")," ",w(f));return e.writeln("",c(`Parent spec "${s}" cancelled.`)),await e.close(),m(void 0)}let o=[];for(let n of a){let u=`${t}/${D.specDir(n.name)}`;await h.fs.mkdir(u,{recursive:!0});let f=O(U(),n.name,`spec/${n.name}`);for(let b of l.discovery.answers)f=M(f,b.questionId,b.answer);f=N(f),await x(t,n.name,f),o.push(n.name)}let r=F(l,"cancelled",`Split into: ${o.join(", ")}`);await x(t,s,r),e.writeln(k("Split complete."),` Created ${o.length} sub-specs:`);for(let n of o)e.writeln(" ",c("\u25CB")," ",w(n));return e.writeln("",c(`Parent spec "${s}" cancelled.`)),await e.close(),m(void 0)},ne=async i=>{let e=g({renderer:v.ansi(),sink:y.stdout()}),t=h.process.cwd();if(!await T(t))return e.writeln(p("noskills is not initialized.")," Run: ",w(A("init"))),await e.close(),d({exitCode:1});let s=W(i??[]);if(s===null)return e.writeln(p("Error: --spec=<name> is required.")),e.writeln(c("Example: "),w(`${S()} spec revisit --spec=my-spec "reason for revisit"`)),await e.close(),d({exitCode:1});let l=(i??[]).find(n=>!n.startsWith("--")&&n!==s);if(l===void 0||l.trim().length===0)return e.writeln(p('Error: Reason is required: noskills spec revisit --spec=X "reason"')),await e.close(),d({exitCode:1});let a;try{a=await E(t,s)}catch(n){let u=n instanceof Error?n.message:String(n);return e.writeln(p(`Error: ${u}`)),await e.close(),d({exitCode:1})}if(a.phase==="DISCOVERY"||a.phase==="DISCOVERY_REVIEW"||a.phase==="SPEC_DRAFT"||a.phase==="SPEC_APPROVED")return e.writeln(p("Already in planning phase, no need to revisit.")),await e.close(),d({exitCode:1});if(a.phase==="COMPLETED")return e.writeln(p(`Spec is completed. Use \`${S()} reopen --spec=${s}\` instead.`)),await e.close(),d({exitCode:1});if(a.phase==="IDLE"||a.phase==="FREE")return e.writeln(p("No active spec to revisit.")),await e.close(),d({exitCode:1});let o=a.execution.completedTasks.length,r=B(a,l.trim());return await x(t,s,r),e.writeln(k("Revisit complete.")),e.writeln(" Phase: ",w("DISCOVERY"),c(` (revisited from ${a.phase})`)),o>0&&e.writeln(" Previous progress: ",w(`${o} tasks completed`)),e.writeln(" Reason: ",c(`"${l.trim()}"`)),e.writeln(" Discovery answers preserved \u2014 revise or re-approve."),await e.close(),m(void 0)},ie=async(i,e)=>{let t=g({renderer:v.ansi(),sink:y.stdout()}),s=h.process.cwd(),l=e?.[0];if(i===void 0||l===void 0)return t.writeln(`Usage: ${S()} spec <name> ac <add "text" | list>`),await t.close(),m(void 0);if(l==="add"){let a=(e?.slice(1)??[]).filter(u=>!u.startsWith("-")).join(" ");if(a.length===0)return t.writeln(p("Please provide AC text.")),await t.close(),d({exitCode:1});let o=await E(s,i),r=await I(s);o.phase==="EXECUTING"&&t.writeln(P("Warning: Adding ACs during execution is scope creep."));let n=H(o,a,r);return await x(s,i,n),t.writeln(k("AC added: "),`"${a}"`,c(` (by ${z(r)})`)),await t.close(),m(void 0)}if(l==="list"){let o=(await E(s,i)).customACs??[];if(t.writeln(w(`Custom ACs for ${i}`)),t.writeln(""),o.length===0)t.writeln(c(" No custom ACs."));else for(let r of o)t.writeln(` - ${r.text}`,c(` -- ${r.user}, ${r.addedInPhase}`));return await t.close(),m(void 0)}return t.writeln(`Usage: ${S()} spec <name> ac <add "text" | list>`),await t.close(),m(void 0)},re=async(i,e)=>{let t=g({renderer:v.ansi(),sink:y.stdout()}),s=h.process.cwd(),l=e?.[0];if(i===void 0||l===void 0)return t.writeln(`Usage: ${S()} spec <name> task <add "text" | list>`),await t.close(),m(void 0);if(l==="add"){let a=(e?.slice(1)??[]).filter(u=>!u.startsWith("-")).join(" ");if(a.length===0)return t.writeln(p("Please provide task text.")),await t.close(),d({exitCode:1});let o=await E(s,i);if(o.phase==="EXECUTING"||o.phase==="BLOCKED")return t.writeln(p("Cannot add tasks during execution. Use `spec revisit` to go back to discovery.")),await t.close(),d({exitCode:1});let r=await I(s),n=q(o,`[TASK] ${a}`,r);return await x(s,i,n),t.writeln(k("Task added: "),`"${a}"`,c(` (by ${z(r)})`)),await t.close(),m(void 0)}if(l==="list"){let o=((await E(s,i)).specNotes??[]).filter(r=>r.text.startsWith("[TASK] "));if(t.writeln(w(`Custom tasks for ${i}`)),t.writeln(""),o.length===0)t.writeln(c(" No custom tasks."));else for(let r of o)t.writeln(` - ${r.text.replace("[TASK] ","")}`,c(` -- ${r.user}, ${r.phase}`));return await t.close(),m(void 0)}return t.writeln(`Usage: ${S()} spec <name> task <add "text" | list>`),await t.close(),m(void 0)},ae=async(i,e)=>{let t=g({renderer:v.ansi(),sink:y.stdout()}),s=h.process.cwd(),l=e?.[0];if(i===void 0||l===void 0)return t.writeln(`Usage: ${S()} spec <name> note <add "text" | list>`),await t.close(),m(void 0);if(l==="add"){let a=(e?.slice(1)??[]).filter(u=>!u.startsWith("-")).join(" ");if(a.length===0)return t.writeln(p("Please provide note text.")),await t.close(),d({exitCode:1});let o=await E(s,i),r=await I(s),n=q(o,a,r);return await x(s,i,n),t.writeln(k("Note added: "),`"${a}"`,c(` (by ${z(r)})`)),await t.close(),m(void 0)}if(l==="list"){let o=((await E(s,i)).specNotes??[]).filter(r=>!r.text.startsWith("[TASK] "));if(t.writeln(w(`Notes for ${i}`)),t.writeln(""),o.length===0)t.writeln(c(" No notes."));else for(let r of o)t.writeln(` - ${r.text}`,c(` -- ${r.user}, ${r.phase}`));return await t.close(),m(void 0)}return t.writeln(`Usage: ${S()} spec <name> note <add "text" | list>`),await t.close(),m(void 0)};export{J as RESERVED_NAMES,$e as main};
@@ -0,0 +1 @@
1
+ import{a as f,d as P}from"./chunk-Y2PH2BTY.js";import{c as R,d as S}from"./chunk-7OIAMA3E.js";import"./chunk-7UX6WIXX.js";import"./chunk-OCDUS26F.js";import{a as k,d as w}from"./chunk-JCIANZPY.js";import{c as h}from"./chunk-2X2U2VC5.js";import{A as O,f as b,g as x,l as D,p as v}from"./chunk-AQWB2PVR.js";import{c as i,d as r,f as c,g as y,h as p,k as I,o as d,q as u,r as m}from"./chunk-K223KAUB.js";import{a as l,b as E}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 W=async g=>{let n=C.process.cwd(),o=k(g);if(!await O(n)){if(o==="json")await w({error:"noskills is not initialized"},o);else{let s=d({renderer:m.ansi(),sink:u.stdout()});s.writeln(c("noskills is not initialized.")," Run: ",i(h("init"))),await s.close()}return E({exitCode:1})}let V=x(g),e=await b(n,V),t=await D(n),T={phase:e.phase,spec:e.spec,branch:e.branch,discovery:e.phase==="DISCOVERY"||e.phase==="DISCOVERY_REVIEW"?{answered:e.discovery.answers.length,total:f.length}:void 0,execution:e.phase==="EXECUTING"||e.phase==="BLOCKED"?{iteration:e.execution.iteration,lastProgress:e.execution.lastProgress,debt:e.execution.debt?.items.length??0,verificationPassed:e.execution.lastVerification?.passed??null}:void 0,concerns:t?.concerns??[],tools:t?.tools??[],decisions:e.decisions.length};if(o==="json"){let a=(await v(n)).filter(N=>t!==null&&t.concerns.includes(N.id)),$=await R(n),j=S(t?.tools??[]),F=await P(e,a,$,t,void 0,void 0,void 0,j);return await w({...T,...F},"json"),l(void 0)}{let s=d({renderer:m.ansi(),sink:u.stdout()});s.writeln(i(`${h("status")}`)),s.writeln("");let a=e.phase==="COMPLETED"?y(e.phase):e.phase==="BLOCKED"?c(e.phase):e.phase==="EXECUTING"?I(e.phase):p(e.phase);s.writeln(" Phase: ",a),e.spec!==null&&s.writeln(" Spec: ",i(e.spec)),e.branch!==null&&s.writeln(" Branch: ",e.branch),(e.phase==="DISCOVERY"||e.phase==="DISCOVERY_REVIEW")&&s.writeln(` Discovery: ${e.discovery.answers.length}/${f.length} questions answered`),e.phase==="EXECUTING"&&(s.writeln(` Iteration: ${e.execution.iteration}`),e.execution.lastProgress!==null&&s.writeln(" Progress: ",r(e.execution.lastProgress)),e.execution.debt!==null&&s.writeln(p(` Debt: ${e.execution.debt.items.length} items`))),t!==null&&(s.writeln(""),t.concerns.length>0&&s.writeln(" Concerns: ",r(t.concerns.join(", "))),t.tools.length>0&&s.writeln(" Tools: ",r(t.tools.join(", ")))),e.decisions.length>0&&(s.writeln(""),s.writeln(` Decisions: ${e.decisions.length}`)),await s.close()}return l(void 0)};export{W as main};
@@ -1 +1 @@
1
- import{e as w}from"./chunk-OV7ZXBXC.js";import{c as g}from"./chunk-YK6UG66R.js";import{l as u}from"./chunk-QYMX2GR3.js";import{c as m,d as r,f as c,g as n,o as p,q as d,r as f}from"./chunk-Y6AFIAJP.js";import{a as o,b as a}from"./chunk-2N4GTHXQ.js";import{b as l}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";var v=async h=>{let s=p({renderer:f.ansi(),sink:d.stdout()}),t=l.process.cwd(),e=await u(t);if(e===null)return s.writeln(c("noskills is not initialized.")," Run: ",m(g("init"))),await s.close(),a({exitCode:1});s.writeln(r("Syncing tool files..."));let i=await w(t,e.tools,e);for(let y of i)s.writeln(" ",n("\u2714"),` ${y}`);return i.length===0&&s.writeln(r(" No tools configured.")),s.writeln(""),s.writeln(n("Done.")),await s.close(),o(void 0)};export{v as main};
1
+ import{e as w}from"./chunk-7OIAMA3E.js";import{c as g}from"./chunk-2X2U2VC5.js";import{l as u}from"./chunk-AQWB2PVR.js";import{c as m,d as r,f as c,g as n,o as p,q as d,r as f}from"./chunk-K223KAUB.js";import{a as o,b as a}from"./chunk-2N4GTHXQ.js";import{b as l}from"./chunk-RMCTOOQL.js";import"./chunk-CKETVOVQ.js";import"./chunk-YSLRAWBK.js";import"./chunk-OTRBRRIO.js";var v=async h=>{let s=p({renderer:f.ansi(),sink:d.stdout()}),t=l.process.cwd(),e=await u(t);if(e===null)return s.writeln(c("noskills is not initialized.")," Run: ",m(g("init"))),await s.close(),a({exitCode:1});s.writeln(r("Syncing tool files..."));let i=await w(t,e.tools,e);for(let y of i)s.writeln(" ",n("\u2714"),` ${y}`);return i.length===0&&s.writeln(r(" No tools configured.")),s.writeln(""),s.writeln(n("Done.")),await s.close(),o(void 0)};export{v as main};
@@ -1,4 +1,4 @@
1
- import{a as v,c as L}from"./chunk-TJZAIUKM.js";import{a as F,c as I}from"./chunk-VPXOI7CR.js";import{A as D,e as S,k as x,l as P}from"./chunk-QYMX2GR3.js";import{a as y,b as C}from"./chunk-2N4GTHXQ.js";import{b as f}from"./chunk-MNEZ5QGX.js";import"./chunk-DHMCIRLT.js";import"./chunk-4BH6CF3J.js";import"./chunk-OTRBRRIO.js";var M=async e=>{let t=await S(e),d=await P(e),l=await A(e),s=null,c=null,u=0,a=0;if(t.spec!==null){let n=await F(e,t.spec);if(n!==null){u=n.tasks.length,a=t.execution.completedTasks.length;let g=I(n.tasks,t.execution.completedTasks);g!==null&&(s=g.id,c=g.title)}}let p=null;t.lastCalledAt!==null&&(p=Math.floor((Date.now()-new Date(t.lastCalledAt).getTime())/1e3));let r=(await x(e)).map(n=>({name:n.name,phase:n.state.phase,iteration:n.state.execution.iteration}));return{spec:t.spec,phase:t.phase,iteration:t.execution.iteration,activeTaskId:s,activeTaskTitle:c,totalTasks:u,completedTaskCount:a,lastProgress:t.execution.lastProgress,lastCalledAt:t.lastCalledAt,modifiedFiles:t.execution.modifiedFiles,debt:t.execution.debt,concerns:d?.concerns??[],maxIterations:d?.maxIterationsBeforeRestart??15,awaitingStatusReport:t.execution.awaitingStatusReport,verificationPassed:t.execution.lastVerification?.passed??null,decisionsCount:t.decisions.length,discoveryAnswered:t.discovery.answers.length,discoveryTotal:6,trackedFiles:l,timeSinceUpdate:p,allSpecs:r}},A=async e=>{let t=`${e}/.eser/.state/files-changed.jsonl`;try{let l=(await f.fs.readTextFile(t)).trim().split(`
1
+ import{a as v,c as L}from"./chunk-JCIANZPY.js";import{a as F,c as I}from"./chunk-RTD42HPS.js";import{A as D,e as S,k as x,l as P}from"./chunk-AQWB2PVR.js";import{a as y,b as C}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 M=async e=>{let t=await S(e),d=await P(e),l=await A(e),s=null,c=null,u=0,a=0;if(t.spec!==null){let n=await F(e,t.spec);if(n!==null){u=n.tasks.length,a=t.execution.completedTasks.length;let g=I(n.tasks,t.execution.completedTasks);g!==null&&(s=g.id,c=g.title)}}let p=null;t.lastCalledAt!==null&&(p=Math.floor((Date.now()-new Date(t.lastCalledAt).getTime())/1e3));let r=(await x(e)).map(n=>({name:n.name,phase:n.state.phase,iteration:n.state.execution.iteration}));return{spec:t.spec,phase:t.phase,iteration:t.execution.iteration,activeTaskId:s,activeTaskTitle:c,totalTasks:u,completedTaskCount:a,lastProgress:t.execution.lastProgress,lastCalledAt:t.lastCalledAt,modifiedFiles:t.execution.modifiedFiles,debt:t.execution.debt,concerns:d?.concerns??[],maxIterations:d?.maxIterationsBeforeRestart??15,awaitingStatusReport:t.execution.awaitingStatusReport,verificationPassed:t.execution.lastVerification?.passed??null,decisionsCount:t.decisions.length,discoveryAnswered:t.discovery.answers.length,discoveryTotal:6,trackedFiles:l,timeSinceUpdate:p,allSpecs:r}},A=async e=>{let t=`${e}/.eser/.state/files-changed.jsonl`;try{let l=(await f.fs.readTextFile(t)).trim().split(`
2
2
  `).filter(Boolean),s=[];for(let c of l)try{let u=JSON.parse(c);s.includes(u.file)||s.push(u.file)}catch{}return s}catch{return[]}},W="\x1B[2J\x1B[H",E="\x1B[1m",h="\x1B[2m",o="\x1B[0m",k="\x1B[32m",T="\x1B[33m",w="\x1B[31m",R="\x1B[36m",b=e=>{switch(e){case"COMPLETED":return k;case"BLOCKED":return w;case"EXECUTING":return R;default:return T}},O=(e,t,d)=>{if(t===0)return"\u2591".repeat(d);let l=Math.min(e/t,1),s=Math.round(l*d);return"\u2588".repeat(s)+"\u2591".repeat(d-s)},N=e=>e===null?"never":e<60?`${e}s ago`:e<3600?`${Math.floor(e/60)}m ago`:`${Math.floor(e/3600)}h ago`,B=e=>e.replace(/\x1b\[[0-9;]*m/g,""),U=(e,t)=>{let d=B(e).length;return e+" ".repeat(Math.max(0,t-d))},j=e=>{let t=[],l="\u2500".repeat(54),s=a=>`${h}\u2502${o} ${U(a,52)}${h}\u2502${o}`,c=()=>`${h}\u2502${"".padEnd(54)}\u2502${o}`;if(t.push(`${h}\u256D${l}\u256E${o}`),t.push(s(`${E}noskills watch${o}`)),t.push(c()),t.push(s(`${E}Specs:${o}`)),e.allSpecs.length>0)for(let a of e.allSpecs){let p=b(a.phase),i=a.name.slice(0,18).padEnd(18),r=`${p}${a.phase}${o}`.padEnd(a.phase.length+10);if(a.phase==="EXECUTING"||a.phase==="BLOCKED"){let n=O(e.completedTaskCount,e.totalTasks,10),g=e.totalTasks>0?Math.round(e.completedTaskCount/e.totalTasks*100):0;t.push(s(` ${i} ${r} ${n} ${e.completedTaskCount}/${e.totalTasks} (${g}%)`))}else a.phase==="COMPLETED"?t.push(s(` ${i} ${r} done`)):t.push(s(` ${i} ${r}`))}else if(e.spec!==null){let a=b(e.phase);t.push(s(` ${e.spec} ${a}${e.phase}${o}`))}else t.push(s(` ${h}No specs yet${o}`));if(t.push(c()),e.phase==="DISCOVERY"||e.phase==="DISCOVERY_REVIEW")t.push(s(`Phase: ${b(e.phase)}${e.phase}${o} Discovery: ${e.discoveryAnswered}/${e.discoveryTotal} questions answered`));else if(e.phase==="SPEC_DRAFT")t.push(s(`Phase: ${T}${e.phase}${o} ${T}Awaiting approval${o}`));else if(e.phase==="SPEC_APPROVED")t.push(s(`Phase: ${T}${e.phase}${o} ${k}Ready to start${o}`));else if(e.phase==="EXECUTING"||e.phase==="BLOCKED"){if(e.spec!==null&&t.push(s(`${E}${e.spec}${o} (iteration ${e.iteration}):`)),e.activeTaskId!==null){let i=`${e.activeTaskId}${e.activeTaskTitle!==null?` (${e.activeTaskTitle})`:""}`;t.push(s(` Active task: ${R}${i.slice(0,36)}${o}`))}let a=O(e.completedTaskCount,e.totalTasks,12),p=e.totalTasks>0?Math.round(e.completedTaskCount/e.totalTasks*100):0;if(t.push(s(` Progress: ${k}${a} ${e.completedTaskCount}/${e.totalTasks} tasks (${p}%)${o}`)),t.push(s(` Iteration: ${e.iteration}`)),t.push(s(` Last update: ${N(e.timeSinceUpdate)}`)),e.lastProgress!==null&&t.push(s(` ${h}${e.lastProgress.slice(0,50)}${o}`)),e.phase==="BLOCKED"){let i=(e.lastProgress??"unknown").replace(/^BLOCKED:\s*/,"");t.push(s(` ${w}BLOCKED: ${i.slice(0,40)}${o}`)),t.push(s(` ${T}Human input needed${o}`))}if(e.awaitingStatusReport&&t.push(s(` ${T}Status report pending${o}`)),e.verificationPassed===!1&&t.push(s(` ${w}Verification failed${o}`)),t.push(c()),e.debt!==null&&e.debt.items.length>0){t.push(s(` Debt: ${e.debt.items.length} item(s)`));for(let i of e.debt.items.slice(0,3))t.push(s(` \u2514\u2500 ${i.text.slice(0,44)}`));e.debt.items.length>3&&t.push(s(` \u2514\u2500 ... and ${e.debt.items.length-3} more`))}if(e.trackedFiles.length>0||e.modifiedFiles.length>0){let i=e.trackedFiles.length>0?e.trackedFiles:e.modifiedFiles;t.push(s(` Files changed: ${i.length}`));for(let r of i.slice(0,5)){let n=r.length>44?"..."+r.slice(-41):r;t.push(s(` \u2514\u2500 ${n}`))}i.length>5&&t.push(s(` \u2514\u2500 ... and ${i.length-5} more`))}}else e.phase==="COMPLETED"?t.push(s(`${k}Complete!${o} ${e.iteration} iterations, ${e.decisionsCount} decisions`)):e.phase==="FREE"?t.push(s(`${h}Free mode \u2014 no enforcement${o}`)):e.phase==="IDLE"&&t.push(s(`${h}No active work${o}`));t.push(c()),e.concerns.length>0&&t.push(s(`Concerns: ${e.concerns.join(", ").slice(0,40)}`));let u=e.iteration>=e.maxIterations?`${w}RESTART RECOMMENDED${o}`:`${k}ok${o} (${e.iteration}/${e.maxIterations})`;return t.push(s(`Context: ${u}`)),t.push(`${h}\u2570${l}\u256F${o}`),t.push(` ${h}watching .eser/.state/ ... ctrl+c to stop${o}`),t.join(`
3
3
  `)},K=e=>JSON.stringify({ts:new Date().toISOString(),phase:e.phase,spec:e.spec,iteration:e.iteration,activeTask:e.activeTaskId,tasks:{completed:e.completedTaskCount,total:e.totalTasks},progress:e.lastProgress,debt:e.debt?.items.length??0,filesChanged:e.trackedFiles.length>0?e.trackedFiles:e.modifiedFiles,timeSinceUpdate:e.timeSinceUpdate,verificationPassed:e.verificationPassed}),X=async e=>{let t=f.process.cwd(),l=e!==void 0&&e.some(r=>r==="-o"||r.startsWith("--output"))?v(e):"ansi";if(!await D(t)){let r=new TextEncoder,n=f.process.stdout.getWriter();return await n.write(r.encode(`noskills not initialized.
4
4
  `)),n.releaseLock(),C({exitCode:1})}let s=`${t}/.eser/.state`,c="",u=async()=>{let r=await M(t),n=l==="json"?K(r):l==="markdown"?L(r,"markdown"):j(r);if(l==="json"){let m=new TextEncoder,$=f.process.stdout.getWriter();await $.write(m.encode(n+`
@@ -0,0 +1 @@
1
+ import{a as D,d as I}from"./chunk-ESTTTPON.js";import{h as A}from"./chunk-TI4CLT2V.js";import{r as y,u as C}from"./chunk-NLLZQP64.js";import{d as x,f as S,h as g,i as E,j as k}from"./chunk-AQWB2PVR.js";import{d as u,f as n,g as f,o as d,q as w,r as h}from"./chunk-K223KAUB.js";import{a as m,b as i}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 O=async l=>{let e=d({renderer:h.ansi(),sink:w.stdout()}),r=c.process.cwd(),p=g(l);if(!p.ok)return e.writeln(n(p.error)),await e.close(),i({exitCode:1});let o=(l??[]).filter(a=>!a.startsWith("--spec=")).join(" ");if(o.length===0)return e.writeln(n('A reason is required: noskills wontfix "reason text"')),await e.close(),i({exitCode:1});let s;try{s=await S(r,p.spec)}catch(a){let U=a instanceof Error?a.message:String(a);return e.writeln(n(U)),await e.close(),i({exitCode:1})}if(s.phase==="IDLE"||s.phase==="FREE"||s.phase==="UNINITIALIZED"||s.phase==="COMPLETED")return e.writeln(n(`Cannot mark as won't fix in phase: ${s.phase}`)),await e.close(),i({exitCode:1});if(s.spec!==null){let a=`${r}/${x.specDir(s.spec)}`;try{await c.fs.stat(a)}catch{return e.writeln(n(`Active spec '${s.spec}' directory not found.`)),e.writeln(u("Run `noskills reset` to return to IDLE.")),await e.close(),i({exitCode:1})}}let L=await A(r),t=y(s,"wontfix",o);return t=C(t,s.phase,"COMPLETED",L,o),await E(r,t),t.spec!==null&&await k(r,t.spec,t),t.spec!==null&&(await D(r,t.spec,"wontfix"),await I(r,t.spec,"wontfix")),e.writeln(f("\u2714"),` Spec marked as won't fix: ${o}`),await e.close(),m(void 0)};export{O as main};