agentix-cli 0.104.1 → 0.104.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/{App-A7WZMOGA.js → App-2SSUXHUJ.js} +2 -2
  2. package/dist/{ChatApp-EWNT36ZE.js → ChatApp-RLOFB5CO.js} +2 -2
  3. package/dist/{agent-NPE76XHC.js → agent-PP6UH3O2.js} +2 -2
  4. package/dist/{board-dashboard-5EPKRDEW.js → board-dashboard-O3AYVTTF.js} +4 -4
  5. package/dist/{chunk-CUS7WGZT.js → chunk-2XLOIA52.js} +2 -2
  6. package/dist/{chunk-IA3BC7M3.js → chunk-3MMSS5JF.js} +2 -2
  7. package/dist/{chunk-IA3BC7M3.js.map → chunk-3MMSS5JF.js.map} +1 -1
  8. package/dist/{chunk-MVLNVMWI.js → chunk-4FSU5XTD.js} +2 -2
  9. package/dist/{chunk-BUAVQUHR.js → chunk-AK4HS2PQ.js} +2 -2
  10. package/dist/{chunk-N4IWNCH3.js → chunk-BBKFCHJV.js} +2 -2
  11. package/dist/{chunk-IO74N5DB.js → chunk-BLTE6OHO.js} +85 -85
  12. package/dist/chunk-BLTE6OHO.js.map +1 -0
  13. package/dist/{chunk-HE4PDESB.js → chunk-BTHH5ENX.js} +2 -2
  14. package/dist/{chunk-OLUAEBHJ.js → chunk-D6EX6VA5.js} +2 -2
  15. package/dist/{chunk-DEMIKEFB.js → chunk-DXOTH6MF.js} +30 -30
  16. package/dist/chunk-DXOTH6MF.js.map +1 -0
  17. package/dist/{chunk-76KJXOEV.js → chunk-E4RQHTNB.js} +2 -2
  18. package/dist/{chunk-MZQQVT3G.js → chunk-EB3B2FRY.js} +2 -2
  19. package/dist/{chunk-FZ7VHFL5.js → chunk-IM7SSJ67.js} +2 -2
  20. package/dist/{chunk-XHUOWYNY.js → chunk-J5LOMJ2Y.js} +2 -2
  21. package/dist/{chunk-ZBKKOUNJ.js → chunk-KPAGMXSL.js} +2 -2
  22. package/dist/{chunk-IOPAWHKW.js → chunk-KU3XT5S2.js} +2 -2
  23. package/dist/{chunk-NWNVHL57.js → chunk-N7YQ4IAR.js} +2 -2
  24. package/dist/{chunk-WTFNEPJ7.js → chunk-OREGWHKS.js} +2 -2
  25. package/dist/{chunk-32BPHJ4I.js → chunk-QFIIZIYX.js} +2 -2
  26. package/dist/{chunk-BEFKOHRC.js → chunk-UGM56ULD.js} +2 -2
  27. package/dist/{chunk-25RQQ55U.js → chunk-UGNXKP6Q.js} +2 -2
  28. package/dist/{chunk-Q57GZPDA.js → chunk-ZE7P7L2L.js} +2 -2
  29. package/dist/cli.js +1 -1
  30. package/dist/{client-ZX7AY7H3.js → client-LK2BLOBZ.js} +2 -2
  31. package/dist/{config-BXOS2PLC.js → config-OQKZUWUT.js} +2 -2
  32. package/dist/config-mutator-S3FP3A7K.js +2 -0
  33. package/dist/{doctor-P3QQP33C.js → doctor-ON2EECFT.js} +2 -2
  34. package/dist/index.d.ts +12 -1
  35. package/dist/index.js +1 -1
  36. package/dist/{program-SAEPPSSW.js → program-D7QOPCTE.js} +14 -14
  37. package/dist/{promote-FHX4Q62Z.js → promote-KKLC2ENK.js} +2 -2
  38. package/dist/{query-WBK3YEPV.js → query-JEOWXBWZ.js} +2 -2
  39. package/dist/{registry-T5HSN66G.js → registry-6DGUQ5YT.js} +2 -2
  40. package/dist/{request-planner-3LA5RAKG.js → request-planner-SXR7HCE7.js} +2 -2
  41. package/dist/{review-candidates-QV66TOCL.js → review-candidates-OBAXZ6IM.js} +2 -2
  42. package/dist/{routing-HF4XVD4Y.js → routing-GW7LSHRJ.js} +2 -2
  43. package/dist/schedule-tool-TX7EPMQZ.js +2 -0
  44. package/dist/scheduler-4SD7YBW3.js +2 -0
  45. package/dist/{seat-NQTZUIKH.js → seat-4KA3YZEN.js} +2 -2
  46. package/dist/{select-3GVC5RDA.js → select-WLYRCSSM.js} +2 -2
  47. package/dist/{set-enabled-SXCE2MZX.js → set-enabled-DHSDYIIA.js} +2 -2
  48. package/dist/{tool-23GOQNUW.js → tool-OBS4P2BP.js} +2 -2
  49. package/dist/{tool-E6JBENAN.js → tool-YKBDZ7K7.js} +2 -2
  50. package/dist/wiki-237HZZNR.js +2 -0
  51. package/package.json +1 -1
  52. package/dist/chunk-DEMIKEFB.js.map +0 -1
  53. package/dist/chunk-IO74N5DB.js.map +0 -1
  54. package/dist/config-mutator-KRAUD3CA.js +0 -2
  55. package/dist/schedule-tool-V66FX5XL.js +0 -2
  56. package/dist/scheduler-XVMWASQR.js +0 -2
  57. package/dist/wiki-VM2RTHVF.js +0 -2
  58. /package/dist/{App-A7WZMOGA.js.map → App-2SSUXHUJ.js.map} +0 -0
  59. /package/dist/{ChatApp-EWNT36ZE.js.map → ChatApp-RLOFB5CO.js.map} +0 -0
  60. /package/dist/{agent-NPE76XHC.js.map → agent-PP6UH3O2.js.map} +0 -0
  61. /package/dist/{board-dashboard-5EPKRDEW.js.map → board-dashboard-O3AYVTTF.js.map} +0 -0
  62. /package/dist/{chunk-CUS7WGZT.js.map → chunk-2XLOIA52.js.map} +0 -0
  63. /package/dist/{chunk-MVLNVMWI.js.map → chunk-4FSU5XTD.js.map} +0 -0
  64. /package/dist/{chunk-BUAVQUHR.js.map → chunk-AK4HS2PQ.js.map} +0 -0
  65. /package/dist/{chunk-N4IWNCH3.js.map → chunk-BBKFCHJV.js.map} +0 -0
  66. /package/dist/{chunk-HE4PDESB.js.map → chunk-BTHH5ENX.js.map} +0 -0
  67. /package/dist/{chunk-OLUAEBHJ.js.map → chunk-D6EX6VA5.js.map} +0 -0
  68. /package/dist/{chunk-76KJXOEV.js.map → chunk-E4RQHTNB.js.map} +0 -0
  69. /package/dist/{chunk-MZQQVT3G.js.map → chunk-EB3B2FRY.js.map} +0 -0
  70. /package/dist/{chunk-FZ7VHFL5.js.map → chunk-IM7SSJ67.js.map} +0 -0
  71. /package/dist/{chunk-XHUOWYNY.js.map → chunk-J5LOMJ2Y.js.map} +0 -0
  72. /package/dist/{chunk-ZBKKOUNJ.js.map → chunk-KPAGMXSL.js.map} +0 -0
  73. /package/dist/{chunk-IOPAWHKW.js.map → chunk-KU3XT5S2.js.map} +0 -0
  74. /package/dist/{chunk-NWNVHL57.js.map → chunk-N7YQ4IAR.js.map} +0 -0
  75. /package/dist/{chunk-WTFNEPJ7.js.map → chunk-OREGWHKS.js.map} +0 -0
  76. /package/dist/{chunk-32BPHJ4I.js.map → chunk-QFIIZIYX.js.map} +0 -0
  77. /package/dist/{chunk-BEFKOHRC.js.map → chunk-UGM56ULD.js.map} +0 -0
  78. /package/dist/{chunk-25RQQ55U.js.map → chunk-UGNXKP6Q.js.map} +0 -0
  79. /package/dist/{chunk-Q57GZPDA.js.map → chunk-ZE7P7L2L.js.map} +0 -0
  80. /package/dist/{client-ZX7AY7H3.js.map → client-LK2BLOBZ.js.map} +0 -0
  81. /package/dist/{config-BXOS2PLC.js.map → config-OQKZUWUT.js.map} +0 -0
  82. /package/dist/{config-mutator-KRAUD3CA.js.map → config-mutator-S3FP3A7K.js.map} +0 -0
  83. /package/dist/{doctor-P3QQP33C.js.map → doctor-ON2EECFT.js.map} +0 -0
  84. /package/dist/{program-SAEPPSSW.js.map → program-D7QOPCTE.js.map} +0 -0
  85. /package/dist/{promote-FHX4Q62Z.js.map → promote-KKLC2ENK.js.map} +0 -0
  86. /package/dist/{query-WBK3YEPV.js.map → query-JEOWXBWZ.js.map} +0 -0
  87. /package/dist/{registry-T5HSN66G.js.map → registry-6DGUQ5YT.js.map} +0 -0
  88. /package/dist/{request-planner-3LA5RAKG.js.map → request-planner-SXR7HCE7.js.map} +0 -0
  89. /package/dist/{review-candidates-QV66TOCL.js.map → review-candidates-OBAXZ6IM.js.map} +0 -0
  90. /package/dist/{routing-HF4XVD4Y.js.map → routing-GW7LSHRJ.js.map} +0 -0
  91. /package/dist/{schedule-tool-V66FX5XL.js.map → schedule-tool-TX7EPMQZ.js.map} +0 -0
  92. /package/dist/{scheduler-XVMWASQR.js.map → scheduler-4SD7YBW3.js.map} +0 -0
  93. /package/dist/{seat-NQTZUIKH.js.map → seat-4KA3YZEN.js.map} +0 -0
  94. /package/dist/{select-3GVC5RDA.js.map → select-WLYRCSSM.js.map} +0 -0
  95. /package/dist/{set-enabled-SXCE2MZX.js.map → set-enabled-DHSDYIIA.js.map} +0 -0
  96. /package/dist/{tool-23GOQNUW.js.map → tool-OBS4P2BP.js.map} +0 -0
  97. /package/dist/{tool-E6JBENAN.js.map → tool-YKBDZ7K7.js.map} +0 -0
  98. /package/dist/{wiki-VM2RTHVF.js.map → wiki-237HZZNR.js.map} +0 -0
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a as St,b as kt,c as vt,d as xt,e as $t,f as Ct,g as Pt,h as bt,ha as Tt,ia as Mt}from"./chunk-IO74N5DB.js";import"./chunk-NWNVHL57.js";import"./chunk-GTJIKXDB.js";import"./chunk-25RQQ55U.js";import"./chunk-DG5I6PPM.js";import"./chunk-ZVP6GB4G.js";import"./chunk-S2GAEH2F.js";import"./chunk-VZLIBDLH.js";import"./chunk-EKJG63EJ.js";import"./chunk-IOPAWHKW.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-ACFQBLPX.js";import"./chunk-LQE73AZR.js";import"./chunk-2D3RYIDU.js";import"./chunk-3Z5P2CWS.js";import"./chunk-E5OV6RTG.js";import"./chunk-PPUN7YHA.js";import{Z as yt,m as lt,n as ct,o as dt,p as mt,q as pt}from"./chunk-DEMIKEFB.js";import"./chunk-FZ7VHFL5.js";import"./chunk-GLQLCBJS.js";import"./chunk-DP7RTNDM.js";import{a as L}from"./chunk-C245D4BZ.js";import{A as D,B as z,C as V,a as ye,b as we,c as Se,d as Ae,e as Ie,f as Oe,g as Ne,h as He,i as je,j as Ue,k as _e,l as I,m as q,n as Be,o as qe,p as Ye,q as O,r as ze,s as Ve,t as Xe,u as x,v as Y,w as Qe,x as Ze,y as et,z as wt}from"./chunk-MZQQVT3G.js";import{a as B,b as M,c as F}from"./chunk-SFQUP3BP.js";import"./chunk-Y4CYQV7G.js";import"./chunk-LLNPKE7H.js";import"./chunk-SHEUCITK.js";import"./chunk-BEFKOHRC.js";import"./chunk-SZDACK6O.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import{s as ut}from"./chunk-MVLNVMWI.js";import"./chunk-OLUAEBHJ.js";import"./chunk-VWTBHLMX.js";import"./chunk-XHUOWYNY.js";import{a as ht}from"./chunk-76KJXOEV.js";import"./chunk-KA2UIZXG.js";import"./chunk-GQ76J72O.js";import"./chunk-ILEC3IAV.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-WTFNEPJ7.js";import"./chunk-MYVHVJWZ.js";import"./chunk-DWADWDMU.js";import"./chunk-23A5K5UW.js";import"./chunk-QD6IICK7.js";import"./chunk-CECHWYJ2.js";import"./chunk-32BPHJ4I.js";import{f as gt,g as ft}from"./chunk-Q57GZPDA.js";import"./chunk-WPNRDEHW.js";import"./chunk-2GIDVZ4H.js";import{j as it,k as rt,l as at}from"./chunk-HE4PDESB.js";import"./chunk-72SZI2UW.js";import"./chunk-FX3D7YON.js";import"./chunk-FCPTN6NF.js";import"./chunk-QOYAX2FT.js";import{a as ke,b as ve,c as xe,d as $e,e as Ce,f as Pe,g as be,h as Te,i as Me,j as Re,l as Ee,m as Ge,o as T,p as W}from"./chunk-5MUJZODV.js";import{a as m,b as G}from"./chunk-7I7IEX4S.js";import{b as Fe,c as Le,d as A,e as De}from"./chunk-JHCI6XCJ.js";import{a as Ke,b as Je,e as We}from"./chunk-DSYKYZMT.js";import{ca as tt,ea as st,fa as ot,ha as nt}from"./chunk-IA3BC7M3.js";import"./chunk-RJ7DASOU.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";W();G();import{execa as Rt}from"execa";import{existsSync as se,promises as X}from"fs";import S from"path";import ie from"node-fetch";async function Et(o,e){let t=o.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${o}. Expected format: owner/repo`);let s=t[0],i=t[1],n=t[2];try{let a=n?`${s}/${i}/${n}`:`${s}/${i}`;await Rt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${o}`);let r=S.resolve(e,".skills",`${s}_${i}`);if(se(r))return await ne(r,o);let d=S.resolve(e,".skills");return se(d)?await ne(d,o):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Gt(s,i,n,e)}}async function Gt(o,e,t,s){let i=[];try{let n=`https://api.github.com/repos/${o}/${e}/git/trees/main?recursive=1`,a=await ie(n);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let d=(await a.json()).tree.filter(p=>p.type==="blob"&&p.path.endsWith("SKILL.md"));if(t){let p=d.find(f=>f.path.includes(`/${t}/`)||f.path===`${t}/SKILL.md`);if(p){let f=await oe(o,e,p.path,s);f&&i.push(f)}}else for(let p of d){let f=await oe(o,e,p.path,s);f&&i.push(f)}}catch(n){m.error(`Failed to fetch skills from GitHub: ${n.message}`)}return i}async function oe(o,e,t,s){try{let i=`https://raw.githubusercontent.com/${o}/${e}/main/${t}`,n=await ie(i);if(!n.ok)return null;let a=await n.text(),r=A(a);if(r){r.source="remote",r.packageId=`${o}/${e}`;let d=S.dirname(t),p=S.resolve(s,".skills",`${o}_${e}`,d);await X.mkdir(p,{recursive:!0}),await X.writeFile(S.resolve(p,"SKILL.md"),a),r.path=S.resolve(p,"SKILL.md")}return r}catch{return null}}async function ne(o,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:o,deep:5});for(let n of i)try{let a=S.resolve(o,n),r=await X.readFile(a,"utf8"),d=A(r);d&&(d.source="remote",d.path=a,d.packageId=e,t.push(d))}catch{}return t}async function At(o,e,t,s,i){let n=["---",`name: ${o}`,`description: ${e}`];if(s?.length){n.push("tags:");for(let a of s)n.push(` - ${a}`)}if(i?.length){n.push("globs:");for(let a of i)n.push(` - ${a}`)}return n.push("---"),`${n.join(`
1
+ import{a as St,b as kt,c as vt,d as xt,e as $t,f as Ct,g as Pt,h as bt,ha as Tt,ia as Mt}from"./chunk-BLTE6OHO.js";import"./chunk-N7YQ4IAR.js";import"./chunk-GTJIKXDB.js";import"./chunk-UGNXKP6Q.js";import"./chunk-DG5I6PPM.js";import"./chunk-ZVP6GB4G.js";import"./chunk-S2GAEH2F.js";import"./chunk-VZLIBDLH.js";import"./chunk-EKJG63EJ.js";import"./chunk-KU3XT5S2.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import"./chunk-ACFQBLPX.js";import"./chunk-LQE73AZR.js";import"./chunk-2D3RYIDU.js";import"./chunk-3Z5P2CWS.js";import"./chunk-E5OV6RTG.js";import"./chunk-PPUN7YHA.js";import{Z as yt,m as lt,n as ct,o as dt,p as mt,q as pt}from"./chunk-DXOTH6MF.js";import"./chunk-IM7SSJ67.js";import"./chunk-GLQLCBJS.js";import"./chunk-DP7RTNDM.js";import{a as L}from"./chunk-C245D4BZ.js";import{A as D,B as z,C as V,a as ye,b as we,c as Se,d as Ae,e as Ie,f as Oe,g as Ne,h as He,i as je,j as Ue,k as _e,l as I,m as q,n as Be,o as qe,p as Ye,q as O,r as ze,s as Ve,t as Xe,u as x,v as Y,w as Qe,x as Ze,y as et,z as wt}from"./chunk-EB3B2FRY.js";import{a as B,b as M,c as F}from"./chunk-SFQUP3BP.js";import"./chunk-Y4CYQV7G.js";import"./chunk-LLNPKE7H.js";import"./chunk-SHEUCITK.js";import"./chunk-UGM56ULD.js";import"./chunk-SZDACK6O.js";import"./chunk-76Z4VHDX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import{s as ut}from"./chunk-4FSU5XTD.js";import"./chunk-D6EX6VA5.js";import"./chunk-VWTBHLMX.js";import"./chunk-J5LOMJ2Y.js";import{a as ht}from"./chunk-E4RQHTNB.js";import"./chunk-KA2UIZXG.js";import"./chunk-GQ76J72O.js";import"./chunk-ILEC3IAV.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-OREGWHKS.js";import"./chunk-MYVHVJWZ.js";import"./chunk-DWADWDMU.js";import"./chunk-23A5K5UW.js";import"./chunk-QD6IICK7.js";import"./chunk-CECHWYJ2.js";import"./chunk-QFIIZIYX.js";import{f as gt,g as ft}from"./chunk-ZE7P7L2L.js";import"./chunk-WPNRDEHW.js";import"./chunk-2GIDVZ4H.js";import{j as it,k as rt,l as at}from"./chunk-BTHH5ENX.js";import"./chunk-72SZI2UW.js";import"./chunk-FX3D7YON.js";import"./chunk-FCPTN6NF.js";import"./chunk-QOYAX2FT.js";import{a as ke,b as ve,c as xe,d as $e,e as Ce,f as Pe,g as be,h as Te,i as Me,j as Re,l as Ee,m as Ge,o as T,p as W}from"./chunk-5MUJZODV.js";import{a as m,b as G}from"./chunk-7I7IEX4S.js";import{b as Fe,c as Le,d as A,e as De}from"./chunk-JHCI6XCJ.js";import{a as Ke,b as Je,e as We}from"./chunk-DSYKYZMT.js";import{ca as tt,ea as st,fa as ot,ha as nt}from"./chunk-3MMSS5JF.js";import"./chunk-RJ7DASOU.js";import"./chunk-BRK6M6LA.js";import"./chunk-2QNT5JDS.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";W();G();import{execa as Rt}from"execa";import{existsSync as se,promises as X}from"fs";import S from"path";import ie from"node-fetch";async function Et(o,e){let t=o.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${o}. Expected format: owner/repo`);let s=t[0],i=t[1],n=t[2];try{let a=n?`${s}/${i}/${n}`:`${s}/${i}`;await Rt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${o}`);let r=S.resolve(e,".skills",`${s}_${i}`);if(se(r))return await ne(r,o);let d=S.resolve(e,".skills");return se(d)?await ne(d,o):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Gt(s,i,n,e)}}async function Gt(o,e,t,s){let i=[];try{let n=`https://api.github.com/repos/${o}/${e}/git/trees/main?recursive=1`,a=await ie(n);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let d=(await a.json()).tree.filter(p=>p.type==="blob"&&p.path.endsWith("SKILL.md"));if(t){let p=d.find(f=>f.path.includes(`/${t}/`)||f.path===`${t}/SKILL.md`);if(p){let f=await oe(o,e,p.path,s);f&&i.push(f)}}else for(let p of d){let f=await oe(o,e,p.path,s);f&&i.push(f)}}catch(n){m.error(`Failed to fetch skills from GitHub: ${n.message}`)}return i}async function oe(o,e,t,s){try{let i=`https://raw.githubusercontent.com/${o}/${e}/main/${t}`,n=await ie(i);if(!n.ok)return null;let a=await n.text(),r=A(a);if(r){r.source="remote",r.packageId=`${o}/${e}`;let d=S.dirname(t),p=S.resolve(s,".skills",`${o}_${e}`,d);await X.mkdir(p,{recursive:!0}),await X.writeFile(S.resolve(p,"SKILL.md"),a),r.path=S.resolve(p,"SKILL.md")}return r}catch{return null}}async function ne(o,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:o,deep:5});for(let n of i)try{let a=S.resolve(o,n),r=await X.readFile(a,"utf8"),d=A(r);d&&(d.source="remote",d.path=a,d.packageId=e,t.push(d))}catch{}return t}async function At(o,e,t,s,i){let n=["---",`name: ${o}`,`description: ${e}`];if(s?.length){n.push("tags:");for(let a of s)n.push(` - ${a}`)}if(i?.length){n.push("globs:");for(let a of i)n.push(` - ${a}`)}return n.push("---"),`${n.join(`
2
2
  `)}
3
3
 
4
4
  ${t}`}async function It(o){let{loadLocalSkills:e}=await import("./loader-YFVSSYSL.js");return e(o)}async function Ot(o,e,t,s,i){let a=[{role:"system",content:`You are a skill author for the Agent Skills ecosystem (skills.sh).