icoa-cli 2.16.12 → 2.16.14
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/commands/exam.js +32 -13
- package/package.json +1 -1
package/dist/commands/exam.js
CHANGED
|
@@ -66,14 +66,15 @@ function printHowToPlay() {
|
|
|
66
66
|
console.log(chalk.gray(' ru · hi · de · id · th · vi · tr'));
|
|
67
67
|
console.log(chalk.gray(' ─────────────────────────────────────────'));
|
|
68
68
|
}
|
|
69
|
-
// Australian easter eggs every
|
|
69
|
+
// Australian easter eggs every 3 questions (for 15-question demo)
|
|
70
70
|
const EASTER_EGGS = {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
71
|
+
3: { emoji: '🏛️', text: 'Sydney Opera House — Great start!' },
|
|
72
|
+
5: { emoji: '🐨', text: 'A koala says g\'day — 1/3 done!' },
|
|
73
|
+
7: { emoji: '🌉', text: 'Sydney Harbour Bridge — Keep going!' },
|
|
74
|
+
9: { emoji: '🦘', text: 'A kangaroo hops by — past halfway!' },
|
|
75
|
+
11: { emoji: '🏖️', text: 'Bondi Beach — almost there!' },
|
|
76
|
+
13: { emoji: '🦈', text: 'Great Barrier Reef — 2 more to go!' },
|
|
77
|
+
15: { emoji: '🎉', text: 'G\'day mate! All done! 🇦🇺' },
|
|
77
78
|
};
|
|
78
79
|
function printQuestionProgress(current, total, answered) {
|
|
79
80
|
const width = 30;
|
|
@@ -583,6 +584,8 @@ export function registerExamCommand(program) {
|
|
|
583
584
|
clearExamState();
|
|
584
585
|
const pct = Math.round(score / state.questions.length * 100);
|
|
585
586
|
console.log();
|
|
587
|
+
// ─── Cinematic results reveal ───
|
|
588
|
+
// Part 1: Score banner
|
|
586
589
|
console.log(chalk.cyan(' ═══════════════════════════════════════'));
|
|
587
590
|
console.log();
|
|
588
591
|
console.log(chalk.bold.white(' ██╗ ██████╗ ██████╗ █████╗'));
|
|
@@ -599,10 +602,11 @@ export function registerExamCommand(program) {
|
|
|
599
602
|
console.log(chalk.gray(' Sydney, Australia · Jun 27 - Jul 2, 2026'));
|
|
600
603
|
console.log();
|
|
601
604
|
console.log(chalk.cyan(' ═══════════════════════════════════════'));
|
|
602
|
-
|
|
603
|
-
//
|
|
605
|
+
await sleep(2000);
|
|
606
|
+
// Part 2: Wrong answers
|
|
604
607
|
const wrong = state.questions.filter((q) => state.answers[q.number] !== DEMO_ANSWERS[q.number]);
|
|
605
608
|
if (wrong.length > 0) {
|
|
609
|
+
console.log();
|
|
606
610
|
console.log(chalk.white(` ${wrong.length} incorrect — here are the corrections:`));
|
|
607
611
|
console.log();
|
|
608
612
|
for (const q of wrong) {
|
|
@@ -615,35 +619,50 @@ export function registerExamCommand(program) {
|
|
|
615
619
|
}
|
|
616
620
|
}
|
|
617
621
|
else {
|
|
622
|
+
console.log();
|
|
618
623
|
console.log(chalk.green.bold(' Perfect score! All answers correct! 🎉'));
|
|
619
624
|
console.log();
|
|
620
625
|
}
|
|
626
|
+
await sleep(2000);
|
|
627
|
+
// Part 3: Theory → CTF intro
|
|
621
628
|
console.log(chalk.gray(' ─────────────────────────────────────────'));
|
|
622
629
|
console.log();
|
|
623
|
-
console.log(chalk.white(' These were theory questions. In the real ICOA
|
|
624
|
-
console.log(chalk.white(' everything happens
|
|
630
|
+
console.log(chalk.white(' These were theory questions. In the real ICOA'));
|
|
631
|
+
console.log(chalk.white(' competition, everything happens in this terminal.'));
|
|
632
|
+
await sleep(2000);
|
|
633
|
+
// Part 4: CTF history
|
|
625
634
|
console.log();
|
|
626
635
|
console.log(chalk.yellow(' Did you know?'));
|
|
627
636
|
console.log(chalk.gray(' CTF (Capture The Flag) started at DEF CON 4 in 1996,'));
|
|
628
637
|
console.log(chalk.gray(' Las Vegas. Founded by Jeff Moss (Dark Tangent).'));
|
|
629
|
-
console.log(chalk.gray(' 2026 marks 30 years of CTF
|
|
638
|
+
console.log(chalk.gray(' 2026 marks 30 years of CTF worldwide.'));
|
|
630
639
|
console.log();
|
|
631
640
|
console.log(chalk.gray(' In a CTF, you solve challenges to find hidden'));
|
|
632
641
|
console.log(chalk.gray(' "flags" — secret codes like: ') + chalk.green('icoa{w3lc0me_2_ctf}'));
|
|
633
642
|
console.log(chalk.gray(' Find it, submit it, score points!'));
|
|
643
|
+
await sleep(2500);
|
|
644
|
+
// Part 5: Timeline
|
|
634
645
|
console.log();
|
|
635
646
|
console.log(chalk.gray(' 1996 First CTF @ DEF CON, Las Vegas'));
|
|
647
|
+
await sleep(800);
|
|
636
648
|
console.log(chalk.gray(' 2016 DARPA Cyber Grand Challenge — AI enters CTF'));
|
|
637
|
-
|
|
649
|
+
await sleep(800);
|
|
650
|
+
console.log(chalk.white(' 2026 ICOA — First AI Security Olympiad, Sydney'));
|
|
651
|
+
await sleep(2000);
|
|
652
|
+
// Part 6: Dual tracks
|
|
638
653
|
console.log();
|
|
639
654
|
console.log(chalk.white(' ICOA uses ') + chalk.bold('TWO') + chalk.white(' competition tracks:'));
|
|
640
655
|
console.log();
|
|
656
|
+
await sleep(1000);
|
|
641
657
|
console.log(chalk.green.bold(' AI4CTF') + chalk.white(' — Use AI to help you solve CTF challenges'));
|
|
642
658
|
console.log(chalk.gray(' AI is your teammate. Chat, ask for hints, work together.'));
|
|
643
659
|
console.log();
|
|
660
|
+
await sleep(1500);
|
|
644
661
|
console.log(chalk.red.bold(' CTF4AI') + chalk.white(' — Trick the AI (Prompt Injection)'));
|
|
645
662
|
console.log(chalk.gray(' Can you make the AI break its own safety rules?'));
|
|
646
663
|
console.log();
|
|
664
|
+
await sleep(1500);
|
|
665
|
+
// Part 7: Call to action
|
|
647
666
|
console.log(chalk.white(' Want to experience both? Type ') + chalk.bold.cyan('continue'));
|
|
648
667
|
console.log(chalk.gray(' Or type "back" to return to the main menu.'));
|
|
649
668
|
console.log();
|