gl-life-claude-zen 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -0
- package/LICENSE +69 -0
- package/README.md +237 -0
- package/bin/create-gl-life-claude.js +126 -0
- package/dist/hooks/auto-format.js +2 -0
- package/dist/hooks/complete-task.js +2 -0
- package/dist/hooks/enforce-migration-workflow.js +2 -0
- package/dist/hooks/enforce-structured-development.js +2 -0
- package/dist/hooks/enforce-test-pyramid.js +2 -0
- package/dist/hooks/init-task-tracker.js +2 -0
- package/dist/hooks/start-task.js +2 -0
- package/dist/hooks/task-status.js +2 -0
- package/dist/hooks/validate-database-changes.js +2 -0
- package/dist/hooks/validate-e2e-coverage.js +2 -0
- package/dist/hooks/validate-git-workflow.js +2 -0
- package/dist/hooks/validate-migration-impact.js +2 -0
- package/dist/hooks/validate-task-completion.js +2 -0
- package/dist/hooks/validate-test-quality.js +2 -0
- package/dist/hooks/validate-test-results.js +2 -0
- package/dist/hooks/validate-ui-integration.js +2 -0
- package/dist/scripts/help.js +3 -0
- package/dist/scripts/plan-amend.js +3 -0
- package/dist/scripts/plan-create.js +3 -0
- package/dist/scripts/plan-help.js +3 -0
- package/dist/scripts/plan-init.js +3 -0
- package/dist/scripts/plan-manager.js +3 -0
- package/dist/scripts/setup-git-hooks.js +3 -0
- package/dist/scripts/task-done.js +3 -0
- package/dist/scripts/task-merge.js +3 -0
- package/dist/scripts/task-next.js +3 -0
- package/dist/scripts/task-start.js +3 -0
- package/dist/scripts/task-status.js +3 -0
- package/lib/init.js +113 -0
- package/package.json +41 -0
- package/templates/.claude/CLAUDE.md +204 -0
- package/templates/.claude/PLAN-SCHEMA.json +240 -0
- package/templates/.claude/PROJECT-PLAN-TEMPLATE.json +223 -0
- package/templates/.claude/settings.json +157 -0
- package/templates/README.md +72 -0
- package/templates/package.json +27 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
#!/usr/bin/env node
|
|
3
|
+
function _0x281d(){const _0x5d6ac1=['TIMPW','completed','forEach','Exiting.','nxgKi','CTjiK','.claude/archive','Error:','MhKJr','JAMgG','log','lUyGw','MCBLm','close','iNXCN','efcnC','message','DUpqk','name','\x20\x20npm\x20run\x20task:start\x20TASK-XXX','\x0aYou\x20can\x20now\x20use:','MwGux','catch','mgPcR','project','\x0a✅\x20Plan\x20deleted:\x20','.claude/ACTIVE-PLAN','🔒\x20Locked:\x20','czPnq','\x0a✅\x20Switched\x20to\x20plan:\x20','trim','22AdeIDJ','join','vijBq','Dynamic\x20require\x20of\x20\x22','createInterface','\x22\x20to\x20confirm\x20deletion:\x20','exit','tsUCE','\x20\x20\x20\x20\x20','DGLYC','vefXn','QbBHb','12453XtPzKp','\x20\x20(none)\x0a','force','GNcSH','FRwDC','length','ECkKx','qvWNK','YlAMn','toISOString','CIBtY','WKpGS','locked','.claude/plans','path','stdout','toFixed','\x22\x20is\x20not\x20supported','totalTasks','Available\x20Plans:','WOIDb','EIsaO','3.\x20Delete\x20plan','vtNHl','pvzEO','ezwyP','\x20\x20\x20Progress:\x20','tAYIB','✅\x20COMPLETED','\x0a---\x20Delete\x20Plan\x20---\x0a','5.\x20Exit\x0a','\x20\x20npm\x20run\x20plan:amend\x0a','OkPkc','qPWHn','.plan-locked','YxmNd','jifdu','\x20\x20\x20Completed:\x20','⚠️\x20\x20IN\x20PROGRESS','hYHcR','Clyvi','SSXNW','\x20\x20\x20\x20\x20Progress:\x20','AYHby','cXcSj','Yes','readdirSync','1.\x20Switch\x20active\x20plan','OXnZH','unlinkSync','4187470zIMaOG','KavRU','lTbQj','AibHV','toString','❌\x20Deletion\x20cancelled\x20(name\x20mismatch)','readFileSync','YHppb','mepfB','DpRID','\x20\x20\x20Total\x20Tasks:\x20','NgKgZ','KfkVM','⚠️\x20\x20WARNING:\x20This\x20will\x20permanently\x20delete\x20the\x20plan!\x0a','filter','fZSdE','❌\x20No\x20plans\x20available','statistics','43965JIiJOZ','zUacf','recursive','14VxLigM','RdLdO','\x0aSelect\x20plan\x20number\x20to\x20archive:\x20','0.0','Ymkdb','parse','MKYXt','XNbBA','eHuxE','withFileTypes','20AqBtcb','bjMmX','OlwQq','\x20\x20\x20Pending:\x20','search','pending','QCFev','ahPri','14470990SqllHC','kEYSO','\x20-\x20','xlXfe','inProgress','(((.+)+)+)+$','\x0aSelect\x20plan\x20number:\x20','description','LFgbC','output','ClfQK','\x0aType\x20\x22','wnItO','\x0a📋\x20Plan:\x20','eHkQt','existsSync','\x0a---\x20Plan\x20Details\x20---\x0a','2.\x20Archive\x20completed\x20plan','QqvKb','writeFileSync','TASK-TRACKER.json','Invalid\x20choice','zGVTD','10OesZGj','blocked','stdin','utf8','421768BVbWWv','replace','\x20\x20\x20In\x20Progress:\x20','Actions:','PKkPA','5643648cfHMVt','error','ckDPd','\x0a📊\x20Statistics:','\x0aSelect\x20plan\x20number\x20to\x20DELETE:\x20','question','vBZbq','constructor','kWQeN','renameSync','mYiVl','oWyJd','✅\x20Active\x20Plan:\x20','Ugfec','\x20\x20\x20Blocked:\x20','stats','\x0a---\x20Switch\x20Active\x20Plan\x20---\x0a','rebMm','pfVTZ','2337318YkfBZA','apply','❌\x20Invalid\x20choice'];_0x281d=function(){return _0x5d6ac1;};return _0x281d();}const _0x402885=_0x1170;(function(_0x3706fc,_0x59a7c7){const _0x227c3e=_0x1170,_0x26dd01=_0x3706fc();while(!![]){try{const _0x4e3a4e=-parseInt(_0x227c3e(0x23e))/0x1*(parseInt(_0x227c3e(0x26a))/0x2)+-parseInt(_0x227c3e(0x1fa))/0x3*(parseInt(_0x227c3e(0x24b))/0x4)+-parseInt(_0x227c3e(0x22c))/0x5+-parseInt(_0x227c3e(0x273))/0x6+-parseInt(_0x227c3e(0x241))/0x7*(parseInt(_0x227c3e(0x26e))/0x8)+-parseInt(_0x227c3e(0x1cc))/0x9+-parseInt(_0x227c3e(0x253))/0xa*(-parseInt(_0x227c3e(0x1ee))/0xb);if(_0x4e3a4e===_0x59a7c7)break;else _0x26dd01['push'](_0x26dd01['shift']());}catch(_0x40d46e){_0x26dd01['push'](_0x26dd01['shift']());}}}(_0x281d,0x7c9a4));var h=(_0x4598e7=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x4598e7,{'get':(_0x1cf475,_0x1454b5)=>(typeof require<'u'?require:_0x1cf475)[_0x1454b5]}):_0x4598e7)(function(_0x5a68fa){const _0x344ecf=_0x1170,_0x12118a={'WOIDb':function(_0x567956,_0x364df2){return _0x567956<_0x364df2;},'YHppb':function(_0x772f11,_0x265683){return _0x772f11(_0x265683);},'ahPri':function(_0x1827a1,_0x4877ea){return _0x1827a1+_0x4877ea;},'czPnq':function(_0x5aed0d,_0x32a7ba){return _0x5aed0d+_0x32a7ba;},'LFgbC':_0x344ecf(0x1f1),'ygMlX':_0x344ecf(0x20b)};if(_0x12118a[_0x344ecf(0x20e)](typeof require,'u'))return require[_0x344ecf(0x1cd)](this,arguments);throw _0x12118a[_0x344ecf(0x233)](Error,_0x12118a[_0x344ecf(0x252)](_0x12118a[_0x344ecf(0x1eb)](_0x12118a[_0x344ecf(0x25b)],_0x5a68fa),_0x12118a['ygMlX']));});const _0x202513={};_0x202513['input']=process[_0x402885(0x26c)],_0x202513[_0x402885(0x25c)]=process[_0x402885(0x209)];var c=h('fs'),g=h(_0x402885(0x208)),k=h('readline'),r=_0x402885(0x207),m=_0x402885(0x1e9),$=k[_0x402885(0x1f2)](_0x202513);function d(_0x145d74){const _0x229b05=_0x402885,_0x253c18={};_0x253c18[_0x229b05(0x1de)]=function(_0x1c0f90,_0x12dd25){return _0x1c0f90+_0x12dd25;},_0x253c18[_0x229b05(0x1dd)]=_0x229b05(0x1f0);const _0x23ef96=_0x253c18;return new Promise(_0x589b66=>{const _0x5ae615=_0x229b05,_0x4209c8={'ClfQK':function(_0x1b876a,_0x27b74e){const _0x4c1ad6=_0x1170;return _0x23ef96[_0x4c1ad6(0x1de)](_0x1b876a,_0x27b74e);}};if(_0x23ef96[_0x5ae615(0x1dd)]!==_0x5ae615(0x1f0)){let _0x4df560=_0xb975c4(_0x530ca3);_0x381c83[_0x5ae615(0x1d9)](_0x4209c8[_0x5ae615(0x25d)](_0x5d4836,0x1)+'.\x20'+_0x4b673b+'\x20-\x20'+_0x4df560[_0x5ae615(0x1e1)]);}else $[_0x5ae615(0x1be)](_0x145d74,_0x589b66);});}function P(){const _0x18b492=_0x402885,_0x292e80={};_0x292e80['JAMgG']=_0x18b492(0x26d);const _0x590e30=_0x292e80;return c[_0x18b492(0x262)](m)?c[_0x18b492(0x232)](m,_0x590e30[_0x18b492(0x1d8)])['trim']():null;}function S(_0x38fb8e){const _0x34a122=_0x402885;c[_0x34a122(0x266)](m,_0x38fb8e);}function x(){const _0x211b65=_0x402885,_0x3ec559={};return _0x3ec559[_0x211b65(0x24a)]=!0x0,c[_0x211b65(0x262)](r)?c[_0x211b65(0x228)](r,_0x3ec559)[_0x211b65(0x23a)](_0x439f6d=>_0x439f6d['isDirectory']())['map'](_0x6c08a3=>_0x6c08a3[_0x211b65(0x1e1)]):[];}function p(_0x1c1cb2){const _0x31b41f=_0x402885,_0x3849e0={};_0x3849e0[_0x31b41f(0x22e)]='PROJECT-PLAN.json',_0x3849e0[_0x31b41f(0x238)]='utf8',_0x3849e0[_0x31b41f(0x226)]=_0x31b41f(0x267),_0x3849e0[_0x31b41f(0x1f5)]=_0x31b41f(0x21c);const _0x2ab906=_0x3849e0;let _0x324ec7=g[_0x31b41f(0x1ef)](r,_0x1c1cb2,_0x2ab906[_0x31b41f(0x22e)]);if(!c[_0x31b41f(0x262)](_0x324ec7))return null;const _0x1fea50={};_0x1fea50[_0x31b41f(0x20c)]=0x0,_0x1fea50['completed']=0x0,_0x1fea50[_0x31b41f(0x250)]=0x0,_0x1fea50['inProgress']=0x0;let _0x5b529b=JSON[_0x31b41f(0x246)](c[_0x31b41f(0x232)](_0x324ec7,_0x2ab906[_0x31b41f(0x238)])),_0x49fb88=g['join'](r,_0x1c1cb2,_0x2ab906[_0x31b41f(0x226)]),_0x15b081=c[_0x31b41f(0x262)](g['join'](r,_0x1c1cb2,_0x2ab906[_0x31b41f(0x1f5)])),_0x5ec0ae=_0x1fea50;return c[_0x31b41f(0x262)](_0x49fb88)&&(_0x5ec0ae=JSON['parse'](c['readFileSync'](_0x49fb88,_0x31b41f(0x26d)))[_0x31b41f(0x23d)]),{'id':_0x1c1cb2,'name':_0x5b529b['projectName']||_0x5b529b[_0x31b41f(0x1e7)]?.[_0x31b41f(0x1e1)]||'Unnamed\x20Project','description':_0x5b529b[_0x31b41f(0x25a)]||_0x5b529b[_0x31b41f(0x1e7)]?.[_0x31b41f(0x25a)]||'','locked':_0x15b081,'stats':_0x5ec0ae};}async function y(){const _0x517d60=_0x402885,_0xbfa708={'vZQIY':'ezwyP','fZSdE':'(((.+)+)+)+$','QqvKb':_0x517d60(0x1d6),'vefXn':function(_0x19e8f6,_0x39aa8a){return _0x19e8f6!==_0x39aa8a;},'QCFev':function(_0x485390,_0xbe6f9a){return _0x485390(_0xbe6f9a);},'vBZbq':function(_0x43191d,_0x1f4b8f){return _0x43191d===_0x1f4b8f;},'KavRU':function(_0x1ec3c4,_0x3ef72a){return _0x1ec3c4>_0x3ef72a;},'gawhw':function(_0x4117a4,_0x3f5106){return _0x4117a4*_0x3f5106;},'MhKJr':function(_0x582115,_0x21c550){return _0x582115/_0x21c550;},'MwGux':_0x517d60(0x244),'mgPcR':function(_0x13b664,_0x1af57f,_0xc42b76){return _0x13b664(_0x1af57f,_0xc42b76);},'DNwxJ':function(_0x4ed0c2){return _0x4ed0c2();},'uPpqR':function(_0x49dae2){return _0x49dae2();},'rorKp':'Available\x20Plans:','MKYXt':_0x517d60(0x271),'NIwZn':_0x517d60(0x229),'CTjiK':_0x517d60(0x264),'dTwDp':_0x517d60(0x210),'FRwDC':'4.\x20View\x20plan\x20details','AXeVE':function(_0x6b4d0e,_0x33db6a){return _0x6b4d0e(_0x33db6a);},'ravPK':function(_0xd3df8,_0x3ae690){return _0xd3df8(_0x3ae690);},'bPMBl':function(_0x153e8e,_0x4512c1){return _0x153e8e(_0x4512c1);},'mepfB':_0x517d60(0x1d2),'mYiVl':_0x517d60(0x268)},_0x449b88=(function(){const _0x49c70e=_0x517d60;if(_0xbfa708['vZQIY']===_0x49c70e(0x213)){let _0x385411=!![];return function(_0x540ac2,_0x4fc3a9){const _0x2c5b5c=_0x385411?function(){const _0x519f1b=_0x1170;if(_0x4fc3a9){const _0x23fc45=_0x4fc3a9[_0x519f1b(0x1cd)](_0x540ac2,arguments);return _0x4fc3a9=null,_0x23fc45;}}:function(){};return _0x385411=![],_0x2c5b5c;};}else return _0x126aae[_0x49c70e(0x230)]()[_0x49c70e(0x24f)](_0x49c70e(0x258))[_0x49c70e(0x230)]()[_0x49c70e(0x1c0)](_0x23b533)[_0x49c70e(0x24f)](_0x49c70e(0x258));}()),_0x1ec2ea=_0xbfa708[_0x517d60(0x1e6)](_0x449b88,this,function(){const _0x333b73=_0x517d60;return _0x1ec2ea[_0x333b73(0x230)]()[_0x333b73(0x24f)](_0xbfa708[_0x333b73(0x23b)])[_0x333b73(0x230)]()[_0x333b73(0x1c0)](_0x1ec2ea)['search'](_0x333b73(0x258));});_0xbfa708['DNwxJ'](_0x1ec2ea),console[_0x517d60(0x1d9)]('\x0a📋\x20Plan\x20Manager\x0a');let _0x43f930=P(),_0x51ffe0=_0xbfa708['uPpqR'](x);switch(console[_0x517d60(0x1d9)](_0x43f930?_0x517d60(0x1c5)+_0x43f930+'\x0a':'⚠️\x20\x20No\x20active\x20plan\x0a'),console[_0x517d60(0x1d9)](_0xbfa708['rorKp']),_0x51ffe0[_0x517d60(0x1ff)]===0x0?console['log'](_0x517d60(0x1fb)):_0x51ffe0[_0x517d60(0x1d1)](_0x647ab3=>{const _0x18f02b=_0x517d60;if(_0xbfa708[_0x18f02b(0x1f8)](_0x18f02b(0x23f),_0x18f02b(0x21a))){let _0x781e46=_0xbfa708['QCFev'](p,_0x647ab3),_0xb61234=_0xbfa708[_0x18f02b(0x1bf)](_0x647ab3,_0x43f930)?'●':'○',_0x5f12d3=_0x781e46[_0x18f02b(0x206)]?'🔒':'🔓';if(console[_0x18f02b(0x1d9)]('\x20\x20'+_0xb61234+'\x20'+_0x647ab3+'\x20'+_0x5f12d3),console[_0x18f02b(0x1d9)](_0x18f02b(0x1f6)+_0x781e46[_0x18f02b(0x1e1)]),_0x781e46['locked']){let _0x56e8d6=_0xbfa708[_0x18f02b(0x22d)](_0x781e46[_0x18f02b(0x1c8)][_0x18f02b(0x20c)],0x0)?_0xbfa708['gawhw'](_0xbfa708[_0x18f02b(0x1d7)](_0x781e46[_0x18f02b(0x1c8)]['completed'],_0x781e46[_0x18f02b(0x1c8)][_0x18f02b(0x20c)]),0x64)[_0x18f02b(0x20a)](0x1):_0xbfa708[_0x18f02b(0x1e4)];console[_0x18f02b(0x1d9)](_0x18f02b(0x224)+_0x781e46['stats'][_0x18f02b(0x1d0)]+'/'+_0x781e46[_0x18f02b(0x1c8)]['totalTasks']+'\x20('+_0x56e8d6+'%)');}console[_0x18f02b(0x1d9)]('');}else _0x22f898[_0x18f02b(0x1ba)](_0xbfa708[_0x18f02b(0x265)],_0x405aa9[_0x18f02b(0x1df)]),_0x43dded[_0x18f02b(0x1f4)](0x1);}),console[_0x517d60(0x1d9)](_0xbfa708[_0x517d60(0x247)]),console[_0x517d60(0x1d9)](_0xbfa708['NIwZn']),console[_0x517d60(0x1d9)](_0xbfa708[_0x517d60(0x1d4)]),console[_0x517d60(0x1d9)](_0xbfa708['dTwDp']),console[_0x517d60(0x1d9)](_0xbfa708[_0x517d60(0x1fe)]),console['log'](_0x517d60(0x218)),(await _0xbfa708[_0x517d60(0x251)](d,'Enter\x20choice\x20(1-5):\x20'))[_0x517d60(0x1ed)]()){case'1':await w(_0x51ffe0);break;case'2':await _0xbfa708['AXeVE'](b,_0x51ffe0);break;case'3':await _0xbfa708['ravPK'](T,_0x51ffe0);break;case'4':await _0xbfa708['bPMBl'](A,_0x51ffe0);break;case'5':console[_0x517d60(0x1d9)](_0xbfa708[_0x517d60(0x234)]);break;default:console[_0x517d60(0x1ba)](_0xbfa708[_0x517d60(0x1c3)]),process[_0x517d60(0x1f4)](0x1);}$[_0x517d60(0x1dc)]();}function _0x1170(_0x584af8,_0x32e9ec){_0x584af8=_0x584af8-0x1ba;const _0x366716=_0x281d();let _0x55238c=_0x366716[_0x584af8];return _0x55238c;}async function w(_0x46f180){const _0x38113=_0x402885,_0x6729ef={'rebMm':function(_0x2798fa,_0x207dc0){return _0x2798fa(_0x207dc0);},'jifdu':function(_0x47f3fe,_0x49ab35){return _0x47f3fe+_0x49ab35;},'xlXfe':_0x38113(0x23c),'CIBtY':_0x38113(0x20d),'RdLdO':function(_0x50fbcc,_0x21ac0f){return _0x50fbcc(_0x21ac0f);},'lUyGw':function(_0x145375,_0x3fc251){return _0x145375-_0x3fc251;},'YlAMn':function(_0x664d10,_0x1ee9a5){return _0x664d10<_0x1ee9a5;},'TIMPW':function(_0x2b2539,_0x3061d0){return _0x2b2539>=_0x3061d0;},'qPWHn':_0x38113(0x1e2)};console[_0x38113(0x1d9)](_0x38113(0x1c9)),_0x46f180['length']===0x0&&(console[_0x38113(0x1ba)](_0x6729ef[_0x38113(0x256)]),process[_0x38113(0x1f4)](0x1)),console['log'](_0x6729ef[_0x38113(0x204)]),_0x46f180[_0x38113(0x1d1)]((_0x3ee929,_0x434f6d)=>{const _0x4ccece=_0x38113;let _0x4be3c2=_0x6729ef[_0x4ccece(0x1ca)](p,_0x3ee929);console['log'](_0x6729ef[_0x4ccece(0x21e)](_0x434f6d,0x1)+'.\x20'+_0x3ee929+_0x4ccece(0x255)+_0x4be3c2[_0x4ccece(0x1e1)]);});let _0x51ba8b=await _0x6729ef['RdLdO'](d,_0x38113(0x259)),_0x11bd31=_0x6729ef[_0x38113(0x1da)](_0x6729ef[_0x38113(0x242)](parseInt,_0x51ba8b[_0x38113(0x1ed)]()),0x1);(_0x6729ef[_0x38113(0x202)](_0x11bd31,0x0)||_0x6729ef[_0x38113(0x1cf)](_0x11bd31,_0x46f180[_0x38113(0x1ff)]))&&(console[_0x38113(0x1ba)](_0x38113(0x1ce)),process[_0x38113(0x1f4)](0x1));let _0x4ab849=_0x46f180[_0x11bd31];_0x6729ef[_0x38113(0x242)](S,_0x4ab849),console[_0x38113(0x1d9)](_0x38113(0x1ec)+_0x4ab849),console[_0x38113(0x1d9)](_0x38113(0x1e3)),console[_0x38113(0x1d9)](_0x6729ef[_0x38113(0x21b)]),console['log']('\x20\x20npm\x20run\x20task:status'),console['log'](_0x38113(0x219));}async function b(_0x26e313){const _0x35c696=_0x402885,_0x1d9d05={'AYHby':function(_0x43f16e,_0x21944f){return _0x43f16e===_0x21944f;},'pfVTZ':_0x35c696(0x220),'YxmNd':function(_0x56c65d,_0x5dd0e9){return _0x56c65d+_0x5dd0e9;},'GNcSH':_0x35c696(0x23c),'kEYSO':_0x35c696(0x20d),'OlwQq':function(_0xbd9ea,_0x2413c9){return _0xbd9ea(_0x2413c9);},'ckDPd':function(_0x2fcf06,_0x127187){return _0x2fcf06-_0x127187;},'tAYIB':function(_0x20497c,_0x1a81ce){return _0x20497c>=_0x1a81ce;},'DUpqk':_0x35c696(0x1d5),'qvWNK':function(_0x5a4732){return _0x5a4732();}};console[_0x35c696(0x1d9)]('\x0a---\x20Archive\x20Plan\x20---\x0a'),_0x26e313['length']===0x0&&(console[_0x35c696(0x1ba)](_0x1d9d05[_0x35c696(0x1fd)]),process['exit'](0x1)),console['log'](_0x1d9d05[_0x35c696(0x254)]),_0x26e313['forEach']((_0x40ce7f,_0x24d2b7)=>{const _0x499f06=_0x35c696;let _0x42d231=p(_0x40ce7f),_0x549e74=_0x1d9d05[_0x499f06(0x225)](_0x42d231[_0x499f06(0x1c8)][_0x499f06(0x1d0)],_0x42d231[_0x499f06(0x1c8)][_0x499f06(0x20c)])?_0x499f06(0x216):_0x1d9d05[_0x499f06(0x1cb)];console['log'](_0x1d9d05[_0x499f06(0x21d)](_0x24d2b7,0x1)+'.\x20'+_0x40ce7f+'\x20-\x20'+_0x42d231[_0x499f06(0x1e1)]+'\x20'+_0x549e74);});let _0x4fc17c=await _0x1d9d05[_0x35c696(0x24d)](d,_0x35c696(0x243)),_0x106b31=_0x1d9d05[_0x35c696(0x1bb)](_0x1d9d05[_0x35c696(0x24d)](parseInt,_0x4fc17c['trim']()),0x1);(_0x106b31<0x0||_0x1d9d05[_0x35c696(0x215)](_0x106b31,_0x26e313[_0x35c696(0x1ff)]))&&(console[_0x35c696(0x1ba)](_0x35c696(0x1ce)),process['exit'](0x1));let _0x7b32d4=_0x26e313[_0x106b31],_0x20bf24=_0x1d9d05[_0x35c696(0x1e0)];const _0x391e9d={};_0x391e9d[_0x35c696(0x240)]=!0x0,c[_0x35c696(0x262)](_0x20bf24)||c['mkdirSync'](_0x20bf24,_0x391e9d);let _0xe48a0=new Date()[_0x35c696(0x203)]()[_0x35c696(0x26f)](/[:.]/g,'-'),_0x2b0c1d=g[_0x35c696(0x1ef)](_0x20bf24,_0x7b32d4+'-'+_0xe48a0);c[_0x35c696(0x1c2)](g[_0x35c696(0x1ef)](r,_0x7b32d4),_0x2b0c1d),_0x1d9d05[_0x35c696(0x225)](_0x1d9d05[_0x35c696(0x201)](P),_0x7b32d4)&&c['unlinkSync'](m),console[_0x35c696(0x1d9)]('\x0a✅\x20Plan\x20archived:\x20'+_0x2b0c1d);}async function T(_0x5ec73d){const _0x3a92d0=_0x402885,_0x494733={'SSXNW':function(_0x5b40e5,_0x58e112){return _0x5b40e5(_0x58e112);},'ECkKx':function(_0x1f0185,_0x2733a1){return _0x1f0185+_0x2733a1;},'kxIeV':function(_0x58d7e4,_0x42121c){return _0x58d7e4===_0x42121c;},'nxgKi':'❌\x20No\x20plans\x20available','Ymkdb':_0x3a92d0(0x20d),'DGLYC':function(_0x101268,_0x4102ea){return _0x101268(_0x4102ea);},'hYHcR':function(_0x323f1b,_0x495e4d){return _0x323f1b<_0x495e4d;},'XNbBA':function(_0x3b1349,_0x430619){return _0x3b1349>=_0x430619;},'Ugfec':function(_0x1a592e,_0x3fc6d2){return _0x1a592e!==_0x3fc6d2;},'vtNHl':_0x3a92d0(0x231),'NgKgZ':function(_0x2625b6,_0x1edf0d){return _0x2625b6===_0x1edf0d;},'DpRID':function(_0x577db4){return _0x577db4();}};console[_0x3a92d0(0x1d9)](_0x3a92d0(0x217)),console['log'](_0x3a92d0(0x239)),_0x494733['kxIeV'](_0x5ec73d['length'],0x0)&&(console[_0x3a92d0(0x1ba)](_0x494733[_0x3a92d0(0x1d3)]),process[_0x3a92d0(0x1f4)](0x1)),console[_0x3a92d0(0x1d9)](_0x494733[_0x3a92d0(0x245)]),_0x5ec73d[_0x3a92d0(0x1d1)]((_0x41940e,_0x2e2857)=>{const _0x341511=_0x3a92d0;let _0x4f2b4d=_0x494733[_0x341511(0x223)](p,_0x41940e);console[_0x341511(0x1d9)](_0x494733[_0x341511(0x200)](_0x2e2857,0x1)+'.\x20'+_0x41940e+_0x341511(0x255)+_0x4f2b4d['name']);});let _0x3bece5=await _0x494733[_0x3a92d0(0x223)](d,_0x3a92d0(0x1bd)),_0x8b9c5f=_0x494733[_0x3a92d0(0x1f7)](parseInt,_0x3bece5[_0x3a92d0(0x1ed)]())-0x1;(_0x494733[_0x3a92d0(0x221)](_0x8b9c5f,0x0)||_0x494733[_0x3a92d0(0x248)](_0x8b9c5f,_0x5ec73d[_0x3a92d0(0x1ff)]))&&(console[_0x3a92d0(0x1ba)]('❌\x20Invalid\x20choice'),process[_0x3a92d0(0x1f4)](0x1));let _0x38fbc3=_0x5ec73d[_0x8b9c5f];_0x494733[_0x3a92d0(0x1c6)]((await _0x494733[_0x3a92d0(0x223)](d,_0x3a92d0(0x25e)+_0x38fbc3+_0x3a92d0(0x1f3)))[_0x3a92d0(0x1ed)](),_0x38fbc3)&&(console[_0x3a92d0(0x1d9)](_0x494733[_0x3a92d0(0x211)]),process[_0x3a92d0(0x1f4)](0x1));let _0x49577b=g[_0x3a92d0(0x1ef)](r,_0x38fbc3);const _0x540280={};_0x540280[_0x3a92d0(0x240)]=!0x0,_0x540280[_0x3a92d0(0x1fc)]=!0x0,(c['rmSync'](_0x49577b,_0x540280),_0x494733[_0x3a92d0(0x237)](_0x494733[_0x3a92d0(0x235)](P),_0x38fbc3)&&c[_0x3a92d0(0x22b)](m),console[_0x3a92d0(0x1d9)](_0x3a92d0(0x1e8)+_0x38fbc3));}async function A(_0x2a324f){const _0x3c22fe=_0x402885,_0x5368ff={'Clyvi':function(_0x304433,_0x1a5afe){return _0x304433*_0x1a5afe;},'PKkPA':function(_0x9714db,_0x5e788d){return _0x9714db/_0x5e788d;},'wnItO':_0x3c22fe(0x244),'eHkQt':function(_0x564b0f,_0x5f4fb6){return _0x564b0f!==_0x5f4fb6;},'AibHV':_0x3c22fe(0x24c),'QbBHb':'tLNMq','kWQeN':function(_0x1cc3e2,_0x5f09d9){return _0x1cc3e2(_0x5f09d9);},'uaZEi':function(_0x32e719,_0x5dbb35){return _0x32e719+_0x5dbb35;},'bkAKR':function(_0x496602,_0x390235){return _0x496602===_0x390235;},'BcJrm':_0x3c22fe(0x20d),'MCBLm':function(_0x1af2c3,_0x22d011){return _0x1af2c3-_0x22d011;},'pvzEO':function(_0x43f430,_0x480372){return _0x43f430<_0x480372;},'eHuxE':function(_0x3ea5ea,_0x409a38){return _0x3ea5ea>=_0x409a38;},'EIsaO':'❌\x20Invalid\x20choice','zGVTD':function(_0x34642f,_0x4ae674){return _0x34642f(_0x4ae674);},'XQuXN':'(none)','OXnZH':_0x3c22fe(0x227),'nKTye':function(_0x3134c3,_0x1a1164){return _0x3134c3>_0x1a1164;},'WKpGS':function(_0x233cfe,_0x48378e){return _0x233cfe*_0x48378e;},'SOvDN':function(_0x34c591,_0x3cd7f8){return _0x34c591/_0x3cd7f8;}};console[_0x3c22fe(0x1d9)](_0x3c22fe(0x263)),_0x5368ff['bkAKR'](_0x2a324f[_0x3c22fe(0x1ff)],0x0)&&(console[_0x3c22fe(0x1ba)](_0x3c22fe(0x23c)),process['exit'](0x1)),console[_0x3c22fe(0x1d9)](_0x5368ff['BcJrm']),_0x2a324f[_0x3c22fe(0x1d1)]((_0x5d8a0c,_0x2a2c8a)=>{const _0x4f0621=_0x3c22fe;if(_0x5368ff[_0x4f0621(0x261)](_0x5368ff[_0x4f0621(0x22f)],_0x5368ff[_0x4f0621(0x1f9)])){let _0x4ea19c=_0x5368ff[_0x4f0621(0x1c1)](p,_0x5d8a0c);console['log'](_0x5368ff['uaZEi'](_0x2a2c8a,0x1)+'.\x20'+_0x5d8a0c+'\x20-\x20'+_0x4ea19c[_0x4f0621(0x1e1)]);}else{_0x198206[_0x4f0621(0x1d9)](_0x4f0621(0x1bc)),_0x48da23[_0x4f0621(0x1d9)](_0x4f0621(0x236)+_0x541d6a[_0x4f0621(0x1c8)][_0x4f0621(0x20c)]),_0x1cfc98[_0x4f0621(0x1d9)](_0x4f0621(0x21f)+_0x12bcfd[_0x4f0621(0x1c8)][_0x4f0621(0x1d0)]),_0x5018a6['log'](_0x4f0621(0x270)+_0x1d14b4[_0x4f0621(0x1c8)]['inProgress']),_0x5b9e67[_0x4f0621(0x1d9)]('\x20\x20\x20Pending:\x20'+_0x29be60[_0x4f0621(0x1c8)][_0x4f0621(0x250)]),_0x5f897c[_0x4f0621(0x1d9)]('\x20\x20\x20Blocked:\x20'+(_0x5ddf7c[_0x4f0621(0x1c8)]['blocked']||0x0));let _0x4f6d5c=_0x5ea557[_0x4f0621(0x1c8)][_0x4f0621(0x20c)]>0x0?_0x5368ff[_0x4f0621(0x222)](_0x5368ff[_0x4f0621(0x272)](_0x4c77a2['stats']['completed'],_0x5b563f[_0x4f0621(0x1c8)][_0x4f0621(0x20c)]),0x64)[_0x4f0621(0x20a)](0x1):_0x5368ff[_0x4f0621(0x25f)];_0x31d91e[_0x4f0621(0x1d9)](_0x4f0621(0x214)+_0x4f6d5c+'%');}});let _0x3c2d21=await d(_0x3c22fe(0x259)),_0x9e2a06=_0x5368ff[_0x3c22fe(0x1db)](_0x5368ff[_0x3c22fe(0x1c1)](parseInt,_0x3c2d21[_0x3c22fe(0x1ed)]()),0x1);(_0x5368ff[_0x3c22fe(0x212)](_0x9e2a06,0x0)||_0x5368ff[_0x3c22fe(0x249)](_0x9e2a06,_0x2a324f[_0x3c22fe(0x1ff)]))&&(console[_0x3c22fe(0x1ba)](_0x5368ff[_0x3c22fe(0x20f)]),process[_0x3c22fe(0x1f4)](0x1));let _0x547b97=_0x2a324f[_0x9e2a06],_0x3f93e4=_0x5368ff[_0x3c22fe(0x269)](p,_0x547b97);if(console['log'](_0x3c22fe(0x260)+_0x3f93e4['id']),console[_0x3c22fe(0x1d9)]('📌\x20Name:\x20'+_0x3f93e4[_0x3c22fe(0x1e1)]),console[_0x3c22fe(0x1d9)]('📝\x20Description:\x20'+(_0x3f93e4[_0x3c22fe(0x25a)]||_0x5368ff['XQuXN'])),console[_0x3c22fe(0x1d9)](_0x3c22fe(0x1ea)+(_0x3f93e4[_0x3c22fe(0x206)]?_0x5368ff[_0x3c22fe(0x22a)]:'No')),_0x3f93e4[_0x3c22fe(0x206)]){console[_0x3c22fe(0x1d9)](_0x3c22fe(0x1bc)),console[_0x3c22fe(0x1d9)](_0x3c22fe(0x236)+_0x3f93e4[_0x3c22fe(0x1c8)][_0x3c22fe(0x20c)]),console[_0x3c22fe(0x1d9)](_0x3c22fe(0x21f)+_0x3f93e4[_0x3c22fe(0x1c8)]['completed']),console[_0x3c22fe(0x1d9)](_0x3c22fe(0x270)+_0x3f93e4[_0x3c22fe(0x1c8)][_0x3c22fe(0x257)]),console[_0x3c22fe(0x1d9)](_0x3c22fe(0x24e)+_0x3f93e4['stats']['pending']),console[_0x3c22fe(0x1d9)](_0x3c22fe(0x1c7)+(_0x3f93e4[_0x3c22fe(0x1c8)][_0x3c22fe(0x26b)]||0x0));let _0x2d5997=_0x5368ff['nKTye'](_0x3f93e4[_0x3c22fe(0x1c8)][_0x3c22fe(0x20c)],0x0)?_0x5368ff[_0x3c22fe(0x205)](_0x5368ff['SOvDN'](_0x3f93e4[_0x3c22fe(0x1c8)][_0x3c22fe(0x1d0)],_0x3f93e4[_0x3c22fe(0x1c8)][_0x3c22fe(0x20c)]),0x64)['toFixed'](0x1):_0x5368ff['wnItO'];console[_0x3c22fe(0x1d9)]('\x20\x20\x20Progress:\x20'+_0x2d5997+'%');}console[_0x3c22fe(0x1d9)]('');}y()[_0x402885(0x1e5)](_0x3bf8b7=>{const _0xc6faf0=_0x402885,_0x17a6a3={};_0x17a6a3[_0xc6faf0(0x1c4)]=_0xc6faf0(0x1d6);const _0x2f2430=_0x17a6a3;console[_0xc6faf0(0x1ba)](_0x2f2430[_0xc6faf0(0x1c4)],_0x3bf8b7['message']),process[_0xc6faf0(0x1f4)](0x1);});
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
#!/usr/bin/env node
|
|
3
|
+
var _0x476037=_0x5960;(function(_0x609682,_0x206801){var _0x1c3edc=_0x5960,_0x3b1c60=_0x609682();while(!![]){try{var _0x3c5f7a=parseInt(_0x1c3edc(0x12e))/0x1+-parseInt(_0x1c3edc(0x143))/0x2+-parseInt(_0x1c3edc(0x12c))/0x3+-parseInt(_0x1c3edc(0x13d))/0x4*(parseInt(_0x1c3edc(0x13e))/0x5)+-parseInt(_0x1c3edc(0x154))/0x6+-parseInt(_0x1c3edc(0x14b))/0x7*(parseInt(_0x1c3edc(0x12f))/0x8)+-parseInt(_0x1c3edc(0x138))/0x9*(-parseInt(_0x1c3edc(0x123))/0xa);if(_0x3c5f7a===_0x206801)break;else _0x3b1c60['push'](_0x3b1c60['shift']());}catch(_0x2f8d51){_0x3b1c60['push'](_0x3b1c60['shift']());}}}(_0xb61b,0x4c474));function _0xb61b(){var _0x3f1c90=['recursive','.git','MFPOC','\x0a🎉\x20Successfully\x20installed\x20','djhNd','constructor','679hewYmz','dAjmn','❌\x20Error:\x20Not\x20a\x20git\x20repository','\x20hook\x20already\x20exists\x20-\x20backing\x20up\x20to\x20','.git/hooks','Run\x20\x22git\x20init\x22\x20first','search','existsSync','join','1508262sCJicU','plePR','20gLfrQJ','✅\x20Installed\x20','mkdirSync','\x20\x20pre-push\x20\x20\x20\x20-\x20Prevents\x20pushing\x20to\x20main,\x20ensures\x20tests\x20pass\x0a','platform','mode','copyFileSync','\x22\x20is\x20not\x20supported','To\x20uninstall\x20hooks:','705285TBWNGa','📋\x20Setting\x20up\x20git\x20hooks...\x0a','320722yUjxbF','19416NXcPIV','exit','\x20git\x20hooks!\x0a','path','win32','nkprm','.backup','log','apply','6003162fLCFaD','#!/bin/sh\x0a#\x20Pre-commit\x20hook:\x20Run\x20tests\x20and\x20linting\x20before\x20commit\x0a\x0aecho\x20\x22🔍\x20Running\x20pre-commit\x20checks...\x22\x0a\x0a#\x20Check\x20if\x20we\x27re\x20on\x20main\x20branch\x0aBRANCH=$(git\x20rev-parse\x20--abbrev-ref\x20HEAD)\x0aif\x20[\x20\x22$BRANCH\x22\x20=\x20\x22main\x22\x20]\x20||\x20[\x20\x22$BRANCH\x22\x20=\x20\x22master\x22\x20];\x20then\x0a\x20\x20echo\x20\x22❌\x20ERROR:\x20Cannot\x20commit\x20directly\x20to\x20$BRANCH\x20branch\x22\x0a\x20\x20echo\x20\x22Create\x20a\x20feature\x20branch\x20first:\x22\x0a\x20\x20echo\x20\x22\x20\x20git\x20checkout\x20-b\x20task/TASK-XXX-description\x22\x0a\x20\x20exit\x201\x0afi\x0a\x0a#\x20Run\x20linter\x20if\x20package.json\x20has\x20lint\x20script\x0aif\x20grep\x20-q\x20\x27\x22lint\x22\x27\x20package.json\x202>/dev/null;\x20then\x0a\x20\x20echo\x20\x22Running\x20linter...\x22\x0a\x20\x20npm\x20run\x20lint\x20--silent\x0a\x20\x20if\x20[\x20$?\x20-ne\x200\x20];\x20then\x0a\x20\x20\x20\x20echo\x20\x22❌\x20Linting\x20failed.\x20Fix\x20errors\x20before\x20committing.\x22\x0a\x20\x20\x20\x20exit\x201\x0a\x20\x20fi\x0afi\x0a\x0a#\x20Run\x20formatter\x20check\x20if\x20available\x0aif\x20grep\x20-q\x20\x27\x22format:check\x22\x27\x20package.json\x202>/dev/null;\x20then\x0a\x20\x20echo\x20\x22Checking\x20formatting...\x22\x0a\x20\x20npm\x20run\x20format:check\x20--silent\x0a\x20\x20if\x20[\x20$?\x20-ne\x200\x20];\x20then\x0a\x20\x20\x20\x20echo\x20\x22❌\x20Formatting\x20check\x20failed.\x20Run\x20\x27npm\x20run\x20format\x27\x20to\x20fix.\x22\x0a\x20\x20\x20\x20exit\x201\x0a\x20\x20fi\x0afi\x0a\x0a#\x20Run\x20tests\x0aif\x20grep\x20-q\x20\x27\x22test\x22\x27\x20package.json\x202>/dev/null;\x20then\x0a\x20\x20echo\x20\x22Running\x20tests...\x22\x0a\x20\x20npm\x20test\x20--silent\x0a\x20\x20if\x20[\x20$?\x20-ne\x200\x20];\x20then\x0a\x20\x20\x20\x20echo\x20\x22❌\x20Tests\x20failed.\x20Fix\x20failing\x20tests\x20before\x20committing.\x22\x0a\x20\x20\x20\x20exit\x201\x0a\x20\x20fi\x0afi\x0a\x0aecho\x20\x22✅\x20Pre-commit\x20checks\x20passed!\x22\x0aexit\x200\x0a','\x20\x20rm\x20.git/hooks/pre-commit\x20.git/hooks/commit-msg\x20.git/hooks/pre-push\x0a','⚠️\x20\x20','To\x20bypass\x20hooks\x20(NOT\x20RECOMMENDED):','270748JQeocO','5SpBXoG','\x20\x20pre-commit\x20\x20-\x20Validates\x20linting,\x20formatting,\x20tests\x20before\x20commit','KTtYA','qMcEZ','toString','1105488Ptstli','FBAfv'];_0xb61b=function(){return _0x3f1c90;};return _0xb61b();}var _0xf034c0=(function(){var _0x319736=_0x5960,_0x16bbbc={};_0x16bbbc[_0x319736(0x149)]='UwCqM',_0x16bbbc[_0x319736(0x140)]=_0x319736(0x141),_0x16bbbc[_0x319736(0x134)]=function(_0x29dd91,_0x3ae5b0){return _0x29dd91!==_0x3ae5b0;},_0x16bbbc[_0x319736(0x155)]='dTCIq';var _0x56d80a=_0x16bbbc,_0x117176=!![];return function(_0x4d1b22,_0x3802f1){var _0x316ce7=_0x319736;if(_0x56d80a[_0x316ce7(0x134)](_0x56d80a['plePR'],_0x56d80a[_0x316ce7(0x155)])){if(_0x3ef784){var _0x17dcb0=_0x12ca3d[_0x316ce7(0x137)](_0x21633a,arguments);return _0x55ad06=null,_0x17dcb0;}}else{var _0x5661f8=_0x117176?function(){var _0x17c5b9=_0x316ce7;if(_0x3802f1){if(_0x56d80a[_0x17c5b9(0x149)]!==_0x56d80a[_0x17c5b9(0x140)]){var _0x47bce3=_0x3802f1[_0x17c5b9(0x137)](_0x4d1b22,arguments);return _0x3802f1=null,_0x47bce3;}else{var _0x43c513=_0xedfba2?function(){var _0x105e8a=_0x17c5b9;if(_0x2d8907){var _0x4aa513=_0x280e5d[_0x105e8a(0x137)](_0x1f0a08,arguments);return _0x2fcd45=null,_0x4aa513;}}:function(){};return _0x3fe2ea=![],_0x43c513;}}}:function(){};return _0x117176=![],_0x5661f8;}};}()),_0x32d112=_0xf034c0(this,function(){var _0x4a9742=_0x5960,_0x573d3f={};_0x573d3f[_0x4a9742(0x14c)]='(((.+)+)+)+$';var _0x40e19e=_0x573d3f;return _0x32d112[_0x4a9742(0x142)]()[_0x4a9742(0x151)](_0x40e19e['dAjmn'])[_0x4a9742(0x142)]()[_0x4a9742(0x14a)](_0x32d112)[_0x4a9742(0x151)](_0x40e19e['dAjmn']);});_0x32d112();var n=(_0xb338f0=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0xb338f0,{'get':(_0x4fe6e9,_0x405e8e)=>(typeof require<'u'?require:_0x4fe6e9)[_0x405e8e]}):_0xb338f0)(function(_0x20f1f4){var _0x1299d6=_0x5960,_0x54a1af={};_0x54a1af[_0x1299d6(0x147)]=function(_0x4336c6,_0x28d264){return _0x4336c6<_0x28d264;},_0x54a1af[_0x1299d6(0x144)]='Dynamic\x20require\x20of\x20\x22',_0x54a1af['FQgAu']=_0x1299d6(0x12a);var _0x4d4ee9=_0x54a1af;if(_0x4d4ee9[_0x1299d6(0x147)](typeof require,'u'))return require[_0x1299d6(0x137)](this,arguments);throw Error(_0x4d4ee9[_0x1299d6(0x144)]+_0x20f1f4+_0x4d4ee9['FQgAu']);}),t=n('fs'),r=n(_0x476037(0x132)),s=_0x476037(0x14f);t['existsSync'](_0x476037(0x146))||(console['error'](_0x476037(0x14d)),console['error'](_0x476037(0x150)),process[_0x476037(0x130)](0x1));var _0x1c3f17={};_0x1c3f17[_0x476037(0x145)]=!0x0,t[_0x476037(0x152)](s)||t[_0x476037(0x125)](s,_0x1c3f17),console[_0x476037(0x136)](_0x476037(0x12d));var a=_0x476037(0x139),h='#!/bin/sh\x0a#\x20Commit-msg\x20hook:\x20Validate\x20commit\x20message\x20format\x0a\x0aCOMMIT_MSG_FILE=$1\x0aCOMMIT_MSG=$(cat\x20\x22$COMMIT_MSG_FILE\x22)\x0a\x0a#\x20Check\x20if\x20commit\x20message\x20follows\x20format:\x20[TASK-XXX]\x20Description\x0a#\x20or\x20starts\x20with\x20common\x20prefixes\x20like\x20feat:,\x20fix:,\x20docs:,\x20etc.\x0aif\x20echo\x20\x22$COMMIT_MSG\x22\x20|\x20grep\x20-qE\x20\x27^\x5c[TASK-[0-9]{3}\x5c]|^(feat|fix|docs|style|refactor|test|chore|perf|ci|build|revert):\x27;\x20then\x0a\x20\x20exit\x200\x0afi\x0a\x0a#\x20Allow\x20merge\x20commits\x0aif\x20echo\x20\x22$COMMIT_MSG\x22\x20|\x20grep\x20-qE\x20\x27^Merge\x27;\x20then\x0a\x20\x20exit\x200\x0afi\x0a\x0aecho\x20\x22❌\x20ERROR:\x20Invalid\x20commit\x20message\x20format\x22\x0aecho\x20\x22\x22\x0aecho\x20\x22Commit\x20message\x20must\x20start\x20with:\x22\x0aecho\x20\x22\x20\x20[TASK-XXX]\x20Description\x20\x20(for\x20task-related\x20commits)\x22\x0aecho\x20\x22\x20\x20feat:\x20Description\x20\x20\x20\x20\x20\x20\x20(for\x20new\x20features)\x22\x0aecho\x20\x22\x20\x20fix:\x20Description\x20\x20\x20\x20\x20\x20\x20\x20(for\x20bug\x20fixes)\x22\x0aecho\x20\x22\x20\x20docs:\x20Description\x20\x20\x20\x20\x20\x20\x20(for\x20documentation)\x22\x0aecho\x20\x22\x22\x0aecho\x20\x22Your\x20message:\x20$COMMIT_MSG\x22\x0aecho\x20\x22\x22\x0aexit\x201\x0a',m='#!/bin/sh\x0a#\x20Pre-push\x20hook:\x20Final\x20validation\x20before\x20push\x0a\x0aecho\x20\x22🚀\x20Running\x20pre-push\x20checks...\x22\x0a\x0a#\x20Check\x20if\x20we\x27re\x20on\x20main\x20branch\x0aBRANCH=$(git\x20rev-parse\x20--abbrev-ref\x20HEAD)\x0aif\x20[\x20\x22$BRANCH\x22\x20=\x20\x22main\x22\x20]\x20||\x20[\x20\x22$BRANCH\x22\x20=\x20\x22master\x22\x20];\x20then\x0a\x20\x20echo\x20\x22❌\x20ERROR:\x20Cannot\x20push\x20directly\x20to\x20$BRANCH\x20branch\x22\x0a\x20\x20echo\x20\x22Create\x20a\x20feature\x20branch\x20first\x22\x0a\x20\x20exit\x201\x0afi\x0a\x0a#\x20Check\x20for\x20uncommitted\x20changes\x0aif\x20!\x20git\x20diff-index\x20--quiet\x20HEAD\x20--;\x20then\x0a\x20\x20echo\x20\x22❌\x20ERROR:\x20You\x20have\x20uncommitted\x20changes\x22\x0a\x20\x20echo\x20\x22Commit\x20or\x20stash\x20changes\x20before\x20pushing\x22\x0a\x20\x20exit\x201\x0afi\x0a\x0a#\x20Run\x20full\x20test\x20suite\x0aif\x20grep\x20-q\x20\x27\x22test\x22\x27\x20package.json\x202>/dev/null;\x20then\x0a\x20\x20echo\x20\x22Running\x20full\x20test\x20suite...\x22\x0a\x20\x20npm\x20test\x20--silent\x0a\x20\x20if\x20[\x20$?\x20-ne\x200\x20];\x20then\x0a\x20\x20\x20\x20echo\x20\x22❌\x20Tests\x20failed.\x20Fix\x20failing\x20tests\x20before\x20pushing.\x22\x0a\x20\x20\x20\x20exit\x201\x0a\x20\x20fi\x0afi\x0a\x0aecho\x20\x22✅\x20Pre-push\x20checks\x20passed!\x22\x0aexit\x200\x0a',f={'pre-commit':a,'commit-msg':h,'pre-push':m},c=0x0;for(let [e,i]of Object['entries'](f)){let o=r[_0x476037(0x153)](s,e);var _0x3dc03e={};_0x3dc03e[_0x476037(0x128)]=0x1ed,(t['existsSync'](o)&&(console[_0x476037(0x136)](_0x476037(0x13b)+e+_0x476037(0x14e)+e+_0x476037(0x135)),t[_0x476037(0x129)](o,o+'.backup')),t['writeFileSync'](o,i,_0x3dc03e),process[_0x476037(0x127)]!==_0x476037(0x133)&&t['chmodSync'](o,0x1ed),console[_0x476037(0x136)](_0x476037(0x124)+e+'\x20hook'),c++);}function _0x5960(_0x54c43b,_0x5e4476){_0x54c43b=_0x54c43b-0x123;var _0x15a6b7=_0xb61b();var _0x32d112=_0x15a6b7[_0x54c43b];return _0x32d112;}console[_0x476037(0x136)](_0x476037(0x148)+c+_0x476037(0x131)),console[_0x476037(0x136)]('Hooks\x20installed:'),console[_0x476037(0x136)](_0x476037(0x13f)),console['log']('\x20\x20commit-msg\x20\x20-\x20Enforces\x20commit\x20message\x20format\x20[TASK-XXX]\x20or\x20feat:/fix:'),console['log'](_0x476037(0x126)),console[_0x476037(0x136)](_0x476037(0x13c)),console[_0x476037(0x136)]('\x20\x20git\x20commit\x20--no-verify\x0a'),console['log'](_0x476037(0x12b)),console['log'](_0x476037(0x13a)),process[_0x476037(0x130)](0x0);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
#!/usr/bin/env node
|
|
3
|
+
var _0x18afdd=_0x2357;(function(_0x469fdb,_0x2cb820){var _0x3cf12a=_0x2357,_0x1543a2=_0x469fdb();while(!![]){try{var _0x88bc68=-parseInt(_0x3cf12a(0x80))/0x1+-parseInt(_0x3cf12a(0x95))/0x2*(-parseInt(_0x3cf12a(0x8c))/0x3)+parseInt(_0x3cf12a(0x93))/0x4+-parseInt(_0x3cf12a(0x91))/0x5+parseInt(_0x3cf12a(0x7c))/0x6+-parseInt(_0x3cf12a(0x77))/0x7*(parseInt(_0x3cf12a(0x9a))/0x8)+parseInt(_0x3cf12a(0x9f))/0x9;if(_0x88bc68===_0x2cb820)break;else _0x1543a2['push'](_0x1543a2['shift']());}catch(_0x4cccea){_0x1543a2['push'](_0x1543a2['shift']());}}}(_0x342a,0x3706e));var _0x221a95=(function(){var _0x34634c=_0x2357,_0x7ed271={};_0x7ed271['hrTJN']=_0x34634c(0x9c),_0x7ed271[_0x34634c(0x8a)]=_0x34634c(0x9e),_0x7ed271[_0x34634c(0x94)]=_0x34634c(0x87);var _0x594c31=_0x7ed271,_0x28818b=!![];return function(_0x4be94d,_0xf4a867){var _0x1b5b69=_0x34634c;if(_0x594c31['AfdeW']==='gYORi'){var _0x2e3014=_0x28818b?function(){var _0x41e4e1=_0x2357;if(_0xf4a867){var _0x5e74bf=_0xf4a867[_0x41e4e1(0x79)](_0x4be94d,arguments);return _0xf4a867=null,_0x5e74bf;}}:function(){};return _0x28818b=![],_0x2e3014;}else{var _0x170632={};_0x170632['stdio']=_0x594c31[_0x1b5b69(0x89)],(_0x41f900('node\x20\x22'+_0x3e6c64+'\x22\x20'+_0x1abca3,_0x170632),_0x73dbef[_0x1b5b69(0x7d)]('\x0a🎉\x20Task\x20'+_0x4f7602+'\x20marked\x20as\x20completed!'),_0x494178[_0x1b5b69(0x7d)]('\x0aNext\x20steps:'),_0x125f39['log'](_0x594c31[_0x1b5b69(0x8a)]),_0x14dc33['log'](_0x1b5b69(0x90)));}};}()),_0x29fce7=_0x221a95(this,function(){var _0x31d8e2=_0x2357,_0x1e075b={};_0x1e075b[_0x31d8e2(0x8d)]=_0x31d8e2(0x84);var _0x21a071=_0x1e075b;return _0x29fce7[_0x31d8e2(0x78)]()[_0x31d8e2(0x7a)](_0x21a071[_0x31d8e2(0x8d)])[_0x31d8e2(0x78)]()[_0x31d8e2(0x98)](_0x29fce7)[_0x31d8e2(0x7a)](_0x21a071[_0x31d8e2(0x8d)]);});_0x29fce7();var s=(_0x24f806=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x24f806,{'get':(_0x2d68a4,_0x5a4409)=>(typeof require<'u'?require:_0x2d68a4)[_0x5a4409]}):_0x24f806)(function(_0x120fe3){var _0x30b262=_0x2357,_0x21908a={'tQBuo':function(_0x4b487a,_0x12c33b){return _0x4b487a<_0x12c33b;},'lyEvR':function(_0x5e5fbc,_0x85247a){return _0x5e5fbc(_0x85247a);},'fRUOb':function(_0x2e3c0c,_0x145286){return _0x2e3c0c+_0x145286;},'OiKdK':_0x30b262(0x8e),'IpfHB':'\x22\x20is\x20not\x20supported'};if(_0x21908a[_0x30b262(0x85)](typeof require,'u'))return require[_0x30b262(0x79)](this,arguments);throw _0x21908a[_0x30b262(0x9b)](Error,_0x21908a[_0x30b262(0x8f)](_0x21908a[_0x30b262(0x86)],_0x120fe3)+_0x21908a[_0x30b262(0x7f)]);}),{execSync:n}=s(_0x18afdd(0x81)),c=s(_0x18afdd(0x9d)),e=process[_0x18afdd(0x99)][0x2];function _0x2357(_0x5478fc,_0xaceabb){_0x5478fc=_0x5478fc-0x77;var _0x2a8248=_0x342a();var _0x29fce7=_0x2a8248[_0x5478fc];return _0x29fce7;}function _0x342a(){var _0x4154ad=['stdio','560604DDBvAc','log','❌\x20Error:\x20Task\x20ID\x20is\x20required','IpfHB','350005zLqqqg','child_process','\x0a❌\x20Failed\x20to\x20complete\x20task\x20','\x0aUsage:\x20node\x20scripts/task-done.js\x20TASK-001','(((.+)+)+)+$','tQBuo','OiKdK','gYORi','node\x20\x22','hrTJN','TFPPG','\x20marked\x20as\x20completed!','2931jbtRIx','oPTqI','Dynamic\x20require\x20of\x20\x22','fRUOb','\x20\x20-\x20Start\x20next\x20task:\x20npm\x20run\x20task:start\x20TASK-XXX','147215JogjpS','\x20\x20\x20Or:\x20npm\x20run\x20task:done\x20TASK-001','587736GDLvPR','AfdeW','910RWJdaQ','complete-task.js','error','constructor','argv','8llgPNA','lyEvR','inherit','path','\x20\x20-\x20Check\x20status:\x20npm\x20run\x20task:status','3224772PgRLCZ','\x0aNext\x20steps:','join','3068611qSPCGs','toString','apply','search'];_0x342a=function(){return _0x4154ad;};return _0x342a();}e||(console['error'](_0x18afdd(0x7e)),console[_0x18afdd(0x97)](_0x18afdd(0x83)),console[_0x18afdd(0x97)](_0x18afdd(0x92)),process['exit'](0x1));var a=c[_0x18afdd(0xa1)](__dirname,'..','.claude','hooks',_0x18afdd(0x96));console[_0x18afdd(0x7d)]('✅\x20Completing\x20task:\x20'+e+'\x0a');try{var _0x50c5a5={};_0x50c5a5[_0x18afdd(0x7b)]=_0x18afdd(0x9c),(n(_0x18afdd(0x88)+a+'\x22\x20'+e,_0x50c5a5),console[_0x18afdd(0x7d)]('\x0a🎉\x20Task\x20'+e+_0x18afdd(0x8b)),console[_0x18afdd(0x7d)](_0x18afdd(0xa0)),console['log']('\x20\x20-\x20Check\x20status:\x20npm\x20run\x20task:status'),console[_0x18afdd(0x7d)](_0x18afdd(0x90)));}catch{console['error'](_0x18afdd(0x82)+e),process['exit'](0x1);}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
#!/usr/bin/env node
|
|
3
|
+
const _0x40272e=_0x4b81;(function(_0x4b2cff,_0x5ba247){const _0x534100=_0x4b81,_0x291678=_0x4b2cff();while(!![]){try{const _0x25c880=-parseInt(_0x534100(0x14e))/0x1+-parseInt(_0x534100(0x14a))/0x2*(-parseInt(_0x534100(0x1a1))/0x3)+parseInt(_0x534100(0x198))/0x4*(-parseInt(_0x534100(0x1b3))/0x5)+-parseInt(_0x534100(0x174))/0x6*(parseInt(_0x534100(0x147))/0x7)+-parseInt(_0x534100(0x140))/0x8+-parseInt(_0x534100(0x17a))/0x9+parseInt(_0x534100(0x1ae))/0xa;if(_0x25c880===_0x5ba247)break;else _0x291678['push'](_0x291678['shift']());}catch(_0x206f20){_0x291678['push'](_0x291678['shift']());}}}(_0x4e94,0x2edaa));const _0x5f3285=(function(){const _0x8bbcbf=_0x4b81,_0x43e7f8={'oEmAZ':'main','iijSD':_0x8bbcbf(0x186),'PIfLe':function(_0x3d1ff0,_0x236256,_0x265fc8){return _0x3d1ff0(_0x236256,_0x265fc8);},'hgvtR':function(_0x589178,_0x13ffbe){return _0x589178!==_0x13ffbe;},'DOYAQ':_0x8bbcbf(0x15b),'DlyTT':_0x8bbcbf(0x151),'skgaj':function(_0x3c3ec8,_0xfb6d02){return _0x3c3ec8===_0xfb6d02;},'hinWT':'eaEdy'};let _0x1bc7a0=!![];return function(_0x5510d1,_0x541afb){const _0x1f7824=_0x8bbcbf,_0x2a84ba={'sGFeN':_0x1f7824(0x1a0),'RiLZo':_0x43e7f8[_0x1f7824(0x127)],'xYBek':_0x43e7f8[_0x1f7824(0x1a8)],'HXwAu':function(_0x50d494,_0x13ad22,_0x29fdc9){const _0x4fd6df=_0x1f7824;return _0x43e7f8[_0x4fd6df(0x18e)](_0x50d494,_0x13ad22,_0x29fdc9);},'NOeVF':function(_0x3b85a0,_0x91cb0b,_0x5e2169){return _0x3b85a0(_0x91cb0b,_0x5e2169);},'bzLZt':function(_0xf6743d,_0x323539){const _0x2ca892=_0x1f7824;return _0x43e7f8[_0x2ca892(0x134)](_0xf6743d,_0x323539);},'fuDBA':_0x43e7f8['DOYAQ'],'IfVeI':_0x43e7f8[_0x1f7824(0x170)],'kqJhW':function(_0x360b97,_0x3de3c2){const _0x1d6798=_0x1f7824;return _0x43e7f8[_0x1d6798(0x188)](_0x360b97,_0x3de3c2);},'RzQNb':_0x43e7f8[_0x1f7824(0x12e)]},_0x31c7ba=_0x1bc7a0?function(){const _0x144046=_0x1f7824,_0x47289e={'QcbsY':_0x144046(0x14b),'moDOo':_0x2a84ba['sGFeN'],'Gvvic':_0x2a84ba[_0x144046(0x183)],'WTqMm':_0x2a84ba[_0x144046(0x16a)],'cUwZJ':function(_0x43439c,_0x50c638,_0x2f6ec8){const _0x47578d=_0x144046;return _0x2a84ba[_0x47578d(0x15e)](_0x43439c,_0x50c638,_0x2f6ec8);},'kxzne':function(_0x12e0ad,_0xfcf06e,_0x34c344){const _0x5e3901=_0x144046;return _0x2a84ba[_0x5e3901(0x124)](_0x12e0ad,_0xfcf06e,_0x34c344);}};if(_0x2a84ba[_0x144046(0x161)](_0x2a84ba['fuDBA'],_0x2a84ba[_0x144046(0x133)])){if(_0x541afb){if(_0x2a84ba[_0x144046(0x1a4)](_0x2a84ba[_0x144046(0x18f)],_0x2a84ba[_0x144046(0x18f)])){const _0x1ca519=_0x541afb[_0x144046(0x14d)](_0x5510d1,arguments);return _0x541afb=null,_0x1ca519;}else{const _0x13c510={};_0x13c510[_0x144046(0x135)]=_0x47289e['QcbsY'];let _0x1392a7=_0x568c04('git\x20branch\x20-a',_0x13c510);_0x1392a7['includes'](_0x47289e['moDOo'])&&!_0x1392a7[_0x144046(0x165)](_0x47289e[_0x144046(0x1b5)])&&(_0xe1b1fe=_0x144046(0x1a0));}}}else{if(_0x3f0e76(_0x47289e[_0x144046(0x16c)],{'encoding':_0x47289e[_0x144046(0x172)]})['includes'](_0x3a2c0f)){const _0x26d9df={};_0x26d9df['encoding']=_0x144046(0x14b),(_0x47289e[_0x144046(0x1a3)](_0x3462a5,_0x144046(0x185)+_0x516a9a,_0x26d9df),_0xf0bb05[_0x144046(0x171)](_0x144046(0x182)+_0x3e5576));try{const _0x5248fd={};_0x5248fd[_0x144046(0x196)]=_0x144046(0x187),(_0x47289e[_0x144046(0x13d)](_0x49f91f,_0x144046(0x15d)+_0x298df0,_0x5248fd),_0x2fde3e[_0x144046(0x171)](_0x144046(0x132)+_0x1a1231));}catch{_0x5c9994['log'](_0x144046(0x19c)+_0x2e955b+_0x144046(0x148));}}}}:function(){};return _0x1bc7a0=![],_0x31c7ba;};}()),_0x3b7f57=_0x5f3285(this,function(){const _0x4df0b4=_0x4b81,_0xcfb3ff={};_0xcfb3ff[_0x4df0b4(0x1b2)]=_0x4df0b4(0x18b);const _0x2afc66=_0xcfb3ff;return _0x3b7f57[_0x4df0b4(0x15a)]()[_0x4df0b4(0x13e)](_0x2afc66[_0x4df0b4(0x1b2)])[_0x4df0b4(0x15a)]()[_0x4df0b4(0x17d)](_0x3b7f57)[_0x4df0b4(0x13e)](_0x2afc66['JpmIC']);});_0x3b7f57();var u=(_0x24a636=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x24a636,{'get':(_0x30475e,_0x2e04d6)=>(typeof require<'u'?require:_0x30475e)[_0x2e04d6]}):_0x24a636)(function(_0x3e2bdd){const _0x3fd699=_0x4b81,_0x11b16a={};_0x11b16a[_0x3fd699(0x129)]=function(_0x16b768,_0x496636){return _0x16b768<_0x496636;},_0x11b16a[_0x3fd699(0x194)]=function(_0x555267,_0x5a04e1){return _0x555267+_0x5a04e1;},_0x11b16a[_0x3fd699(0x173)]=_0x3fd699(0x139),_0x11b16a['Lczbk']=_0x3fd699(0x1b4);const _0x5b00aa=_0x11b16a;if(_0x5b00aa[_0x3fd699(0x129)](typeof require,'u'))return require[_0x3fd699(0x14d)](this,arguments);throw Error(_0x5b00aa['zsSnn'](_0x5b00aa['zsSnn'](_0x5b00aa[_0x3fd699(0x173)],_0x3e2bdd),_0x5b00aa['Lczbk']));}),{execSync:s}=u(_0x40272e(0x163)),c=u('fs'),g=u(_0x40272e(0x146)),l=process[_0x40272e(0x12b)][_0x40272e(0x180)](0x2),p=_0x40272e(0x17f);c[_0x40272e(0x199)](p)||(console[_0x40272e(0x145)](_0x40272e(0x155)),console[_0x40272e(0x145)]('Set\x20active\x20plan\x20first:\x20npm\x20run\x20plan:manager\x0a'),process['exit'](0x1));var f=c[_0x40272e(0x154)](p,'utf8')[_0x40272e(0x164)](),h=g[_0x40272e(0x156)]('.claude/plans',f),R=g[_0x40272e(0x156)](h,'TASK-TRACKER.json');c[_0x40272e(0x199)](R)||(console[_0x40272e(0x145)](_0x40272e(0x19e)),console[_0x40272e(0x145)](_0x40272e(0x141)+f),process[_0x40272e(0x150)](0x1));var m=JSON[_0x40272e(0x191)](c[_0x40272e(0x154)](R,_0x40272e(0x14b))),d='task',r=null;l[0x0]===_0x40272e(0x195)?(d=_0x40272e(0x138),r=l[0x1],r||(console[_0x40272e(0x145)](_0x40272e(0x189)),console[_0x40272e(0x145)](_0x40272e(0x12c)),process[_0x40272e(0x150)](0x1))):(r=l[0x0],r||(console[_0x40272e(0x145)](_0x40272e(0x15c)),console[_0x40272e(0x145)](_0x40272e(0x137)),console['error'](_0x40272e(0x179)),process['exit'](0x1))),console[_0x40272e(0x171)](_0x40272e(0x152)+(d===_0x40272e(0x138)?_0x40272e(0x126):'Task')+'\x20'+r+'\x0a');var i=[];if(d===_0x40272e(0x12d)){m[_0x40272e(0x16d)][_0x40272e(0x16e)](_0x574b15=>_0x574b15['id']===r)||(console[_0x40272e(0x145)]('❌\x20ERROR:\x20Task\x20'+r+'\x20not\x20found'),process[_0x40272e(0x150)](0x1));let n=g[_0x40272e(0x156)](h,_0x40272e(0x193),r+_0x40272e(0x143));c[_0x40272e(0x199)](n)||(console[_0x40272e(0x145)](_0x40272e(0x19f)+n),process[_0x40272e(0x150)](0x1));let o=JSON[_0x40272e(0x191)](c['readFileSync'](n,'utf8'));o[_0x40272e(0x166)]!=='completed'&&(console[_0x40272e(0x145)]('❌\x20ERROR:\x20Task\x20'+r+'\x20is\x20not\x20completed\x20(status:\x20'+o['status']+')'),console[_0x40272e(0x145)]('Complete\x20task\x20first:\x20npm\x20run\x20task:done\x20'+r),process['exit'](0x1)),i['push'](o);}else{let e=m[_0x40272e(0x16d)][_0x40272e(0x19d)](_0x2cca32=>{const _0x3861fc=_0x40272e,_0x56df96={};_0x56df96['Bigzk']='tasks',_0x56df96['BFrGy']='utf8';const _0x49d8c2=_0x56df96;let _0x2b7255=g[_0x3861fc(0x156)](h,_0x49d8c2['Bigzk'],_0x2cca32['id']+_0x3861fc(0x143));return c[_0x3861fc(0x199)](_0x2b7255)?JSON['parse'](c['readFileSync'](_0x2b7255,_0x49d8c2[_0x3861fc(0x13a)])):null;})[_0x40272e(0x1b0)](_0x1a1a0c=>_0x1a1a0c!==null&&_0x1a1a0c[_0x40272e(0x138)]===r);e[_0x40272e(0x18d)]===0x0&&(console['error'](_0x40272e(0x192)+r),process[_0x40272e(0x150)](0x1));let n=e[_0x40272e(0x1b0)](_0x386f88=>_0x386f88[_0x40272e(0x166)]!==_0x40272e(0x1af));n['length']>0x0&&(console[_0x40272e(0x145)]('❌\x20ERROR:\x20Phase\x20'+r+_0x40272e(0x1ab)),n[_0x40272e(0x190)](_0x2dcbd7=>{const _0x3d6eea=_0x40272e;console['error']('\x20\x20'+_0x2dcbd7['id']+':\x20'+_0x2dcbd7[_0x3d6eea(0x1a5)]+'\x20('+_0x2dcbd7[_0x3d6eea(0x166)]+')');}),console[_0x40272e(0x145)](_0x40272e(0x167)),process[_0x40272e(0x150)](0x1)),i=e[_0x40272e(0x1b0)](_0x35fc82=>_0x35fc82['status']==='completed');}console['log'](_0x40272e(0x12a)+i['length']+_0x40272e(0x15f)),i[_0x40272e(0x190)](_0x626f4=>{const _0x224186=_0x40272e;console[_0x224186(0x171)](_0x224186(0x1a7)+_0x626f4['id']+':\x20'+_0x626f4[_0x224186(0x1a5)]);}),console[_0x40272e(0x171)]('');try{const _0x4125bd={};_0x4125bd[_0x40272e(0x135)]='utf8';let e=s(_0x40272e(0x18a),_0x4125bd)['trim']();(e==='main'||e===_0x40272e(0x1a0))&&(console[_0x40272e(0x145)](_0x40272e(0x17e)),console[_0x40272e(0x145)](_0x40272e(0x19a)),process[_0x40272e(0x150)](0x1)),console['log'](_0x40272e(0x13c)+e+'\x0a');}catch{console[_0x40272e(0x145)](_0x40272e(0x13b)),console[_0x40272e(0x145)]('Are\x20you\x20in\x20a\x20git\x20repository?\x0a'),process[_0x40272e(0x150)](0x1);}try{const _0x4a7c0a={};_0x4a7c0a[_0x40272e(0x135)]=_0x40272e(0x14b);let e=s('git\x20status\x20--porcelain',_0x4a7c0a);e[_0x40272e(0x164)]()&&(console[_0x40272e(0x145)](_0x40272e(0x184)),console[_0x40272e(0x145)]('Uncommitted\x20files:'),console[_0x40272e(0x145)](e),console[_0x40272e(0x145)](_0x40272e(0x19b)),console[_0x40272e(0x145)](_0x40272e(0x175)),console[_0x40272e(0x145)]('\x20\x20git\x20commit\x20-m\x20\x22[TASK-XXX]\x20Description\x22\x0a'),process['exit'](0x1));}catch{console['warn'](_0x40272e(0x12f));}var t=_0x40272e(0x136);try{const _0x8f2f4c={};_0x8f2f4c['encoding']='utf8';let e=s(_0x40272e(0x14c),_0x8f2f4c);e[_0x40272e(0x165)]('master')&&!e['includes'](_0x40272e(0x136))&&(t=_0x40272e(0x1a0));}catch{console[_0x40272e(0x162)](_0x40272e(0x1b1));}console[_0x40272e(0x171)](_0x40272e(0x142)),console['log'](_0x40272e(0x14f));try{const _0x13cb42={};_0x13cb42[_0x40272e(0x196)]=_0x40272e(0x130),s(_0x40272e(0x1a9),_0x13cb42);}catch{console[_0x40272e(0x162)]('⚠️\x20\x20WARNING:\x20Could\x20not\x20fetch\x20from\x20remote\x20(continuing\x20anyway)');}console['log'](_0x40272e(0x16b)+t+_0x40272e(0x168));try{const _0x3002f2={};_0x3002f2['stdio']=_0x40272e(0x130),s(_0x40272e(0x144)+t,_0x3002f2);}catch{console[_0x40272e(0x145)]('\x0a❌\x20ERROR:\x20Could\x20not\x20checkout\x20'+t),process[_0x40272e(0x150)](0x1);}function _0x4e94(){const _0x47d07d=['Checkout\x20a\x20task\x20branch\x20first\x0a','\x0aCommit\x20all\x20changes\x20before\x20merging:','\x20\x20\x20⚠️\x20\x20Remote\x20branch\x20','map','\x0a❌\x20ERROR:\x20Task\x20tracker\x20not\x20found','❌\x20ERROR:\x20Task\x20file\x20not\x20found:\x20','master','2361SEsmqZ','\x0aYou\x20are\x20now\x20on\x20','cUwZJ','kqJhW','title','\x0a4.\x20Merging\x20task\x20branch(es)...\x0a','\x20\x20✅\x20','iijSD','git\x20fetch\x20origin','\x20-m\x20\x22Merge\x20','\x20has\x20incomplete\x20tasks:\x0a','git\x20pull\x20origin\x20','\x0a❌\x20ERROR:\x20Could\x20not\x20push\x20to\x20remote','5321130UCoASm','completed','filter','⚠️\x20\x20WARNING:\x20Could\x20not\x20detect\x20main\x20branch,\x20using\x20\x22main\x22\x0a','JpmIC','81645coBSlo','\x22\x20is\x20not\x20supported','Gvvic','NOeVF','6.\x20Cleaning\x20up\x20merged\x20branches...\x0a','Phase','oEmAZ','replace','CrmgM','Found\x20','argv','Usage:\x20npm\x20run\x20task:merge\x20--\x20--phase\x20PHASE-NAME\x0a','task','hinWT','⚠️\x20\x20WARNING:\x20Could\x20not\x20check\x20git\x20status\x0a','inherit','task/','\x20\x20\x20🗑️\x20\x20Deleted\x20remote\x20branch:\x20','IfVeI','hgvtR','encoding','main','Usage:\x20npm\x20run\x20task:merge\x20TASK-001','phase','Dynamic\x20require\x20of\x20\x22','BFrGy','❌\x20ERROR:\x20Could\x20not\x20get\x20current\x20branch','Current\x20branch:\x20','kxzne','search','\x20\x20\x20⚠️\x20\x20WARNING:\x20Branch\x20','2224584RUnXby','Plan:\x20','🔄\x20Starting\x20merge\x20process...\x0a','.json','git\x20checkout\x20','error','path','77ZHMqNu','\x20not\x20found\x20(may\x20not\x20have\x20been\x20pushed)','⚠️\x20\x20WARNING:\x20Could\x20not\x20pull\x20from\x20remote\x20(continuing\x20anyway)','878tKlbnD','utf8','git\x20branch\x20-a','apply','88689bVNogB','1.\x20Fetching\x20latest\x20changes\x20from\x20remote...','exit','wxtqY','\x0a🔀\x20Merge\x20to\x20Main:\x20','5.\x20Pushing\x20to\x20remote...\x0a','readFileSync','\x0a❌\x20ERROR:\x20No\x20active\x20plan\x20found','join','substring','\x0a✅\x20MERGE\x20COMPLETE!\x0a','\x20branch.','toString','oBWec','\x0a❌\x20ERROR:\x20Task\x20ID\x20required','git\x20push\x20origin\x20--delete\x20','HXwAu','\x20completed\x20task(s)\x20to\x20merge:\x0a','git\x20push\x20origin\x20','bzLZt','warn','child_process','trim','includes','status','\x0aComplete\x20all\x20tasks\x20in\x20phase\x20before\x20merging.\x0a','\x20branch...','toLowerCase','xYBek','\x0a2.\x20Checking\x20out\x20','WTqMm','taskFiles','find','\x20\x20\x20⚠️\x20\x20Could\x20not\x20delete\x20branch\x20','DlyTT','log','QcbsY','NzpAQ','798wpavFL','\x20\x20git\x20add\x20.','To\x20start\x20next\x20task:\x20npm\x20run\x20task:start\x20TASK-XXX\x0a','\x20\x202.\x20git\x20add\x20<resolved-files>','\x0a❌\x20ERROR:\x20Merge\x20conflict\x20or\x20error\x20merging\x20','\x20\x20\x20Or:\x20npm\x20run\x20task:merge\x20--\x20--phase\x20PHASE-NAME\x0a','2122398vtwMTf','git\x20merge\x20--no-ff\x20','...','constructor','❌\x20ERROR:\x20Already\x20on\x20main\x20branch','.claude/ACTIVE-PLAN','slice','\x20\x20\x20Merging:\x20','\x20\x20\x20🗑️\x20\x20Deleted\x20local\x20branch:\x20','RiLZo','❌\x20ERROR:\x20You\x20have\x20uncommitted\x20changes\x0a','git\x20branch\x20-d\x20','git\x20branch','pipe','skgaj','\x0a❌\x20ERROR:\x20Phase\x20name\x20required','git\x20branch\x20--show-current','(((.+)+)+)+$','\x20not\x20found,\x20skipping','length','PIfLe','RzQNb','forEach','parse','❌\x20ERROR:\x20No\x20tasks\x20found\x20in\x20phase:\x20','tasks','zsSnn','--phase','stdio','Push\x20manually:\x20git\x20push\x20origin\x20','20iwsAmk','existsSync'];_0x4e94=function(){return _0x47d07d;};return _0x4e94();}console['log']('\x0a3.\x20Pulling\x20latest\x20'+t+_0x40272e(0x17c));try{const _0x4002ce={};_0x4002ce['stdio']=_0x40272e(0x130),s(_0x40272e(0x1ac)+t,_0x4002ce);}catch{console[_0x40272e(0x162)](_0x40272e(0x149));}console['log'](_0x40272e(0x1a6));for(let e of i){let n=_0x40272e(0x131)+e['id']+'-'+e[_0x40272e(0x1a5)][_0x40272e(0x169)]()[_0x40272e(0x128)](/\s+/g,'-')['substring'](0x0,0x1e);console[_0x40272e(0x171)](_0x40272e(0x181)+n);try{const _0x463f07={};_0x463f07[_0x40272e(0x135)]=_0x40272e(0x14b);if(!s(_0x40272e(0x186),_0x463f07)[_0x40272e(0x165)](n)){console[_0x40272e(0x162)](_0x40272e(0x13f)+n+_0x40272e(0x18c));continue;}const _0x4979be={};_0x4979be[_0x40272e(0x196)]=_0x40272e(0x130),(s(_0x40272e(0x17b)+n+_0x40272e(0x1aa)+e['id']+':\x20'+e[_0x40272e(0x1a5)]+'\x22',_0x4979be),console[_0x40272e(0x171)]('\x20\x20\x20✅\x20Merged\x20'+e['id']+'\x0a'));}catch{console[_0x40272e(0x145)](_0x40272e(0x178)+e['id']),console[_0x40272e(0x145)]('\x0aResolve\x20conflicts\x20manually:'),console[_0x40272e(0x145)]('\x20\x201.\x20Fix\x20conflicts\x20in\x20files'),console[_0x40272e(0x145)](_0x40272e(0x177)),console['error']('\x20\x203.\x20git\x20commit'),console[_0x40272e(0x145)]('\x20\x204.\x20Continue\x20with:\x20npm\x20run\x20task:merge\x20'+l[_0x40272e(0x156)]('\x20')+'\x0a'),process[_0x40272e(0x150)](0x1);}}console['log'](_0x40272e(0x153));try{const _0xa4c002={};_0xa4c002['stdio']=_0x40272e(0x130),(s(_0x40272e(0x160)+t,_0xa4c002),console['log']('\x0a✅\x20Successfully\x20pushed\x20to\x20remote\x0a'));}catch{console[_0x40272e(0x145)](_0x40272e(0x1ad)),console[_0x40272e(0x145)](_0x40272e(0x197)+t+'\x0a'),process[_0x40272e(0x150)](0x1);}function _0x4b81(_0x320129,_0x17a5d2){_0x320129=_0x320129-0x124;const _0xec39da=_0x4e94();let _0x3b7f57=_0xec39da[_0x320129];return _0x3b7f57;}console['log'](_0x40272e(0x125));for(let e of i){let n='task/'+e['id']+'-'+e['title'][_0x40272e(0x169)]()['replace'](/\s+/g,'-')[_0x40272e(0x157)](0x0,0x1e);try{const _0x417376={};_0x417376[_0x40272e(0x135)]='utf8';if(s(_0x40272e(0x186),_0x417376)[_0x40272e(0x165)](n)){const _0x45266b={};_0x45266b[_0x40272e(0x135)]='utf8',(s(_0x40272e(0x185)+n,_0x45266b),console[_0x40272e(0x171)](_0x40272e(0x182)+n));try{const _0x467b48={};_0x467b48[_0x40272e(0x196)]='pipe',(s('git\x20push\x20origin\x20--delete\x20'+n,_0x467b48),console[_0x40272e(0x171)](_0x40272e(0x132)+n));}catch{console[_0x40272e(0x171)](_0x40272e(0x19c)+n+_0x40272e(0x148));}}}catch{console['warn'](_0x40272e(0x16f)+n);}}console[_0x40272e(0x171)](_0x40272e(0x158)),console[_0x40272e(0x171)]('Merged\x20'+i[_0x40272e(0x18d)]+'\x20task(s)\x20to\x20'+t+':'),i[_0x40272e(0x190)](_0x2512e8=>{const _0x173a9b=_0x40272e;console[_0x173a9b(0x171)](_0x173a9b(0x1a7)+_0x2512e8['id']+':\x20'+_0x2512e8[_0x173a9b(0x1a5)]);}),console['log'](_0x40272e(0x1a2)+t+_0x40272e(0x159)),console[_0x40272e(0x171)](_0x40272e(0x176)),process[_0x40272e(0x150)](0x0);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
#!/usr/bin/env node
|
|
3
|
+
var _0x345db1=_0x43b5;(function(_0x71d8ab,_0x3d95ff){var _0x2216c8=_0x43b5,_0x593747=_0x71d8ab();while(!![]){try{var _0x426a70=parseInt(_0x2216c8(0x1af))/0x1*(-parseInt(_0x2216c8(0x191))/0x2)+-parseInt(_0x2216c8(0x186))/0x3*(-parseInt(_0x2216c8(0x1a0))/0x4)+parseInt(_0x2216c8(0x1b2))/0x5+-parseInt(_0x2216c8(0x199))/0x6*(parseInt(_0x2216c8(0x192))/0x7)+-parseInt(_0x2216c8(0x1a9))/0x8*(-parseInt(_0x2216c8(0x1a8))/0x9)+-parseInt(_0x2216c8(0x18c))/0xa+-parseInt(_0x2216c8(0x1bc))/0xb*(-parseInt(_0x2216c8(0x1aa))/0xc);if(_0x426a70===_0x3d95ff)break;else _0x593747['push'](_0x593747['shift']());}catch(_0x261f38){_0x593747['push'](_0x593747['shift']());}}}(_0x2e49,0x1e2fe));var _0x24b5d7=(function(){var _0x4892d1=_0x43b5,_0x4d0efd={};_0x4d0efd[_0x4892d1(0x196)]='tasks',_0x4d0efd[_0x4892d1(0x18b)]=_0x4892d1(0x1a1),_0x4d0efd[_0x4892d1(0x18d)]=_0x4892d1(0x182);var _0x11ceb7=_0x4d0efd,_0x5a4c4d=!![];return function(_0xa0232b,_0x1d6d19){var _0x1effaf=_0x4892d1;if(_0x11ceb7[_0x1effaf(0x18d)]!==_0x11ceb7[_0x1effaf(0x18d)]){let _0x2d742e=_0x2bf9a6[_0x1effaf(0x18a)](_0x3e6d7e,_0x11ceb7[_0x1effaf(0x196)],_0xcf8248['id']+_0x1effaf(0x179));return _0x51a4e5['existsSync'](_0x2d742e)?_0x15ff34['parse'](_0x426e42[_0x1effaf(0x1a5)](_0x2d742e,_0x11ceb7[_0x1effaf(0x18b)])):null;}else{var _0xa44d44=_0x5a4c4d?function(){var _0x13c9fb=_0x1effaf;if(_0x1d6d19){var _0x323aee=_0x1d6d19[_0x13c9fb(0x1b1)](_0xa0232b,arguments);return _0x1d6d19=null,_0x323aee;}}:function(){};return _0x5a4c4d=![],_0xa44d44;}};}()),_0x355f50=_0x24b5d7(this,function(){var _0x303009=_0x43b5,_0x35d8cb={};_0x35d8cb[_0x303009(0x1ac)]=_0x303009(0x19e);var _0x3d0c70=_0x35d8cb;return _0x355f50[_0x303009(0x194)]()[_0x303009(0x1c1)](_0x3d0c70[_0x303009(0x1ac)])['toString']()[_0x303009(0x18f)](_0x355f50)[_0x303009(0x1c1)](_0x303009(0x19e));});function _0x43b5(_0x23dcc5,_0x3b58ca){_0x23dcc5=_0x23dcc5-0x16f;var _0x1d4ba0=_0x2e49();var _0x355f50=_0x1d4ba0[_0x23dcc5];return _0x355f50;}function _0x2e49(){var _0x2f2bdb=['dependencies','includes','TASK-TRACKER.json','Initialize\x20first:\x20npm\x20run\x20plan:init\x0a','All\x20pending\x20tasks\x20have\x20incomplete\x20dependencies.','\x0aBlocked\x20tasks:','✅\x20Dependencies:\x20','.json','tasks','round','📝\x20','filter','sort','h\x20ago)','\x0a❌\x20Failed\x20to\x20start\x20task\x20','Plan:\x20','uHmot','log','path','completed','105trYaOh','trim','\x20\x20\x20\x20Waiting\x20for:\x20','jtMzL','join','tBkFG','1426530uzukcJ','YslTj','UVzIm','constructor','\x0aComplete\x20it\x20first:\x20npm\x20run\x20task:done\x20','10cKlvnU','257999MCctOH','startedAt','toString','\x0a❌\x20ERROR:\x20Task\x20tracker\x20not\x20found','tNUZp','every','iqexC','6wiIJqJ','WHkNI','\x22\x20is\x20not\x20supported','activeTask','EDscF','(((.+)+)+)+$','\x0a⚠️\x20\x20WARNING:\x20There\x20is\x20already\x20an\x20active\x20task\x0a','14428PxZQBU','utf8','\x0a🚀\x20Starting\x20next\x20available\x20task...\x0a','error','pending','readFileSync','\x0a❌\x20ERROR:\x20No\x20active\x20plan\x20found','map','798282HaIACr','8MRqeLR','4692llEGEd','Check\x20status:\x20npm\x20run\x20task:status\x0a','ccOsC','\x0a🎉\x20No\x20pending\x20tasks!\x20All\x20tasks\x20completed.\x0a','split','21509DkvfRj','length','apply','640575ZZYIlo','status','Set\x20active\x20plan\x20first:\x20npm\x20run\x20plan:manager\x0a','Dynamic\x20require\x20of\x20\x22','exit','title','SAIJt','toLocaleString','\x0a⚠️\x20\x20No\x20tasks\x20available\x20to\x20start\x0a','existsSync','1903lfCYhe','Started:\x20','⏱️\x20\x20Estimated:\x20','Or\x20switch\x20to\x20it:\x20npm\x20run\x20task:start\x20','.claude/plans','search','inherit','forEach','npm\x20run\x20task:start\x20'];_0x2e49=function(){return _0x2f2bdb;};return _0x2e49();}_0x355f50();var c=(_0x52e74e=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x52e74e,{'get':(_0x353a11,_0x5724ec)=>(typeof require<'u'?require:_0x353a11)[_0x5724ec]}):_0x52e74e)(function(_0x31a729){var _0x148608=_0x43b5,_0x5c96d7={};_0x5c96d7['WHkNI']=function(_0x358746,_0x32b717){return _0x358746+_0x32b717;},_0x5c96d7['SAIJt']=function(_0x5a9c57,_0x52cdfc){return _0x5a9c57+_0x52cdfc;},_0x5c96d7[_0x148608(0x189)]=_0x148608(0x1b5),_0x5c96d7[_0x148608(0x198)]=_0x148608(0x19b);var _0x595159=_0x5c96d7;if(typeof require<'u')return require[_0x148608(0x1b1)](this,arguments);throw Error(_0x595159[_0x148608(0x19a)](_0x595159[_0x148608(0x1b8)](_0x595159[_0x148608(0x189)],_0x31a729),_0x595159[_0x148608(0x198)]));}),{execSync:m}=c('child_process'),o=c('fs'),a=c(_0x345db1(0x184)),p='.claude/ACTIVE-PLAN';o[_0x345db1(0x1bb)](p)||(console[_0x345db1(0x1a3)](_0x345db1(0x1a6)),console['error'](_0x345db1(0x1b4)),process[_0x345db1(0x1b6)](0x1));var u=o[_0x345db1(0x1a5)](p,_0x345db1(0x1a1))[_0x345db1(0x187)](),r=a['join'](_0x345db1(0x1c0),u),g=a['join'](r,_0x345db1(0x174));o['existsSync'](g)||(console[_0x345db1(0x1a3)](_0x345db1(0x195)),console[_0x345db1(0x1a3)](_0x345db1(0x181)+u),console[_0x345db1(0x1a3)](_0x345db1(0x175)),process[_0x345db1(0x1b6)](0x1));var i=JSON['parse'](o[_0x345db1(0x1a5)](g,'utf8'));if(i[_0x345db1(0x19c)]){console[_0x345db1(0x183)](_0x345db1(0x19f));let e=a[_0x345db1(0x18a)](r,_0x345db1(0x17a),i[_0x345db1(0x19c)]+_0x345db1(0x179));if(o[_0x345db1(0x1bb)](e)){let n=JSON['parse'](o[_0x345db1(0x1a5)](e,_0x345db1(0x1a1)));if(console['log']('📌\x20Active:\x20'+n['id']+'\x20-\x20'+n[_0x345db1(0x1b7)]),n[_0x345db1(0x193)]){let s=new Date(n[_0x345db1(0x193)]),l=Math[_0x345db1(0x17b)]((new Date()-s)/(0x3e8*0x3c*0x3c)*0xa)/0xa;console[_0x345db1(0x183)](_0x345db1(0x1bd)+s[_0x345db1(0x1b9)]()+'\x20('+l+_0x345db1(0x17f));}console[_0x345db1(0x183)](_0x345db1(0x190)+i['activeTask']),console[_0x345db1(0x183)](_0x345db1(0x1bf)+i[_0x345db1(0x19c)]),console[_0x345db1(0x183)](''),process[_0x345db1(0x1b6)](0x1);}}var d=i['taskFiles'][_0x345db1(0x17d)](_0x290f5c=>_0x290f5c['status']===_0x345db1(0x1a4))[_0x345db1(0x1a7)](_0x342a9d=>{var _0x46f3e3=_0x345db1,_0x3b7233={};_0x3b7233['AXzYe']=_0x46f3e3(0x17a);var _0x384dfe=_0x3b7233;let _0x458317=a[_0x46f3e3(0x18a)](r,_0x384dfe['AXzYe'],_0x342a9d['id']+_0x46f3e3(0x179));return o['existsSync'](_0x458317)?JSON['parse'](o[_0x46f3e3(0x1a5)](_0x458317,_0x46f3e3(0x1a1))):null;})[_0x345db1(0x17d)](_0x27342b=>_0x27342b!==null);d[_0x345db1(0x1b0)]===0x0&&(console[_0x345db1(0x183)](_0x345db1(0x1ad)),console[_0x345db1(0x183)](_0x345db1(0x1ab)),process[_0x345db1(0x1b6)](0x0));var k=i['taskFiles']['filter'](_0x3e1c0e=>_0x3e1c0e[_0x345db1(0x1b3)]===_0x345db1(0x185))[_0x345db1(0x1a7)](_0x328bc2=>_0x328bc2['id']),f=d[_0x345db1(0x17d)](_0x2f7b5c=>!_0x2f7b5c[_0x345db1(0x172)]||_0x2f7b5c['dependencies'][_0x345db1(0x1b0)]===0x0?!0x0:_0x2f7b5c['dependencies'][_0x345db1(0x197)](_0x57dba7=>k['includes'](_0x57dba7)));f[_0x345db1(0x1b0)]===0x0&&(console[_0x345db1(0x183)](_0x345db1(0x1ba)),console[_0x345db1(0x183)](_0x345db1(0x176)),console['log'](_0x345db1(0x177)),d[_0x345db1(0x170)](_0x3cf187=>{var _0x508ebd=_0x345db1,_0x298e23={};_0x298e23['kcCQz']=function(_0x2315c0,_0x2ef351){return _0x2315c0>_0x2ef351;};var _0x4c2e10=_0x298e23;let _0x3d15a8=_0x3cf187[_0x508ebd(0x172)]?.[_0x508ebd(0x17d)](_0xde678b=>!k[_0x508ebd(0x173)](_0xde678b))||[];_0x4c2e10['kcCQz'](_0x3d15a8[_0x508ebd(0x1b0)],0x0)&&(console[_0x508ebd(0x183)]('\x20\x20'+_0x3cf187['id']+':\x20'+_0x3cf187['title']),console[_0x508ebd(0x183)](_0x508ebd(0x188)+_0x3d15a8[_0x508ebd(0x18a)](',\x20')));}),console['log']('\x0aCheck\x20status:\x20npm\x20run\x20task:status\x0a'),process[_0x345db1(0x1b6)](0x1));var t=f[_0x345db1(0x17e)]((_0x54b48e,_0x51f09a)=>{var _0x52c3f3=_0x345db1,_0x4fb82e={'EDscF':function(_0x259f29,_0x43c1ea){return _0x259f29(_0x43c1ea);},'UVzIm':function(_0x593339,_0x1fc94d){return _0x593339-_0x1fc94d;}};let _0x285ca8=_0x4fb82e[_0x52c3f3(0x19d)](parseInt,_0x54b48e['id'][_0x52c3f3(0x1ae)]('-')[0x1]),_0x3c42be=parseInt(_0x51f09a['id'][_0x52c3f3(0x1ae)]('-')[0x1]);return _0x4fb82e[_0x52c3f3(0x18e)](_0x285ca8,_0x3c42be);})[0x0];console['log'](_0x345db1(0x1a2)),console[_0x345db1(0x183)]('📌\x20'+t['id']+':\x20'+t[_0x345db1(0x1b7)]),console[_0x345db1(0x183)](_0x345db1(0x17c)+t['description']),console['log'](_0x345db1(0x1be)+t['estimatedHours']+'h'),t[_0x345db1(0x172)]&&t[_0x345db1(0x172)][_0x345db1(0x1b0)]>0x0&&console[_0x345db1(0x183)](_0x345db1(0x178)+t[_0x345db1(0x172)][_0x345db1(0x18a)](',\x20')+'\x20(completed)'),console['log']('');try{var _0x17c95a={};_0x17c95a['stdio']=_0x345db1(0x16f),m(_0x345db1(0x171)+t['id'],_0x17c95a);}catch{console[_0x345db1(0x1a3)](_0x345db1(0x180)+t['id']),process[_0x345db1(0x1b6)](0x1);}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
#!/usr/bin/env node
|
|
3
|
+
function _0xf011(_0x320b24,_0x2962a2){_0x320b24=_0x320b24-0xf6;var _0x1dffab=_0x19d4();var _0x420b6a=_0x1dffab[_0x320b24];return _0x420b6a;}var _0x15a569=_0xf011;(function(_0x3b6478,_0x548a83){var _0x45ae8f=_0xf011,_0x4627c1=_0x3b6478();while(!![]){try{var _0x521d1b=-parseInt(_0x45ae8f(0x10f))/0x1+parseInt(_0x45ae8f(0xf6))/0x2*(parseInt(_0x45ae8f(0x107))/0x3)+parseInt(_0x45ae8f(0x120))/0x4*(parseInt(_0x45ae8f(0x11d))/0x5)+parseInt(_0x45ae8f(0x11f))/0x6*(parseInt(_0x45ae8f(0xfe))/0x7)+-parseInt(_0x45ae8f(0x114))/0x8*(parseInt(_0x45ae8f(0x10e))/0x9)+parseInt(_0x45ae8f(0xf8))/0xa*(parseInt(_0x45ae8f(0x109))/0xb)+parseInt(_0x45ae8f(0x115))/0xc*(parseInt(_0x45ae8f(0xff))/0xd);if(_0x521d1b===_0x548a83)break;else _0x4627c1['push'](_0x4627c1['shift']());}catch(_0x2772e0){_0x4627c1['push'](_0x4627c1['shift']());}}}(_0x19d4,0x5e7ab));var _0x29d59f=(function(){var _0x223007=!![];return function(_0x24705d,_0x570637){var _0x5c918d=_0x223007?function(){var _0x2e1b6f=_0xf011;if(_0x570637){var _0x345eff=_0x570637[_0x2e1b6f(0x10a)](_0x24705d,arguments);return _0x570637=null,_0x345eff;}}:function(){};return _0x223007=![],_0x5c918d;};}()),_0x420b6a=_0x29d59f(this,function(){var _0x370be9=_0xf011,_0x41bc8b={};_0x41bc8b['WESSx']=_0x370be9(0x116);var _0x3dc929=_0x41bc8b;return _0x420b6a[_0x370be9(0x112)]()[_0x370be9(0x102)](_0x3dc929['WESSx'])[_0x370be9(0x112)]()[_0x370be9(0xfd)](_0x420b6a)['search'](_0x3dc929[_0x370be9(0x10b)]);});_0x420b6a();var s=(_0x3cb2cc=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x3cb2cc,{'get':(_0x1e56f6,_0x269871)=>(typeof require<'u'?require:_0x1e56f6)[_0x269871]}):_0x3cb2cc)(function(_0x5e82f1){var _0x1e638a=_0xf011,_0x25184f={};_0x25184f[_0x1e638a(0xf9)]=function(_0x3928d1,_0x580077){return _0x3928d1+_0x580077;},_0x25184f['qHifV']=_0x1e638a(0x10c),_0x25184f['pfgyn']=_0x1e638a(0xfc);var _0x25fe59=_0x25184f;if(typeof require<'u')return require[_0x1e638a(0x10a)](this,arguments);throw Error(_0x25fe59[_0x1e638a(0xf9)](_0x25fe59[_0x1e638a(0x10d)]+_0x5e82f1,_0x25fe59[_0x1e638a(0x119)]));}),{execSync:t}=s('child_process'),a=s(_0x15a569(0x104)),o=process[_0x15a569(0x118)][0x2];function _0x19d4(){var _0x2cd5b9=['path','node\x20\x22','hooks','87rRYFjv','❌\x20Error:\x20Task\x20ID\x20is\x20required','165946rHSDES','apply','WESSx','Dynamic\x20require\x20of\x20\x22','qHifV','51372teIJEg','697539TXVAuI','When\x20done,\x20run:\x20npm\x20run\x20task:done\x20','start-task.js','toString','🚀\x20Starting\x20task:\x20','136QgVjop','24QJlPRG','(((.+)+)+)+$','exit','argv','pfgyn','\x0aUsage:\x20node\x20scripts/task-start.js\x20TASK-001','inherit','\x20\x20\x20Or:\x20npm\x20run\x20task:start\x20TASK-001','10YiucUr','log','1813434XTZCDo','50936URVPAu','12176spJDar','.claude','100BJFOmi','lwbHQ','stdio','error','\x22\x20is\x20not\x20supported','constructor','14xtUPqG','1457326mNKrQI','\x20is\x20now\x20active!','\x0a✅\x20Task\x20','search','\x0aYou\x20can\x20now\x20work\x20on\x20this\x20task.'];_0x19d4=function(){return _0x2cd5b9;};return _0x19d4();}o||(console[_0x15a569(0xfb)](_0x15a569(0x108)),console[_0x15a569(0xfb)](_0x15a569(0x11a)),console['error'](_0x15a569(0x11c)),process['exit'](0x1));var c=a['join'](__dirname,'..',_0x15a569(0xf7),_0x15a569(0x106),_0x15a569(0x111));console[_0x15a569(0x11e)](_0x15a569(0x113)+o+'\x0a');try{var _0x359664={};_0x359664[_0x15a569(0xfa)]=_0x15a569(0x11b),(t(_0x15a569(0x105)+c+'\x22\x20'+o,_0x359664),console[_0x15a569(0x11e)](_0x15a569(0x101)+o+_0x15a569(0x100)),console['log'](_0x15a569(0x103)),console[_0x15a569(0x11e)](_0x15a569(0x110)+o));}catch{console['error']('\x0a❌\x20Failed\x20to\x20start\x20task\x20'+o),process[_0x15a569(0x117)](0x1);}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
#!/usr/bin/env node
|
|
3
|
+
function _0x1bdb(_0x49435c,_0x48e422){_0x49435c=_0x49435c-0x1a7;var _0x59c7d4=_0x57bc();var _0x1c37eb=_0x59c7d4[_0x49435c];return _0x1c37eb;}var _0xee866b=_0x1bdb;(function(_0x3507e4,_0x5565c9){var _0x1e19ac=_0x1bdb,_0x3f9d59=_0x3507e4();while(!![]){try{var _0x5aae8e=parseInt(_0x1e19ac(0x1c7))/0x1+-parseInt(_0x1e19ac(0x1bf))/0x2*(-parseInt(_0x1e19ac(0x1b7))/0x3)+parseInt(_0x1e19ac(0x1b5))/0x4+parseInt(_0x1e19ac(0x1c2))/0x5+parseInt(_0x1e19ac(0x1ab))/0x6*(-parseInt(_0x1e19ac(0x1b8))/0x7)+-parseInt(_0x1e19ac(0x1c9))/0x8+-parseInt(_0x1e19ac(0x1c0))/0x9;if(_0x5aae8e===_0x5565c9)break;else _0x3f9d59['push'](_0x3f9d59['shift']());}catch(_0x51aa69){_0x3f9d59['push'](_0x3f9d59['shift']());}}}(_0x57bc,0x86c97));var _0xd2aaea=(function(){var _0xcd321d=_0x1bdb,_0x5e884d={'ycrEb':function(_0x14fd27,_0x4bf9f2,_0x381b34){return _0x14fd27(_0x4bf9f2,_0x381b34);},'hTDfW':_0xcd321d(0x1ad),'gLrzq':function(_0x56aa36,_0x5cb369){return _0x56aa36===_0x5cb369;},'BSNDl':_0xcd321d(0x1ac),'lzrOO':_0xcd321d(0x1b4)},_0x1cb9d4=!![];return function(_0x57e8c9,_0x1219d5){var _0x572065=_0xcd321d,_0x263a9f={};_0x263a9f[_0x572065(0x1b6)]=_0x5e884d[_0x572065(0x1cc)];var _0x529ce6=_0x263a9f,_0x15e2d5=_0x1cb9d4?function(){var _0x415395=_0x572065,_0x178458={'JxWJF':function(_0x4817a2,_0x11670b,_0x4f2b7){return _0x5e884d['ycrEb'](_0x4817a2,_0x11670b,_0x4f2b7);},'ZhNUf':_0x5e884d['hTDfW']};if(_0x5e884d[_0x415395(0x1ae)](_0x5e884d[_0x415395(0x1cb)],_0x5e884d['BSNDl'])){if(_0x1219d5){if('tqWwW'===_0x415395(0x1a7)){var _0x142c8f=_0x1219d5[_0x415395(0x1c8)](_0x57e8c9,arguments);return _0x1219d5=null,_0x142c8f;}else return _0x5c265d[_0x415395(0x1b9)]()[_0x415395(0x1c1)]('(((.+)+)+)+$')[_0x415395(0x1b9)]()[_0x415395(0x1b0)](_0x42acd2)[_0x415395(0x1c1)](_0x529ce6[_0x415395(0x1b6)]);}}else _0x178458['JxWJF'](_0x34609a,_0x415395(0x1ca)+_0x164a72+'\x22',{'stdio':_0x178458[_0x415395(0x1cd)]});}:function(){};return _0x1cb9d4=![],_0x15e2d5;};}()),_0x1c37eb=_0xd2aaea(this,function(){var _0x5ce134=_0x1bdb,_0x140a8c={};_0x140a8c[_0x5ce134(0x1a9)]=_0x5ce134(0x1b4);var _0x4a4609=_0x140a8c;return _0x1c37eb[_0x5ce134(0x1b9)]()[_0x5ce134(0x1c1)](_0x4a4609[_0x5ce134(0x1a9)])[_0x5ce134(0x1b9)]()[_0x5ce134(0x1b0)](_0x1c37eb)[_0x5ce134(0x1c1)](_0x4a4609[_0x5ce134(0x1a9)]);});_0x1c37eb();function _0x57bc(){var _0x227658=['.claude','JkQcz','70OyJKTa','10865754krnwKD','search','4462545Pryuqv','fGJuc','XPdlA','\x22\x20is\x20not\x20supported','stdio','274126TRhztr','apply','2436464IDXAwE','node\x20\x22','BSNDl','lzrOO','ZhNUf','FFkaW','tqWwW','error','OtEeH','pZyjV','114RMHztg','qkQlZ','inherit','gLrzq','\x0a❌\x20Failed\x20to\x20get\x20task\x20status','constructor','JQDyC','join','path','(((.+)+)+)+$','1048680tLvmSR','rZGTI','60843rRRiZB','27517XLpQIL','toString','child_process','log','task-status.js'];_0x57bc=function(){return _0x227658;};return _0x57bc();}var o=(_0x5dfb52=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x5dfb52,{'get':(_0x5f3093,_0x42e5f2)=>(typeof require<'u'?require:_0x5f3093)[_0x42e5f2]}):_0x5dfb52)(function(_0x55cc2f){var _0x2a23ca=_0x1bdb,_0x305f9b={'XPdlA':function(_0x54d1fa,_0x62d7fa){return _0x54d1fa<_0x62d7fa;},'JQDyC':function(_0x4c7b31,_0xa5c575){return _0x4c7b31(_0xa5c575);},'pZyjV':function(_0x3a7280,_0x52a475){return _0x3a7280+_0x52a475;},'JkQcz':function(_0x36d9c8,_0x5311c5){return _0x36d9c8+_0x5311c5;},'fGJuc':'Dynamic\x20require\x20of\x20\x22','FFkaW':_0x2a23ca(0x1c5)};if(_0x305f9b[_0x2a23ca(0x1c4)](typeof require,'u'))return require[_0x2a23ca(0x1c8)](this,arguments);throw _0x305f9b[_0x2a23ca(0x1b1)](Error,_0x305f9b[_0x2a23ca(0x1aa)](_0x305f9b[_0x2a23ca(0x1be)](_0x305f9b[_0x2a23ca(0x1c3)],_0x55cc2f),_0x305f9b[_0x2a23ca(0x1ce)]));}),{execSync:r}=o(_0xee866b(0x1ba)),n=o(_0xee866b(0x1b3)),a=n[_0xee866b(0x1b2)](__dirname,'..',_0xee866b(0x1bd),'hooks',_0xee866b(0x1bc));console[_0xee866b(0x1bb)]('📊\x20Task\x20Status\x20Report\x0a');try{var _0xf08922={};_0xf08922[_0xee866b(0x1c6)]=_0xee866b(0x1ad),r(_0xee866b(0x1ca)+a+'\x22',_0xf08922);}catch{console[_0xee866b(0x1a8)](_0xee866b(0x1af)),process['exit'](0x1);}
|
package/lib/init.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Initialization Module
|
|
3
|
+
*
|
|
4
|
+
* Handles copying templates and setting up GL.Life Claude structure
|
|
5
|
+
* in target project directory
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { mkdirSync, cpSync, readFileSync, writeFileSync } from 'fs';
|
|
9
|
+
import { join, dirname } from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { execSync } from 'child_process';
|
|
12
|
+
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = dirname(__filename);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Initialize a new project with GL.Life Claude framework
|
|
18
|
+
*
|
|
19
|
+
* @param {string} projectName - Name of the project
|
|
20
|
+
* @param {string} targetDir - Target directory path
|
|
21
|
+
* @param {Object} options - Configuration options
|
|
22
|
+
* @param {boolean} options.initGit - Initialize git repository
|
|
23
|
+
* @param {boolean} options.installDeps - Install npm dependencies
|
|
24
|
+
*/
|
|
25
|
+
export async function initializeProject(projectName, targetDir, options = {}) {
|
|
26
|
+
const { initGit = true, installDeps = true } = options;
|
|
27
|
+
|
|
28
|
+
console.log('📦 Creating project directory...');
|
|
29
|
+
mkdirSync(targetDir, { recursive: true });
|
|
30
|
+
|
|
31
|
+
// Get templates directory path
|
|
32
|
+
const templatesDir = join(__dirname, '..', 'templates');
|
|
33
|
+
|
|
34
|
+
console.log('📋 Copying framework templates...');
|
|
35
|
+
|
|
36
|
+
// Copy .claude directory structure
|
|
37
|
+
console.log(' ├─ .claude/');
|
|
38
|
+
cpSync(
|
|
39
|
+
join(templatesDir, '.claude'),
|
|
40
|
+
join(targetDir, '.claude'),
|
|
41
|
+
{ recursive: true }
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
// Copy package.json template and replace PROJECT_NAME
|
|
45
|
+
console.log(' ├─ package.json');
|
|
46
|
+
const packageTemplate = readFileSync(join(templatesDir, 'package.json'), 'utf8');
|
|
47
|
+
const packageJson = packageTemplate.replace(/\{\{PROJECT_NAME\}\}/g, projectName);
|
|
48
|
+
writeFileSync(join(targetDir, 'package.json'), packageJson);
|
|
49
|
+
|
|
50
|
+
// Copy README template and replace PROJECT_NAME
|
|
51
|
+
console.log(' ├─ README.md');
|
|
52
|
+
const readmeTemplate = readFileSync(join(templatesDir, 'README.md'), 'utf8');
|
|
53
|
+
const readme = readmeTemplate.replace(/\{\{PROJECT_NAME\}\}/g, projectName);
|
|
54
|
+
writeFileSync(join(targetDir, 'README.md'), readme);
|
|
55
|
+
|
|
56
|
+
// Copy .gitignore
|
|
57
|
+
console.log(' └─ .gitignore');
|
|
58
|
+
cpSync(
|
|
59
|
+
join(templatesDir, '.gitignore'),
|
|
60
|
+
join(targetDir, '.gitignore')
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
console.log('✅ Framework structure created');
|
|
64
|
+
console.log('✅ Templates copied');
|
|
65
|
+
console.log('✅ Configuration files generated');
|
|
66
|
+
|
|
67
|
+
// Create node_modules/.gl-life-claude directory for bundled scripts/hooks
|
|
68
|
+
const bundleDir = join(targetDir, 'node_modules', '.gl-life-claude');
|
|
69
|
+
console.log('\n📦 Setting up bundled scripts and hooks...');
|
|
70
|
+
mkdirSync(bundleDir, { recursive: true });
|
|
71
|
+
|
|
72
|
+
// Copy bundled scripts
|
|
73
|
+
console.log(' ├─ scripts/');
|
|
74
|
+
const bundledScriptsDir = join(__dirname, '..', 'dist', 'scripts');
|
|
75
|
+
cpSync(bundledScriptsDir, join(bundleDir, 'scripts'), { recursive: true });
|
|
76
|
+
|
|
77
|
+
// Copy bundled hooks
|
|
78
|
+
console.log(' └─ hooks/');
|
|
79
|
+
const bundledHooksDir = join(__dirname, '..', 'dist', 'hooks');
|
|
80
|
+
cpSync(bundledHooksDir, join(bundleDir, 'hooks'), { recursive: true });
|
|
81
|
+
|
|
82
|
+
console.log('✅ Bundled files extracted');
|
|
83
|
+
|
|
84
|
+
// Initialize git repository
|
|
85
|
+
if (initGit) {
|
|
86
|
+
console.log('\n🔧 Initializing git repository...');
|
|
87
|
+
try {
|
|
88
|
+
execSync('git init', { cwd: targetDir, stdio: 'ignore' });
|
|
89
|
+
execSync('git add .', { cwd: targetDir, stdio: 'ignore' });
|
|
90
|
+
execSync('git commit -m "Initial commit: GL.Life Claude framework"', {
|
|
91
|
+
cwd: targetDir,
|
|
92
|
+
stdio: 'ignore'
|
|
93
|
+
});
|
|
94
|
+
console.log('✅ Git repository initialized');
|
|
95
|
+
} catch (error) {
|
|
96
|
+
console.log('⚠️ Warning: Git initialization failed');
|
|
97
|
+
console.log(' You can initialize manually with: git init');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Install npm dependencies
|
|
102
|
+
if (installDeps) {
|
|
103
|
+
console.log('\n📦 Installing dependencies...');
|
|
104
|
+
console.log(' This may take a minute...');
|
|
105
|
+
try {
|
|
106
|
+
execSync('npm install', { cwd: targetDir, stdio: 'inherit' });
|
|
107
|
+
console.log('✅ Dependencies installed');
|
|
108
|
+
} catch (error) {
|
|
109
|
+
console.log('⚠️ Warning: npm install failed');
|
|
110
|
+
console.log(' You can install manually with: npm install');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gl-life-claude-zen",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "NPM package for initializing projects with Claude Code enforcement framework",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"create-gl-life-claude": "./bin/create-gl-life-claude.js"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "node esbuild.config.js",
|
|
12
|
+
"test": "node test/bundle-protection.test.js && node test/integration.test.js",
|
|
13
|
+
"prepublishOnly": "npm run build"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"claude-code",
|
|
17
|
+
"project-scaffold",
|
|
18
|
+
"workflow",
|
|
19
|
+
"enforcement",
|
|
20
|
+
"task-tracking",
|
|
21
|
+
"development-framework"
|
|
22
|
+
],
|
|
23
|
+
"author": "GL.Life",
|
|
24
|
+
"license": "Apache-2.0",
|
|
25
|
+
"files": [
|
|
26
|
+
"bin/",
|
|
27
|
+
"lib/",
|
|
28
|
+
"dist/",
|
|
29
|
+
"templates/",
|
|
30
|
+
"README.md",
|
|
31
|
+
"CHANGELOG.md",
|
|
32
|
+
"LICENSE"
|
|
33
|
+
],
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=18.0.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"esbuild": "^0.20.0",
|
|
39
|
+
"javascript-obfuscator": "^5.1.0"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Structured Coding Project
|
|
2
|
+
|
|
3
|
+
## Communication Protocol
|
|
4
|
+
- Keep responses under 10 lines (brief summaries only)
|
|
5
|
+
- If user asks specific question, answer ONLY that question
|
|
6
|
+
- No examples, walls of text, or comprehensive explanations unless requested
|
|
7
|
+
- Ask "want details?" if answer requires more than 10 lines
|
|
8
|
+
- If making in-memory promise/correction, state: "IN MEMORY: WILL BE LOST ON CONTEXT CHANGE"
|
|
9
|
+
|
|
10
|
+
## Your Job
|
|
11
|
+
Write source code and tests. Run them. Fix them. That's it.
|
|
12
|
+
|
|
13
|
+
## What You Can Do
|
|
14
|
+
- Read any file (full codebase visibility)
|
|
15
|
+
- Modify files in `./Agent/` directory (all source, tests, migrations, db)
|
|
16
|
+
- Modify files in `./scripts/` directory (server scripts, utilities)
|
|
17
|
+
- Run npm scripts (build, test, lint)
|
|
18
|
+
- Create feature branches
|
|
19
|
+
- Commit and push to feature branches
|
|
20
|
+
|
|
21
|
+
## What You Cannot Do (Hard Blocked)
|
|
22
|
+
- Modify ANY files outside `./Agent/` and `./scripts/` directories (BLOCKED)
|
|
23
|
+
- Execute scripts in `./scripts/` or `./Agent/db/` (BLOCKED - human executes only)
|
|
24
|
+
- Modify documentation files (.md files in `./docs/` are DENIED)
|
|
25
|
+
- EDIT project plans once created (can Write initial plan, but Edit is BLOCKED)
|
|
26
|
+
- EDIT project plans once locked (hooks enforce immutability after lock)
|
|
27
|
+
- Modify .env or config files without asking
|
|
28
|
+
- Edit existing migration files (migrations are immutable once created)
|
|
29
|
+
- Run database CLI commands directly (psql, mysql, mongosh DENIED)
|
|
30
|
+
- Write code without an active task (task tracker enforced)
|
|
31
|
+
- Commit to main branch
|
|
32
|
+
- Force push
|
|
33
|
+
- Install dependencies without asking
|
|
34
|
+
- Access external networks (curl, wget DENIED)
|
|
35
|
+
|
|
36
|
+
## Git Workflow (Hard Enforced by Hooks)
|
|
37
|
+
1. Create feature branch: `git checkout -b feature/description`
|
|
38
|
+
2. Write code
|
|
39
|
+
3. Run tests
|
|
40
|
+
4. Commit: `git add . && git commit -m "message"`
|
|
41
|
+
5. Push: `git push -u origin feature/description`
|
|
42
|
+
6. Create PR (manual or via GitHub CLI)
|
|
43
|
+
|
|
44
|
+
Branch naming is ENFORCED:
|
|
45
|
+
- `feature/` for new features
|
|
46
|
+
- `bugfix/` for bug fixes
|
|
47
|
+
- `hotfix/` for critical fixes
|
|
48
|
+
|
|
49
|
+
## Before Every Commit (Hard Enforced)
|
|
50
|
+
- Tests MUST pass (validated by hooks)
|
|
51
|
+
- Tests MUST contain real assertions (validated by hooks)
|
|
52
|
+
- Tests MUST NOT be empty/fake (validated by hooks)
|
|
53
|
+
- Code MUST be formatted (auto-formatted by hooks)
|
|
54
|
+
- Branch MUST follow naming convention (validated by hooks)
|
|
55
|
+
|
|
56
|
+
## Commands Available
|
|
57
|
+
- `/commit-commands:commit` - Stage and commit
|
|
58
|
+
- `/commit-commands:commit-push-pr` - Commit, push, create PR
|
|
59
|
+
- `/commit-commands:clean_gone` - Clean deleted branches
|
|
60
|
+
|
|
61
|
+
## Architecture
|
|
62
|
+
All source code and tests are in `./Agent/` directory.
|
|
63
|
+
|
|
64
|
+
**Agent Directory Structure:**
|
|
65
|
+
- `./Agent/src/` - Source code
|
|
66
|
+
- `./Agent/tests/` - Test files
|
|
67
|
+
- `./Agent/spec/` - Spec files (if using spec-based testing)
|
|
68
|
+
- `./Agent/migrations/` - Database migration files (immutable once created)
|
|
69
|
+
- `./Agent/db/` - Database scripts (Claude writes, human executes)
|
|
70
|
+
- `./Agent/prisma/` - Prisma schema and migrations (if using Prisma)
|
|
71
|
+
|
|
72
|
+
**Scripts Directory:**
|
|
73
|
+
- `./scripts/` - Server startup scripts, utilities, deployment scripts
|
|
74
|
+
- Claude can READ/WRITE scripts
|
|
75
|
+
- Human EXECUTES scripts (Claude cannot run node ./scripts/** or bash ./scripts/**)
|
|
76
|
+
|
|
77
|
+
## Critical Rules (Enforced by Hooks)
|
|
78
|
+
- NEVER work from memory - always read files first
|
|
79
|
+
- NEVER duplicate code - check existing implementations
|
|
80
|
+
- NEVER write fake/empty tests - hooks will block them
|
|
81
|
+
- NEVER write tests without assertions - hooks will block them
|
|
82
|
+
- NEVER skip failing tests - hooks will block commits
|
|
83
|
+
- NEVER create .md files - permission system blocks them
|
|
84
|
+
|
|
85
|
+
## How Hooks Protect You
|
|
86
|
+
- PreToolUse hook validates git workflow before execution
|
|
87
|
+
- PostToolUse hook auto-formats code after edits
|
|
88
|
+
- PostToolUse hook validates test quality (blocks fake tests)
|
|
89
|
+
- PostToolUse hook validates UI component tests (blocks API-only tests)
|
|
90
|
+
- PostToolUse hook validates database changes (blocks direct schema edits)
|
|
91
|
+
- PostToolUse hook analyzes migration impact (warns about breaking changes)
|
|
92
|
+
- PostToolUse hook validates test results (blocks failures)
|
|
93
|
+
- PostToolUse hook enforces test pyramid (warns on missing UI tests)
|
|
94
|
+
- PostToolUse hook enforces migration workflow (blocks unsafe migrations)
|
|
95
|
+
- SessionStart hook reminds you of current context
|
|
96
|
+
- Permission system blocks dangerous operations
|
|
97
|
+
|
|
98
|
+
## UI Testing Requirements (Hard Enforced)
|
|
99
|
+
When modifying UI components (.tsx, .jsx, .vue, .svelte):
|
|
100
|
+
- Component test file MUST exist
|
|
101
|
+
- Test MUST import and render the component
|
|
102
|
+
- Test MUST provide required props
|
|
103
|
+
- Test MUST simulate user events (clicks, inputs)
|
|
104
|
+
- Test MUST mock API calls if component uses them
|
|
105
|
+
- Test MUST validate state changes if component has state
|
|
106
|
+
- E2E tests REQUIRED for multi-component user flows
|
|
107
|
+
|
|
108
|
+
## Database Migration Requirements (Hard Enforced)
|
|
109
|
+
Database changes MUST follow migration workflow:
|
|
110
|
+
- WRITE migration files in `./Agent/migrations/` or `./Agent/prisma/migrations/`
|
|
111
|
+
- WRITE database scripts in `./Agent/db/` (setup, seed, backup scripts)
|
|
112
|
+
- NEVER edit existing migrations (migrations are immutable once created)
|
|
113
|
+
- NEVER run database CLI (psql, mysql, mongosh BLOCKED)
|
|
114
|
+
- NEVER execute scripts (node ./Agent/db/** is BLOCKED)
|
|
115
|
+
- Human executes database scripts, Claude only writes them
|
|
116
|
+
- ALWAYS create new migration scripts:
|
|
117
|
+
- TypeORM: npm run migration:generate -- -n YourChange
|
|
118
|
+
- Prisma: npx prisma migrate dev --name your-change
|
|
119
|
+
- Sequelize: npx sequelize-cli migration:generate --name your-change
|
|
120
|
+
- ALWAYS update code/tests affected by schema changes
|
|
121
|
+
- ALWAYS run tests after migrations to verify compatibility
|
|
122
|
+
- Breaking changes (DROP/RENAME) require updating ALL affected code first
|
|
123
|
+
|
|
124
|
+
## Structured Development Workflow (Hard Enforced)
|
|
125
|
+
|
|
126
|
+
### Phase 1: Planning (Before Lock - Agent Creates Plan)
|
|
127
|
+
**Human Role:**
|
|
128
|
+
1. Provide requirements: features, goals, constraints, acceptance criteria
|
|
129
|
+
2. Review agent's proposed plan
|
|
130
|
+
3. Request changes or approve plan
|
|
131
|
+
4. Lock the plan when satisfied: `npm run plan:init`
|
|
132
|
+
|
|
133
|
+
**Agent Role:**
|
|
134
|
+
1. Analyze human requirements
|
|
135
|
+
2. Create PROJECT-PLAN.json in `.claude/plans/PLAN-ID/`
|
|
136
|
+
- Choose structure: Flat or Hierarchical (Project → Subproject → Milestone → Task)
|
|
137
|
+
- Break down work into tasks with IDs: TASK-001, TASK-002, etc.
|
|
138
|
+
- Assign phases: design, implementation, testing, deployment
|
|
139
|
+
- Estimate hours and define dependencies
|
|
140
|
+
3. Present plan to human for review (summary + full breakdown)
|
|
141
|
+
4. Revise plan based on human feedback (iterate until approved)
|
|
142
|
+
5. DO NOT lock the plan - only human can lock
|
|
143
|
+
|
|
144
|
+
**Key Point:** Agent creates and refines the plan. Human reviews, requests changes, and approves/locks.
|
|
145
|
+
|
|
146
|
+
### Phase 2: Lock the Plan (One-Time Action by Human)
|
|
147
|
+
1. Human runs: `npm run plan:init`
|
|
148
|
+
2. System generates:
|
|
149
|
+
- `.claude/plans/PLAN-ID/TASK-TRACKER.json` (tracks task states)
|
|
150
|
+
- `.claude/plans/PLAN-ID/tasks/TASK-XXX.json` (individual task files)
|
|
151
|
+
- `.claude/plans/PLAN-ID/.plan-locked` (immutability marker)
|
|
152
|
+
3. Plan becomes IMMUTABLE (cannot be edited directly by anyone)
|
|
153
|
+
4. Amendments require tool: `npm run plan:amend` (creates audit trail)
|
|
154
|
+
|
|
155
|
+
### Phase 3: Execution (After Lock - Immutable Plan)
|
|
156
|
+
**Human Role:**
|
|
157
|
+
1. Start a task: `npm run task:start TASK-001`
|
|
158
|
+
2. Monitor progress: `npm run task:status`
|
|
159
|
+
3. Complete task: `npm run task:done TASK-001`
|
|
160
|
+
4. Request amendments if needed: `npm run plan:amend`
|
|
161
|
+
|
|
162
|
+
**Agent Role:**
|
|
163
|
+
1. Create feature branch when task starts (REQUIRED)
|
|
164
|
+
2. Write code in `Agent/` directory (blocked if no active task)
|
|
165
|
+
3. Run tests and fix issues
|
|
166
|
+
4. Commit changes frequently with task ID reference (REQUIRED)
|
|
167
|
+
5. When task complete, ensure all changes committed
|
|
168
|
+
6. Make amendments via tool when human requests
|
|
169
|
+
|
|
170
|
+
**Git Workflow (HARD ENFORCED):**
|
|
171
|
+
1. **Before ANY code changes:** Create feature branch `task/TASK-XXX-description`
|
|
172
|
+
2. **During development:** Commit regularly with descriptive messages
|
|
173
|
+
3. **Commit message format:** `[TASK-XXX] Description of changes`
|
|
174
|
+
4. **When task done:** All changes must be committed before marking complete
|
|
175
|
+
5. **Never commit to main** - always work on feature branches
|
|
176
|
+
6. **Merge to main:** After task(s) complete, use `npm run task:merge TASK-XXX` or `npm run task:merge -- --phase PHASE-NAME`
|
|
177
|
+
- Merges completed task(s) to main branch
|
|
178
|
+
- Validates all tasks are completed and committed
|
|
179
|
+
- Automatically cleans up merged branches
|
|
180
|
+
- Preserves branch history with --no-ff merge
|
|
181
|
+
|
|
182
|
+
**System Role:**
|
|
183
|
+
1. Enforce active task requirement (hard block)
|
|
184
|
+
2. Validate dependencies before task start
|
|
185
|
+
3. Track time and progress automatically
|
|
186
|
+
4. Log all amendments with timestamp and reason
|
|
187
|
+
|
|
188
|
+
### Task Tracking Rules (Hard Enforced):
|
|
189
|
+
- ONE task active at a time (system enforced)
|
|
190
|
+
- Code changes in `Agent/` require active task (hook blocks Write/Edit)
|
|
191
|
+
- Commit messages should reference task ID (recommended)
|
|
192
|
+
- Tasks cannot be restarted once completed (system enforced)
|
|
193
|
+
- Dependencies must be completed first (HARD BLOCK - system checks on task:start)
|
|
194
|
+
- **Sequence validation:** Warns if skipping earlier tasks in same phase (5-second delay to cancel)
|
|
195
|
+
- **Phase order validation:** Warns if starting later phase with incomplete earlier phases (5-second delay to cancel)
|
|
196
|
+
- Progress tracked automatically in TASK-TRACKER.json
|
|
197
|
+
- Plan IMMUTABLE once locked - amendments only via tool with audit trail
|
|
198
|
+
- Active plan tracked in `.claude/ACTIVE-PLAN` file
|
|
199
|
+
|
|
200
|
+
## Token Optimization
|
|
201
|
+
- Prompt caching enabled
|
|
202
|
+
- Output limited to 8192 tokens
|
|
203
|
+
- Non-essential model calls disabled
|
|
204
|
+
- Context loaded only when needed
|