@ranger-testing/ranger-cli 1.0.14 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +87 -324
- package/build/cli.js +76 -64
- package/build/cli.js.map +1 -1
- package/build/commands/addEnv.js +1 -1
- package/build/commands/addEnv.js.map +1 -1
- package/build/commands/clean.js +1 -1
- package/build/commands/clean.js.map +1 -1
- package/build/commands/dataMcpServer.js +1 -1
- package/build/commands/feature.js +94 -34
- package/build/commands/feature.js.map +1 -1
- package/build/commands/hook.js +28 -0
- package/build/commands/hook.js.map +1 -0
- package/build/commands/hooks/disable.js +30 -0
- package/build/commands/hooks/disable.js.map +1 -0
- package/build/commands/hooks/enable.js +48 -0
- package/build/commands/hooks/enable.js.map +1 -0
- package/build/commands/hooks/exitPlanMode.js +35 -0
- package/build/commands/hooks/exitPlanMode.js.map +1 -0
- package/build/commands/hooks/index.js +11 -0
- package/build/commands/hooks/index.js.map +1 -0
- package/build/commands/hooks/output.js +53 -0
- package/build/commands/hooks/output.js.map +1 -0
- package/build/commands/hooks/planReminder.js +46 -0
- package/build/commands/hooks/planReminder.js.map +1 -0
- package/build/commands/hooks/planStart.js +30 -0
- package/build/commands/hooks/planStart.js.map +1 -0
- package/build/commands/hooks/postEdit.js +43 -0
- package/build/commands/hooks/postEdit.js.map +1 -0
- package/build/commands/hooks/preCompact.js +30 -0
- package/build/commands/hooks/preCompact.js.map +1 -0
- package/build/commands/hooks/sessionEnd.js +21 -0
- package/build/commands/hooks/sessionEnd.js.map +1 -0
- package/build/commands/hooks/sessionStart.js +75 -0
- package/build/commands/hooks/sessionStart.js.map +1 -0
- package/build/commands/hooks/stopHook.js +54 -0
- package/build/commands/hooks/stopHook.js.map +1 -0
- package/build/commands/index.js +1 -3
- package/build/commands/index.js.map +1 -1
- package/build/commands/skillup.js +36 -70
- package/build/commands/skillup.js.map +1 -1
- package/build/commands/start.js +1 -1
- package/build/commands/start.js.map +1 -1
- package/build/commands/status.js +17 -21
- package/build/commands/status.js.map +1 -1
- package/build/commands/updateEnv.js +1 -1
- package/build/commands/updateEnv.js.map +1 -1
- package/build/commands/useEnv.js +1 -1
- package/build/commands/utils/browserSessionsApi.js +1 -1
- package/build/commands/utils/claudePlugin.js +85 -0
- package/build/commands/utils/claudePlugin.js.map +1 -0
- package/build/commands/utils/cliSecret.js +1 -1
- package/build/commands/utils/desirePathLog.js +133 -0
- package/build/commands/utils/desirePathLog.js.map +1 -0
- package/build/commands/utils/featureApi.js +23 -0
- package/build/commands/utils/featureApi.js.map +1 -1
- package/build/commands/utils/git.js +44 -0
- package/build/commands/utils/git.js.map +1 -0
- package/build/commands/utils/keychain.js +1 -1
- package/build/commands/utils/localAgentInstallationsApi.js +1 -1
- package/build/commands/utils/sessionCache.js +282 -0
- package/build/commands/utils/sessionCache.js.map +1 -0
- package/build/commands/utils/skillContent.js +3 -3
- package/build/commands/utils/skillContent.js.map +1 -1
- package/build/commands/utils/skills.js +1 -1
- package/build/commands/utils/skills.js.map +1 -1
- package/build/commands/verifyFeature.js +32 -3
- package/build/commands/verifyFeature.js.map +1 -1
- package/build/commands/verifyInBrowser.js +1 -1
- package/build/skills/ranger/SKILL.md +170 -0
- package/build/skills/ranger/create.md +151 -0
- package/build/skills/ranger/start.md +122 -0
- package/build/skills/{feature-tracker → ranger}/verify.md +48 -3
- package/package.json +2 -3
- package/build/commands/postEditHook.js +0 -25
- package/build/commands/postEditHook.js.map +0 -1
- package/build/commands/preCompactHook.js +0 -85
- package/build/commands/preCompactHook.js.map +0 -1
- package/build/commands/sessionStartHook.js +0 -64
- package/build/commands/sessionStartHook.js.map +0 -1
- package/build/commands/utils/mcpConfig.js +0 -1
- package/build/commands/utils/mcpConfig.js.map +0 -1
- package/build/skills/feature-tracker/SKILL.md +0 -163
- package/build/skills/feature-tracker/create.md +0 -114
- package/build/skills/feature-tracker/report.md +0 -159
- package/build/skills/feature-tracker/start.md +0 -93
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/commands/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOzC;;GAEG;AACH,MAAM,UAAU,YAAY;IACxB,IAAI,CAAC;QACD,OAAO,QAAQ,CAAC,iCAAiC,EAAE;YAC/C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IACzB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,2BAA2B,EAAE;YACjD,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,sEAAsE;QACtE,OAAO,MAAM;aACR,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,OAAO,CAAC,mBAAmB,EAAE,aAAa,CAAC;aAC3C,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACtB,OAAO;QACH,MAAM,EAAE,YAAY,EAAE;QACtB,OAAO,EAAE,aAAa,EAAE;KAC3B,CAAC;AACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0x16b339=_0x1a7d;(function(_0x2ea4cd,_0x14d17e){const _0xb4dcc3=_0x1a7d,_0x54c8e5=_0x2ea4cd();while(!![]){try{const _0x1f266e=parseInt(_0xb4dcc3(0xa0))/0x1+-parseInt(_0xb4dcc3(0xaa))/0x2+parseInt(_0xb4dcc3(0x94))/0x3*(parseInt(_0xb4dcc3(0xa7))/0x4)+parseInt(_0xb4dcc3(0x8f))/0x5+parseInt(_0xb4dcc3(0x8e))/0x6*(parseInt(_0xb4dcc3(0x9e))/0x7)+-parseInt(_0xb4dcc3(0xa1))/0x8+-parseInt(_0xb4dcc3(0x98))/0x9*(parseInt(_0xb4dcc3(0x97))/0xa);if(_0x1f266e===_0x14d17e)break;else _0x54c8e5['push'](_0x54c8e5['shift']());}catch(_0x3003e2){_0x54c8e5['push'](_0x54c8e5['shift']());}}}(_0x45c6,0x7f382));const _0x3cc7c3=(function(){let _0x815489=!![];return function(_0x858d7c,_0x56f22c){const _0x12c459=_0x815489?function(){if(_0x56f22c){const _0x16ca29=_0x56f22c['apply'](_0x858d7c,arguments);return _0x56f22c=null,_0x16ca29;}}:function(){};return _0x815489=![],_0x12c459;};}()),_0x511b52=_0x3cc7c3(this,function(){const _0x2a3815=_0x1a7d,_0xb1b9c7={'JbmKD':_0x2a3815(0xab)};return _0x511b52[_0x2a3815(0x90)]()[_0x2a3815(0x96)](_0xb1b9c7[_0x2a3815(0x95)])[_0x2a3815(0x90)]()[_0x2a3815(0x99)](_0x511b52)['search'](_0xb1b9c7[_0x2a3815(0x95)]);});_0x511b52();function _0x45c6(){const _0x3f0d60=['yxbWBhK','oduYDKzPrKf4','ndqYmtCWmej3Axbhtq','Dg9tDhjPBMC','yxbPlxrVA2vU','tgH6rxm','v1HHsfe','mtu2owjwAujwrq','sMjTs0q','C2vHCMnO','mti4odiYntbhr0PIAxe','ouTjCeXHsq','y29UC3rYDwn0B3i','ALHjrNm','zgvSzxrLugfZC3DVCMq','D3vcBe0','CMfUz2vYlwnSAq','mZG4mZzSzKHcB0G','rwPpBgC','odmZnZqWDu9zq1PR','nZC2nta4ohruwfLOzW','uKfor0vsx01duf9ut0TftG','BgPKwNG','C2v0ugfZC3DVCMq','BufTtxu','zw52','ndG5mK9yrKLjvq','r0Lusfvcx0vovG','z2v0ugfZC3DVCMq','nZmXmtq4CMvZvMrO','kcGOlISPkYKRksSK'];_0x45c6=function(){return _0x3f0d60;};return _0x45c6();}import _0x5933b5 from'keytar';import{appendFile}from'fs/promises';const SERVICE_NAME=_0x16b339(0x9d),ACCOUNT_TOKEN=_0x16b339(0x91),ENV_TOKEN=_0x16b339(0xa2);function isGitHubCI(){const _0x4feb7b=_0x16b339;return!!process[_0x4feb7b(0xa6)][_0x4feb7b(0xa8)];}function _0x1a7d(_0x3a41ba,_0x41b51e){_0x3a41ba=_0x3a41ba-0x8d;const _0x4dc7ae=_0x45c6();let _0x511b52=_0x4dc7ae[_0x3a41ba];if(_0x1a7d['UMaCHd']===undefined){var _0x3cc7c3=function(_0x4cab1c){const _0x4b7d68='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1d456f='',_0x31cfea='',_0x3afd22=_0x1d456f+_0x3cc7c3;for(let _0x442466=0x0,_0x5d4ad0,_0x376d34,_0x2943cd=0x0;_0x376d34=_0x4cab1c['charAt'](_0x2943cd++);~_0x376d34&&(_0x5d4ad0=_0x442466%0x4?_0x5d4ad0*0x40+_0x376d34:_0x376d34,_0x442466++%0x4)?_0x1d456f+=_0x3afd22['charCodeAt'](_0x2943cd+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x5d4ad0>>(-0x2*_0x442466&0x6)):_0x442466:0x0){_0x376d34=_0x4b7d68['indexOf'](_0x376d34);}for(let _0x417e15=0x0,_0x220774=_0x1d456f['length'];_0x417e15<_0x220774;_0x417e15++){_0x31cfea+='%'+('00'+_0x1d456f['charCodeAt'](_0x417e15)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x31cfea);};_0x1a7d['yZEiQs']=_0x3cc7c3,_0x1a7d['sPHEEZ']={},_0x1a7d['UMaCHd']=!![];}const _0x45c6b1=_0x4dc7ae[0x0],_0x1a7daa=_0x3a41ba+_0x45c6b1,_0x448aba=_0x1a7d['sPHEEZ'][_0x1a7daa];if(!_0x448aba){const _0x41cb76=function(_0x584020){this['erCwfX']=_0x584020,this['YglveY']=[0x1,0x0,0x0],this['aJoTjr']=function(){return'newState';},this['ftrNrP']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['NBqsNz']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x41cb76['prototype']['MMqqeQ']=function(){const _0x7218b2=new RegExp(this['ftrNrP']+this['NBqsNz']),_0x440bd8=_0x7218b2['test'](this['aJoTjr']['toString']())?--this['YglveY'][0x1]:--this['YglveY'][0x0];return this['hRFFaN'](_0x440bd8);},_0x41cb76['prototype']['hRFFaN']=function(_0x160a9e){if(!Boolean(~_0x160a9e))return _0x160a9e;return this['DcmcJi'](this['erCwfX']);},_0x41cb76['prototype']['DcmcJi']=function(_0x1218d3){for(let _0x15a829=0x0,_0x17c976=this['YglveY']['length'];_0x15a829<_0x17c976;_0x15a829++){this['YglveY']['push'](Math['round'](Math['random']())),_0x17c976=this['YglveY']['length'];}return _0x1218d3(this['YglveY'][0x0]);},new _0x41cb76(_0x1a7d)['MMqqeQ'](),_0x511b52=_0x1a7d['yZEiQs'](_0x511b52),_0x1a7d['sPHEEZ'][_0x1a7daa]=_0x511b52;}else _0x511b52=_0x448aba;return _0x511b52;}async function writeToGitHubEnv(_0x122f82,_0x4d7f6b){const _0x2c7c42=_0x16b339,_0x4ae581={'SroZN':function(_0x32e0d5,_0x2cd955){return _0x32e0d5===_0x2cd955;},'jXIFs':_0x2c7c42(0x92),'wuBlM':'zXqNP'},_0x904f18=process[_0x2c7c42(0xa6)][_0x2c7c42(0xa8)];if(_0x904f18){if(_0x4ae581['SroZN'](_0x4ae581[_0x2c7c42(0x9a)],_0x4ae581[_0x2c7c42(0x9c)]))return!!_0x54280f['env']['GITHUB_ENV'];else await appendFile(_0x904f18,_0x122f82+'='+_0x4d7f6b+'\x0a');}}export async function storeToken(_0x446b23){const _0x2ca23d=_0x16b339,_0xe4d529={'mAmMu':function(_0x1626a6){return _0x1626a6();},'WXaHQ':function(_0xe17d4b,_0x236979,_0x26ab91){return _0xe17d4b(_0x236979,_0x26ab91);},'ljdZx':_0x2ca23d(0x9f)};if(_0xe4d529[_0x2ca23d(0xa5)](isGitHubCI))await _0xe4d529[_0x2ca23d(0x93)](writeToGitHubEnv,ENV_TOKEN,_0x446b23);else{if(_0xe4d529[_0x2ca23d(0xa3)]===_0xe4d529[_0x2ca23d(0xa3)])await _0x5933b5[_0x2ca23d(0xa4)](SERVICE_NAME,ACCOUNT_TOKEN,_0x446b23);else{const _0x5b8e8f=_0x41cb76?function(){const _0x31326d=_0x2ca23d;if(_0x15a829){const _0x54c3d3=_0x53ba89[_0x31326d(0x8d)](_0x267407,arguments);return _0x3218a8=null,_0x54c3d3;}}:function(){};return _0x1218d3=![],_0x5b8e8f;}}}export async function getToken(){const _0x3d6200=_0x16b339;if(process[_0x3d6200(0xa6)][ENV_TOKEN])return process[_0x3d6200(0xa6)][ENV_TOKEN];return await _0x5933b5[_0x3d6200(0xa9)](SERVICE_NAME,ACCOUNT_TOKEN);}export async function deleteToken(){const _0x2e4718=_0x16b339;return await _0x5933b5[_0x2e4718(0x9b)](SERVICE_NAME,ACCOUNT_TOKEN);}export async function deleteAllCredentials(){await deleteToken();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(_0x2f8194,_0x472bb1){const _0x50b5cd=_0x5545,_0xf014ab=_0x2f8194();while(!![]){try{const _0x1de5bf=-parseInt(_0x50b5cd(0x11f))/0x1*(parseInt(_0x50b5cd(0x143))/0x2)+parseInt(_0x50b5cd(0x136))/0x3+-parseInt(_0x50b5cd(0x13c))/0x4*(-parseInt(_0x50b5cd(0x122))/0x5)+parseInt(_0x50b5cd(0x126))/0x6*(parseInt(_0x50b5cd(0x138))/0x7)+-parseInt(_0x50b5cd(0x13a))/0x8*(-parseInt(_0x50b5cd(0x13f))/0x9)+-parseInt(_0x50b5cd(0x140))/0xa+parseInt(_0x50b5cd(0x120))/0xb;if(_0x1de5bf===_0x472bb1)break;else _0xf014ab['push'](_0xf014ab['shift']());}catch(_0xb164d6){_0xf014ab['push'](_0xf014ab['shift']());}}}(_0x41a6,0xca519));const _0x5f472e=(function(){const _0x2c472d=_0x5545,_0x475f23={'gbvzm':_0x2c472d(0x142),'ZRqHe':function(_0x86e32f,_0xb7217){return _0x86e32f!==_0xb7217;},'ltLXV':_0x2c472d(0x135)};let _0x15041a=!![];return function(_0x538c96,_0x1e7611){const _0x4e5c6d=_0x2c472d,_0x110ce8={'tSUxJ':function(_0x1724db,_0x366ea0){return _0x1724db!==_0x366ea0;},'TkkQM':_0x475f23[_0x4e5c6d(0x12f)],'BVcdM':_0x4e5c6d(0x125)};if(_0x475f23[_0x4e5c6d(0x12d)](_0x475f23[_0x4e5c6d(0x130)],_0x475f23[_0x4e5c6d(0x130)]))return;else{const _0x1c0d58=_0x15041a?function(){const _0x295956=_0x4e5c6d;if(_0x110ce8[_0x295956(0x11e)](_0x110ce8[_0x295956(0x12e)],_0x110ce8[_0x295956(0x133)])){if(_0x1e7611){const _0x461cf6=_0x1e7611[_0x295956(0x134)](_0x538c96,arguments);return _0x1e7611=null,_0x461cf6;}}else{if(_0x5066a0){const _0x244372=_0x4f69f2[_0x295956(0x134)](_0x3541f7,arguments);return _0x343f81=null,_0x244372;}}}:function(){};return _0x15041a=![],_0x1c0d58;}};}()),_0x4bd222=_0x5f472e(this,function(){const _0x597482=_0x5545,_0x5cf02b={'bEgPo':_0x597482(0x13e)};return _0x4bd222[_0x597482(0x13b)]()[_0x597482(0x131)](_0x5cf02b[_0x597482(0x12a)])[_0x597482(0x13b)]()[_0x597482(0x12b)](_0x4bd222)[_0x597482(0x131)](_0x5cf02b[_0x597482(0x12a)]);});function _0x5545(_0x3625f3,_0x144459){_0x3625f3=_0x3625f3-0x11e;const _0x182cd3=_0x41a6();let _0x4bd222=_0x182cd3[_0x3625f3];if(_0x5545['Ymwrnm']===undefined){var _0x5f472e=function(_0x1530f7){const _0xf1c625='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x414b47='',_0x183492='',_0x19ec36=_0x414b47+_0x5f472e;for(let _0x3165ef=0x0,_0xe3d2b,_0x276d89,_0x524437=0x0;_0x276d89=_0x1530f7['charAt'](_0x524437++);~_0x276d89&&(_0xe3d2b=_0x3165ef%0x4?_0xe3d2b*0x40+_0x276d89:_0x276d89,_0x3165ef++%0x4)?_0x414b47+=_0x19ec36['charCodeAt'](_0x524437+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0xe3d2b>>(-0x2*_0x3165ef&0x6)):_0x3165ef:0x0){_0x276d89=_0xf1c625['indexOf'](_0x276d89);}for(let _0x5e81b8=0x0,_0x1d9cb1=_0x414b47['length'];_0x5e81b8<_0x1d9cb1;_0x5e81b8++){_0x183492+='%'+('00'+_0x414b47['charCodeAt'](_0x5e81b8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x183492);};_0x5545['BXPaCS']=_0x5f472e,_0x5545['KeSOkN']={},_0x5545['Ymwrnm']=!![];}const _0x41a6f7=_0x182cd3[0x0],_0x55451e=_0x3625f3+_0x41a6f7,_0x9c48c5=_0x5545['KeSOkN'][_0x55451e];if(!_0x9c48c5){const _0x42c55b=function(_0x16ef48){this['sdCvQq']=_0x16ef48,this['mvDemq']=[0x1,0x0,0x0],this['LTeOIL']=function(){return'newState';},this['OvfNpV']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['FpTxxL']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x42c55b['prototype']['aBnaaN']=function(){const _0x486035=new RegExp(this['OvfNpV']+this['FpTxxL']),_0x753c6f=_0x486035['test'](this['LTeOIL']['toString']())?--this['mvDemq'][0x1]:--this['mvDemq'][0x0];return this['FRQxPB'](_0x753c6f);},_0x42c55b['prototype']['FRQxPB']=function(_0x137073){if(!Boolean(~_0x137073))return _0x137073;return this['bFjQDU'](this['sdCvQq']);},_0x42c55b['prototype']['bFjQDU']=function(_0x52bd20){for(let _0x54f081=0x0,_0x311f2f=this['mvDemq']['length'];_0x54f081<_0x311f2f;_0x54f081++){this['mvDemq']['push'](Math['round'](Math['random']())),_0x311f2f=this['mvDemq']['length'];}return _0x52bd20(this['mvDemq'][0x0]);},new _0x42c55b(_0x5545)['aBnaaN'](),_0x4bd222=_0x5545['BXPaCS'](_0x4bd222),_0x5545['KeSOkN'][_0x55451e]=_0x4bd222;}else _0x4bd222=_0x9c48c5;return _0x4bd222;}_0x4bd222();import{getToken}from'./keychain.js';import{getApiBaseUrl}from'./environment.js';function _0x41a6(){const _0x24bd96=['q0fnrve','qLzJze0','yxbWBhK','BNruCw4','mZKWnZKYnMPLueHvzG','qMvHCMvYia','mZuWndeZAK9XsLbP','C3rYAw5NAwz5','mtmZmJHntxnuB3u','Dg9tDhjPBMC','nenVv2LUwG','v2rgzLa','kcGOlISPkYKRksSK','ndiWm3H4yKvqAa','mtu4nJaXntbSBLHkBfa','yLzNCwG','qKDswfy','mNLWCeHotG','DfnvEeO','mte3odi2nNbmBMHAEa','mtm4mZu2mdj0swTnu3a','rMfPBgvKihrVigXVzYbZA2LSBcbPBNn0ywXSyxrPB246ia','mtaYmJm2nwL5EwrsEa','r3DgDg4','l2fWAs92ms9Ty3aVBg9JywWTywDLBNqTAw5ZDgfSBgf0Aw9UCW','ugHkB08','nLjuDxfsuG','yKTqBfu','sLLyBhm','Dgv4Da','yKvNug8','y29UC3rYDwn0B3i','uK9Vu0K','wLjXsgu','vgTRuu0','z2j2EM0','Bhrmwfy','C2vHCMnO'];_0x41a6=function(){return _0x24bd96;};return _0x41a6();}export async function logLocalAgentInstallation(_0x15db2a,_0x2b100e,_0x564128){const _0x521e7a=_0x5545,_0x53c3ff={'ROoSI':function(_0x1295ad){return _0x1295ad();},'CAMEQ':function(_0x1d9103,_0x26fd40){return _0x1d9103===_0x26fd40;},'zHNRe':_0x521e7a(0x128),'bKPlU':function(_0x482f30){return _0x482f30();},'WdFfP':function(_0x289a1c,_0xce5822,_0x231b34){return _0x289a1c(_0xce5822,_0x231b34);},'bVgqh':'POST','GwFtn':'application/json'},_0x1578f0=await _0x53c3ff[_0x521e7a(0x12c)](getToken);if(!_0x1578f0){if(_0x53c3ff[_0x521e7a(0x132)]('yNrjE',_0x53c3ff['zHNRe'])){const _0x2bbd70=_0x42c55b?function(){const _0xeb0bb3=_0x521e7a;if(_0x54f081){const _0x16bf52=_0x4ee2d2[_0xeb0bb3(0x134)](_0x409e1a,arguments);return _0x3555e8=null,_0x16bf52;}}:function(){};return _0x52bd20=![],_0x2bbd70;}else return;}const _0x20ac49=_0x53c3ff[_0x521e7a(0x127)](getApiBaseUrl),_0x15307e=await _0x53c3ff[_0x521e7a(0x13d)](fetch,_0x20ac49+_0x521e7a(0x124),{'method':_0x53c3ff[_0x521e7a(0x141)],'headers':{'Authorization':_0x521e7a(0x137)+_0x1578f0,'Content-Type':_0x53c3ff[_0x521e7a(0x123)]},'body':JSON[_0x521e7a(0x139)]({'skillName':_0x15db2a,'cliVersion':_0x564128,'metadata':_0x2b100e})});if(!_0x15307e['ok']){const _0x377346=await _0x15307e[_0x521e7a(0x129)]();console['error'](_0x521e7a(0x121)+_0x377346);}}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as os from 'os';
|
|
4
|
+
import { execSync } from 'child_process';
|
|
5
|
+
const CACHE_FILE = path.join(os.homedir(), '.claude', '.ranger_cache.json');
|
|
6
|
+
function createEmptyCache() {
|
|
7
|
+
return { version: 3, sessions: {}, branches: {} };
|
|
8
|
+
}
|
|
9
|
+
function loadCache() {
|
|
10
|
+
try {
|
|
11
|
+
if (fs.existsSync(CACHE_FILE)) {
|
|
12
|
+
const data = JSON.parse(fs.readFileSync(CACHE_FILE, 'utf-8'));
|
|
13
|
+
return {
|
|
14
|
+
version: 3,
|
|
15
|
+
sessions: data.sessions || {},
|
|
16
|
+
branches: data.branches || {},
|
|
17
|
+
lastEnabledSessionClearedAt: data.lastEnabledSessionClearedAt,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Ignore errors
|
|
23
|
+
}
|
|
24
|
+
return createEmptyCache();
|
|
25
|
+
}
|
|
26
|
+
function saveCache(cache) {
|
|
27
|
+
try {
|
|
28
|
+
const dir = path.dirname(CACHE_FILE);
|
|
29
|
+
if (!fs.existsSync(dir)) {
|
|
30
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
fs.writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Ignore errors
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// ============ Git Helpers ============
|
|
39
|
+
/**
|
|
40
|
+
* Get the current git branch name.
|
|
41
|
+
* Returns null if not in a git repo, in detached HEAD state, or on error.
|
|
42
|
+
*/
|
|
43
|
+
export function getCurrentBranch() {
|
|
44
|
+
try {
|
|
45
|
+
const branch = execSync('git rev-parse --abbrev-ref HEAD', {
|
|
46
|
+
encoding: 'utf-8',
|
|
47
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
48
|
+
}).trim();
|
|
49
|
+
// Return null for empty string or detached HEAD state
|
|
50
|
+
if (!branch || branch === 'HEAD') {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return branch;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// ============ Branch Functions ============
|
|
60
|
+
/**
|
|
61
|
+
* Enable Ranger for a branch (persists across sessions)
|
|
62
|
+
*/
|
|
63
|
+
export function enableBranch(branchName) {
|
|
64
|
+
const cache = loadCache();
|
|
65
|
+
cache.branches[branchName] = true;
|
|
66
|
+
saveCache(cache);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Disable Ranger for a branch
|
|
70
|
+
*/
|
|
71
|
+
export function disableBranch(branchName) {
|
|
72
|
+
const cache = loadCache();
|
|
73
|
+
delete cache.branches[branchName];
|
|
74
|
+
saveCache(cache);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check if Ranger is enabled for a branch
|
|
78
|
+
*/
|
|
79
|
+
export function isBranchEnabled(branchName) {
|
|
80
|
+
const cache = loadCache();
|
|
81
|
+
return cache.branches[branchName] === true;
|
|
82
|
+
}
|
|
83
|
+
// ============ Session Functions ============
|
|
84
|
+
/**
|
|
85
|
+
* Get session entry, creating if needed
|
|
86
|
+
*/
|
|
87
|
+
function getOrCreateSession(cache, sessionId) {
|
|
88
|
+
if (!cache.sessions[sessionId]) {
|
|
89
|
+
cache.sessions[sessionId] = {};
|
|
90
|
+
}
|
|
91
|
+
return cache.sessions[sessionId];
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Enable Ranger hooks for a Claude session.
|
|
95
|
+
* If on a non-main branch, also enables that branch.
|
|
96
|
+
*/
|
|
97
|
+
export function enableSession(claudeSessionId) {
|
|
98
|
+
const cache = loadCache();
|
|
99
|
+
const session = getOrCreateSession(cache, claudeSessionId);
|
|
100
|
+
session.enabled = true;
|
|
101
|
+
// Auto-enable branch if not on main
|
|
102
|
+
const branch = getCurrentBranch();
|
|
103
|
+
if (branch && branch !== 'main' && branch !== 'master') {
|
|
104
|
+
cache.branches[branch] = true;
|
|
105
|
+
session.currentBranch = branch;
|
|
106
|
+
}
|
|
107
|
+
saveCache(cache);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Check if Ranger hooks are enabled for a Claude session.
|
|
111
|
+
* - On main/master: only checks session-level enabled flag
|
|
112
|
+
* - On other branches: enabled if branch is enabled OR session is enabled
|
|
113
|
+
*/
|
|
114
|
+
export function isSessionEnabled(claudeSessionId) {
|
|
115
|
+
const cache = loadCache();
|
|
116
|
+
const branch = getCurrentBranch();
|
|
117
|
+
// On main/master, only session-level enabling works
|
|
118
|
+
if (!branch || branch === 'main' || branch === 'master') {
|
|
119
|
+
return cache.sessions[claudeSessionId]?.enabled === true;
|
|
120
|
+
}
|
|
121
|
+
// On other branches: enabled if branch is enabled OR session is enabled
|
|
122
|
+
const branchEnabled = cache.branches[branch] === true;
|
|
123
|
+
const sessionEnabled = cache.sessions[claudeSessionId]?.enabled === true;
|
|
124
|
+
return branchEnabled || sessionEnabled;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Disable Ranger hooks for a Claude session
|
|
128
|
+
*/
|
|
129
|
+
export function disableSession(claudeSessionId) {
|
|
130
|
+
const cache = loadCache();
|
|
131
|
+
const session = getOrCreateSession(cache, claudeSessionId);
|
|
132
|
+
session.enabled = false;
|
|
133
|
+
saveCache(cache);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Update branch tracking on PostToolUse.
|
|
137
|
+
* If session is enabled and switched to a new non-main branch, auto-enable it.
|
|
138
|
+
*/
|
|
139
|
+
export function updateBranchTracking(claudeSessionId) {
|
|
140
|
+
const cache = loadCache();
|
|
141
|
+
const session = cache.sessions[claudeSessionId];
|
|
142
|
+
if (!session?.enabled) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const branch = getCurrentBranch();
|
|
146
|
+
if (!branch || branch === 'main' || branch === 'master') {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
// If we switched branches while enabled, auto-enable the new branch
|
|
150
|
+
if (session.currentBranch !== branch) {
|
|
151
|
+
cache.branches[branch] = true;
|
|
152
|
+
session.currentBranch = branch;
|
|
153
|
+
saveCache(cache);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Initialize branch tracking on session start.
|
|
158
|
+
* If starting on an already-enabled branch, auto-enable the session.
|
|
159
|
+
*/
|
|
160
|
+
export function initBranchTracking(claudeSessionId) {
|
|
161
|
+
const cache = loadCache();
|
|
162
|
+
const branch = getCurrentBranch();
|
|
163
|
+
if (!branch || branch === 'main' || branch === 'master') {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
// If branch is already enabled, auto-enable this session
|
|
167
|
+
if (cache.branches[branch] === true) {
|
|
168
|
+
const session = getOrCreateSession(cache, claudeSessionId);
|
|
169
|
+
session.enabled = true;
|
|
170
|
+
session.currentBranch = branch;
|
|
171
|
+
saveCache(cache);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// ============ Session Clear Tracking ============
|
|
175
|
+
const CLEAR_AUTO_ENABLE_WINDOW_MS = 5000; // 5 seconds
|
|
176
|
+
/**
|
|
177
|
+
* Record that an enabled session was cleared.
|
|
178
|
+
* Called on SessionEnd with reason === 'clear' if session was enabled.
|
|
179
|
+
*/
|
|
180
|
+
export function recordEnabledSessionCleared(claudeSessionId) {
|
|
181
|
+
const cache = loadCache();
|
|
182
|
+
const session = cache.sessions[claudeSessionId];
|
|
183
|
+
// Only record if the session was enabled
|
|
184
|
+
if (session?.enabled) {
|
|
185
|
+
cache.lastEnabledSessionClearedAt = Date.now();
|
|
186
|
+
saveCache(cache);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Check if we should auto-enable due to a recent clear.
|
|
191
|
+
* Returns true if source is 'clear' and within window of last enabled session clear.
|
|
192
|
+
*/
|
|
193
|
+
export function shouldAutoEnableAfterClear(source) {
|
|
194
|
+
if (source !== 'clear') {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
const cache = loadCache();
|
|
198
|
+
const lastCleared = cache.lastEnabledSessionClearedAt;
|
|
199
|
+
if (!lastCleared) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
const elapsed = Date.now() - lastCleared;
|
|
203
|
+
return elapsed <= CLEAR_AUTO_ENABLE_WINDOW_MS;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Auto-enable a session after clear (preserves enabled state across /clear).
|
|
207
|
+
*/
|
|
208
|
+
export function autoEnableAfterClear(claudeSessionId) {
|
|
209
|
+
const cache = loadCache();
|
|
210
|
+
const session = getOrCreateSession(cache, claudeSessionId);
|
|
211
|
+
session.enabled = true;
|
|
212
|
+
// Also track current branch
|
|
213
|
+
const branch = getCurrentBranch();
|
|
214
|
+
if (branch && branch !== 'main' && branch !== 'master') {
|
|
215
|
+
session.currentBranch = branch;
|
|
216
|
+
}
|
|
217
|
+
// Clear the timestamp so we don't re-trigger
|
|
218
|
+
delete cache.lastEnabledSessionClearedAt;
|
|
219
|
+
saveCache(cache);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Register a Claude session as working on a Ranger feature
|
|
223
|
+
*/
|
|
224
|
+
export function registerSession(claudeSessionId, featureId) {
|
|
225
|
+
const cache = loadCache();
|
|
226
|
+
const session = getOrCreateSession(cache, claudeSessionId);
|
|
227
|
+
session.featureId = featureId;
|
|
228
|
+
session.registeredAt = new Date().toISOString();
|
|
229
|
+
saveCache(cache);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Get the feature info for a Claude session
|
|
233
|
+
*/
|
|
234
|
+
export function getSessionEntry(claudeSessionId) {
|
|
235
|
+
const cache = loadCache();
|
|
236
|
+
const session = cache.sessions[claudeSessionId];
|
|
237
|
+
if (session?.featureId && session?.registeredAt) {
|
|
238
|
+
return {
|
|
239
|
+
featureId: session.featureId,
|
|
240
|
+
registeredAt: session.registeredAt,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Unregister a Claude session from its feature
|
|
247
|
+
*/
|
|
248
|
+
export function unregisterSession(claudeSessionId) {
|
|
249
|
+
const cache = loadCache();
|
|
250
|
+
const session = cache.sessions[claudeSessionId];
|
|
251
|
+
if (session) {
|
|
252
|
+
delete session.featureId;
|
|
253
|
+
delete session.registeredAt;
|
|
254
|
+
saveCache(cache);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// ============ Plan Reminder Functions ============
|
|
258
|
+
const PLAN_REMINDER_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
|
|
259
|
+
/**
|
|
260
|
+
* Check if plan reminder should be shown (rate-limited to once per 5 min per session)
|
|
261
|
+
* Returns true if reminder should be shown, and updates the timestamp.
|
|
262
|
+
*/
|
|
263
|
+
export function shouldShowPlanReminder(claudeSessionId) {
|
|
264
|
+
const cache = loadCache();
|
|
265
|
+
const session = getOrCreateSession(cache, claudeSessionId);
|
|
266
|
+
const lastShown = session.lastPlanReminderAt || 0;
|
|
267
|
+
const now = Date.now();
|
|
268
|
+
if (now - lastShown >= PLAN_REMINDER_INTERVAL_MS) {
|
|
269
|
+
session.lastPlanReminderAt = now;
|
|
270
|
+
saveCache(cache);
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
// ============ Cache Management ============
|
|
276
|
+
/**
|
|
277
|
+
* Get the cache file path (for cleanup)
|
|
278
|
+
*/
|
|
279
|
+
export function getCacheFile() {
|
|
280
|
+
return CACHE_FILE;
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=sessionCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionCache.js","sourceRoot":"","sources":["../../../src/commands/utils/sessionCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,9 +20,9 @@ export function readSkillContent(skillPath) {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* Get the
|
|
23
|
+
* Get the ranger SKILL.md content
|
|
24
24
|
*/
|
|
25
|
-
export function
|
|
26
|
-
return readSkillContent('
|
|
25
|
+
export function getRangerSkillContent() {
|
|
26
|
+
return readSkillContent('ranger/SKILL.md');
|
|
27
27
|
}
|
|
28
28
|
//# sourceMappingURL=skillContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillContent.js","sourceRoot":"","sources":["../../../src/commands/utils/skillContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAC9C,uDAAuD;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE5C,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"skillContent.js","sourceRoot":"","sources":["../../../src/commands/utils/skillContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAC9C,uDAAuD;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE5C,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACjC,OAAO,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0x2fa830=_0x284d;function _0x484f(){const _0x26e4f1=['255996wWLlQW','4327845yCEJWd','log','920600UiQPRe','tuAiM','filter','zBEqj','UVZlL','19447ccFYBP','16xDzzDe','\x20\x20Files:\x20','join','18tSCfqf','csadA','\x20\x20Skill\x20not\x20found:\x20','skills','isDirectory','match','FMBGX','project','trim','warn','584486dtfykW','141138SONURB','1179624zgpNcg','\x20\x20Installed\x20skill:\x20','endsWith','e2e-test-recommender'];_0x484f=function(){return _0x26e4f1;};return _0x484f();}(function(_0x510771,_0x3e6fa5){const _0x43fc92=_0x284d,_0x6d4dd0=_0x510771();while(!![]){try{const _0x40df93=-parseInt(_0x43fc92(0x134))/0x1+parseInt(_0x43fc92(0x12f))/0x2+parseInt(_0x43fc92(0x12c))/0x3+-parseInt(_0x43fc92(0x128))/0x4+parseInt(_0x43fc92(0x12d))/0x5+parseInt(_0x43fc92(0x11c))/0x6*(-parseInt(_0x43fc92(0x126))/0x7)+-parseInt(_0x43fc92(0x135))/0x8*(-parseInt(_0x43fc92(0x127))/0x9);if(_0x40df93===_0x3e6fa5)break;else _0x6d4dd0['push'](_0x6d4dd0['shift']());}catch(_0x36c38b){_0x6d4dd0['push'](_0x6d4dd0['shift']());}}}(_0x484f,0xd6496));import{readFile,writeFile,mkdir,readdir,copyFile,rm}from'fs/promises';import{join,dirname}from'path';function _0x284d(_0xc73db1,_0x4eec08){_0xc73db1=_0xc73db1-0x11b;const _0x484f8f=_0x484f();let _0x284d98=_0x484f8f[_0xc73db1];return _0x284d98;}import{existsSync,statSync}from'fs';import{fileURLToPath}from'url';import{logLocalAgentInstallation}from'./localAgentInstallationsApi.js';import{getSkillsDir}from'./claudeConfig.js';const __filename=fileURLToPath(import.meta.url),__dirname=dirname(__filename);export const RANGER_MANAGED_SKILLS=['ranger'];export const DEPRECATED_SKILLS=[_0x2fa830(0x12b),'bug-bash','feature-tracker'];export async function installSkill(_0x1c0ad6,_0x3b5029={}){const _0x537a0d=_0x2fa830,_0x588d4f={'UVZlL':function(_0xa6a292,_0x539b58,_0x1c2164){return _0xa6a292(_0x539b58,_0x1c2164);},'KhbVU':function(_0xcdfd24,_0x58d1d){return _0xcdfd24(_0x58d1d);},'BCNyU':function(_0x3c3e33,_0x55d067){return _0x3c3e33(_0x55d067);},'pQeAI':function(_0x16f043,_0x352041,_0x3edb29){return _0x16f043(_0x352041,_0x3edb29);},'FMBGX':'SKILL.md','cwPWo':'utf-8','LmsII':function(_0x125305,_0x277ed3,_0x3ec333,_0x27bee8){return _0x125305(_0x277ed3,_0x3ec333,_0x27bee8);}},{level:level=_0x537a0d(0x123),cliVersion:_0x1592b1}=_0x3b5029,_0x58416d=getSourceSkillsDir(),_0x26805d=_0x588d4f[_0x537a0d(0x133)](join,_0x58416d,_0x1c0ad6),_0x17ff81=join(_0x58416d,_0x1c0ad6+'.md'),_0x236e66=existsSync(_0x26805d)&&statSync(_0x26805d)[_0x537a0d(0x120)]()&&existsSync(_0x588d4f[_0x537a0d(0x133)](join,_0x26805d,'SKILL.md')),_0x18dba9=existsSync(_0x17ff81);if(!_0x236e66&&!_0x18dba9)return console[_0x537a0d(0x125)](_0x537a0d(0x11e)+_0x1c0ad6),![];const _0x19f328=_0x588d4f['KhbVU'](getSkillsDir,level),_0x58d509=join(_0x19f328,_0x1c0ad6);await mkdir(_0x58d509,{'recursive':!![]});let _0x12c992,_0x59d5f1=[];if(_0x236e66){const _0x3de185=await _0x588d4f['BCNyU'](readdir,_0x26805d),_0x1588fe=_0x3de185[_0x537a0d(0x131)](_0x51e75e=>_0x51e75e[_0x537a0d(0x12a)]('.md'));for(const _0x5a4430 of _0x1588fe){const _0x564ca0=join(_0x26805d,_0x5a4430),_0x2ff7eb=_0x588d4f['UVZlL'](join,_0x58d509,_0x5a4430);await _0x588d4f[_0x537a0d(0x133)](copyFile,_0x564ca0,_0x2ff7eb),_0x59d5f1['push'](_0x5a4430);}_0x12c992=await _0x588d4f['pQeAI'](readFile,_0x588d4f['pQeAI'](join,_0x26805d,_0x588d4f['FMBGX']),_0x588d4f['cwPWo']);}else{_0x12c992=await readFile(_0x17ff81,_0x588d4f['cwPWo']);const _0xb5369=join(_0x58d509,_0x588d4f[_0x537a0d(0x122)]);await writeFile(_0xb5369,_0x12c992,_0x588d4f['cwPWo']),_0x59d5f1['push'](_0x588d4f['FMBGX']);}const {name:_0x216dbc}=_0x588d4f['KhbVU'](parseFrontmatter,_0x12c992);return console['log'](_0x537a0d(0x129)+_0x216dbc),console[_0x537a0d(0x12e)]('\x20\x20Location:\x20'+_0x58d509),_0x59d5f1['length']>0x1&&console[_0x537a0d(0x12e)](_0x537a0d(0x136)+_0x59d5f1[_0x537a0d(0x11b)](',\x20')),_0x588d4f['LmsII'](logLocalAgentInstallation,_0x1c0ad6,{'skillDisplayName':_0x216dbc,'installLevel':level},_0x1592b1)['catch'](()=>{}),!![];}function getSourceSkillsDir(){const _0x2a3102=_0x2fa830,_0x4e0b55={'lWZsw':function(_0xb073cc,_0x4875dc,_0x3f9b02,_0x16f9b7,_0x353cc3){return _0xb073cc(_0x4875dc,_0x3f9b02,_0x16f9b7,_0x353cc3);},'tuAiM':_0x2a3102(0x11f),'zBEqj':function(_0x349aba,_0xefc26f){return _0x349aba(_0xefc26f);}},_0x851e0f=[_0x4e0b55['lWZsw'](join,__dirname,'..','..',_0x4e0b55[_0x2a3102(0x130)]),join(__dirname,'..','..','..',_0x4e0b55[_0x2a3102(0x130)])];for(const _0x10462b of _0x851e0f){if(_0x4e0b55[_0x2a3102(0x132)](existsSync,_0x10462b))return _0x10462b;}return _0x851e0f[0x0];}function parseFrontmatter(_0x276e3d){const _0x17a958=_0x2fa830,_0x258fe6={'csadA':'Invalid\x20skill\x20frontmatter'},_0x4b733d=_0x276e3d['match'](/^---\n([\s\S]+?)\n---/);if(!_0x4b733d)throw new Error(_0x258fe6[_0x17a958(0x11d)]);const _0x40c4f1=_0x4b733d[0x1],_0x52def0=_0x40c4f1['match'](/name:\s*(.+)/),_0x2964e6=_0x40c4f1[_0x17a958(0x121)](/description:\s*"?(.+?)"?\n/);return{'name':_0x52def0?.[0x1][_0x17a958(0x124)]()||'','description':_0x2964e6?.[0x1]['trim']()||''};}export async function removeSkill(_0x480f3e,_0x56fbdb){const _0x573bf5=_0x2fa830,_0x18e892={'vxqLv':function(_0x2d0867,_0xeaa992,_0x2b19fd){return _0x2d0867(_0xeaa992,_0x2b19fd);}},_0xf18953=getSkillsDir(_0x56fbdb),_0x1dd651=join(_0xf18953,_0x480f3e);if(!existsSync(_0x1dd651))return![];try{return await _0x18e892['vxqLv'](rm,_0x1dd651,{'recursive':!![]}),console[_0x573bf5(0x12e)]('\x20\x20Removed\x20deprecated\x20skill:\x20'+_0x480f3e),!![];}catch{return console['warn']('\x20\x20Failed\x20to\x20remove\x20deprecated\x20skill:\x20'+_0x480f3e),![];}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/commands/utils/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAqB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,qFAAqF;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAAG
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/commands/utils/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,22 @@ import { loadSettings, resolveEnvVars, buildPlaywrightConfig, cleanupTempFiles,
|
|
|
9
9
|
import { createBrowserSession, updateBrowserSession, getUploadUrls, uploadTrace, uploadConversation, uploadScreenshot, uploadVideo, buildTraceViewerUrl, getAnthropicApiKey, } from './utils/browserSessionsApi.js';
|
|
10
10
|
import { getToken } from './utils/keychain.js';
|
|
11
11
|
import { getActiveFeatureId } from './feature.js';
|
|
12
|
-
import { getFeature, updateChecklistItem, startSession, } from './utils/featureApi.js';
|
|
12
|
+
import { getFeature, updateFeature, updateChecklistItem, startSession, } from './utils/featureApi.js';
|
|
13
13
|
import { getRangerDir } from './utils/rangerRoot.js';
|
|
14
|
+
/**
|
|
15
|
+
* Get the current git branch
|
|
16
|
+
*/
|
|
17
|
+
function getGitBranch() {
|
|
18
|
+
try {
|
|
19
|
+
return execSync('git rev-parse --abbrev-ref HEAD', {
|
|
20
|
+
encoding: 'utf-8',
|
|
21
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
22
|
+
}).trim();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
14
28
|
/**
|
|
15
29
|
* Zip a directory and return the buffer
|
|
16
30
|
*/
|
|
@@ -215,10 +229,16 @@ export async function verifyFeature(options) {
|
|
|
215
229
|
// 1. Check for active feature
|
|
216
230
|
const featureId = await getActiveFeatureId();
|
|
217
231
|
if (!featureId) {
|
|
218
|
-
throw new Error('No active feature. Run: ranger feature
|
|
232
|
+
throw new Error('No active feature. Run: ranger feature resume <id> or ranger feature create');
|
|
219
233
|
}
|
|
220
234
|
// Load feature details
|
|
221
235
|
const feature = await getFeature(featureId);
|
|
236
|
+
// Update the feature's gitBranch to the current branch
|
|
237
|
+
const currentBranch = getGitBranch();
|
|
238
|
+
if (currentBranch && currentBranch !== feature.gitBranch) {
|
|
239
|
+
await updateFeature(featureId, { gitBranch: currentBranch });
|
|
240
|
+
console.log(` Updated branch to: ${currentBranch}`);
|
|
241
|
+
}
|
|
222
242
|
console.log(`\nActive feature: ${feature.name} (${featureId})`);
|
|
223
243
|
// Filter to only items in the current session
|
|
224
244
|
const currentSessionId = feature.currentSessionId;
|
|
@@ -314,10 +334,18 @@ export async function verifyFeature(options) {
|
|
|
314
334
|
const settings = await loadSettings(activeEnv);
|
|
315
335
|
const resolvedSettings = resolveEnvVars(settings);
|
|
316
336
|
// Get base URL from settings
|
|
317
|
-
|
|
337
|
+
let url = resolvedSettings.baseUrl;
|
|
318
338
|
if (!url) {
|
|
319
339
|
throw new Error(`No baseUrl configured for environment "${activeEnv}". Run: ranger config set ${activeEnv} baseUrl <url>`);
|
|
320
340
|
}
|
|
341
|
+
// Append startPath if provided
|
|
342
|
+
if (options.startPath) {
|
|
343
|
+
const base = url.endsWith('/') ? url.slice(0, -1) : url;
|
|
344
|
+
const path = options.startPath.startsWith('/')
|
|
345
|
+
? options.startPath
|
|
346
|
+
: '/' + options.startPath;
|
|
347
|
+
url = base + path;
|
|
348
|
+
}
|
|
321
349
|
// 4. Create browser session
|
|
322
350
|
const token = await getToken();
|
|
323
351
|
if (!token) {
|
|
@@ -745,6 +773,7 @@ Return your findings in the structured output format with your evaluation.`;
|
|
|
745
773
|
await updateChecklistItem(featureId, checklistItem.id, {
|
|
746
774
|
status: 'incomplete',
|
|
747
775
|
browserSessionId: browserSession.id,
|
|
776
|
+
incompleteReason: resultForEval.evaluationReason,
|
|
748
777
|
});
|
|
749
778
|
// Check if other items are terminal and prompt user
|
|
750
779
|
await handleIncompleteItem(featureId, checklistItem, resultForEval);
|