@@ -209,7 +209,7 @@ export function AgentsLoginLesson() {
209209 < CodeBlock
210210 code = { `caam backup claude my-main-account
211211caam backup codex my-main-account
212- caam backup gemini my-main-account` }
212+ caam backup agy my-main-account` }
213213 />
214214 </ div >
215215
@@ -530,7 +530,29 @@ function CodexLoginSection() {
530530// INTERACTIVE AGENT COMPARISON - Clickable agent selector with detail cards
531531// =============================================================================
532532
533- type AgentId = "claude" | "codex" | "gemini" ;
533+ type AgentId = "claude" | "codex" | "antigravity" ;
534+ const AGENT_KEYS : AgentId [ ] = [ "claude" , "codex" , "antigravity" ] ;
535+ const AGENT_X_POSITION : Record < AgentId , number > = {
536+ claude : 17 ,
537+ codex : 50 ,
538+ antigravity : 83 ,
539+ } ;
540+ const AGENT_START_X : Record < AgentId , number > = {
541+ claude : 100 ,
542+ codex : 300 ,
543+ antigravity : 500 ,
544+ } ;
545+ const AGENT_LABELS : Record < AgentId , string > = {
546+ claude : "Claude Code" ,
547+ codex : "Codex CLI" ,
548+ antigravity : "Antigravity CLI" ,
549+ } ;
550+
551+ function particleUnit ( agentKey : AgentId , index : number , salt : number ) {
552+ const agentOffset = AGENT_KEYS . indexOf ( agentKey ) + 1 ;
553+ const seed = agentOffset * 997 + index * 37 + salt * 101 ;
554+ return ( ( seed * 9301 + 49297 ) % 233280 ) / 233280 ;
555+ }
534556
535557// =============================================================================
536558// LIVE AGENT TERMINAL RACE - Interactive multi-scenario auth visualization
@@ -556,7 +578,7 @@ interface Scenario {
556578 agents : {
557579 claude : ScenarioAgent ;
558580 codex : ScenarioAgent ;
559- gemini : ScenarioAgent ;
581+ antigravity : ScenarioAgent ;
560582 } ;
561583}
562584
@@ -596,7 +618,7 @@ const SCENARIOS: Scenario[] = [
596618 result : "fail" ,
597619 finishDelay : 2600 ,
598620 } ,
599- gemini : {
621+ antigravity : {
600622 lines : [
601623 { text : '$ agy "Create SSH keys for GitHub"' , type : "command" , delay : 0 } ,
602624 { text : "Let me explain SSH key cryptography..." , type : "info" , delay : 500 } ,
@@ -645,7 +667,7 @@ const SCENARIOS: Scenario[] = [
645667 result : "success" ,
646668 finishDelay : 1600 ,
647669 } ,
648- gemini : {
670+ antigravity : {
649671 lines : [
650672 { text : '$ agy "Help me set up API auth"' , type : "command" , delay : 0 } ,
651673 { text : "There are several auth approaches:" , type : "info" , delay : 500 } ,
@@ -695,7 +717,7 @@ const SCENARIOS: Scenario[] = [
695717 result : "success" ,
696718 finishDelay : 4700 ,
697719 } ,
698- gemini : {
720+ antigravity : {
699721 lines : [
700722 { text : "$ agy" , type : "command" , delay : 0 } ,
701723 { text : "Opening browser for Google sign-in..." , type : "info" , delay : 500 } ,
@@ -741,13 +763,13 @@ const SCENARIOS: Scenario[] = [
741763 result : "success" ,
742764 finishDelay : 2400 ,
743765 } ,
744- gemini : {
766+ antigravity : {
745767 lines : [
746- { text : "$ caam backup gemini main-acct" , type : "command" , delay : 0 } ,
747- { text : "Backing up Gemini credentials..." , type : "info" , delay : 400 } ,
748- { text : "Credentials saved to ~/.caam/gemini /main-acct" , type : "success" , delay : 900 } ,
749- { text : "$ caam activate gemini work-acct" , type : "command" , delay : 1300 } ,
750- { text : "Switched Gemini to work-acct" , type : "success" , delay : 1800 } ,
768+ { text : "$ caam backup agy main-acct" , type : "command" , delay : 0 } ,
769+ { text : "Backing up Antigravity credentials..." , type : "info" , delay : 400 } ,
770+ { text : "Credentials saved to ~/.caam/agy /main-acct" , type : "success" , delay : 900 } ,
771+ { text : "$ caam activate agy work-acct" , type : "command" , delay : 1300 } ,
772+ { text : "Switched Antigravity to work-acct" , type : "success" , delay : 1800 } ,
751773 ] ,
752774 result : "success" ,
753775 finishDelay : 2100 ,
@@ -786,12 +808,12 @@ const SCENARIOS: Scenario[] = [
786808 result : "fail" ,
787809 finishDelay : 2400 ,
788810 } ,
789- gemini : {
811+ antigravity : {
790812 lines : [
791813 { text : '$ agy "Update the documentation"' , type : "command" , delay : 0 } ,
792814 { text : "Processing request..." , type : "info" , delay : 400 } ,
793815 { text : "Error: Quota exceeded for gemini-pro" , type : "error" , delay : 1000 } ,
794- { text : "$ caam activate gemini work-acct" , type : "command" , delay : 1500 } ,
816+ { text : "$ caam activate agy work-acct" , type : "command" , delay : 1500 } ,
795817 { text : "Switched to work-acct" , type : "success" , delay : 2000 } ,
796818 { text : '$ agy "Update the documentation"' , type : "command" , delay : 2400 } ,
797819 { text : "Documentation updated across 8 files." , type : "success" , delay : 3400 } ,
@@ -832,7 +854,7 @@ const SCENARIOS: Scenario[] = [
832854 result : "success" ,
833855 finishDelay : 2700 ,
834856 } ,
835- gemini : {
857+ antigravity : {
836858 lines : [
837859 { text : '$ agy "Document the payments module"' , type : "command" , delay : 0 } ,
838860 { text : "Analyzing module public API..." , type : "info" , delay : 500 } ,
@@ -866,7 +888,7 @@ const AGENT_COLORS = {
866888 glow : "shadow-emerald-500/20" ,
867889 hex : "#10b981" ,
868890 } ,
869- gemini : {
891+ antigravity : {
870892 text : "text-blue-400" ,
871893 bg : "bg-blue-500" ,
872894 bgFaint : "bg-blue-500/10" ,
@@ -893,12 +915,12 @@ function InteractiveAgentComparison() {
893915 const [ visibleLines , setVisibleLines ] = useState < Record < AgentId , number > > ( {
894916 claude : 0 ,
895917 codex : 0 ,
896- gemini : 0 ,
918+ antigravity : 0 ,
897919 } ) ;
898920 const [ agentDone , setAgentDone ] = useState < Record < AgentId , boolean > > ( {
899921 claude : false ,
900922 codex : false ,
901- gemini : false ,
923+ antigravity : false ,
902924 } ) ;
903925 const [ particles , setParticles ] = useState < Particle [ ] > ( [ ] ) ;
904926 const timersRef = useRef < ReturnType < typeof setTimeout > [ ] > ( [ ] ) ;
@@ -914,8 +936,8 @@ function InteractiveAgentComparison() {
914936
915937 const resetState = useCallback ( ( ) => {
916938 clearTimers ( ) ;
917- setVisibleLines ( { claude : 0 , codex : 0 , gemini : 0 } ) ;
918- setAgentDone ( { claude : false , codex : false , gemini : false } ) ;
939+ setVisibleLines ( { claude : 0 , codex : 0 , antigravity : 0 } ) ;
940+ setAgentDone ( { claude : false , codex : false , antigravity : false } ) ;
919941 setParticles ( [ ] ) ;
920942 setIsPlaying ( false ) ;
921943 } , [ clearTimers ] ) ;
@@ -928,10 +950,11 @@ function InteractiveAgentComparison() {
928950 particleIdRef . current += 1 ;
929951 newParticles . push ( {
930952 id : particleIdRef . current ,
931- x : agentKey === "claude" ? 17 : agentKey === "codex" ? 50 : 83 ,
953+ x : AGENT_X_POSITION [ agentKey ] ,
932954 y : 50 ,
933- angle : ( Math . PI * 2 * i ) / count + Math . random ( ) * 0.5 ,
934- speed : 2 + Math . random ( ) * 3 ,
955+ angle :
956+ ( Math . PI * 2 * i ) / count + particleUnit ( agentKey , i , 1 ) * 0.5 ,
957+ speed : 2 + particleUnit ( agentKey , i , 2 ) * 3 ,
935958 life : 1 ,
936959 color,
937960 } ) ;
@@ -949,12 +972,12 @@ function InteractiveAgentComparison() {
949972 const playScenario = useCallback (
950973 ( sc : Scenario ) => {
951974 clearTimers ( ) ;
952- setVisibleLines ( { claude : 0 , codex : 0 , gemini : 0 } ) ;
953- setAgentDone ( { claude : false , codex : false , gemini : false } ) ;
975+ setVisibleLines ( { claude : 0 , codex : 0 , antigravity : 0 } ) ;
976+ setAgentDone ( { claude : false , codex : false , antigravity : false } ) ;
954977 setParticles ( [ ] ) ;
955978 setIsPlaying ( true ) ;
956979
957- const agentKeys : AgentId [ ] = [ "claude" , "codex" , "gemini" ] ;
980+ const agentKeys = AGENT_KEYS ;
958981
959982 for ( const agentKey of agentKeys ) {
960983 const agentScenario = sc . agents [ agentKey ] ;
@@ -1157,18 +1180,19 @@ function InteractiveAgentComparison() {
11571180 </ text >
11581181
11591182 { /* Connection lines with animation */ }
1160- { ( [ "claude" , "codex" , "gemini" ] as AgentId [ ] ) . map ( ( agentKey , i ) => {
1161- const startX = i === 0 ? 100 : i === 1 ? 300 : 500 ;
1183+ { AGENT_KEYS . map ( ( agentKey ) => {
1184+ const startX = AGENT_START_X [ agentKey ] ;
11621185 const isDone = agentDone [ agentKey ] ;
11631186 const isSuccess =
11641187 isDone && scenario . agents [ agentKey ] . result === "success" ;
11651188 const isFail =
11661189 isDone && scenario . agents [ agentKey ] . result === "fail" ;
1167- const color = isSuccess
1168- ? AGENT_COLORS [ agentKey ] . hex
1169- : isFail
1170- ? "#ef4444"
1171- : "rgba(255,255,255,0.08)" ;
1190+ let color = "rgba(255,255,255,0.08)" ;
1191+ if ( isSuccess ) {
1192+ color = AGENT_COLORS [ agentKey ] . hex ;
1193+ } else if ( isFail ) {
1194+ color = "#ef4444" ;
1195+ }
11721196
11731197 return (
11741198 < g key = { agentKey } >
@@ -1287,7 +1311,7 @@ function InteractiveAgentComparison() {
12871311
12881312 { /* Terminal panels */ }
12891313 < div className = "grid grid-cols-1 md:grid-cols-3 gap-0 md:gap-px bg-white/[0.04]" >
1290- { ( [ "claude" , "codex" , "gemini" ] as AgentId [ ] ) . map ( ( agentKey ) => (
1314+ { AGENT_KEYS . map ( ( agentKey ) => (
12911315 < AgentTerminalPanel
12921316 key = { `${ scenario . id } -${ agentKey } ` }
12931317 agentKey = { agentKey }
@@ -1348,12 +1372,7 @@ function AgentTerminalPanel({
13481372 }
13491373 } , [ visibleCount ] ) ;
13501374
1351- const agentLabel =
1352- agentKey === "claude"
1353- ? "Claude Code"
1354- : agentKey === "codex"
1355- ? "Codex CLI"
1356- : "Antigravity CLI" ;
1375+ const agentLabel = AGENT_LABELS [ agentKey ] ;
13571376
13581377 return (
13591378 < div className = "bg-black/40 flex flex-col" >
0 commit comments