admin08077 commited on
Commit
221c571
·
verified ·
1 Parent(s): f68a0a4

Upload 13 files

Browse files
Files changed (13) hide show
  1. App.tsx +201 -0
  2. README.md +14 -11
  3. constants.ts +23 -0
  4. entrypoint.sh +29 -0
  5. index.html +39 -0
  6. index.tsx +16 -0
  7. metadata.json +5 -0
  8. nginx.conf +27 -0
  9. package-lock.json +1333 -0
  10. package.json +22 -0
  11. tsconfig.json +30 -0
  12. types.ts +15 -0
  13. vite.config.ts +17 -0
App.tsx ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import React, { useState, useCallback } from 'react';
3
+ import { TopicList } from './components/TopicList';
4
+ import { ContentView } from './components/ContentView';
5
+ import { LogView } from './components/LogView';
6
+ import { QUANTUM_BANKING_TOPICS } from './constants';
7
+ import { generateStoryContent, generateStoryImage } from './services/geminiService';
8
+ import type { StoryContent, LogEntry } from './types';
9
+ import { Terminal, Download, FileText, X, BrainCircuit } from 'lucide-react';
10
+
11
+ const App: React.FC = () => {
12
+ const [sessionAnalyses, setSessionAnalyses] = useState<StoryContent[]>([]);
13
+ const [sessionStarted, setSessionStarted] = useState<boolean>(false);
14
+ const [isLoading, setIsLoading] = useState<boolean>(false);
15
+ const [loadingStage, setLoadingStage] = useState<string>('');
16
+ const [error, setError] = useState<string | null>(null);
17
+ const [logs, setLogs] = useState<LogEntry[]>([]);
18
+ const [showLogs, setShowLogs] = useState<boolean>(false);
19
+
20
+ const addLog = useCallback((message: string, type: 'info' | 'error' | 'success' = 'info') => {
21
+ setLogs(prevLogs => [...prevLogs, { timestamp: new Date(), message, type }]);
22
+ }, []);
23
+
24
+ const handleSelectTopic = useCallback(async (topic: string) => {
25
+ if (isLoading) return;
26
+
27
+ setIsLoading(true);
28
+ if (!sessionStarted) {
29
+ setSessionStarted(true);
30
+ }
31
+ setError(null);
32
+ addLog(`Analysis initiated for: "${topic}"`);
33
+
34
+ try {
35
+ // Step 1: Generate Story & Next Topics
36
+ setLoadingStage('Synthesizing quantum data...');
37
+ const contentWithoutImage = await generateStoryContent(topic, sessionAnalyses);
38
+ addLog(`Text analysis and topic generation successful for: "${topic}"`, 'success');
39
+
40
+ // Add partial content to show text while image loads
41
+ setSessionAnalyses(prev => [...prev, { ...contentWithoutImage, imageUrl: '' }]);
42
+
43
+ // Step 2: Generate Image
44
+ setLoadingStage('Visualizing quantum circuits...');
45
+ const imageBase64 = await generateStoryImage(contentWithoutImage.story);
46
+ addLog(`Image generation successful for topic: "${topic}"`, 'success');
47
+
48
+ const finalContent = { ...contentWithoutImage, imageUrl: `data:image/jpeg;base64,${imageBase64}` };
49
+
50
+ // Replace the last item (the one without image) with the full content
51
+ setSessionAnalyses(prev => [...prev.slice(0, -1), finalContent]);
52
+
53
+ } catch (err) {
54
+ const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';
55
+ console.error(errorMessage);
56
+ setError(`Failed to generate analysis. ${errorMessage}`);
57
+ addLog(`Error during generation: ${errorMessage}`, 'error');
58
+ // Remove the placeholder analysis that was added temporarily
59
+ setSessionAnalyses(prev => prev.filter(a => a.imageUrl !== ''));
60
+ } finally {
61
+ setIsLoading(false);
62
+ setLoadingStage('');
63
+ }
64
+ }, [isLoading, addLog, sessionAnalyses, sessionStarted]);
65
+
66
+ const downloadStoryAsHtml = () => {
67
+ if (sessionAnalyses.length === 0) return;
68
+ addLog('HTML download initiated.');
69
+
70
+ const analysesHtml = sessionAnalyses.map(analysis => `
71
+ <div class="analysis-block">
72
+ <h1>${analysis.title}</h1>
73
+ <p><strong>Topic:</strong> ${analysis.topic}</p>
74
+ <img src="${analysis.imageUrl}" alt="Generated image for ${analysis.title}" style="max-width: 100%; height: auto; border-radius: 8px; margin: 1rem 0;">
75
+ <h2>Table of Contents</h2>
76
+ <ul>
77
+ ${analysis.tableOfContents.map(item => `<li>${item}</li>`).join('')}
78
+ </ul>
79
+ <h2>Detailed Analysis</h2>
80
+ <div class="story-content">${analysis.story.replace(/```(python|pseudocode)?\n([\s\S]*?)\n```/g, '<pre><code>$2</code></pre>').replace(/\n/g, '<br />').replace(/<br \/>(<pre>)/g, '$1').replace(/(<\/pre>)<br \/>/g, '$1')}</div>
81
+ </div>
82
+ `).join('<hr class="session-divider">');
83
+
84
+ const htmlContent = `
85
+ <!DOCTYPE html>
86
+ <html lang="en">
87
+ <head>
88
+ <meta charset="UTF-8">
89
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
90
+ <title>Quantum Code Architect - Session Report</title>
91
+ <style>
92
+ body { font-family: 'Inter', sans-serif; line-height: 1.6; background-color: #f8fafc; color: #020617; padding: 2rem; max-width: 800px; margin: auto; }
93
+ h1 { color: #0f172a; border-bottom: 2px solid #e2e8f0; padding-bottom: 0.5rem; }
94
+ h2 { color: #1e293b; margin-top: 2rem; }
95
+ img { max-width: 100%; height: auto; border-radius: 8px; margin: 1rem 0; }
96
+ ul { list-style-type: disc; padding-left: 2rem; }
97
+ pre { background-color: #0f172a; color: #e2e8f0; padding: 1rem; border-radius: 8px; white-space: pre-wrap; word-wrap: break-word; }
98
+ code { font-family: 'Roboto Mono', monospace; }
99
+ .analysis-block { margin-bottom: 3rem; padding-bottom: 2rem; }
100
+ .session-divider { margin: 3rem 0; border: none; border-top: 2px dashed #cbd5e1; }
101
+ </style>
102
+ </head>
103
+ <body>
104
+ ${analysesHtml}
105
+ </body>
106
+ </html>
107
+ `;
108
+ const blob = new Blob([htmlContent], { type: 'text/html' });
109
+ const url = URL.createObjectURL(blob);
110
+ const a = document.createElement('a');
111
+ a.href = url;
112
+ a.download = `qca-session-report-${new Date().toISOString().split('T')[0]}.html`;
113
+ document.body.appendChild(a);
114
+ a.click();
115
+ document.body.removeChild(a);
116
+ URL.revokeObjectURL(url);
117
+ };
118
+
119
+ (window as any).__APP_LOGS__ = logs;
120
+
121
+ return (
122
+ <div className="min-h-screen bg-slate-900 p-4 sm:p-6 lg:p-8 text-slate-300 selection:bg-sky-300 selection:text-slate-900">
123
+ <header className="text-center mb-8 border-b border-slate-700 pb-4">
124
+ <div className="flex justify-center items-center gap-4">
125
+ <BrainCircuit className="text-sky-400" size={40} />
126
+ <h1 className="text-3xl sm:text-4xl md:text-5xl font-bold text-sky-400">Quantum Code Architect</h1>
127
+ </div>
128
+ <p className="text-sm sm:text-base text-slate-400 mt-2">AI-Powered Technical Analysis for Quantum Finance Developers</p>
129
+ </header>
130
+
131
+ <main className="grid grid-cols-1 lg:grid-cols-3 gap-6 lg:gap-8 max-w-7xl mx-auto">
132
+ <aside className="lg:col-span-1 h-full">
133
+ <TopicList
134
+ topics={QUANTUM_BANKING_TOPICS}
135
+ onSelectTopic={handleSelectTopic}
136
+ disabled={isLoading || sessionStarted}
137
+ />
138
+ </aside>
139
+
140
+ <section className="lg:col-span-2">
141
+ <ContentView
142
+ analyses={sessionAnalyses}
143
+ onSelectTopic={handleSelectTopic}
144
+ isLoading={isLoading}
145
+ loadingStage={loadingStage}
146
+ error={error}
147
+ />
148
+ </section>
149
+ </main>
150
+
151
+ <footer className="fixed bottom-4 right-4 flex items-center gap-3">
152
+ {sessionAnalyses.length > 0 && (
153
+ <button onClick={downloadStoryAsHtml} title="Download Session as HTML" className="p-2 bg-slate-700 hover:bg-sky-600 border border-slate-600 rounded-full transition-all duration-300 text-sky-300 hover:text-white">
154
+ <FileText size={20} />
155
+ </button>
156
+ )}
157
+ <button onClick={() => setShowLogs(!showLogs)} title="View Activity Log" className="p-2 bg-slate-700 hover:bg-sky-600 border border-slate-600 rounded-full transition-all duration-300 text-sky-300 hover:text-white">
158
+ <Terminal size={20} />
159
+ </button>
160
+ </footer>
161
+
162
+ {showLogs && (
163
+ <div className="fixed inset-0 bg-slate-900/80 backdrop-blur-md z-40 flex items-center justify-center p-4">
164
+ <div className="relative w-full max-w-4xl h-[80vh] bg-slate-800/90 border border-sky-500/50 rounded-lg shadow-2xl shadow-sky-500/10 flex flex-col">
165
+ <div className="flex justify-between items-center p-4 border-b border-sky-500/30">
166
+ <h2 className="text-xl font-bold text-sky-300">Activity Log</h2>
167
+ <div className="flex gap-2">
168
+ <button onClick={() => { addLog('Log download initiated.'); downloadLogs(); }} title="Download Logs" className="p-2 text-slate-300 hover:bg-slate-600 rounded-full transition-colors">
169
+ <Download size={18} />
170
+ </button>
171
+ <button onClick={() => setShowLogs(false)} title="Close" className="p-2 text-slate-300 hover:bg-red-500/50 rounded-full transition-colors">
172
+ <X size={18} />
173
+ </button>
174
+ </div>
175
+ </div>
176
+ <LogView logs={logs} />
177
+ </div>
178
+ </div>
179
+ )}
180
+ </div>
181
+ );
182
+ };
183
+
184
+ // Helper function for downloading logs
185
+ const downloadLogs = () => {
186
+ const logState = (window as any).__APP_LOGS__;
187
+ if (!logState || logState.length === 0) return;
188
+
189
+ const logText = logState.map((log: LogEntry) => `[${new Date(log.timestamp).toISOString()}] [${log.type.toUpperCase()}] ${log.message}`).join('\n');
190
+ const blob = new Blob([logText], { type: 'text/plain' });
191
+ const url = URL.createObjectURL(blob);
192
+ const a = document.createElement('a');
193
+ a.href = url;
194
+ a.download = `qca-logs-${new Date().toISOString()}.txt`;
195
+ document.body.appendChild(a);
196
+ a.click();
197
+ document.body.removeChild(a);
198
+ URL.revokeObjectURL(url);
199
+ };
200
+
201
+ export default App;
README.md CHANGED
@@ -1,11 +1,14 @@
1
- ---
2
- title: Aii
3
- emoji: 🌖
4
- colorFrom: pink
5
- colorTo: gray
6
- sdk: docker
7
- pinned: false
8
- license: apache-2.0
9
- ---
10
-
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
1
+ # Run and deploy your AI Studio app
2
+
3
+ This contains everything you need to run your app locally.
4
+
5
+ ## Run Locally
6
+
7
+ **Prerequisites:** Node.js
8
+
9
+
10
+ 1. Install dependencies:
11
+ `npm install`
12
+ 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
13
+ 3. Run the app:
14
+ `npm run dev`
constants.ts ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ export const QUANTUM_BANKING_TOPICS: string[] = [
3
+ "Implementing Shor's Algorithm in Python for RSA Factoring",
4
+ "Quantum Error Correction (QEC) for Financial Qubits",
5
+ "Building a Quantum Generative Adversarial Network (QGAN) for Synthetic Market Data",
6
+ "Grover's Algorithm for Unstructured Financial Database Search",
7
+ "Variational Quantum Eigensolver (VQE) for Portfolio Optimization",
8
+ "The Role of Quantum Random Number Generators (QRNGs) in Monte Carlo Simulations",
9
+ "Developing Quantum-Resistant Cryptography with Lattice-Based Methods",
10
+ "Pseudocode for a Quantum Support Vector Machine (QSVM) for Credit Scoring",
11
+ "Architecture of a Hybrid Quantum-Classical System for Risk Analysis",
12
+ "Quantum Fourier Transform (QFT) in Financial Signal Processing",
13
+ "Noise Models and Mitigation Strategies on IBM Quantum Hardware",
14
+ "Challenges in Mapping Financial Problems to QUBO Models",
15
+ "Exploring the HHL Algorithm for Solving Linear Systems in Finance",
16
+ "Transpilation and Circuit Optimization for Financial Algorithms",
17
+ "Using Quantum Annealing for Loan Portfolio Management",
18
+ "Quantum State Tomography for Verifying Financial Models",
19
+ "Federated Learning with Quantum Encryption for Secure Data Sharing",
20
+ "Algorithmic Cooling for Preparing Low-Energy Quantum States",
21
+ "Implementing a Quantum Walk for Option Pricing Models",
22
+ "The Impact of Decoherence on Long-Running Quantum Financial Simulations"
23
+ ];
entrypoint.sh ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/sh
2
+
3
+ # This script prepares and launches the application in the Docker container.
4
+
5
+ # 1. API Key Injection
6
+ # Find the root directory where the app is served.
7
+ ROOT_DIR=/usr/share/nginx/html
8
+ INDEX_FILE=$ROOT_DIR/index.html
9
+
10
+ # Check if the API_KEY environment variable is set.
11
+ if [ -z "$API_KEY" ]; then
12
+ echo "Warning: API_KEY environment variable is not set. Using placeholder."
13
+ API_KEY_VALUE="MISSING_API_KEY"
14
+ else
15
+ echo "API_KEY is set. Injecting into index.html."
16
+ API_KEY_VALUE=$API_KEY
17
+ fi
18
+
19
+ # Use sed to replace the placeholder in index.html with the actual API key.
20
+ # The use of a different delimiter (#) for sed avoids issues if the key contains slashes.
21
+ sed -i "s#__API_KEY__#$API_KEY_VALUE#g" $INDEX_FILE
22
+
23
+ echo "Key injection complete. index.html is ready."
24
+
25
+ # 2. Start the Nginx Server
26
+ # This command starts nginx in the foreground, which is standard practice for containers.
27
+ # The `nginx -g 'daemon off;'` ensures that the container keeps running.
28
+ echo "Starting Nginx server..."
29
+ nginx -g 'daemon off;'
index.html ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Quantum Finance Insights</title>
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <link rel="preconnect" href="https://fonts.googleapis.com">
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&family=Roboto+Mono:wght@400;700&display=swap" rel="stylesheet">
12
+ <style>
13
+ body {
14
+ font-family: 'Inter', sans-serif;
15
+ }
16
+ .font-mono {
17
+ font-family: 'Roboto Mono', monospace;
18
+ }
19
+ .glow {
20
+ text-shadow: 0 0 8px currentColor;
21
+ }
22
+ </style>
23
+ <script type="importmap">
24
+ {
25
+ "imports": {
26
+ "react/": "https://esm.sh/react@^19.1.0/",
27
+ "react": "https://esm.sh/react@^19.1.0",
28
+ "react-dom/": "https://esm.sh/react-dom@^19.1.0/",
29
+ "@google/genai": "https://esm.sh/@google/genai@^1.10.0",
30
+ "lucide-react": "https://esm.sh/lucide-react@^0.525.0"
31
+ }
32
+ }
33
+ </script>
34
+ </head>
35
+ <body class="bg-slate-900 text-slate-300">
36
+ <div id="root"></div>
37
+ <script type="module" src="/index.tsx"></script>
38
+ </body>
39
+ </html>
index.tsx ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import React from 'react';
3
+ import ReactDOM from 'react-dom/client';
4
+ import App from './App';
5
+
6
+ const rootElement = document.getElementById('root');
7
+ if (!rootElement) {
8
+ throw new Error("Could not find root element to mount to");
9
+ }
10
+
11
+ const root = ReactDOM.createRoot(rootElement);
12
+ root.render(
13
+ <React.StrictMode>
14
+ <App />
15
+ </React.StrictMode>
16
+ );
metadata.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "name": "Quantum Code Architect",
3
+ "description": "An adaptive learning tool that provides deep technical analysis and pseudocode for quantum finance algorithms. The AI generates new, relevant research topics after each analysis, creating a personalized and ever-evolving curriculum for developers and researchers.",
4
+ "requestFramePermissions": []
5
+ }
nginx.conf ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ server {
2
+ listen 80;
3
+ server_name localhost;
4
+
5
+ # Set the root directory for serving files
6
+ root /usr/share/nginx/html;
7
+
8
+ # Specify the default file to serve
9
+ index index.html;
10
+
11
+ # Set default character set
12
+ charset utf-8;
13
+
14
+ # Configure routing for the Single Page Application (SPA)
15
+ location / {
16
+ # Try to serve the requested file directly, then as a directory,
17
+ # and finally, fall back to index.html to let the client-side router handle it.
18
+ try_files $uri $uri/ /index.html;
19
+ }
20
+
21
+ # Optional: Configure browser caching for static assets to improve performance.
22
+ # This tells browsers they can cache these file types for one year.
23
+ location ~* \.(?:css|js|jpg|jpeg|gif|png|ico|svg|woff|woff2)$ {
24
+ expires 1y;
25
+ add_header Cache-Control "public";
26
+ }
27
+ }
package-lock.json ADDED
@@ -0,0 +1,1333 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "quantum-code-architect",
3
+ "version": "0.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "quantum-code-architect",
9
+ "version": "0.0.0",
10
+ "dependencies": {
11
+ "@google/genai": "^1.10.0",
12
+ "lucide-react": "^0.525.0",
13
+ "react": "^19.1.0",
14
+ "react-dom": "^19.1.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^22.14.0",
18
+ "typescript": "~5.7.2",
19
+ "vite": "^6.2.0"
20
+ }
21
+ },
22
+ "node_modules/@esbuild/aix-ppc64": {
23
+ "version": "0.25.8",
24
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz",
25
+ "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==",
26
+ "cpu": [
27
+ "ppc64"
28
+ ],
29
+ "dev": true,
30
+ "optional": true,
31
+ "os": [
32
+ "aix"
33
+ ],
34
+ "engines": {
35
+ "node": ">=18"
36
+ }
37
+ },
38
+ "node_modules/@esbuild/android-arm": {
39
+ "version": "0.25.8",
40
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz",
41
+ "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==",
42
+ "cpu": [
43
+ "arm"
44
+ ],
45
+ "dev": true,
46
+ "optional": true,
47
+ "os": [
48
+ "android"
49
+ ],
50
+ "engines": {
51
+ "node": ">=18"
52
+ }
53
+ },
54
+ "node_modules/@esbuild/android-arm64": {
55
+ "version": "0.25.8",
56
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz",
57
+ "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==",
58
+ "cpu": [
59
+ "arm64"
60
+ ],
61
+ "dev": true,
62
+ "optional": true,
63
+ "os": [
64
+ "android"
65
+ ],
66
+ "engines": {
67
+ "node": ">=18"
68
+ }
69
+ },
70
+ "node_modules/@esbuild/android-x64": {
71
+ "version": "0.25.8",
72
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz",
73
+ "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==",
74
+ "cpu": [
75
+ "x64"
76
+ ],
77
+ "dev": true,
78
+ "optional": true,
79
+ "os": [
80
+ "android"
81
+ ],
82
+ "engines": {
83
+ "node": ">=18"
84
+ }
85
+ },
86
+ "node_modules/@esbuild/darwin-arm64": {
87
+ "version": "0.25.8",
88
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz",
89
+ "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==",
90
+ "cpu": [
91
+ "arm64"
92
+ ],
93
+ "dev": true,
94
+ "optional": true,
95
+ "os": [
96
+ "darwin"
97
+ ],
98
+ "engines": {
99
+ "node": ">=18"
100
+ }
101
+ },
102
+ "node_modules/@esbuild/darwin-x64": {
103
+ "version": "0.25.8",
104
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz",
105
+ "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==",
106
+ "cpu": [
107
+ "x64"
108
+ ],
109
+ "dev": true,
110
+ "optional": true,
111
+ "os": [
112
+ "darwin"
113
+ ],
114
+ "engines": {
115
+ "node": ">=18"
116
+ }
117
+ },
118
+ "node_modules/@esbuild/freebsd-arm64": {
119
+ "version": "0.25.8",
120
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz",
121
+ "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==",
122
+ "cpu": [
123
+ "arm64"
124
+ ],
125
+ "dev": true,
126
+ "optional": true,
127
+ "os": [
128
+ "freebsd"
129
+ ],
130
+ "engines": {
131
+ "node": ">=18"
132
+ }
133
+ },
134
+ "node_modules/@esbuild/freebsd-x64": {
135
+ "version": "0.25.8",
136
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz",
137
+ "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==",
138
+ "cpu": [
139
+ "x64"
140
+ ],
141
+ "dev": true,
142
+ "optional": true,
143
+ "os": [
144
+ "freebsd"
145
+ ],
146
+ "engines": {
147
+ "node": ">=18"
148
+ }
149
+ },
150
+ "node_modules/@esbuild/linux-arm": {
151
+ "version": "0.25.8",
152
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz",
153
+ "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==",
154
+ "cpu": [
155
+ "arm"
156
+ ],
157
+ "dev": true,
158
+ "optional": true,
159
+ "os": [
160
+ "linux"
161
+ ],
162
+ "engines": {
163
+ "node": ">=18"
164
+ }
165
+ },
166
+ "node_modules/@esbuild/linux-arm64": {
167
+ "version": "0.25.8",
168
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz",
169
+ "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==",
170
+ "cpu": [
171
+ "arm64"
172
+ ],
173
+ "dev": true,
174
+ "optional": true,
175
+ "os": [
176
+ "linux"
177
+ ],
178
+ "engines": {
179
+ "node": ">=18"
180
+ }
181
+ },
182
+ "node_modules/@esbuild/linux-ia32": {
183
+ "version": "0.25.8",
184
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz",
185
+ "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==",
186
+ "cpu": [
187
+ "ia32"
188
+ ],
189
+ "dev": true,
190
+ "optional": true,
191
+ "os": [
192
+ "linux"
193
+ ],
194
+ "engines": {
195
+ "node": ">=18"
196
+ }
197
+ },
198
+ "node_modules/@esbuild/linux-loong64": {
199
+ "version": "0.25.8",
200
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz",
201
+ "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==",
202
+ "cpu": [
203
+ "loong64"
204
+ ],
205
+ "dev": true,
206
+ "optional": true,
207
+ "os": [
208
+ "linux"
209
+ ],
210
+ "engines": {
211
+ "node": ">=18"
212
+ }
213
+ },
214
+ "node_modules/@esbuild/linux-mips64el": {
215
+ "version": "0.25.8",
216
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz",
217
+ "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==",
218
+ "cpu": [
219
+ "mips64el"
220
+ ],
221
+ "dev": true,
222
+ "optional": true,
223
+ "os": [
224
+ "linux"
225
+ ],
226
+ "engines": {
227
+ "node": ">=18"
228
+ }
229
+ },
230
+ "node_modules/@esbuild/linux-ppc64": {
231
+ "version": "0.25.8",
232
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz",
233
+ "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==",
234
+ "cpu": [
235
+ "ppc64"
236
+ ],
237
+ "dev": true,
238
+ "optional": true,
239
+ "os": [
240
+ "linux"
241
+ ],
242
+ "engines": {
243
+ "node": ">=18"
244
+ }
245
+ },
246
+ "node_modules/@esbuild/linux-riscv64": {
247
+ "version": "0.25.8",
248
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz",
249
+ "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==",
250
+ "cpu": [
251
+ "riscv64"
252
+ ],
253
+ "dev": true,
254
+ "optional": true,
255
+ "os": [
256
+ "linux"
257
+ ],
258
+ "engines": {
259
+ "node": ">=18"
260
+ }
261
+ },
262
+ "node_modules/@esbuild/linux-s390x": {
263
+ "version": "0.25.8",
264
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz",
265
+ "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==",
266
+ "cpu": [
267
+ "s390x"
268
+ ],
269
+ "dev": true,
270
+ "optional": true,
271
+ "os": [
272
+ "linux"
273
+ ],
274
+ "engines": {
275
+ "node": ">=18"
276
+ }
277
+ },
278
+ "node_modules/@esbuild/linux-x64": {
279
+ "version": "0.25.8",
280
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz",
281
+ "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==",
282
+ "cpu": [
283
+ "x64"
284
+ ],
285
+ "dev": true,
286
+ "optional": true,
287
+ "os": [
288
+ "linux"
289
+ ],
290
+ "engines": {
291
+ "node": ">=18"
292
+ }
293
+ },
294
+ "node_modules/@esbuild/netbsd-arm64": {
295
+ "version": "0.25.8",
296
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz",
297
+ "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==",
298
+ "cpu": [
299
+ "arm64"
300
+ ],
301
+ "dev": true,
302
+ "optional": true,
303
+ "os": [
304
+ "netbsd"
305
+ ],
306
+ "engines": {
307
+ "node": ">=18"
308
+ }
309
+ },
310
+ "node_modules/@esbuild/netbsd-x64": {
311
+ "version": "0.25.8",
312
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz",
313
+ "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==",
314
+ "cpu": [
315
+ "x64"
316
+ ],
317
+ "dev": true,
318
+ "optional": true,
319
+ "os": [
320
+ "netbsd"
321
+ ],
322
+ "engines": {
323
+ "node": ">=18"
324
+ }
325
+ },
326
+ "node_modules/@esbuild/openbsd-arm64": {
327
+ "version": "0.25.8",
328
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz",
329
+ "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==",
330
+ "cpu": [
331
+ "arm64"
332
+ ],
333
+ "dev": true,
334
+ "optional": true,
335
+ "os": [
336
+ "openbsd"
337
+ ],
338
+ "engines": {
339
+ "node": ">=18"
340
+ }
341
+ },
342
+ "node_modules/@esbuild/openbsd-x64": {
343
+ "version": "0.25.8",
344
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz",
345
+ "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==",
346
+ "cpu": [
347
+ "x64"
348
+ ],
349
+ "dev": true,
350
+ "optional": true,
351
+ "os": [
352
+ "openbsd"
353
+ ],
354
+ "engines": {
355
+ "node": ">=18"
356
+ }
357
+ },
358
+ "node_modules/@esbuild/openharmony-arm64": {
359
+ "version": "0.25.8",
360
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz",
361
+ "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==",
362
+ "cpu": [
363
+ "arm64"
364
+ ],
365
+ "dev": true,
366
+ "optional": true,
367
+ "os": [
368
+ "openharmony"
369
+ ],
370
+ "engines": {
371
+ "node": ">=18"
372
+ }
373
+ },
374
+ "node_modules/@esbuild/sunos-x64": {
375
+ "version": "0.25.8",
376
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz",
377
+ "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==",
378
+ "cpu": [
379
+ "x64"
380
+ ],
381
+ "dev": true,
382
+ "optional": true,
383
+ "os": [
384
+ "sunos"
385
+ ],
386
+ "engines": {
387
+ "node": ">=18"
388
+ }
389
+ },
390
+ "node_modules/@esbuild/win32-arm64": {
391
+ "version": "0.25.8",
392
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz",
393
+ "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==",
394
+ "cpu": [
395
+ "arm64"
396
+ ],
397
+ "dev": true,
398
+ "optional": true,
399
+ "os": [
400
+ "win32"
401
+ ],
402
+ "engines": {
403
+ "node": ">=18"
404
+ }
405
+ },
406
+ "node_modules/@esbuild/win32-ia32": {
407
+ "version": "0.25.8",
408
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz",
409
+ "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==",
410
+ "cpu": [
411
+ "ia32"
412
+ ],
413
+ "dev": true,
414
+ "optional": true,
415
+ "os": [
416
+ "win32"
417
+ ],
418
+ "engines": {
419
+ "node": ">=18"
420
+ }
421
+ },
422
+ "node_modules/@esbuild/win32-x64": {
423
+ "version": "0.25.8",
424
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz",
425
+ "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==",
426
+ "cpu": [
427
+ "x64"
428
+ ],
429
+ "dev": true,
430
+ "optional": true,
431
+ "os": [
432
+ "win32"
433
+ ],
434
+ "engines": {
435
+ "node": ">=18"
436
+ }
437
+ },
438
+ "node_modules/@google/genai": {
439
+ "version": "1.11.0",
440
+ "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.11.0.tgz",
441
+ "integrity": "sha512-4XFAHCvU91ewdWOU3RUdSeXpDuZRJHNYLqT9LKw7WqPjRQcEJvVU+VOU49ocruaSp8VuLKMecl0iadlQK+Zgfw==",
442
+ "dependencies": {
443
+ "google-auth-library": "^9.14.2",
444
+ "ws": "^8.18.0"
445
+ },
446
+ "engines": {
447
+ "node": ">=20.0.0"
448
+ },
449
+ "peerDependencies": {
450
+ "@modelcontextprotocol/sdk": "^1.11.0"
451
+ },
452
+ "peerDependenciesMeta": {
453
+ "@modelcontextprotocol/sdk": {
454
+ "optional": true
455
+ }
456
+ }
457
+ },
458
+ "node_modules/@rollup/rollup-android-arm-eabi": {
459
+ "version": "4.45.1",
460
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz",
461
+ "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==",
462
+ "cpu": [
463
+ "arm"
464
+ ],
465
+ "dev": true,
466
+ "optional": true,
467
+ "os": [
468
+ "android"
469
+ ]
470
+ },
471
+ "node_modules/@rollup/rollup-android-arm64": {
472
+ "version": "4.45.1",
473
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz",
474
+ "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==",
475
+ "cpu": [
476
+ "arm64"
477
+ ],
478
+ "dev": true,
479
+ "optional": true,
480
+ "os": [
481
+ "android"
482
+ ]
483
+ },
484
+ "node_modules/@rollup/rollup-darwin-arm64": {
485
+ "version": "4.45.1",
486
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz",
487
+ "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==",
488
+ "cpu": [
489
+ "arm64"
490
+ ],
491
+ "dev": true,
492
+ "optional": true,
493
+ "os": [
494
+ "darwin"
495
+ ]
496
+ },
497
+ "node_modules/@rollup/rollup-darwin-x64": {
498
+ "version": "4.45.1",
499
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz",
500
+ "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==",
501
+ "cpu": [
502
+ "x64"
503
+ ],
504
+ "dev": true,
505
+ "optional": true,
506
+ "os": [
507
+ "darwin"
508
+ ]
509
+ },
510
+ "node_modules/@rollup/rollup-freebsd-arm64": {
511
+ "version": "4.45.1",
512
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz",
513
+ "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==",
514
+ "cpu": [
515
+ "arm64"
516
+ ],
517
+ "dev": true,
518
+ "optional": true,
519
+ "os": [
520
+ "freebsd"
521
+ ]
522
+ },
523
+ "node_modules/@rollup/rollup-freebsd-x64": {
524
+ "version": "4.45.1",
525
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz",
526
+ "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==",
527
+ "cpu": [
528
+ "x64"
529
+ ],
530
+ "dev": true,
531
+ "optional": true,
532
+ "os": [
533
+ "freebsd"
534
+ ]
535
+ },
536
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
537
+ "version": "4.45.1",
538
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz",
539
+ "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==",
540
+ "cpu": [
541
+ "arm"
542
+ ],
543
+ "dev": true,
544
+ "optional": true,
545
+ "os": [
546
+ "linux"
547
+ ]
548
+ },
549
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
550
+ "version": "4.45.1",
551
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz",
552
+ "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==",
553
+ "cpu": [
554
+ "arm"
555
+ ],
556
+ "dev": true,
557
+ "optional": true,
558
+ "os": [
559
+ "linux"
560
+ ]
561
+ },
562
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
563
+ "version": "4.45.1",
564
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz",
565
+ "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==",
566
+ "cpu": [
567
+ "arm64"
568
+ ],
569
+ "dev": true,
570
+ "optional": true,
571
+ "os": [
572
+ "linux"
573
+ ]
574
+ },
575
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
576
+ "version": "4.45.1",
577
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz",
578
+ "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==",
579
+ "cpu": [
580
+ "arm64"
581
+ ],
582
+ "dev": true,
583
+ "optional": true,
584
+ "os": [
585
+ "linux"
586
+ ]
587
+ },
588
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
589
+ "version": "4.45.1",
590
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz",
591
+ "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==",
592
+ "cpu": [
593
+ "loong64"
594
+ ],
595
+ "dev": true,
596
+ "optional": true,
597
+ "os": [
598
+ "linux"
599
+ ]
600
+ },
601
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
602
+ "version": "4.45.1",
603
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz",
604
+ "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==",
605
+ "cpu": [
606
+ "ppc64"
607
+ ],
608
+ "dev": true,
609
+ "optional": true,
610
+ "os": [
611
+ "linux"
612
+ ]
613
+ },
614
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
615
+ "version": "4.45.1",
616
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz",
617
+ "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==",
618
+ "cpu": [
619
+ "riscv64"
620
+ ],
621
+ "dev": true,
622
+ "optional": true,
623
+ "os": [
624
+ "linux"
625
+ ]
626
+ },
627
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
628
+ "version": "4.45.1",
629
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz",
630
+ "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==",
631
+ "cpu": [
632
+ "riscv64"
633
+ ],
634
+ "dev": true,
635
+ "optional": true,
636
+ "os": [
637
+ "linux"
638
+ ]
639
+ },
640
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
641
+ "version": "4.45.1",
642
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz",
643
+ "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==",
644
+ "cpu": [
645
+ "s390x"
646
+ ],
647
+ "dev": true,
648
+ "optional": true,
649
+ "os": [
650
+ "linux"
651
+ ]
652
+ },
653
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
654
+ "version": "4.45.1",
655
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz",
656
+ "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==",
657
+ "cpu": [
658
+ "x64"
659
+ ],
660
+ "dev": true,
661
+ "optional": true,
662
+ "os": [
663
+ "linux"
664
+ ]
665
+ },
666
+ "node_modules/@rollup/rollup-linux-x64-musl": {
667
+ "version": "4.45.1",
668
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz",
669
+ "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==",
670
+ "cpu": [
671
+ "x64"
672
+ ],
673
+ "dev": true,
674
+ "optional": true,
675
+ "os": [
676
+ "linux"
677
+ ]
678
+ },
679
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
680
+ "version": "4.45.1",
681
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz",
682
+ "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==",
683
+ "cpu": [
684
+ "arm64"
685
+ ],
686
+ "dev": true,
687
+ "optional": true,
688
+ "os": [
689
+ "win32"
690
+ ]
691
+ },
692
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
693
+ "version": "4.45.1",
694
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz",
695
+ "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==",
696
+ "cpu": [
697
+ "ia32"
698
+ ],
699
+ "dev": true,
700
+ "optional": true,
701
+ "os": [
702
+ "win32"
703
+ ]
704
+ },
705
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
706
+ "version": "4.45.1",
707
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz",
708
+ "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==",
709
+ "cpu": [
710
+ "x64"
711
+ ],
712
+ "dev": true,
713
+ "optional": true,
714
+ "os": [
715
+ "win32"
716
+ ]
717
+ },
718
+ "node_modules/@types/estree": {
719
+ "version": "1.0.8",
720
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
721
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
722
+ "dev": true
723
+ },
724
+ "node_modules/@types/node": {
725
+ "version": "22.16.5",
726
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.16.5.tgz",
727
+ "integrity": "sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==",
728
+ "dev": true,
729
+ "dependencies": {
730
+ "undici-types": "~6.21.0"
731
+ }
732
+ },
733
+ "node_modules/agent-base": {
734
+ "version": "7.1.4",
735
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
736
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
737
+ "engines": {
738
+ "node": ">= 14"
739
+ }
740
+ },
741
+ "node_modules/base64-js": {
742
+ "version": "1.5.1",
743
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
744
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
745
+ "funding": [
746
+ {
747
+ "type": "github",
748
+ "url": "https://github.com/sponsors/feross"
749
+ },
750
+ {
751
+ "type": "patreon",
752
+ "url": "https://www.patreon.com/feross"
753
+ },
754
+ {
755
+ "type": "consulting",
756
+ "url": "https://feross.org/support"
757
+ }
758
+ ]
759
+ },
760
+ "node_modules/bignumber.js": {
761
+ "version": "9.3.1",
762
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz",
763
+ "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==",
764
+ "engines": {
765
+ "node": "*"
766
+ }
767
+ },
768
+ "node_modules/buffer-equal-constant-time": {
769
+ "version": "1.0.1",
770
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
771
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
772
+ },
773
+ "node_modules/debug": {
774
+ "version": "4.4.1",
775
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
776
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
777
+ "dependencies": {
778
+ "ms": "^2.1.3"
779
+ },
780
+ "engines": {
781
+ "node": ">=6.0"
782
+ },
783
+ "peerDependenciesMeta": {
784
+ "supports-color": {
785
+ "optional": true
786
+ }
787
+ }
788
+ },
789
+ "node_modules/ecdsa-sig-formatter": {
790
+ "version": "1.0.11",
791
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
792
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
793
+ "dependencies": {
794
+ "safe-buffer": "^5.0.1"
795
+ }
796
+ },
797
+ "node_modules/esbuild": {
798
+ "version": "0.25.8",
799
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz",
800
+ "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==",
801
+ "dev": true,
802
+ "hasInstallScript": true,
803
+ "bin": {
804
+ "esbuild": "bin/esbuild"
805
+ },
806
+ "engines": {
807
+ "node": ">=18"
808
+ },
809
+ "optionalDependencies": {
810
+ "@esbuild/aix-ppc64": "0.25.8",
811
+ "@esbuild/android-arm": "0.25.8",
812
+ "@esbuild/android-arm64": "0.25.8",
813
+ "@esbuild/android-x64": "0.25.8",
814
+ "@esbuild/darwin-arm64": "0.25.8",
815
+ "@esbuild/darwin-x64": "0.25.8",
816
+ "@esbuild/freebsd-arm64": "0.25.8",
817
+ "@esbuild/freebsd-x64": "0.25.8",
818
+ "@esbuild/linux-arm": "0.25.8",
819
+ "@esbuild/linux-arm64": "0.25.8",
820
+ "@esbuild/linux-ia32": "0.25.8",
821
+ "@esbuild/linux-loong64": "0.25.8",
822
+ "@esbuild/linux-mips64el": "0.25.8",
823
+ "@esbuild/linux-ppc64": "0.25.8",
824
+ "@esbuild/linux-riscv64": "0.25.8",
825
+ "@esbuild/linux-s390x": "0.25.8",
826
+ "@esbuild/linux-x64": "0.25.8",
827
+ "@esbuild/netbsd-arm64": "0.25.8",
828
+ "@esbuild/netbsd-x64": "0.25.8",
829
+ "@esbuild/openbsd-arm64": "0.25.8",
830
+ "@esbuild/openbsd-x64": "0.25.8",
831
+ "@esbuild/openharmony-arm64": "0.25.8",
832
+ "@esbuild/sunos-x64": "0.25.8",
833
+ "@esbuild/win32-arm64": "0.25.8",
834
+ "@esbuild/win32-ia32": "0.25.8",
835
+ "@esbuild/win32-x64": "0.25.8"
836
+ }
837
+ },
838
+ "node_modules/extend": {
839
+ "version": "3.0.2",
840
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
841
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
842
+ },
843
+ "node_modules/fdir": {
844
+ "version": "6.4.6",
845
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
846
+ "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
847
+ "dev": true,
848
+ "peerDependencies": {
849
+ "picomatch": "^3 || ^4"
850
+ },
851
+ "peerDependenciesMeta": {
852
+ "picomatch": {
853
+ "optional": true
854
+ }
855
+ }
856
+ },
857
+ "node_modules/fsevents": {
858
+ "version": "2.3.3",
859
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
860
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
861
+ "dev": true,
862
+ "hasInstallScript": true,
863
+ "optional": true,
864
+ "os": [
865
+ "darwin"
866
+ ],
867
+ "engines": {
868
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
869
+ }
870
+ },
871
+ "node_modules/gaxios": {
872
+ "version": "6.7.1",
873
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz",
874
+ "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==",
875
+ "dependencies": {
876
+ "extend": "^3.0.2",
877
+ "https-proxy-agent": "^7.0.1",
878
+ "is-stream": "^2.0.0",
879
+ "node-fetch": "^2.6.9",
880
+ "uuid": "^9.0.1"
881
+ },
882
+ "engines": {
883
+ "node": ">=14"
884
+ }
885
+ },
886
+ "node_modules/gcp-metadata": {
887
+ "version": "6.1.1",
888
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz",
889
+ "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==",
890
+ "dependencies": {
891
+ "gaxios": "^6.1.1",
892
+ "google-logging-utils": "^0.0.2",
893
+ "json-bigint": "^1.0.0"
894
+ },
895
+ "engines": {
896
+ "node": ">=14"
897
+ }
898
+ },
899
+ "node_modules/google-auth-library": {
900
+ "version": "9.15.1",
901
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz",
902
+ "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==",
903
+ "dependencies": {
904
+ "base64-js": "^1.3.0",
905
+ "ecdsa-sig-formatter": "^1.0.11",
906
+ "gaxios": "^6.1.1",
907
+ "gcp-metadata": "^6.1.0",
908
+ "gtoken": "^7.0.0",
909
+ "jws": "^4.0.0"
910
+ },
911
+ "engines": {
912
+ "node": ">=14"
913
+ }
914
+ },
915
+ "node_modules/google-logging-utils": {
916
+ "version": "0.0.2",
917
+ "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz",
918
+ "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==",
919
+ "engines": {
920
+ "node": ">=14"
921
+ }
922
+ },
923
+ "node_modules/gtoken": {
924
+ "version": "7.1.0",
925
+ "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz",
926
+ "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==",
927
+ "dependencies": {
928
+ "gaxios": "^6.0.0",
929
+ "jws": "^4.0.0"
930
+ },
931
+ "engines": {
932
+ "node": ">=14.0.0"
933
+ }
934
+ },
935
+ "node_modules/https-proxy-agent": {
936
+ "version": "7.0.6",
937
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
938
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
939
+ "dependencies": {
940
+ "agent-base": "^7.1.2",
941
+ "debug": "4"
942
+ },
943
+ "engines": {
944
+ "node": ">= 14"
945
+ }
946
+ },
947
+ "node_modules/is-stream": {
948
+ "version": "2.0.1",
949
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
950
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
951
+ "engines": {
952
+ "node": ">=8"
953
+ },
954
+ "funding": {
955
+ "url": "https://github.com/sponsors/sindresorhus"
956
+ }
957
+ },
958
+ "node_modules/json-bigint": {
959
+ "version": "1.0.0",
960
+ "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
961
+ "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
962
+ "dependencies": {
963
+ "bignumber.js": "^9.0.0"
964
+ }
965
+ },
966
+ "node_modules/jwa": {
967
+ "version": "2.0.1",
968
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz",
969
+ "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==",
970
+ "dependencies": {
971
+ "buffer-equal-constant-time": "^1.0.1",
972
+ "ecdsa-sig-formatter": "1.0.11",
973
+ "safe-buffer": "^5.0.1"
974
+ }
975
+ },
976
+ "node_modules/jws": {
977
+ "version": "4.0.0",
978
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
979
+ "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
980
+ "dependencies": {
981
+ "jwa": "^2.0.0",
982
+ "safe-buffer": "^5.0.1"
983
+ }
984
+ },
985
+ "node_modules/lucide-react": {
986
+ "version": "0.525.0",
987
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.525.0.tgz",
988
+ "integrity": "sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==",
989
+ "peerDependencies": {
990
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
991
+ }
992
+ },
993
+ "node_modules/ms": {
994
+ "version": "2.1.3",
995
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
996
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
997
+ },
998
+ "node_modules/nanoid": {
999
+ "version": "3.3.11",
1000
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
1001
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
1002
+ "dev": true,
1003
+ "funding": [
1004
+ {
1005
+ "type": "github",
1006
+ "url": "https://github.com/sponsors/ai"
1007
+ }
1008
+ ],
1009
+ "bin": {
1010
+ "nanoid": "bin/nanoid.cjs"
1011
+ },
1012
+ "engines": {
1013
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1014
+ }
1015
+ },
1016
+ "node_modules/node-fetch": {
1017
+ "version": "2.7.0",
1018
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
1019
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
1020
+ "dependencies": {
1021
+ "whatwg-url": "^5.0.0"
1022
+ },
1023
+ "engines": {
1024
+ "node": "4.x || >=6.0.0"
1025
+ },
1026
+ "peerDependencies": {
1027
+ "encoding": "^0.1.0"
1028
+ },
1029
+ "peerDependenciesMeta": {
1030
+ "encoding": {
1031
+ "optional": true
1032
+ }
1033
+ }
1034
+ },
1035
+ "node_modules/picocolors": {
1036
+ "version": "1.1.1",
1037
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1038
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1039
+ "dev": true
1040
+ },
1041
+ "node_modules/picomatch": {
1042
+ "version": "4.0.3",
1043
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
1044
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
1045
+ "dev": true,
1046
+ "engines": {
1047
+ "node": ">=12"
1048
+ },
1049
+ "funding": {
1050
+ "url": "https://github.com/sponsors/jonschlinkert"
1051
+ }
1052
+ },
1053
+ "node_modules/postcss": {
1054
+ "version": "8.5.6",
1055
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
1056
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
1057
+ "dev": true,
1058
+ "funding": [
1059
+ {
1060
+ "type": "opencollective",
1061
+ "url": "https://opencollective.com/postcss/"
1062
+ },
1063
+ {
1064
+ "type": "tidelift",
1065
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1066
+ },
1067
+ {
1068
+ "type": "github",
1069
+ "url": "https://github.com/sponsors/ai"
1070
+ }
1071
+ ],
1072
+ "dependencies": {
1073
+ "nanoid": "^3.3.11",
1074
+ "picocolors": "^1.1.1",
1075
+ "source-map-js": "^1.2.1"
1076
+ },
1077
+ "engines": {
1078
+ "node": "^10 || ^12 || >=14"
1079
+ }
1080
+ },
1081
+ "node_modules/react": {
1082
+ "version": "19.1.0",
1083
+ "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
1084
+ "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
1085
+ "engines": {
1086
+ "node": ">=0.10.0"
1087
+ }
1088
+ },
1089
+ "node_modules/react-dom": {
1090
+ "version": "19.1.0",
1091
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
1092
+ "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
1093
+ "dependencies": {
1094
+ "scheduler": "^0.26.0"
1095
+ },
1096
+ "peerDependencies": {
1097
+ "react": "^19.1.0"
1098
+ }
1099
+ },
1100
+ "node_modules/rollup": {
1101
+ "version": "4.45.1",
1102
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz",
1103
+ "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==",
1104
+ "dev": true,
1105
+ "dependencies": {
1106
+ "@types/estree": "1.0.8"
1107
+ },
1108
+ "bin": {
1109
+ "rollup": "dist/bin/rollup"
1110
+ },
1111
+ "engines": {
1112
+ "node": ">=18.0.0",
1113
+ "npm": ">=8.0.0"
1114
+ },
1115
+ "optionalDependencies": {
1116
+ "@rollup/rollup-android-arm-eabi": "4.45.1",
1117
+ "@rollup/rollup-android-arm64": "4.45.1",
1118
+ "@rollup/rollup-darwin-arm64": "4.45.1",
1119
+ "@rollup/rollup-darwin-x64": "4.45.1",
1120
+ "@rollup/rollup-freebsd-arm64": "4.45.1",
1121
+ "@rollup/rollup-freebsd-x64": "4.45.1",
1122
+ "@rollup/rollup-linux-arm-gnueabihf": "4.45.1",
1123
+ "@rollup/rollup-linux-arm-musleabihf": "4.45.1",
1124
+ "@rollup/rollup-linux-arm64-gnu": "4.45.1",
1125
+ "@rollup/rollup-linux-arm64-musl": "4.45.1",
1126
+ "@rollup/rollup-linux-loongarch64-gnu": "4.45.1",
1127
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1",
1128
+ "@rollup/rollup-linux-riscv64-gnu": "4.45.1",
1129
+ "@rollup/rollup-linux-riscv64-musl": "4.45.1",
1130
+ "@rollup/rollup-linux-s390x-gnu": "4.45.1",
1131
+ "@rollup/rollup-linux-x64-gnu": "4.45.1",
1132
+ "@rollup/rollup-linux-x64-musl": "4.45.1",
1133
+ "@rollup/rollup-win32-arm64-msvc": "4.45.1",
1134
+ "@rollup/rollup-win32-ia32-msvc": "4.45.1",
1135
+ "@rollup/rollup-win32-x64-msvc": "4.45.1",
1136
+ "fsevents": "~2.3.2"
1137
+ }
1138
+ },
1139
+ "node_modules/safe-buffer": {
1140
+ "version": "5.2.1",
1141
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1142
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1143
+ "funding": [
1144
+ {
1145
+ "type": "github",
1146
+ "url": "https://github.com/sponsors/feross"
1147
+ },
1148
+ {
1149
+ "type": "patreon",
1150
+ "url": "https://www.patreon.com/feross"
1151
+ },
1152
+ {
1153
+ "type": "consulting",
1154
+ "url": "https://feross.org/support"
1155
+ }
1156
+ ]
1157
+ },
1158
+ "node_modules/scheduler": {
1159
+ "version": "0.26.0",
1160
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
1161
+ "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA=="
1162
+ },
1163
+ "node_modules/source-map-js": {
1164
+ "version": "1.2.1",
1165
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
1166
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
1167
+ "dev": true,
1168
+ "engines": {
1169
+ "node": ">=0.10.0"
1170
+ }
1171
+ },
1172
+ "node_modules/tinyglobby": {
1173
+ "version": "0.2.14",
1174
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
1175
+ "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
1176
+ "dev": true,
1177
+ "dependencies": {
1178
+ "fdir": "^6.4.4",
1179
+ "picomatch": "^4.0.2"
1180
+ },
1181
+ "engines": {
1182
+ "node": ">=12.0.0"
1183
+ },
1184
+ "funding": {
1185
+ "url": "https://github.com/sponsors/SuperchupuDev"
1186
+ }
1187
+ },
1188
+ "node_modules/tr46": {
1189
+ "version": "0.0.3",
1190
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1191
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
1192
+ },
1193
+ "node_modules/typescript": {
1194
+ "version": "5.7.3",
1195
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
1196
+ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
1197
+ "dev": true,
1198
+ "bin": {
1199
+ "tsc": "bin/tsc",
1200
+ "tsserver": "bin/tsserver"
1201
+ },
1202
+ "engines": {
1203
+ "node": ">=14.17"
1204
+ }
1205
+ },
1206
+ "node_modules/undici-types": {
1207
+ "version": "6.21.0",
1208
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
1209
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
1210
+ "dev": true
1211
+ },
1212
+ "node_modules/uuid": {
1213
+ "version": "9.0.1",
1214
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
1215
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
1216
+ "funding": [
1217
+ "https://github.com/sponsors/broofa",
1218
+ "https://github.com/sponsors/ctavan"
1219
+ ],
1220
+ "bin": {
1221
+ "uuid": "dist/bin/uuid"
1222
+ }
1223
+ },
1224
+ "node_modules/vite": {
1225
+ "version": "6.3.5",
1226
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
1227
+ "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
1228
+ "dev": true,
1229
+ "dependencies": {
1230
+ "esbuild": "^0.25.0",
1231
+ "fdir": "^6.4.4",
1232
+ "picomatch": "^4.0.2",
1233
+ "postcss": "^8.5.3",
1234
+ "rollup": "^4.34.9",
1235
+ "tinyglobby": "^0.2.13"
1236
+ },
1237
+ "bin": {
1238
+ "vite": "bin/vite.js"
1239
+ },
1240
+ "engines": {
1241
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
1242
+ },
1243
+ "funding": {
1244
+ "url": "https://github.com/vitejs/vite?sponsor=1"
1245
+ },
1246
+ "optionalDependencies": {
1247
+ "fsevents": "~2.3.3"
1248
+ },
1249
+ "peerDependencies": {
1250
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
1251
+ "jiti": ">=1.21.0",
1252
+ "less": "*",
1253
+ "lightningcss": "^1.21.0",
1254
+ "sass": "*",
1255
+ "sass-embedded": "*",
1256
+ "stylus": "*",
1257
+ "sugarss": "*",
1258
+ "terser": "^5.16.0",
1259
+ "tsx": "^4.8.1",
1260
+ "yaml": "^2.4.2"
1261
+ },
1262
+ "peerDependenciesMeta": {
1263
+ "@types/node": {
1264
+ "optional": true
1265
+ },
1266
+ "jiti": {
1267
+ "optional": true
1268
+ },
1269
+ "less": {
1270
+ "optional": true
1271
+ },
1272
+ "lightningcss": {
1273
+ "optional": true
1274
+ },
1275
+ "sass": {
1276
+ "optional": true
1277
+ },
1278
+ "sass-embedded": {
1279
+ "optional": true
1280
+ },
1281
+ "stylus": {
1282
+ "optional": true
1283
+ },
1284
+ "sugarss": {
1285
+ "optional": true
1286
+ },
1287
+ "terser": {
1288
+ "optional": true
1289
+ },
1290
+ "tsx": {
1291
+ "optional": true
1292
+ },
1293
+ "yaml": {
1294
+ "optional": true
1295
+ }
1296
+ }
1297
+ },
1298
+ "node_modules/webidl-conversions": {
1299
+ "version": "3.0.1",
1300
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1301
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
1302
+ },
1303
+ "node_modules/whatwg-url": {
1304
+ "version": "5.0.0",
1305
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1306
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
1307
+ "dependencies": {
1308
+ "tr46": "~0.0.3",
1309
+ "webidl-conversions": "^3.0.0"
1310
+ }
1311
+ },
1312
+ "node_modules/ws": {
1313
+ "version": "8.18.3",
1314
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
1315
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
1316
+ "engines": {
1317
+ "node": ">=10.0.0"
1318
+ },
1319
+ "peerDependencies": {
1320
+ "bufferutil": "^4.0.1",
1321
+ "utf-8-validate": ">=5.0.2"
1322
+ },
1323
+ "peerDependenciesMeta": {
1324
+ "bufferutil": {
1325
+ "optional": true
1326
+ },
1327
+ "utf-8-validate": {
1328
+ "optional": true
1329
+ }
1330
+ }
1331
+ }
1332
+ }
1333
+ }
package.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "quantum-code-architect",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "react": "^19.1.0",
13
+ "react-dom": "^19.1.0",
14
+ "@google/genai": "^1.10.0",
15
+ "lucide-react": "^0.525.0"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^22.14.0",
19
+ "typescript": "~5.7.2",
20
+ "vite": "^6.2.0"
21
+ }
22
+ }
tsconfig.json ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "experimentalDecorators": true,
5
+ "useDefineForClassFields": false,
6
+ "module": "ESNext",
7
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "isolatedModules": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": true,
16
+ "allowJs": true,
17
+ "jsx": "react-jsx",
18
+
19
+ /* Linting */
20
+ "strict": true,
21
+ "noUnusedLocals": true,
22
+ "noUnusedParameters": true,
23
+ "noFallthroughCasesInSwitch": true,
24
+ "noUncheckedSideEffectImports": true,
25
+
26
+ "paths": {
27
+ "@/*" : ["./*"]
28
+ }
29
+ }
30
+ }
types.ts ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ export interface StoryContent {
3
+ topic: string;
4
+ title: string;
5
+ tableOfContents: string[];
6
+ story: string;
7
+ imageUrl: string;
8
+ nextTopics?: string[];
9
+ }
10
+
11
+ export interface LogEntry {
12
+ timestamp: Date;
13
+ message: string;
14
+ type: 'info' | 'error' | 'success';
15
+ }
vite.config.ts ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import path from 'path';
2
+ import { defineConfig, loadEnv } from 'vite';
3
+
4
+ export default defineConfig(({ mode }) => {
5
+ const env = loadEnv(mode, '.', '');
6
+ return {
7
+ define: {
8
+ 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
9
+ 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
10
+ },
11
+ resolve: {
12
+ alias: {
13
+ '@': path.resolve(__dirname, '.'),
14
+ }
15
+ }
16
+ };
17
+ });