Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,3 @@
# GraphQL API endpoint
VITE_OSWATCHER_API_URI=http://localhost:4000

# Auth0 Configuration
# Get these values from your Auth0 dashboard (https://manage.auth0.com/)
7 changes: 3 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@
# api.oswatcher.com, a domain that no longer resolves. The Pages site was
# unpublished, so the deploy step could only fail.
#
# The frontend is deliberately not published as a container image: it is a Vue
# SPA whose API URI and Auth0 configuration are baked in at build time via
# VITE_* build args, so one image cannot serve more than a single deployment.
# compose.prod.yml therefore builds it from source with per-deployment args.
# Publishing is handled by deploy.yml, which pushes the image to GHCR. The
# bundle is built with a placeholder API URI that docker-entrypoint.sh
# substitutes at container start, so one image serves any deployment.
name: Build

on:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# The image is built WITHOUT VITE_* build args on purpose. Vite resolves
# import.meta.env.* at build time, so the bundle is baked with the sentinel
# defaults from the Dockerfile and docker-entrypoint.sh substitutes the real
# API URI and Auth0 configuration when the container starts. That is what lets
# API URI when the container starts. That is what lets
# a single published image serve any deployment.
name: Deploy to GHCR

Expand Down
18 changes: 3 additions & 15 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
### Technology Stack
- **Frontend**: Vue 3 with Composition API and TypeScript
- **UI Framework**: Naive UI component library
- **Authentication**: Auth0 (optional, configured via environment variables)
- **GraphQL**: Apollo Client for API communication
- **Build Tool**: Vite with Vue plugin
- **Styling**: CSS with scoped component styles
Expand All @@ -39,7 +38,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
- `src/components/` - Reusable Vue components organized by feature
- `src/router/` - Vue Router configuration
- `src/queries.ts` - GraphQL queries and mutations
- `src/graphql-client.ts` - Apollo Client setup and configuration with Auth0 token injection
- `src/graphql-client.ts` - Apollo Client setup and configuration
- `src/graphql-types.ts` - Auto-generated TypeScript types from GraphQL schema
- `docs/reference/` - Technical reference documentation (VitePress)

Expand All @@ -52,7 +51,6 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
- **Single Mode**: View a single commit's data (filesystem, registry, symbols)
- **Comparison Mode**: Compare two commits showing differences
- Supports both unified and side-by-side layouts
3. **Authentication** (`CallbackView`): Auth0 integration for user authentication (optional, not enforced by default)

### GraphQL Integration
- Schema located at `schema.graphql` defines the data model
Expand All @@ -75,16 +73,8 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
#### Required Environment Variables
- `VITE_OSWATCHER_API_URI` - GraphQL API endpoint URL (used for Apollo Client and blob downloads via REST API `/blob/:hash`)

#### Optional Environment Variables (Auth0)
- `VITE_AUTH0_DOMAIN` - Auth0 tenant domain (e.g., your-tenant.us.auth0.com)
- `VITE_AUTH0_CLIENT_ID` - Auth0 application client ID
- `VITE_AUTH0_AUDIENCE` - Auth0 API identifier for access tokens

Authentication is optional and not enforced by default. When configured, the application will:
- Display login/logout UI in the header
- Automatically include Bearer tokens in GraphQL requests
- Support social login (Google, GitHub) and email/password authentication
- Use localStorage with refresh tokens for persistent sessions
The frontend is unauthenticated. Auth0 was removed once the deployment became
public; there is no login flow and no token injection.

#### Development Setup
1. Copy `.env.example` to `.env` and configure required variables
Expand Down Expand Up @@ -113,8 +103,6 @@ The project includes comprehensive technical reference documentation:
### Development Notes
- **Search functionality**: Global filesystem search available via Ctrl+K (streams results from GraphQL)
- **Backend**: Expects Neo4j-backed GraphQL API serving commit, filesystem, registry, and PDB data
- **Authentication**: Auth0 integration is optional and can be enabled via environment variables
- **UI Library**: Naive UI provides consistent component design and theming
- **Type Safety**: Enforced through TypeScript and auto-generated GraphQL types
- **Token Management**: Apollo Client automatically injects Auth0 Bearer tokens when available
- **Routing**: Uses Vue Router with support for single and comparison inspector modes
1 change: 0 additions & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ OSWatcher Frontend is a Vue.js application for exploring operating system analys

- **Frontend**: Vue 3 with Composition API and TypeScript
- **UI Framework**: Naive UI component library
- **Authentication**: Auth0 (optional)
- **GraphQL**: Apollo Client for API communication
- **Build Tool**: Vite with Vue plugin
- **Styling**: CSS with scoped component styles
Expand Down
3 changes: 1 addition & 2 deletions docs/reference/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ This document provides a complete technical reference for the OSWatcher Frontend
src/
├── views/ # Main application views
│ ├── HomeView.vue # Commit history view
│ ├── InspectorView.vue # Unified inspector (single/comparison modes)
│ └── CallbackView.vue # Auth0 callback handler
│ └── InspectorView.vue # Unified inspector (single/comparison modes)
├── components/ # Reusable components
│ ├── FilesystemInspector.vue # Filesystem inspector (single/comparison)
│ ├── RegistryInspector.vue # Registry inspector (single/comparison)
Expand Down
78 changes: 1 addition & 77 deletions docs/reference/environment.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,71 +34,6 @@ if (!apiUri) {

**File Location:** `src/graphql-client.ts:6-8`, `src/download.ts`, `src/utils/filesystem.ts`

## Optional Environment Variables

### Auth0 Configuration

Auth0 authentication is integrated but optional. If not configured, the application will still function but authentication features will not work.

#### `VITE_AUTH0_DOMAIN`

**Type:** `string`
**Required:** No (for authentication features)
**Description:** Your Auth0 tenant domain.

**Example Values:**
```bash
VITE_AUTH0_DOMAIN=your-tenant.us.auth0.com
```

**How to obtain:**
1. Log in to [Auth0 Dashboard](https://manage.auth0.com/)
2. Navigate to your Application settings
3. Copy the "Domain" field

**File Location:** `src/main.ts`

#### `VITE_AUTH0_CLIENT_ID`

**Type:** `string`
**Required:** No (for authentication features)
**Description:** Your Auth0 application client ID.

**Example Values:**
```bash
VITE_AUTH0_CLIENT_ID=abc123xyz789
```

**How to obtain:**
1. Log in to [Auth0 Dashboard](https://manage.auth0.com/)
2. Navigate to Applications > Applications
3. Select your SPA application
4. Copy the "Client ID" field

**File Location:** `src/main.ts`

#### `VITE_AUTH0_AUDIENCE`

**Type:** `string`
**Required:** No (for API authentication)
**Description:** Your Auth0 API identifier (audience). Required for obtaining access tokens for the GraphQL API.

**Example Values:**
```bash
VITE_AUTH0_AUDIENCE=https://your-api.example.com
```

**How to obtain:**
1. Log in to [Auth0 Dashboard](https://manage.auth0.com/)
2. Navigate to Applications > APIs
3. Create or select your API
4. Copy the "Identifier" field

**File Location:** `src/main.ts`

**Backend Integration:**
The backend Neo4j GraphQL server must be configured to verify Auth0 JWT tokens using the JWKS endpoint.

## Environment File Setup

### Standalone vs. OSWatcher Deploy
Expand All @@ -113,10 +48,6 @@ Create a `.env` file in the project root:
# Backend API endpoint (GraphQL and blob downloads)
VITE_OSWATCHER_API_URI=http://localhost:4000

# Auth0 Configuration (optional)
VITE_AUTH0_DOMAIN=your-tenant.us.auth0.com
VITE_AUTH0_CLIENT_ID=your_client_id_here
VITE_AUTH0_AUDIENCE=https://your-api.example.com
```

### Production Environment
Expand All @@ -127,10 +58,6 @@ Environment variables should be set through your deployment platform:
# Backend API endpoint (GraphQL and blob downloads)
VITE_OSWATCHER_API_URI=https://api.oswatcher.com

# Auth0 Configuration (optional)
VITE_AUTH0_DOMAIN=your-tenant.us.auth0.com
VITE_AUTH0_CLIENT_ID=your_production_client_id
VITE_AUTH0_AUDIENCE=https://api.oswatcher.com
```

## Variable Naming Convention
Expand Down Expand Up @@ -189,9 +116,6 @@ Environment variable types are defined in `env.d.ts`:
```typescript
interface ImportMetaEnv {
readonly VITE_OSWATCHER_API_URI: string
readonly VITE_AUTH0_DOMAIN: string
readonly VITE_AUTH0_CLIENT_ID: string
readonly VITE_AUTH0_AUDIENCE: string
}
```

Expand All @@ -213,7 +137,7 @@ interface ImportMetaEnv {
3. **File Download Failures**
- Verify `VITE_OSWATCHER_API_URI` is correctly configured
- Check that the backend REST API `/blob/:hash` endpoint is accessible
- Ensure proper authentication/access permissions
- Ensure the blob exists in object storage

### Debugging

Expand Down
3 changes: 0 additions & 3 deletions env.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

interface ImportMetaEnv {
readonly VITE_OSWATCHER_API_URI: string
readonly VITE_AUTH0_DOMAIN: string
readonly VITE_AUTH0_CLIENT_ID: string
readonly VITE_AUTH0_AUDIENCE: string
}

interface ImportMeta {
Expand Down
Loading