autohand-cli 0.8.3 → 0.9.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/README.md +173 -74
- package/dist/AgentRegistry-EGBDIUAK.cjs +10 -0
- package/dist/{AgentRegistry-ODDXPAFR.js → AgentRegistry-XPWSVO3Q.js} +2 -2
- package/dist/{AutomodeManager-EOVHGRPP.js → AutomodeManager-APLLPEYJ.js} +31 -17
- package/dist/{AutomodeManager-6ATBE7Q5.cjs → AutomodeManager-MPSXT2RH.cjs} +38 -24
- package/dist/CommunitySkillsCache-2OIUV227.cjs +8 -0
- package/dist/{CommunitySkillsCache-QLE57BN5.js → CommunitySkillsCache-ZEQWP6YM.js} +2 -2
- package/dist/GitHubRegistryFetcher-CYJLF2XL.cjs +7 -0
- package/dist/{GitHubRegistryFetcher-NT5GFZXS.js → GitHubRegistryFetcher-J2BWPXJF.js} +1 -1
- package/dist/{HookManager-B2F35M27.js → HookManager-CWLTFKWO.js} +1 -1
- package/dist/{HookManager-PFAFE3FK.cjs → HookManager-TMAJQU4S.cjs} +2 -2
- package/dist/{ImportWizard-CJRZPPHL.cjs → ImportWizard-MQXEED2U.cjs} +37 -13
- package/dist/{ImportWizard-OHRKBANZ.js → ImportWizard-QBKQEXDW.js} +33 -9
- package/dist/LearnAdvisor-46FG2XIP.js +9 -0
- package/dist/LearnAdvisor-XBRDNAGH.cjs +9 -0
- package/dist/{McpClientManager-NQ3EW2IF.cjs → McpClientManager-BNSKLHIN.cjs} +2 -2
- package/dist/{McpClientManager-VBIMGKXU.js → McpClientManager-SL35BR24.js} +1 -1
- package/dist/MemoryManager-34L4YOKA.cjs +8 -0
- package/dist/{MemoryManager-2LAT7IHS.js → MemoryManager-WJMLPWGU.js} +2 -2
- package/dist/NVIDIAProvider-2HR737UE.js +14 -0
- package/dist/NVIDIAProvider-MVTL62PR.cjs +14 -0
- package/dist/PermissionManager-5OOJ7FAT.cjs +11 -0
- package/dist/{PermissionManager-7NQHRCHY.js → PermissionManager-KMYILJ4Z.js} +3 -3
- package/dist/{ProjectProfiler-UG42W6WD.cjs → ProjectProfiler-CDAE7ECW.cjs} +1 -0
- package/dist/{ProjectProfiler-P4QJQWWA.js → ProjectProfiler-NZTJDRHD.js} +1 -0
- package/dist/ProviderFactory-C3YPXTDD.cjs +11 -0
- package/dist/{ProviderFactory-2IYJ5OPW.js → ProviderFactory-HFPRVQ25.js} +3 -1
- package/dist/{SessionManager-4U4JFQ3C.js → SessionManager-PNBTJJTQ.js} +2 -2
- package/dist/SessionManager-WAPTFMDO.cjs +10 -0
- package/dist/{SkillsRegistry-RFEINXRT.js → SkillsRegistry-4RRD5GMX.js} +2 -2
- package/dist/SkillsRegistry-7AJP74GJ.cjs +9 -0
- package/dist/SubAgent-FDIH3DXB.js +11 -0
- package/dist/SubAgent-HVL2ICVZ.cjs +11 -0
- package/dist/{SyncApiClient-B5RT2ECG.js → SyncApiClient-LRPFNCKJ.js} +1 -1
- package/dist/SyncApiClient-VMBOLQ6H.cjs +11 -0
- package/dist/about-BW3PDZUU.js +14 -0
- package/dist/about-FCAX37YC.cjs +14 -0
- package/dist/acp-EOETGAHC.cjs +1517 -0
- package/dist/acp-VHEL7BOW.js +1517 -0
- package/dist/actionExecutor-33I47NZS.js +24 -0
- package/dist/actionExecutor-4YBMR3YH.cjs +24 -0
- package/dist/add-dir-7SS6KSH5.cjs +11 -0
- package/dist/{add-dir-TUJM3PG5.js → add-dir-VFX7QT4E.js} +3 -2
- package/dist/agent-DMRUFU4M.cjs +116 -0
- package/dist/agent-WCJEYQJT.js +116 -0
- package/dist/agents/builtin/code-cleaner.md +1 -1
- package/dist/agents/builtin/docs-writer.md +1 -1
- package/dist/agents/builtin/researcher.md +2 -2
- package/dist/agents/builtin/reviewer.md +1 -1
- package/dist/agents/builtin/tester.md +1 -1
- package/dist/agents/builtin/todo-resolver.md +1 -1
- package/dist/agents-CHROO3VU.cjs +17 -0
- package/dist/agents-UVDUL65K.js +17 -0
- package/dist/agents-new-AUBWSOXP.js +17 -0
- package/dist/agents-new-Y562WC47.cjs +17 -0
- package/dist/{autoSkill-LQEVQFIH.js → autoSkill-EFMK6WU6.js} +2 -2
- package/dist/autoSkill-YOLLFTP2.cjs +20 -0
- package/dist/{automode-R6P3VHLS.js → automode-BMYSRM34.js} +2 -2
- package/dist/automode-DBLKTTKD.cjs +10 -0
- package/dist/browserToolBridge-BXRQB4B4.cjs +58 -0
- package/dist/browserToolBridge-F5N66PE7.js +58 -0
- package/dist/chrome-ATC4OO5I.cjs +20 -0
- package/dist/chrome-NHJ44WUN.js +50 -0
- package/dist/chrome-O62WXV7F.js +20 -0
- package/dist/chrome-XHJLCO4M.cjs +50 -0
- package/dist/chromeSkill-53TH55PM.js +105 -0
- package/dist/chromeSkill-THW7N4IY.cjs +105 -0
- package/dist/{chunk-EGPXJERY.cjs → chunk-2CGE7ZV3.cjs} +26 -26
- package/dist/chunk-2H5O745H.js +63 -0
- package/dist/chunk-2HOLOHVK.js +2219 -0
- package/dist/{chunk-3PDTTAKJ.js → chunk-2QL6MNXG.js} +15 -8
- package/dist/{chunk-U55TWFJI.cjs → chunk-2VHB43IX.cjs} +24 -6
- package/dist/{chunk-VG34MG2U.js → chunk-37M5UM6I.js} +9 -6
- package/dist/{chunk-KLWJIPU2.cjs → chunk-3DDL2E55.cjs} +20 -16
- package/dist/chunk-3EDDDZS2.cjs +5 -0
- package/dist/{chunk-2UC22DJU.js → chunk-3GUEUCZK.js} +28 -4
- package/dist/{chunk-DVUHHH3B.cjs → chunk-3KLSNNRW.cjs} +4 -4
- package/dist/chunk-3LJJG5YY.cjs +387 -0
- package/dist/chunk-3OF56EMA.cjs +197 -0
- package/dist/chunk-3PXKRVCW.js +108 -0
- package/dist/{chunk-ADUFCS4Q.cjs → chunk-3S563FNF.cjs} +160 -79
- package/dist/chunk-3UT7R3XV.js +663 -0
- package/dist/chunk-4256YRCO.cjs +80 -0
- package/dist/chunk-46C73ZKK.cjs +663 -0
- package/dist/chunk-46MTALKD.js +44 -0
- package/dist/{chunk-AEJH23FO.cjs → chunk-47PHDKNW.cjs} +6 -6
- package/dist/chunk-4LMUDS2K.js +124 -0
- package/dist/{chunk-HLHTG5ZU.cjs → chunk-5CMYEM3R.cjs} +14 -12
- package/dist/{chunk-MBBY4ZIK.js → chunk-5F6ZKSHO.js} +4 -1
- package/dist/chunk-5JFTY3VU.js +74 -0
- package/dist/chunk-5JTTM5SC.js +59 -0
- package/dist/{chunk-IETRBBMP.cjs → chunk-5K3CDSWZ.cjs} +108 -31
- package/dist/{chunk-GJH7XMSK.js → chunk-5VHP6HDQ.js} +8 -6
- package/dist/{chunk-6ZCULLCA.js → chunk-62RTC3XX.js} +1 -1
- package/dist/{chunk-64H4FRM3.cjs → chunk-6GUODJKM.cjs} +32 -34
- package/dist/{chunk-47CKWKEX.cjs → chunk-6HH236FV.cjs} +9 -4
- package/dist/{chunk-WHE2SWHU.js → chunk-6NVAK6CK.js} +2 -2
- package/dist/chunk-6R25D2H5.js +121 -0
- package/dist/{chunk-OUZQXMHL.cjs → chunk-6XVVIY54.cjs} +55 -25
- package/dist/{chunk-3L53OA4E.cjs → chunk-75EDROHL.cjs} +10 -10
- package/dist/{chunk-G4CAKI3V.js → chunk-7HPWMALN.js} +7 -2
- package/dist/chunk-7JLT2VNW.cjs +18963 -0
- package/dist/chunk-7LWQCE4Y.cjs +987 -0
- package/dist/{chunk-OLSBBZW6.cjs → chunk-7MU7LWF3.cjs} +5 -5
- package/dist/{chunk-TUD3Z3BD.js → chunk-7RFJB75Y.js} +140 -59
- package/dist/{chunk-X2MSVKDV.js → chunk-A7HHCIDQ.js} +2 -2
- package/dist/{chunk-SKYG33B2.cjs → chunk-AC7DZ6SK.cjs} +3 -3
- package/dist/{chunk-XX2ZO7DS.js → chunk-ACDQGA4Z.js} +90 -16
- package/dist/{chunk-CZXGCVTR.cjs → chunk-AOKCI722.cjs} +2 -2
- package/dist/chunk-ARBEHFCG.js +715 -0
- package/dist/{chunk-OOKY3HPZ.js → chunk-AT7OWLY5.js} +50 -9
- package/dist/chunk-AU6JAGZJ.cjs +231 -0
- package/dist/chunk-AUFNACED.js +18963 -0
- package/dist/{chunk-N2BLVUPM.cjs → chunk-AUYSIEVV.cjs} +3 -3
- package/dist/chunk-B4HSNOIH.cjs +354 -0
- package/dist/{chunk-EGMZDTSL.js → chunk-B5CGDNMR.js} +10 -2
- package/dist/{chunk-FTYY5JJD.js → chunk-BFQDQRDE.js} +2 -2
- package/dist/{chunk-2AA5MFES.js → chunk-BL2UC7HC.js} +8 -5
- package/dist/{chunk-T2M64VHA.cjs → chunk-BQ22N3TX.cjs} +56 -41
- package/dist/chunk-BQU3HAE7.js +21 -0
- package/dist/chunk-BWF4VDYE.js +3897 -0
- package/dist/chunk-BYE7RQFZ.cjs +121 -0
- package/dist/{chunk-APIXPPMT.js → chunk-CBFH2J3O.js} +855 -33
- package/dist/chunk-CCVMREXI.js +420 -0
- package/dist/chunk-CFAWTLSC.js +13 -0
- package/dist/{chunk-G27PQQFD.js → chunk-CFFE4VA3.js} +1 -1
- package/dist/{chunk-ZYQMLKOK.cjs → chunk-CH2J4PVE.cjs} +212 -70
- package/dist/{chunk-7BTSG4ME.cjs → chunk-CHI52KFR.cjs} +855 -33
- package/dist/{chunk-DJDE4DTT.cjs → chunk-CWINVFRI.cjs} +25 -19
- package/dist/{chunk-HXGBSJL5.cjs → chunk-D2OSPLYC.cjs} +2 -2
- package/dist/{chunk-GBHDROGL.js → chunk-D6GZBSOX.js} +16 -4
- package/dist/{chunk-CNBKZEX5.cjs → chunk-DA7NBAJK.cjs} +49 -17
- package/dist/chunk-DEQVRSV5.cjs +866 -0
- package/dist/{chunk-RGR6ME5J.cjs → chunk-DI57A4BX.cjs} +25 -28
- package/dist/{chunk-K2C56QGS.cjs → chunk-DIZTWFVR.cjs} +1499 -482
- package/dist/{chunk-YZXUDM5X.js → chunk-DLP436GI.js} +204 -62
- package/dist/{chunk-OHUZKDGX.js → chunk-DMRXF5DU.js} +3 -3
- package/dist/{chunk-U46VYPLR.cjs → chunk-DPSIGY6L.cjs} +9 -9
- package/dist/{chunk-SEKD5FH3.cjs → chunk-E26KKI46.cjs} +5 -2
- package/dist/{chunk-SJAVBCOA.js → chunk-E46DJH5S.js} +3 -3
- package/dist/{chunk-DV2ZHK7B.cjs → chunk-E6GFD7VR.cjs} +49 -26
- package/dist/chunk-ES2HJQ4N.js +37 -0
- package/dist/chunk-EZJHLOWP.js +80 -0
- package/dist/chunk-FFBDRUO5.cjs +59 -0
- package/dist/{chunk-SV2WA57F.js → chunk-FGT6KK6T.js} +38 -15
- package/dist/{chunk-SAHBLB3E.js → chunk-FP46B4X3.js} +208 -3
- package/dist/{chunk-QXH5RCFI.js → chunk-FQAVGSPW.js} +2 -2
- package/dist/chunk-FQVG6ZHF.js +197 -0
- package/dist/chunk-GBMDFWJX.cjs +152 -0
- package/dist/{chunk-NAGQ2PDC.js → chunk-GGLKUENP.js} +1453 -436
- package/dist/{chunk-S52YW5ZQ.js → chunk-GNBBIAMD.js} +16 -19
- package/dist/{chunk-MYISNQH4.js → chunk-GWO66KBI.js} +1 -1
- package/dist/chunk-GWY26SUD.cjs +63 -0
- package/dist/{chunk-YGN4CQIP.js → chunk-GZ6DV2UG.js} +1 -1
- package/dist/{chunk-EZMINVLU.js → chunk-H4D2Q2AL.js} +5 -2
- package/dist/{chunk-3WVJEL7K.cjs → chunk-HDK2EHVH.cjs} +3 -1
- package/dist/chunk-HJIXWGQZ.js +139 -0
- package/dist/{chunk-ULDM2SNB.js → chunk-HKYZSUQ5.js} +48 -47
- package/dist/{chunk-LQGVEP3E.js → chunk-HQUSEWT4.js} +45 -13
- package/dist/{chunk-HTLINWX6.cjs → chunk-HQWQZML5.cjs} +16 -13
- package/dist/{chunk-DVZOENQ7.cjs → chunk-HS4USDND.cjs} +9 -4
- package/dist/chunk-HSCUPEA4.cjs +3897 -0
- package/dist/{chunk-JCLYQ2JC.js → chunk-HXJEGMGB.js} +12 -6
- package/dist/{chunk-LJFUXC56.cjs → chunk-HXQREVTA.cjs} +9 -6
- package/dist/{chunk-N7LI55V4.js → chunk-I24CWKKK.js} +15 -8
- package/dist/chunk-IAGCRVJ3.js +355 -0
- package/dist/chunk-IEXKKKOF.cjs +92 -0
- package/dist/{chunk-5IXII4HX.cjs → chunk-IGMPWJ2I.cjs} +19 -12
- package/dist/chunk-IKUMVBCW.cjs +33 -0
- package/dist/{chunk-XTB6VJVQ.cjs → chunk-J2K57QM7.cjs} +6 -6
- package/dist/{chunk-56SWIDEL.cjs → chunk-J5ADZN6V.cjs} +57 -56
- package/dist/chunk-J5HE6CUM.cjs +124 -0
- package/dist/{chunk-LIEXWM2M.js → chunk-JAQO6XDB.js} +19 -1
- package/dist/chunk-JIMSII7R.js +987 -0
- package/dist/chunk-JJ4KA7HK.cjs +2219 -0
- package/dist/{chunk-ZLSGXMGQ.js → chunk-JMN3GZU6.js} +2 -0
- package/dist/{chunk-X5VSP65C.cjs → chunk-JP3YHTQ2.cjs} +4 -4
- package/dist/{chunk-SKV2F3NM.js → chunk-JYKPWK5O.js} +1 -1
- package/dist/{chunk-NNPAM4HC.cjs → chunk-KNTUI4TZ.cjs} +12 -6
- package/dist/{chunk-HIVRCQS2.js → chunk-L4F7SUYL.js} +56 -25
- package/dist/{chunk-C5IJIM2V.cjs → chunk-LDJQ5QHG.cjs} +68 -37
- package/dist/{chunk-ULQ6MDSJ.cjs → chunk-LFDPTJYF.cjs} +43 -35
- package/dist/chunk-LJD7KR3L.cjs +44 -0
- package/dist/chunk-LN7D3EJZ.js +387 -0
- package/dist/{chunk-KANW6OYC.cjs → chunk-LQBONA55.cjs} +32 -8
- package/dist/{chunk-NCC6ETZS.js → chunk-LUMV3DB2.js} +41 -33
- package/dist/chunk-M4KNC5BQ.js +78 -0
- package/dist/chunk-MO4KP6XS.cjs +229 -0
- package/dist/{chunk-BVKXEQVG.cjs → chunk-MOJ7ADW4.cjs} +22 -10
- package/dist/chunk-MPULXVC4.cjs +715 -0
- package/dist/{chunk-VEKDGU2Q.cjs → chunk-MQESBFBZ.cjs} +46 -23
- package/dist/chunk-MUNUUFU7.cjs +21 -0
- package/dist/{chunk-ZSPXQYG2.js → chunk-MX75JYIY.js} +7 -5
- package/dist/chunk-MXVIDIC6.cjs +139 -0
- package/dist/{chunk-3K2ESU53.cjs → chunk-N6O3XUZ2.cjs} +2 -2
- package/dist/{chunk-BYONM7UM.js → chunk-NBGOIFKP.js} +265 -18
- package/dist/{chunk-SLQAYV3W.js → chunk-NMQ47RCG.js} +8 -2
- package/dist/{chunk-JYTDYJVW.js → chunk-O64I2GYI.js} +1 -1
- package/dist/{chunk-IFFXSTOM.cjs → chunk-O6TQP7U7.cjs} +3 -3
- package/dist/{chunk-AYS2ASM7.js → chunk-OHWMWKJQ.js} +1 -1
- package/dist/{chunk-N23UAW4I.js → chunk-OM24WXEE.js} +7 -2
- package/dist/{chunk-NAJ4IZKD.cjs → chunk-OPNI6O7F.cjs} +8 -6
- package/dist/chunk-OR67YXQK.cjs +13 -0
- package/dist/{chunk-XVUHNWMX.js → chunk-OV3PVUYN.js} +17 -19
- package/dist/{chunk-TNZRZQ7Q.js → chunk-PB7W7R72.js} +3 -78
- package/dist/chunk-PCM3N3CL.cjs +37 -0
- package/dist/{chunk-A4IJHHV7.cjs → chunk-PDHT7LQS.cjs} +52 -11
- package/dist/{chunk-HPHJ73GU.cjs → chunk-PHJO5YAL.cjs} +9 -9
- package/dist/{chunk-KPELYZ6L.js → chunk-PQLKJCIE.js} +2 -2
- package/dist/chunk-PUD76XQT.cjs +78 -0
- package/dist/chunk-Q2IL4DDI.cjs +355 -0
- package/dist/{chunk-WPVWQSL7.cjs → chunk-Q6AC3PHY.cjs} +16 -13
- package/dist/{chunk-XRZEUWKF.js → chunk-QCHIDZBA.js} +1 -1
- package/dist/chunk-QKP772OZ.js +4291 -0
- package/dist/chunk-QQ7PANOP.js +59 -0
- package/dist/{chunk-YHD6TUIR.cjs → chunk-QW2RW2GY.cjs} +2 -0
- package/dist/chunk-RAKO7UN7.js +114 -0
- package/dist/chunk-RBHANOYY.js +33 -0
- package/dist/chunk-RBZ7AFX7.cjs +29 -0
- package/dist/{chunk-GCXYXLRA.cjs → chunk-REMGR23V.cjs} +46 -49
- package/dist/chunk-ROLA6EFO.cjs +85 -0
- package/dist/{chunk-RDF37HKB.cjs → chunk-SOLBYSLY.cjs} +3 -2
- package/dist/{chunk-KQGPTCQJ.js → chunk-SWCQM52V.js} +68 -25
- package/dist/{chunk-L3TWPROA.js → chunk-TBOLJDUG.js} +39 -24
- package/dist/chunk-TH26BQJG.js +101 -0
- package/dist/{chunk-245KJE5Y.cjs → chunk-TJNBASFD.cjs} +14 -6
- package/dist/chunk-TKKN34TV.js +229 -0
- package/dist/chunk-TQ33WBY5.cjs +74 -0
- package/dist/{chunk-EGFT4PGW.js → chunk-TWQDAUZU.js} +5 -2
- package/dist/{chunk-J2GSFVUV.cjs → chunk-TXPSTCG7.cjs} +74 -59
- package/dist/{chunk-5K6NGAVM.js → chunk-U4C3HW6P.js} +67 -52
- package/dist/{chunk-3WICOC33.js → chunk-UEIXJG45.js} +105 -81
- package/dist/{chunk-22D2CNTP.cjs → chunk-UGFVM77J.cjs} +5 -2
- package/dist/chunk-UOQECODR.js +34 -0
- package/dist/chunk-UR27UDTB.js +354 -0
- package/dist/chunk-UWFG2R2I.cjs +420 -0
- package/dist/{chunk-Y72HH2TF.cjs → chunk-UXLW45ZE.cjs} +102 -28
- package/dist/{chunk-FPHU2ES6.cjs → chunk-VBOFPU5M.cjs} +6 -0
- package/dist/{chunk-NTSDP2WB.js → chunk-VDWJMWDF.js} +54 -24
- package/dist/{chunk-3O3MOK5C.cjs → chunk-VGEV44V2.cjs} +944 -133
- package/dist/{chunk-IDFF5J2E.js → chunk-VKBIE6I6.js} +38 -7
- package/dist/{chunk-HBZU3RBZ.js → chunk-VRMZO6TB.js} +31 -8
- package/dist/chunk-VUGOOGHB.js +400 -0
- package/dist/chunk-WBU4Q4GS.cjs +400 -0
- package/dist/chunk-WGLBC5AY.cjs +59 -0
- package/dist/{chunk-KWXVKLQ5.cjs → chunk-WGNMOVMT.cjs} +7 -82
- package/dist/{chunk-RKJTGGMU.cjs → chunk-WKRDBCP2.cjs} +221 -16
- package/dist/chunk-WRTXCQ3V.cjs +4291 -0
- package/dist/chunk-WTB7AFL6.cjs +101 -0
- package/dist/{chunk-NDMIPTV4.js → chunk-WZV6UVPY.js} +8 -3
- package/dist/chunk-XF2WIKHR.cjs +34 -0
- package/dist/{chunk-W7RYQJLO.cjs → chunk-XGMI6IYB.cjs} +46 -15
- package/dist/{chunk-NA6WQDYW.js → chunk-XIVFAD2L.js} +918 -107
- package/dist/chunk-XV2HXRHX.js +85 -0
- package/dist/{chunk-3VTAFAL2.js → chunk-Y3M2DABP.js} +16 -12
- package/dist/{chunk-QNGEW5TC.js → chunk-YV63VW4K.js} +1 -1
- package/dist/{chunk-UJ2JSM6H.js → chunk-YVQI26H4.js} +2 -0
- package/dist/{chunk-X2YOZQIP.cjs → chunk-YWTIXHU6.cjs} +266 -19
- package/dist/chunk-YZWE7XSM.js +5 -0
- package/dist/{chunk-TUAITHWL.js → chunk-Z3XSSF7B.js} +2 -1
- package/dist/{chunk-6UJMCWRY.js → chunk-Z4LIPMPM.js} +6 -0
- package/dist/chunk-ZASDSY7P.cjs +114 -0
- package/dist/{chunk-R33VKSH5.cjs → chunk-ZHJ7JGME.cjs} +11 -11
- package/dist/chunk-ZPD2AO3U.js +866 -0
- package/dist/{chunk-7UOUW76C.js → chunk-ZQAT5VT5.js} +101 -24
- package/dist/chunk-ZR46OJNZ.js +152 -0
- package/dist/{chunk-7TQH3CL4.cjs → chunk-ZZ63NW7A.cjs} +78 -35
- package/dist/clear-33TWQ2ES.cjs +12 -0
- package/dist/{clear-A3N4GK2S.js → clear-OFLFQ3MR.js} +3 -3
- package/dist/{communityInstaller-LOP2EDH5.js → communityInstaller-COB2KTOW.js} +8 -5
- package/dist/communityInstaller-TWMGPSYM.cjs +22 -0
- package/dist/completion-IIZMHXYP.cjs +17 -0
- package/dist/completion-PT4VM2H2.js +17 -0
- package/dist/config-KL6WU7R2.cjs +20 -0
- package/dist/{config-HPJPKTO6.js → config-R4O7GBTY.js} +6 -4
- package/dist/{constants-LISJW3DD.js → constants-HVCHVQAF.js} +1 -1
- package/dist/constants-RLMJ5D5P.cjs +21 -0
- package/dist/{defaultHooks-IHSJR2AX.cjs → defaultHooks-2V2CQL63.cjs} +25 -10
- package/dist/{defaultHooks-KUKHK3AG.js → defaultHooks-TMHDU3FS.js} +25 -10
- package/dist/export-3PK3VFCE.js +15 -0
- package/dist/export-WLGNWEMJ.cjs +15 -0
- package/dist/feedback-G635NCLJ.js +18 -0
- package/dist/feedback-LLMK3TZH.cjs +18 -0
- package/dist/fffSearchProvider-2YCNKOYD.js +412 -0
- package/dist/fffSearchProvider-W6627E2V.cjs +412 -0
- package/dist/{filesystem-Z7BWAWMZ.js → filesystem-L6DQKGWK.js} +3 -2
- package/dist/filesystem-PGUPCMVK.cjs +11 -0
- package/dist/help-BAXLP2M2.cjs +12 -0
- package/dist/{help-GFQXNZOK.js → help-X3OAZ3CY.js} +2 -2
- package/dist/history-6HOJSEMT.cjs +14 -0
- package/dist/{history-E3N6BJP7.js → history-YKFPHBJN.js} +2 -2
- package/dist/hooks-7TA4PIIB.js +18 -0
- package/dist/hooks-XVFU67T2.cjs +18 -0
- package/dist/{i18n-SY7QRM22.js → i18n-2KBUU7XL.js} +1 -1
- package/dist/i18n-MUJMKTFM.cjs +33 -0
- package/dist/ide-CCQ33PGC.cjs +15 -0
- package/dist/ide-VLVFBZ5F.js +15 -0
- package/dist/immediateCommandRouter-MTEHZXQX.js +15 -0
- package/dist/immediateCommandRouter-ROXU3MWT.cjs +15 -0
- package/dist/{import-W7SVLSTC.js → import-4CHYLS4K.js} +3 -3
- package/dist/{import-ADI37ZUR.cjs → import-I7T4ZHYL.cjs} +3 -3
- package/dist/import-J46F54JY.cjs +10 -0
- package/dist/{import-KGKKZ3B7.js → import-JWPYKXCZ.js} +2 -2
- package/dist/index.cjs +744 -23015
- package/dist/index.d.cts +93 -0
- package/dist/index.d.ts +93 -0
- package/dist/index.js +780 -23051
- package/dist/{init-7MFK626E.js → init-262MWZV4.js} +2 -2
- package/dist/init-EE5Y7RBL.cjs +10 -0
- package/dist/inkMode-VUE6ZDLD.cjs +7 -0
- package/dist/inkMode-WBNFOSAT.js +7 -0
- package/dist/inputPrompt-IIFKCX5Q.cjs +90 -0
- package/dist/inputPrompt-YGBHDUEP.js +90 -0
- package/dist/language-CVLPB7OV.js +21 -0
- package/dist/language-ZTWFHUSV.cjs +21 -0
- package/dist/learn-PON7I5QS.js +23 -0
- package/dist/learn-XLRSVNA3.cjs +23 -0
- package/dist/login-223QTGBG.cjs +26 -0
- package/dist/login-6IKTBUBY.js +26 -0
- package/dist/logout-RN2AG6SI.js +23 -0
- package/dist/logout-U3M4FFX7.cjs +23 -0
- package/dist/mcp-5O6PUL4G.js +20 -0
- package/dist/mcp-NUQ76QQB.cjs +20 -0
- package/dist/{mcp-install-2FEROZTL.js → mcp-install-6XWXLFVY.js} +17 -10
- package/dist/{mcp-install-WM6BQRI5.cjs → mcp-install-P6DHES7V.cjs} +21 -14
- package/dist/memory-CYMDQ2YC.cjs +10 -0
- package/dist/{memory-J73WZH2I.js → memory-Q54CESNM.js} +2 -2
- package/dist/{model-AES267IN.js → model-6AJ77PJG.js} +2 -2
- package/dist/model-IDRCKDML.cjs +10 -0
- package/dist/new-7LEWOUF2.cjs +12 -0
- package/dist/{new-5CLF3MKH.js → new-ZXHEWC2S.js} +3 -3
- package/dist/onboarding-FXX7YHSJ.cjs +35 -0
- package/dist/onboarding-JYNMK6NI.js +35 -0
- package/dist/permissions-YBNSANIA.cjs +10 -0
- package/dist/permissions-YHJMVA6L.js +10 -0
- package/dist/plan-XEJMOT55.cjs +13 -0
- package/dist/{plan-65HMS5HQ.js → plan-YYUAXPTL.js} +3 -1
- package/dist/pr-review-CW6J7P62.cjs +9 -0
- package/dist/pr-review-YZSBQVT2.js +9 -0
- package/dist/quit-B43SJ6E4.cjs +10 -0
- package/dist/{quit-XDZYRSPU.js → quit-GWTNHQSP.js} +2 -2
- package/dist/rawMode-6W5AXAKI.cjs +7 -0
- package/dist/rawMode-GFNLXQPU.js +7 -0
- package/dist/{registry-PTHWERKC.js → registry-34GL6BNJ.js} +29 -44
- package/dist/{registry-IVT4G2RT.cjs → registry-V24W7YK6.cjs} +65 -80
- package/dist/repeat-P4FAPE3Y.cjs +17 -0
- package/dist/{repeat-EVCWUL6Z.js → repeat-RALE6AUO.js} +7 -3
- package/dist/resume-DYVOQN5L.cjs +16 -0
- package/dist/resume-M25UQKOX.js +16 -0
- package/dist/review-QHP2KP4Q.js +9 -0
- package/dist/review-UWHWQHCB.cjs +9 -0
- package/dist/ripgrep-67SCU2BA.cjs +9 -0
- package/dist/ripgrep-VHJQQ55W.js +9 -0
- package/dist/rpc-NPS3PU4O.cjs +3730 -0
- package/dist/rpc-S3DGW6KV.js +3730 -0
- package/dist/search-CPX4PWHP.js +20 -0
- package/dist/search-VUF3M4N3.cjs +20 -0
- package/dist/{sessions-6GWEBMKS.js → sessions-IYAXMK23.js} +2 -2
- package/dist/sessions-JODKER5D.cjs +10 -0
- package/dist/{settings-BXR6SBJP.js → settings-55BNW6BF.js} +11 -8
- package/dist/settings-BKTS7OMC.cjs +33 -0
- package/dist/setup-IRC5HQG2.js +29 -0
- package/dist/setup-MMQ7TWOP.cjs +29 -0
- package/dist/share-6JRQECAH.cjs +17 -0
- package/dist/share-YM5MJKMO.js +17 -0
- package/dist/{skills-PG542VEB.cjs → skills-GGMZOVIE.cjs} +13 -10
- package/dist/skills-LWSOKOSH.cjs +29 -0
- package/dist/{skills-ZZCIAS7C.js → skills-MVIZNHT4.js} +12 -9
- package/dist/skills-VWOMV3CR.js +29 -0
- package/dist/{skills-install-SRC3Z2MS.js → skills-install-QBA5RCV6.js} +21 -70
- package/dist/{skills-install-67DOBPJC.cjs → skills-install-VTAMCNNY.cjs} +34 -83
- package/dist/skills-new-GPL46YV2.js +18 -0
- package/dist/skills-new-L5BEZN5V.cjs +18 -0
- package/dist/slashCommands-FBPCIWM5.cjs +95 -0
- package/dist/slashCommands-FCWY5DXW.js +95 -0
- package/dist/status-3B5SDZPL.js +17 -0
- package/dist/status-TTGRF6NC.cjs +17 -0
- package/dist/summarizer-DGPHE5IQ.js +17 -0
- package/dist/summarizer-JNXLUAQG.cjs +17 -0
- package/dist/sync-77CXVVTK.cjs +21 -0
- package/dist/{sync-VU2NSJ4O.js → sync-7BILIQHP.js} +3 -3
- package/dist/sync-7OKF6636.js +21 -0
- package/dist/sync-EH4K5U3N.cjs +40 -0
- package/dist/{teammate-SD26GR37.js → teammate-GZQSCIMS.js} +28 -7
- package/dist/{teammate-SXRVXNQV.cjs → teammate-J6PHGL23.cjs} +29 -8
- package/dist/theme-64BYGJ57.cjs +21 -0
- package/dist/theme-YJE6HEON.js +21 -0
- package/dist/tools-3PPTTKFV.js +9 -0
- package/dist/tools-THIQA7WC.cjs +9 -0
- package/dist/ui/questionModal.cjs +8 -5
- package/dist/ui/questionModal.js +7 -4
- package/dist/undo-PRTEGL2J.cjs +10 -0
- package/dist/{undo-OL2EDBRY.js → undo-SZEHLX7X.js} +2 -2
- package/dist/web-3BA2WV37.cjs +37 -0
- package/dist/web-6FYGBX5K.js +37 -0
- package/dist/workspaceSafety-MDJGHK6D.cjs +9 -0
- package/dist/workspaceSafety-XOUMUBVB.js +9 -0
- package/dist/yolo-GF2YD7ZI.js +9 -0
- package/dist/yolo-OGDA7HNC.cjs +9 -0
- package/dist/yoloMode-3DJDA75U.cjs +17 -0
- package/dist/yoloMode-4JOOSU26.js +17 -0
- package/package.json +46 -49
- package/dist/AgentRegistry-HRPN6ZOF.cjs +0 -10
- package/dist/CommunitySkillsCache-KE435RAR.cjs +0 -8
- package/dist/GitHubRegistryFetcher-I45SESIL.cjs +0 -7
- package/dist/LearnAdvisor-FLBA6FDD.js +0 -9
- package/dist/LearnAdvisor-GG3CXQF3.cjs +0 -9
- package/dist/MemoryManager-2LQPIYVE.cjs +0 -8
- package/dist/PermissionManager-X57BXHJ6.cjs +0 -11
- package/dist/ProviderFactory-KPJOGQWF.cjs +0 -9
- package/dist/SessionManager-YBJAZXNO.cjs +0 -10
- package/dist/SkillsRegistry-7O72A6TZ.cjs +0 -9
- package/dist/SubAgent-JT4HZHN7.js +0 -11
- package/dist/SubAgent-VPNYDWAU.cjs +0 -11
- package/dist/SyncApiClient-HQXJL5BT.cjs +0 -11
- package/dist/about-4DB5KTHW.js +0 -12
- package/dist/about-LXAOXZFT.cjs +0 -12
- package/dist/actionExecutor-23JB2WUC.js +0 -19
- package/dist/actionExecutor-X5UEZSKH.cjs +0 -19
- package/dist/add-dir-YC37DMSF.cjs +0 -10
- package/dist/agents-YF3BSUU5.js +0 -12
- package/dist/agents-ZOUHPMYR.cjs +0 -12
- package/dist/agents-new-HSH4GQPG.js +0 -14
- package/dist/agents-new-VYUDOCE7.cjs +0 -14
- package/dist/autoSkill-X5W52WOE.cjs +0 -20
- package/dist/automode-SJGM7VEI.cjs +0 -10
- package/dist/chunk-ALYU6VTM.js +0 -105
- package/dist/chunk-B53A2NM2.js +0 -2030
- package/dist/chunk-BJXSNT46.js +0 -100
- package/dist/chunk-CB4E2T5N.cjs +0 -312
- package/dist/chunk-DNUOXBHL.js +0 -539
- package/dist/chunk-EFX2QSZX.cjs +0 -33
- package/dist/chunk-H2ZRHQQV.js +0 -33
- package/dist/chunk-HNRPK5MY.cjs +0 -85
- package/dist/chunk-HVKOZ2VP.cjs +0 -115
- package/dist/chunk-JJLYWH5Y.cjs +0 -100
- package/dist/chunk-LWUJFGOZ.js +0 -115
- package/dist/chunk-MERYP6AM.cjs +0 -539
- package/dist/chunk-MZAPWNAC.cjs +0 -207
- package/dist/chunk-PGESAU2W.cjs +0 -2030
- package/dist/chunk-SYVYLZZF.cjs +0 -24
- package/dist/chunk-SZOLA6FR.js +0 -111
- package/dist/chunk-VWDHR4HV.js +0 -168
- package/dist/chunk-Y45G6ZO5.cjs +0 -168
- package/dist/chunk-YRLYSQEQ.cjs +0 -105
- package/dist/chunk-ZYVS43MU.js +0 -312
- package/dist/clear-GK4IEUUS.cjs +0 -12
- package/dist/communityInstaller-XXC7RLE4.cjs +0 -19
- package/dist/completion-HWABSAEL.js +0 -14
- package/dist/completion-IUUVQG4D.cjs +0 -14
- package/dist/config-HF7WOLZF.cjs +0 -18
- package/dist/constants-PEO3P2SJ.cjs +0 -21
- package/dist/export-QJAV2FCZ.js +0 -12
- package/dist/export-XSRFXGWU.cjs +0 -12
- package/dist/feedback-4TCIL3ML.cjs +0 -15
- package/dist/feedback-SJ6VVEY3.js +0 -15
- package/dist/filesystem-W56QZUJF.cjs +0 -10
- package/dist/help-ISBVQL3S.cjs +0 -12
- package/dist/history-XQ4GTSFU.cjs +0 -14
- package/dist/hooks-CJNKJ5PF.js +0 -13
- package/dist/hooks-UTMBTAXT.cjs +0 -13
- package/dist/i18n-N7QQ7A5M.cjs +0 -33
- package/dist/ide-RTA4UJV4.js +0 -12
- package/dist/ide-VWVOLIFF.cjs +0 -12
- package/dist/immediateCommandRouter-BW34JNXL.js +0 -9
- package/dist/immediateCommandRouter-SHOVNB5X.cjs +0 -9
- package/dist/import-ZLJVONXH.cjs +0 -10
- package/dist/init-TBKAB4LZ.cjs +0 -10
- package/dist/language-MDSHEXHB.cjs +0 -18
- package/dist/language-PXTQSHIG.js +0 -18
- package/dist/learn-623TW5EK.cjs +0 -20
- package/dist/learn-BCPV7GM2.js +0 -20
- package/dist/localProjectPermissions-BHQXEWZJ.cjs +0 -18
- package/dist/localProjectPermissions-GMOUYQM6.js +0 -18
- package/dist/login-QMVEETWJ.js +0 -20
- package/dist/login-QYMXAL3K.cjs +0 -20
- package/dist/logout-2CMTDAOJ.js +0 -18
- package/dist/logout-ZOHVZAUK.cjs +0 -18
- package/dist/mcp-IUVKK65S.js +0 -18
- package/dist/mcp-TXC7PYG3.cjs +0 -18
- package/dist/memory-WRIHDEPK.cjs +0 -10
- package/dist/model-RLP75SF5.cjs +0 -10
- package/dist/new-HLSFL6A4.cjs +0 -12
- package/dist/permissions-GP6FTGZ2.js +0 -13
- package/dist/permissions-O6EKKPOG.cjs +0 -13
- package/dist/plan-MCAXDIM2.cjs +0 -11
- package/dist/quit-TQX6GXA5.cjs +0 -10
- package/dist/repeat-BSPS5TWD.cjs +0 -13
- package/dist/resume-2GOPDLL4.cjs +0 -13
- package/dist/resume-37IUVDA6.js +0 -13
- package/dist/search-7KUSHIBL.cjs +0 -17
- package/dist/search-OJGDRIMA.js +0 -17
- package/dist/sessions-CYYCHSQG.cjs +0 -10
- package/dist/settings-2D7CAO66.cjs +0 -30
- package/dist/share-BXQY5IQU.js +0 -14
- package/dist/share-OSFXZBGS.cjs +0 -14
- package/dist/skills-FL6O6AOM.cjs +0 -26
- package/dist/skills-PNKQZRNK.js +0 -26
- package/dist/skills-new-XFMEHHIF.cjs +0 -15
- package/dist/skills-new-ZNZPHUKS.js +0 -15
- package/dist/slashCommands-LLCNPK3X.js +0 -76
- package/dist/slashCommands-RXZZS6RE.cjs +0 -76
- package/dist/status-BCECUJXT.cjs +0 -11
- package/dist/status-EFO7MQU3.js +0 -11
- package/dist/sync-IJYJ6KKM.js +0 -18
- package/dist/sync-LFT6SBPF.cjs +0 -18
- package/dist/sync-U7SDPBNZ.cjs +0 -40
- package/dist/theme-AWBHSG7J.cjs +0 -18
- package/dist/theme-TQLBPJ2E.js +0 -18
- package/dist/undo-IBBGP7A2.cjs +0 -10
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveRipgrepCommand
|
|
3
|
+
} from "./chunk-UOQECODR.js";
|
|
4
|
+
|
|
5
|
+
// src/startup/checks.ts
|
|
6
|
+
import { spawn } from "child_process";
|
|
7
|
+
import { constants as fsConstants } from "fs";
|
|
8
|
+
import os from "os";
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import fs from "fs-extra";
|
|
11
|
+
var GIT_COMMAND_TIMEOUT_MS = 5e3;
|
|
12
|
+
var toolCheckResultsPromise;
|
|
13
|
+
function getCurrentBunVersion() {
|
|
14
|
+
return process.versions.bun;
|
|
15
|
+
}
|
|
16
|
+
var REQUIRED_TOOLS = [
|
|
17
|
+
{
|
|
18
|
+
name: "git",
|
|
19
|
+
command: "git",
|
|
20
|
+
versionFlag: "--version",
|
|
21
|
+
required: true,
|
|
22
|
+
description: "Version control (required for file tracking, undo, and git operations)",
|
|
23
|
+
installHints: {
|
|
24
|
+
darwin: "brew install git",
|
|
25
|
+
linux: "sudo apt install git # or: sudo dnf install git",
|
|
26
|
+
win32: "winget install Git.Git # or download from https://git-scm.com"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "ripgrep",
|
|
31
|
+
command: "rg",
|
|
32
|
+
versionFlag: "--version",
|
|
33
|
+
required: false,
|
|
34
|
+
description: "Fast code search (recommended for better search performance)",
|
|
35
|
+
installHints: {
|
|
36
|
+
darwin: "brew install ripgrep",
|
|
37
|
+
linux: "sudo apt install ripgrep # or: cargo install ripgrep",
|
|
38
|
+
win32: "winget install BurntSushi.ripgrep # or: scoop install ripgrep"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
];
|
|
42
|
+
var OPTIONAL_TOOLS = [
|
|
43
|
+
{
|
|
44
|
+
name: "node",
|
|
45
|
+
command: "node",
|
|
46
|
+
versionFlag: "--version",
|
|
47
|
+
required: false,
|
|
48
|
+
description: "Node.js runtime (for npm/yarn package management)",
|
|
49
|
+
installHints: {
|
|
50
|
+
darwin: "brew install node # or: nvm install node",
|
|
51
|
+
linux: "sudo apt install nodejs # or: nvm install node",
|
|
52
|
+
win32: "winget install OpenJS.NodeJS # or download from https://nodejs.org"
|
|
53
|
+
},
|
|
54
|
+
minVersion: "18.0.0"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "bun",
|
|
58
|
+
command: "bun",
|
|
59
|
+
versionFlag: "--version",
|
|
60
|
+
required: false,
|
|
61
|
+
description: "Bun runtime (fast JavaScript/TypeScript runtime)",
|
|
62
|
+
installHints: {
|
|
63
|
+
darwin: "curl -fsSL https://bun.sh/install | bash",
|
|
64
|
+
linux: "curl -fsSL https://bun.sh/install | bash",
|
|
65
|
+
win32: 'powershell -c "irm bun.sh/install.ps1 | iex"'
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
];
|
|
69
|
+
function checkTool(tool) {
|
|
70
|
+
const platform = os.platform();
|
|
71
|
+
const installHint = tool.installHints[platform] || tool.installHints.linux;
|
|
72
|
+
const command = tool.command === "rg" ? resolveRipgrepCommand() : tool.command;
|
|
73
|
+
const currentBunVersion = tool.command === "bun" ? getCurrentBunVersion() : void 0;
|
|
74
|
+
if (tool.command === "bun") {
|
|
75
|
+
return Promise.resolve({
|
|
76
|
+
name: tool.name,
|
|
77
|
+
installed: currentBunVersion !== void 0,
|
|
78
|
+
version: currentBunVersion,
|
|
79
|
+
required: tool.required,
|
|
80
|
+
description: tool.description,
|
|
81
|
+
installHint: currentBunVersion === void 0 ? installHint : void 0
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
try {
|
|
86
|
+
const proc = spawn(command, [tool.versionFlag], {
|
|
87
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
88
|
+
});
|
|
89
|
+
let stdout = "";
|
|
90
|
+
let stderr = "";
|
|
91
|
+
const timeout = setTimeout(() => {
|
|
92
|
+
proc.kill();
|
|
93
|
+
resolve({
|
|
94
|
+
name: tool.name,
|
|
95
|
+
installed: false,
|
|
96
|
+
required: tool.required,
|
|
97
|
+
description: tool.description,
|
|
98
|
+
installHint
|
|
99
|
+
});
|
|
100
|
+
}, 5e3);
|
|
101
|
+
proc.stdout?.on("data", (chunk) => {
|
|
102
|
+
stdout += chunk.toString();
|
|
103
|
+
});
|
|
104
|
+
proc.stderr?.on("data", (chunk) => {
|
|
105
|
+
stderr += chunk.toString();
|
|
106
|
+
});
|
|
107
|
+
proc.on("close", (code) => {
|
|
108
|
+
clearTimeout(timeout);
|
|
109
|
+
if (code === 0) {
|
|
110
|
+
const output = (stdout || stderr).trim();
|
|
111
|
+
const versionMatch = output.match(/(\d+\.\d+(\.\d+)?)/);
|
|
112
|
+
const version = versionMatch ? versionMatch[1] : "unknown";
|
|
113
|
+
resolve({
|
|
114
|
+
name: tool.name,
|
|
115
|
+
installed: true,
|
|
116
|
+
version,
|
|
117
|
+
required: tool.required,
|
|
118
|
+
description: tool.description
|
|
119
|
+
});
|
|
120
|
+
} else {
|
|
121
|
+
resolve({
|
|
122
|
+
name: tool.name,
|
|
123
|
+
installed: false,
|
|
124
|
+
required: tool.required,
|
|
125
|
+
description: tool.description,
|
|
126
|
+
installHint
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
proc.on("error", () => {
|
|
131
|
+
clearTimeout(timeout);
|
|
132
|
+
resolve({
|
|
133
|
+
name: tool.name,
|
|
134
|
+
installed: false,
|
|
135
|
+
required: tool.required,
|
|
136
|
+
description: tool.description,
|
|
137
|
+
installHint
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
} catch {
|
|
141
|
+
resolve({
|
|
142
|
+
name: tool.name,
|
|
143
|
+
installed: false,
|
|
144
|
+
required: tool.required,
|
|
145
|
+
description: tool.description,
|
|
146
|
+
installHint
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function checkStartupTools() {
|
|
152
|
+
toolCheckResultsPromise ??= Promise.all(
|
|
153
|
+
[...REQUIRED_TOOLS, ...OPTIONAL_TOOLS].map((tool) => checkTool(tool))
|
|
154
|
+
);
|
|
155
|
+
return toolCheckResultsPromise;
|
|
156
|
+
}
|
|
157
|
+
async function checkWorkspaceWritable(workspaceRoot) {
|
|
158
|
+
try {
|
|
159
|
+
const testFile = `${workspaceRoot}/.autohand-write-test-${Date.now()}`;
|
|
160
|
+
await fs.writeFile(testFile, "test");
|
|
161
|
+
await fs.remove(testFile);
|
|
162
|
+
return { writable: true };
|
|
163
|
+
} catch (error) {
|
|
164
|
+
return {
|
|
165
|
+
writable: false,
|
|
166
|
+
error: `Cannot write to workspace: ${error.message}`
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async function validateWorkspacePath(workspaceRoot) {
|
|
171
|
+
try {
|
|
172
|
+
if (!await fs.pathExists(workspaceRoot)) {
|
|
173
|
+
return {
|
|
174
|
+
valid: false,
|
|
175
|
+
error: `Workspace path does not exist: ${workspaceRoot}`
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const stats = await fs.stat(workspaceRoot);
|
|
179
|
+
if (!stats.isDirectory()) {
|
|
180
|
+
return {
|
|
181
|
+
valid: false,
|
|
182
|
+
error: `Workspace path is not a directory: ${workspaceRoot}`
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
await fs.access(workspaceRoot, fsConstants.R_OK | fsConstants.W_OK);
|
|
186
|
+
return { valid: true };
|
|
187
|
+
} catch (error) {
|
|
188
|
+
return {
|
|
189
|
+
valid: false,
|
|
190
|
+
error: `Cannot access workspace: ${error.message}`
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function isEmptyDirectory(dir) {
|
|
195
|
+
try {
|
|
196
|
+
const entries = fs.readdirSync(dir);
|
|
197
|
+
const significantEntries = entries.filter((e) => !e.startsWith(".") || e === ".git");
|
|
198
|
+
return significantEntries.length === 0;
|
|
199
|
+
} catch {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
function runGitCommand(args, cwd) {
|
|
204
|
+
return new Promise((resolve) => {
|
|
205
|
+
try {
|
|
206
|
+
const proc = spawn("git", args, { cwd, stdio: ["pipe", "pipe", "pipe"] });
|
|
207
|
+
let stdout = "";
|
|
208
|
+
const timeout = setTimeout(() => {
|
|
209
|
+
proc.kill();
|
|
210
|
+
resolve(void 0);
|
|
211
|
+
}, GIT_COMMAND_TIMEOUT_MS);
|
|
212
|
+
proc.stdout?.on("data", (chunk) => {
|
|
213
|
+
stdout += chunk.toString();
|
|
214
|
+
});
|
|
215
|
+
proc.on("close", (code) => {
|
|
216
|
+
clearTimeout(timeout);
|
|
217
|
+
resolve(code === 0 ? stdout.trim() : void 0);
|
|
218
|
+
});
|
|
219
|
+
proc.on("error", () => {
|
|
220
|
+
clearTimeout(timeout);
|
|
221
|
+
resolve(void 0);
|
|
222
|
+
});
|
|
223
|
+
} catch {
|
|
224
|
+
resolve(void 0);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
async function getGitBranch(workspaceRoot) {
|
|
229
|
+
const headBranch = readGitHeadBranch(workspaceRoot);
|
|
230
|
+
if (headBranch) return headBranch;
|
|
231
|
+
const branch = await runGitCommand(["rev-parse", "--abbrev-ref", "HEAD"], workspaceRoot);
|
|
232
|
+
if (branch) return branch;
|
|
233
|
+
return runGitCommand(["symbolic-ref", "--short", "HEAD"], workspaceRoot);
|
|
234
|
+
}
|
|
235
|
+
function readGitHeadBranch(workspaceRoot) {
|
|
236
|
+
try {
|
|
237
|
+
const head = fs.readFileSync(`${workspaceRoot}/.git/HEAD`, "utf8").trim();
|
|
238
|
+
const refPrefix = "ref: refs/heads/";
|
|
239
|
+
if (head.startsWith(refPrefix)) {
|
|
240
|
+
const branch = head.slice(refPrefix.length).trim();
|
|
241
|
+
return branch || void 0;
|
|
242
|
+
}
|
|
243
|
+
} catch {
|
|
244
|
+
return void 0;
|
|
245
|
+
}
|
|
246
|
+
return void 0;
|
|
247
|
+
}
|
|
248
|
+
async function checkGitRepo(workspaceRoot) {
|
|
249
|
+
const gitDirExists = fs.existsSync(`${workspaceRoot}/.git`);
|
|
250
|
+
if (gitDirExists) {
|
|
251
|
+
if (!fs.existsSync(`${workspaceRoot}/.git/HEAD`)) {
|
|
252
|
+
return { isGitRepo: true };
|
|
253
|
+
}
|
|
254
|
+
const branch = await getGitBranch(workspaceRoot);
|
|
255
|
+
return {
|
|
256
|
+
isGitRepo: true,
|
|
257
|
+
branch
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
if (isEmptyDirectory(workspaceRoot)) {
|
|
261
|
+
const initResult = await runGitCommand(["init"], workspaceRoot);
|
|
262
|
+
if (initResult !== void 0 || fs.existsSync(`${workspaceRoot}/.git/HEAD`)) {
|
|
263
|
+
if (os.platform() === "darwin") {
|
|
264
|
+
try {
|
|
265
|
+
const gitignorePath = `${workspaceRoot}/.gitignore`;
|
|
266
|
+
if (!fs.existsSync(gitignorePath)) {
|
|
267
|
+
fs.writeFileSync(gitignorePath, ".DS_Store\n");
|
|
268
|
+
}
|
|
269
|
+
} catch {
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const branch = await getGitBranch(workspaceRoot) || "main";
|
|
273
|
+
return {
|
|
274
|
+
isGitRepo: true,
|
|
275
|
+
branch,
|
|
276
|
+
initialized: true
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return { isGitRepo: false };
|
|
281
|
+
}
|
|
282
|
+
function getPackageManagerHint() {
|
|
283
|
+
const platform = os.platform();
|
|
284
|
+
switch (platform) {
|
|
285
|
+
case "darwin":
|
|
286
|
+
return "Homebrew (brew)";
|
|
287
|
+
case "linux":
|
|
288
|
+
return "apt, dnf, or your distro package manager";
|
|
289
|
+
case "win32":
|
|
290
|
+
return "winget, scoop, or chocolatey";
|
|
291
|
+
default:
|
|
292
|
+
return "your system package manager";
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
async function runStartupChecks(workspaceRoot) {
|
|
296
|
+
const warnings = [];
|
|
297
|
+
const [toolResults, workspaceCheck, gitCheck] = await Promise.all([
|
|
298
|
+
checkStartupTools(),
|
|
299
|
+
checkWorkspaceWritable(workspaceRoot),
|
|
300
|
+
checkGitRepo(workspaceRoot)
|
|
301
|
+
]);
|
|
302
|
+
for (const result of toolResults) {
|
|
303
|
+
if (!result.installed && result.required) {
|
|
304
|
+
warnings.push(`Required tool '${result.name}' is not installed`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (!workspaceCheck.writable) {
|
|
308
|
+
warnings.push(workspaceCheck.error || "Workspace is not writable");
|
|
309
|
+
}
|
|
310
|
+
const allRequiredMet = toolResults.filter((r) => r.required).every((r) => r.installed);
|
|
311
|
+
return {
|
|
312
|
+
tools: toolResults,
|
|
313
|
+
workspace: {
|
|
314
|
+
path: workspaceRoot,
|
|
315
|
+
writable: workspaceCheck.writable,
|
|
316
|
+
isGitRepo: gitCheck.isGitRepo,
|
|
317
|
+
branch: gitCheck.branch,
|
|
318
|
+
initialized: gitCheck.initialized,
|
|
319
|
+
error: workspaceCheck.error
|
|
320
|
+
},
|
|
321
|
+
allRequiredMet,
|
|
322
|
+
warnings
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
function printStartupCheckResults(results, verbose = false) {
|
|
326
|
+
const missingRequired = results.tools.filter((t) => t.required && !t.installed);
|
|
327
|
+
const missingOptional = results.tools.filter((t) => !t.required && !t.installed);
|
|
328
|
+
if (results.workspace.initialized) {
|
|
329
|
+
console.log(chalk.green("\u2713 Initialized git repository"));
|
|
330
|
+
console.log();
|
|
331
|
+
}
|
|
332
|
+
if (missingRequired.length === 0 && !verbose) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
console.log();
|
|
336
|
+
if (missingRequired.length > 0) {
|
|
337
|
+
console.log(chalk.red.bold("\u26A0 Missing required tools:"));
|
|
338
|
+
console.log();
|
|
339
|
+
for (const tool of missingRequired) {
|
|
340
|
+
console.log(chalk.red(` \u2717 ${tool.name}`));
|
|
341
|
+
console.log(chalk.gray(` ${tool.description}`));
|
|
342
|
+
console.log(chalk.cyan(` Install: ${tool.installHint}`));
|
|
343
|
+
console.log();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (missingOptional.length > 0 && verbose) {
|
|
347
|
+
console.log(chalk.yellow("Optional tools not installed:"));
|
|
348
|
+
for (const tool of missingOptional) {
|
|
349
|
+
console.log(chalk.yellow(` \u25CB ${tool.name}`) + chalk.gray(` - ${tool.description}`));
|
|
350
|
+
console.log(chalk.gray(` Install: ${tool.installHint}`));
|
|
351
|
+
}
|
|
352
|
+
console.log();
|
|
353
|
+
}
|
|
354
|
+
if (!results.workspace.writable) {
|
|
355
|
+
console.log(chalk.red(`\u26A0 Workspace issue: ${results.workspace.error}`));
|
|
356
|
+
console.log();
|
|
357
|
+
}
|
|
358
|
+
if (verbose) {
|
|
359
|
+
const installed = results.tools.filter((t) => t.installed);
|
|
360
|
+
if (installed.length > 0) {
|
|
361
|
+
console.log(chalk.green("Installed tools:"));
|
|
362
|
+
for (const tool of installed) {
|
|
363
|
+
const version = tool.version ? chalk.gray(` (${tool.version})`) : "";
|
|
364
|
+
console.log(chalk.green(` \u2713 ${tool.name}${version}`));
|
|
365
|
+
}
|
|
366
|
+
console.log();
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
if (!results.allRequiredMet) {
|
|
370
|
+
console.log(chalk.red.bold("Some required tools are missing. Autohand may not work correctly."));
|
|
371
|
+
console.log(chalk.gray(`Use ${getPackageManagerHint()} to install them.`));
|
|
372
|
+
console.log();
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
export {
|
|
377
|
+
validateWorkspacePath,
|
|
378
|
+
runStartupChecks,
|
|
379
|
+
printStartupCheckResults
|
|
380
|
+
};
|
|
381
|
+
/**
|
|
382
|
+
* @license
|
|
383
|
+
* Copyright 2025 Autohand AI LLC
|
|
384
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
385
|
+
*
|
|
386
|
+
* Startup checks - validates required tools and environment
|
|
387
|
+
*/
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;// src/core/HookManager.ts
|
|
2
2
|
var _child_process = require('child_process');
|
|
3
3
|
var _minimatch = require('minimatch');
|
|
4
4
|
var DEFAULT_HOOK_TIMEOUT = 5e3;
|
|
5
|
-
var HookManager = class {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
var HookManager = (_class = class {
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
__init() {this.initialized = false}
|
|
11
|
+
constructor(options) {;_class.prototype.__init.call(this);
|
|
8
12
|
this.settings = _nullishCoalesce(options.settings, () => ( { enabled: true, hooks: [] }));
|
|
9
13
|
this.workspaceRoot = options.workspaceRoot;
|
|
10
14
|
this.onPersist = options.onPersist;
|
|
11
15
|
this.onHookOutput = options.onHookOutput;
|
|
12
16
|
}
|
|
17
|
+
setWorkspaceRoot(workspaceRoot) {
|
|
18
|
+
this.workspaceRoot = workspaceRoot;
|
|
19
|
+
}
|
|
13
20
|
/**
|
|
14
21
|
* Initialize hooks - set up default hooks if none exist
|
|
15
22
|
*/
|
|
@@ -28,7 +35,7 @@ var HookManager = class {
|
|
|
28
35
|
*/
|
|
29
36
|
async installDefaultHooks() {
|
|
30
37
|
try {
|
|
31
|
-
const { DEFAULT_HOOKS, SMART_COMMIT_HOOK } = await Promise.resolve().then(() => _interopRequireWildcard(require("./defaultHooks-
|
|
38
|
+
const { DEFAULT_HOOKS, SMART_COMMIT_HOOK } = await Promise.resolve().then(() => _interopRequireWildcard(require("./defaultHooks-2V2CQL63.cjs")));
|
|
32
39
|
this.settings.hooks = [...DEFAULT_HOOKS, SMART_COMMIT_HOOK];
|
|
33
40
|
if (this.onPersist) {
|
|
34
41
|
await this.onPersist();
|
|
@@ -56,7 +63,7 @@ var HookManager = class {
|
|
|
56
63
|
*/
|
|
57
64
|
async mergeDefaultHooks() {
|
|
58
65
|
try {
|
|
59
|
-
const { DEFAULT_HOOKS, SMART_COMMIT_HOOK } = await Promise.resolve().then(() => _interopRequireWildcard(require("./defaultHooks-
|
|
66
|
+
const { DEFAULT_HOOKS, SMART_COMMIT_HOOK } = await Promise.resolve().then(() => _interopRequireWildcard(require("./defaultHooks-2V2CQL63.cjs")));
|
|
60
67
|
const allDefaults = [...DEFAULT_HOOKS, SMART_COMMIT_HOOK];
|
|
61
68
|
const existingHooks = _nullishCoalesce(this.settings.hooks, () => ( []));
|
|
62
69
|
const existingIds = new Set(existingHooks.map((h) => this.getHookIdentifier(h)));
|
|
@@ -84,7 +91,7 @@ var HookManager = class {
|
|
|
84
91
|
const hooksDir = path.join(os.homedir(), ".autohand", "hooks");
|
|
85
92
|
const isWindows = os.platform() === "win32";
|
|
86
93
|
await fs.ensureDir(hooksDir);
|
|
87
|
-
const { HOOK_SCRIPTS, HOOK_SCRIPTS_WINDOWS } = await Promise.resolve().then(() => _interopRequireWildcard(require("./defaultHooks-
|
|
94
|
+
const { HOOK_SCRIPTS, HOOK_SCRIPTS_WINDOWS } = await Promise.resolve().then(() => _interopRequireWildcard(require("./defaultHooks-2V2CQL63.cjs")));
|
|
88
95
|
for (const [scriptName, scriptContent] of Object.entries(HOOK_SCRIPTS)) {
|
|
89
96
|
const scriptPath = path.join(hooksDir, scriptName);
|
|
90
97
|
if (!await fs.pathExists(scriptPath)) {
|
|
@@ -274,6 +281,12 @@ var HookManager = class {
|
|
|
274
281
|
if (context.automodeCancelReason) env.HOOK_AUTOMODE_CANCEL_REASON = context.automodeCancelReason;
|
|
275
282
|
if (context.automodeCheckpointCommit) env.HOOK_AUTOMODE_CHECKPOINT = context.automodeCheckpointCommit;
|
|
276
283
|
if (context.automodeTotalCost !== void 0) env.HOOK_AUTOMODE_COST = String(context.automodeTotalCost);
|
|
284
|
+
if (context.event.startsWith("review:")) {
|
|
285
|
+
if (context.reviewPath) env.HOOK_REVIEW_PATH = context.reviewPath;
|
|
286
|
+
if (context.reviewScope) env.HOOK_REVIEW_SCOPE = context.reviewScope;
|
|
287
|
+
if (context.reviewError) env.HOOK_REVIEW_ERROR = context.reviewError;
|
|
288
|
+
if (context.reviewInstructions) env.HOOK_REVIEW_INSTRUCTIONS = context.reviewInstructions;
|
|
289
|
+
}
|
|
277
290
|
if (context.additionalWorkspaces && context.additionalWorkspaces.length > 0) {
|
|
278
291
|
env.HOOK_ADDITIONAL_WORKSPACES = JSON.stringify(context.additionalWorkspaces);
|
|
279
292
|
}
|
|
@@ -334,6 +347,11 @@ var HookManager = class {
|
|
|
334
347
|
automode_cancel_reason: context.automodeCancelReason,
|
|
335
348
|
automode_checkpoint_commit: context.automodeCheckpointCommit,
|
|
336
349
|
automode_total_cost: context.automodeTotalCost,
|
|
350
|
+
// Review context
|
|
351
|
+
review_path: context.reviewPath,
|
|
352
|
+
review_scope: context.reviewScope,
|
|
353
|
+
review_instructions: context.reviewInstructions,
|
|
354
|
+
review_error: context.reviewError,
|
|
337
355
|
// Multi-directory support
|
|
338
356
|
additional_workspaces: context.additionalWorkspaces
|
|
339
357
|
});
|
|
@@ -524,6 +542,12 @@ var HookManager = class {
|
|
|
524
542
|
"automode:cancel",
|
|
525
543
|
"automode:complete",
|
|
526
544
|
"automode:error",
|
|
545
|
+
// Review events
|
|
546
|
+
"review:start",
|
|
547
|
+
"review:end",
|
|
548
|
+
"review:paused",
|
|
549
|
+
"review:failed",
|
|
550
|
+
"review:completed",
|
|
527
551
|
// Team events
|
|
528
552
|
"team-created",
|
|
529
553
|
"teammate-spawned",
|
|
@@ -542,7 +566,7 @@ var HookManager = class {
|
|
|
542
566
|
}
|
|
543
567
|
return summary;
|
|
544
568
|
}
|
|
545
|
-
};
|
|
569
|
+
}, _class);
|
|
546
570
|
|
|
547
571
|
|
|
548
572
|
|
|
@@ -6,6 +6,8 @@ import { EventEmitter } from "events";
|
|
|
6
6
|
var READ_ONLY_TOOLS = [
|
|
7
7
|
// File reading
|
|
8
8
|
"read_file",
|
|
9
|
+
"fff_grep",
|
|
10
|
+
"fff_find",
|
|
9
11
|
"search",
|
|
10
12
|
"search_with_context",
|
|
11
13
|
"semantic_search",
|
|
@@ -30,10 +32,13 @@ var READ_ONLY_TOOLS = [
|
|
|
30
32
|
"recall_memory",
|
|
31
33
|
// Meta
|
|
32
34
|
"tools_registry",
|
|
35
|
+
"tool_search",
|
|
33
36
|
"plan",
|
|
37
|
+
"exit_plan_mode",
|
|
34
38
|
"ask_followup_question"
|
|
35
39
|
];
|
|
36
40
|
var PlanModeManager = class extends EventEmitter {
|
|
41
|
+
state;
|
|
37
42
|
constructor() {
|
|
38
43
|
super();
|
|
39
44
|
this.state = {
|
|
@@ -224,48 +229,50 @@ function getPlanModeManager() {
|
|
|
224
229
|
}
|
|
225
230
|
return planModeManager;
|
|
226
231
|
}
|
|
227
|
-
|
|
232
|
+
function formatPlanModeToggleMessage(enabled) {
|
|
233
|
+
if (enabled) {
|
|
234
|
+
return `${chalk.cyan("[PLAN]")} ${chalk.cyan("Plan mode active - tools are read-only")}`;
|
|
235
|
+
}
|
|
236
|
+
return `${chalk.gray("Plan mode")} ${chalk.red("OFF")}`;
|
|
237
|
+
}
|
|
238
|
+
async function plan(_ctx, args, opts) {
|
|
228
239
|
const manager = getPlanModeManager();
|
|
229
240
|
const subcommand = args?.trim().toLowerCase();
|
|
241
|
+
const out = opts?.output ?? console.log;
|
|
230
242
|
switch (subcommand) {
|
|
231
243
|
case "on":
|
|
232
244
|
case "enable":
|
|
233
245
|
if (manager.isEnabled()) {
|
|
234
|
-
|
|
246
|
+
out(chalk.yellow("Plan mode is already enabled."));
|
|
235
247
|
return null;
|
|
236
248
|
}
|
|
237
249
|
manager.enable();
|
|
238
|
-
|
|
239
|
-
console.log(chalk.gray("Tools are now read-only. Use /plan off to disable."));
|
|
240
|
-
console.log(chalk.gray("Tip: Press Shift+Tab twice to quickly toggle plan mode."));
|
|
250
|
+
out(formatPlanModeToggleMessage(true));
|
|
241
251
|
return null;
|
|
242
252
|
case "off":
|
|
243
253
|
case "disable":
|
|
244
254
|
if (!manager.isEnabled()) {
|
|
245
|
-
|
|
255
|
+
out(chalk.yellow("Plan mode is not enabled."));
|
|
246
256
|
return null;
|
|
247
257
|
}
|
|
248
258
|
manager.disable();
|
|
249
|
-
|
|
250
|
-
console.log(chalk.gray("Full tool access restored."));
|
|
259
|
+
out(formatPlanModeToggleMessage(false));
|
|
251
260
|
return null;
|
|
252
261
|
case "status":
|
|
253
|
-
return showPlanStatus(manager);
|
|
262
|
+
return showPlanStatus(manager, out);
|
|
254
263
|
case "":
|
|
255
264
|
case void 0:
|
|
256
265
|
if (manager.isEnabled()) {
|
|
257
266
|
manager.disable();
|
|
258
|
-
|
|
259
|
-
console.log(chalk.gray("Full tool access restored."));
|
|
267
|
+
out(formatPlanModeToggleMessage(false));
|
|
260
268
|
} else {
|
|
261
269
|
manager.enable();
|
|
262
|
-
|
|
263
|
-
console.log(chalk.gray("Tools are now read-only."));
|
|
270
|
+
out(formatPlanModeToggleMessage(true));
|
|
264
271
|
}
|
|
265
272
|
return null;
|
|
266
273
|
default:
|
|
267
|
-
|
|
268
|
-
|
|
274
|
+
out(chalk.yellow(`Unknown subcommand: ${subcommand}`));
|
|
275
|
+
out(chalk.gray(`
|
|
269
276
|
Usage:
|
|
270
277
|
/plan - Toggle plan mode
|
|
271
278
|
/plan on - Enable plan mode
|
|
@@ -279,39 +286,39 @@ Keyboard shortcut:
|
|
|
279
286
|
return null;
|
|
280
287
|
}
|
|
281
288
|
}
|
|
282
|
-
function showPlanStatus(manager) {
|
|
289
|
+
function showPlanStatus(manager, out = console.log) {
|
|
283
290
|
const enabled = manager.isEnabled();
|
|
284
291
|
const phase = manager.getPhase();
|
|
285
292
|
const plan2 = manager.getPlan();
|
|
286
293
|
const indicator = manager.getPromptIndicator();
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
294
|
+
out("");
|
|
295
|
+
out(chalk.bold.cyan("Plan Mode Status"));
|
|
296
|
+
out(chalk.gray("\u2500".repeat(40)));
|
|
297
|
+
out(`Status: ${enabled ? chalk.green("ENABLED") : chalk.gray("DISABLED")}`);
|
|
298
|
+
out(`Phase: ${chalk.cyan(phase)}`);
|
|
299
|
+
out(`Indicator: ${indicator || chalk.gray("(none)")}`);
|
|
293
300
|
if (plan2) {
|
|
294
301
|
const completed = plan2.steps.filter((s) => s.status === "completed").length;
|
|
295
302
|
const inProgress = plan2.steps.find((s) => s.status === "in_progress");
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
303
|
+
out("");
|
|
304
|
+
out(chalk.bold(`Plan: ${plan2.id}`));
|
|
305
|
+
out(`Progress: ${completed}/${plan2.steps.length} steps`);
|
|
306
|
+
out("");
|
|
300
307
|
for (const step of plan2.steps) {
|
|
301
308
|
const icon = getStepIcon(step.status);
|
|
302
309
|
const color = getStepColor(step.status);
|
|
303
|
-
|
|
310
|
+
out(color(` ${icon} ${step.number}. ${step.description}`));
|
|
304
311
|
}
|
|
305
312
|
if (inProgress) {
|
|
306
|
-
|
|
307
|
-
|
|
313
|
+
out("");
|
|
314
|
+
out(chalk.yellow(`Currently working on: Step ${inProgress.number}`));
|
|
308
315
|
}
|
|
309
316
|
} else {
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
317
|
+
out("");
|
|
318
|
+
out(chalk.gray("No plan created yet."));
|
|
319
|
+
out(chalk.gray("Ask the agent to create a plan for your task."));
|
|
313
320
|
}
|
|
314
|
-
|
|
321
|
+
out("");
|
|
315
322
|
return null;
|
|
316
323
|
}
|
|
317
324
|
function getStepIcon(status) {
|
|
@@ -342,6 +349,7 @@ function getStepColor(status) {
|
|
|
342
349
|
export {
|
|
343
350
|
metadata,
|
|
344
351
|
getPlanModeManager,
|
|
352
|
+
formatPlanModeToggleMessage,
|
|
345
353
|
plan
|
|
346
354
|
};
|
|
347
355
|
/**
|