Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
cd5eee0
feat: add Integration Hub — auto-detect service health + setup modals
rafaelscosta Mar 10, 2026
4f11715
feat: integration hub enhancements — tests, onboarding, badge, engine…
rafaelscosta Mar 10, 2026
cdd63d7
feat: add Telegram, Google Drive and Google Calendar integrations
rafaelscosta Mar 10, 2026
f7f4e27
feat: Telegram engine routes, Google OAuth flow, SPA↔Engine sync
rafaelscosta Mar 10, 2026
ab65647
fix: resolve Turbopack build error caused by invalid symlink traversal
rafaelscosta Mar 10, 2026
75088b1
refactor: remove 24 debug console.logs, convert 7 to warn/error/debug
rafaelscosta Mar 10, 2026
e25935c
refactor: eliminate 40+ :any types across 8 files, reduce to 3 intent…
rafaelscosta Mar 10, 2026
2ef17e4
perf: lazy-load views and modals, eliminate export * barrel re-exports
rafaelscosta Mar 10, 2026
9166a36
test: add 59 tests for utils, domain-taxonomy, and executionLogStore
rafaelscosta Mar 10, 2026
1dfae33
refactor: remove dead code — unused hooks, imports, and constants
rafaelscosta Mar 10, 2026
7ce4cfd
a11y: add aria-labels, keyboard support, and semantic roles
rafaelscosta Mar 10, 2026
9d4f839
perf: optimize re-renders with memo, useMemo, and selective store sub…
rafaelscosta Mar 10, 2026
1844959
experiment(8): add error boundaries for view-level crash isolation
rafaelscosta Mar 10, 2026
9150ab0
ci: add full dashboard CI pipeline and continuous metrics gate
rafaelscosta Mar 10, 2026
e71c2f3
experiment(9): eliminate all :any types — zero remaining
rafaelscosta Mar 10, 2026
a6cf532
experiment(10): convert all barrel exports to named exports
rafaelscosta Mar 10, 2026
5107356
experiment(11): convert zustand destructuring to selective subscriptions
rafaelscosta Mar 10, 2026
ff144a9
experiment(12): fix 4 vulnerabilities and update dependencies
rafaelscosta Mar 10, 2026
1735e2d
experiment(13): add env validation module and .env.example
rafaelscosta Mar 10, 2026
211dd0d
experiment(14): unify API fetchers via apiClient
rafaelscosta Mar 10, 2026
291d4a6
experiment(15): add bundle analyzer and npm scripts
rafaelscosta Mar 10, 2026
2a746db
chore: update metrics baseline after experiments #9-#15
rafaelscosta Mar 10, 2026
03ee021
experiment(17): fix missing highlight.js dependency, bundle audit
rafaelscosta Mar 10, 2026
9cf41d5
feat: add Vault, Marketplace, Brainstorm views + engine/integrations …
rafaelscosta Mar 10, 2026
e029e07
feat: add remaining marketplace escrow, dashboard/integrations API ro…
rafaelscosta Mar 10, 2026
36e1ef6
feat: add dashboard overview, marketplace agents, settings service an…
rafaelscosta Mar 10, 2026
3fe7917
fix: resolve JSDoc syntax error in knowledge/agents route
rafaelscosta Mar 10, 2026
69fdc5d
experiment(20): expand test coverage 124 → 272 tests (+148)
rafaelscosta Mar 10, 2026
fb26c08
experiment(24): cap execution logs at 500 entries
rafaelscosta Mar 10, 2026
ed46413
chore: final metrics baseline after all experiments
rafaelscosta Mar 10, 2026
0be3274
feat: add P11-P17 plug & play dashboard features
rafaelscosta Mar 10, 2026
b71a3e0
feat: add P18 Team Config Sync — shared integration profiles via Supa…
rafaelscosta Mar 10, 2026
4ad72f4
feat: replace mock data with real APIs across dashboard views
rafaelscosta Mar 11, 2026
2d63073
fix(engine): AIOS_PROJECT_ROOT env var overrides config file project …
rafaelscosta Mar 12, 2026
59127bc
feat: add AIOS Project Emulator for synthetic project testing
rafaelscosta Mar 12, 2026
cc53f86
chore: remove legacy Next.js app
rafaelscosta Mar 12, 2026
54c236d
feat: add engine programs & overnight execution system
rafaelscosta Mar 12, 2026
1343cdf
feat: enhance orchestration with artifacts & vault import
rafaelscosta Mar 12, 2026
6d6402c
feat: dashboard UI enhancements & brainstorm updates
rafaelscosta Mar 12, 2026
5689797
refactor: update hooks, services & stores for engine integration
rafaelscosta Mar 12, 2026
87fa542
feat: vault overview lint fixes & P0 tests [Story 7.1]
rafaelscosta Mar 12, 2026
e5390b8
chore: infrastructure, migrations & deployment config
rafaelscosta Mar 12, 2026
e6e7965
feat: parse agent YAML content, fix engine API integration & remove v…
rafaelscosta Mar 13, 2026
86e7c26
chore: initial commit
oalanicolas Mar 13, 2026
d545d52
feat: initial dashboard codebase
rafaelscosta Mar 13, 2026
ed26b17
feat(dashboard-premium): bootstrap shadcn/ui with AIOX theme bridge […
oalanicolas Mar 13, 2026
dce6f76
feat: rebuild engine for Bob orchestrator + integrate shadcn/ui + pre…
rafaelscosta Mar 13, 2026
9a785c1
fix(dashboard-premium): use blue as secondary/accent in shadcn bridge
oalanicolas Mar 13, 2026
e497c63
fix(dashboard-premium): align shadcn components with dashboard-aiox-l…
oalanicolas Mar 13, 2026
a74a8f5
fix(dashboard-premium): register ds-preview route in URL sync
oalanicolas Mar 13, 2026
8ac503d
fix: resolve all build errors — 76 TS errors → 0
rafaelscosta Mar 13, 2026
120b66a
feat: add DS Preview route and sidebar navigation
rafaelscosta Mar 13, 2026
9da1813
Merge remote-tracking branch 'premium/main' into feat/glass-ui-design…
rafaelscosta Mar 13, 2026
c787a01
feat(vault): implement Vault SSOT Phase 1 + Phase 2
rafaelscosta Mar 13, 2026
0bc223a
feat(creatives): replace placeholder images with AIOX brandbook assets
rafaelscosta Mar 13, 2026
f4b1077
fix: suppress single-key shortcuts inside modals and dialogs
rafaelscosta Mar 13, 2026
f61753f
feat: Marketing Hub v2 + Dashboard panels + Charts system + Engine ro…
rafaelscosta Mar 14, 2026
536f8df
fix(terminal): parse JSON lines into structured readable output
rafaelscosta Mar 14, 2026
9231c6d
fix(terminal): split concatenated JSON blobs before parsing
rafaelscosta Mar 14, 2026
c49cf39
fix(agents): parse YAML frontmatter + extract commands from markdown …
rafaelscosta Mar 14, 2026
cda7848
fix(chat): stop slash command menu from auto-scrolling on hover
rafaelscosta Mar 14, 2026
94aa55d
fix(chat): allow sending messages for core agents without squadId
rafaelscosta Mar 14, 2026
686b550
fix(engine): return squadId field and { agents, count } shape from re…
rafaelscosta Mar 14, 2026
5ba7ee6
feat(engine): implement /stream/agent with Claude CLI SSE streaming
rafaelscosta Mar 14, 2026
ea2ab5a
fix(engine): align /stream/agent SSE events with frontend contract
rafaelscosta Mar 14, 2026
190e2dd
feat(chat): persist conversations to Supabase alongside localStorage
rafaelscosta Mar 14, 2026
608800d
feat(chat): dynamic slash commands and suggestions per agent
rafaelscosta Mar 14, 2026
11b88f2
fix(engine): handle Claude CLI message as string or object
rafaelscosta Mar 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
21 changes: 21 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
node_modules
dist
dist-ssr
.env
.env.*
!.env.example
engine/node_modules
engine/data
engine/.workspace
packages/cli/node_modules
test-results
coverage
playwright-report
storybook-static
audit-screenshots
.squads-design
.codex
.claude
.git
.DS_Store
*.log
39 changes: 39 additions & 0 deletions .env.deploy.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# ============================================================
# AIOS Platform — Production .env for Docker Compose
# ============================================================
# Copy this file to .env on your VPS:
# cp .env.deploy.example .env
#
# Docker Compose reads .env automatically.
# ============================================================

# ─── REQUIRED ─────────────────────────────────────────────

# Encryption key for the secrets vault. Generate with:
# openssl rand -hex 32
ENGINE_SECRET=CHANGE_ME_GENERATE_WITH_openssl_rand_hex_32

# ─── DOMAIN & SSL ─────────────────────────────────────────

# Your domain (used by the VPS setup script)
DOMAIN=aios.your-domain.com

# ─── CORS (optional) ─────────────────────────────────────

# Comma-separated allowed origins. Leave empty for same-origin.
# CORS_ORIGINS=https://aios.your-domain.com

# ─── OPTIONAL SERVICES ───────────────────────────────────

# Telegram bot
# TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
# TELEGRAM_WEBHOOK_URL=https://aios.your-domain.com/telegram/webhook

# Google OAuth
# GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
# GOOGLE_CLIENT_SECRET=your-client-secret

# WhatsApp (WAHA) — enable with: docker compose --profile messaging up
# WHATSAPP_PROVIDER=waha
# WAHA_API_KEY=your-waha-key
# WAHA_SESSION=default
40 changes: 40 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# ============================================================
# AIOS Platform — Environment Variables
# ============================================================
# Copy this file to .env.development (local) or .env.production (cloud)
# cp .env.example .env.development
# NEVER commit .env files with real credentials!
#
# Legend:
# REQUIRED = must be set for the feature to work
# OPTIONAL = has sensible defaults or enables extra functionality
# INTERNAL = set automatically in Docker; ignore for local dev
# ============================================================


# ─── Core: Engine API ─────────────────────────── REQUIRED ──
# The AIOS execution engine (Bun + Hono). Start with: npm run engine:dev
VITE_ENGINE_URL=http://localhost:4002

# ─── Core: Supabase ───────────────────────────── OPTIONAL ──
# Persistent task storage & realtime. Without it, data stays in localStorage.
# Get from: https://app.supabase.com → Project Settings → API
VITE_SUPABASE_URL=
VITE_SUPABASE_ANON_KEY=

# ─── Core: Monitor ────────────────────────────── OPTIONAL ──
# Standalone monitor service (port 4001). Not required for basic usage.
# VITE_MONITOR_URL=http://localhost:4001

# ─── Relay (cloud mode) ───────────────────────── OPTIONAL ──
# WebSocket relay for remote engine access. Only for cloud deployments.
# VITE_RELAY_URL=ws://localhost:8080
# VITE_RELAY_HTTP_URL=http://localhost:8080

# ─── WhatsApp ──────────────────────────────────── OPTIONAL ──
# SSE event stream from engine. Enable after configuring WhatsApp on engine.
# VITE_WHATSAPP_SSE_URL=/engine/whatsapp/events

# ─── GitHub OAuth ──────────────────────────────── OPTIONAL ──
# For GitHub integration features.
# VITE_AUTH_GITHUB_CLIENT_ID=your-github-client-id
4 changes: 4 additions & 0 deletions .env.local.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Local development with relay server running locally
VITE_MONITOR_URL=http://localhost:4001
VITE_RELAY_URL=ws://localhost:8080
VITE_RELAY_HTTP_URL=http://localhost:8080
109 changes: 38 additions & 71 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,131 +1,98 @@
name: CI
name: Dashboard CI

on:
push:
branches: [main, develop]
paths:
- 'dashboard/**'
- '.github/workflows/ci.yml'
pull_request:
branches: [main, develop]
paths:
- 'dashboard/**'
- '.github/workflows/ci.yml'

env:
NODE_VERSION: '20'

jobs:
# ─── Next.js Dashboard ──────────────────────────────────
nextjs-typecheck:
name: 'Next.js: TypeCheck'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- run: npm ci
- run: npx tsc --noEmit

nextjs-build:
name: 'Next.js: Build'
nextjs-lint:
name: 'Dashboard: Lint'
runs-on: ubuntu-latest
needs: [nextjs-typecheck]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- run: npm ci
- run: npm run build

# ─── Vite SPA (aios-platform) ──────────────────────────
spa-lint:
name: 'SPA: Lint'
runs-on: ubuntu-latest
defaults:
run:
working-directory: aios-platform
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
cache-dependency-path: aios-platform/package-lock.json
- run: npm ci
- run: npm run lint

spa-typecheck:
name: 'SPA: TypeCheck'
nextjs-typecheck:
name: 'Dashboard: TypeCheck'
runs-on: ubuntu-latest
defaults:
run:
working-directory: aios-platform
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
cache-dependency-path: aios-platform/package-lock.json
- run: npm ci
- run: npx tsc --noEmit
- run: npm run typecheck

spa-test:
name: 'SPA: Test (2453 tests)'
nextjs-test:
name: 'Dashboard: Test'
runs-on: ubuntu-latest
defaults:
run:
working-directory: aios-platform
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
cache-dependency-path: aios-platform/package-lock.json
- run: npm ci
- run: npx vitest run --project unit --reporter=verbose
- name: Upload coverage
- run: npm run test -- --reporter=verbose
- name: Test summary
if: always()
uses: actions/upload-artifact@v4
with:
name: spa-coverage
path: aios-platform/coverage/
retention-days: 7
run: |
echo "### Test Results" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
npm run test -- --reporter=json 2>/dev/null | tail -1 | node -e "
const d=JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
console.log('Tests: '+d.numTotalTests+' | Passed: '+d.numPassedTests+' | Failed: '+d.numFailedTests);
" >> $GITHUB_STEP_SUMMARY 2>/dev/null || echo "See logs above" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY

spa-build:
name: 'SPA: Build'
nextjs-build:
name: 'Dashboard: Build'
runs-on: ubuntu-latest
needs: [spa-lint, spa-typecheck, spa-test]
defaults:
run:
working-directory: aios-platform
needs: [nextjs-lint, nextjs-typecheck, nextjs-test]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
cache-dependency-path: aios-platform/package-lock.json
- run: npm ci
- run: npm run build
- name: Build size report
run: |
echo "### Build Size" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
du -sh dist/ >> $GITHUB_STEP_SUMMARY
du -sh .next/ >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY

# ─── Engine (Bun/Hono) ─────────────────────────────────
engine-test:
name: 'Engine: Test (98 tests)'
# ─── Quality Metrics Gate ────────────────────────────────
metrics-gate:
name: 'Dashboard: Metrics Gate'
runs-on: ubuntu-latest
defaults:
run:
working-directory: aios-platform/engine
needs: [nextjs-lint, nextjs-typecheck, nextjs-test]
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- uses: actions/setup-node@v4
with:
bun-version: latest
- run: bun install
- run: bun test tests/unit/
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- run: npm ci
- name: Run metrics check
run: node scripts/metrics.mjs --ci
110 changes: 110 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
name: Deploy

on:
push:
branches:
- main
- develop
workflow_dispatch:
inputs:
environment:
description: 'Deployment environment'
required: true
default: 'staging'
type: choice
options:
- staging
- production

env:
NODE_VERSION: '20'

jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Run tests
run: npm run test:run

- name: Build application
run: npm run build
env:
VITE_API_URL: ${{ secrets.VITE_API_URL }}
VITE_APP_ENV: ${{ github.ref == 'refs/heads/main' && 'production' || 'staging' }}

- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: build-${{ github.sha }}
path: dist/
retention-days: 7

deploy-staging:
name: Deploy to Staging
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/develop' || (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'staging')
environment:
name: staging
url: ${{ vars.STAGING_URL }}
steps:
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-${{ github.sha }}
path: dist/

- name: Deploy to staging
run: |
echo "Deploying to staging environment..."
# Add your deployment commands here
# Example: aws s3 sync dist/ s3://${{ secrets.STAGING_BUCKET }} --delete
# Example: netlify deploy --dir=dist --site=${{ secrets.NETLIFY_SITE_ID }}
echo "Deployment completed!"

deploy-production:
name: Deploy to Production
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || (github.event_name == 'workflow_dispatch' && github.event.inputs.environment == 'production')
environment:
name: production
url: ${{ vars.PRODUCTION_URL }}
steps:
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-${{ github.sha }}
path: dist/

- name: Deploy to production
run: |
echo "Deploying to production environment..."
# Add your deployment commands here
# Example: aws s3 sync dist/ s3://${{ secrets.PRODUCTION_BUCKET }} --delete
# Example: netlify deploy --dir=dist --site=${{ secrets.NETLIFY_SITE_ID }} --prod
echo "Deployment completed!"

notify:
name: Notify
needs: [deploy-staging, deploy-production]
if: always() && (needs.deploy-staging.result == 'success' || needs.deploy-production.result == 'success')
runs-on: ubuntu-latest
steps:
- name: Send notification
run: |
echo "Deployment notification sent!"
# Add notification logic here (Slack, Discord, email, etc.)
Loading