@minnai/create-aura-app 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/index.js +108 -0
  2. package/dist/scaffold.js +61 -0
  3. package/package.json +36 -0
  4. package/templates/blank/index.html +12 -0
  5. package/templates/blank/package.json +23 -0
  6. package/templates/blank/src/App.tsx +21 -0
  7. package/templates/blank/src/index.css +40 -0
  8. package/templates/blank/src/main.tsx +10 -0
  9. package/templates/blank/tsconfig.json +31 -0
  10. package/templates/blank/tsconfig.node.json +12 -0
  11. package/templates/blank/vite.config.ts +7 -0
  12. package/templates/starter/.env.example +14 -0
  13. package/templates/starter/README.md +31 -0
  14. package/templates/starter/_gitignore +24 -0
  15. package/templates/starter/aura.config.ts +19 -0
  16. package/templates/starter/eslint.config.js +23 -0
  17. package/templates/starter/index.html +16 -0
  18. package/templates/starter/package.json +37 -0
  19. package/templates/starter/public/favicon.png +0 -0
  20. package/templates/starter/public/usd.json +9 -0
  21. package/templates/starter/public/vite.svg +1 -0
  22. package/templates/starter/src/App.css +32 -0
  23. package/templates/starter/src/App.tsx +82 -0
  24. package/templates/starter/src/ambiance/currency-air/index.tsx +25 -0
  25. package/templates/starter/src/ambiance/currency-air/logic.ts +49 -0
  26. package/templates/starter/src/ambiance/currency-air/manifest.ts +15 -0
  27. package/templates/starter/src/ambiance/currency-air/resources.ts +16 -0
  28. package/templates/starter/src/ambiance/currency-air/ui/index.tsx +42 -0
  29. package/templates/starter/src/ambiance/index.ts +48 -0
  30. package/templates/starter/src/ambiance/stocks-air/index.ts +3 -0
  31. package/templates/starter/src/ambiance/stocks-air/index.tsx +28 -0
  32. package/templates/starter/src/ambiance/stocks-air/logic.ts +87 -0
  33. package/templates/starter/src/ambiance/stocks-air/manifest.ts +15 -0
  34. package/templates/starter/src/ambiance/stocks-air/resources.ts +23 -0
  35. package/templates/starter/src/ambiance/stocks-air/ui/index.tsx +67 -0
  36. package/templates/starter/src/assets/react.svg +1 -0
  37. package/templates/starter/src/components/AnalyticsTracker.tsx +13 -0
  38. package/templates/starter/src/components/Playground/CodeEditor.tsx +121 -0
  39. package/templates/starter/src/components/Playground/Debugger.tsx +71 -0
  40. package/templates/starter/src/components/Playground/Playground.tsx +221 -0
  41. package/templates/starter/src/components/Playground/Sidebar.tsx +68 -0
  42. package/templates/starter/src/components/ProjectSidebar/ProjectSidebar.tsx +219 -0
  43. package/templates/starter/src/components/TourGuide/TourGuide.tsx +16 -0
  44. package/templates/starter/src/components/TourGuide/index.ts +1 -0
  45. package/templates/starter/src/components/TourGuide/tour-flow.yaml +137 -0
  46. package/templates/starter/src/components/TourGuide/useTourEngine.ts +376 -0
  47. package/templates/starter/src/index.css +68 -0
  48. package/templates/starter/src/main.tsx +10 -0
  49. package/templates/starter/src/services/AnalyticsService.ts +181 -0
  50. package/templates/starter/src/types/ContextHandler.ts +13 -0
  51. package/templates/starter/tsconfig.app.json +40 -0
  52. package/templates/starter/tsconfig.json +7 -0
  53. package/templates/starter/tsconfig.node.json +26 -0
  54. package/templates/starter/verify_backend.ts +42 -0
  55. package/templates/starter/vite.config.ts +286 -0
package/dist/index.js ADDED
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const prompts_1 = __importDefault(require("prompts"));
9
+ const colors_1 = require("kleur/colors");
10
+ const path_1 = __importDefault(require("path"));
11
+ const scaffold_1 = require("./scaffold");
12
+ const program = new commander_1.Command();
13
+ let PROJECT_DIR = '';
14
+ program
15
+ .name('create-aura-app')
16
+ .description('Scaffold a new Aura application')
17
+ .arguments('[project-directory]')
18
+ .action((dir) => {
19
+ PROJECT_DIR = dir;
20
+ })
21
+ .parse(process.argv);
22
+ async function main() {
23
+ console.log((0, colors_1.bold)((0, colors_1.blue)('\n✨ Welcome to Aura! Let\'s create your new app.\n')));
24
+ let targetDir = PROJECT_DIR;
25
+ if (!targetDir) {
26
+ const response = await (0, prompts_1.default)({
27
+ type: 'text',
28
+ name: 'value',
29
+ message: 'Where should we create your project?',
30
+ initial: 'aura-app'
31
+ });
32
+ targetDir = response.value;
33
+ }
34
+ if (!targetDir) {
35
+ console.log((0, colors_1.red)('✖ Operation cancelled'));
36
+ process.exit(1);
37
+ }
38
+ const questions = [
39
+ {
40
+ type: 'select',
41
+ name: 'template',
42
+ message: 'Which template would you like to use?',
43
+ choices: [
44
+ { title: 'Starter (Recommended)', description: 'Full chat app with Zero-Config Free Tier Proxy', value: 'starter' },
45
+ { title: 'Blank', description: 'Minimal setup for custom development', value: 'blank' }
46
+ ],
47
+ initial: 0
48
+ },
49
+ {
50
+ type: 'select',
51
+ name: 'language',
52
+ message: 'Which language would you like to use?',
53
+ choices: [
54
+ { title: 'TypeScript', description: 'Recommended for robustness', value: 'typescript' },
55
+ { title: 'JavaScript', description: 'Standard JS', value: 'javascript' }
56
+ ],
57
+ initial: 0
58
+ },
59
+ {
60
+ type: 'confirm',
61
+ name: 'install',
62
+ message: 'Install dependencies now?',
63
+ initial: true
64
+ },
65
+ {
66
+ type: 'confirm',
67
+ name: 'git',
68
+ message: 'Initialize a new git repository?',
69
+ initial: true
70
+ }
71
+ ];
72
+ const answers = await (0, prompts_1.default)(questions);
73
+ if (!answers.template) {
74
+ console.log((0, colors_1.red)('✖ Operation cancelled'));
75
+ process.exit(1);
76
+ }
77
+ const root = path_1.default.resolve(process.cwd(), targetDir);
78
+ const projectName = path_1.default.basename(root);
79
+ await (0, scaffold_1.scaffold)({
80
+ root,
81
+ projectName,
82
+ template: answers.template,
83
+ language: answers.language,
84
+ install: answers.install,
85
+ git: answers.git
86
+ });
87
+ console.log((0, colors_1.bold)((0, colors_1.green)('\n✔ Success! Created ' + projectName + ' at ' + root + '\n')));
88
+ console.log('Inside that directory, you can run several commands:\n');
89
+ console.log((0, colors_1.blue)(` npm run dev`));
90
+ console.log(' Starts the development server.\n');
91
+ console.log((0, colors_1.blue)(` npm run build`));
92
+ console.log(' Bundles the app for production.\n');
93
+ console.log('We suggest that you begin by typing:\n');
94
+ console.log((0, colors_1.blue)(` cd ${targetDir}`));
95
+ if (!answers.install) {
96
+ console.log((0, colors_1.blue)(` npm install`));
97
+ }
98
+ console.log((0, colors_1.blue)(` npm run dev\n`));
99
+ if (answers.template === 'starter') {
100
+ console.log((0, colors_1.yellow)((0, colors_1.bold)('NOTE: The starter project is pre-configured with our Free Tier Proxy.')));
101
+ console.log((0, colors_1.yellow)('You can start chatting immediately without any API keys or login!\n'));
102
+ console.log((0, colors_1.yellow)((0, colors_1.bold)('Also, this starter has NO Auth/Login code included as per your request.')));
103
+ }
104
+ }
105
+ main().catch((err) => {
106
+ console.error(err);
107
+ process.exit(1);
108
+ });
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.scaffold = scaffold;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_extra_1 = __importDefault(require("fs-extra"));
9
+ const child_process_1 = require("child_process");
10
+ const colors_1 = require("kleur/colors");
11
+ async function scaffold(options) {
12
+ const { root, template, install, git, projectName } = options;
13
+ console.log((0, colors_1.dim)(`\nScaffolding project in ${root}...`));
14
+ // Determine template path
15
+ // Assumes templates are in ../templates relative to dist/index.js
16
+ const templateDir = path_1.default.resolve(__dirname, '..', 'templates', template);
17
+ if (!fs_extra_1.default.existsSync(templateDir)) {
18
+ throw new Error(`Template "${template}" not found at ${templateDir}`);
19
+ }
20
+ // Copy template files
21
+ await fs_extra_1.default.copy(templateDir, root, {
22
+ filter: (src) => {
23
+ // Filter out node_modules or other unnecessary files if they exist in templates
24
+ return !src.includes('node_modules');
25
+ }
26
+ });
27
+ // Rename _gitignore to .gitignore
28
+ const gitignorePath = path_1.default.join(root, '_gitignore');
29
+ if (fs_extra_1.default.existsSync(gitignorePath)) {
30
+ await fs_extra_1.default.move(gitignorePath, path_1.default.join(root, '.gitignore'));
31
+ }
32
+ // Update package.json name
33
+ const pkgPath = path_1.default.join(root, 'package.json');
34
+ if (fs_extra_1.default.existsSync(pkgPath)) {
35
+ const pkg = await fs_extra_1.default.readJson(pkgPath);
36
+ pkg.name = projectName;
37
+ await fs_extra_1.default.writeJson(pkgPath, pkg, { spaces: 2 });
38
+ }
39
+ // Initialize Git
40
+ if (git) {
41
+ try {
42
+ (0, child_process_1.execSync)('git init', { cwd: root, stdio: 'ignore' });
43
+ (0, child_process_1.execSync)('git add -A', { cwd: root, stdio: 'ignore' });
44
+ (0, child_process_1.execSync)('git commit -m "Initial commit from create-aura-app"', { cwd: root, stdio: 'ignore' });
45
+ console.log((0, colors_1.dim)('Initialized a git repository.'));
46
+ }
47
+ catch (e) {
48
+ console.warn((0, colors_1.dim)('Git initialization failed. Skipping...'));
49
+ }
50
+ }
51
+ // Install dependencies
52
+ if (install) {
53
+ console.log((0, colors_1.dim)('Installing dependencies... This might take a moment.'));
54
+ try {
55
+ (0, child_process_1.execSync)('npm install', { cwd: root, stdio: 'inherit' });
56
+ }
57
+ catch (e) {
58
+ console.warn((0, colors_1.dim)('Dependency installation failed. You may need to run npm install manually.'));
59
+ }
60
+ }
61
+ }
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@minnai/create-aura-app",
3
+ "version": "0.0.2",
4
+ "description": "Scaffolding tool for new Aura projects",
5
+ "bin": "dist/index.js",
6
+ "files": [
7
+ "dist",
8
+ "templates"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc -w",
13
+ "start": "node dist/index.js",
14
+ "test": "echo \"Error: no test specified\" && exit 1"
15
+ },
16
+ "keywords": [
17
+ "aura",
18
+ "scaffold",
19
+ "cli",
20
+ "create-aura-app"
21
+ ],
22
+ "author": "Minn.ai",
23
+ "license": "MIT",
24
+ "dependencies": {
25
+ "commander": "^13.1.0",
26
+ "prompts": "^2.4.2",
27
+ "kleur": "^4.1.5",
28
+ "fs-extra": "^11.3.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^22.13.0",
32
+ "@types/prompts": "^2.4.9",
33
+ "@types/fs-extra": "^11.0.4",
34
+ "typescript": "^5.7.3"
35
+ }
36
+ }
@@ -0,0 +1,12 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Aura App</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="/src/main.tsx"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "my-aura-app",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "tsc && vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "@minnai/aura": "latest",
13
+ "react": "^18.2.0",
14
+ "react-dom": "^18.2.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/react": "^18.2.66",
18
+ "@types/react-dom": "^18.2.22",
19
+ "@vitejs/plugin-react": "^4.2.1",
20
+ "typescript": "^5.2.2",
21
+ "vite": "^5.2.0"
22
+ }
23
+ }
@@ -0,0 +1,21 @@
1
+ import { useState } from 'react'
2
+
3
+ function App() {
4
+ const [count, setCount] = useState(0)
5
+
6
+ return (
7
+ <div style={{ padding: '2rem', fontFamily: 'sans-serif' }}>
8
+ <h1>Vite + React + Aura</h1>
9
+ <div className="card">
10
+ <button onClick={() => setCount((count) => count + 1)}>
11
+ count is {count}
12
+ </button>
13
+ <p>
14
+ Edit <code>src/App.tsx</code> to start building your Aura app.
15
+ </p>
16
+ </div>
17
+ </div>
18
+ )
19
+ }
20
+
21
+ export default App
@@ -0,0 +1,40 @@
1
+ :root {
2
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
3
+ line-height: 1.5;
4
+ font-weight: 400;
5
+ color-scheme: light dark;
6
+ color: rgba(255, 255, 255, 0.87);
7
+ background-color: #242424;
8
+ }
9
+
10
+ body {
11
+ margin: 0;
12
+ display: flex;
13
+ place-items: center;
14
+ min-width: 320px;
15
+ min-height: 100vh;
16
+ }
17
+
18
+ h1 {
19
+ font-size: 3.2em;
20
+ line-height: 1.1;
21
+ }
22
+
23
+ button {
24
+ border-radius: 8px;
25
+ border: 1px solid transparent;
26
+ padding: 0.6em 1.2em;
27
+ font-size: 1em;
28
+ font-weight: 500;
29
+ font-family: inherit;
30
+ background-color: #1a1a1a;
31
+ cursor: pointer;
32
+ transition: border-color 0.25s;
33
+ }
34
+ button:hover {
35
+ border-color: #646cff;
36
+ }
37
+ button:focus,
38
+ button:focus-visible {
39
+ outline: 4px auto -webkit-focus-ring-color;
40
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react'
2
+ import ReactDOM from 'react-dom/client'
3
+ import App from './App'
4
+ import './index.css'
5
+
6
+ ReactDOM.createRoot(document.getElementById('root')!).render(
7
+ <React.StrictMode>
8
+ <App />
9
+ </React.StrictMode>,
10
+ )
@@ -0,0 +1,31 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "useDefineForClassFields": true,
5
+ "lib": [
6
+ "ES2020",
7
+ "DOM",
8
+ "DOM.Iterable"
9
+ ],
10
+ "module": "ESNext",
11
+ "skipLibCheck": true,
12
+ "moduleResolution": "bundler",
13
+ "allowImportingTsExtensions": true,
14
+ "resolveJsonModule": true,
15
+ "isolatedModules": true,
16
+ "noEmit": true,
17
+ "jsx": "react-jsx",
18
+ "strict": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "noFallthroughCasesInSwitch": true
22
+ },
23
+ "include": [
24
+ "src"
25
+ ],
26
+ "references": [
27
+ {
28
+ "path": "./tsconfig.node.json"
29
+ }
30
+ ]
31
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "skipLibCheck": true,
5
+ "module": "ESNext",
6
+ "moduleResolution": "bundler",
7
+ "allowSyntheticDefaultImports": true
8
+ },
9
+ "include": [
10
+ "vite.config.ts"
11
+ ]
12
+ }
@@ -0,0 +1,7 @@
1
+ import { defineConfig } from 'vite'
2
+ import react from '@vitejs/plugin-react'
3
+
4
+ // https://vitejs.dev/config/
5
+ export default defineConfig({
6
+ plugins: [react()],
7
+ })
@@ -0,0 +1,14 @@
1
+ # Aura Configuration
2
+ # API Key for Aura Proxy (if using managed service)
3
+ VITE_AURA_API_KEY=
4
+
5
+ # YouTube API Key (for YouTubeAIR)
6
+ # Get one here: https://console.cloud.google.com/apis/credentials
7
+ VITE_YOUTUBE_API_KEY=
8
+
9
+ # Saga Backend URL (for fallback options)
10
+ # Points to the deployed Cloud Run proxy by default
11
+ VITE_SAGA_API_URL=https://auraproxy-7bpt7e5tua-uc.a.run.app
12
+
13
+ # AlphaVantage Key (for StocksAIR)
14
+ STOCK_API_KEY=
@@ -0,0 +1,31 @@
1
+ # 🚀 Aura Starter Project
2
+
3
+ Welcome to your first Aura project! Aura is a UX framework designed for the **Gen-AI age**, following the **[[UI Retrieval Philosophy]]**.
4
+
5
+ This project provides a pre-configured environment to build and test **Agentic Interface Respondents (AIRs)** instantly using our built-in trial proxy.
6
+
7
+ ## 📖 Documentation Hub
8
+
9
+ To get started and master the Aura ecosystem, please refer to our official Wiki:
10
+
11
+ - **[[Aura Starter Quickstart]]**: Get up and running in 5 minutes.
12
+ - **[[AIR Anatomy]]**: Understand the building blocks of an agentic interface.
13
+ - **[[Aura Starter Rate Limits]]**: Details on your zero-config trial quota.
14
+ - **[[Aura Starter Upgrade Guide]]**: How to use your own API keys for production.
15
+
16
+ ## 🛠️ Commands
17
+
18
+ Inside your project directory, you can run:
19
+
20
+ | Command | Description |
21
+ | :--- | :--- |
22
+ | `npm run dev` | Spins up the development server and launches **The Space**. |
23
+ | `npm run build` | Builds the project for production deployment. |
24
+ | `npm run preview` | Previews the production build locally. |
25
+
26
+ ---
27
+
28
+ ## 🏗️ Architecture Note
29
+ Aura is not just a layout; it's an environment. Your AIRs (located in `src/airs/`) communicate via **[[Flux]]** and are managed by the **Atmosphere** (Registry).
30
+
31
+ For advanced orchestration and multi-agent coordination, visit the **[[Developer-Guide]]**.
@@ -0,0 +1,24 @@
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ dist
12
+ dist-ssr
13
+ *.local
14
+
15
+ # Editor directories and files
16
+ .vscode/*
17
+ !.vscode/extensions.json
18
+ .idea
19
+ .DS_Store
20
+ *.suo
21
+ *.ntvs*
22
+ *.njsproj
23
+ *.sln
24
+ *.sw?
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Aura Configuration
3
+ *
4
+ * This file configures the Aura features used by this application.
5
+ */
6
+
7
+ // Local AIRs that this application uses
8
+ export const LOCAL_AIRS = [
9
+ 'tasks-air',
10
+ 'youtube-player-air',
11
+ 'stocks-air',
12
+ 'currency-air'
13
+ ];
14
+
15
+ // Tour flow config path
16
+ export const TOUR_FLOW_PATH = './src/components/TourGuide/tour-flow.yaml';
17
+
18
+ // Default project ID for the tour
19
+ export const DEFAULT_PROJECT_ID = 'aura-tour-demo';
@@ -0,0 +1,23 @@
1
+ import js from '@eslint/js'
2
+ import globals from 'globals'
3
+ import reactHooks from 'eslint-plugin-react-hooks'
4
+ import reactRefresh from 'eslint-plugin-react-refresh'
5
+ import tseslint from 'typescript-eslint'
6
+ import { defineConfig, globalIgnores } from 'eslint/config'
7
+
8
+ export default defineConfig([
9
+ globalIgnores(['dist']),
10
+ {
11
+ files: ['**/*.{ts,tsx}'],
12
+ extends: [
13
+ js.configs.recommended,
14
+ tseslint.configs.recommended,
15
+ reactHooks.configs.flat.recommended,
16
+ reactRefresh.configs.vite,
17
+ ],
18
+ languageOptions: {
19
+ ecmaVersion: 2020,
20
+ globals: globals.browser,
21
+ },
22
+ },
23
+ ])
@@ -0,0 +1,16 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8" />
6
+ <link rel="icon" type="image/png" href="/favicon.png" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <title>Aura Starter</title>
9
+ </head>
10
+
11
+ <body>
12
+ <div id="root"></div>
13
+ <script type="module" src="/src/main.tsx"></script>
14
+ </body>
15
+
16
+ </html>
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "aura-starter",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "tsc -b && vite build",
9
+ "lint": "eslint .",
10
+ "preview": "vite preview"
11
+ },
12
+ "dependencies": {
13
+ "@minnai/aura": "^0.1.6",
14
+ "@monaco-editor/react": "^4.7.0",
15
+ "firebase": "^12.8.0",
16
+ "react": "^19.2.0",
17
+ "react-dom": "^19.2.0",
18
+ "react-router-dom": "^7.12.0",
19
+ "recharts": "^3.7.0",
20
+ "yaml": "^2.8.2"
21
+ },
22
+ "devDependencies": {
23
+ "@eslint/js": "^9.39.1",
24
+ "@types/node": "^24.10.1",
25
+ "@types/react": "^19.2.5",
26
+ "@types/react-dom": "^19.2.3",
27
+ "@types/react-router-dom": "^5.3.3",
28
+ "@vitejs/plugin-react": "^5.1.1",
29
+ "eslint": "^9.39.1",
30
+ "eslint-plugin-react-hooks": "^7.0.1",
31
+ "eslint-plugin-react-refresh": "^0.4.24",
32
+ "globals": "^16.5.0",
33
+ "typescript": "~5.9.3",
34
+ "typescript-eslint": "^8.46.4",
35
+ "vite": "^7.2.4"
36
+ }
37
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "base": "USD",
3
+ "rates": {
4
+ "EUR": 0.92,
5
+ "GBP": 0.79,
6
+ "JPY": 148.5,
7
+ "CAD": 1.35
8
+ }
9
+ }
@@ -0,0 +1 @@
1
+ [BINARY_CONTENT]
@@ -0,0 +1,32 @@
1
+ #root {
2
+ width: 100vw;
3
+ height: 100vh;
4
+ margin: 0;
5
+ padding: 0;
6
+ }
7
+
8
+ :root {
9
+ --bg-app: #f5f5f7;
10
+ --bg-sidebar: #ffffff;
11
+ --bg-primary: #ffffff;
12
+ --bg-secondary: #f0f0f5;
13
+ --text-primary: #1d1d1f;
14
+ --text-secondary: #86868b;
15
+ --text-tertiary: #d2d2d7;
16
+ --border-color: #e5e5e5;
17
+ --border-subtle: rgba(0, 0, 0, 0.05);
18
+ --accent-primary: #007aff;
19
+ --accent-hover: #0062cc;
20
+ }
21
+
22
+ * {
23
+ box-sizing: border-box;
24
+ }
25
+
26
+ body {
27
+ margin: 0;
28
+ padding: 0;
29
+ background-color: var(--bg-app);
30
+ color: var(--text-primary);
31
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
32
+ }
@@ -0,0 +1,82 @@
1
+ import { useState, useEffect } from 'react';
2
+ import { BrowserRouter, Routes, Route, useSearchParams } from 'react-router-dom';
3
+ import { Space, ControllerProvider, ChatInterface, createStorage } from '@minnai/aura';
4
+ import { AuraProvider } from '@minnai/aura/sdk';
5
+ import { flux } from '@minnai/aura/flux/index';
6
+ import { registerExampleAIRs } from './ambiance';
7
+ import { AnalyticsTracker } from './components/AnalyticsTracker';
8
+ import { TourGuide } from './components/TourGuide';
9
+ import { analyticsService } from './services/AnalyticsService';
10
+ import { ProjectSidebar } from './components/ProjectSidebar/ProjectSidebar';
11
+ import './App.css';
12
+
13
+ const baseAuraConfig = {
14
+ llm: {
15
+ gatewayUrl: 'https://auraproxy-7bpt7e5tua-uc.a.run.app',
16
+ proxyUrl: 'https://auraproxy-7bpt7e5tua-uc.a.run.app'
17
+ },
18
+ apiUrl: 'https://auraproxy-7bpt7e5tua-uc.a.run.app',
19
+ storage: {
20
+ documents: { driver: 'indexeddb' as any },
21
+ objects: { driver: 'indexeddb' as any }
22
+ }
23
+ };
24
+
25
+ createStorage(baseAuraConfig.storage);
26
+
27
+ const defaultProjectId = 'aura-tour-demo';
28
+
29
+ function Home() {
30
+ const [searchParams] = useSearchParams();
31
+ const projectId = searchParams.get('project') || defaultProjectId;
32
+
33
+ return (
34
+ <div style={{ display: 'flex', height: '100vh', width: '100vw', background: '#f5f5f7' }}>
35
+ {/* Reset explicit projectId passing to TourController if it reads from hook, or pass it */}
36
+ {/* We will pass it to keep it pure if possible, or render it here knowing it can use hooks */}
37
+ <TourGuide projectId={projectId} />
38
+ <ProjectSidebar currentProjectId={projectId} />
39
+ <aside style={{
40
+ width: '350px',
41
+ borderRight: '1px solid #ddd',
42
+ background: 'white',
43
+ display: 'flex',
44
+ flexDirection: 'column',
45
+ zIndex: 10
46
+ }}>
47
+ <ChatInterface
48
+ placeholder="Talk to Aura..."
49
+ />
50
+ </aside>
51
+ <main style={{ flex: 1, position: 'relative', overflow: 'hidden', background: '#fff' }}>
52
+ <Space projectId={projectId} />
53
+ </main>
54
+ </div>
55
+ );
56
+ }
57
+
58
+ function App() {
59
+ const [sessionId] = useState(() => 'sess_' + Math.random().toString(36).substr(2, 9));
60
+ const config = { ...baseAuraConfig, sessionId };
61
+
62
+ useEffect(() => {
63
+ registerExampleAIRs();
64
+ analyticsService.startTTVTimer();
65
+ (window as any).flux = flux;
66
+ }, []);
67
+
68
+ return (
69
+ <AuraProvider config={config}>
70
+ <ControllerProvider>
71
+ <BrowserRouter>
72
+ <AnalyticsTracker />
73
+ <Routes>
74
+ <Route path="/" element={<Home />} />
75
+ </Routes>
76
+ </BrowserRouter>
77
+ </ControllerProvider>
78
+ </AuraProvider>
79
+ );
80
+ }
81
+
82
+ export default App;