@icarusmx/creta 1.4.18 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 1780.5px; background-color: white;" viewBox="-50 -10 1780.5 2156" role="graphics-document document" aria-roledescription="sequence"><g><rect x="1441" y="2070" fill="#eaeaea" stroke="#666" width="150" height="65" name="Data" rx="3" ry="3" class="actor actor-bottom"/><text x="1516" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1516" dy="-8">command-help/</tspan></text><text x="1516" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1516" dy="8">Data Store</tspan></text></g><g><rect x="1241" y="2070" fill="#eaeaea" stroke="#666" width="150" height="65" name="Formatter" rx="3" ry="3" class="actor actor-bottom"/><text x="1316" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1316" dy="-8">CommandHelp</tspan></text><text x="1316" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1316" dy="8">Formatter</tspan></text></g><g><rect x="1039" y="2070" fill="#eaeaea" stroke="#666" width="150" height="65" name="Help" rx="3" ry="3" class="actor actor-bottom"/><text x="1114" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1114" dy="-8">Command Help</tspan></text><text x="1114" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1114" dy="8">System</tspan></text></g><g><rect x="839" y="2070" fill="#eaeaea" stroke="#666" width="150" height="65" name="Detector" rx="3" ry="3" class="actor actor-bottom"/><text x="914" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="914" dy="0">Command Detector</tspan></text></g><g><rect x="533" y="2070" fill="#eaeaea" stroke="#666" width="150" height="65" name="Router" rx="3" ry="3" class="actor actor-bottom"/><text x="608" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="608" dy="-8">bin/creta.js</tspan></text><text x="608" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="608" dy="8">(Router)</tspan></text></g><g><rect x="282" y="2070" fill="#eaeaea" stroke="#666" width="150" height="65" name="Terminal" rx="3" ry="3" class="actor actor-bottom"/><text x="357" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="357" dy="0">Terminal</tspan></text></g><g><rect x="0" y="2070" fill="#eaeaea" stroke="#666" width="150" height="65" name="User" rx="3" ry="3" class="actor actor-bottom"/><text x="75" y="2102.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">User</tspan></text></g><g><line id="actor6" x1="1516" y1="65" x2="1516" y2="2070" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Data"/><g id="root-6"><rect x="1441" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="Data" rx="3" ry="3" class="actor actor-top"/><text x="1516" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1516" dy="-8">command-help/</tspan></text><text x="1516" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1516" dy="8">Data Store</tspan></text></g></g><g><line id="actor5" x1="1316" y1="65" x2="1316" y2="2070" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Formatter"/><g id="root-5"><rect x="1241" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="Formatter" rx="3" ry="3" class="actor actor-top"/><text x="1316" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1316" dy="-8">CommandHelp</tspan></text><text x="1316" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1316" dy="8">Formatter</tspan></text></g></g><g><line id="actor4" x1="1114" y1="65" x2="1114" y2="2070" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Help"/><g id="root-4"><rect x="1039" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="Help" rx="3" ry="3" class="actor actor-top"/><text x="1114" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1114" dy="-8">Command Help</tspan></text><text x="1114" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="1114" dy="8">System</tspan></text></g></g><g><line id="actor3" x1="914" y1="65" x2="914" y2="2070" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Detector"/><g id="root-3"><rect x="839" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="Detector" rx="3" ry="3" class="actor actor-top"/><text x="914" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="914" dy="0">Command Detector</tspan></text></g></g><g><line id="actor2" x1="608" y1="65" x2="608" y2="2070" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Router"/><g id="root-2"><rect x="533" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="Router" rx="3" ry="3" class="actor actor-top"/><text x="608" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="608" dy="-8">bin/creta.js</tspan></text><text x="608" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="608" dy="8">(Router)</tspan></text></g></g><g><line id="actor1" x1="357" y1="65" x2="357" y2="2070" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="Terminal"/><g id="root-1"><rect x="282" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="Terminal" rx="3" ry="3" class="actor actor-top"/><text x="357" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="357" dy="0">Terminal</tspan></text></g></g><g><line id="actor0" x1="75" y1="65" x2="75" y2="2070" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="User"/><g id="root-0"><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="User" rx="3" ry="3" class="actor actor-top"/><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">User</tspan></text></g></g><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#333333;stroke:#333333;}#my-svg .marker.cross{stroke:#333333;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#my-svg text.actor&gt;tspan{fill:black;stroke:none;}#my-svg .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#my-svg .innerArc{stroke-width:1.5;stroke-dasharray:none;}#my-svg .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#my-svg .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#my-svg #arrowhead path{fill:#333;stroke:#333;}#my-svg .sequenceNumber{fill:white;}#my-svg #sequencenumber{fill:#333;}#my-svg #crosshead path{fill:#333;stroke:#333;}#my-svg .messageText{fill:#333;stroke:none;}#my-svg .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#my-svg .labelText,#my-svg .labelText&gt;tspan{fill:black;stroke:none;}#my-svg .loopText,#my-svg .loopText&gt;tspan{fill:black;stroke:none;}#my-svg .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#my-svg .note{stroke:#aaaa33;fill:#fff5ad;}#my-svg .noteText,#my-svg .noteText&gt;tspan{fill:black;stroke:none;}#my-svg .activation0{fill:#f4f4f4;stroke:#666;}#my-svg .activation1{fill:#f4f4f4;stroke:#666;}#my-svg .activation2{fill:#f4f4f4;stroke:#666;}#my-svg .actorPopupMenu{position:absolute;}#my-svg .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#my-svg .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#my-svg .actor-man circle,#my-svg line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g/><defs><symbol id="computer" width="24" height="24"><path transform="scale(.5)" d="M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"/></symbol></defs><defs><symbol id="database" fill-rule="evenodd" clip-rule="evenodd"><path transform="scale(.5)" d="M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"/></symbol></defs><defs><symbol id="clock" width="24" height="24"><path transform="scale(.5)" d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"/></symbol></defs><defs><marker id="arrowhead" refX="7.9" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M -1 0 L 10 5 L 0 10 z"/></marker></defs><defs><marker id="crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="4" refY="4.5"><path fill="none" stroke="#000000" stroke-width="1pt" d="M 1,2 L 6,7 M 6,2 L 1,7" style="stroke-dasharray: 0, 0;"/></marker></defs><defs><marker id="filled-head" refX="15.5" refY="7" markerWidth="20" markerHeight="28" orient="auto"><path d="M 18,7 L9,13 L14,7 L9,1 Z"/></marker></defs><defs><marker id="sequencenumber" refX="15" refY="15" markerWidth="60" markerHeight="40" orient="auto"><circle cx="15" cy="15" r="6"/></marker></defs><g><rect x="1233" y="768" fill="#EDF2AE" stroke="#666" width="166" height="96" class="note"/><text x="1316" y="773" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="1316">- Bold command name</tspan></text><text x="1316" y="792" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="1316">- Colored sections</tspan></text><text x="1316" y="811" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="1316">- Formatted examples</tspan></text><text x="1316" y="830" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="1316">- Clean spacing</tspan></text></g><g><rect x="50" y="1006" fill="#EDF2AE" stroke="#666" width="332" height="308" class="note"/><text x="216" y="1011" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">User sees:</tspan></text><text x="216" y="1030" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">━━━━━━━━━━━━━━━━</tspan></text><text x="216" y="1049" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">ls - Lista archivos</tspan></text><text x="216" y="1068" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">​</tspan></text><text x="216" y="1087" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">USO: ls [opciones]</tspan></text><text x="216" y="1106" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">​</tspan></text><text x="216" y="1125" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">OPCIONES:</tspan></text><text x="216" y="1144" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216"> -l Formato largo</tspan></text><text x="216" y="1163" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216"> -a Archivos ocultos</tspan></text><text x="216" y="1182" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">​</tspan></text><text x="216" y="1201" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">EJEMPLOS:</tspan></text><text x="216" y="1220" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216"> $ ls -la</tspan></text><text x="216" y="1239" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216"> Ver todo incluyendo ocultos</tspan></text><text x="216" y="1258" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">​</tspan></text><text x="216" y="1277" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="216">💡 Aprende más: Primeros comandos</tspan></text></g><g><rect x="530" y="1531" fill="#EDF2AE" stroke="#666" width="156" height="58" class="note"/><text x="608" y="1536" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="608">Falls back to existing</tspan></text><text x="608" y="1555" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="noteText" dy="1em" style="font-size: 16px; font-weight: 400;"><tspan x="608">menu/project system</tspan></text></g><g><line x1="505.5" y1="1324" x2="925" y2="1324" class="loopLine"/><line x1="925" y1="1324" x2="925" y2="1599" class="loopLine"/><line x1="505.5" y1="1599" x2="925" y2="1599" class="loopLine"/><line x1="505.5" y1="1324" x2="505.5" y2="1599" class="loopLine"/><polygon points="505.5,1324 555.5,1324 555.5,1337 547.1,1344 505.5,1344" class="labelBox"/><text x="531" y="1337" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="labelText" style="font-size: 16px; font-weight: 400;">alt</text><text x="740.25" y="1342" text-anchor="middle" class="loopText" style="font-size: 16px; font-weight: 400;"><tspan x="740.25">[Command not found]</tspan></text></g><g><line x1="64" y1="1609" x2="1527" y2="1609" class="loopLine"/><line x1="1527" y1="1609" x2="1527" y2="2050" class="loopLine"/><line x1="64" y1="2050" x2="1527" y2="2050" class="loopLine"/><line x1="64" y1="1609" x2="64" y2="2050" class="loopLine"/><polygon points="64,1609 114,1609 114,1622 105.6,1629 64,1629" class="labelBox"/><text x="89" y="1622" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="labelText" style="font-size: 16px; font-weight: 400;">alt</text><text x="820.5" y="1627" text-anchor="middle" class="loopText" style="font-size: 16px; font-weight: 400;"><tspan x="820.5">[Git subcommand]</tspan></text></g><text x="215" y="80" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">creta ls</text><line x1="76" y1="109" x2="353" y2="109" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="481" y="124" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">process.argv = ['ls']</text><line x1="358" y1="153" x2="604" y2="153" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="760" y="168" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">isCommandHelpRequest('ls')</text><line x1="609" y1="197" x2="910" y2="197" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="915" y="212" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Check against known commands</text><path d="M 915,241 C 975,231 975,271 915,261" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="763" y="286" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">true</text><line x1="913" y1="315" x2="612" y2="315" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="860" y="330" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">showCommandHelp('ls')</text><line x1="609" y1="359" x2="1110" y2="359" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="1314" y="374" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">loadHelpContent('ls')</text><line x1="1115" y1="403" x2="1512" y2="403" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="1517" y="418" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Read lib/data/command-help/basic-commands/ls.js</text><path d="M 1517,447 C 1577,437 1577,477 1517,467" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="1317" y="492" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">{</text><text x="1317" y="511" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;"> command: 'ls',</text><text x="1317" y="530" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;"> description: '...',</text><text x="1317" y="549" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;"> usage: '...',</text><text x="1317" y="568" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;"> commonOptions: [...],</text><text x="1317" y="587" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;"> examples: [...],</text><text x="1317" y="606" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;"> tips: '...'</text><text x="1317" y="625" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">}</text><line x1="1515" y1="640" x2="1118" y2="640" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="1214" y="655" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">format(helpContent)</text><line x1="1115" y1="684" x2="1312" y2="684" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="1317" y="699" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Build pretty output with chalk</text><path d="M 1317,728 C 1377,718 1377,758 1317,748" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="1217" y="879" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Formatted string</text><line x1="1315" y1="908" x2="1118" y2="908" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="737" y="923" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Display help</text><line x1="1113" y1="952" x2="361" y2="952" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="218" y="967" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Shows formatted help in Spanish</text><line x1="356" y1="996" x2="79" y2="996" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="760" y="1374" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">isCommandHelpRequest('unknown')</text><line x1="609" y1="1403" x2="910" y2="1403" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="763" y="1418" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">false</text><line x1="913" y1="1447" x2="612" y2="1447" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="609" y="1462" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Continue to main menu logic</text><path d="M 609,1491 C 669,1481 669,1521 609,1511" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="215" y="1659" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">creta git status</text><line x1="76" y1="1688" x2="353" y2="1688" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="481" y="1703" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">process.argv = ['git', 'status']</text><line x1="358" y1="1732" x2="604" y2="1732" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="760" y="1747" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">isCommandHelpRequest('git status')</text><line x1="609" y1="1776" x2="910" y2="1776" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="763" y="1791" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">true</text><line x1="913" y1="1820" x2="612" y2="1820" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="860" y="1835" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">showCommandHelp('git status')</text><line x1="609" y1="1864" x2="1110" y2="1864" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="1314" y="1879" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">loadHelpContent('git/status')</text><line x1="1115" y1="1908" x2="1512" y2="1908" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="1317" y="1923" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Git-specific help content</text><line x1="1515" y1="1952" x2="1118" y2="1952" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/><text x="1214" y="1967" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">format(helpContent)</text><line x1="1115" y1="1996" x2="1312" y2="1996" class="messageLine0" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="fill: none;"/><text x="838" y="2011" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">Formatted git status help</text><line x1="1315" y1="2040" x2="361" y2="2040" class="messageLine1" stroke-width="2" stroke="none" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/></svg>
@@ -0,0 +1,51 @@
1
+ sequenceDiagram
2
+ participant User
3
+ participant Terminal
4
+ participant Router as bin/creta.js<br/>(Router)
5
+ participant Detector as Command Detector
6
+ participant Help as Command Help<br/>System
7
+ participant Formatter as CommandHelp<br/>Formatter
8
+ participant Data as command-help/<br/>Data Store
9
+
10
+ User->>Terminal: creta ls
11
+ Terminal->>Router: process.argv = ['ls']
12
+
13
+ Router->>Detector: isCommandHelpRequest('ls')
14
+ Detector->>Detector: Check against known commands
15
+ Detector-->>Router: true
16
+
17
+ Router->>Help: showCommandHelp('ls')
18
+
19
+ Help->>Data: loadHelpContent('ls')
20
+ Data->>Data: Read lib/data/command-help/basic-commands/ls.js
21
+ Data-->>Help: {<br/> command: 'ls',<br/> description: '...',<br/> usage: '...',<br/> commonOptions: [...],<br/> examples: [...],<br/> tips: '...'<br/>}
22
+
23
+ Help->>Formatter: format(helpContent)
24
+
25
+ Formatter->>Formatter: Build pretty output with chalk
26
+ Note over Formatter: - Bold command name<br/>- Colored sections<br/>- Formatted examples<br/>- Clean spacing
27
+
28
+ Formatter-->>Help: Formatted string
29
+ Help-->>Terminal: Display help
30
+ Terminal-->>User: Shows formatted help in Spanish
31
+
32
+ Note over User,Terminal: User sees:<br/>━━━━━━━━━━━━━━━━<br/>ls - Lista archivos<br/><br/>USO: ls [opciones]<br/><br/>OPCIONES:<br/> -l Formato largo<br/> -a Archivos ocultos<br/><br/>EJEMPLOS:<br/> $ ls -la<br/> Ver todo incluyendo ocultos<br/><br/>💡 Aprende más: Primeros comandos
33
+
34
+ alt Command not found
35
+ Router->>Detector: isCommandHelpRequest('unknown')
36
+ Detector-->>Router: false
37
+ Router->>Router: Continue to main menu logic
38
+ Note over Router: Falls back to existing<br/>menu/project system
39
+ end
40
+
41
+ alt Git subcommand
42
+ User->>Terminal: creta git status
43
+ Terminal->>Router: process.argv = ['git', 'status']
44
+ Router->>Detector: isCommandHelpRequest('git status')
45
+ Detector-->>Router: true
46
+ Router->>Help: showCommandHelp('git status')
47
+ Help->>Data: loadHelpContent('git/status')
48
+ Data-->>Help: Git-specific help content
49
+ Help->>Formatter: format(helpContent)
50
+ Formatter-->>Terminal: Formatted git status help
51
+ end
@@ -0,0 +1,78 @@
1
+ flowchart TD
2
+ Start([Student joins Icarus]) --> Discord[Join Discord Server]
3
+ Discord --> Learn[Learn basic terminal commands]
4
+ Learn --> Install[Install Node.js]
5
+ Install --> RunCreta[npx @icarusmx/creta]
6
+
7
+ RunCreta --> Menu{Main Menu}
8
+ Menu -->|Sintaxis| SintaxisLesson[Choose Lesson]
9
+ Menu -->|Enunciados| EnunciadoLesson[Choose OOP Lesson]
10
+ Menu -->|Proyectos| Portfolio[Generate Portfolio]
11
+
12
+ SintaxisLesson --> Interactive[Interactive Practice]
13
+ Interactive --> Sandbox[Execute real commands in sandbox]
14
+ Sandbox --> Validate{Command correct?}
15
+ Validate -->|No| Error[Show error: 'Ese no es el comando']
16
+ Error --> Sandbox
17
+ Validate -->|Yes| Execute[Run command, show output]
18
+ Execute --> Explain[Show explanation]
19
+ Explain --> NextStep{More steps?}
20
+ NextStep -->|Yes| Sandbox
21
+ NextStep -->|No| Complete[Lesson Complete]
22
+
23
+ EnunciadoLesson --> ReadConcept[Read OOP Concept]
24
+ ReadConcept --> Examples[See Code Examples]
25
+ Examples --> Understand[Build Understanding]
26
+ Understand --> CompleteConcept[Concept Complete]
27
+
28
+ Complete --> GetHash[Receive Hash]
29
+ CompleteConcept --> GetHash
30
+
31
+ GetHash --> BackDiscord[Return to Discord]
32
+ BackDiscord --> Redeem[/redeem hash]
33
+ Redeem --> YouTube[Watch Hidden Video]
34
+ YouTube --> LearnMore[Learn Advanced Concepts]
35
+ LearnMore --> RunCreta
36
+
37
+ Portfolio --> ChooseLevel{Choose Level}
38
+ ChooseLevel -->|0| Level0[Full Challenge]
39
+ ChooseLevel -->|1| Level1[Navbar Done]
40
+ ChooseLevel -->|2| Level2[Navbar + Hero Done]
41
+ ChooseLevel -->|3| Level3[Complete Solution]
42
+
43
+ Level0 --> Build[Build Portfolio]
44
+ Level1 --> Build
45
+ Level2 --> Build
46
+ Level3 --> Build
47
+
48
+ Build --> Deploy[Deploy Project]
49
+ Deploy --> Share[Share with Community]
50
+
51
+ Share --> Graduate{Graduated?}
52
+ Graduate -->|Keep Learning| RunCreta
53
+ Graduate -->|Junior Dev| Phase2Start[Start using creta ls]
54
+
55
+ Phase2Start --> DevWork[Working on projects]
56
+ DevWork --> NeedHelp{Need command help?}
57
+ NeedHelp -->|Yes| CretaCmd[creta ls]
58
+ CretaCmd --> QuickRef[See quick reference]
59
+ QuickRef --> BackToWork[Continue coding]
60
+ BackToWork --> DevWork
61
+
62
+ DevWork --> TeamReady{Join professional team?}
63
+ TeamReady -->|Yes| Phase3Start[creta login]
64
+ Phase3Start --> AuthTeam[Authenticate & Sync]
65
+ AuthTeam --> ProWork[Professional Workflow]
66
+ ProWork --> CheckReq[creta requirement]
67
+ CheckReq --> SeeTicket[See assigned ticket]
68
+ SeeTicket --> WorkTicket[Work on ticket]
69
+ WorkTicket --> Submit[creta submit]
70
+ Submit --> ProWork
71
+
72
+ style Start fill:#86efac
73
+ style GetHash fill:#fde047
74
+ style YouTube fill:#f87171
75
+ style Phase2Start fill:#fbbf24
76
+ style Phase3Start fill:#60a5fa
77
+ style Complete fill:#4ade80
78
+ style CompleteConcept fill:#4ade80
package/lib/cli/index.js CHANGED
@@ -46,6 +46,11 @@ async function customizeTerminal() {
46
46
  await customizer.customize()
47
47
  }
48
48
 
49
+ async function revertTerminal() {
50
+ const customizer = new TerminalCustomizer()
51
+ await customizer.revert()
52
+ }
53
+
49
54
  const COMMANDS = new Map([
50
55
  ['enunciados', () => executeEnunciados()],
51
56
  ['sintaxis', () => executeSintaxis()],
@@ -54,6 +59,7 @@ const COMMANDS = new Map([
54
59
  ['code', () => runCodeSession()],
55
60
  ['reset', () => resetUserState()],
56
61
  ['icarus-terminal', () => customizeTerminal()],
62
+ ['revert-terminal', () => revertTerminal()],
57
63
  ['help', () => showHelp()],
58
64
  ['ayuda', () => showHelp()]
59
65
  ])
@@ -2,16 +2,75 @@ import fs from 'fs';
2
2
  import path from 'path';
3
3
  import os from 'os';
4
4
  import { execSync } from 'child_process';
5
+ import { UserState } from '../utils/user-state.js';
5
6
 
6
7
  class TerminalCustomizer {
7
8
  constructor() {
8
9
  this.homeDir = os.homedir();
9
10
  this.zshrcPath = path.join(this.homeDir, '.zshrc');
10
11
  this.icarusZshPath = path.join(this.homeDir, '.icarus-zsh');
12
+ this.tips = this.initializeTips();
13
+ }
14
+
15
+ initializeTips() {
16
+ return {
17
+ 'terminal-basico': [
18
+ '💡 Usa "cd -" para volver al directorio anterior',
19
+ '💡 "pwd" muestra tu ubicación actual en el sistema',
20
+ '💡 "ls -la" muestra archivos ocultos y permisos',
21
+ '💡 Usa Tab para autocompletar nombres de archivos'
22
+ ],
23
+ 'git-basico': [
24
+ '💡 Siempre usa "git status" antes de hacer commit',
25
+ '💡 "git log --oneline" muestra el historial compacto',
26
+ '💡 "git diff" te muestra los cambios antes de commit',
27
+ '💡 Commits frecuentes = mejor historial'
28
+ ],
29
+ 'piping-redireccion': [
30
+ '💡 El pipe "|" conecta la salida de un comando con otro',
31
+ '💡 ">" sobrescribe archivos, ">>" agrega al final',
32
+ '💡 "grep" es tu mejor amigo para buscar en texto'
33
+ ],
34
+ 'bash-scripts': [
35
+ '💡 Usa "chmod +x script.sh" para hacer ejecutable tu script',
36
+ '💡 Siempre empieza con "#!/bin/bash" en la primera línea',
37
+ '💡 "$?" te dice el código de salida del último comando'
38
+ ],
39
+ 'portafolio': [
40
+ '💡 "npm run dev" para ver cambios en tiempo real',
41
+ '💡 Tailwind CSS usa clases utilitarias, no CSS custom',
42
+ '💡 Usa "md:" para breakpoints responsive en Tailwind',
43
+ '💡 SvelteKit recarga automáticamente al guardar cambios'
44
+ ],
45
+ 'general': [
46
+ '💡 Lee los errores completos, suelen decirte qué hacer',
47
+ '💡 Google es tu amigo, pero StackOverflow más',
48
+ '💡 Commits pequeños y frecuentes > commits gigantes',
49
+ '💡 Comenta tu código como si fueras a olvidarlo mañana'
50
+ ]
51
+ };
52
+ }
53
+
54
+ getContextualTip() {
55
+ const userState = UserState.get();
56
+ const recentLessons = userState.lessonsCompleted.slice(-3);
57
+
58
+ // Try to get a tip from recently completed lessons
59
+ for (const lesson of recentLessons.reverse()) {
60
+ const lessonId = typeof lesson === 'object' ? lesson.id : lesson;
61
+ if (this.tips[lessonId] && this.tips[lessonId].length > 0) {
62
+ const tips = this.tips[lessonId];
63
+ return tips[Math.floor(Math.random() * tips.length)];
64
+ }
65
+ }
66
+
67
+ // Fallback to general tips
68
+ const generalTips = this.tips.general;
69
+ return generalTips[Math.floor(Math.random() * generalTips.length)];
11
70
  }
12
71
 
13
72
  async customize() {
14
- console.log('\n🏛️ Configurando tu terminal Icarus...\n');
73
+ console.log('\n🏛️ Configurando tu terminal Creta...\n');
15
74
 
16
75
  try {
17
76
  // Backup existing .zshrc if it exists
@@ -33,7 +92,7 @@ class TerminalCustomizer {
33
92
  // Apply changes instantly
34
93
  this.applyChanges();
35
94
 
36
- console.log('\n🎉 ¡Terminal Icarus configurado exitosamente!');
95
+ console.log('\n🎉 ¡Terminal Creta configurado exitosamente!');
37
96
  console.log('💡 Reinicia tu terminal o ejecuta: source ~/.zshrc\n');
38
97
 
39
98
  } catch (error) {
@@ -43,34 +102,76 @@ class TerminalCustomizer {
43
102
  }
44
103
 
45
104
  createIcarusZsh() {
105
+ const tip = this.getContextualTip();
106
+ const roadmapHint = this.getRoadmapHint();
107
+
46
108
  // Use template literal with escaped $ to prevent Node.js interpolation
47
109
  const config = `# ========================================
48
- # 🏛️ Icarus Terminal Configuration
110
+ # 🏛️ Creta Terminal Configuration
49
111
  # ========================================
50
112
 
51
- # Custom Icarus prompt with color #007acc
113
+ # Custom prompt with color #007acc
52
114
  autoload -U colors && colors
115
+ setopt PROMPT_SUBST
53
116
 
54
117
  # Prompt color codes
55
- ICARUS_BLUE='%F{39}'
118
+ CRETA_BLUE='%F{39}'
56
119
  RESET='%f'
120
+ GIT_BRANCH_COLOR='%F{245}' # Gray for branch
121
+
122
+ # Git branch detection function
123
+ function git_branch_name() {
124
+ git symbolic-ref --short HEAD 2>/dev/null || echo ""
125
+ }
126
+
127
+ function git_prompt_info() {
128
+ local branch=\$(git_branch_name)
129
+ if [[ -n "\$branch" ]]; then
130
+ echo " | \${branch}"
131
+ fi
132
+ }
133
+
134
+ # Custom prompt: [🏛️ creta | branch] ~/path $
135
+ PROMPT="\${CRETA_BLUE}[🏛️ creta\${GIT_BRANCH_COLOR}\$(git_prompt_info)\${CRETA_BLUE}]\${RESET} %~ $ "
136
+
137
+ # Welcome message function
138
+ function creta_welcome() {
139
+ print ""
140
+ print -P "\${CRETA_BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${RESET}"
141
+ print -P "\${CRETA_BLUE} 🏛️ Bienvenido a Creta Terminal\${RESET}"
142
+ print -P "\${CRETA_BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${RESET}"
143
+ print ""
57
144
 
58
- # Custom prompt: [🏛️ icarus] ~/path $
59
- PROMPT="\${ICARUS_BLUE}[🏛️ icarus]\${RESET} %~ $ "
145
+ # Show contextual tip
146
+ echo "${tip.replace(/"/g, '\\"')}"
147
+
148
+ # Show roadmap hint if available
149
+ if [[ -f "roadmap.txt" ]]; then
150
+ local next_item=\$(grep -v "^#" roadmap.txt | head -n 1)
151
+ if [[ -n "\$next_item" ]]; then
152
+ echo ""
153
+ echo "📋 Siguiente en roadmap: \$next_item"
154
+ fi
155
+ fi
156
+
157
+ print ""
158
+ }
60
159
 
61
- # Welcome message using print -P (interprets prompt escapes)
62
- print ""
63
- print -P "\${ICARUS_BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${RESET}"
64
- print -P "\${ICARUS_BLUE} 🏛️ Bienvenido a Icarus Terminal\${RESET}"
65
- print -P "\${ICARUS_BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\${RESET}"
66
- print ""
160
+ # Show welcome message
161
+ creta_welcome
67
162
  `;
68
163
 
69
164
  fs.writeFileSync(this.icarusZshPath, config, 'utf8');
70
165
  }
71
166
 
167
+ getRoadmapHint() {
168
+ // This is a placeholder - actual parsing happens in the shell script
169
+ // We could potentially read roadmap.txt here if we want to customize the message
170
+ return null;
171
+ }
172
+
72
173
  updateZshrc() {
73
- const sourceLine = '\n# Source Icarus terminal configuration\n[ -f ~/.icarus-zsh ] && source ~/.icarus-zsh\n';
174
+ const sourceLine = '\n# Source Creta terminal configuration\n[ -f ~/.icarus-zsh ] && source ~/.icarus-zsh\n';
74
175
 
75
176
  // Create .zshrc if it doesn't exist
76
177
  if (!fs.existsSync(this.zshrcPath)) {
@@ -81,7 +182,7 @@ print ""
81
182
  // Check if already sourced
82
183
  const currentContent = fs.readFileSync(this.zshrcPath, 'utf8');
83
184
  if (currentContent.includes('source ~/.icarus-zsh') || currentContent.includes('. ~/.icarus-zsh')) {
84
- console.log('⚠️ Icarus ya estaba configurado en .zshrc (actualizando)');
185
+ console.log('⚠️ Creta ya estaba configurado en .zshrc (actualizando)');
85
186
  return;
86
187
  }
87
188
 
@@ -99,6 +200,76 @@ print ""
99
200
  // User can manually source or restart terminal
100
201
  }
101
202
  }
203
+
204
+ async revert() {
205
+ console.log('\n🔄 Revirtiendo configuración de Creta Terminal...\n');
206
+
207
+ try {
208
+ let changesMade = false;
209
+
210
+ // Remove ~/.icarus-zsh if it exists
211
+ if (fs.existsSync(this.icarusZshPath)) {
212
+ fs.unlinkSync(this.icarusZshPath);
213
+ console.log('✅ Archivo ~/.icarus-zsh eliminado');
214
+ changesMade = true;
215
+ }
216
+
217
+ // Remove source line from .zshrc
218
+ if (fs.existsSync(this.zshrcPath)) {
219
+ const currentContent = fs.readFileSync(this.zshrcPath, 'utf8');
220
+
221
+ if (currentContent.includes('source ~/.icarus-zsh') || currentContent.includes('. ~/.icarus-zsh')) {
222
+ // Remove the entire Creta block (comment + source line)
223
+ const cleanedContent = currentContent
224
+ .replace(/\n# Source Creta terminal configuration\n\[ -f ~\/\.icarus-zsh \] && source ~\/\.icarus-zsh\n/g, '')
225
+ .replace(/\n# Source Icarus terminal configuration\n\[ -f ~\/\.icarus-zsh \] && source ~\/\.icarus-zsh\n/g, '');
226
+
227
+ fs.writeFileSync(this.zshrcPath, cleanedContent, 'utf8');
228
+ console.log('✅ Configuración eliminada de ~/.zshrc');
229
+ changesMade = true;
230
+ }
231
+ }
232
+
233
+ if (!changesMade) {
234
+ console.log('⚠️ No se encontró configuración de Creta para revertir');
235
+ return;
236
+ }
237
+
238
+ // Show available backups
239
+ this.showBackups();
240
+
241
+ console.log('\n🎉 ¡Configuración revertida exitosamente!');
242
+ console.log('💡 Reinicia tu terminal o ejecuta: source ~/.zshrc\n');
243
+
244
+ } catch (error) {
245
+ console.error('❌ Error al revertir configuración:', error.message);
246
+ throw error;
247
+ }
248
+ }
249
+
250
+ showBackups() {
251
+ try {
252
+ const backupFiles = fs.readdirSync(this.homeDir)
253
+ .filter(file => file.startsWith('.zshrc.backup.'))
254
+ .sort()
255
+ .reverse()
256
+ .slice(0, 5); // Show last 5 backups
257
+
258
+ if (backupFiles.length > 0) {
259
+ console.log('\n📦 Backups disponibles (últimos 5):');
260
+ backupFiles.forEach((file, index) => {
261
+ const filepath = path.join(this.homeDir, file);
262
+ const stats = fs.statSync(filepath);
263
+ const date = stats.mtime.toLocaleString('es-MX');
264
+ console.log(` ${index + 1}. ${file} (${date})`);
265
+ });
266
+ console.log('\n💡 Para restaurar un backup manualmente:');
267
+ console.log(' cp ~/.zshrc.backup.TIMESTAMP ~/.zshrc');
268
+ }
269
+ } catch (error) {
270
+ // Silent fail - backups are optional
271
+ }
272
+ }
102
273
  }
103
274
 
104
275
  export default TerminalCustomizer;
@@ -0,0 +1,47 @@
1
+ export const cd = {
2
+ command: 'cd',
3
+ description: 'Cambia el directorio actual (Change Directory)',
4
+ usage: 'cd [directorio]',
5
+ commonOptions: [
6
+ {
7
+ flag: '..',
8
+ description: 'Sube un nivel (directorio padre)'
9
+ },
10
+ {
11
+ flag: '~',
12
+ description: 'Va a tu directorio home (/Users/tunombre)'
13
+ },
14
+ {
15
+ flag: '-',
16
+ description: 'Regresa al directorio anterior'
17
+ }
18
+ ],
19
+ examples: [
20
+ {
21
+ command: 'cd Documents',
22
+ description: 'Entrar a la carpeta Documents'
23
+ },
24
+ {
25
+ command: 'cd ..',
26
+ description: 'Subir un nivel (salir de la carpeta actual)'
27
+ },
28
+ {
29
+ command: 'cd ~',
30
+ description: 'Ir a tu directorio home'
31
+ },
32
+ {
33
+ command: 'cd -',
34
+ description: 'Volver al directorio donde estabas antes'
35
+ },
36
+ {
37
+ command: 'cd ../..',
38
+ description: 'Subir dos niveles'
39
+ }
40
+ ],
41
+ relatedLesson: 'Primeros comandos',
42
+ tips: [
43
+ 'Usa Tab para autocompletar nombres de carpetas',
44
+ 'Si el nombre tiene espacios, usa comillas: cd "My Documents"',
45
+ 'pwd te muestra dónde estás parado actualmente'
46
+ ]
47
+ }
@@ -0,0 +1,43 @@
1
+ export const gitAdd = {
2
+ command: 'git add',
3
+ description: 'Agrega archivos al staging area (preparar cambios para commit)',
4
+ usage: 'git add [archivo|patrón]',
5
+ commonOptions: [
6
+ {
7
+ flag: '.',
8
+ description: 'Agregar TODOS los archivos modificados del directorio actual'
9
+ },
10
+ {
11
+ flag: '-A',
12
+ description: 'Agregar todos los cambios del repositorio (incluyendo eliminados)'
13
+ },
14
+ {
15
+ flag: '-p',
16
+ description: 'Agregar cambios interactivamente (elegir qué líneas incluir)'
17
+ }
18
+ ],
19
+ examples: [
20
+ {
21
+ command: 'git add index.js',
22
+ description: 'Agregar un archivo específico'
23
+ },
24
+ {
25
+ command: 'git add .',
26
+ description: 'Agregar todos los archivos del directorio actual'
27
+ },
28
+ {
29
+ command: 'git add src/',
30
+ description: 'Agregar todos los archivos de la carpeta src/'
31
+ },
32
+ {
33
+ command: 'git add *.js',
34
+ description: 'Agregar todos los archivos .js'
35
+ }
36
+ ],
37
+ relatedLesson: 'Git básico',
38
+ tips: [
39
+ 'git add . es el más común - agrega todo',
40
+ 'Usa git status después para verificar qué se agregó',
41
+ 'Staging area = zona de preparación antes del commit'
42
+ ]
43
+ }