A Chrome extension that automatically captures and organizes your browsing sessions into a personal knowledge management system with ML-powered semantic search and knowledge graph visualization.
- Prerequisites
- Setup Instructions
- Build Instructions
- Run Instructions
- Demo Video
- Running Evaluations
- Project Structure
- Documentation
- Technology Stack
Before you begin, ensure you have the following installed:
- Node.js: v18.0.0 or higher
- pnpm (recommended) or npm
- Chrome Browser: v120 or higher
- Git: For version control
git clone https://github.ecodesamsung.com/SRIB-PRISM/WAH_Aegis
cd WAH_AegisUsing pnpm:
pnpm installCheck that all dependencies are installed:
pnpm listBuild the extension in development mode with automatic recompilation:
pnpm devOutput:
build/chrome-mv3-dev/
Create an optimized production bundle:
pnpm buildOutput:
build/chrome-mv3-prod/
After running pnpm build:
- Open Chrome and navigate to:
chrome://extensions/ - Enable Developer Mode (toggle in top-right corner)
- Click Load unpacked and select the build folder:
path/to/WAH_Aegis/build/chrome-mv3-prod/
- Extension loaded! The Konta icon will appear in your toolbar
- Click the extension icon – open the popup
- Follow onboarding steps – set up Konta for the first time
- Open the sidepanel – access from the popup or extension menu
- Browse some pages – sessions are captured automatically
- View your knowledge graph – see relationships between pages
Direct link: https://youtu.be/BNX6pw3au-s
The project includes automated evaluation scripts for testing core algorithms:
First, install ts-node for running TypeScript directly:
pnpm add -D ts-nodeTests clustering algorithm with 8 topic clusters + ambiguous/noise pages. Metrics: Precision, Recall, F1 Score, Purity
pnpm exec ts-node evaluation/knowledge-graph-eval.tsCompares Layer-1 (strict keyword) vs Layer-2 (semantic) search. Metrics: Rank@1, NDCG@5
pnpm exec ts-node evaluation/layer1_2.tsTests project detection algorithm with 50 synthetic candidates (35 real, 15 noise). Metrics: Precision, Recall, F1 Score, Confusion Matrix
pnpm exec ts-node evaluation/project_detection.tsFor convenience, add these to package.json scripts:
"eval:graph": "ts-node evaluation/knowledge-graph-eval.ts",
"eval:layers": "ts-node evaluation/layer1_2.ts",
"eval:project": "ts-node evaluation/project_detection.ts",
"eval:all": "pnpm eval:graph && pnpm eval:layers && pnpm eval:project"Then run evaluations with:
pnpm eval:all # Run all evaluations
pnpm eval:graph # Knowledge graph clustering only
pnpm eval:layers # Search comparison only
pnpm eval:project # Project detection onlysrc/
├── popup.tsx # Extension popup UI
├── sidepanel.tsx # Sidepanel UI
├── style.css # Global styles
├── background/
│ ├── index.ts # Service worker (background script)
│ ├── sessionManager.ts # Session detection & management
│ ├── projectManager.ts # Project management
│ ├── embedding-engine.ts # ML embedding generation
│ ├── sessionStore.ts # Session storage
│ ├── blocklistStore.ts # Blocklist management
│ ├── candidateDetector.ts # Project candidate detection
│ ├── consent-listener.ts # User consent handling
│ ├── contextLearning.ts # Context learning logic
│ ├── ephemeralBehavior.ts # Ephemeral behavior tracking
│ ├── focusModeManager.ts # Focus mode management
│ ├── historyImporter.ts # Browser history import
│ ├── labelledSessionsStore.ts # Labelled sessions storage
│ ├── labelsStore.ts # Labels storage
│ ├── layer3-ml-ranker.ts # ML-based ranking
│ ├── page-event-listeners.ts # Page event handling
│ ├── projectSuggestions.ts # Project suggestion logic
│ ├── reminderManager.ts # Reminder management
│ ├── search-coordinator.ts # Search coordination
│ ├── sidepanel-listeners.ts # Sidepanel event listeners
│ ├── similarity-notifier.ts # Similarity notifications
│ └── testHelpers.ts # Testing utilities
│
├── components/
│ ├── NotificationToast.tsx # Toast notification component
│ ├── onboarding/
│ │ ├── ConsentModal.tsx
│ │ ├── WelcomeBackModal.tsx
│ │ └── WelcomeModal.tsx
│ ├── sidepanel/
│ │ ├── CoiPanel.tsx
│ │ ├── EmptyState.tsx
│ │ ├── FocusPanel.tsx
│ │ ├── GraphPanel.tsx
│ │ ├── GraphPanel.tsx.backup
│ │ ├── PopulatedState.tsx
│ │ ├── ProjectPanel.tsx
│ │ └── SettingsModal.tsx
│ └── ui/ # Shared UI components (shadcn/ui)
│ ├── button.tsx
│ ├── checkbox.tsx
│ ├── dialog.tsx
│ └── input.tsx
│
├── contents/ # Content scripts
│ ├── add-to-project-button.tsx
│ ├── consent.tsx
│ ├── google-search.tsx
│ ├── indicator.tsx
│ ├── notification.ts
│ ├── page-capture.ts
│ ├── project-notification.ts
│ └── scroll-tracker.ts
│
├── derived/
│ ├── index.ts
│ └── types.ts
│
├── lib/
│ ├── coi.ts
│ ├── context-classifier.ts
│ ├── knowledge-graph.ts
│ ├── layer1-keyword-search.ts
│ ├── layer2-semantic-search.ts
│ ├── logger.ts
│ ├── resource-extractor.ts
│ ├── search-explainer.ts
│ ├── session-title-inference.ts
│ └── utils.ts
│
├── tabs/
│ └── graph.tsx # Full-page graph view
│
├── types/
│ ├── index.ts
│ ├── ephemeral-behavior.ts
│ ├── focus-mode.ts
│ ├── page-event.ts
│ ├── project-candidate.ts
│ ├── project.ts
│ ├── session.ts
│ └── settings.ts
│
assets/
├── Ambient-Motion.json
├── Ambient-Motion.lottie
├── BreezeSans-Regular.ttf
├── icon.png
├── konta_logo.svg
├── ort-wasm-simd-threaded.wasm
├── ort-wasm-simd.wasm
├── ort-wasm-threaded.wasm
└── ort-wasm.wasm
│
build/
├── chrome-mv3-dev/ # Development build
└── chrome-mv3-prod/ # Production build
│
Root Configuration Files:
├── .github/
├── .gitignore
├── .plasmo/
├── .prettierrc.mjs
├── components.json
├── DARK_MODE_GUIDE.md
├── DARK_MODE_IMPLEMENTATION.md
├── package.json
├── pnpm-lock.yaml
├── postcss.config.js
├── README.md
├── tailwind.config.js
└── tsconfig.json
| Category | Technology | Version |
|---|---|---|
| Framework | Plasmo | 0.90.5 |
| UI | React | 18.2.0 |
| Language | TypeScript | 5.3.3 |
| Styling | Shadcn and Tailwind CSS | 3.4.19 |
| ML | Transformers.js | 2.17.2 |
| Graph | react-force-graph-2d | 1.29.0 |
| Icons | Lucide React | 0.562.0 |
Built with ❤️ by Team Aegis, Thapar University
