@cofy-x/dsh-console 0.1.0-alpha.2 → 0.1.0-alpha.4
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/dist/{chunk-JFPTU3O3.js → chunk-ZO6HZW3P.js} +870 -816
- package/dist/dsh/index.js +1 -1
- package/dist/index.js +1 -1
- package/dist/ui/components/layout/resources/pokemon/1.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/10.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/100.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/10002.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10004.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10005.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10006.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/10013.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/10014.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/10015.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10016.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10017.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10018.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10027.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/10028.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/10029.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/10030.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/10039.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/10042.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10051.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10055.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10059.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10062.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10063.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10064.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10067.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10074.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10076.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10077.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/10078.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/10080.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/10082.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/10083.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/10084.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/10085.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/10088.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/101.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/102.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/104.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/108.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/11.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/111.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/113.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/114.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/116.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/117.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/118.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/120.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/129.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/13.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/132.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/133-starter.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/133.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/137.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/138.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/139.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/14.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/140.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/147.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/148.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/15.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/152.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/153.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/155.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/156.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/158.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/16.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/162.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/163.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/165.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/166.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/167.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/168.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/169.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/17.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/170.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/171.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/172-spiky-eared.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/172.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/173.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/174.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/175.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/176.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/177.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/179.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/180.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/183.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/187.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/188.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/189.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/19-alola.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/19.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/190.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/191.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/192.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/193.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/194.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/198.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/20-alola.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/20.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/200.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-a.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/201-b.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/201-c.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-d.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-e.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-exclamation.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-f.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-g.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/201-h.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-i.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-j.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-k.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-l.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-m.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-n.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/201-o.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-p.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-q.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/201-question.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/201-r.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/201-s.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/201-t.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-u.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/201-v.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/201-w.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/201-x.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/201-y.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201-z.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/201.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/203.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/204.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/205.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/207.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/209.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/21.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/210.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/211.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/215.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/216.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/217.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/218.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/219.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/22.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/220.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/221.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/222-galar.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/222.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/223.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/226.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/228.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/229.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/23.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/231.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/232.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/235.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/236.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/238.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/239.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/240.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/244.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/246.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/247.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/25-alola-cap.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/25-hoenn-cap.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/25-kalos-cap.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/25-original-cap.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/25-partner-cap.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/25-sinnoh-cap.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/25-starter.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/25-unova-cap.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/25-world-cap.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/251.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/252.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/253.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/255.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/258.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/259.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/261.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/262.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/263-galar.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/263.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/264-galar.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/264.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/265.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/266.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/267.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/268.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/269.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/27-alola.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/27.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/270.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/271.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/273.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/274.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/276.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/277.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/278.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/28-alola.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/280.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/281.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/283.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/284.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/285.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/287.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/288.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/29.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/290.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/293.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/294.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/296.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/297.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/298.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/299.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/30.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/300.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/301.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/304.txt +6 -0
- package/dist/ui/components/layout/resources/pokemon/305.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/306.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/307.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/309.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/311.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/312.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/313.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/314.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/315.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/316.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/317.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/318.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/32.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/320.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/322.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/323.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/325.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/326.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/327-blank.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/327-filled.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/327.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/328.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/329.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/33.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/331.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/333.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/334.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/335.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/336.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/337.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/339.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/341.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/343.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/345.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/346.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/347.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/348.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/349.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/35.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/351-rainy.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/351-snowy.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/351-sunny.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/351.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/352.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/353.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/354.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/355.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/356.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/358.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/360.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/361.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/363.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/364.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/365.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/366.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/367.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/368.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/369.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/37-alola.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/37.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/370.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/371.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/372.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/373.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/374.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/375.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/376.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/377.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/378.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/379.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/380.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/381.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/382.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/383.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/385.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/386-defense.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/386.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/387.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/388.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/389.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/39.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/390.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/391.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/392.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/393.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/394.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/396.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/397.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/399.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/400.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/401.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/402.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/403.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/404.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/406.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/408.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/409.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/41.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/410.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/411.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/412-plant.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/412-sandy.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/412-trash.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/412.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/413-plant.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/413-sandy.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/413-trash.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/413.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/414-plant.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/414.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/415.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/417.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/418.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/419.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/420.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/422-east.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/422-west.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/422.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/425.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/427.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/43.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/430.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/431.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/432.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/433.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/434.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/436.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/438.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/439.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/44.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/440.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/441.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/442.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/443.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/444.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/445.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/446.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/447.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/449.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/450.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/451.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/453.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/455.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/456.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/457.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/458.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/459.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/46.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/466.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/467.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/469.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/47.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/472.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/476.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/480.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/481.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/482.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/485.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/486.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/487-altered.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/487.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/489.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/490.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/492-land.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/492-sky.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/492.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/494.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/495.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/496.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/497.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/498.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/499.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/5.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/50-alola.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/50.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/501.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/502.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/503.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/504.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/505.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/506.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/507.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/509.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/51-alola.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/511.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/513.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/514.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/515.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/516.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/517.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/519.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/52-alola.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/52-galar.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/52.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/520.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/522.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/523.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/524.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/525.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/527.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/529.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/53-alola.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/531.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/532.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/533.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/535.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/536.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/54.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/540.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/541.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/542.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/543.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/544.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/546.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/548.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/550-blue-striped.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/550-red-striped.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/550.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/551.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/552.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/554-galar.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/554.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/555-zen.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/557.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/559.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/56.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/562-galar.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/562.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/564.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/565.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/566.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/567.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/568.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/57.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/570.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/572.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/574.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/575.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/577.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/578.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/58.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/580.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/581.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/582.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/583.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/585-autumn.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/585-spring.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/585-summer.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/585-winter.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/585.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/586-spring.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/586-summer.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/586-winter.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/586.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/588.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/590.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/592.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/594.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/595.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/597.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/599.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/60.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/600.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/602.txt +6 -0
- package/dist/ui/components/layout/resources/pokemon/603.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/604.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/605.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/607.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/608.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/61.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/610.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/611.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/613.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/615.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/616.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/618--galar.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/618.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/619.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/622.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/624.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/627.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/629.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/63.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/632.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/633.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/634.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/636.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/648-aria.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/648-pirouette.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/648.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/649-burn.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/649-chill.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/649-douse.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/649-shock.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/649.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/650.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/651.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/652.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/653.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/654.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/655.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/656.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/657.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/658-ash.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/658.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/66.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/661.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/662.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/664.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/665.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/667.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/669-blue.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/669-orange.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/669-red.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/669-white.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/669-yellow.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/669.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/67.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/670-blue.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/670-eternal.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/670-orange.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/670-red.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/670-white.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/670-yellow.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/670.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/672.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/673.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/674.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/677.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/679.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/680.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/682.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/684.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/686.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/688.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/69.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/690.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/692.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/694.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/696.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/697.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/698.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/7.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/70.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/703.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/704.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/705.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/708.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/710-average.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/710-large.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/710-small.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/710-super.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/710.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/711-small.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/712.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/714.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/719.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/72.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/720.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/722.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/723.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/725.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/726.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/728.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/729.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/731.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/732.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/733.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/734.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/735.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/736.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/737.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/739.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/74-alola.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/74.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/740.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/741-baile.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/741-pau.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/741-pom-pom.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/741-sensu.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/741.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/742.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/744-own-tempo.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/744.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/746-solo.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/746.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/747.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/749.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/75-alola.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/75.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/751.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/753.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/755.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/757.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/759.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/761.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/762.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/767.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/769.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/77-galar.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/77.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/771.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/774-blue.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/774-green.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/774-indigo.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/774-orange.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/774-red.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/774-violet.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/774-yellow.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/774.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/775-form-1.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/775.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/779.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/782.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/789.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/79-galar.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/79.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/790.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/793.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/8.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/808.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/81.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/810.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/819.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/821.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/825.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/827.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/829.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/83.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/831.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/833.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/835.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/837.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/838.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/84.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/840.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/843.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/846.txt +8 -0
- package/dist/ui/components/layout/resources/pokemon/847.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/848.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/850.txt +5 -0
- package/dist/ui/components/layout/resources/pokemon/854.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/856.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/857.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/859.txt +10 -0
- package/dist/ui/components/layout/resources/pokemon/86.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/860.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/868.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/871.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/872.txt +7 -0
- package/dist/ui/components/layout/resources/pokemon/877-hangry.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/877.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/878.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/88-alola.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/88.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/885.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/886.txt +12 -0
- package/dist/ui/components/layout/resources/pokemon/891.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/90.txt +9 -0
- package/dist/ui/components/layout/resources/pokemon/92.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/96.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/98.txt +11 -0
- package/dist/ui/components/layout/resources/pokemon/manifest.json +9 -0
- package/package.json +8 -7
|
@@ -505,7 +505,7 @@ var SETTINGS_SCHEMA = {
|
|
|
505
505
|
description: "The type of ASCII art resources to display in horizontal layout.",
|
|
506
506
|
showInDialog: true,
|
|
507
507
|
options: [
|
|
508
|
-
{ value: "pokemon", label: "
|
|
508
|
+
{ value: "pokemon", label: "Pokefetch Pok\xE9mon" },
|
|
509
509
|
{ value: "custom", label: "Custom Directory" }
|
|
510
510
|
]
|
|
511
511
|
},
|
|
@@ -849,7 +849,7 @@ function getSettingsSchema() {
|
|
|
849
849
|
function isPlainObject(item) {
|
|
850
850
|
return !!item && typeof item === "object" && !Array.isArray(item);
|
|
851
851
|
}
|
|
852
|
-
function mergeRecursively(target, source, getMergeStrategyForPath2,
|
|
852
|
+
function mergeRecursively(target, source, getMergeStrategyForPath2, path15 = []) {
|
|
853
853
|
for (const key of Object.keys(source)) {
|
|
854
854
|
if (key === "__proto__") {
|
|
855
855
|
continue;
|
|
@@ -858,7 +858,7 @@ function mergeRecursively(target, source, getMergeStrategyForPath2, path16 = [])
|
|
|
858
858
|
if (srcValue === void 0) {
|
|
859
859
|
continue;
|
|
860
860
|
}
|
|
861
|
-
const newPath = [...
|
|
861
|
+
const newPath = [...path15, key];
|
|
862
862
|
const objValue = target[key];
|
|
863
863
|
const mergeStrategy = getMergeStrategyForPath2(newPath);
|
|
864
864
|
if (mergeStrategy === "shallow_merge" /* SHALLOW_MERGE */ && objValue && srcValue) {
|
|
@@ -1189,11 +1189,11 @@ function formatValidationError(error, filePath) {
|
|
|
1189
1189
|
const MAX_ERRORS_TO_DISPLAY = 5;
|
|
1190
1190
|
const displayedIssues = error.issues.slice(0, MAX_ERRORS_TO_DISPLAY);
|
|
1191
1191
|
for (const issue of displayedIssues) {
|
|
1192
|
-
const
|
|
1192
|
+
const path15 = issue.path.reduce(
|
|
1193
1193
|
(acc, curr) => typeof curr === "number" ? `${acc}[${curr}]` : `${acc ? acc + "." : ""}${curr}`,
|
|
1194
1194
|
""
|
|
1195
1195
|
);
|
|
1196
|
-
lines.push(`Error in: ${
|
|
1196
|
+
lines.push(`Error in: ${path15 || "(root)"}`);
|
|
1197
1197
|
lines.push(` ${issue.message}`);
|
|
1198
1198
|
if (issue.code === "invalid_type") {
|
|
1199
1199
|
const expected = issue.expected;
|
|
@@ -1275,11 +1275,11 @@ function resolveEnvVarsInObjectInternal(obj, visited, customEnv) {
|
|
|
1275
1275
|
var USER_SETTINGS_PATH = Storage.getGlobalSettingsPath();
|
|
1276
1276
|
var USER_SETTINGS_DIR = path.dirname(USER_SETTINGS_PATH);
|
|
1277
1277
|
var DEFAULT_EXCLUDED_ENV_VARS = ["DEBUG", "DEBUG_MODE"];
|
|
1278
|
-
function getMergeStrategyForPath(
|
|
1278
|
+
function getMergeStrategyForPath(path15) {
|
|
1279
1279
|
let current = void 0;
|
|
1280
1280
|
let currentSchema = getSettingsSchema();
|
|
1281
1281
|
let parent = void 0;
|
|
1282
|
-
for (const key of
|
|
1282
|
+
for (const key of path15) {
|
|
1283
1283
|
if (!currentSchema || !currentSchema[key]) {
|
|
1284
1284
|
if (parent?.additionalProperties?.mergeStrategy) {
|
|
1285
1285
|
return parent.additionalProperties.mergeStrategy;
|
|
@@ -1337,8 +1337,8 @@ function mergeSettings(system, systemDefaults, user, workspace, isTrusted) {
|
|
|
1337
1337
|
system
|
|
1338
1338
|
);
|
|
1339
1339
|
}
|
|
1340
|
-
function setNestedProperty(obj,
|
|
1341
|
-
const keys =
|
|
1340
|
+
function setNestedProperty(obj, path15, value) {
|
|
1341
|
+
const keys = path15.split(".");
|
|
1342
1342
|
const lastKey = keys.pop();
|
|
1343
1343
|
if (!lastKey) return;
|
|
1344
1344
|
let current = obj;
|
|
@@ -4587,7 +4587,7 @@ var ToolResultDisplay = ({
|
|
|
4587
4587
|
] });
|
|
4588
4588
|
case "search-paths":
|
|
4589
4589
|
return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", children: [
|
|
4590
|
-
resultDisplay2.paths.map((
|
|
4590
|
+
resultDisplay2.paths.map((path15) => /* @__PURE__ */ jsx18(Text15, { children: path15 }, path15)),
|
|
4591
4591
|
resultDisplay2.truncated && /* @__PURE__ */ jsxs15(Text15, { dimColor: true, children: [
|
|
4592
4592
|
"Showing ",
|
|
4593
4593
|
String(resultDisplay2.paths.length),
|
|
@@ -6039,10 +6039,11 @@ import { Box as Box25 } from "ink";
|
|
|
6039
6039
|
import { Box as Box21, Text as Text20 } from "ink";
|
|
6040
6040
|
|
|
6041
6041
|
// src/generated/git-commit.ts
|
|
6042
|
-
var GIT_COMMIT_INFO = "
|
|
6042
|
+
var GIT_COMMIT_INFO = "1318436";
|
|
6043
6043
|
|
|
6044
6044
|
// src/ui/components/dialogs/about-box.tsx
|
|
6045
6045
|
import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
6046
|
+
var POKEFETCH_PROJECT_URL = "https://github.com/cofy-x/pokefetch";
|
|
6046
6047
|
var AboutBox = ({
|
|
6047
6048
|
cliVersion,
|
|
6048
6049
|
osVersion,
|
|
@@ -6073,6 +6074,13 @@ var AboutBox = ({
|
|
|
6073
6074
|
/* @__PURE__ */ jsxs21(Box21, { flexDirection: "row", children: [
|
|
6074
6075
|
/* @__PURE__ */ jsx27(Box21, { width: "35%", children: /* @__PURE__ */ jsx27(Text20, { bold: true, color: theme.text.link, children: "OS" }) }),
|
|
6075
6076
|
/* @__PURE__ */ jsx27(Box21, { children: /* @__PURE__ */ jsx27(Text20, { color: theme.text.primary, children: osVersion }) })
|
|
6077
|
+
] }),
|
|
6078
|
+
/* @__PURE__ */ jsxs21(Box21, { flexDirection: "row", children: [
|
|
6079
|
+
/* @__PURE__ */ jsx27(Box21, { width: "35%", children: /* @__PURE__ */ jsx27(Text20, { bold: true, color: theme.text.link, children: "Header Art" }) }),
|
|
6080
|
+
/* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", children: [
|
|
6081
|
+
/* @__PURE__ */ jsx27(Text20, { color: theme.text.primary, children: "Pokefetch by cofy-x" }),
|
|
6082
|
+
/* @__PURE__ */ jsx27(Text20, { color: theme.text.link, children: POKEFETCH_PROJECT_URL })
|
|
6083
|
+
] })
|
|
6076
6084
|
] })
|
|
6077
6085
|
]
|
|
6078
6086
|
}
|
|
@@ -6172,24 +6180,81 @@ var getStatusColor = (value, thresholds, options = {}) => {
|
|
|
6172
6180
|
// src/ui/state/session-stats.ts
|
|
6173
6181
|
var computeSessionStats = (metrics) => {
|
|
6174
6182
|
const { models, tools } = metrics;
|
|
6183
|
+
const totalUncachedInputTokens = Object.values(models).reduce(
|
|
6184
|
+
(acc, model) => acc + model.tokens.inputTokens,
|
|
6185
|
+
0
|
|
6186
|
+
);
|
|
6175
6187
|
const totalCacheReadTokens = Object.values(models).reduce(
|
|
6176
6188
|
(acc, model) => acc + model.tokens.cacheReadTokens,
|
|
6177
6189
|
0
|
|
6178
6190
|
);
|
|
6191
|
+
const totalCacheWriteTokens = Object.values(models).reduce(
|
|
6192
|
+
(acc, model) => acc + model.tokens.cacheWriteTokens,
|
|
6193
|
+
0
|
|
6194
|
+
);
|
|
6179
6195
|
const totalPromptTokens = Object.values(models).reduce(
|
|
6180
6196
|
(acc, model) => acc + model.tokens.inputTokens + model.tokens.cacheReadTokens + model.tokens.cacheWriteTokens,
|
|
6181
6197
|
0
|
|
6182
6198
|
);
|
|
6199
|
+
const totalOutputTokens = Object.values(models).reduce(
|
|
6200
|
+
(acc, model) => acc + model.tokens.outputTokens,
|
|
6201
|
+
0
|
|
6202
|
+
);
|
|
6203
|
+
const totalReasoningTokens = Object.values(models).reduce(
|
|
6204
|
+
(acc, model) => acc + model.tokens.reasoningTokens,
|
|
6205
|
+
0
|
|
6206
|
+
);
|
|
6207
|
+
const totalSessionTokens = Object.values(models).reduce(
|
|
6208
|
+
(acc, model) => acc + model.tokens.totalTokens,
|
|
6209
|
+
0
|
|
6210
|
+
);
|
|
6183
6211
|
const cacheEfficiency = totalPromptTokens > 0 ? totalCacheReadTokens / totalPromptTokens * 100 : 0;
|
|
6184
6212
|
const successRate = tools.totalCalls > 0 ? tools.totalSuccess / tools.totalCalls * 100 : 0;
|
|
6185
6213
|
return {
|
|
6186
6214
|
cacheEfficiency,
|
|
6187
6215
|
successRate,
|
|
6216
|
+
totalUncachedInputTokens,
|
|
6188
6217
|
totalCacheReadTokens,
|
|
6189
|
-
|
|
6218
|
+
totalCacheWriteTokens,
|
|
6219
|
+
totalPromptTokens,
|
|
6220
|
+
totalOutputTokens,
|
|
6221
|
+
totalReasoningTokens,
|
|
6222
|
+
totalSessionTokens
|
|
6190
6223
|
};
|
|
6191
6224
|
};
|
|
6192
6225
|
|
|
6226
|
+
// src/ui/hooks/terminal/use-terminal-size.ts
|
|
6227
|
+
import { useEffect as useEffect11, useState as useState9 } from "react";
|
|
6228
|
+
function useTerminalSize() {
|
|
6229
|
+
const [size, setSize] = useState9({
|
|
6230
|
+
columns: process.stdout.columns || 60,
|
|
6231
|
+
rows: process.stdout.rows || 20
|
|
6232
|
+
});
|
|
6233
|
+
useEffect11(() => {
|
|
6234
|
+
function updateSize() {
|
|
6235
|
+
setSize({
|
|
6236
|
+
columns: process.stdout.columns || 60,
|
|
6237
|
+
rows: process.stdout.rows || 20
|
|
6238
|
+
});
|
|
6239
|
+
}
|
|
6240
|
+
process.stdout.on("resize", updateSize);
|
|
6241
|
+
return () => {
|
|
6242
|
+
process.stdout.off("resize", updateSize);
|
|
6243
|
+
};
|
|
6244
|
+
}, []);
|
|
6245
|
+
return size;
|
|
6246
|
+
}
|
|
6247
|
+
|
|
6248
|
+
// src/ui/utils/format-token-count.ts
|
|
6249
|
+
function formatTokenCount(tokens) {
|
|
6250
|
+
if (tokens < 1e3) return String(tokens);
|
|
6251
|
+
const divisor = tokens < 1e6 ? 1e3 : 1e6;
|
|
6252
|
+
const suffix = divisor === 1e3 ? "k" : "m";
|
|
6253
|
+
const value = tokens / divisor;
|
|
6254
|
+
const fractionDigits = value < 100 && !Number.isInteger(value) ? 1 : 0;
|
|
6255
|
+
return `${value.toFixed(fractionDigits)}${suffix}`;
|
|
6256
|
+
}
|
|
6257
|
+
|
|
6193
6258
|
// src/ui/components/stats/stats-display.tsx
|
|
6194
6259
|
import { jsx as jsx30, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
6195
6260
|
var StatRow = ({
|
|
@@ -6199,56 +6264,86 @@ var StatRow = ({
|
|
|
6199
6264
|
/* @__PURE__ */ jsx30(Box22, { width: 22, children: /* @__PURE__ */ jsx30(Text22, { color: theme.text.link, children: title }) }),
|
|
6200
6265
|
children
|
|
6201
6266
|
] });
|
|
6202
|
-
var ModelUsageTable = ({ models,
|
|
6267
|
+
var ModelUsageTable = ({ models, compact }) => {
|
|
6203
6268
|
const rows = Object.entries(models);
|
|
6204
6269
|
if (rows.length === 0) return null;
|
|
6205
|
-
|
|
6206
|
-
|
|
6207
|
-
|
|
6208
|
-
|
|
6270
|
+
if (compact) {
|
|
6271
|
+
return /* @__PURE__ */ jsxs22(Box22, { flexDirection: "column", marginTop: 1, children: [
|
|
6272
|
+
/* @__PURE__ */ jsx30(Box22, { marginBottom: 1, children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.accent, children: "Model Usage" }) }),
|
|
6273
|
+
rows.map(([name2, metrics], index) => {
|
|
6274
|
+
const promptTokens = metrics.tokens.inputTokens + metrics.tokens.cacheReadTokens + metrics.tokens.cacheWriteTokens;
|
|
6275
|
+
const totalTokens = metrics.tokens.totalTokens;
|
|
6276
|
+
return /* @__PURE__ */ jsxs22(
|
|
6277
|
+
Box22,
|
|
6278
|
+
{
|
|
6279
|
+
flexDirection: "column",
|
|
6280
|
+
marginTop: index === 0 ? 0 : 1,
|
|
6281
|
+
children: [
|
|
6282
|
+
/* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.primary, wrap: "wrap", children: name2 }),
|
|
6283
|
+
/* @__PURE__ */ jsx30(StatRow, { title: "Requests:", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.requests }) }),
|
|
6284
|
+
/* @__PURE__ */ jsx30(StatRow, { title: "Input:", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.inputTokens.toLocaleString() }) }),
|
|
6285
|
+
/* @__PURE__ */ jsx30(StatRow, { title: "Cache Read:", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.cacheReadTokens.toLocaleString() }) }),
|
|
6286
|
+
/* @__PURE__ */ jsx30(StatRow, { title: "Cache Write:", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.cacheWriteTokens.toLocaleString() }) }),
|
|
6287
|
+
/* @__PURE__ */ jsx30(StatRow, { title: "Prompt Total:", children: /* @__PURE__ */ jsx30(Text22, { children: promptTokens.toLocaleString() }) }),
|
|
6288
|
+
/* @__PURE__ */ jsx30(StatRow, { title: "Output:", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.outputTokens.toLocaleString() }) }),
|
|
6289
|
+
/* @__PURE__ */ jsx30(StatRow, { title: "Reasoning:", children: /* @__PURE__ */ jsx30(Text22, { color: theme.text.accent, children: metrics.tokens.reasoningTokens.toLocaleString() }) }),
|
|
6290
|
+
/* @__PURE__ */ jsx30(StatRow, { title: "Total:", children: /* @__PURE__ */ jsx30(Text22, { bold: true, children: totalTokens.toLocaleString() }) })
|
|
6291
|
+
]
|
|
6292
|
+
},
|
|
6293
|
+
name2
|
|
6294
|
+
);
|
|
6295
|
+
}),
|
|
6296
|
+
/* @__PURE__ */ jsx30(Box22, { marginTop: 1, children: /* @__PURE__ */ jsx30(Text22, { color: theme.text.secondary, children: "Reasoning tokens are included in Output." }) })
|
|
6297
|
+
] });
|
|
6298
|
+
}
|
|
6209
6299
|
return /* @__PURE__ */ jsxs22(Box22, { flexDirection: "column", marginTop: 1, children: [
|
|
6210
|
-
/* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.
|
|
6300
|
+
/* @__PURE__ */ jsx30(Box22, { marginBottom: 1, children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.accent, children: "Model Usage" }) }),
|
|
6211
6301
|
/* @__PURE__ */ jsxs22(Box22, { children: [
|
|
6212
|
-
/* @__PURE__ */ jsx30(Box22, { width:
|
|
6213
|
-
/* @__PURE__ */ jsx30(Box22, { width:
|
|
6214
|
-
/* @__PURE__ */ jsx30(Box22, { width:
|
|
6215
|
-
/* @__PURE__ */ jsx30(Box22, { width:
|
|
6216
|
-
/* @__PURE__ */ jsx30(Box22, { width:
|
|
6217
|
-
/* @__PURE__ */ jsx30(Box22, { width:
|
|
6302
|
+
/* @__PURE__ */ jsx30(Box22, { width: 23, children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Model" }) }),
|
|
6303
|
+
/* @__PURE__ */ jsx30(Box22, { width: 9, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Requests" }) }),
|
|
6304
|
+
/* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Input" }) }),
|
|
6305
|
+
/* @__PURE__ */ jsx30(Box22, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Cache Read" }) }),
|
|
6306
|
+
/* @__PURE__ */ jsx30(Box22, { width: 13, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Cache Write" }) }),
|
|
6307
|
+
/* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Prompt" }) }),
|
|
6308
|
+
/* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Output" }) }),
|
|
6309
|
+
/* @__PURE__ */ jsx30(Box22, { width: 11, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Reasoning" }) }),
|
|
6310
|
+
/* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.link, children: "Total" }) })
|
|
6218
6311
|
] }),
|
|
6219
|
-
rows.map(([name2, metrics]) =>
|
|
6220
|
-
|
|
6221
|
-
|
|
6222
|
-
/* @__PURE__ */
|
|
6223
|
-
|
|
6224
|
-
metrics.
|
|
6225
|
-
|
|
6226
|
-
metrics.tokens.
|
|
6227
|
-
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
|
|
6231
|
-
|
|
6232
|
-
|
|
6233
|
-
|
|
6234
|
-
|
|
6235
|
-
" ",
|
|
6236
|
-
/* @__PURE__ */ jsxs22(Text22, { color: cacheColor, children: [
|
|
6237
|
-
cacheEfficiency.toFixed(1),
|
|
6238
|
-
"%"
|
|
6239
|
-
] }),
|
|
6240
|
-
" of prompt tokens)"
|
|
6241
|
-
] }) })
|
|
6312
|
+
rows.map(([name2, metrics]) => {
|
|
6313
|
+
const promptTokens = metrics.tokens.inputTokens + metrics.tokens.cacheReadTokens + metrics.tokens.cacheWriteTokens;
|
|
6314
|
+
const totalTokens = metrics.tokens.totalTokens;
|
|
6315
|
+
return /* @__PURE__ */ jsxs22(Box22, { children: [
|
|
6316
|
+
/* @__PURE__ */ jsx30(Box22, { width: 23, children: /* @__PURE__ */ jsx30(Text22, { bold: true, color: theme.text.primary, wrap: "truncate-end", children: name2 }) }),
|
|
6317
|
+
/* @__PURE__ */ jsx30(Box22, { width: 9, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.requests }) }),
|
|
6318
|
+
/* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.inputTokens.toLocaleString() }) }),
|
|
6319
|
+
/* @__PURE__ */ jsx30(Box22, { width: 12, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.cacheReadTokens.toLocaleString() }) }),
|
|
6320
|
+
/* @__PURE__ */ jsx30(Box22, { width: 13, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.cacheWriteTokens.toLocaleString() }) }),
|
|
6321
|
+
/* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: promptTokens.toLocaleString() }) }),
|
|
6322
|
+
/* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { children: metrics.tokens.outputTokens.toLocaleString() }) }),
|
|
6323
|
+
/* @__PURE__ */ jsx30(Box22, { width: 11, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { color: theme.text.accent, children: metrics.tokens.reasoningTokens.toLocaleString() }) }),
|
|
6324
|
+
/* @__PURE__ */ jsx30(Box22, { width: 10, justifyContent: "flex-end", children: /* @__PURE__ */ jsx30(Text22, { bold: true, children: totalTokens.toLocaleString() }) })
|
|
6325
|
+
] }, name2);
|
|
6326
|
+
}),
|
|
6327
|
+
/* @__PURE__ */ jsx30(Box22, { marginTop: 1, children: /* @__PURE__ */ jsx30(Text22, { color: theme.text.secondary, children: "Reasoning tokens are included in Output." }) })
|
|
6242
6328
|
] });
|
|
6243
6329
|
};
|
|
6244
6330
|
var StatsDisplay = ({ duration, title }) => {
|
|
6245
6331
|
const { stats } = useSessionStats();
|
|
6332
|
+
const { columns } = useTerminalSize();
|
|
6246
6333
|
const { models, tools } = stats.metrics;
|
|
6247
6334
|
const computed = computeSessionStats(stats.metrics);
|
|
6248
6335
|
const successColor = getStatusColor(computed.successRate, {
|
|
6249
6336
|
green: TOOL_SUCCESS_RATE_HIGH,
|
|
6250
6337
|
yellow: TOOL_SUCCESS_RATE_MEDIUM
|
|
6251
6338
|
});
|
|
6339
|
+
const cacheColor = getStatusColor(computed.cacheEfficiency, {
|
|
6340
|
+
green: CACHE_EFFICIENCY_HIGH,
|
|
6341
|
+
yellow: CACHE_EFFICIENCY_MEDIUM
|
|
6342
|
+
});
|
|
6343
|
+
const validContextWindow = stats.contextWindow !== void 0 && stats.contextWindow > 0 ? stats.contextWindow : void 0;
|
|
6344
|
+
const showLatestPrompt = stats.lastPromptTokenCount > 0 || validContextWindow !== void 0;
|
|
6345
|
+
const contextPercent = validContextWindow === void 0 ? void 0 : Math.round(stats.lastPromptTokenCount / validContextWindow * 100);
|
|
6346
|
+
const latestPrompt = `${formatTokenCount(stats.lastPromptTokenCount)}/${validContextWindow === void 0 ? "?" : formatTokenCount(validContextWindow)}${contextPercent === void 0 ? "" : ` (${contextPercent}%)`}`;
|
|
6252
6347
|
return /* @__PURE__ */ jsxs22(
|
|
6253
6348
|
Box22,
|
|
6254
6349
|
{
|
|
@@ -6263,6 +6358,24 @@ var StatsDisplay = ({ duration, title }) => {
|
|
|
6263
6358
|
/* @__PURE__ */ jsx30(Box22, { height: 1 }),
|
|
6264
6359
|
/* @__PURE__ */ jsx30(StatRow, { title: "Session ID:", children: /* @__PURE__ */ jsx30(Text22, { children: stats.sessionId }) }),
|
|
6265
6360
|
/* @__PURE__ */ jsx30(StatRow, { title: "Wall Time:", children: /* @__PURE__ */ jsx30(Text22, { children: duration }) }),
|
|
6361
|
+
showLatestPrompt && /* @__PURE__ */ jsx30(StatRow, { title: "Latest Prompt:", children: /* @__PURE__ */ jsx30(Text22, { children: latestPrompt }) }),
|
|
6362
|
+
/* @__PURE__ */ jsx30(StatRow, { title: "Session Tokens:", children: /* @__PURE__ */ jsxs22(Text22, { children: [
|
|
6363
|
+
computed.totalSessionTokens.toLocaleString(),
|
|
6364
|
+
" total (",
|
|
6365
|
+
computed.totalPromptTokens.toLocaleString(),
|
|
6366
|
+
" prompt / ",
|
|
6367
|
+
computed.totalOutputTokens.toLocaleString(),
|
|
6368
|
+
" output)"
|
|
6369
|
+
] }) }),
|
|
6370
|
+
computed.totalCacheReadTokens > 0 && /* @__PURE__ */ jsx30(StatRow, { title: "Cache Read:", children: /* @__PURE__ */ jsxs22(Text22, { children: [
|
|
6371
|
+
computed.totalCacheReadTokens.toLocaleString(),
|
|
6372
|
+
" (",
|
|
6373
|
+
/* @__PURE__ */ jsxs22(Text22, { color: cacheColor, children: [
|
|
6374
|
+
computed.cacheEfficiency.toFixed(1),
|
|
6375
|
+
"%"
|
|
6376
|
+
] }),
|
|
6377
|
+
" of prompt tokens)"
|
|
6378
|
+
] }) }),
|
|
6266
6379
|
/* @__PURE__ */ jsx30(StatRow, { title: "Tool Calls:", children: /* @__PURE__ */ jsxs22(Text22, { children: [
|
|
6267
6380
|
tools.totalCalls,
|
|
6268
6381
|
" (",
|
|
@@ -6285,8 +6398,7 @@ var StatsDisplay = ({ duration, title }) => {
|
|
|
6285
6398
|
ModelUsageTable,
|
|
6286
6399
|
{
|
|
6287
6400
|
models,
|
|
6288
|
-
|
|
6289
|
-
totalCacheReadTokens: computed.totalCacheReadTokens
|
|
6401
|
+
compact: columns < 120
|
|
6290
6402
|
}
|
|
6291
6403
|
)
|
|
6292
6404
|
]
|
|
@@ -6528,28 +6640,6 @@ var HistoryItemDisplay = ({
|
|
|
6528
6640
|
);
|
|
6529
6641
|
};
|
|
6530
6642
|
|
|
6531
|
-
// src/ui/hooks/terminal/use-terminal-size.ts
|
|
6532
|
-
import { useEffect as useEffect11, useState as useState9 } from "react";
|
|
6533
|
-
function useTerminalSize() {
|
|
6534
|
-
const [size, setSize] = useState9({
|
|
6535
|
-
columns: process.stdout.columns || 60,
|
|
6536
|
-
rows: process.stdout.rows || 20
|
|
6537
|
-
});
|
|
6538
|
-
useEffect11(() => {
|
|
6539
|
-
function updateSize() {
|
|
6540
|
-
setSize({
|
|
6541
|
-
columns: process.stdout.columns || 60,
|
|
6542
|
-
rows: process.stdout.rows || 20
|
|
6543
|
-
});
|
|
6544
|
-
}
|
|
6545
|
-
process.stdout.on("resize", updateSize);
|
|
6546
|
-
return () => {
|
|
6547
|
-
process.stdout.off("resize", updateSize);
|
|
6548
|
-
};
|
|
6549
|
-
}, []);
|
|
6550
|
-
return size;
|
|
6551
|
-
}
|
|
6552
|
-
|
|
6553
6643
|
// src/ui/components/indicators/quitting-display.tsx
|
|
6554
6644
|
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
6555
6645
|
var QuittingDisplay = () => {
|
|
@@ -6572,7 +6662,7 @@ var QuittingDisplay = () => {
|
|
|
6572
6662
|
};
|
|
6573
6663
|
|
|
6574
6664
|
// src/ui/components/layout/screen-reader-app-layout.tsx
|
|
6575
|
-
import { Box as
|
|
6665
|
+
import { Box as Box64 } from "ink";
|
|
6576
6666
|
|
|
6577
6667
|
// src/ui/components/indicators/notifications.tsx
|
|
6578
6668
|
import { Box as Box27, Text as Text25, useIsScreenReaderEnabled as useIsScreenReaderEnabled3 } from "ink";
|
|
@@ -9094,8 +9184,8 @@ function requiresRestart(key) {
|
|
|
9094
9184
|
function getDefaultValue(key) {
|
|
9095
9185
|
return getFlattenedSchema()[key]?.default;
|
|
9096
9186
|
}
|
|
9097
|
-
function getNestedValue(obj,
|
|
9098
|
-
const [first, ...rest] =
|
|
9187
|
+
function getNestedValue(obj, path15) {
|
|
9188
|
+
const [first, ...rest] = path15;
|
|
9099
9189
|
if (!first || !(first in obj)) {
|
|
9100
9190
|
return void 0;
|
|
9101
9191
|
}
|
|
@@ -9113,12 +9203,12 @@ function getEffectiveValue(key, settings, mergedSettings) {
|
|
|
9113
9203
|
if (!definition) {
|
|
9114
9204
|
return void 0;
|
|
9115
9205
|
}
|
|
9116
|
-
const
|
|
9117
|
-
let value = getNestedValue(settings,
|
|
9206
|
+
const path15 = key.split(".");
|
|
9207
|
+
let value = getNestedValue(settings, path15);
|
|
9118
9208
|
if (value !== void 0) {
|
|
9119
9209
|
return value;
|
|
9120
9210
|
}
|
|
9121
|
-
value = getNestedValue(mergedSettings,
|
|
9211
|
+
value = getNestedValue(mergedSettings, path15);
|
|
9122
9212
|
if (value !== void 0) {
|
|
9123
9213
|
return value;
|
|
9124
9214
|
}
|
|
@@ -9128,12 +9218,12 @@ function getDialogSettingKeys() {
|
|
|
9128
9218
|
return Object.values(getFlattenedSchema()).filter((definition) => definition.showInDialog !== false).map((definition) => definition.key);
|
|
9129
9219
|
}
|
|
9130
9220
|
function settingExistsInScope(key, scopeSettings) {
|
|
9131
|
-
const
|
|
9132
|
-
const value = getNestedValue(scopeSettings,
|
|
9221
|
+
const path15 = key.split(".");
|
|
9222
|
+
const value = getNestedValue(scopeSettings, path15);
|
|
9133
9223
|
return value !== void 0;
|
|
9134
9224
|
}
|
|
9135
|
-
function setNestedValue(obj,
|
|
9136
|
-
const [first, ...rest] =
|
|
9225
|
+
function setNestedValue(obj, path15, value) {
|
|
9226
|
+
const [first, ...rest] = path15;
|
|
9137
9227
|
if (!first) {
|
|
9138
9228
|
return obj;
|
|
9139
9229
|
}
|
|
@@ -9148,15 +9238,15 @@ function setNestedValue(obj, path16, value) {
|
|
|
9148
9238
|
return obj;
|
|
9149
9239
|
}
|
|
9150
9240
|
function setPendingSettingValue(key, value, pendingSettings) {
|
|
9151
|
-
const
|
|
9241
|
+
const path15 = key.split(".");
|
|
9152
9242
|
const newSettings = JSON.parse(JSON.stringify(pendingSettings));
|
|
9153
|
-
setNestedValue(newSettings,
|
|
9243
|
+
setNestedValue(newSettings, path15, value);
|
|
9154
9244
|
return newSettings;
|
|
9155
9245
|
}
|
|
9156
9246
|
function setPendingSettingValueAny(key, value, pendingSettings) {
|
|
9157
|
-
const
|
|
9247
|
+
const path15 = key.split(".");
|
|
9158
9248
|
const newSettings = structuredClone(pendingSettings);
|
|
9159
|
-
setNestedValue(newSettings,
|
|
9249
|
+
setNestedValue(newSettings, path15, value);
|
|
9160
9250
|
return newSettings;
|
|
9161
9251
|
}
|
|
9162
9252
|
function hasRestartRequiredSettings(modifiedSettings) {
|
|
@@ -9167,10 +9257,10 @@ function getRestartRequiredFromModified(modifiedSettings) {
|
|
|
9167
9257
|
}
|
|
9168
9258
|
function saveModifiedSettings(modifiedSettings, pendingSettings, loadedSettings, scope) {
|
|
9169
9259
|
modifiedSettings.forEach((settingKey) => {
|
|
9170
|
-
const
|
|
9260
|
+
const path15 = settingKey.split(".");
|
|
9171
9261
|
const value = getNestedValue(
|
|
9172
9262
|
pendingSettings,
|
|
9173
|
-
|
|
9263
|
+
path15
|
|
9174
9264
|
);
|
|
9175
9265
|
if (value === void 0) {
|
|
9176
9266
|
return;
|
|
@@ -14043,7 +14133,7 @@ var DialogManager = ({ terminalWidth }) => {
|
|
|
14043
14133
|
|
|
14044
14134
|
// src/ui/components/input/composer.tsx
|
|
14045
14135
|
import { useState as useState33 } from "react";
|
|
14046
|
-
import { Box as
|
|
14136
|
+
import { Box as Box58, useIsScreenReaderEnabled as useIsScreenReaderEnabled4 } from "ink";
|
|
14047
14137
|
|
|
14048
14138
|
// src/ui/components/indicators/loading-indicator.tsx
|
|
14049
14139
|
import { Box as Box45, Text as Text38 } from "ink";
|
|
@@ -16850,7 +16940,7 @@ var InputPrompt = ({
|
|
|
16850
16940
|
};
|
|
16851
16941
|
|
|
16852
16942
|
// src/ui/components/layout/footer.tsx
|
|
16853
|
-
import { Box as
|
|
16943
|
+
import { Box as Box54, Text as Text49 } from "ink";
|
|
16854
16944
|
|
|
16855
16945
|
// src/ui/components/layout/console-summary-display.tsx
|
|
16856
16946
|
import { Box as Box51, Text as Text45 } from "ink";
|
|
@@ -17083,8 +17173,33 @@ var DebugProfiler = ({ compact = false }) => {
|
|
|
17083
17173
|
] }, forceRefresh);
|
|
17084
17174
|
};
|
|
17085
17175
|
|
|
17086
|
-
// src/ui/components/
|
|
17176
|
+
// src/ui/components/stats/context-usage-display.tsx
|
|
17177
|
+
import { Box as Box53, Text as Text48 } from "ink";
|
|
17087
17178
|
import { jsx as jsx68, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
17179
|
+
var WARNING_PERCENT = 70;
|
|
17180
|
+
var ERROR_PERCENT = 85;
|
|
17181
|
+
function ContextUsageDisplay({
|
|
17182
|
+
promptTokens,
|
|
17183
|
+
contextWindow: contextWindow2,
|
|
17184
|
+
compact = false
|
|
17185
|
+
}) {
|
|
17186
|
+
const validContextWindow = contextWindow2 !== void 0 && contextWindow2 > 0 ? contextWindow2 : void 0;
|
|
17187
|
+
if (promptTokens === 0 && validContextWindow === void 0) return null;
|
|
17188
|
+
const percent = validContextWindow === void 0 ? void 0 : promptTokens / validContextWindow * 100;
|
|
17189
|
+
const color = percent !== void 0 && percent >= ERROR_PERCENT ? theme.status.error : percent !== void 0 && percent >= WARNING_PERCENT ? theme.status.warning : theme.text.secondary;
|
|
17190
|
+
const percentage = compact || percent === void 0 ? "" : ` (${Math.round(percent)}%)`;
|
|
17191
|
+
const usage = `${formatTokenCount(promptTokens)}/${validContextWindow === void 0 ? "?" : formatTokenCount(validContextWindow)}`;
|
|
17192
|
+
return /* @__PURE__ */ jsxs52(Box53, { children: [
|
|
17193
|
+
/* @__PURE__ */ jsx68(Text48, { color: theme.text.secondary, children: " | " }),
|
|
17194
|
+
/* @__PURE__ */ jsxs52(Text48, { color, children: [
|
|
17195
|
+
usage,
|
|
17196
|
+
percentage
|
|
17197
|
+
] })
|
|
17198
|
+
] });
|
|
17199
|
+
}
|
|
17200
|
+
|
|
17201
|
+
// src/ui/components/layout/footer.tsx
|
|
17202
|
+
import { jsx as jsx69, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
17088
17203
|
var isDevelopment = process.env["NODE_ENV"] === "development";
|
|
17089
17204
|
var Footer = () => {
|
|
17090
17205
|
const uiState = useUIState();
|
|
@@ -17120,8 +17235,8 @@ var Footer = () => {
|
|
|
17120
17235
|
const justifyContent = hideCWD && hideModelInfo ? "center" : "space-between";
|
|
17121
17236
|
const displayVimMode = vimEnabled ? vimMode : void 0;
|
|
17122
17237
|
const showRenderDiagnostics = debugMode || isDevelopment;
|
|
17123
|
-
return /* @__PURE__ */
|
|
17124
|
-
|
|
17238
|
+
return /* @__PURE__ */ jsxs53(
|
|
17239
|
+
Box54,
|
|
17125
17240
|
{
|
|
17126
17241
|
justifyContent,
|
|
17127
17242
|
width: terminalWidth,
|
|
@@ -17129,47 +17244,59 @@ var Footer = () => {
|
|
|
17129
17244
|
alignItems: "center",
|
|
17130
17245
|
paddingX: 1,
|
|
17131
17246
|
children: [
|
|
17132
|
-
(displayVimMode || !hideCWD) && /* @__PURE__ */
|
|
17133
|
-
displayVimMode && /* @__PURE__ */
|
|
17247
|
+
(displayVimMode || !hideCWD) && /* @__PURE__ */ jsxs53(Box54, { children: [
|
|
17248
|
+
displayVimMode && /* @__PURE__ */ jsxs53(Text49, { color: theme.text.secondary, children: [
|
|
17134
17249
|
"[",
|
|
17135
17250
|
displayVimMode,
|
|
17136
17251
|
"] "
|
|
17137
17252
|
] }),
|
|
17138
|
-
!hideCWD && (nightly ? /* @__PURE__ */
|
|
17253
|
+
!hideCWD && (nightly ? /* @__PURE__ */ jsxs53(ThemedGradient, { children: [
|
|
17139
17254
|
displayPath,
|
|
17140
|
-
branchName && /* @__PURE__ */
|
|
17255
|
+
branchName && /* @__PURE__ */ jsxs53(Text49, { children: [
|
|
17141
17256
|
" (",
|
|
17142
17257
|
branchName,
|
|
17143
17258
|
"*)"
|
|
17144
17259
|
] })
|
|
17145
|
-
] }) : /* @__PURE__ */
|
|
17260
|
+
] }) : /* @__PURE__ */ jsxs53(Text49, { color: theme.text.link, children: [
|
|
17146
17261
|
displayPath,
|
|
17147
|
-
branchName && /* @__PURE__ */
|
|
17262
|
+
branchName && /* @__PURE__ */ jsxs53(Text49, { color: theme.text.secondary, children: [
|
|
17148
17263
|
" (",
|
|
17149
17264
|
branchName,
|
|
17150
17265
|
"*)"
|
|
17151
17266
|
] })
|
|
17152
17267
|
] })),
|
|
17153
|
-
debugMode && /* @__PURE__ */
|
|
17268
|
+
debugMode && /* @__PURE__ */ jsx69(Text49, { color: theme.status.error, children: " " + (debugMessage || "--debug") })
|
|
17154
17269
|
] }),
|
|
17155
|
-
showRenderDiagnostics && /* @__PURE__ */
|
|
17156
|
-
|
|
17270
|
+
showRenderDiagnostics && /* @__PURE__ */ jsx69(
|
|
17271
|
+
Box54,
|
|
17157
17272
|
{
|
|
17158
17273
|
flexGrow: 1,
|
|
17159
17274
|
flexShrink: 1,
|
|
17160
17275
|
justifyContent: "center",
|
|
17161
17276
|
marginX: terminalWidth >= 120 ? 1 : 0,
|
|
17162
|
-
children: /* @__PURE__ */
|
|
17277
|
+
children: /* @__PURE__ */ jsx69(DebugProfiler, { compact: terminalWidth < 120 })
|
|
17163
17278
|
}
|
|
17164
17279
|
),
|
|
17165
|
-
!hideModelInfo && /* @__PURE__ */
|
|
17166
|
-
/* @__PURE__ */
|
|
17167
|
-
/* @__PURE__ */
|
|
17168
|
-
|
|
17280
|
+
!hideModelInfo && /* @__PURE__ */ jsxs53(Box54, { alignItems: "center", justifyContent: "flex-end", children: [
|
|
17281
|
+
/* @__PURE__ */ jsxs53(Box54, { alignItems: "center", justifyContent: "flex-end", children: [
|
|
17282
|
+
/* @__PURE__ */ jsx69(Text49, { color: theme.text.accent, children: model }),
|
|
17283
|
+
uiState.currentReasoningEffort && /* @__PURE__ */ jsxs53(Text49, { color: theme.text.link, children: [
|
|
17284
|
+
" ",
|
|
17285
|
+
uiState.currentReasoningEffort
|
|
17286
|
+
] }),
|
|
17287
|
+
/* @__PURE__ */ jsx69(
|
|
17288
|
+
ContextUsageDisplay,
|
|
17289
|
+
{
|
|
17290
|
+
promptTokens: uiState.sessionStats.lastPromptTokenCount,
|
|
17291
|
+
contextWindow: uiState.sessionStats.contextWindow,
|
|
17292
|
+
compact: terminalWidth < 100
|
|
17293
|
+
}
|
|
17294
|
+
),
|
|
17295
|
+
showMemoryUsage && /* @__PURE__ */ jsx69(MemoryUsageDisplay, {})
|
|
17169
17296
|
] }),
|
|
17170
|
-
/* @__PURE__ */
|
|
17171
|
-
/* @__PURE__ */
|
|
17172
|
-
/* @__PURE__ */
|
|
17297
|
+
/* @__PURE__ */ jsx69(Box54, { alignItems: "center", children: !showErrorDetails && errorCount > 0 && /* @__PURE__ */ jsxs53(Box54, { paddingLeft: 1, flexDirection: "row", children: [
|
|
17298
|
+
/* @__PURE__ */ jsx69(Text49, { color: theme.ui.comment, children: "| " }),
|
|
17299
|
+
/* @__PURE__ */ jsx69(ConsoleSummaryDisplay, { errorCount })
|
|
17173
17300
|
] }) })
|
|
17174
17301
|
] })
|
|
17175
17302
|
]
|
|
@@ -17178,8 +17305,8 @@ var Footer = () => {
|
|
|
17178
17305
|
};
|
|
17179
17306
|
|
|
17180
17307
|
// src/ui/components/indicators/queued-message-display.tsx
|
|
17181
|
-
import { Box as
|
|
17182
|
-
import { jsx as
|
|
17308
|
+
import { Box as Box55, Text as Text50 } from "ink";
|
|
17309
|
+
import { jsx as jsx70, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
17183
17310
|
var MAX_DISPLAYED_QUEUED_MESSAGES = 3;
|
|
17184
17311
|
var QueuedMessageDisplay = ({
|
|
17185
17312
|
messageQueue
|
|
@@ -17187,13 +17314,13 @@ var QueuedMessageDisplay = ({
|
|
|
17187
17314
|
if (messageQueue.length === 0) {
|
|
17188
17315
|
return null;
|
|
17189
17316
|
}
|
|
17190
|
-
return /* @__PURE__ */
|
|
17191
|
-
/* @__PURE__ */
|
|
17317
|
+
return /* @__PURE__ */ jsxs54(Box55, { flexDirection: "column", marginTop: 1, children: [
|
|
17318
|
+
/* @__PURE__ */ jsx70(Box55, { paddingLeft: 2, children: /* @__PURE__ */ jsx70(Text50, { dimColor: true, children: "Queued (press \u2191 to edit):" }) }),
|
|
17192
17319
|
messageQueue.slice(0, MAX_DISPLAYED_QUEUED_MESSAGES).map((message, index) => {
|
|
17193
17320
|
const preview2 = message.replace(/\s+/g, " ");
|
|
17194
|
-
return /* @__PURE__ */
|
|
17321
|
+
return /* @__PURE__ */ jsx70(Box55, { paddingLeft: 4, width: "100%", children: /* @__PURE__ */ jsx70(Text50, { dimColor: true, wrap: "truncate", children: preview2 }) }, index);
|
|
17195
17322
|
}),
|
|
17196
|
-
messageQueue.length > MAX_DISPLAYED_QUEUED_MESSAGES && /* @__PURE__ */
|
|
17323
|
+
messageQueue.length > MAX_DISPLAYED_QUEUED_MESSAGES && /* @__PURE__ */ jsx70(Box55, { paddingLeft: 4, children: /* @__PURE__ */ jsxs54(Text50, { dimColor: true, children: [
|
|
17197
17324
|
"... (+",
|
|
17198
17325
|
messageQueue.length - MAX_DISPLAYED_QUEUED_MESSAGES,
|
|
17199
17326
|
" more)"
|
|
@@ -17202,20 +17329,20 @@ var QueuedMessageDisplay = ({
|
|
|
17202
17329
|
};
|
|
17203
17330
|
|
|
17204
17331
|
// src/ui/components/help/command-init-display.tsx
|
|
17205
|
-
import { Box as
|
|
17206
|
-
import { jsx as
|
|
17332
|
+
import { Box as Box56, Text as Text51 } from "ink";
|
|
17333
|
+
import { jsx as jsx71, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
17207
17334
|
var CommandInitDisplay = ({
|
|
17208
17335
|
message = "Loading commands..."
|
|
17209
|
-
}) => /* @__PURE__ */
|
|
17210
|
-
/* @__PURE__ */
|
|
17336
|
+
}) => /* @__PURE__ */ jsx71(Box56, { marginTop: 1, children: /* @__PURE__ */ jsxs55(Text51, { children: [
|
|
17337
|
+
/* @__PURE__ */ jsx71(AgentSpinner, {}),
|
|
17211
17338
|
" ",
|
|
17212
|
-
/* @__PURE__ */
|
|
17339
|
+
/* @__PURE__ */ jsx71(Text51, { color: theme.text.primary, children: message })
|
|
17213
17340
|
] }) });
|
|
17214
17341
|
|
|
17215
17342
|
// src/ui/components/messages/todo.tsx
|
|
17216
|
-
import { Box as
|
|
17343
|
+
import { Box as Box57, Text as Text52 } from "ink";
|
|
17217
17344
|
import { useMemo as useMemo21 } from "react";
|
|
17218
|
-
import { jsx as
|
|
17345
|
+
import { jsx as jsx72, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
17219
17346
|
var TodoTitleDisplay = ({ todos }) => {
|
|
17220
17347
|
const score = useMemo21(() => {
|
|
17221
17348
|
let total = 0;
|
|
@@ -17230,9 +17357,9 @@ var TodoTitleDisplay = ({ todos }) => {
|
|
|
17230
17357
|
}
|
|
17231
17358
|
return `${completed}/${total} completed`;
|
|
17232
17359
|
}, [todos]);
|
|
17233
|
-
return /* @__PURE__ */
|
|
17234
|
-
/* @__PURE__ */
|
|
17235
|
-
/* @__PURE__ */
|
|
17360
|
+
return /* @__PURE__ */ jsxs56(Box57, { flexDirection: "row", columnGap: 2, height: 1, children: [
|
|
17361
|
+
/* @__PURE__ */ jsx72(Text52, { color: theme.text.primary, bold: true, "aria-label": "Todo list", children: "Todo" }),
|
|
17362
|
+
/* @__PURE__ */ jsxs56(Text52, { color: theme.text.secondary, children: [
|
|
17236
17363
|
score,
|
|
17237
17364
|
" (ctrl+t to toggle)"
|
|
17238
17365
|
] })
|
|
@@ -17241,14 +17368,14 @@ var TodoTitleDisplay = ({ todos }) => {
|
|
|
17241
17368
|
var TodoStatusDisplay = ({ status }) => {
|
|
17242
17369
|
switch (status) {
|
|
17243
17370
|
case "completed":
|
|
17244
|
-
return /* @__PURE__ */
|
|
17371
|
+
return /* @__PURE__ */ jsx72(Text52, { color: theme.status.success, "aria-label": "Completed", children: "\u2713" });
|
|
17245
17372
|
case "in_progress":
|
|
17246
|
-
return /* @__PURE__ */
|
|
17373
|
+
return /* @__PURE__ */ jsx72(Text52, { color: theme.text.accent, "aria-label": "In Progress", children: "\xBB" });
|
|
17247
17374
|
case "pending":
|
|
17248
|
-
return /* @__PURE__ */
|
|
17375
|
+
return /* @__PURE__ */ jsx72(Text52, { color: theme.text.secondary, "aria-label": "Pending", children: "\u2610" });
|
|
17249
17376
|
case "cancelled":
|
|
17250
17377
|
default:
|
|
17251
|
-
return /* @__PURE__ */
|
|
17378
|
+
return /* @__PURE__ */ jsx72(Text52, { color: theme.status.error, "aria-label": "Cancelled", children: "\u2717" });
|
|
17252
17379
|
}
|
|
17253
17380
|
};
|
|
17254
17381
|
var TodoItemDisplay = ({ todo, wrap, role: ariaRole }) => {
|
|
@@ -17264,9 +17391,9 @@ var TodoItemDisplay = ({ todo, wrap, role: ariaRole }) => {
|
|
|
17264
17391
|
}
|
|
17265
17392
|
})();
|
|
17266
17393
|
const strikethrough = todo.status === "cancelled";
|
|
17267
|
-
return /* @__PURE__ */
|
|
17268
|
-
/* @__PURE__ */
|
|
17269
|
-
/* @__PURE__ */
|
|
17394
|
+
return /* @__PURE__ */ jsxs56(Box57, { flexDirection: "row", columnGap: 1, "aria-role": ariaRole, children: [
|
|
17395
|
+
/* @__PURE__ */ jsx72(TodoStatusDisplay, { status: todo.status }),
|
|
17396
|
+
/* @__PURE__ */ jsx72(Box57, { flexShrink: 1, children: /* @__PURE__ */ jsx72(Text52, { color: textColor, wrap, strikethrough, children: todo.description }) })
|
|
17270
17397
|
] });
|
|
17271
17398
|
};
|
|
17272
17399
|
var TodoTray = () => {
|
|
@@ -17287,8 +17414,8 @@ var TodoTray = () => {
|
|
|
17287
17414
|
if (todos === null || !todos.todos || todos.todos.length === 0 || !uiState.showFullTodos && !hasActiveTodos) {
|
|
17288
17415
|
return null;
|
|
17289
17416
|
}
|
|
17290
|
-
return /* @__PURE__ */
|
|
17291
|
-
|
|
17417
|
+
return /* @__PURE__ */ jsx72(
|
|
17418
|
+
Box57,
|
|
17292
17419
|
{
|
|
17293
17420
|
borderStyle: "single",
|
|
17294
17421
|
borderBottom: false,
|
|
@@ -17297,47 +17424,47 @@ var TodoTray = () => {
|
|
|
17297
17424
|
borderColor: theme.border.default,
|
|
17298
17425
|
paddingLeft: 1,
|
|
17299
17426
|
paddingRight: 1,
|
|
17300
|
-
children: uiState.showFullTodos ? /* @__PURE__ */
|
|
17301
|
-
/* @__PURE__ */
|
|
17302
|
-
/* @__PURE__ */
|
|
17303
|
-
] }) : /* @__PURE__ */
|
|
17304
|
-
/* @__PURE__ */
|
|
17305
|
-
inProgress && /* @__PURE__ */
|
|
17427
|
+
children: uiState.showFullTodos ? /* @__PURE__ */ jsxs56(Box57, { flexDirection: "column", rowGap: 1, children: [
|
|
17428
|
+
/* @__PURE__ */ jsx72(TodoTitleDisplay, { todos }),
|
|
17429
|
+
/* @__PURE__ */ jsx72(TodoListDisplay, { todos })
|
|
17430
|
+
] }) : /* @__PURE__ */ jsxs56(Box57, { flexDirection: "row", columnGap: 1, height: 1, children: [
|
|
17431
|
+
/* @__PURE__ */ jsx72(Box57, { flexShrink: 0, flexGrow: 0, children: /* @__PURE__ */ jsx72(TodoTitleDisplay, { todos }) }),
|
|
17432
|
+
inProgress && /* @__PURE__ */ jsx72(Box57, { flexShrink: 1, flexGrow: 1, children: /* @__PURE__ */ jsx72(TodoItemDisplay, { todo: inProgress, wrap: "truncate" }) })
|
|
17306
17433
|
] })
|
|
17307
17434
|
}
|
|
17308
17435
|
);
|
|
17309
17436
|
};
|
|
17310
|
-
var TodoListDisplay = ({ todos }) => /* @__PURE__ */
|
|
17437
|
+
var TodoListDisplay = ({ todos }) => /* @__PURE__ */ jsx72(Box57, { flexDirection: "column", "aria-role": "list", children: todos.todos.map((todo, index) => /* @__PURE__ */ jsx72(TodoItemDisplay, { todo, role: "listitem" }, index)) });
|
|
17311
17438
|
|
|
17312
17439
|
// src/ui/components/layout/status-display.tsx
|
|
17313
|
-
import { Text as
|
|
17314
|
-
import { jsx as
|
|
17440
|
+
import { Text as Text53 } from "ink";
|
|
17441
|
+
import { jsx as jsx73 } from "react/jsx-runtime";
|
|
17315
17442
|
var StatusDisplay = () => {
|
|
17316
17443
|
const uiState = useUIState();
|
|
17317
17444
|
if (process.env["DSH_CONSOLE_SYSTEM_MD"]) {
|
|
17318
|
-
return /* @__PURE__ */
|
|
17445
|
+
return /* @__PURE__ */ jsx73(Text53, { color: theme.status.error, children: "|\u2310\u25A0_\u25A0|" });
|
|
17319
17446
|
}
|
|
17320
17447
|
if (uiState.ctrlCPressedOnce) {
|
|
17321
|
-
return /* @__PURE__ */
|
|
17448
|
+
return /* @__PURE__ */ jsx73(Text53, { color: theme.status.warning, children: "Press Ctrl+C again to exit." });
|
|
17322
17449
|
}
|
|
17323
17450
|
if (uiState.warningMessage) {
|
|
17324
|
-
return /* @__PURE__ */
|
|
17451
|
+
return /* @__PURE__ */ jsx73(Text53, { color: theme.status.warning, children: uiState.warningMessage });
|
|
17325
17452
|
}
|
|
17326
17453
|
if (uiState.ctrlDPressedOnce) {
|
|
17327
|
-
return /* @__PURE__ */
|
|
17454
|
+
return /* @__PURE__ */ jsx73(Text53, { color: theme.status.warning, children: "Press Ctrl+D again to exit." });
|
|
17328
17455
|
}
|
|
17329
17456
|
if (uiState.showEscapePrompt) {
|
|
17330
17457
|
if (uiState.buffer.text.length === 0) return null;
|
|
17331
|
-
return /* @__PURE__ */
|
|
17458
|
+
return /* @__PURE__ */ jsx73(Text53, { color: theme.text.secondary, children: "Press Esc again to clear prompt." });
|
|
17332
17459
|
}
|
|
17333
17460
|
if (uiState.queueErrorMessage) {
|
|
17334
|
-
return /* @__PURE__ */
|
|
17461
|
+
return /* @__PURE__ */ jsx73(Text53, { color: theme.status.error, children: uiState.queueErrorMessage });
|
|
17335
17462
|
}
|
|
17336
17463
|
return null;
|
|
17337
17464
|
};
|
|
17338
17465
|
|
|
17339
17466
|
// src/ui/components/input/composer.tsx
|
|
17340
|
-
import { jsx as
|
|
17467
|
+
import { jsx as jsx74, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
17341
17468
|
var Composer = ({ isFocused = true }) => {
|
|
17342
17469
|
const config = useConfig();
|
|
17343
17470
|
const settings = useSettings();
|
|
@@ -17351,26 +17478,26 @@ var Composer = ({ isFocused = true }) => {
|
|
|
17351
17478
|
const [, setSuggestionsVisible] = useState33(false);
|
|
17352
17479
|
const isAlternateBuffer = useAlternateBuffer();
|
|
17353
17480
|
const suggestionsPosition = isAlternateBuffer ? "above" : "below";
|
|
17354
|
-
return /* @__PURE__ */
|
|
17355
|
-
|
|
17481
|
+
return /* @__PURE__ */ jsxs57(
|
|
17482
|
+
Box58,
|
|
17356
17483
|
{
|
|
17357
17484
|
flexDirection: "column",
|
|
17358
17485
|
width: uiState.terminalWidth,
|
|
17359
17486
|
flexGrow: 0,
|
|
17360
17487
|
flexShrink: 0,
|
|
17361
17488
|
children: [
|
|
17362
|
-
!uiState.embeddedShellFocused && /* @__PURE__ */
|
|
17489
|
+
!uiState.embeddedShellFocused && /* @__PURE__ */ jsx74(
|
|
17363
17490
|
LoadingIndicator,
|
|
17364
17491
|
{
|
|
17365
17492
|
currentLoadingPhrase: config.getAccessibility()?.enableLoadingPhrases === false ? void 0 : uiState.currentLoadingPhrase,
|
|
17366
17493
|
elapsedTime: uiState.elapsedTime
|
|
17367
17494
|
}
|
|
17368
17495
|
),
|
|
17369
|
-
!uiState.slashCommands && /* @__PURE__ */
|
|
17370
|
-
/* @__PURE__ */
|
|
17371
|
-
/* @__PURE__ */
|
|
17372
|
-
/* @__PURE__ */
|
|
17373
|
-
|
|
17496
|
+
!uiState.slashCommands && /* @__PURE__ */ jsx74(CommandInitDisplay, {}),
|
|
17497
|
+
/* @__PURE__ */ jsx74(QueuedMessageDisplay, { messageQueue: uiState.messageQueue }),
|
|
17498
|
+
/* @__PURE__ */ jsx74(TodoTray, {}),
|
|
17499
|
+
/* @__PURE__ */ jsxs57(
|
|
17500
|
+
Box58,
|
|
17374
17501
|
{
|
|
17375
17502
|
marginTop: 1,
|
|
17376
17503
|
justifyContent: "space-between",
|
|
@@ -17378,16 +17505,16 @@ var Composer = ({ isFocused = true }) => {
|
|
|
17378
17505
|
flexDirection: isNarrow ? "column" : "row",
|
|
17379
17506
|
alignItems: isNarrow ? "flex-start" : "center",
|
|
17380
17507
|
children: [
|
|
17381
|
-
/* @__PURE__ */
|
|
17382
|
-
/* @__PURE__ */
|
|
17383
|
-
uiState.shellModeActive && /* @__PURE__ */
|
|
17384
|
-
!uiState.renderMarkdown && /* @__PURE__ */
|
|
17508
|
+
/* @__PURE__ */ jsx74(Box58, { marginRight: 1, children: /* @__PURE__ */ jsx74(StatusDisplay, {}) }),
|
|
17509
|
+
/* @__PURE__ */ jsxs57(Box58, { paddingTop: isNarrow ? 1 : 0, children: [
|
|
17510
|
+
uiState.shellModeActive && /* @__PURE__ */ jsx74(ShellModeIndicator, {}),
|
|
17511
|
+
!uiState.renderMarkdown && /* @__PURE__ */ jsx74(RawMarkdownIndicator, {})
|
|
17385
17512
|
] })
|
|
17386
17513
|
]
|
|
17387
17514
|
}
|
|
17388
17515
|
),
|
|
17389
|
-
uiState.showErrorDetails && /* @__PURE__ */
|
|
17390
|
-
/* @__PURE__ */
|
|
17516
|
+
uiState.showErrorDetails && /* @__PURE__ */ jsx74(OverflowProvider, { children: /* @__PURE__ */ jsxs57(Box58, { flexDirection: "column", children: [
|
|
17517
|
+
/* @__PURE__ */ jsx74(
|
|
17391
17518
|
DetailedMessagesDisplay,
|
|
17392
17519
|
{
|
|
17393
17520
|
messages: uiState.filteredConsoleMessages,
|
|
@@ -17396,9 +17523,9 @@ var Composer = ({ isFocused = true }) => {
|
|
|
17396
17523
|
hasFocus: uiState.showErrorDetails
|
|
17397
17524
|
}
|
|
17398
17525
|
),
|
|
17399
|
-
/* @__PURE__ */
|
|
17526
|
+
/* @__PURE__ */ jsx74(ShowMoreLines, { constrainHeight: uiState.constrainHeight })
|
|
17400
17527
|
] }) }),
|
|
17401
|
-
uiState.isInputActive && /* @__PURE__ */
|
|
17528
|
+
uiState.isInputActive && /* @__PURE__ */ jsx74(
|
|
17402
17529
|
InputPrompt,
|
|
17403
17530
|
{
|
|
17404
17531
|
buffer: uiState.buffer,
|
|
@@ -17425,20 +17552,20 @@ var Composer = ({ isFocused = true }) => {
|
|
|
17425
17552
|
onSuggestionsVisibilityChange: setSuggestionsVisible
|
|
17426
17553
|
}
|
|
17427
17554
|
),
|
|
17428
|
-
!settings.merged.ui.hideFooter && !isScreenReaderEnabled && /* @__PURE__ */
|
|
17555
|
+
!settings.merged.ui.hideFooter && !isScreenReaderEnabled && /* @__PURE__ */ jsx74(Footer, {})
|
|
17429
17556
|
]
|
|
17430
17557
|
}
|
|
17431
17558
|
);
|
|
17432
17559
|
};
|
|
17433
17560
|
|
|
17434
17561
|
// src/ui/components/dialogs/exit-warning.tsx
|
|
17435
|
-
import { Box as
|
|
17436
|
-
import { Fragment as Fragment13, jsx as
|
|
17562
|
+
import { Box as Box59, Text as Text54 } from "ink";
|
|
17563
|
+
import { Fragment as Fragment13, jsx as jsx75, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
17437
17564
|
var ExitWarning = () => {
|
|
17438
17565
|
const uiState = useUIState();
|
|
17439
|
-
return /* @__PURE__ */
|
|
17440
|
-
uiState.dialogsVisible && uiState.ctrlCPressedOnce && /* @__PURE__ */
|
|
17441
|
-
uiState.dialogsVisible && uiState.ctrlDPressedOnce && /* @__PURE__ */
|
|
17566
|
+
return /* @__PURE__ */ jsxs58(Fragment13, { children: [
|
|
17567
|
+
uiState.dialogsVisible && uiState.ctrlCPressedOnce && /* @__PURE__ */ jsx75(Box59, { marginTop: 1, children: /* @__PURE__ */ jsx75(Text54, { color: theme.status.warning, children: "Press Ctrl+C again to exit." }) }),
|
|
17568
|
+
uiState.dialogsVisible && uiState.ctrlDPressedOnce && /* @__PURE__ */ jsx75(Box59, { marginTop: 1, children: /* @__PURE__ */ jsx75(Text54, { color: theme.status.warning, children: "Press Ctrl+D again to exit." }) })
|
|
17442
17569
|
] });
|
|
17443
17570
|
};
|
|
17444
17571
|
|
|
@@ -17467,7 +17594,7 @@ import {
|
|
|
17467
17594
|
useMemo as useMemo22,
|
|
17468
17595
|
useSyncExternalStore
|
|
17469
17596
|
} from "react";
|
|
17470
|
-
import { jsx as
|
|
17597
|
+
import { jsx as jsx76 } from "react/jsx-runtime";
|
|
17471
17598
|
var ApprovalContext = createContext12(
|
|
17472
17599
|
void 0
|
|
17473
17600
|
);
|
|
@@ -17478,7 +17605,7 @@ var ApprovalRuntimeProvider = ({ runtime, children }) => {
|
|
|
17478
17605
|
runtime.getSnapshot
|
|
17479
17606
|
);
|
|
17480
17607
|
const value = useMemo22(() => ({ runtime, snapshot }), [runtime, snapshot]);
|
|
17481
|
-
return /* @__PURE__ */
|
|
17608
|
+
return /* @__PURE__ */ jsx76(ApprovalContext.Provider, { value, children });
|
|
17482
17609
|
};
|
|
17483
17610
|
function useApprovalRuntime() {
|
|
17484
17611
|
const value = useContext13(ApprovalContext);
|
|
@@ -17497,7 +17624,7 @@ import {
|
|
|
17497
17624
|
useMemo as useMemo23,
|
|
17498
17625
|
useSyncExternalStore as useSyncExternalStore2
|
|
17499
17626
|
} from "react";
|
|
17500
|
-
import { jsx as
|
|
17627
|
+
import { jsx as jsx77 } from "react/jsx-runtime";
|
|
17501
17628
|
var UserQuestionContext = createContext13(void 0);
|
|
17502
17629
|
var UserQuestionRuntimeProvider = ({ runtime, children }) => {
|
|
17503
17630
|
const snapshot = useSyncExternalStore2(
|
|
@@ -17506,7 +17633,7 @@ var UserQuestionRuntimeProvider = ({ runtime, children }) => {
|
|
|
17506
17633
|
runtime.getSnapshot
|
|
17507
17634
|
);
|
|
17508
17635
|
const value = useMemo23(() => ({ runtime, snapshot }), [runtime, snapshot]);
|
|
17509
|
-
return /* @__PURE__ */
|
|
17636
|
+
return /* @__PURE__ */ jsx77(UserQuestionContext.Provider, { value, children });
|
|
17510
17637
|
};
|
|
17511
17638
|
function useUserQuestionRuntime() {
|
|
17512
17639
|
const value = useContext14(UserQuestionContext);
|
|
@@ -17519,12 +17646,12 @@ function useUserQuestionRuntime() {
|
|
|
17519
17646
|
}
|
|
17520
17647
|
|
|
17521
17648
|
// src/ui/components/dialogs/tool-confirmation-queue.tsx
|
|
17522
|
-
import { Box as
|
|
17649
|
+
import { Box as Box61, Text as Text56 } from "ink";
|
|
17523
17650
|
|
|
17524
17651
|
// src/ui/components/messages/tool-confirmation-message.tsx
|
|
17525
|
-
import { Box as
|
|
17652
|
+
import { Box as Box60, Text as Text55 } from "ink";
|
|
17526
17653
|
import { useMemo as useMemo24 } from "react";
|
|
17527
|
-
import { jsx as
|
|
17654
|
+
import { jsx as jsx78, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
17528
17655
|
var ToolConfirmationMessage = ({ request, respond, isFocused }) => {
|
|
17529
17656
|
useKeypress(
|
|
17530
17657
|
(key) => {
|
|
@@ -17545,14 +17672,14 @@ var ToolConfirmationMessage = ({ request, respond, isFocused }) => {
|
|
|
17545
17672
|
],
|
|
17546
17673
|
[]
|
|
17547
17674
|
);
|
|
17548
|
-
return /* @__PURE__ */
|
|
17549
|
-
request.reason !== void 0 && /* @__PURE__ */
|
|
17550
|
-
/* @__PURE__ */
|
|
17675
|
+
return /* @__PURE__ */ jsxs59(Box60, { flexDirection: "column", paddingBottom: 1, children: [
|
|
17676
|
+
request.reason !== void 0 && /* @__PURE__ */ jsx78(Box60, { marginBottom: 1, children: /* @__PURE__ */ jsx78(Text55, { color: theme.text.secondary, children: request.reason }) }),
|
|
17677
|
+
/* @__PURE__ */ jsx78(Box60, { marginBottom: 1, children: /* @__PURE__ */ jsxs59(Text55, { color: theme.text.primary, children: [
|
|
17551
17678
|
"Allow ",
|
|
17552
|
-
/* @__PURE__ */
|
|
17679
|
+
/* @__PURE__ */ jsx78(Text55, { bold: true, children: request.toolName }),
|
|
17553
17680
|
" to continue?"
|
|
17554
17681
|
] }) }),
|
|
17555
|
-
/* @__PURE__ */
|
|
17682
|
+
/* @__PURE__ */ jsx78(
|
|
17556
17683
|
RadioButtonSelect,
|
|
17557
17684
|
{
|
|
17558
17685
|
items: options,
|
|
@@ -17560,14 +17687,14 @@ var ToolConfirmationMessage = ({ request, respond, isFocused }) => {
|
|
|
17560
17687
|
isFocused
|
|
17561
17688
|
}
|
|
17562
17689
|
),
|
|
17563
|
-
/* @__PURE__ */
|
|
17690
|
+
/* @__PURE__ */ jsx78(Text55, { color: theme.text.secondary, children: "Esc cancels this request" })
|
|
17564
17691
|
] });
|
|
17565
17692
|
};
|
|
17566
17693
|
|
|
17567
17694
|
// src/ui/components/dialogs/tool-confirmation-queue.tsx
|
|
17568
|
-
import { jsx as
|
|
17569
|
-
var ToolConfirmationQueue = ({ request, index, total, terminalWidth, respond }) => /* @__PURE__ */
|
|
17570
|
-
|
|
17695
|
+
import { jsx as jsx79, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
17696
|
+
var ToolConfirmationQueue = ({ request, index, total, terminalWidth, respond }) => /* @__PURE__ */ jsxs60(
|
|
17697
|
+
Box61,
|
|
17571
17698
|
{
|
|
17572
17699
|
flexDirection: "column",
|
|
17573
17700
|
borderStyle: "round",
|
|
@@ -17576,22 +17703,22 @@ var ToolConfirmationQueue = ({ request, index, total, terminalWidth, respond })
|
|
|
17576
17703
|
width: terminalWidth,
|
|
17577
17704
|
flexShrink: 0,
|
|
17578
17705
|
children: [
|
|
17579
|
-
/* @__PURE__ */
|
|
17580
|
-
/* @__PURE__ */
|
|
17581
|
-
/* @__PURE__ */
|
|
17706
|
+
/* @__PURE__ */ jsxs60(Box61, { marginBottom: 1, justifyContent: "space-between", children: [
|
|
17707
|
+
/* @__PURE__ */ jsx79(Text56, { color: theme.status.warning, bold: true, children: "Action Required" }),
|
|
17708
|
+
/* @__PURE__ */ jsxs60(Text56, { color: theme.text.secondary, children: [
|
|
17582
17709
|
index,
|
|
17583
17710
|
" of ",
|
|
17584
17711
|
total
|
|
17585
17712
|
] })
|
|
17586
17713
|
] }),
|
|
17587
|
-
/* @__PURE__ */
|
|
17588
|
-
/* @__PURE__ */
|
|
17589
|
-
request.callId !== void 0 && /* @__PURE__ */
|
|
17714
|
+
/* @__PURE__ */ jsxs60(Box61, { marginBottom: 1, flexDirection: "column", children: [
|
|
17715
|
+
/* @__PURE__ */ jsx79(Text56, { color: theme.text.primary, bold: true, children: request.toolName }),
|
|
17716
|
+
request.callId !== void 0 && /* @__PURE__ */ jsxs60(Text56, { color: theme.text.secondary, children: [
|
|
17590
17717
|
"Call ",
|
|
17591
17718
|
request.callId
|
|
17592
17719
|
] })
|
|
17593
17720
|
] }),
|
|
17594
|
-
/* @__PURE__ */
|
|
17721
|
+
/* @__PURE__ */ jsx79(
|
|
17595
17722
|
ToolConfirmationMessage,
|
|
17596
17723
|
{
|
|
17597
17724
|
request,
|
|
@@ -17615,12 +17742,12 @@ import {
|
|
|
17615
17742
|
useReducer as useReducer4,
|
|
17616
17743
|
useContext as useContext15
|
|
17617
17744
|
} from "react";
|
|
17618
|
-
import { Box as
|
|
17745
|
+
import { Box as Box63, Text as Text58, useStdout as useStdout3 } from "ink";
|
|
17619
17746
|
|
|
17620
17747
|
// src/ui/components/layout/tab-header.tsx
|
|
17621
17748
|
import React15 from "react";
|
|
17622
|
-
import { Text as
|
|
17623
|
-
import { jsx as
|
|
17749
|
+
import { Text as Text57, Box as Box62 } from "ink";
|
|
17750
|
+
import { jsx as jsx80, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
17624
17751
|
function TabHeader({
|
|
17625
17752
|
tabs,
|
|
17626
17753
|
currentIndex,
|
|
@@ -17640,16 +17767,16 @@ function TabHeader({
|
|
|
17640
17767
|
if (tab.isSpecial) return "\u2261";
|
|
17641
17768
|
return isCompleted ? "\u2713" : "\u25A1";
|
|
17642
17769
|
};
|
|
17643
|
-
return /* @__PURE__ */
|
|
17644
|
-
showArrows && /* @__PURE__ */
|
|
17645
|
-
tabs.map((tab, i) => /* @__PURE__ */
|
|
17646
|
-
i > 0 && /* @__PURE__ */
|
|
17647
|
-
showStatusIcons && /* @__PURE__ */
|
|
17770
|
+
return /* @__PURE__ */ jsxs61(Box62, { flexDirection: "row", marginBottom: 1, children: [
|
|
17771
|
+
showArrows && /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: "\u2190 " }),
|
|
17772
|
+
tabs.map((tab, i) => /* @__PURE__ */ jsxs61(React15.Fragment, { children: [
|
|
17773
|
+
i > 0 && /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: " \u2502 " }),
|
|
17774
|
+
showStatusIcons && /* @__PURE__ */ jsxs61(Text57, { color: theme.text.secondary, children: [
|
|
17648
17775
|
getStatusIcon(tab, i),
|
|
17649
17776
|
" "
|
|
17650
17777
|
] }),
|
|
17651
|
-
/* @__PURE__ */
|
|
17652
|
-
|
|
17778
|
+
/* @__PURE__ */ jsx80(
|
|
17779
|
+
Text57,
|
|
17653
17780
|
{
|
|
17654
17781
|
color: i === currentIndex ? theme.text.accent : theme.text.secondary,
|
|
17655
17782
|
bold: i === currentIndex,
|
|
@@ -17657,12 +17784,12 @@ function TabHeader({
|
|
|
17657
17784
|
}
|
|
17658
17785
|
)
|
|
17659
17786
|
] }, tab.key)),
|
|
17660
|
-
showArrows && /* @__PURE__ */
|
|
17787
|
+
showArrows && /* @__PURE__ */ jsx80(Text57, { color: theme.text.secondary, children: " \u2192" })
|
|
17661
17788
|
] });
|
|
17662
17789
|
}
|
|
17663
17790
|
|
|
17664
17791
|
// src/ui/components/dialogs/ask-user-dialog.tsx
|
|
17665
|
-
import { jsx as
|
|
17792
|
+
import { jsx as jsx81, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
17666
17793
|
var initialState2 = {
|
|
17667
17794
|
currentQuestionIndex: 0,
|
|
17668
17795
|
answers: {},
|
|
@@ -17776,8 +17903,8 @@ var ReviewView = ({
|
|
|
17776
17903
|
},
|
|
17777
17904
|
{ isActive: true }
|
|
17778
17905
|
);
|
|
17779
|
-
return /* @__PURE__ */
|
|
17780
|
-
|
|
17906
|
+
return /* @__PURE__ */ jsxs62(
|
|
17907
|
+
Box63,
|
|
17781
17908
|
{
|
|
17782
17909
|
flexDirection: "column",
|
|
17783
17910
|
borderStyle: "round",
|
|
@@ -17785,19 +17912,19 @@ var ReviewView = ({
|
|
|
17785
17912
|
borderColor: theme.border.default,
|
|
17786
17913
|
children: [
|
|
17787
17914
|
progressHeader,
|
|
17788
|
-
/* @__PURE__ */
|
|
17789
|
-
hasUnanswered && /* @__PURE__ */
|
|
17915
|
+
/* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsx81(Text58, { bold: true, color: theme.text.primary, children: "Review your answers:" }) }),
|
|
17916
|
+
hasUnanswered && /* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsxs62(Text58, { color: theme.status.warning, children: [
|
|
17790
17917
|
"\u26A0 You have ",
|
|
17791
17918
|
unansweredCount,
|
|
17792
17919
|
" unanswered question",
|
|
17793
17920
|
unansweredCount > 1 ? "s" : ""
|
|
17794
17921
|
] }) }),
|
|
17795
|
-
questions.map((q, i) => /* @__PURE__ */
|
|
17796
|
-
/* @__PURE__ */
|
|
17797
|
-
/* @__PURE__ */
|
|
17798
|
-
/* @__PURE__ */
|
|
17922
|
+
questions.map((q, i) => /* @__PURE__ */ jsxs62(Box63, { marginBottom: 0, children: [
|
|
17923
|
+
/* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: q.header }),
|
|
17924
|
+
/* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: " \u2192 " }),
|
|
17925
|
+
/* @__PURE__ */ jsx81(Text58, { color: answers[i] ? theme.text.primary : theme.status.warning, children: (answers[i] ? formatAnswerForReview(q, answers[i]) : void 0) || "(not answered)" })
|
|
17799
17926
|
] }, i)),
|
|
17800
|
-
/* @__PURE__ */
|
|
17927
|
+
/* @__PURE__ */ jsx81(Box63, { marginTop: 1, children: /* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: "Enter to submit \xB7 Tab/Shift+Tab to edit answers \xB7 Esc to cancel" }) })
|
|
17801
17928
|
]
|
|
17802
17929
|
}
|
|
17803
17930
|
);
|
|
@@ -17862,8 +17989,8 @@ var TextQuestionView = ({
|
|
|
17862
17989
|
};
|
|
17863
17990
|
}, [onEditingCustomOption]);
|
|
17864
17991
|
const placeholder = question.placeholder || "Enter your response";
|
|
17865
|
-
return /* @__PURE__ */
|
|
17866
|
-
|
|
17992
|
+
return /* @__PURE__ */ jsxs62(
|
|
17993
|
+
Box63,
|
|
17867
17994
|
{
|
|
17868
17995
|
flexDirection: "column",
|
|
17869
17996
|
borderStyle: "round",
|
|
@@ -17871,11 +17998,11 @@ var TextQuestionView = ({
|
|
|
17871
17998
|
borderColor: theme.border.default,
|
|
17872
17999
|
children: [
|
|
17873
18000
|
progressHeader,
|
|
17874
|
-
/* @__PURE__ */
|
|
17875
|
-
question.detail && /* @__PURE__ */
|
|
17876
|
-
/* @__PURE__ */
|
|
17877
|
-
/* @__PURE__ */
|
|
17878
|
-
/* @__PURE__ */
|
|
18001
|
+
/* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsx81(Text58, { bold: true, color: theme.text.primary, children: question.question }) }),
|
|
18002
|
+
question.detail && /* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: question.detail }) }),
|
|
18003
|
+
/* @__PURE__ */ jsxs62(Box63, { flexDirection: "row", marginBottom: 1, children: [
|
|
18004
|
+
/* @__PURE__ */ jsx81(Text58, { color: theme.text.accent, children: "> " }),
|
|
18005
|
+
/* @__PURE__ */ jsx81(
|
|
17879
18006
|
TextInput,
|
|
17880
18007
|
{
|
|
17881
18008
|
buffer,
|
|
@@ -18170,8 +18297,8 @@ var ChoiceQuestionView = ({
|
|
|
18170
18297
|
});
|
|
18171
18298
|
}
|
|
18172
18299
|
}, [customOptionText, isCustomOptionSelected, question.multiSelect]);
|
|
18173
|
-
return /* @__PURE__ */
|
|
18174
|
-
|
|
18300
|
+
return /* @__PURE__ */ jsxs62(
|
|
18301
|
+
Box63,
|
|
18175
18302
|
{
|
|
18176
18303
|
flexDirection: "column",
|
|
18177
18304
|
borderStyle: "round",
|
|
@@ -18179,13 +18306,13 @@ var ChoiceQuestionView = ({
|
|
|
18179
18306
|
borderColor: theme.border.default,
|
|
18180
18307
|
children: [
|
|
18181
18308
|
progressHeader,
|
|
18182
|
-
/* @__PURE__ */
|
|
18183
|
-
question.detail && /* @__PURE__ */
|
|
18184
|
-
question.multiSelect && /* @__PURE__ */
|
|
18309
|
+
/* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsx81(Text58, { bold: true, color: theme.text.primary, children: question.question }) }),
|
|
18310
|
+
question.detail && /* @__PURE__ */ jsx81(Box63, { marginBottom: 1, children: /* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: question.detail }) }),
|
|
18311
|
+
question.multiSelect && /* @__PURE__ */ jsxs62(Text58, { color: theme.text.secondary, italic: true, children: [
|
|
18185
18312
|
" ",
|
|
18186
18313
|
"(Select all that apply)"
|
|
18187
18314
|
] }),
|
|
18188
|
-
/* @__PURE__ */
|
|
18315
|
+
/* @__PURE__ */ jsx81(
|
|
18189
18316
|
BaseSelectionList,
|
|
18190
18317
|
{
|
|
18191
18318
|
items: selectionItems,
|
|
@@ -18198,9 +18325,9 @@ var ChoiceQuestionView = ({
|
|
|
18198
18325
|
const showCheck = question.multiSelect && (optionItem.type === "option" || optionItem.type === "other");
|
|
18199
18326
|
if (optionItem.type === "other") {
|
|
18200
18327
|
const placeholder = "Enter a custom value";
|
|
18201
|
-
return /* @__PURE__ */
|
|
18202
|
-
showCheck && /* @__PURE__ */
|
|
18203
|
-
|
|
18328
|
+
return /* @__PURE__ */ jsxs62(Box63, { flexDirection: "row", children: [
|
|
18329
|
+
showCheck && /* @__PURE__ */ jsxs62(
|
|
18330
|
+
Text58,
|
|
18204
18331
|
{
|
|
18205
18332
|
color: isChecked ? theme.text.accent : theme.text.secondary,
|
|
18206
18333
|
children: [
|
|
@@ -18210,8 +18337,8 @@ var ChoiceQuestionView = ({
|
|
|
18210
18337
|
]
|
|
18211
18338
|
}
|
|
18212
18339
|
),
|
|
18213
|
-
/* @__PURE__ */
|
|
18214
|
-
/* @__PURE__ */
|
|
18340
|
+
/* @__PURE__ */ jsx81(Text58, { color: theme.text.primary, children: " " }),
|
|
18341
|
+
/* @__PURE__ */ jsx81(
|
|
18215
18342
|
TextInput,
|
|
18216
18343
|
{
|
|
18217
18344
|
buffer: customBuffer,
|
|
@@ -18220,14 +18347,14 @@ var ChoiceQuestionView = ({
|
|
|
18220
18347
|
onSubmit: () => handleSelect(optionItem)
|
|
18221
18348
|
}
|
|
18222
18349
|
),
|
|
18223
|
-
isChecked && !question.multiSelect && /* @__PURE__ */
|
|
18350
|
+
isChecked && !question.multiSelect && /* @__PURE__ */ jsx81(Text58, { color: theme.status.success, children: " \u2713" })
|
|
18224
18351
|
] });
|
|
18225
18352
|
}
|
|
18226
18353
|
const labelColor = isChecked && !question.multiSelect ? theme.status.success : context.isSelected ? context.titleColor : theme.text.primary;
|
|
18227
|
-
return /* @__PURE__ */
|
|
18228
|
-
/* @__PURE__ */
|
|
18229
|
-
showCheck && /* @__PURE__ */
|
|
18230
|
-
|
|
18354
|
+
return /* @__PURE__ */ jsxs62(Box63, { flexDirection: "column", children: [
|
|
18355
|
+
/* @__PURE__ */ jsxs62(Box63, { flexDirection: "row", children: [
|
|
18356
|
+
showCheck && /* @__PURE__ */ jsxs62(
|
|
18357
|
+
Text58,
|
|
18231
18358
|
{
|
|
18232
18359
|
color: isChecked ? theme.text.accent : theme.text.secondary,
|
|
18233
18360
|
children: [
|
|
@@ -18237,13 +18364,13 @@ var ChoiceQuestionView = ({
|
|
|
18237
18364
|
]
|
|
18238
18365
|
}
|
|
18239
18366
|
),
|
|
18240
|
-
/* @__PURE__ */
|
|
18367
|
+
/* @__PURE__ */ jsxs62(Text58, { color: labelColor, bold: optionItem.type === "done", children: [
|
|
18241
18368
|
" ",
|
|
18242
18369
|
optionItem.label
|
|
18243
18370
|
] }),
|
|
18244
|
-
isChecked && !question.multiSelect && /* @__PURE__ */
|
|
18371
|
+
isChecked && !question.multiSelect && /* @__PURE__ */ jsx81(Text58, { color: theme.status.success, children: " \u2713" })
|
|
18245
18372
|
] }),
|
|
18246
|
-
optionItem.description && /* @__PURE__ */
|
|
18373
|
+
optionItem.description && /* @__PURE__ */ jsxs62(Text58, { color: theme.text.secondary, wrap: "wrap", children: [
|
|
18247
18374
|
" ",
|
|
18248
18375
|
optionItem.description
|
|
18249
18376
|
] })
|
|
@@ -18423,7 +18550,7 @@ var AskUserDialog = ({
|
|
|
18423
18550
|
}
|
|
18424
18551
|
return questionTabs;
|
|
18425
18552
|
}, [questions]);
|
|
18426
|
-
const progressHeader = questions.length > 1 ? /* @__PURE__ */
|
|
18553
|
+
const progressHeader = questions.length > 1 ? /* @__PURE__ */ jsx81(
|
|
18427
18554
|
TabHeader,
|
|
18428
18555
|
{
|
|
18429
18556
|
tabs,
|
|
@@ -18432,7 +18559,7 @@ var AskUserDialog = ({
|
|
|
18432
18559
|
}
|
|
18433
18560
|
) : null;
|
|
18434
18561
|
if (isOnReviewTab) {
|
|
18435
|
-
return /* @__PURE__ */
|
|
18562
|
+
return /* @__PURE__ */ jsx81(
|
|
18436
18563
|
ReviewView,
|
|
18437
18564
|
{
|
|
18438
18565
|
questions,
|
|
@@ -18443,9 +18570,9 @@ var AskUserDialog = ({
|
|
|
18443
18570
|
);
|
|
18444
18571
|
}
|
|
18445
18572
|
if (!currentQuestion) return null;
|
|
18446
|
-
const keyboardHints = /* @__PURE__ */
|
|
18573
|
+
const keyboardHints = /* @__PURE__ */ jsx81(Box63, { marginTop: 1, children: /* @__PURE__ */ jsx81(Text58, { color: theme.text.secondary, children: currentQuestion.type === "text" || isEditingCustomOption ? questions.length > 1 ? "Enter to submit \xB7 Tab/Shift+Tab to switch questions \xB7 Esc to cancel" : "Enter to submit \xB7 Esc to cancel" : questions.length > 1 ? "Enter to select \xB7 \u2190/\u2192 to switch questions \xB7 Esc to cancel" : "Enter to select \xB7 \u2191/\u2193 to navigate \xB7 Esc to cancel" }) });
|
|
18447
18574
|
if (currentQuestion.type === "text") {
|
|
18448
|
-
return /* @__PURE__ */
|
|
18575
|
+
return /* @__PURE__ */ jsx81(
|
|
18449
18576
|
TextQuestionView,
|
|
18450
18577
|
{
|
|
18451
18578
|
question: currentQuestion,
|
|
@@ -18460,7 +18587,7 @@ var AskUserDialog = ({
|
|
|
18460
18587
|
currentQuestionIndex
|
|
18461
18588
|
);
|
|
18462
18589
|
}
|
|
18463
|
-
return /* @__PURE__ */
|
|
18590
|
+
return /* @__PURE__ */ jsx81(
|
|
18464
18591
|
ChoiceQuestionView,
|
|
18465
18592
|
{
|
|
18466
18593
|
question: effectiveQuestion,
|
|
@@ -18477,7 +18604,7 @@ var AskUserDialog = ({
|
|
|
18477
18604
|
};
|
|
18478
18605
|
|
|
18479
18606
|
// src/ui/components/dialogs/user-question-queue.tsx
|
|
18480
|
-
import { jsx as
|
|
18607
|
+
import { jsx as jsx82 } from "react/jsx-runtime";
|
|
18481
18608
|
var UserQuestionQueue = () => {
|
|
18482
18609
|
const { runtime, snapshot } = useUserQuestionRuntime();
|
|
18483
18610
|
const request = snapshot.pending[0];
|
|
@@ -18500,7 +18627,7 @@ var UserQuestionQueue = () => {
|
|
|
18500
18627
|
[request]
|
|
18501
18628
|
);
|
|
18502
18629
|
if (request === void 0) return null;
|
|
18503
|
-
return /* @__PURE__ */
|
|
18630
|
+
return /* @__PURE__ */ jsx82(
|
|
18504
18631
|
AskUserDialog,
|
|
18505
18632
|
{
|
|
18506
18633
|
questions: [...questions],
|
|
@@ -18523,7 +18650,7 @@ var UserQuestionQueue = () => {
|
|
|
18523
18650
|
};
|
|
18524
18651
|
|
|
18525
18652
|
// src/ui/components/layout/screen-reader-app-layout.tsx
|
|
18526
|
-
import { jsx as
|
|
18653
|
+
import { jsx as jsx83, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
18527
18654
|
var ScreenReaderAppLayout = () => {
|
|
18528
18655
|
const uiState = useUIState();
|
|
18529
18656
|
const { rootUiRef, terminalHeight } = uiState;
|
|
@@ -18532,18 +18659,18 @@ var ScreenReaderAppLayout = () => {
|
|
|
18532
18659
|
const { snapshot: userQuestionSnapshot } = useUserQuestionRuntime();
|
|
18533
18660
|
const pendingUserQuestion = userQuestionSnapshot.pending[0];
|
|
18534
18661
|
useFlickerDetector(rootUiRef, terminalHeight);
|
|
18535
|
-
return /* @__PURE__ */
|
|
18536
|
-
|
|
18662
|
+
return /* @__PURE__ */ jsxs63(
|
|
18663
|
+
Box64,
|
|
18537
18664
|
{
|
|
18538
18665
|
flexDirection: "column",
|
|
18539
18666
|
width: "90%",
|
|
18540
18667
|
height: "100%",
|
|
18541
18668
|
ref: uiState.rootUiRef,
|
|
18542
18669
|
children: [
|
|
18543
|
-
/* @__PURE__ */
|
|
18544
|
-
/* @__PURE__ */
|
|
18545
|
-
/* @__PURE__ */
|
|
18546
|
-
pendingApproval !== void 0 ? /* @__PURE__ */
|
|
18670
|
+
/* @__PURE__ */ jsx83(Notifications, {}),
|
|
18671
|
+
/* @__PURE__ */ jsx83(Footer, {}),
|
|
18672
|
+
/* @__PURE__ */ jsx83(Box64, { flexGrow: 1, overflow: "hidden", children: /* @__PURE__ */ jsx83(MainContent, {}) }),
|
|
18673
|
+
pendingApproval !== void 0 ? /* @__PURE__ */ jsx83(
|
|
18547
18674
|
ToolConfirmationQueue,
|
|
18548
18675
|
{
|
|
18549
18676
|
request: pendingApproval,
|
|
@@ -18552,34 +18679,34 @@ var ScreenReaderAppLayout = () => {
|
|
|
18552
18679
|
terminalWidth: uiState.terminalWidth,
|
|
18553
18680
|
respond: (response) => approvalRuntime.respond(pendingApproval.id, response)
|
|
18554
18681
|
}
|
|
18555
|
-
) : pendingUserQuestion !== void 0 ? /* @__PURE__ */
|
|
18682
|
+
) : pendingUserQuestion !== void 0 ? /* @__PURE__ */ jsx83(UserQuestionQueue, {}) : uiState.dialogsVisible ? /* @__PURE__ */ jsx83(
|
|
18556
18683
|
DialogManager,
|
|
18557
18684
|
{
|
|
18558
18685
|
terminalWidth: uiState.terminalWidth
|
|
18559
18686
|
}
|
|
18560
|
-
) : /* @__PURE__ */
|
|
18561
|
-
/* @__PURE__ */
|
|
18687
|
+
) : /* @__PURE__ */ jsx83(Composer, {}),
|
|
18688
|
+
/* @__PURE__ */ jsx83(ExitWarning, {})
|
|
18562
18689
|
]
|
|
18563
18690
|
}
|
|
18564
18691
|
);
|
|
18565
18692
|
};
|
|
18566
18693
|
|
|
18567
18694
|
// src/ui/components/layout/default-app-layout.tsx
|
|
18568
|
-
import { Box as
|
|
18695
|
+
import { Box as Box66 } from "ink";
|
|
18569
18696
|
|
|
18570
18697
|
// src/ui/components/dialogs/copy-mode-warning.tsx
|
|
18571
|
-
import { Box as
|
|
18572
|
-
import { jsx as
|
|
18698
|
+
import { Box as Box65, Text as Text59 } from "ink";
|
|
18699
|
+
import { jsx as jsx84 } from "react/jsx-runtime";
|
|
18573
18700
|
var CopyModeWarning = () => {
|
|
18574
18701
|
const { copyModeEnabled } = useUIState();
|
|
18575
18702
|
if (!copyModeEnabled) {
|
|
18576
18703
|
return null;
|
|
18577
18704
|
}
|
|
18578
|
-
return /* @__PURE__ */
|
|
18705
|
+
return /* @__PURE__ */ jsx84(Box65, { children: /* @__PURE__ */ jsx84(Text59, { color: theme.status.warning, children: "In Copy Mode. Press any key to exit." }) });
|
|
18579
18706
|
};
|
|
18580
18707
|
|
|
18581
18708
|
// src/ui/components/layout/default-app-layout.tsx
|
|
18582
|
-
import { Fragment as Fragment14, jsx as
|
|
18709
|
+
import { Fragment as Fragment14, jsx as jsx85, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
18583
18710
|
var DefaultAppLayout = () => {
|
|
18584
18711
|
const uiState = useUIState();
|
|
18585
18712
|
const isAlternateBuffer = useAlternateBuffer();
|
|
@@ -18589,8 +18716,8 @@ var DefaultAppLayout = () => {
|
|
|
18589
18716
|
const pendingUserQuestion = userQuestionSnapshot.pending[0];
|
|
18590
18717
|
const { rootUiRef, terminalHeight } = uiState;
|
|
18591
18718
|
useFlickerDetector(rootUiRef, terminalHeight);
|
|
18592
|
-
return /* @__PURE__ */
|
|
18593
|
-
|
|
18719
|
+
return /* @__PURE__ */ jsxs64(
|
|
18720
|
+
Box66,
|
|
18594
18721
|
{
|
|
18595
18722
|
flexDirection: "column",
|
|
18596
18723
|
width: uiState.terminalWidth,
|
|
@@ -18601,9 +18728,9 @@ var DefaultAppLayout = () => {
|
|
|
18601
18728
|
overflow: "hidden",
|
|
18602
18729
|
ref: uiState.rootUiRef,
|
|
18603
18730
|
children: [
|
|
18604
|
-
/* @__PURE__ */
|
|
18605
|
-
/* @__PURE__ */
|
|
18606
|
-
|
|
18731
|
+
/* @__PURE__ */ jsx85(MainContent, {}),
|
|
18732
|
+
/* @__PURE__ */ jsxs64(
|
|
18733
|
+
Box66,
|
|
18607
18734
|
{
|
|
18608
18735
|
flexDirection: "column",
|
|
18609
18736
|
ref: uiState.mainControlsRef,
|
|
@@ -18611,10 +18738,10 @@ var DefaultAppLayout = () => {
|
|
|
18611
18738
|
flexGrow: 0,
|
|
18612
18739
|
width: uiState.terminalWidth,
|
|
18613
18740
|
children: [
|
|
18614
|
-
/* @__PURE__ */
|
|
18615
|
-
/* @__PURE__ */
|
|
18616
|
-
pendingApproval !== void 0 ? /* @__PURE__ */
|
|
18617
|
-
/* @__PURE__ */
|
|
18741
|
+
/* @__PURE__ */ jsx85(Notifications, {}),
|
|
18742
|
+
/* @__PURE__ */ jsx85(CopyModeWarning, {}),
|
|
18743
|
+
pendingApproval !== void 0 ? /* @__PURE__ */ jsxs64(Fragment14, { children: [
|
|
18744
|
+
/* @__PURE__ */ jsx85(
|
|
18618
18745
|
ToolConfirmationQueue,
|
|
18619
18746
|
{
|
|
18620
18747
|
request: pendingApproval,
|
|
@@ -18624,14 +18751,14 @@ var DefaultAppLayout = () => {
|
|
|
18624
18751
|
respond: (response) => approvalRuntime.respond(pendingApproval.id, response)
|
|
18625
18752
|
}
|
|
18626
18753
|
),
|
|
18627
|
-
/* @__PURE__ */
|
|
18628
|
-
] }) : pendingUserQuestion !== void 0 ? /* @__PURE__ */
|
|
18754
|
+
/* @__PURE__ */ jsx85(Composer, { isFocused: false })
|
|
18755
|
+
] }) : pendingUserQuestion !== void 0 ? /* @__PURE__ */ jsx85(UserQuestionQueue, {}) : uiState.customDialog ? uiState.customDialog : uiState.dialogsVisible ? /* @__PURE__ */ jsx85(
|
|
18629
18756
|
DialogManager,
|
|
18630
18757
|
{
|
|
18631
18758
|
terminalWidth: uiState.terminalWidth
|
|
18632
18759
|
}
|
|
18633
|
-
) : /* @__PURE__ */
|
|
18634
|
-
/* @__PURE__ */
|
|
18760
|
+
) : /* @__PURE__ */ jsx85(Composer, { isFocused: true }),
|
|
18761
|
+
/* @__PURE__ */ jsx85(ExitWarning, {})
|
|
18635
18762
|
]
|
|
18636
18763
|
}
|
|
18637
18764
|
)
|
|
@@ -18641,23 +18768,23 @@ var DefaultAppLayout = () => {
|
|
|
18641
18768
|
};
|
|
18642
18769
|
|
|
18643
18770
|
// src/ui/components/indicators/alternate-buffer-quitting-display.tsx
|
|
18644
|
-
import { Box as
|
|
18645
|
-
import { jsx as
|
|
18771
|
+
import { Box as Box67, Text as Text60 } from "ink";
|
|
18772
|
+
import { jsx as jsx86, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
18646
18773
|
var AlternateBufferQuittingDisplay = () => {
|
|
18647
18774
|
const { version } = useAppContext();
|
|
18648
18775
|
const uiState = useUIState();
|
|
18649
18776
|
const { snapshot: approvalSnapshot } = useApprovalRuntime();
|
|
18650
18777
|
const pendingApproval = approvalSnapshot.pending[0];
|
|
18651
|
-
return /* @__PURE__ */
|
|
18652
|
-
|
|
18778
|
+
return /* @__PURE__ */ jsxs65(
|
|
18779
|
+
Box67,
|
|
18653
18780
|
{
|
|
18654
18781
|
flexDirection: "column",
|
|
18655
18782
|
flexShrink: 0,
|
|
18656
18783
|
flexGrow: 0,
|
|
18657
18784
|
width: uiState.terminalWidth,
|
|
18658
18785
|
children: [
|
|
18659
|
-
/* @__PURE__ */
|
|
18660
|
-
uiState.history.map((h) => /* @__PURE__ */
|
|
18786
|
+
/* @__PURE__ */ jsx86(AppHeader, { version }, "app-header"),
|
|
18787
|
+
uiState.history.map((h) => /* @__PURE__ */ jsx86(
|
|
18661
18788
|
HistoryItemDisplay,
|
|
18662
18789
|
{
|
|
18663
18790
|
terminalWidth: uiState.mainAreaWidth,
|
|
@@ -18669,7 +18796,7 @@ var AlternateBufferQuittingDisplay = () => {
|
|
|
18669
18796
|
},
|
|
18670
18797
|
h.id
|
|
18671
18798
|
)),
|
|
18672
|
-
uiState.pendingHistoryItems.map((item, i) => /* @__PURE__ */
|
|
18799
|
+
uiState.pendingHistoryItems.map((item, i) => /* @__PURE__ */ jsx86(
|
|
18673
18800
|
HistoryItemDisplay,
|
|
18674
18801
|
{
|
|
18675
18802
|
availableTerminalHeight: void 0,
|
|
@@ -18682,31 +18809,31 @@ var AlternateBufferQuittingDisplay = () => {
|
|
|
18682
18809
|
},
|
|
18683
18810
|
i
|
|
18684
18811
|
)),
|
|
18685
|
-
pendingApproval !== void 0 && /* @__PURE__ */
|
|
18686
|
-
/* @__PURE__ */
|
|
18687
|
-
/* @__PURE__ */
|
|
18688
|
-
pendingApproval.reason !== void 0 && /* @__PURE__ */
|
|
18812
|
+
pendingApproval !== void 0 && /* @__PURE__ */ jsxs65(Box67, { flexDirection: "column", marginTop: 1, marginBottom: 1, children: [
|
|
18813
|
+
/* @__PURE__ */ jsx86(Text60, { color: theme.status.warning, bold: true, children: "Action Required (was prompted):" }),
|
|
18814
|
+
/* @__PURE__ */ jsx86(Text60, { color: theme.text.primary, children: pendingApproval.toolName }),
|
|
18815
|
+
pendingApproval.reason !== void 0 && /* @__PURE__ */ jsx86(Text60, { color: theme.text.secondary, children: pendingApproval.reason })
|
|
18689
18816
|
] }),
|
|
18690
|
-
/* @__PURE__ */
|
|
18817
|
+
/* @__PURE__ */ jsx86(QuittingDisplay, {})
|
|
18691
18818
|
]
|
|
18692
18819
|
}
|
|
18693
18820
|
);
|
|
18694
18821
|
};
|
|
18695
18822
|
|
|
18696
18823
|
// src/ui/app.tsx
|
|
18697
|
-
import { jsx as
|
|
18824
|
+
import { jsx as jsx87 } from "react/jsx-runtime";
|
|
18698
18825
|
var App = () => {
|
|
18699
18826
|
const uiState = useUIState();
|
|
18700
18827
|
const isAlternateBuffer = useAlternateBuffer();
|
|
18701
18828
|
const isScreenReaderEnabled = useIsScreenReaderEnabled5();
|
|
18702
18829
|
if (uiState.quittingMessages) {
|
|
18703
18830
|
if (isAlternateBuffer) {
|
|
18704
|
-
return /* @__PURE__ */
|
|
18831
|
+
return /* @__PURE__ */ jsx87(StreamingContext.Provider, { value: uiState.streamingState, children: /* @__PURE__ */ jsx87(AlternateBufferQuittingDisplay, {}) });
|
|
18705
18832
|
} else {
|
|
18706
|
-
return /* @__PURE__ */
|
|
18833
|
+
return /* @__PURE__ */ jsx87(QuittingDisplay, {});
|
|
18707
18834
|
}
|
|
18708
18835
|
}
|
|
18709
|
-
return /* @__PURE__ */
|
|
18836
|
+
return /* @__PURE__ */ jsx87(StreamingContext.Provider, { value: uiState.streamingState, children: isScreenReaderEnabled ? /* @__PURE__ */ jsx87(ScreenReaderAppLayout, {}) : /* @__PURE__ */ jsx87(DefaultAppLayout, {}) });
|
|
18710
18837
|
};
|
|
18711
18838
|
|
|
18712
18839
|
// src/ui/app-container.tsx
|
|
@@ -18850,6 +18977,17 @@ import { arch, platform as platform2, release } from "node:os";
|
|
|
18850
18977
|
function modelSelectionLabel(selection) {
|
|
18851
18978
|
return `${selection.provider}/${selection.model}`;
|
|
18852
18979
|
}
|
|
18980
|
+
function modelReasoningEffortLabel(selection) {
|
|
18981
|
+
const reasoning = selection.reasoning;
|
|
18982
|
+
if (reasoning === void 0) return void 0;
|
|
18983
|
+
const selected = reasoning.selectedEffort;
|
|
18984
|
+
if (selected === void 0) {
|
|
18985
|
+
return reasoning.efforts.find(
|
|
18986
|
+
(effort) => effort.id === reasoning.defaultEffort
|
|
18987
|
+
)?.name ?? "Provider default";
|
|
18988
|
+
}
|
|
18989
|
+
return reasoning.efforts.find((effort) => effort.id === selected)?.name ?? selected;
|
|
18990
|
+
}
|
|
18853
18991
|
|
|
18854
18992
|
// src/ui/commands/about-command.ts
|
|
18855
18993
|
var aboutCommand = {
|
|
@@ -18940,272 +19078,17 @@ var vimCommand = {
|
|
|
18940
19078
|
}
|
|
18941
19079
|
};
|
|
18942
19080
|
|
|
18943
|
-
// src/terminal/setup.ts
|
|
18944
|
-
import { promises as fs9 } from "node:fs";
|
|
18945
|
-
import * as os3 from "node:os";
|
|
18946
|
-
import * as path11 from "node:path";
|
|
18947
|
-
import { exec } from "node:child_process";
|
|
18948
|
-
import { promisify } from "node:util";
|
|
18949
|
-
var VSCODE_SHIFT_ENTER_SEQUENCE = "\\\r\n";
|
|
18950
|
-
var execAsync = promisify(exec);
|
|
18951
|
-
function stripJsonComments2(content) {
|
|
18952
|
-
return content.replace(/^\s*\/\/.*$/gm, "");
|
|
18953
|
-
}
|
|
18954
|
-
function getTerminalProgram() {
|
|
18955
|
-
const termProgram = process.env["TERM_PROGRAM"];
|
|
18956
|
-
if (process.env["CURSOR_TRACE_ID"] || process.env["VSCODE_GIT_ASKPASS_MAIN"]?.toLowerCase().includes("cursor")) {
|
|
18957
|
-
return "cursor";
|
|
18958
|
-
}
|
|
18959
|
-
if (process.env["VSCODE_GIT_ASKPASS_MAIN"]?.toLowerCase().includes("windsurf")) {
|
|
18960
|
-
return "windsurf";
|
|
18961
|
-
}
|
|
18962
|
-
if (process.env["VSCODE_GIT_ASKPASS_MAIN"]?.toLowerCase().includes("antigravity")) {
|
|
18963
|
-
return "antigravity";
|
|
18964
|
-
}
|
|
18965
|
-
if (termProgram === "vscode" || process.env["VSCODE_GIT_IPC_HANDLE"]) {
|
|
18966
|
-
return "vscode";
|
|
18967
|
-
}
|
|
18968
|
-
return null;
|
|
18969
|
-
}
|
|
18970
|
-
async function detectTerminal() {
|
|
18971
|
-
const envTerminal = getTerminalProgram();
|
|
18972
|
-
if (envTerminal) {
|
|
18973
|
-
return envTerminal;
|
|
18974
|
-
}
|
|
18975
|
-
if (os3.platform() !== "win32") {
|
|
18976
|
-
try {
|
|
18977
|
-
const { stdout } = await execAsync("ps -o comm= -p $PPID");
|
|
18978
|
-
const parentName = stdout.trim();
|
|
18979
|
-
if (parentName.includes("windsurf") || parentName.includes("Windsurf"))
|
|
18980
|
-
return "windsurf";
|
|
18981
|
-
if (parentName.includes("antigravity") || parentName.includes("Antigravity"))
|
|
18982
|
-
return "antigravity";
|
|
18983
|
-
if (parentName.includes("cursor") || parentName.includes("Cursor"))
|
|
18984
|
-
return "cursor";
|
|
18985
|
-
if (parentName.includes("code") || parentName.includes("Code"))
|
|
18986
|
-
return "vscode";
|
|
18987
|
-
} catch (error) {
|
|
18988
|
-
debugLogger.debug("Parent process detection failed:", error);
|
|
18989
|
-
}
|
|
18990
|
-
}
|
|
18991
|
-
return null;
|
|
18992
|
-
}
|
|
18993
|
-
async function backupFile(filePath) {
|
|
18994
|
-
try {
|
|
18995
|
-
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
18996
|
-
const backupPath = `${filePath}.backup.${timestamp}`;
|
|
18997
|
-
await fs9.copyFile(filePath, backupPath);
|
|
18998
|
-
} catch (error) {
|
|
18999
|
-
debugLogger.warn(`Failed to create backup of ${filePath}:`, error);
|
|
19000
|
-
}
|
|
19001
|
-
}
|
|
19002
|
-
function getVSCodeStyleConfigDir(appName) {
|
|
19003
|
-
const platform4 = os3.platform();
|
|
19004
|
-
if (platform4 === "darwin") {
|
|
19005
|
-
return path11.join(
|
|
19006
|
-
homedir(),
|
|
19007
|
-
"Library",
|
|
19008
|
-
"Application Support",
|
|
19009
|
-
appName,
|
|
19010
|
-
"User"
|
|
19011
|
-
);
|
|
19012
|
-
} else if (platform4 === "win32") {
|
|
19013
|
-
if (!process.env["APPDATA"]) {
|
|
19014
|
-
return null;
|
|
19015
|
-
}
|
|
19016
|
-
return path11.join(process.env["APPDATA"], appName, "User");
|
|
19017
|
-
} else {
|
|
19018
|
-
return path11.join(homedir(), ".config", appName, "User");
|
|
19019
|
-
}
|
|
19020
|
-
}
|
|
19021
|
-
async function configureVSCodeStyle(terminalName, appName) {
|
|
19022
|
-
const configDir = getVSCodeStyleConfigDir(appName);
|
|
19023
|
-
if (!configDir) {
|
|
19024
|
-
return {
|
|
19025
|
-
success: false,
|
|
19026
|
-
message: `Could not determine ${terminalName} config path on Windows: APPDATA environment variable is not set.`
|
|
19027
|
-
};
|
|
19028
|
-
}
|
|
19029
|
-
const keybindingsFile = path11.join(configDir, "keybindings.json");
|
|
19030
|
-
try {
|
|
19031
|
-
await fs9.mkdir(configDir, { recursive: true });
|
|
19032
|
-
let keybindings = [];
|
|
19033
|
-
try {
|
|
19034
|
-
const content = await fs9.readFile(keybindingsFile, "utf8");
|
|
19035
|
-
await backupFile(keybindingsFile);
|
|
19036
|
-
try {
|
|
19037
|
-
const cleanContent = stripJsonComments2(content);
|
|
19038
|
-
const parsedContent = JSON.parse(cleanContent);
|
|
19039
|
-
if (!Array.isArray(parsedContent)) {
|
|
19040
|
-
return {
|
|
19041
|
-
success: false,
|
|
19042
|
-
message: `${terminalName} keybindings.json exists but is not a valid JSON array. Please fix the file manually or delete it to allow automatic configuration.
|
|
19043
|
-
File: ${keybindingsFile}`
|
|
19044
|
-
};
|
|
19045
|
-
}
|
|
19046
|
-
keybindings = parsedContent;
|
|
19047
|
-
} catch (parseError) {
|
|
19048
|
-
return {
|
|
19049
|
-
success: false,
|
|
19050
|
-
message: `Failed to parse ${terminalName} keybindings.json. The file contains invalid JSON.
|
|
19051
|
-
Please fix the file manually or delete it to allow automatic configuration.
|
|
19052
|
-
File: ${keybindingsFile}
|
|
19053
|
-
Error: ${parseError}`
|
|
19054
|
-
};
|
|
19055
|
-
}
|
|
19056
|
-
} catch {
|
|
19057
|
-
}
|
|
19058
|
-
const shiftEnterBinding = {
|
|
19059
|
-
key: "shift+enter",
|
|
19060
|
-
command: "workbench.action.terminal.sendSequence",
|
|
19061
|
-
when: "terminalFocus",
|
|
19062
|
-
args: { text: VSCODE_SHIFT_ENTER_SEQUENCE }
|
|
19063
|
-
};
|
|
19064
|
-
const ctrlEnterBinding = {
|
|
19065
|
-
key: "ctrl+enter",
|
|
19066
|
-
command: "workbench.action.terminal.sendSequence",
|
|
19067
|
-
when: "terminalFocus",
|
|
19068
|
-
args: { text: VSCODE_SHIFT_ENTER_SEQUENCE }
|
|
19069
|
-
};
|
|
19070
|
-
const hasOurShiftEnter = keybindings.some((kb) => {
|
|
19071
|
-
const binding = kb;
|
|
19072
|
-
return binding.key === "shift+enter" && binding.command === "workbench.action.terminal.sendSequence" && binding.args?.text === "\\\r\n";
|
|
19073
|
-
});
|
|
19074
|
-
const hasOurCtrlEnter = keybindings.some((kb) => {
|
|
19075
|
-
const binding = kb;
|
|
19076
|
-
return binding.key === "ctrl+enter" && binding.command === "workbench.action.terminal.sendSequence" && binding.args?.text === "\\\r\n";
|
|
19077
|
-
});
|
|
19078
|
-
if (hasOurShiftEnter && hasOurCtrlEnter) {
|
|
19079
|
-
return {
|
|
19080
|
-
success: true,
|
|
19081
|
-
message: `${terminalName} keybindings already configured.`
|
|
19082
|
-
};
|
|
19083
|
-
}
|
|
19084
|
-
const existingShiftEnter = keybindings.find((kb) => {
|
|
19085
|
-
const binding = kb;
|
|
19086
|
-
return binding.key === "shift+enter";
|
|
19087
|
-
});
|
|
19088
|
-
const existingCtrlEnter = keybindings.find((kb) => {
|
|
19089
|
-
const binding = kb;
|
|
19090
|
-
return binding.key === "ctrl+enter";
|
|
19091
|
-
});
|
|
19092
|
-
if (existingShiftEnter || existingCtrlEnter) {
|
|
19093
|
-
const messages = [];
|
|
19094
|
-
if (existingShiftEnter && !hasOurShiftEnter) {
|
|
19095
|
-
messages.push(`- Shift+Enter binding already exists`);
|
|
19096
|
-
}
|
|
19097
|
-
if (existingCtrlEnter && !hasOurCtrlEnter) {
|
|
19098
|
-
messages.push(`- Ctrl+Enter binding already exists`);
|
|
19099
|
-
}
|
|
19100
|
-
if (messages.length > 0) {
|
|
19101
|
-
return {
|
|
19102
|
-
success: false,
|
|
19103
|
-
message: `Existing keybindings detected. Will not modify to avoid conflicts.
|
|
19104
|
-
` + messages.join("\n") + `
|
|
19105
|
-
Please check and modify manually if needed: ${keybindingsFile}`
|
|
19106
|
-
};
|
|
19107
|
-
}
|
|
19108
|
-
}
|
|
19109
|
-
if (!hasOurShiftEnter) keybindings.unshift(shiftEnterBinding);
|
|
19110
|
-
if (!hasOurCtrlEnter) keybindings.unshift(ctrlEnterBinding);
|
|
19111
|
-
await fs9.writeFile(keybindingsFile, JSON.stringify(keybindings, null, 4));
|
|
19112
|
-
return {
|
|
19113
|
-
success: true,
|
|
19114
|
-
message: `Added Shift+Enter and Ctrl+Enter keybindings to ${terminalName}.
|
|
19115
|
-
Modified: ${keybindingsFile}`,
|
|
19116
|
-
requiresRestart: true
|
|
19117
|
-
};
|
|
19118
|
-
} catch (error) {
|
|
19119
|
-
return {
|
|
19120
|
-
success: false,
|
|
19121
|
-
message: `Failed to configure ${terminalName}.
|
|
19122
|
-
File: ${keybindingsFile}
|
|
19123
|
-
Error: ${error}`
|
|
19124
|
-
};
|
|
19125
|
-
}
|
|
19126
|
-
}
|
|
19127
|
-
async function configureVSCode() {
|
|
19128
|
-
return configureVSCodeStyle("VS Code", "Code");
|
|
19129
|
-
}
|
|
19130
|
-
async function configureCursor() {
|
|
19131
|
-
return configureVSCodeStyle("Cursor", "Cursor");
|
|
19132
|
-
}
|
|
19133
|
-
async function configureWindsurf() {
|
|
19134
|
-
return configureVSCodeStyle("Windsurf", "Windsurf");
|
|
19135
|
-
}
|
|
19136
|
-
async function configureAntigravity() {
|
|
19137
|
-
return configureVSCodeStyle("Antigravity", "Antigravity");
|
|
19138
|
-
}
|
|
19139
|
-
async function terminalSetup() {
|
|
19140
|
-
if (terminalCapabilityManager.isKittyProtocolEnabled()) {
|
|
19141
|
-
return {
|
|
19142
|
-
success: true,
|
|
19143
|
-
message: "Your terminal is already configured for an optimal experience with multiline input (Shift+Enter and Ctrl+Enter)."
|
|
19144
|
-
};
|
|
19145
|
-
}
|
|
19146
|
-
const terminal = await detectTerminal();
|
|
19147
|
-
if (!terminal) {
|
|
19148
|
-
return {
|
|
19149
|
-
success: false,
|
|
19150
|
-
message: "Could not detect terminal type. Supported terminals: VS Code, Cursor, Windsurf, and Antigravity."
|
|
19151
|
-
};
|
|
19152
|
-
}
|
|
19153
|
-
switch (terminal) {
|
|
19154
|
-
case "vscode":
|
|
19155
|
-
return configureVSCode();
|
|
19156
|
-
case "cursor":
|
|
19157
|
-
return configureCursor();
|
|
19158
|
-
case "windsurf":
|
|
19159
|
-
return configureWindsurf();
|
|
19160
|
-
case "antigravity":
|
|
19161
|
-
return configureAntigravity();
|
|
19162
|
-
default:
|
|
19163
|
-
return {
|
|
19164
|
-
success: false,
|
|
19165
|
-
message: `Terminal "${terminal}" is not supported yet.`
|
|
19166
|
-
};
|
|
19167
|
-
}
|
|
19168
|
-
}
|
|
19169
|
-
|
|
19170
|
-
// src/ui/commands/terminal-setup-command.ts
|
|
19171
|
-
var terminalSetupCommand = {
|
|
19172
|
-
name: "terminal-setup",
|
|
19173
|
-
description: "Configure terminal keybindings for multiline input (VS Code, Cursor, Windsurf)",
|
|
19174
|
-
kind: "built-in" /* BUILT_IN */,
|
|
19175
|
-
autoExecute: true,
|
|
19176
|
-
action: async () => {
|
|
19177
|
-
try {
|
|
19178
|
-
const result = await terminalSetup();
|
|
19179
|
-
let content = result.message;
|
|
19180
|
-
if (result.requiresRestart) {
|
|
19181
|
-
content += "\n\nPlease restart your terminal for the changes to take effect.";
|
|
19182
|
-
}
|
|
19183
|
-
return {
|
|
19184
|
-
type: "message",
|
|
19185
|
-
content,
|
|
19186
|
-
messageType: result.success ? "info" : "error"
|
|
19187
|
-
};
|
|
19188
|
-
} catch (error) {
|
|
19189
|
-
return {
|
|
19190
|
-
type: "message",
|
|
19191
|
-
content: `Failed to configure terminal: ${error}`,
|
|
19192
|
-
messageType: "error"
|
|
19193
|
-
};
|
|
19194
|
-
}
|
|
19195
|
-
}
|
|
19196
|
-
};
|
|
19197
|
-
|
|
19198
19081
|
// src/ui/commands/model-command.ts
|
|
19199
19082
|
import React16 from "react";
|
|
19200
19083
|
|
|
19201
19084
|
// src/ui/components/dialogs/model-dialog.tsx
|
|
19202
19085
|
import { useCallback as useCallback32, useEffect as useEffect39, useMemo as useMemo28, useRef as useRef19, useState as useState36 } from "react";
|
|
19203
|
-
import { Box as
|
|
19086
|
+
import { Box as Box69, Text as Text62 } from "ink";
|
|
19204
19087
|
|
|
19205
19088
|
// src/ui/components/dialogs/provider-setup-dialog.tsx
|
|
19206
19089
|
import { useEffect as useEffect38, useRef as useRef18, useState as useState35 } from "react";
|
|
19207
|
-
import { Box as
|
|
19208
|
-
import { jsx as
|
|
19090
|
+
import { Box as Box68, Text as Text61 } from "ink";
|
|
19091
|
+
import { jsx as jsx88, jsxs as jsxs66 } from "react/jsx-runtime";
|
|
19209
19092
|
function ProviderSetupDialog({
|
|
19210
19093
|
runtime,
|
|
19211
19094
|
provider,
|
|
@@ -19307,8 +19190,8 @@ function ProviderSetupDialog({
|
|
|
19307
19190
|
const fieldLabel = credential.endsWith("_API_KEY") ? "API key" : "Credential";
|
|
19308
19191
|
const canWrite = view?.writable === true;
|
|
19309
19192
|
const isReadOnly = view !== void 0 && view.status !== "unsupported" && view.status !== "error" && !view.writable;
|
|
19310
|
-
return /* @__PURE__ */
|
|
19311
|
-
|
|
19193
|
+
return /* @__PURE__ */ jsxs66(
|
|
19194
|
+
Box68,
|
|
19312
19195
|
{
|
|
19313
19196
|
borderStyle: "round",
|
|
19314
19197
|
borderColor: theme.border.default,
|
|
@@ -19317,45 +19200,45 @@ function ProviderSetupDialog({
|
|
|
19317
19200
|
paddingY: 1,
|
|
19318
19201
|
width: "100%",
|
|
19319
19202
|
children: [
|
|
19320
|
-
/* @__PURE__ */
|
|
19321
|
-
/* @__PURE__ */
|
|
19203
|
+
/* @__PURE__ */ jsxs66(Box68, { justifyContent: "space-between", children: [
|
|
19204
|
+
/* @__PURE__ */ jsxs66(Text61, { bold: true, color: theme.text.accent, children: [
|
|
19322
19205
|
"Configure ",
|
|
19323
19206
|
label
|
|
19324
19207
|
] }),
|
|
19325
|
-
/* @__PURE__ */
|
|
19326
|
-
/* @__PURE__ */
|
|
19208
|
+
/* @__PURE__ */ jsxs66(Text61, { color: theme.text.secondary, children: [
|
|
19209
|
+
/* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: "Esc" }),
|
|
19327
19210
|
" ",
|
|
19328
19211
|
reason === "first-run" ? "Cancel" : "Close"
|
|
19329
19212
|
] })
|
|
19330
19213
|
] }),
|
|
19331
|
-
/* @__PURE__ */
|
|
19332
|
-
/* @__PURE__ */
|
|
19333
|
-
/* @__PURE__ */
|
|
19214
|
+
/* @__PURE__ */ jsxs66(Box68, { marginTop: 1, flexDirection: "column", children: [
|
|
19215
|
+
/* @__PURE__ */ jsx88(Text61, { color: theme.text.primary, children: reason === "first-run" ? `Enter your ${label} API key to continue.` : `Enter a replacement credential for ${label}.` }),
|
|
19216
|
+
/* @__PURE__ */ jsxs66(Text61, { color: theme.text.secondary, children: [
|
|
19334
19217
|
"Alternatively, set ",
|
|
19335
19218
|
credential,
|
|
19336
19219
|
" before starting DSH Console."
|
|
19337
19220
|
] })
|
|
19338
19221
|
] }),
|
|
19339
|
-
!view && !error && /* @__PURE__ */
|
|
19340
|
-
view?.status === "configured" && /* @__PURE__ */
|
|
19222
|
+
!view && !error && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "Checking provider setup..." }) }),
|
|
19223
|
+
view?.status === "configured" && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsxs66(Text61, { color: theme.status.success, children: [
|
|
19341
19224
|
"Configured from ",
|
|
19342
19225
|
view.source ?? "DSH credential storage",
|
|
19343
19226
|
"."
|
|
19344
19227
|
] }) }),
|
|
19345
|
-
(view?.status === "unsupported" || view?.status === "error") && view.message && /* @__PURE__ */
|
|
19346
|
-
isReadOnly && /* @__PURE__ */
|
|
19228
|
+
(view?.status === "unsupported" || view?.status === "error") && view.message && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.status.warning, children: view.message }) }),
|
|
19229
|
+
isReadOnly && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsxs66(Text61, { color: theme.status.warning, children: [
|
|
19347
19230
|
credential,
|
|
19348
19231
|
" is supplied by a read-only source. Change that source and restart DSH Console."
|
|
19349
19232
|
] }) }),
|
|
19350
|
-
canWrite && /* @__PURE__ */
|
|
19351
|
-
/* @__PURE__ */
|
|
19352
|
-
/* @__PURE__ */
|
|
19353
|
-
|
|
19233
|
+
canWrite && /* @__PURE__ */ jsxs66(Box68, { marginTop: 1, flexDirection: "column", children: [
|
|
19234
|
+
/* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: fieldLabel }),
|
|
19235
|
+
/* @__PURE__ */ jsx88(
|
|
19236
|
+
Box68,
|
|
19354
19237
|
{
|
|
19355
19238
|
borderStyle: "single",
|
|
19356
19239
|
borderColor: saving ? theme.border.default : theme.text.accent,
|
|
19357
19240
|
paddingX: 1,
|
|
19358
|
-
children: /* @__PURE__ */
|
|
19241
|
+
children: /* @__PURE__ */ jsx88(Text61, { color: theme.text.primary, children: secret.length === 0 ? /* @__PURE__ */ jsxs66(Text61, { color: theme.text.secondary, children: [
|
|
19359
19242
|
"Paste your ",
|
|
19360
19243
|
label,
|
|
19361
19244
|
" API key"
|
|
@@ -19363,37 +19246,37 @@ function ProviderSetupDialog({
|
|
|
19363
19246
|
}
|
|
19364
19247
|
)
|
|
19365
19248
|
] }),
|
|
19366
|
-
error && /* @__PURE__ */
|
|
19367
|
-
canWrite ? /* @__PURE__ */
|
|
19368
|
-
/* @__PURE__ */
|
|
19369
|
-
/* @__PURE__ */
|
|
19370
|
-
/* @__PURE__ */
|
|
19371
|
-
/* @__PURE__ */
|
|
19372
|
-
/* @__PURE__ */
|
|
19373
|
-
/* @__PURE__ */
|
|
19374
|
-
/* @__PURE__ */
|
|
19249
|
+
error && /* @__PURE__ */ jsx88(Box68, { marginTop: 1, children: /* @__PURE__ */ jsx88(Text61, { color: theme.status.error, children: error }) }),
|
|
19250
|
+
canWrite ? /* @__PURE__ */ jsxs66(Box68, { marginTop: 1, flexDirection: "column", children: [
|
|
19251
|
+
/* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: "Stored through the configured DSH credential service. Never added to prompts, sessions, history, or logs." }),
|
|
19252
|
+
/* @__PURE__ */ jsxs66(Box68, { marginTop: 1, children: [
|
|
19253
|
+
/* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.accent, children: "Enter" }),
|
|
19254
|
+
/* @__PURE__ */ jsx88(Text61, { color: theme.text.primary, children: " Save and continue" }),
|
|
19255
|
+
/* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: " " }),
|
|
19256
|
+
/* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: "Esc" }),
|
|
19257
|
+
/* @__PURE__ */ jsxs66(Text61, { color: theme.text.secondary, children: [
|
|
19375
19258
|
" ",
|
|
19376
19259
|
reason === "first-run" ? "Cancel" : "Close"
|
|
19377
19260
|
] }),
|
|
19378
|
-
/* @__PURE__ */
|
|
19379
|
-
/* @__PURE__ */
|
|
19380
|
-
/* @__PURE__ */
|
|
19261
|
+
/* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: " " }),
|
|
19262
|
+
/* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: "Ctrl+C" }),
|
|
19263
|
+
/* @__PURE__ */ jsxs66(Text61, { color: theme.text.secondary, children: [
|
|
19381
19264
|
" ",
|
|
19382
19265
|
secret.length > 0 ? "Clear" : "Cancel"
|
|
19383
19266
|
] })
|
|
19384
19267
|
] })
|
|
19385
|
-
] }) : /* @__PURE__ */
|
|
19386
|
-
/* @__PURE__ */
|
|
19387
|
-
/* @__PURE__ */
|
|
19268
|
+
] }) : /* @__PURE__ */ jsxs66(Box68, { marginTop: 1, children: [
|
|
19269
|
+
/* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.primary, children: "Esc" }),
|
|
19270
|
+
/* @__PURE__ */ jsx88(Text61, { color: theme.text.secondary, children: " Close" })
|
|
19388
19271
|
] }),
|
|
19389
|
-
saving && /* @__PURE__ */
|
|
19272
|
+
saving && /* @__PURE__ */ jsx88(Text61, { bold: true, color: theme.text.accent, children: "Saving credential..." })
|
|
19390
19273
|
]
|
|
19391
19274
|
}
|
|
19392
19275
|
);
|
|
19393
19276
|
}
|
|
19394
19277
|
|
|
19395
19278
|
// src/ui/components/dialogs/model-dialog.tsx
|
|
19396
|
-
import { Fragment as Fragment15, jsx as
|
|
19279
|
+
import { Fragment as Fragment15, jsx as jsx89, jsxs as jsxs67 } from "react/jsx-runtime";
|
|
19397
19280
|
function capabilityLabel(model) {
|
|
19398
19281
|
return model.inputModalities.includes("image") ? "Text + Vision" : "Text";
|
|
19399
19282
|
}
|
|
@@ -19413,6 +19296,7 @@ function ModelDialog({
|
|
|
19413
19296
|
const [checkingProvider, setCheckingProvider] = useState36(false);
|
|
19414
19297
|
const [error, setError] = useState36();
|
|
19415
19298
|
const [setupSelection, setSetupSelection] = useState36();
|
|
19299
|
+
const [reasoningSelection, setReasoningSelection] = useState36();
|
|
19416
19300
|
const providerCheckRef = useRef19(void 0);
|
|
19417
19301
|
useEffect39(() => {
|
|
19418
19302
|
const controller = new AbortController();
|
|
@@ -19460,7 +19344,11 @@ function ModelDialog({
|
|
|
19460
19344
|
setSwitching(true);
|
|
19461
19345
|
setError(void 0);
|
|
19462
19346
|
try {
|
|
19463
|
-
const activated = await runtime.setModel(
|
|
19347
|
+
const activated = await runtime.setModel({
|
|
19348
|
+
provider: selection.provider,
|
|
19349
|
+
model: selection.model,
|
|
19350
|
+
...selection.reasoning?.selectedEffort === void 0 ? {} : { reasoningEffort: selection.reasoning.selectedEffort }
|
|
19351
|
+
});
|
|
19464
19352
|
onSwitched(activated);
|
|
19465
19353
|
} catch (cause) {
|
|
19466
19354
|
setError(cause instanceof Error ? cause.message : String(cause));
|
|
@@ -19473,7 +19361,7 @@ function ModelDialog({
|
|
|
19473
19361
|
);
|
|
19474
19362
|
const finishSelection = useCallback32(
|
|
19475
19363
|
(selection) => {
|
|
19476
|
-
if (selection.provider === current.provider && selection.model === current.model) {
|
|
19364
|
+
if (selection.provider === current.provider && selection.model === current.model && selection.reasoning?.selectedEffort === current.reasoning?.selectedEffort) {
|
|
19477
19365
|
onClose();
|
|
19478
19366
|
return;
|
|
19479
19367
|
}
|
|
@@ -19483,7 +19371,24 @@ function ModelDialog({
|
|
|
19483
19371
|
}
|
|
19484
19372
|
void switchModel(selection);
|
|
19485
19373
|
},
|
|
19486
|
-
[
|
|
19374
|
+
[
|
|
19375
|
+
current.model,
|
|
19376
|
+
current.provider,
|
|
19377
|
+
current.reasoning?.selectedEffort,
|
|
19378
|
+
onClose,
|
|
19379
|
+
runtime,
|
|
19380
|
+
switchModel
|
|
19381
|
+
]
|
|
19382
|
+
);
|
|
19383
|
+
const continueSelection = useCallback32(
|
|
19384
|
+
(selection) => {
|
|
19385
|
+
if (selection.reasoning?.efforts.length) {
|
|
19386
|
+
setReasoningSelection(selection);
|
|
19387
|
+
return;
|
|
19388
|
+
}
|
|
19389
|
+
finishSelection(selection);
|
|
19390
|
+
},
|
|
19391
|
+
[finishSelection]
|
|
19487
19392
|
);
|
|
19488
19393
|
const selectModel = useCallback32(
|
|
19489
19394
|
async (selection) => {
|
|
@@ -19521,9 +19426,9 @@ function ModelDialog({
|
|
|
19521
19426
|
}
|
|
19522
19427
|
}
|
|
19523
19428
|
}
|
|
19524
|
-
|
|
19429
|
+
continueSelection(selection);
|
|
19525
19430
|
},
|
|
19526
|
-
[
|
|
19431
|
+
[continueSelection, providerSetupRuntime]
|
|
19527
19432
|
);
|
|
19528
19433
|
useKeypress(
|
|
19529
19434
|
(key) => {
|
|
@@ -19533,12 +19438,13 @@ function ModelDialog({
|
|
|
19533
19438
|
return;
|
|
19534
19439
|
}
|
|
19535
19440
|
if (pending) setPending(void 0);
|
|
19441
|
+
else if (reasoningSelection) setReasoningSelection(void 0);
|
|
19536
19442
|
else onClose();
|
|
19537
19443
|
},
|
|
19538
19444
|
{ isActive: setupSelection === void 0 }
|
|
19539
19445
|
);
|
|
19540
19446
|
if (setupSelection) {
|
|
19541
|
-
return /* @__PURE__ */
|
|
19447
|
+
return /* @__PURE__ */ jsx89(
|
|
19542
19448
|
ProviderSetupDialog,
|
|
19543
19449
|
{
|
|
19544
19450
|
runtime: providerSetupRuntime,
|
|
@@ -19547,13 +19453,87 @@ function ModelDialog({
|
|
|
19547
19453
|
onConfigured: () => {
|
|
19548
19454
|
const selection = setupSelection;
|
|
19549
19455
|
setSetupSelection(void 0);
|
|
19550
|
-
|
|
19456
|
+
continueSelection(selection);
|
|
19551
19457
|
}
|
|
19552
19458
|
}
|
|
19553
19459
|
);
|
|
19554
19460
|
}
|
|
19555
|
-
|
|
19556
|
-
|
|
19461
|
+
if (reasoningSelection?.reasoning) {
|
|
19462
|
+
const reasoning = reasoningSelection.reasoning;
|
|
19463
|
+
const defaultName = reasoning.efforts.find(
|
|
19464
|
+
(effort) => effort.id === reasoning.defaultEffort
|
|
19465
|
+
)?.name;
|
|
19466
|
+
const selectedEffort = reasoningSelection.provider === current.provider && reasoningSelection.model === current.model ? current.reasoning?.selectedEffort : void 0;
|
|
19467
|
+
const effortItems = [
|
|
19468
|
+
{
|
|
19469
|
+
key: "provider-default",
|
|
19470
|
+
value: void 0,
|
|
19471
|
+
label: `Provider default${defaultName ? ` (${defaultName})` : ""}`
|
|
19472
|
+
},
|
|
19473
|
+
...reasoning.efforts.map((effort) => ({
|
|
19474
|
+
key: effort.id,
|
|
19475
|
+
value: effort.id,
|
|
19476
|
+
label: effort.name
|
|
19477
|
+
}))
|
|
19478
|
+
];
|
|
19479
|
+
const initialEffortIndex = Math.max(
|
|
19480
|
+
0,
|
|
19481
|
+
effortItems.findIndex((item) => item.value === selectedEffort)
|
|
19482
|
+
);
|
|
19483
|
+
return /* @__PURE__ */ jsxs67(
|
|
19484
|
+
Box69,
|
|
19485
|
+
{
|
|
19486
|
+
borderStyle: "round",
|
|
19487
|
+
borderColor: theme.border.default,
|
|
19488
|
+
flexDirection: "column",
|
|
19489
|
+
paddingX: 1,
|
|
19490
|
+
paddingY: 1,
|
|
19491
|
+
width: "100%",
|
|
19492
|
+
children: [
|
|
19493
|
+
/* @__PURE__ */ jsxs67(Box69, { justifyContent: "space-between", children: [
|
|
19494
|
+
/* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.primary, children: "Select Reasoning Effort" }),
|
|
19495
|
+
/* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Esc to models" })
|
|
19496
|
+
] }),
|
|
19497
|
+
/* @__PURE__ */ jsxs67(Box69, { marginTop: 1, flexDirection: "row", children: [
|
|
19498
|
+
/* @__PURE__ */ jsx89(Box69, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx89(
|
|
19499
|
+
RadioButtonSelect,
|
|
19500
|
+
{
|
|
19501
|
+
items: effortItems,
|
|
19502
|
+
initialIndex: initialEffortIndex,
|
|
19503
|
+
onSelect: (reasoningEffort) => {
|
|
19504
|
+
setReasoningSelection(void 0);
|
|
19505
|
+
finishSelection({
|
|
19506
|
+
...reasoningSelection,
|
|
19507
|
+
reasoning: {
|
|
19508
|
+
...reasoning,
|
|
19509
|
+
...reasoningEffort === void 0 ? { selectedEffort: void 0 } : { selectedEffort: reasoningEffort }
|
|
19510
|
+
}
|
|
19511
|
+
});
|
|
19512
|
+
},
|
|
19513
|
+
isFocused: !switching,
|
|
19514
|
+
showNumbers: false
|
|
19515
|
+
}
|
|
19516
|
+
) }),
|
|
19517
|
+
/* @__PURE__ */ jsxs67(Box69, { width: "45%", paddingLeft: 2, flexDirection: "column", children: [
|
|
19518
|
+
/* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.primary, children: reasoningSelection.name }),
|
|
19519
|
+
/* @__PURE__ */ jsxs67(Box69, { marginTop: 1, flexDirection: "column", children: [
|
|
19520
|
+
/* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Current choice" }),
|
|
19521
|
+
/* @__PURE__ */ jsx89(Text62, { children: modelReasoningEffortLabel({
|
|
19522
|
+
...reasoningSelection,
|
|
19523
|
+
reasoning: { ...reasoning, selectedEffort }
|
|
19524
|
+
}) }),
|
|
19525
|
+
/* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Behavior" }),
|
|
19526
|
+
/* @__PURE__ */ jsx89(Text62, { wrap: "wrap", children: "Provider default follows the model adapter. An explicit effort remains fixed for this Agent and future Sessions." })
|
|
19527
|
+
] })
|
|
19528
|
+
] })
|
|
19529
|
+
] }),
|
|
19530
|
+
/* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Use \u2191/\u2193 to navigate and Enter to select." }) })
|
|
19531
|
+
]
|
|
19532
|
+
}
|
|
19533
|
+
);
|
|
19534
|
+
}
|
|
19535
|
+
return /* @__PURE__ */ jsxs67(
|
|
19536
|
+
Box69,
|
|
19557
19537
|
{
|
|
19558
19538
|
borderStyle: "round",
|
|
19559
19539
|
borderColor: theme.border.default,
|
|
@@ -19562,13 +19542,13 @@ function ModelDialog({
|
|
|
19562
19542
|
paddingY: 1,
|
|
19563
19543
|
width: "100%",
|
|
19564
19544
|
children: [
|
|
19565
|
-
/* @__PURE__ */
|
|
19566
|
-
/* @__PURE__ */
|
|
19567
|
-
/* @__PURE__ */
|
|
19545
|
+
/* @__PURE__ */ jsxs67(Box69, { justifyContent: "space-between", children: [
|
|
19546
|
+
/* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.primary, children: "Select DSH Model" }),
|
|
19547
|
+
/* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Esc to close" })
|
|
19568
19548
|
] }),
|
|
19569
|
-
error && /* @__PURE__ */
|
|
19570
|
-
loading ? /* @__PURE__ */
|
|
19571
|
-
/* @__PURE__ */
|
|
19549
|
+
error && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.status.error, children: error }) }),
|
|
19550
|
+
loading ? /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Loading models..." }) }) : models.length === 0 ? /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.status.warning, children: "No DSH models are available." }) }) : /* @__PURE__ */ jsxs67(Box69, { flexDirection: "row", marginTop: 1, children: [
|
|
19551
|
+
/* @__PURE__ */ jsx89(Box69, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx89(
|
|
19572
19552
|
RadioButtonSelect,
|
|
19573
19553
|
{
|
|
19574
19554
|
items,
|
|
@@ -19581,28 +19561,28 @@ function ModelDialog({
|
|
|
19581
19561
|
renderItem: (item, { titleColor }) => {
|
|
19582
19562
|
const model = item.value;
|
|
19583
19563
|
const isCurrent = model.provider === current.provider && model.model === current.model;
|
|
19584
|
-
return /* @__PURE__ */
|
|
19564
|
+
return /* @__PURE__ */ jsxs67(Text62, { color: titleColor, wrap: "truncate", children: [
|
|
19585
19565
|
model.name,
|
|
19586
19566
|
" ",
|
|
19587
|
-
/* @__PURE__ */
|
|
19588
|
-
model.inputModalities.includes("image") && /* @__PURE__ */
|
|
19589
|
-
isCurrent && /* @__PURE__ */
|
|
19567
|
+
/* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: model.provider }),
|
|
19568
|
+
model.inputModalities.includes("image") && /* @__PURE__ */ jsx89(Text62, { color: theme.status.success, children: " Vision" }),
|
|
19569
|
+
isCurrent && /* @__PURE__ */ jsx89(Text62, { color: theme.text.accent, children: " Current" })
|
|
19590
19570
|
] });
|
|
19591
19571
|
}
|
|
19592
19572
|
},
|
|
19593
19573
|
items.map((item) => item.key).join("|")
|
|
19594
19574
|
) }),
|
|
19595
|
-
/* @__PURE__ */
|
|
19596
|
-
/* @__PURE__ */
|
|
19597
|
-
/* @__PURE__ */
|
|
19598
|
-
/* @__PURE__ */
|
|
19575
|
+
/* @__PURE__ */ jsx89(Box69, { width: "45%", paddingLeft: 2, flexDirection: "column", children: pending ? /* @__PURE__ */ jsxs67(Fragment15, { children: [
|
|
19576
|
+
/* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.status.warning, children: "Start a new Session?" }),
|
|
19577
|
+
/* @__PURE__ */ jsxs67(Box69, { marginTop: 1, flexDirection: "column", children: [
|
|
19578
|
+
/* @__PURE__ */ jsxs67(Text62, { children: [
|
|
19599
19579
|
"Changing to ",
|
|
19600
19580
|
pending.name,
|
|
19601
19581
|
" creates a new DSH Agent and Session."
|
|
19602
19582
|
] }),
|
|
19603
|
-
/* @__PURE__ */
|
|
19583
|
+
/* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "The existing transcript remains visible but is not sent to the new model." })
|
|
19604
19584
|
] }),
|
|
19605
|
-
/* @__PURE__ */
|
|
19585
|
+
/* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(
|
|
19606
19586
|
RadioButtonSelect,
|
|
19607
19587
|
{
|
|
19608
19588
|
items: [
|
|
@@ -19617,21 +19597,23 @@ function ModelDialog({
|
|
|
19617
19597
|
showNumbers: false
|
|
19618
19598
|
}
|
|
19619
19599
|
) })
|
|
19620
|
-
] }) : /* @__PURE__ */
|
|
19621
|
-
/* @__PURE__ */
|
|
19622
|
-
/* @__PURE__ */
|
|
19623
|
-
/* @__PURE__ */
|
|
19624
|
-
/* @__PURE__ */
|
|
19625
|
-
/* @__PURE__ */
|
|
19626
|
-
/* @__PURE__ */
|
|
19627
|
-
/* @__PURE__ */
|
|
19628
|
-
/* @__PURE__ */
|
|
19600
|
+
] }) : /* @__PURE__ */ jsxs67(Fragment15, { children: [
|
|
19601
|
+
/* @__PURE__ */ jsx89(Text62, { bold: true, color: theme.text.primary, children: highlighted.name }),
|
|
19602
|
+
/* @__PURE__ */ jsxs67(Box69, { marginTop: 1, flexDirection: "column", children: [
|
|
19603
|
+
/* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Provider" }),
|
|
19604
|
+
/* @__PURE__ */ jsx89(Text62, { children: highlighted.provider }),
|
|
19605
|
+
/* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Model ID" }),
|
|
19606
|
+
/* @__PURE__ */ jsx89(Text62, { wrap: "wrap", children: highlighted.model }),
|
|
19607
|
+
/* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Input" }),
|
|
19608
|
+
/* @__PURE__ */ jsx89(Text62, { color: highlighted.inputModalities.includes("image") ? theme.status.success : theme.text.primary, children: capabilityLabel(highlighted) }),
|
|
19609
|
+
/* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Context window" }),
|
|
19610
|
+
/* @__PURE__ */ jsx89(Text62, { children: highlighted.contextWindow === void 0 ? "Not disclosed" : `${formatTokenCount(highlighted.contextWindow)} tokens` })
|
|
19629
19611
|
] }),
|
|
19630
|
-
switching && /* @__PURE__ */
|
|
19631
|
-
checkingProvider && /* @__PURE__ */
|
|
19612
|
+
switching && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.accent, children: "Creating new Agent..." }) }),
|
|
19613
|
+
checkingProvider && /* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.accent, children: "Checking provider setup..." }) })
|
|
19632
19614
|
] }) })
|
|
19633
19615
|
] }),
|
|
19634
|
-
/* @__PURE__ */
|
|
19616
|
+
/* @__PURE__ */ jsx89(Box69, { marginTop: 1, children: /* @__PURE__ */ jsx89(Text62, { color: theme.text.secondary, children: "Use \u2191/\u2193 to navigate and Enter to select." }) })
|
|
19635
19617
|
]
|
|
19636
19618
|
}
|
|
19637
19619
|
);
|
|
@@ -19678,8 +19660,8 @@ import React17 from "react";
|
|
|
19678
19660
|
|
|
19679
19661
|
// src/ui/components/dialogs/provider-dialog.tsx
|
|
19680
19662
|
import { useEffect as useEffect40, useMemo as useMemo29, useState as useState37 } from "react";
|
|
19681
|
-
import { Box as
|
|
19682
|
-
import { Fragment as Fragment16, jsx as
|
|
19663
|
+
import { Box as Box70, Text as Text63 } from "ink";
|
|
19664
|
+
import { Fragment as Fragment16, jsx as jsx90, jsxs as jsxs68 } from "react/jsx-runtime";
|
|
19683
19665
|
function statusLabel(status) {
|
|
19684
19666
|
switch (status) {
|
|
19685
19667
|
case "configured":
|
|
@@ -19770,7 +19752,7 @@ function ProviderDialog({
|
|
|
19770
19752
|
);
|
|
19771
19753
|
const currentProvider = runtime.getSnapshot().current.provider;
|
|
19772
19754
|
if (editing) {
|
|
19773
|
-
return /* @__PURE__ */
|
|
19755
|
+
return /* @__PURE__ */ jsx90(
|
|
19774
19756
|
ProviderSetupDialog,
|
|
19775
19757
|
{
|
|
19776
19758
|
runtime,
|
|
@@ -19788,8 +19770,8 @@ function ProviderDialog({
|
|
|
19788
19770
|
}
|
|
19789
19771
|
);
|
|
19790
19772
|
}
|
|
19791
|
-
return /* @__PURE__ */
|
|
19792
|
-
|
|
19773
|
+
return /* @__PURE__ */ jsxs68(
|
|
19774
|
+
Box70,
|
|
19793
19775
|
{
|
|
19794
19776
|
borderStyle: "round",
|
|
19795
19777
|
borderColor: theme.border.default,
|
|
@@ -19798,18 +19780,18 @@ function ProviderDialog({
|
|
|
19798
19780
|
paddingY: 1,
|
|
19799
19781
|
width: "100%",
|
|
19800
19782
|
children: [
|
|
19801
|
-
/* @__PURE__ */
|
|
19802
|
-
/* @__PURE__ */
|
|
19803
|
-
/* @__PURE__ */
|
|
19804
|
-
/* @__PURE__ */
|
|
19783
|
+
/* @__PURE__ */ jsxs68(Box70, { justifyContent: "space-between", children: [
|
|
19784
|
+
/* @__PURE__ */ jsx90(Text63, { bold: true, color: theme.text.accent, children: "DSH Providers" }),
|
|
19785
|
+
/* @__PURE__ */ jsxs68(Text63, { color: theme.text.secondary, children: [
|
|
19786
|
+
/* @__PURE__ */ jsx90(Text63, { bold: true, color: theme.text.primary, children: "Esc" }),
|
|
19805
19787
|
" Close"
|
|
19806
19788
|
] })
|
|
19807
19789
|
] }),
|
|
19808
|
-
error && /* @__PURE__ */
|
|
19809
|
-
loading && /* @__PURE__ */
|
|
19810
|
-
!loading && providers.length === 0 && /* @__PURE__ */
|
|
19811
|
-
providers.length > 0 && highlighted && /* @__PURE__ */
|
|
19812
|
-
/* @__PURE__ */
|
|
19790
|
+
error && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.status.error, children: error }) }),
|
|
19791
|
+
loading && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Loading providers..." }) }),
|
|
19792
|
+
!loading && providers.length === 0 && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.status.warning, children: "No DSH-managed providers are available." }) }),
|
|
19793
|
+
providers.length > 0 && highlighted && /* @__PURE__ */ jsxs68(Box70, { marginTop: 1, children: [
|
|
19794
|
+
/* @__PURE__ */ jsx90(Box70, { width: "55%", paddingRight: 2, children: /* @__PURE__ */ jsx90(
|
|
19813
19795
|
RadioButtonSelect,
|
|
19814
19796
|
{
|
|
19815
19797
|
items,
|
|
@@ -19822,45 +19804,45 @@ function ProviderDialog({
|
|
|
19822
19804
|
},
|
|
19823
19805
|
showScrollArrows: true,
|
|
19824
19806
|
maxItemsToShow: 12,
|
|
19825
|
-
renderItem: (item, { titleColor }) => /* @__PURE__ */
|
|
19807
|
+
renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs68(Text63, { color: titleColor, wrap: "truncate", children: [
|
|
19826
19808
|
item.value.displayName,
|
|
19827
19809
|
" ",
|
|
19828
|
-
/* @__PURE__ */
|
|
19829
|
-
item.value.provider === currentProvider && /* @__PURE__ */
|
|
19810
|
+
/* @__PURE__ */ jsx90(Text63, { color: statusColor(item.value.status), children: statusLabel(item.value.status) }),
|
|
19811
|
+
item.value.provider === currentProvider && /* @__PURE__ */ jsx90(Text63, { color: theme.text.accent, children: " Current" })
|
|
19830
19812
|
] })
|
|
19831
19813
|
}
|
|
19832
19814
|
) }),
|
|
19833
|
-
/* @__PURE__ */
|
|
19834
|
-
/* @__PURE__ */
|
|
19835
|
-
/* @__PURE__ */
|
|
19836
|
-
/* @__PURE__ */
|
|
19837
|
-
/* @__PURE__ */
|
|
19838
|
-
/* @__PURE__ */
|
|
19839
|
-
/* @__PURE__ */
|
|
19840
|
-
highlighted.credentialLabel && /* @__PURE__ */
|
|
19841
|
-
/* @__PURE__ */
|
|
19842
|
-
/* @__PURE__ */
|
|
19815
|
+
/* @__PURE__ */ jsxs68(Box70, { width: "45%", paddingLeft: 2, flexDirection: "column", children: [
|
|
19816
|
+
/* @__PURE__ */ jsx90(Text63, { bold: true, color: theme.text.primary, children: highlighted.displayName }),
|
|
19817
|
+
/* @__PURE__ */ jsxs68(Box70, { marginTop: 1, flexDirection: "column", children: [
|
|
19818
|
+
/* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Provider" }),
|
|
19819
|
+
/* @__PURE__ */ jsx90(Text63, { children: highlighted.provider }),
|
|
19820
|
+
/* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Status" }),
|
|
19821
|
+
/* @__PURE__ */ jsx90(Text63, { color: statusColor(highlighted.status), children: statusLabel(highlighted.status) }),
|
|
19822
|
+
highlighted.credentialLabel && /* @__PURE__ */ jsxs68(Fragment16, { children: [
|
|
19823
|
+
/* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Credential" }),
|
|
19824
|
+
/* @__PURE__ */ jsx90(Text63, { children: highlighted.credentialLabel })
|
|
19843
19825
|
] }),
|
|
19844
|
-
highlighted.source && /* @__PURE__ */
|
|
19845
|
-
/* @__PURE__ */
|
|
19846
|
-
/* @__PURE__ */
|
|
19826
|
+
highlighted.source && /* @__PURE__ */ jsxs68(Fragment16, { children: [
|
|
19827
|
+
/* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Source" }),
|
|
19828
|
+
/* @__PURE__ */ jsx90(Text63, { children: highlighted.source })
|
|
19847
19829
|
] }),
|
|
19848
|
-
highlighted.message && /* @__PURE__ */
|
|
19849
|
-
!highlighted.writable && highlighted.status !== "unsupported" && highlighted.status !== "error" && /* @__PURE__ */
|
|
19830
|
+
highlighted.message && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.status.warning, children: highlighted.message }) }),
|
|
19831
|
+
!highlighted.writable && highlighted.status !== "unsupported" && highlighted.status !== "error" && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: /* @__PURE__ */ jsx90(Text63, { color: theme.status.warning, children: "This credential comes from a read-only source. Update it outside DSH Console." }) })
|
|
19850
19832
|
] })
|
|
19851
19833
|
] })
|
|
19852
19834
|
] }),
|
|
19853
|
-
providers.length > 0 && highlighted && /* @__PURE__ */
|
|
19854
|
-
/* @__PURE__ */
|
|
19855
|
-
/* @__PURE__ */
|
|
19835
|
+
providers.length > 0 && highlighted && /* @__PURE__ */ jsx90(Box70, { marginTop: 1, children: highlighted.writable && highlighted.status !== "unsupported" ? /* @__PURE__ */ jsxs68(Fragment16, { children: [
|
|
19836
|
+
/* @__PURE__ */ jsx90(Text63, { bold: true, color: theme.text.accent, children: "Enter" }),
|
|
19837
|
+
/* @__PURE__ */ jsxs68(Text63, { color: theme.text.primary, children: [
|
|
19856
19838
|
" ",
|
|
19857
19839
|
highlighted.status === "configured" ? "Replace credential" : "Configure provider"
|
|
19858
19840
|
] }),
|
|
19859
|
-
/* @__PURE__ */
|
|
19841
|
+
/* @__PURE__ */ jsxs68(Text63, { color: theme.text.secondary, children: [
|
|
19860
19842
|
" ",
|
|
19861
19843
|
"Use \u2191/\u2193 to navigate"
|
|
19862
19844
|
] })
|
|
19863
|
-
] }) : /* @__PURE__ */
|
|
19845
|
+
] }) : /* @__PURE__ */ jsx90(Text63, { color: theme.text.secondary, children: "Use \u2191/\u2193 to inspect providers. This credential cannot be changed here." }) })
|
|
19864
19846
|
]
|
|
19865
19847
|
}
|
|
19866
19848
|
);
|
|
@@ -19913,8 +19895,8 @@ import React18 from "react";
|
|
|
19913
19895
|
|
|
19914
19896
|
// src/ui/components/dialogs/session-dialog.tsx
|
|
19915
19897
|
import { useCallback as useCallback33, useEffect as useEffect41, useMemo as useMemo30, useRef as useRef20, useState as useState38 } from "react";
|
|
19916
|
-
import { Box as
|
|
19917
|
-
import { Fragment as Fragment17, jsx as
|
|
19898
|
+
import { Box as Box71, Text as Text64 } from "ink";
|
|
19899
|
+
import { Fragment as Fragment17, jsx as jsx91, jsxs as jsxs69 } from "react/jsx-runtime";
|
|
19918
19900
|
function shortId(id) {
|
|
19919
19901
|
const start2 = id.startsWith("dsh-console-") ? "dsh-console-".length : 0;
|
|
19920
19902
|
return id.slice(start2, start2 + 12);
|
|
@@ -19981,14 +19963,14 @@ function SessionDialog({ runtime, onClose }) {
|
|
|
19981
19963
|
if (pending) setPending(void 0);
|
|
19982
19964
|
else onClose();
|
|
19983
19965
|
}, { isActive: true });
|
|
19984
|
-
return /* @__PURE__ */
|
|
19985
|
-
/* @__PURE__ */
|
|
19986
|
-
/* @__PURE__ */
|
|
19987
|
-
/* @__PURE__ */
|
|
19966
|
+
return /* @__PURE__ */ jsxs69(Box71, { borderStyle: "round", borderColor: theme.border.default, flexDirection: "column", paddingX: 1, paddingY: 1, width: "100%", children: [
|
|
19967
|
+
/* @__PURE__ */ jsxs69(Box71, { justifyContent: "space-between", children: [
|
|
19968
|
+
/* @__PURE__ */ jsx91(Text64, { bold: true, color: theme.text.primary, children: "DSH Sessions" }),
|
|
19969
|
+
/* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Esc to close" })
|
|
19988
19970
|
] }),
|
|
19989
|
-
error && /* @__PURE__ */
|
|
19990
|
-
loading ? /* @__PURE__ */
|
|
19991
|
-
/* @__PURE__ */
|
|
19971
|
+
error && /* @__PURE__ */ jsx91(Box71, { marginTop: 1, children: /* @__PURE__ */ jsx91(Text64, { color: theme.status.error, children: error }) }),
|
|
19972
|
+
loading ? /* @__PURE__ */ jsx91(Box71, { marginTop: 1, children: /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Loading Sessions..." }) }) : sessions.length === 0 ? /* @__PURE__ */ jsx91(Box71, { marginTop: 1, children: /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "No resumable Sessions." }) }) : /* @__PURE__ */ jsxs69(Box71, { flexDirection: "row", marginTop: 1, children: [
|
|
19973
|
+
/* @__PURE__ */ jsx91(Box71, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx91(
|
|
19992
19974
|
RadioButtonSelect,
|
|
19993
19975
|
{
|
|
19994
19976
|
items,
|
|
@@ -19998,20 +19980,20 @@ function SessionDialog({ runtime, onClose }) {
|
|
|
19998
19980
|
isFocused: !pending && !switching,
|
|
19999
19981
|
showScrollArrows: true,
|
|
20000
19982
|
maxItemsToShow: 12,
|
|
20001
|
-
renderItem: (item, { titleColor }) => /* @__PURE__ */
|
|
19983
|
+
renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs69(Text64, { color: titleColor, wrap: "truncate", children: [
|
|
20002
19984
|
sessionLabel(item.value),
|
|
20003
|
-
item.value.current && /* @__PURE__ */
|
|
20004
|
-
!item.value.current && !item.value.resumable && /* @__PURE__ */
|
|
19985
|
+
item.value.current && /* @__PURE__ */ jsx91(Text64, { color: theme.text.accent, children: " Current" }),
|
|
19986
|
+
!item.value.current && !item.value.resumable && /* @__PURE__ */ jsx91(Text64, { color: theme.status.warning, children: " Not resumable" })
|
|
20005
19987
|
] })
|
|
20006
19988
|
}
|
|
20007
19989
|
) }),
|
|
20008
|
-
/* @__PURE__ */
|
|
20009
|
-
/* @__PURE__ */
|
|
20010
|
-
/* @__PURE__ */
|
|
20011
|
-
/* @__PURE__ */
|
|
20012
|
-
/* @__PURE__ */
|
|
19990
|
+
/* @__PURE__ */ jsx91(Box71, { width: "45%", paddingLeft: 2, flexDirection: "column", children: pending ? /* @__PURE__ */ jsxs69(Fragment17, { children: [
|
|
19991
|
+
/* @__PURE__ */ jsx91(Text64, { bold: true, color: theme.status.warning, children: "Resume this Session?" }),
|
|
19992
|
+
/* @__PURE__ */ jsxs69(Box71, { marginTop: 1, flexDirection: "column", children: [
|
|
19993
|
+
/* @__PURE__ */ jsx91(Text64, { children: sessionLabel(pending) }),
|
|
19994
|
+
/* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "The current transcript will be replaced." })
|
|
20013
19995
|
] }),
|
|
20014
|
-
/* @__PURE__ */
|
|
19996
|
+
/* @__PURE__ */ jsx91(Box71, { marginTop: 1, children: /* @__PURE__ */ jsx91(
|
|
20015
19997
|
RadioButtonSelect,
|
|
20016
19998
|
{
|
|
20017
19999
|
items: [
|
|
@@ -20023,21 +20005,21 @@ function SessionDialog({ runtime, onClose }) {
|
|
|
20023
20005
|
showNumbers: false
|
|
20024
20006
|
}
|
|
20025
20007
|
) })
|
|
20026
|
-
] }) : highlighted ? /* @__PURE__ */
|
|
20027
|
-
/* @__PURE__ */
|
|
20028
|
-
/* @__PURE__ */
|
|
20029
|
-
/* @__PURE__ */
|
|
20030
|
-
/* @__PURE__ */
|
|
20031
|
-
!highlighted.resumable && highlighted.resumeUnavailableReason && /* @__PURE__ */
|
|
20032
|
-
/* @__PURE__ */
|
|
20033
|
-
/* @__PURE__ */
|
|
20008
|
+
] }) : highlighted ? /* @__PURE__ */ jsxs69(Fragment17, { children: [
|
|
20009
|
+
/* @__PURE__ */ jsx91(Text64, { bold: true, children: sessionLabel(highlighted) }),
|
|
20010
|
+
/* @__PURE__ */ jsxs69(Box71, { marginTop: 1, flexDirection: "column", children: [
|
|
20011
|
+
/* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Created" }),
|
|
20012
|
+
/* @__PURE__ */ jsx91(Text64, { children: new Date(highlighted.createdAt).toLocaleString() }),
|
|
20013
|
+
!highlighted.resumable && highlighted.resumeUnavailableReason && /* @__PURE__ */ jsxs69(Fragment17, { children: [
|
|
20014
|
+
/* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Resume status" }),
|
|
20015
|
+
/* @__PURE__ */ jsx91(Text64, { color: theme.status.warning, children: highlighted.resumeUnavailableReason })
|
|
20034
20016
|
] }),
|
|
20035
|
-
/* @__PURE__ */
|
|
20036
|
-
/* @__PURE__ */
|
|
20017
|
+
/* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Session ID" }),
|
|
20018
|
+
/* @__PURE__ */ jsx91(Text64, { wrap: "wrap", children: highlighted.id })
|
|
20037
20019
|
] })
|
|
20038
20020
|
] }) : null })
|
|
20039
20021
|
] }),
|
|
20040
|
-
/* @__PURE__ */
|
|
20022
|
+
/* @__PURE__ */ jsx91(Box71, { marginTop: 1, children: /* @__PURE__ */ jsx91(Text64, { color: theme.text.secondary, children: "Use \u2191/\u2193 to navigate and Enter to resume." }) })
|
|
20041
20023
|
] });
|
|
20042
20024
|
}
|
|
20043
20025
|
|
|
@@ -20129,11 +20111,11 @@ import React19 from "react";
|
|
|
20129
20111
|
|
|
20130
20112
|
// src/ui/components/dialogs/tools-dialog.tsx
|
|
20131
20113
|
import { useEffect as useEffect42, useMemo as useMemo31, useState as useState39, useSyncExternalStore as useSyncExternalStore3 } from "react";
|
|
20132
|
-
import { Box as
|
|
20114
|
+
import { Box as Box73, Text as Text66 } from "ink";
|
|
20133
20115
|
|
|
20134
20116
|
// src/ui/components/shared/descriptive-radio-button-select.tsx
|
|
20135
|
-
import { Text as
|
|
20136
|
-
import { jsx as
|
|
20117
|
+
import { Text as Text65, Box as Box72 } from "ink";
|
|
20118
|
+
import { jsx as jsx92, jsxs as jsxs70 } from "react/jsx-runtime";
|
|
20137
20119
|
function DescriptiveRadioButtonSelect({
|
|
20138
20120
|
items,
|
|
20139
20121
|
initialIndex = 0,
|
|
@@ -20144,7 +20126,7 @@ function DescriptiveRadioButtonSelect({
|
|
|
20144
20126
|
showScrollArrows = false,
|
|
20145
20127
|
maxItemsToShow = 10
|
|
20146
20128
|
}) {
|
|
20147
|
-
return /* @__PURE__ */
|
|
20129
|
+
return /* @__PURE__ */ jsx92(
|
|
20148
20130
|
BaseSelectionList,
|
|
20149
20131
|
{
|
|
20150
20132
|
items,
|
|
@@ -20155,16 +20137,16 @@ function DescriptiveRadioButtonSelect({
|
|
|
20155
20137
|
showNumbers,
|
|
20156
20138
|
showScrollArrows,
|
|
20157
20139
|
maxItemsToShow,
|
|
20158
|
-
renderItem: (item, { titleColor }) => /* @__PURE__ */
|
|
20159
|
-
/* @__PURE__ */
|
|
20160
|
-
item.description && /* @__PURE__ */
|
|
20140
|
+
renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs70(Box72, { flexDirection: "column", children: [
|
|
20141
|
+
/* @__PURE__ */ jsx92(Text65, { color: titleColor, children: item.title }),
|
|
20142
|
+
item.description && /* @__PURE__ */ jsx92(Text65, { color: theme.text.secondary, children: item.description })
|
|
20161
20143
|
] }, item.key)
|
|
20162
20144
|
}
|
|
20163
20145
|
);
|
|
20164
20146
|
}
|
|
20165
20147
|
|
|
20166
20148
|
// src/ui/components/dialogs/tools-dialog.tsx
|
|
20167
|
-
import { Fragment as Fragment18, jsx as
|
|
20149
|
+
import { Fragment as Fragment18, jsx as jsx93, jsxs as jsxs71 } from "react/jsx-runtime";
|
|
20168
20150
|
function summary(description) {
|
|
20169
20151
|
const line = description.replace(/\s+/g, " ").trim();
|
|
20170
20152
|
return line.length > 90 ? `${line.slice(0, 89)}...` : line;
|
|
@@ -20195,8 +20177,8 @@ function ToolsDialog({ runtime, onClose }) {
|
|
|
20195
20177
|
})),
|
|
20196
20178
|
[snapshot.tools]
|
|
20197
20179
|
);
|
|
20198
|
-
return /* @__PURE__ */
|
|
20199
|
-
|
|
20180
|
+
return /* @__PURE__ */ jsxs71(
|
|
20181
|
+
Box73,
|
|
20200
20182
|
{
|
|
20201
20183
|
borderStyle: "round",
|
|
20202
20184
|
borderColor: theme.border.default,
|
|
@@ -20205,16 +20187,16 @@ function ToolsDialog({ runtime, onClose }) {
|
|
|
20205
20187
|
paddingY: 1,
|
|
20206
20188
|
width: "100%",
|
|
20207
20189
|
children: [
|
|
20208
|
-
/* @__PURE__ */
|
|
20209
|
-
/* @__PURE__ */
|
|
20190
|
+
/* @__PURE__ */ jsxs71(Box73, { justifyContent: "space-between", children: [
|
|
20191
|
+
/* @__PURE__ */ jsxs71(Text66, { bold: true, color: theme.text.primary, children: [
|
|
20210
20192
|
"DSH Tools (",
|
|
20211
20193
|
snapshot.tools.length,
|
|
20212
20194
|
")"
|
|
20213
20195
|
] }),
|
|
20214
|
-
/* @__PURE__ */
|
|
20196
|
+
/* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: "Esc to close" })
|
|
20215
20197
|
] }),
|
|
20216
|
-
snapshot.tools.length === 0 ? /* @__PURE__ */
|
|
20217
|
-
/* @__PURE__ */
|
|
20198
|
+
snapshot.tools.length === 0 ? /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: "No tools are visible to the current Agent." }) }) : /* @__PURE__ */ jsxs71(Box73, { flexDirection: "row", marginTop: 1, children: [
|
|
20199
|
+
/* @__PURE__ */ jsx93(Box73, { width: "55%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx93(
|
|
20218
20200
|
DescriptiveRadioButtonSelect,
|
|
20219
20201
|
{
|
|
20220
20202
|
items,
|
|
@@ -20225,26 +20207,26 @@ function ToolsDialog({ runtime, onClose }) {
|
|
|
20225
20207
|
maxItemsToShow: 10
|
|
20226
20208
|
}
|
|
20227
20209
|
) }),
|
|
20228
|
-
/* @__PURE__ */
|
|
20229
|
-
/* @__PURE__ */
|
|
20230
|
-
/* @__PURE__ */
|
|
20231
|
-
/* @__PURE__ */
|
|
20232
|
-
/* @__PURE__ */
|
|
20233
|
-
selected.parameters.length === 0 ? /* @__PURE__ */
|
|
20234
|
-
/* @__PURE__ */
|
|
20210
|
+
/* @__PURE__ */ jsx93(Box73, { width: "45%", paddingLeft: 2, flexDirection: "column", children: selected && /* @__PURE__ */ jsxs71(Fragment18, { children: [
|
|
20211
|
+
/* @__PURE__ */ jsx93(Text66, { bold: true, color: theme.text.accent, children: selected.name }),
|
|
20212
|
+
/* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { wrap: "wrap", children: selected.description }) }),
|
|
20213
|
+
/* @__PURE__ */ jsxs71(Box73, { marginTop: 1, flexDirection: "column", children: [
|
|
20214
|
+
/* @__PURE__ */ jsx93(Text66, { bold: true, color: theme.text.primary, children: "Parameters" }),
|
|
20215
|
+
selected.parameters.length === 0 ? /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: "None" }) : selected.parameters.map((parameter) => /* @__PURE__ */ jsxs71(Box73, { flexDirection: "column", children: [
|
|
20216
|
+
/* @__PURE__ */ jsxs71(Text66, { color: theme.text.link, children: [
|
|
20235
20217
|
parameter.name,
|
|
20236
20218
|
" ",
|
|
20237
|
-
/* @__PURE__ */
|
|
20219
|
+
/* @__PURE__ */ jsxs71(Text66, { color: theme.text.secondary, children: [
|
|
20238
20220
|
parameter.type,
|
|
20239
20221
|
parameter.required ? " required" : " optional"
|
|
20240
20222
|
] })
|
|
20241
20223
|
] }),
|
|
20242
|
-
parameter.description && /* @__PURE__ */
|
|
20224
|
+
parameter.description && /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: parameter.description })
|
|
20243
20225
|
] }, parameter.name))
|
|
20244
20226
|
] })
|
|
20245
20227
|
] }) })
|
|
20246
20228
|
] }),
|
|
20247
|
-
snapshot.tools.length > 0 && /* @__PURE__ */
|
|
20229
|
+
snapshot.tools.length > 0 && /* @__PURE__ */ jsx93(Box73, { marginTop: 1, children: /* @__PURE__ */ jsx93(Text66, { color: theme.text.secondary, children: "Use Up/Down to inspect the current Agent's tool catalog." }) })
|
|
20248
20230
|
]
|
|
20249
20231
|
}
|
|
20250
20232
|
);
|
|
@@ -20287,8 +20269,8 @@ import React20 from "react";
|
|
|
20287
20269
|
|
|
20288
20270
|
// src/ui/components/dialogs/permission-dialog.tsx
|
|
20289
20271
|
import { useCallback as useCallback34, useMemo as useMemo32, useState as useState40, useSyncExternalStore as useSyncExternalStore4 } from "react";
|
|
20290
|
-
import { Box as
|
|
20291
|
-
import { Fragment as Fragment19, jsx as
|
|
20272
|
+
import { Box as Box74, Text as Text67 } from "ink";
|
|
20273
|
+
import { Fragment as Fragment19, jsx as jsx94, jsxs as jsxs72 } from "react/jsx-runtime";
|
|
20292
20274
|
function PermissionDialog({
|
|
20293
20275
|
runtime,
|
|
20294
20276
|
onClose,
|
|
@@ -20350,8 +20332,8 @@ function PermissionDialog({
|
|
|
20350
20332
|
},
|
|
20351
20333
|
{ isActive: true }
|
|
20352
20334
|
);
|
|
20353
|
-
return /* @__PURE__ */
|
|
20354
|
-
|
|
20335
|
+
return /* @__PURE__ */ jsxs72(
|
|
20336
|
+
Box74,
|
|
20355
20337
|
{
|
|
20356
20338
|
borderStyle: "round",
|
|
20357
20339
|
borderColor: theme.border.default,
|
|
@@ -20360,13 +20342,13 @@ function PermissionDialog({
|
|
|
20360
20342
|
paddingY: 1,
|
|
20361
20343
|
width: "100%",
|
|
20362
20344
|
children: [
|
|
20363
|
-
/* @__PURE__ */
|
|
20364
|
-
/* @__PURE__ */
|
|
20365
|
-
/* @__PURE__ */
|
|
20345
|
+
/* @__PURE__ */ jsxs72(Box74, { justifyContent: "space-between", children: [
|
|
20346
|
+
/* @__PURE__ */ jsx94(Text67, { bold: true, color: theme.text.primary, children: "Select DSH Permission" }),
|
|
20347
|
+
/* @__PURE__ */ jsx94(Text67, { color: theme.text.secondary, children: "Esc to close" })
|
|
20366
20348
|
] }),
|
|
20367
|
-
error && /* @__PURE__ */
|
|
20368
|
-
!snapshot.available ? /* @__PURE__ */
|
|
20369
|
-
/* @__PURE__ */
|
|
20349
|
+
error && /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { color: theme.status.error, children: error }) }),
|
|
20350
|
+
!snapshot.available ? /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { color: theme.status.warning, children: "DSH permission presets are unavailable." }) }) : snapshot.options.length === 0 ? /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { color: theme.status.warning, children: "No permission presets are available." }) }) : /* @__PURE__ */ jsxs72(Box74, { flexDirection: "row", marginTop: 1, children: [
|
|
20351
|
+
/* @__PURE__ */ jsx94(Box74, { width: "50%", paddingRight: 2, flexDirection: "column", children: /* @__PURE__ */ jsx94(
|
|
20370
20352
|
RadioButtonSelect,
|
|
20371
20353
|
{
|
|
20372
20354
|
items,
|
|
@@ -20375,17 +20357,17 @@ function PermissionDialog({
|
|
|
20375
20357
|
onSelect: selectPermission,
|
|
20376
20358
|
isFocused: !pending && !snapshot.busy,
|
|
20377
20359
|
showNumbers: false,
|
|
20378
|
-
renderItem: (item, { titleColor }) => /* @__PURE__ */
|
|
20360
|
+
renderItem: (item, { titleColor }) => /* @__PURE__ */ jsxs72(Text67, { color: titleColor, wrap: "truncate", children: [
|
|
20379
20361
|
item.value.name,
|
|
20380
|
-
item.value.value === snapshot.currentValue && /* @__PURE__ */
|
|
20362
|
+
item.value.value === snapshot.currentValue && /* @__PURE__ */ jsx94(Text67, { color: theme.text.accent, children: " Current" })
|
|
20381
20363
|
] })
|
|
20382
20364
|
},
|
|
20383
20365
|
items.map((item) => item.key).join("|")
|
|
20384
20366
|
) }),
|
|
20385
|
-
/* @__PURE__ */
|
|
20386
|
-
/* @__PURE__ */
|
|
20387
|
-
/* @__PURE__ */
|
|
20388
|
-
/* @__PURE__ */
|
|
20367
|
+
/* @__PURE__ */ jsx94(Box74, { width: "50%", paddingLeft: 2, flexDirection: "column", children: pending ? /* @__PURE__ */ jsxs72(Fragment19, { children: [
|
|
20368
|
+
/* @__PURE__ */ jsx94(Text67, { bold: true, color: theme.status.warning, children: "Enable Full access?" }),
|
|
20369
|
+
/* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { children: "This allows commands to run without workspace sandbox restrictions or approval prompts." }) }),
|
|
20370
|
+
/* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(
|
|
20389
20371
|
RadioButtonSelect,
|
|
20390
20372
|
{
|
|
20391
20373
|
items: [
|
|
@@ -20400,14 +20382,14 @@ function PermissionDialog({
|
|
|
20400
20382
|
showNumbers: false
|
|
20401
20383
|
}
|
|
20402
20384
|
) })
|
|
20403
|
-
] }) : selected ? /* @__PURE__ */
|
|
20404
|
-
/* @__PURE__ */
|
|
20405
|
-
/* @__PURE__ */
|
|
20406
|
-
/* @__PURE__ */
|
|
20407
|
-
snapshot.busy && /* @__PURE__ */
|
|
20385
|
+
] }) : selected ? /* @__PURE__ */ jsxs72(Fragment19, { children: [
|
|
20386
|
+
/* @__PURE__ */ jsx94(Text67, { bold: true, color: theme.text.primary, children: selected.name }),
|
|
20387
|
+
/* @__PURE__ */ jsx94(Text67, { color: theme.text.secondary, children: selected.value }),
|
|
20388
|
+
/* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { children: selected.description ?? "No description is available for this preset." }) }),
|
|
20389
|
+
snapshot.busy && /* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { color: theme.text.accent, children: "Applying permission..." }) })
|
|
20408
20390
|
] }) : null })
|
|
20409
20391
|
] }),
|
|
20410
|
-
/* @__PURE__ */
|
|
20392
|
+
/* @__PURE__ */ jsx94(Box74, { marginTop: 1, children: /* @__PURE__ */ jsx94(Text67, { color: theme.text.secondary, children: "Changes apply to the current DSH Session immediately. No restart required." }) })
|
|
20411
20393
|
]
|
|
20412
20394
|
}
|
|
20413
20395
|
);
|
|
@@ -20523,7 +20505,6 @@ var BuiltinCommandLoader = class {
|
|
|
20523
20505
|
themeCommand,
|
|
20524
20506
|
settingsCommand,
|
|
20525
20507
|
vimCommand,
|
|
20526
|
-
terminalSetupCommand,
|
|
20527
20508
|
modelCommand,
|
|
20528
20509
|
providerCommand,
|
|
20529
20510
|
permissionCommand,
|
|
@@ -20848,8 +20829,8 @@ ${commandToExecute.subCommands.map((sc) => ` - ${sc.name}: ${sc.description ||
|
|
|
20848
20829
|
// src/ui/app-container.tsx
|
|
20849
20830
|
import { useStdout as useStdout4, useStdin as useStdin4 } from "ink";
|
|
20850
20831
|
import ansiEscapes from "ansi-escapes";
|
|
20851
|
-
import * as
|
|
20852
|
-
import { basename as basename2, join as
|
|
20832
|
+
import * as fs12 from "node:fs";
|
|
20833
|
+
import { basename as basename2, join as join5 } from "node:path";
|
|
20853
20834
|
|
|
20854
20835
|
// src/ui/hooks/commands/use-settings-command.ts
|
|
20855
20836
|
import { useState as useState42, useCallback as useCallback36 } from "react";
|
|
@@ -21509,9 +21490,9 @@ function useVim(buffer, onSubmit) {
|
|
|
21509
21490
|
|
|
21510
21491
|
// src/ui/hooks/session/use-git-branch-name.ts
|
|
21511
21492
|
import { useState as useState44, useEffect as useEffect45, useCallback as useCallback39 } from "react";
|
|
21512
|
-
import
|
|
21493
|
+
import fs9 from "node:fs";
|
|
21513
21494
|
import fsPromises2 from "node:fs/promises";
|
|
21514
|
-
import
|
|
21495
|
+
import path11 from "node:path";
|
|
21515
21496
|
function useGitBranchName(cwd) {
|
|
21516
21497
|
const [branchName, setBranchName] = useState44(void 0);
|
|
21517
21498
|
const fetchBranchName = useCallback39(async () => {
|
|
@@ -21538,14 +21519,14 @@ function useGitBranchName(cwd) {
|
|
|
21538
21519
|
}, [cwd, setBranchName]);
|
|
21539
21520
|
useEffect45(() => {
|
|
21540
21521
|
fetchBranchName();
|
|
21541
|
-
const gitLogsHeadPath =
|
|
21522
|
+
const gitLogsHeadPath = path11.join(cwd, ".git", "logs", "HEAD");
|
|
21542
21523
|
let watcher;
|
|
21543
21524
|
let cancelled = false;
|
|
21544
21525
|
const setupWatcher = async () => {
|
|
21545
21526
|
try {
|
|
21546
|
-
await fsPromises2.access(gitLogsHeadPath,
|
|
21527
|
+
await fsPromises2.access(gitLogsHeadPath, fs9.constants.F_OK);
|
|
21547
21528
|
if (cancelled) return;
|
|
21548
|
-
watcher =
|
|
21529
|
+
watcher = fs9.watch(gitLogsHeadPath, (eventType) => {
|
|
21549
21530
|
if (eventType === "change" || eventType === "rename") {
|
|
21550
21531
|
fetchBranchName();
|
|
21551
21532
|
}
|
|
@@ -22093,8 +22074,8 @@ function useInputHistoryStore() {
|
|
|
22093
22074
|
|
|
22094
22075
|
// src/services/prompt-history-store.ts
|
|
22095
22076
|
import { randomUUID } from "node:crypto";
|
|
22096
|
-
import { promises as
|
|
22097
|
-
import
|
|
22077
|
+
import { promises as fs10 } from "node:fs";
|
|
22078
|
+
import path12 from "node:path";
|
|
22098
22079
|
var MAX_HISTORY_ENTRIES = 1e3;
|
|
22099
22080
|
function isPromptHistoryEntry(value) {
|
|
22100
22081
|
if (!value || typeof value !== "object") return false;
|
|
@@ -22135,7 +22116,7 @@ var PromptHistoryStore = class {
|
|
|
22135
22116
|
if (this.entries) return this.entries;
|
|
22136
22117
|
try {
|
|
22137
22118
|
const parsed = JSON.parse(
|
|
22138
|
-
await
|
|
22119
|
+
await fs10.readFile(this.filePath, "utf8")
|
|
22139
22120
|
);
|
|
22140
22121
|
if (!Array.isArray(parsed) || !parsed.every(isPromptHistoryEntry)) {
|
|
22141
22122
|
await this.backUpInvalidFile();
|
|
@@ -22157,17 +22138,17 @@ var PromptHistoryStore = class {
|
|
|
22157
22138
|
}
|
|
22158
22139
|
async backUpInvalidFile() {
|
|
22159
22140
|
const backupPath = `${this.filePath}.invalid.${Date.now()}.bak`;
|
|
22160
|
-
await
|
|
22141
|
+
await fs10.rename(this.filePath, backupPath).catch(() => {
|
|
22161
22142
|
});
|
|
22162
22143
|
}
|
|
22163
22144
|
async writeAtomically(entries) {
|
|
22164
|
-
await
|
|
22145
|
+
await fs10.mkdir(path12.dirname(this.filePath), { recursive: true });
|
|
22165
22146
|
const temporaryPath = `${this.filePath}.${process.pid}.${randomUUID()}.tmp`;
|
|
22166
22147
|
try {
|
|
22167
|
-
await
|
|
22168
|
-
await
|
|
22148
|
+
await fs10.writeFile(temporaryPath, JSON.stringify(entries), "utf8");
|
|
22149
|
+
await fs10.rename(temporaryPath, this.filePath);
|
|
22169
22150
|
} finally {
|
|
22170
|
-
await
|
|
22151
|
+
await fs10.rm(temporaryPath, { force: true }).catch(() => {
|
|
22171
22152
|
});
|
|
22172
22153
|
}
|
|
22173
22154
|
}
|
|
@@ -22240,9 +22221,9 @@ var useShellInactivityStatus = ({
|
|
|
22240
22221
|
// src/ui/hooks/input/use-local-shell-command.ts
|
|
22241
22222
|
import { useCallback as useCallback44, useEffect as useEffect53, useRef as useRef29, useState as useState52 } from "react";
|
|
22242
22223
|
import crypto2 from "node:crypto";
|
|
22243
|
-
import
|
|
22244
|
-
import
|
|
22245
|
-
import
|
|
22224
|
+
import fs11 from "node:fs";
|
|
22225
|
+
import os3 from "node:os";
|
|
22226
|
+
import path13 from "node:path";
|
|
22246
22227
|
function outputDisplay(output) {
|
|
22247
22228
|
return typeof output === "string" ? { type: "text", content: output } : { type: "ansi", content: output };
|
|
22248
22229
|
}
|
|
@@ -22295,9 +22276,9 @@ function useLocalShellCommand({
|
|
|
22295
22276
|
let cumulativeOutput = "";
|
|
22296
22277
|
let binaryOutput = false;
|
|
22297
22278
|
let binaryBytes = 0;
|
|
22298
|
-
if (
|
|
22299
|
-
pwdFilePath =
|
|
22300
|
-
|
|
22279
|
+
if (os3.platform() !== "win32") {
|
|
22280
|
+
pwdFilePath = path13.join(
|
|
22281
|
+
os3.tmpdir(),
|
|
22301
22282
|
`dsh_console_shell_pwd_${crypto2.randomBytes(6).toString("hex")}.tmp`
|
|
22302
22283
|
);
|
|
22303
22284
|
const terminated = command.endsWith(";") || command.endsWith("&") ? command : `${command};`;
|
|
@@ -22398,7 +22379,7 @@ function useLocalShellCommand({
|
|
|
22398
22379
|
if (mountedRef.current) setPendingItem(null);
|
|
22399
22380
|
if (pwdFilePath !== void 0) {
|
|
22400
22381
|
try {
|
|
22401
|
-
|
|
22382
|
+
fs11.unlinkSync(pwdFilePath);
|
|
22402
22383
|
} catch (error) {
|
|
22403
22384
|
if (error.code !== "ENOENT") {
|
|
22404
22385
|
onDebugMessage(`Unable to remove shell state file: ${String(error)}`);
|
|
@@ -22449,8 +22430,8 @@ ${output}`;
|
|
|
22449
22430
|
output = `Command exited with code ${result.exitCode}.
|
|
22450
22431
|
${output}`;
|
|
22451
22432
|
}
|
|
22452
|
-
if (pwdFilePath !== void 0 &&
|
|
22453
|
-
const finalDir =
|
|
22433
|
+
if (pwdFilePath !== void 0 && fs11.existsSync(pwdFilePath)) {
|
|
22434
|
+
const finalDir = fs11.readFileSync(pwdFilePath, "utf8").trim();
|
|
22454
22435
|
if (finalDir && finalDir !== targetDir) {
|
|
22455
22436
|
output = `WARNING: shell mode is stateless; the directory change to '${finalDir}' will not persist.
|
|
22456
22437
|
|
|
@@ -22465,7 +22446,7 @@ ${output}`;
|
|
|
22465
22446
|
}
|
|
22466
22447
|
|
|
22467
22448
|
// src/ui/app-container.tsx
|
|
22468
|
-
import { jsx as
|
|
22449
|
+
import { jsx as jsx95 } from "react/jsx-runtime";
|
|
22469
22450
|
var SHELL_WIDTH_FRACTION = 0.89;
|
|
22470
22451
|
var SHELL_HEIGHT_PADDING = 10;
|
|
22471
22452
|
var noopExternalStoreSubscribe = () => () => {
|
|
@@ -22636,6 +22617,7 @@ var AppContainer = (props) => {
|
|
|
22636
22617
|
[modelSelectionRuntime]
|
|
22637
22618
|
);
|
|
22638
22619
|
const currentModel = modelSelectionSnapshot ? modelSelectionLabel(modelSelectionSnapshot.current) : "DSH default";
|
|
22620
|
+
const currentReasoningEffort = modelSelectionSnapshot ? modelReasoningEffortLabel(modelSelectionSnapshot.current) : void 0;
|
|
22639
22621
|
const providerSetupSnapshot = useSyncExternalStore5(
|
|
22640
22622
|
providerSetupRuntime?.subscribe ?? noopExternalStoreSubscribe,
|
|
22641
22623
|
providerSetupRuntime?.getSnapshot ?? emptyProviderSetupSnapshot,
|
|
@@ -22644,7 +22626,7 @@ var AppContainer = (props) => {
|
|
|
22644
22626
|
const [providerSetupDismissed, setProviderSetupDismissed] = useState53(false);
|
|
22645
22627
|
const promptHistory = useMemo34(
|
|
22646
22628
|
() => new PromptHistoryStore(
|
|
22647
|
-
|
|
22629
|
+
join5(config.storage.getProjectTempDir(), "prompt_history.json")
|
|
22648
22630
|
),
|
|
22649
22631
|
[config.storage]
|
|
22650
22632
|
);
|
|
@@ -22685,7 +22667,7 @@ var AppContainer = (props) => {
|
|
|
22685
22667
|
const staticAreaMaxItemHeight = Math.max(terminalHeight * 4, 100);
|
|
22686
22668
|
const isValidPath = useCallback45((filePath) => {
|
|
22687
22669
|
try {
|
|
22688
|
-
return
|
|
22670
|
+
return fs12.existsSync(filePath) && fs12.statSync(filePath).isFile();
|
|
22689
22671
|
} catch (_e) {
|
|
22690
22672
|
return false;
|
|
22691
22673
|
}
|
|
@@ -23025,7 +23007,7 @@ ${queuedText}` : queuedText;
|
|
|
23025
23007
|
return;
|
|
23026
23008
|
}
|
|
23027
23009
|
setCustomDialog(
|
|
23028
|
-
/* @__PURE__ */
|
|
23010
|
+
/* @__PURE__ */ jsx95(
|
|
23029
23011
|
ProviderSetupDialog,
|
|
23030
23012
|
{
|
|
23031
23013
|
runtime: providerSetupRuntime,
|
|
@@ -23421,6 +23403,7 @@ ${queuedText}` : queuedText;
|
|
|
23421
23403
|
messageQueue,
|
|
23422
23404
|
queueErrorMessage,
|
|
23423
23405
|
currentModel,
|
|
23406
|
+
currentReasoningEffort,
|
|
23424
23407
|
errorCount,
|
|
23425
23408
|
availableTerminalHeight,
|
|
23426
23409
|
mainAreaWidth,
|
|
@@ -23494,6 +23477,7 @@ ${queuedText}` : queuedText;
|
|
|
23494
23477
|
mainControlsRef,
|
|
23495
23478
|
rootUiRef,
|
|
23496
23479
|
currentModel,
|
|
23480
|
+
currentReasoningEffort,
|
|
23497
23481
|
activePtyId,
|
|
23498
23482
|
historyManager,
|
|
23499
23483
|
embeddedShellFocused,
|
|
@@ -23547,14 +23531,14 @@ ${queuedText}` : queuedText;
|
|
|
23547
23531
|
setEmbeddedShellFocused
|
|
23548
23532
|
]
|
|
23549
23533
|
);
|
|
23550
|
-
return /* @__PURE__ */
|
|
23534
|
+
return /* @__PURE__ */ jsx95(UIStateContext.Provider, { value: uiState, children: /* @__PURE__ */ jsx95(UIActionsContext.Provider, { value: uiActions, children: /* @__PURE__ */ jsx95(ConfigContext.Provider, { value: config, children: /* @__PURE__ */ jsx95(
|
|
23551
23535
|
AppContext.Provider,
|
|
23552
23536
|
{
|
|
23553
23537
|
value: {
|
|
23554
23538
|
version: props.version,
|
|
23555
23539
|
startupWarnings: props.startupWarnings || []
|
|
23556
23540
|
},
|
|
23557
|
-
children: /* @__PURE__ */
|
|
23541
|
+
children: /* @__PURE__ */ jsx95(ApprovalRuntimeProvider, { runtime: approvalRuntime, children: /* @__PURE__ */ jsx95(UserQuestionRuntimeProvider, { runtime: userQuestionRuntime, children: /* @__PURE__ */ jsx95(ShellFocusContext.Provider, { value: isFocused, children: /* @__PURE__ */ jsx95(App, {}) }) }) })
|
|
23558
23542
|
}
|
|
23559
23543
|
) }) }) });
|
|
23560
23544
|
};
|
|
@@ -23562,7 +23546,7 @@ ${queuedText}` : queuedText;
|
|
|
23562
23546
|
// src/ui/root.tsx
|
|
23563
23547
|
import React21 from "react";
|
|
23564
23548
|
import { render } from "ink";
|
|
23565
|
-
import { jsx as
|
|
23549
|
+
import { jsx as jsx96 } from "react/jsx-runtime";
|
|
23566
23550
|
var SLOW_RENDER_MS = 200;
|
|
23567
23551
|
function validateDnsResolutionOrder(order) {
|
|
23568
23552
|
const defaultValue = "ipv4first";
|
|
@@ -23610,17 +23594,17 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
|
|
|
23610
23594
|
const version = await getVersion();
|
|
23611
23595
|
const AppWrapper = () => {
|
|
23612
23596
|
useKittyKeyboardProtocol();
|
|
23613
|
-
return /* @__PURE__ */
|
|
23597
|
+
return /* @__PURE__ */ jsx96(SettingsContext.Provider, { value: settings, children: /* @__PURE__ */ jsx96(
|
|
23614
23598
|
KeypressProvider,
|
|
23615
23599
|
{
|
|
23616
23600
|
config,
|
|
23617
23601
|
debugKeystrokeLogging: settings.merged.general.debugKeystrokeLogging,
|
|
23618
|
-
children: /* @__PURE__ */
|
|
23602
|
+
children: /* @__PURE__ */ jsx96(
|
|
23619
23603
|
MouseProvider,
|
|
23620
23604
|
{
|
|
23621
23605
|
mouseEventsEnabled,
|
|
23622
23606
|
debugKeystrokeLogging: settings.merged.general.debugKeystrokeLogging,
|
|
23623
|
-
children: /* @__PURE__ */
|
|
23607
|
+
children: /* @__PURE__ */ jsx96(ScrollProvider, { children: /* @__PURE__ */ jsx96(SessionStatsProvider, { conversationRuntime, children: /* @__PURE__ */ jsx96(VimModeProvider, { settings, children: /* @__PURE__ */ jsx96(
|
|
23624
23608
|
AppContainer,
|
|
23625
23609
|
{
|
|
23626
23610
|
config,
|
|
@@ -23648,7 +23632,7 @@ async function startInteractiveUI(config, settings, startupWarnings, workspaceRo
|
|
|
23648
23632
|
};
|
|
23649
23633
|
const { stdout: inkStdout, stderr: inkStderr } = createWorkingStdio();
|
|
23650
23634
|
const instance = render(
|
|
23651
|
-
process.env["DEBUG"] ? /* @__PURE__ */
|
|
23635
|
+
process.env["DEBUG"] ? /* @__PURE__ */ jsx96(React21.StrictMode, { children: /* @__PURE__ */ jsx96(AppWrapper, {}) }) : /* @__PURE__ */ jsx96(AppWrapper, {}),
|
|
23652
23636
|
{
|
|
23653
23637
|
stdout: inkStdout,
|
|
23654
23638
|
stderr: inkStderr,
|
|
@@ -23839,10 +23823,11 @@ function mergeToolPresentation(existing, next) {
|
|
|
23839
23823
|
return { ...existing, ...next };
|
|
23840
23824
|
}
|
|
23841
23825
|
var DshSessionProjector = class {
|
|
23842
|
-
constructor(sessionId = "dsh-console", model = "default", toolPresenter) {
|
|
23826
|
+
constructor(sessionId = "dsh-console", model = "default", toolPresenter, contextWindow2) {
|
|
23843
23827
|
this.sessionId = sessionId;
|
|
23844
23828
|
this.model = model;
|
|
23845
23829
|
this.toolPresenter = toolPresenter;
|
|
23830
|
+
this.contextWindow = contextWindow2;
|
|
23846
23831
|
}
|
|
23847
23832
|
snapshot = {
|
|
23848
23833
|
messages: [],
|
|
@@ -23863,7 +23848,8 @@ var DshSessionProjector = class {
|
|
|
23863
23848
|
getSessionStats = () => ({
|
|
23864
23849
|
sessionId: this.sessionId,
|
|
23865
23850
|
metrics: this.metrics,
|
|
23866
|
-
lastPromptTokenCount: this.lastPromptTokenCount
|
|
23851
|
+
lastPromptTokenCount: this.lastPromptTokenCount,
|
|
23852
|
+
...this.contextWindow === void 0 ? {} : { contextWindow: this.contextWindow }
|
|
23867
23853
|
});
|
|
23868
23854
|
subscribe = (listener) => {
|
|
23869
23855
|
this.listeners.add(listener);
|
|
@@ -24219,7 +24205,8 @@ var DshPromptCompletionRuntime = class {
|
|
|
24219
24205
|
meta: { cwd: process.cwd() },
|
|
24220
24206
|
agentOptions: {
|
|
24221
24207
|
provider: selection.provider,
|
|
24222
|
-
model: selection.model
|
|
24208
|
+
model: selection.model,
|
|
24209
|
+
...selection.reasoningEffort === void 0 ? {} : { reasoningEffort: selection.reasoningEffort }
|
|
24223
24210
|
},
|
|
24224
24211
|
signal,
|
|
24225
24212
|
setup: (agentCtx) => {
|
|
@@ -24280,8 +24267,8 @@ var DshPromptCompletionRuntime = class {
|
|
|
24280
24267
|
};
|
|
24281
24268
|
|
|
24282
24269
|
// src/dsh/prompt-input-runtime.ts
|
|
24283
|
-
import { promises as
|
|
24284
|
-
import
|
|
24270
|
+
import { promises as fs13 } from "node:fs";
|
|
24271
|
+
import path14 from "node:path";
|
|
24285
24272
|
var MAX_FILES = 50;
|
|
24286
24273
|
var MAX_FILE_BYTES = 256 * 1024;
|
|
24287
24274
|
var MAX_TOTAL_BYTES = 1024 * 1024;
|
|
@@ -24315,8 +24302,8 @@ function throwIfAborted(signal) {
|
|
|
24315
24302
|
if (signal.aborted) throw abortError();
|
|
24316
24303
|
}
|
|
24317
24304
|
function isWithin(root, candidate) {
|
|
24318
|
-
const relative2 =
|
|
24319
|
-
return relative2 === "" || !relative2.startsWith("..") && !
|
|
24305
|
+
const relative2 = path14.relative(root, candidate);
|
|
24306
|
+
return relative2 === "" || !relative2.startsWith("..") && !path14.isAbsolute(relative2);
|
|
24320
24307
|
}
|
|
24321
24308
|
function parseReferences(text) {
|
|
24322
24309
|
const references = [];
|
|
@@ -24345,14 +24332,14 @@ function parseReferences(text) {
|
|
|
24345
24332
|
return references;
|
|
24346
24333
|
}
|
|
24347
24334
|
async function resolveReference(value, workspaceRoots, clipboardRoots) {
|
|
24348
|
-
const candidates =
|
|
24335
|
+
const candidates = path14.isAbsolute(value) ? [path14.resolve(value)] : workspaceRoots.map((root) => path14.resolve(root, value));
|
|
24349
24336
|
const isAllowedLexically = candidates.some(
|
|
24350
24337
|
(candidate) => workspaceRoots.some((root) => isWithin(root, candidate)) || clipboardRoots.some((root) => isWithin(root, candidate))
|
|
24351
24338
|
);
|
|
24352
24339
|
if (!isAllowedLexically) throw new Error(`File reference is outside the workspace: @${value}`);
|
|
24353
24340
|
for (const candidate of candidates) {
|
|
24354
24341
|
try {
|
|
24355
|
-
const realCandidate = await
|
|
24342
|
+
const realCandidate = await fs13.realpath(candidate);
|
|
24356
24343
|
const workspaceRoot = workspaceRoots.find((root) => isWithin(root, realCandidate));
|
|
24357
24344
|
if (workspaceRoot) return { path: realCandidate, kind: "workspace-file" };
|
|
24358
24345
|
const clipboardRoot = clipboardRoots.find((root) => isWithin(root, realCandidate));
|
|
@@ -24368,20 +24355,20 @@ async function resolveReference(value, workspaceRoots, clipboardRoots) {
|
|
|
24368
24355
|
async function collectFiles(candidate, root, signal, output) {
|
|
24369
24356
|
throwIfAborted(signal);
|
|
24370
24357
|
if (output.length >= MAX_FILES) return;
|
|
24371
|
-
const stats = await
|
|
24358
|
+
const stats = await fs13.lstat(candidate);
|
|
24372
24359
|
if (stats.isSymbolicLink()) return;
|
|
24373
24360
|
if (stats.isFile()) {
|
|
24374
|
-
if (!IMAGE_MEDIA_TYPES.has(
|
|
24361
|
+
if (!IMAGE_MEDIA_TYPES.has(path14.extname(candidate).toLowerCase())) output.push(candidate);
|
|
24375
24362
|
return;
|
|
24376
24363
|
}
|
|
24377
24364
|
if (!stats.isDirectory()) return;
|
|
24378
|
-
const entries = await
|
|
24365
|
+
const entries = await fs13.readdir(candidate, { withFileTypes: true });
|
|
24379
24366
|
entries.sort((left, right) => left.name.localeCompare(right.name));
|
|
24380
24367
|
for (const entry of entries) {
|
|
24381
24368
|
if (output.length >= MAX_FILES) return;
|
|
24382
24369
|
if (entry.name.startsWith(".")) continue;
|
|
24383
24370
|
if (entry.isDirectory() && SKIPPED_DIRECTORIES.has(entry.name)) continue;
|
|
24384
|
-
const child =
|
|
24371
|
+
const child = path14.join(candidate, entry.name);
|
|
24385
24372
|
if (isWithin(root, child)) await collectFiles(child, root, signal, output);
|
|
24386
24373
|
}
|
|
24387
24374
|
}
|
|
@@ -24401,12 +24388,12 @@ var WorkspacePromptInputRuntime = class {
|
|
|
24401
24388
|
}) {
|
|
24402
24389
|
if (this.disposed) throw new Error("Prompt input runtime has been disposed.");
|
|
24403
24390
|
throwIfAborted(signal);
|
|
24404
|
-
const roots = await Promise.all(workspaceRoots.map((root) =>
|
|
24391
|
+
const roots = await Promise.all(workspaceRoots.map((root) => fs13.realpath(root)));
|
|
24405
24392
|
const clipboardRoots = await Promise.all(clipboardImageRoots.map(async (root) => {
|
|
24406
24393
|
try {
|
|
24407
|
-
return await
|
|
24394
|
+
return await fs13.realpath(root);
|
|
24408
24395
|
} catch (error) {
|
|
24409
|
-
if (error.code === "ENOENT") return
|
|
24396
|
+
if (error.code === "ENOENT") return path14.resolve(root);
|
|
24410
24397
|
throw error;
|
|
24411
24398
|
}
|
|
24412
24399
|
}));
|
|
@@ -24417,14 +24404,14 @@ var WorkspacePromptInputRuntime = class {
|
|
|
24417
24404
|
throwIfAborted(signal);
|
|
24418
24405
|
const resolved = await resolveReference(reference.value, roots, clipboardRoots);
|
|
24419
24406
|
if (!resolved) continue;
|
|
24420
|
-
const stats = await
|
|
24421
|
-
const extension =
|
|
24407
|
+
const stats = await fs13.stat(resolved.path);
|
|
24408
|
+
const extension = path14.extname(resolved.path).toLowerCase();
|
|
24422
24409
|
const mediaType = IMAGE_MEDIA_TYPES.get(extension);
|
|
24423
24410
|
if (stats.isFile() && mediaType) {
|
|
24424
24411
|
images.set(reference.start, {
|
|
24425
24412
|
type: "image-source",
|
|
24426
24413
|
source: { kind: resolved.kind, path: resolved.path },
|
|
24427
|
-
displayName:
|
|
24414
|
+
displayName: path14.basename(resolved.path),
|
|
24428
24415
|
declaredMediaType: mediaType
|
|
24429
24416
|
});
|
|
24430
24417
|
continue;
|
|
@@ -24441,7 +24428,7 @@ var WorkspacePromptInputRuntime = class {
|
|
|
24441
24428
|
if (stats.size > MAX_FILE_BYTES) {
|
|
24442
24429
|
throw new Error(`Referenced text file is too large: @${reference.value}`);
|
|
24443
24430
|
}
|
|
24444
|
-
const candidate = await
|
|
24431
|
+
const candidate = await fs13.readFile(resolved.path, { signal });
|
|
24445
24432
|
try {
|
|
24446
24433
|
if (candidate.includes(0)) throw new Error("binary");
|
|
24447
24434
|
new TextDecoder("utf-8", { fatal: true }).decode(candidate);
|
|
@@ -24469,9 +24456,9 @@ var WorkspacePromptInputRuntime = class {
|
|
|
24469
24456
|
let totalBytes = 0;
|
|
24470
24457
|
for (const { file, root } of uniqueFiles) {
|
|
24471
24458
|
throwIfAborted(signal);
|
|
24472
|
-
const stats = await
|
|
24459
|
+
const stats = await fs13.stat(file);
|
|
24473
24460
|
if (stats.size > MAX_FILE_BYTES || totalBytes + stats.size > MAX_TOTAL_BYTES) continue;
|
|
24474
|
-
const buffer = await
|
|
24461
|
+
const buffer = await fs13.readFile(file, { signal });
|
|
24475
24462
|
if (buffer.includes(0)) continue;
|
|
24476
24463
|
let content2;
|
|
24477
24464
|
try {
|
|
@@ -24480,7 +24467,7 @@ var WorkspacePromptInputRuntime = class {
|
|
|
24480
24467
|
continue;
|
|
24481
24468
|
}
|
|
24482
24469
|
totalBytes += stats.size;
|
|
24483
|
-
const label =
|
|
24470
|
+
const label = path14.relative(root, file).split(path14.sep).join("/");
|
|
24484
24471
|
sections.push(`Content from @${label}:
|
|
24485
24472
|
${content2}`);
|
|
24486
24473
|
}
|
|
@@ -24685,7 +24672,7 @@ var DshToolPresentationAdapter = class {
|
|
|
24685
24672
|
};
|
|
24686
24673
|
|
|
24687
24674
|
// src/dsh/attachment-input-adapter.ts
|
|
24688
|
-
import { promises as
|
|
24675
|
+
import { promises as fs14 } from "node:fs";
|
|
24689
24676
|
import { isImageAdmissionError } from "@deepseek-ai/dsh-attachment";
|
|
24690
24677
|
var IMAGE_MEDIA_TYPES2 = /* @__PURE__ */ new Set([
|
|
24691
24678
|
"image/png",
|
|
@@ -24718,7 +24705,7 @@ var DshAttachmentInputAdapter = class {
|
|
|
24718
24705
|
signal.throwIfAborted();
|
|
24719
24706
|
const images = imageParts(content);
|
|
24720
24707
|
const inputs = await Promise.all(images.map(async (part) => ({
|
|
24721
|
-
data: new Uint8Array(await
|
|
24708
|
+
data: new Uint8Array(await fs14.readFile(part.source.path, { signal })),
|
|
24722
24709
|
mediaType: imageMediaType(part.declaredMediaType),
|
|
24723
24710
|
name: part.displayName
|
|
24724
24711
|
})));
|
|
@@ -24746,17 +24733,48 @@ var DshAttachmentInputAdapter = class {
|
|
|
24746
24733
|
import { unlink as unlink3 } from "node:fs/promises";
|
|
24747
24734
|
|
|
24748
24735
|
// src/dsh/model-selection-runtime.ts
|
|
24736
|
+
import { ReasoningEffortId } from "@deepseek-ai/dsh-llm";
|
|
24749
24737
|
function inputModalities(model) {
|
|
24750
24738
|
return (model.inputModalities ?? ["text"]).filter(
|
|
24751
24739
|
(modality) => modality === "text" || modality === "image"
|
|
24752
24740
|
);
|
|
24753
24741
|
}
|
|
24754
|
-
function
|
|
24742
|
+
function contextWindow(model) {
|
|
24743
|
+
return "context" in model ? model.context?.contextWindow : void 0;
|
|
24744
|
+
}
|
|
24745
|
+
function modelSelectionView(model, selectedEffort) {
|
|
24746
|
+
const resolvedContextWindow = contextWindow(model);
|
|
24747
|
+
const reasoning = "reasoning" in model ? model.reasoning : void 0;
|
|
24748
|
+
if (selectedEffort !== void 0 && !reasoning?.efforts.some((effort) => String(effort.id) === selectedEffort)) {
|
|
24749
|
+
throw new Error(
|
|
24750
|
+
`Reasoning effort ${selectedEffort} is not available for ${model.provider}/${model.id}.`
|
|
24751
|
+
);
|
|
24752
|
+
}
|
|
24755
24753
|
return {
|
|
24756
24754
|
provider: model.provider,
|
|
24757
24755
|
model: model.id,
|
|
24758
24756
|
name: model.name,
|
|
24759
|
-
inputModalities: inputModalities(model)
|
|
24757
|
+
inputModalities: inputModalities(model),
|
|
24758
|
+
...resolvedContextWindow === void 0 ? {} : { contextWindow: resolvedContextWindow },
|
|
24759
|
+
...reasoning === void 0 ? {} : {
|
|
24760
|
+
reasoning: {
|
|
24761
|
+
efforts: reasoning.efforts.map((effort) => ({
|
|
24762
|
+
id: String(effort.id),
|
|
24763
|
+
name: effort.name,
|
|
24764
|
+
...effort.description === void 0 ? {} : { description: effort.description }
|
|
24765
|
+
})),
|
|
24766
|
+
...reasoning.defaultEffort === void 0 ? {} : { defaultEffort: String(reasoning.defaultEffort) },
|
|
24767
|
+
...selectedEffort === void 0 ? {} : { selectedEffort }
|
|
24768
|
+
}
|
|
24769
|
+
}
|
|
24770
|
+
};
|
|
24771
|
+
}
|
|
24772
|
+
function modelSelectionFromView(selection) {
|
|
24773
|
+
const reasoningEffort = selection.reasoning?.selectedEffort;
|
|
24774
|
+
return {
|
|
24775
|
+
provider: selection.provider,
|
|
24776
|
+
model: selection.model,
|
|
24777
|
+
...reasoningEffort === void 0 ? {} : { reasoningEffort: ReasoningEffortId(reasoningEffort) }
|
|
24760
24778
|
};
|
|
24761
24779
|
}
|
|
24762
24780
|
var DshModelSelectionRuntime = class _DshModelSelectionRuntime {
|
|
@@ -24771,7 +24789,10 @@ var DshModelSelectionRuntime = class _DshModelSelectionRuntime {
|
|
|
24771
24789
|
snapshot;
|
|
24772
24790
|
static async create(llm, defaults, activate, conversationExists, signal) {
|
|
24773
24791
|
const selection = defaults.currentSelection();
|
|
24774
|
-
const current = modelSelectionView(
|
|
24792
|
+
const current = modelSelectionView(
|
|
24793
|
+
await llm.resolveModelInfo(selection.provider, selection.model, signal),
|
|
24794
|
+
selection.reasoningEffort === void 0 ? void 0 : String(selection.reasoningEffort)
|
|
24795
|
+
);
|
|
24775
24796
|
signal?.throwIfAborted();
|
|
24776
24797
|
return new _DshModelSelectionRuntime(llm, defaults, activate, conversationExists, current);
|
|
24777
24798
|
}
|
|
@@ -24791,23 +24812,41 @@ var DshModelSelectionRuntime = class _DshModelSelectionRuntime {
|
|
|
24791
24812
|
})
|
|
24792
24813
|
);
|
|
24793
24814
|
signal?.throwIfAborted();
|
|
24794
|
-
return
|
|
24815
|
+
return Promise.all(
|
|
24816
|
+
models.flat().map(async (model) => {
|
|
24817
|
+
signal?.throwIfAborted();
|
|
24818
|
+
try {
|
|
24819
|
+
const resolved = await this.llm.resolveModelInfo(
|
|
24820
|
+
model.provider,
|
|
24821
|
+
model.id,
|
|
24822
|
+
signal
|
|
24823
|
+
);
|
|
24824
|
+
signal?.throwIfAborted();
|
|
24825
|
+
return modelSelectionView(resolved);
|
|
24826
|
+
} catch (cause) {
|
|
24827
|
+
signal?.throwIfAborted();
|
|
24828
|
+
if (cause instanceof Error && cause.name === "AbortError") throw cause;
|
|
24829
|
+
return modelSelectionView(model);
|
|
24830
|
+
}
|
|
24831
|
+
})
|
|
24832
|
+
);
|
|
24795
24833
|
}
|
|
24796
24834
|
hasConversation = () => this.conversationExists();
|
|
24797
|
-
async setModel(
|
|
24798
|
-
const resolved = modelSelectionView(
|
|
24835
|
+
async setModel(selection, signal) {
|
|
24836
|
+
const resolved = modelSelectionView(
|
|
24837
|
+
await this.llm.resolveModelInfo(selection.provider, selection.model, signal),
|
|
24838
|
+
selection.reasoningEffort
|
|
24839
|
+
);
|
|
24799
24840
|
signal?.throwIfAborted();
|
|
24800
24841
|
const previousDefault = this.snapshot.default;
|
|
24801
|
-
|
|
24842
|
+
const selected = modelSelectionFromView(resolved);
|
|
24843
|
+
await this.defaults.saveSelection(selected);
|
|
24802
24844
|
try {
|
|
24803
24845
|
signal?.throwIfAborted();
|
|
24804
|
-
await this.activate(
|
|
24846
|
+
await this.activate(selected);
|
|
24805
24847
|
} catch (cause) {
|
|
24806
24848
|
try {
|
|
24807
|
-
await this.defaults.saveSelection(
|
|
24808
|
-
provider: previousDefault.provider,
|
|
24809
|
-
model: previousDefault.model
|
|
24810
|
-
});
|
|
24849
|
+
await this.defaults.saveSelection(modelSelectionFromView(previousDefault));
|
|
24811
24850
|
} catch (rollbackError) {
|
|
24812
24851
|
throw new AggregateError(
|
|
24813
24852
|
[cause, rollbackError],
|
|
@@ -24934,7 +24973,7 @@ var DshSessionManagementRuntime = class {
|
|
|
24934
24973
|
signal?.throwIfAborted();
|
|
24935
24974
|
const current = this.callbacks.currentSelection();
|
|
24936
24975
|
const sessionId = await this.callbacks.createFresh(
|
|
24937
|
-
|
|
24976
|
+
modelSelectionFromView(current),
|
|
24938
24977
|
signal
|
|
24939
24978
|
);
|
|
24940
24979
|
this.commitCurrentSession(sessionId);
|
|
@@ -24970,10 +25009,14 @@ var DshSessionManagementRuntime = class {
|
|
|
24970
25009
|
signal
|
|
24971
25010
|
);
|
|
24972
25011
|
signal?.throwIfAborted();
|
|
24973
|
-
const
|
|
25012
|
+
const explicitReasoningEffort = header.adapterDefaults?.reasoningEffort ? void 0 : header.config.reasoningEffort;
|
|
25013
|
+
const selected = modelSelectionView(
|
|
25014
|
+
resolved,
|
|
25015
|
+
explicitReasoningEffort === void 0 ? void 0 : String(explicitReasoningEffort)
|
|
25016
|
+
);
|
|
24974
25017
|
const resumedSessionId = await this.callbacks.resume(
|
|
24975
25018
|
id,
|
|
24976
|
-
|
|
25019
|
+
modelSelectionFromView(selected),
|
|
24977
25020
|
signal
|
|
24978
25021
|
);
|
|
24979
25022
|
this.callbacks.adoptCurrentModel(selected);
|
|
@@ -25441,9 +25484,9 @@ function throwIfAborted2(signal) {
|
|
|
25441
25484
|
throw new DOMException("The operation was aborted.", "AbortError");
|
|
25442
25485
|
}
|
|
25443
25486
|
}
|
|
25444
|
-
function valueAtPath(value,
|
|
25487
|
+
function valueAtPath(value, path15) {
|
|
25445
25488
|
let current = value;
|
|
25446
|
-
for (const segment of
|
|
25489
|
+
for (const segment of path15) {
|
|
25447
25490
|
if (typeof current !== "object" || current === null) return void 0;
|
|
25448
25491
|
current = current[segment];
|
|
25449
25492
|
}
|
|
@@ -25677,7 +25720,17 @@ async function start(ctx, config) {
|
|
|
25677
25720
|
const promptInputRuntime = new WorkspacePromptInputRuntime();
|
|
25678
25721
|
const attachmentInput = new DshAttachmentInputAdapter(attachments);
|
|
25679
25722
|
const createActiveConversation = async (selected, options = {}) => {
|
|
25680
|
-
const
|
|
25723
|
+
const modelInfo = await llm.resolveModelInfo(
|
|
25724
|
+
selected.provider,
|
|
25725
|
+
selected.model,
|
|
25726
|
+
options.signal
|
|
25727
|
+
);
|
|
25728
|
+
options.signal?.throwIfAborted();
|
|
25729
|
+
const agentOptions = {
|
|
25730
|
+
provider: selected.provider,
|
|
25731
|
+
model: selected.model,
|
|
25732
|
+
...selected.reasoningEffort === void 0 ? {} : { reasoningEffort: selected.reasoningEffort }
|
|
25733
|
+
};
|
|
25681
25734
|
const setup = (agentCtx) => {
|
|
25682
25735
|
const ref = {
|
|
25683
25736
|
current: selected,
|
|
@@ -25702,7 +25755,8 @@ async function start(ctx, config) {
|
|
|
25702
25755
|
const projector = new DshSessionProjector(
|
|
25703
25756
|
String(handle.agent.session.id),
|
|
25704
25757
|
String(selected.model),
|
|
25705
|
-
new DshToolPresentationAdapter(tools, handle.agent)
|
|
25758
|
+
new DshToolPresentationAdapter(tools, handle.agent),
|
|
25759
|
+
modelInfo.context?.contextWindow
|
|
25706
25760
|
);
|
|
25707
25761
|
if (options.resumeSessionId !== void 0)
|
|
25708
25762
|
projector.replay(handle.agent.session.events);
|