diff --git a/.claude/skills.md.backup b/.claude/skills.md.backup new file mode 100644 index 00000000..cf711a6e --- /dev/null +++ b/.claude/skills.md.backup @@ -0,0 +1,430 @@ +# Claude Skills + +**Purpose**: Codified patterns preventing rediscovery | **Version**: 1.1.0 +**Usage**: Copy `.claude/` to any project, run `update_skills` workflow + +--- + +## Skill Index (14 Core Skills) + +| # | Skill | Category | Trigger | +|---|-------|----------|---------| +| 1 | [Code Standards](#1-code-standards) | Quality | Writing code | +| 2 | [Error Handling](#2-error-handling) | Quality | Exceptions, APIs | +| 3 | [Security](#3-security) | Critical | Auth, input, secrets | +| 4 | [Testing](#4-testing) | Quality | New code, changes | +| 5 | [Git & Deploy](#5-git--deploy) | Process | Commits, releases | +| 6 | [Knowledge](#6-knowledge) | Ecosystem | Session start/end | +| 7 | [Orchestration](#7-orchestration) | Ecosystem | Multi-step tasks | +| 8 | [Handover](#8-handover) | Ecosystem | Agent delegation | +| 9 | [Logging](#9-logging) | Process | Workflows, debug | +| 10 | [Backend Patterns](#10-backend-patterns) | Backend | Endpoints, services | +| 11 | [Frontend Patterns](#11-frontend-patterns) | Frontend | Components, state | +| 12 | [Infrastructure](#12-infrastructure) | DevOps | Docker, CI/CD | +| 13 | [Workflow Logs](#13-workflow-logs) | Process | Session complete | +| 14 | [Context Switching](#14-context-switching) | Ecosystem | User interrupts | +| 15 | [UI Component Standardization](#15-ui-component-standardization) | Frontend | Theme consistency | + +--- + +## 1. Code Standards + +**Trigger**: Writing/modifying code + +``` +Files: <500 lines | Functions: <50 lines | Names: descriptive +Types: required | Docs: public APIs | DRY: no duplication +``` + +**Language Detection**: +| File | Stack | Apply | +|------|-------|-------| +| `*.py` | Python | PEP8, type hints, docstrings | +| `*.ts` | TypeScript | strict mode, interfaces | +| `*.go` | Go | gofmt, error returns | + +--- + +## 2. Error Handling + +**Trigger**: Exceptions, API responses + +```python +# Pattern: Custom exceptions + consistent API response +class AppError(Exception): + def __init__(self, msg: str, code: str, status: int = 500): + self.msg, self.code, self.status = msg, code, status + +# API Response: {"error": "msg", "code": "CODE", "details": {}} +``` + +**Rules**: +- ✅ No unhandled exceptions +- ✅ Consistent error format +- ✅ Appropriate HTTP codes +- ✅ Errors logged with context + +--- + +## 3. Security + +**Trigger**: Auth, input, secrets, dependencies + +``` +AUTH: Hash passwords (bcrypt) | JWT with expiry | Validate ownership +INPUT: Validate all inputs | Use ORM (no raw SQL) | Sanitize output +SECRETS: No hardcoded secrets | Use env vars | .env in .gitignore +DEPS: Audit regularly | No known vulnerabilities +``` + +**Checklist**: +- [ ] Passwords hashed +- [ ] Tokens expire +- [ ] Inputs validated +- [ ] No secrets in code +- [ ] Dependencies audited + +--- + +## 4. Testing + +**Trigger**: New code, changes + +``` +PYRAMID: Unit (many) → Integration (some) → E2E (few) +PATTERN: Arrange → Act → Assert +COVERAGE: Unit 80%+ | Critical paths 100% +``` + +**When to Test**: +| Change | Test Required | +|--------|--------------| +| New feature | Unit + integration | +| Bug fix | Regression test | +| Refactor | Existing tests pass | + +--- + +## 5. Git & Deploy + +**Trigger**: Commits, releases + +``` +BRANCHES: feature/[ticket]-desc | bugfix/[ticket]-desc | hotfix/[ticket]-desc +COMMITS: feat|fix|docs|refactor|test|chore: description +``` + +**Deploy Risk**: +| Factor | Risk | +|--------|------| +| DB migration | +3 | +| Auth changes | +3 | +| Breaking API | +3 | +| No tests | +2 | +| Has rollback | -2 | + +Score: 0-3 🟢 | 4-6 🟡 | 7+ 🔴 + +--- + +## 6. Knowledge + +**Trigger**: Session start/end, decisions, discoveries + +**Files**: +``` +project_knowledge.json → Project entities, codegraph, relations +.github/global_knowledge.json → Universal patterns (cross-project) +``` + +**JSONL Format** (matches actual project_knowledge.json): +```json +{"type":"entity","name":"Project.Module.Component","entityType":"Service","observations":["description","upd:YYYY-MM-DD,refs:N"]} +{"type":"codegraph","name":"Component.tsx","nodeType":"component","dependencies":["Store","Service"],"dependents":["Layout"]} +{"type":"relation","from":"Component","to":"Feature","relationType":"IMPLEMENTS|USES|CONSUMES|DEPENDS_ON"} +``` + +**Protocol**: +| Event | Action | +|-------|--------| +| Session start | Load knowledge, **EMIT** [KNOWLEDGE: loaded \| entities=N \| sources=M] | +| Decision made | Document rationale, alternatives | +| Bug fixed | Add pattern to knowledge | +| Session end | Update knowledge, create handover | + +--- + +## 7. Orchestration + +**Trigger**: Multi-step tasks, complex operations + +**Phases** (syncs with _DevTeam): +``` +CONTEXT → PLAN → COORDINATE → INTEGRATE → VERIFY → LEARN → COMPLETE + 1 2 3 4 5 6 7 +``` + +**Emissions**: +``` +[SESSION: role=Lead | task= | phase=CONTEXT] +[SKILLS: loaded=N | available: #1,#2,#3...] +[KNOWLEDGE: loaded | entities=N | sources=M] +[PHASE: PLAN | progress=2/7 | next=COORDINATE] +[SKILL: #N Name | applied] → when using a skill +[TASK: ] +├── [x] CONTEXT +├── [ ] DELEGATE→Agent ← current +└── [ ] COMPLETE +``` + +**Task Types**: +| Type | Phases | +|------|--------| +| Quick fix | CONTEXT→COORDINATE→COMPLETE | +| Feature | Full 7-phase | +| Bug | CONTEXT→COORDINATE→INTEGRATE→VERIFY→COMPLETE | + +--- + +## 8. Handover + +**Trigger**: Agent delegation, session end + +**Delegation** (syncs with agents): +``` +[DELEGATE: agent= | task=""] +Context: {"task":"...", "context":{"problem":"...", "files":[]}, "expected":"..."} + +[INTEGRATE: from= | status=complete|partial|blocked | result=""] +``` + +**Session Handover**: +```markdown +## Handover - [Date] +**Task**: [current] | **Phase**: [N/7] | **Branch**: [name] +### Completed: [x] item +### Pending: [ ] item +### Blockers: [if any] +### Key Files: path/file.ext - [change summary] +``` + +--- + +## 9. Logging + +**Trigger**: Workflow execution, debugging + +**Levels**: DEBUG → INFO → WARN → ERROR → CRITICAL + +**Workflow Log**: +``` +[WORKFLOW_LOG: task=] +Summary | Steps | Files | Quality Gates | Learnings +[/WORKFLOW_LOG] +``` + +**What to Log**: +- ✅ Requests (no PII) +- ✅ Auth events +- ✅ Errors + stack +- ✅ Business operations + +**What NOT to Log**: +- ❌ Passwords, tokens +- ❌ API keys +- ❌ Personal data + +--- + +## 10. Backend Patterns + +**Trigger**: Creating/modifying endpoints, services + +**Detected by**: `requirements.txt` | `package.json` | `*.py`, `*.js`, `*.go` + +```python +# Pattern: Route → Service → Repository +@router.get("/", response_model=list[ItemResponse]) +async def list_items(svc: ItemService, user: User): + return await svc.list_items(user) +``` + +**Rules**: +- ✅ Response models/schemas +- ✅ Auth on protected routes +- ✅ Input validation +- ✅ Service layer abstraction +- ✅ Docstrings + +--- + +## 11. Frontend Patterns + +**Trigger**: Creating/modifying components, state + +**Detected by**: `package.json` | `*.tsx`, `*.vue`, `*.svelte` + +```tsx +// Pattern: Props → State → Render +interface Props { item: Item; onSelect?: (item: Item) => void; } + +export const ItemCard = ({ item, onSelect }: Props) => { + const handleClick = useCallback(() => onSelect?.(item), [item, onSelect]); + return
{item.name}
; +}; +``` + +**Rules**: +- ✅ Type definitions (interfaces/types) +- ✅ Performance optimization +- ✅ Loading/error states +- ✅ Accessibility + +--- + +## 12. Infrastructure + +**Trigger**: Docker, CI/CD, deployment + +**Detected by**: `Dockerfile`, `docker-compose.yml`, `.github/workflows/` + +```yaml +# Docker Compose Pattern +services: + app: + build: . + depends_on: + db: { condition: service_healthy } + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000/health"] +``` + +**Rules**: +- ✅ Multi-stage builds +- ✅ Health checks +- ✅ Non-root users +- ✅ Secrets from env + +--- + +## 13. Workflow Logs + +**Trigger**: Session completion (significant work) + +**CRITICAL**: Workflow logs MUST include Decision Diagram with all [DECISION:], [ATTEMPT:], [SUBAGENT:], [SKILL:] markers. + +**Pattern**: +```bash +timestamp=$(date '+%Y-%m-%d_%H%M%S') +task_slug="implement-feature-name" # lowercase, hyphens, max 50 chars +log_file="log/workflow/${timestamp}_${task_slug}.md" +``` + +**Decision Diagram** (required in every log): +``` +[SESSION START: ] + ├─[SKILLS: loaded=N] + ├─[KNOWLEDGE: loaded | entities=N] + | + └─[DECISION: ?] + ├─ Option A: → Rejected () + └─ ✓ Option C: → CHOSEN () + | + ├─[SKILL: #N Name | applied] → + | + ├─[SUBAGENT: Name] + | ├─[ATTEMPT #1] → ✗ failed + | └─[ATTEMPT #2] → ✓ success + | + ├─[DECISION: ?] → ✓ + └─[COMPLETE] +``` + +**Template**: +```markdown +# Workflow Log: + +**Session**: YYYY-MM-DD_HHMMSS | **Agent**: _DevTeam | **Status**: Complete + +## Summary + + +## Decision Diagram + + +## Decision & Execution Flow + + +## Agent Interactions | Files | Quality Gates | Learnings +
+``` + +**Checklist Before [COMPLETE]**: +- [ ] Decision Diagram shows all [DECISION:], [ATTEMPT:], [SUBAGENT:], [SKILL:] +- [ ] Skills/knowledge loading documented at start +- [ ] Rejected alternatives documented +- [ ] All ✓/✗ outcomes marked +- [ ] Workflow log file created + +**Storage**: `log/workflow/` (gitignored, README preserved) + +--- + +## Auto-Detection + +**Core Skills (1-9, 13)**: Always active +**Stack Skills (10-12)**: Enabled based on detected files + +| Detection | Files | Skills Enabled | +|-----------|-------|----------------| +| Backend | `*.py`, `*.js`, `*.go`, `requirements.txt` | 10 (Backend Patterns) | +| Frontend | `*.tsx`, `*.vue`, `*.svelte`, `package.json` | 11 (Frontend Patterns) | +| Docker | `Dockerfile`, `docker-compose.yml` | 12 (Infrastructure) | +| CI/CD | `.github/workflows/` | 5, 12 | +| Knowledge | `project_knowledge.json` | 6,7,8 (always active, enhanced) | + +**Note**: Skills 6,7,8 (Knowledge, Orchestration, Handover) are always active as core skills. When `project_knowledge.json` exists, they use the actual knowledge; otherwise, they operate in template mode. + +--- + +## 14. Context Switching + +**Trigger**: User interrupts with new request mid-task + +``` +[PAUSE: task= | phase=] +[NEST: parent= | child= | reason=user-interrupt] +[THREAD: id=T2 | parent=T1] +... handle interrupt ... +[RETURN: to= | result=] +[RESUME: task= | phase=] +``` + +**Rules**: +- Emit PAUSE before switching +- Track threads (T1, T2, etc.) +- Complete interrupt fully +- Emit RESUME to restore context + +--- + +## Integration + +| Component | Location | Synergy | +|-----------|----------|---------| +| Agents | `.github/agents/` | Skills 7,8 follow agent protocols | +| Workflows | `.github/workflows/` | Skills 6,9 match workflow format | +| Knowledge | `project_knowledge.json` | Skill 6 maintains knowledge | +| Commands | `.claude/commands/` | Quick access to common operations | + +--- + +## Maintenance + +Run `update_skills` workflow to: +1. Detect project stack +2. Enable applicable skills +3. Update context +4. Sync with knowledge + +**Template Version**: 1.1.0 diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 051c6775..912d9502 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -8,11 +8,17 @@ ``` [SESSION: task_description] @mode ``` +Query `project_knowledge.json` for task keywords, surface relevant context. + +Query `.claude/skills.md` for applicable patterns (1-2 relevant skills). **Finish**: ``` [COMPLETE] outcome | changed: files ``` +Write observations: what was worked on, what was learned (1-2 terse entries). + +If new pattern discovered, suggest skill addition. **User interrupt**: ``` @@ -95,15 +101,27 @@ Trigger: | Pattern: | Rules: Add to `.claude/skills.md` or `.claude/skills/domain.md` ## Knowledge + +**Purpose**: Terse map (codegraph + session learnings), not verbose docs + +**At [SESSION]**: grep task keywords in `project_knowledge.json`, surface relevant context + +**At [COMPLETE]**: Always write (even quick fixes): +- What was worked on (components) +- What was learned (patterns, gotchas) +- Codegraph updates (dependencies) + +**Observations**: 30-50 chars, include `upd:YYYY-MM-DD` + ``` -[KNOWLEDGE: added=N | updated=M | type=project|global] +[KNOWLEDGE: added=N | updated=M] ``` **Format (JSONL)**: ```json -{"type":"entity","name":"Project.Domain.Name","entityType":"Type","observations":["desc","upd:YYYY-MM-DD"]} +{"type":"entity","name":"Project.Domain.Name","entityType":"type","observations":["desc, upd:YYYY-MM-DD"]} {"type":"codegraph","name":"Component","nodeType":"class","dependencies":[],"dependents":[]} -{"type":"relation","from":"A","to":"B","relationType":"USES"} +{"type":"relation","from":"A","to":"B","relationType":"USES|IMPLEMENTS|MODIFIES|VALIDATES|PROVIDES"} ``` **Files**: `project_knowledge.json` (root) | `global_knowledge.json` (.github/) @@ -113,7 +131,9 @@ Add to `.claude/skills.md` or `.claude/skills/domain.md` [COMPLETE: task= | result= | learnings=N] [WORKFLOW_LOG: task=] -Summary | Decision Diagram | Agent Interactions | Files | Quality Gates | Learnings +Summary (2-3 sentences) | Key Decisions (bullet list) | Files Changed (paths) | +Tests (pass/fail/skip) | Skills Used (list) | Patterns Discovered (list) | +Duration (est) | Complexity (simple/medium/complex) [/WORKFLOW_LOG] ``` @@ -121,6 +141,8 @@ Summary | Decision Diagram | Agent Interactions | Files | Quality Gates | Learni - [ ] Task objective met - [ ] Files changed as expected - [ ] Tests pass (if code changes) +- [ ] Knowledge updated (observations + codegraph) +- [ ] Skills referenced (patterns used) - [ ] Workflow log created (significant work only) **Workflow Log**: `log/workflow/YYYY-MM-DD_HHMMSS_task-slug.md` diff --git a/docs/analysis/KNOWLEDGE_OPTIMIZATION.md b/docs/analysis/KNOWLEDGE_OPTIMIZATION.md new file mode 100644 index 00000000..4f42dd73 --- /dev/null +++ b/docs/analysis/KNOWLEDGE_OPTIMIZATION.md @@ -0,0 +1,474 @@ +# Knowledge System Optimization Analysis + +**Date**: 2025-12-30 +**Methodology**: Empirical measurement across 21 workflow sessions + content quality analysis + +--- + +## Executive Summary + +**Problem**: Knowledge system marked as "CRITICAL" but used in only 14.3% of sessions for reading, 9.5% for updates. + +**Current State**: +- **Inventory**: 257 entries (140 entities, 46 codegraph, 71 relations), 54.5KB total +- **Usage**: Read 14.3% (3/21 sessions), Write 9.5% (2/21 sessions) +- **Quality Score**: 70/100 (GOOD, minor improvements needed) +- **Format**: JSONL, 100% parse success, 39 char avg observation + +**Recommendation**: Make knowledge **OPTIONAL**, not mandatory. Use only when value exceeds overhead. + +--- + +## Usage Measurement + +### Session Analysis (21 workflows) + +| Metric | Count | % Sessions | +|--------|-------|-----------| +| Knowledge loaded | 3 | 14.3% | +| Knowledge read | 10 | 47.6% | +| Knowledge updated | 2 | 9.5% | +| Entities added | 18 | - | +| Entities updated | 1 | - | +| Avg per update | 9.5 | - | + +**Read/Write Ratio**: 1.5:1 (WRITE-HEAVY) +**Assessment**: Tracking more than consuming = LOW VALUE + +### Comparison to Other Framework Components + +| Component | Adoption | Status | +|-----------|----------|--------| +| [SESSION] marker | 52.4% | Required boundary | +| [COMPLETE] marker | 57.1% | Required boundary | +| Skills.md query | 38.1% | Optional | +| **Knowledge read** | **14.3%** | **Currently "CRITICAL"** | +| **Knowledge write** | **9.5%** | **Currently "CRITICAL"** | +| Delegation | 14.3% | Optional (was mandatory) | + +**Finding**: Knowledge has LOWER adoption than even delegation (which we made optional after measuring 14.3% compliance). Marking it "CRITICAL" is misaligned with actual usage. + +--- + +## Content Quality Analysis + +### Inventory + +- **Total entries**: 257 lines +- **Entities**: 140 (domain concepts, features, services) +- **Codegraph**: 46 (component dependencies) +- **Relations**: 71 (entity relationships) +- **File size**: 54.5KB total (46.2KB project, 8.3KB global) + +### Entity Types + +``` +feature : 25 ( 17.9%) +schema : 15 ( 10.7%) +Feature : 14 ( 10.0%) ← inconsistent capitalization +endpoint : 14 ( 10.0%) +service : 13 ( 9.3%) +model : 10 ( 7.1%) +page : 9 ( 6.4%) +component : 6 ( 4.3%) +``` + +**Issue**: Capitalization inconsistency (`feature` vs `Feature`, `service` vs `Service`) + +### Observation Quality + +- **Total observations**: 453 +- **Avg length**: 39 characters (GOOD BALANCE) +- **With timestamps**: 140 (30.9%) +- **With refs**: 19 (4.2%) + +**Assessment**: Concise without being cryptic. Good balance. + +### Codegraph Value + +- **Nodes**: 46 +- **Dependencies**: 96 total (avg 2.1 per node) +- **Dependents**: 57 total (avg 1.2 per node) +- **Connectivity**: 3.3 relationships per node + +**Assessment**: GOOD CONNECTIVITY - Useful for understanding architecture, KEEP + +Top connected: +1. `AccessHubService.py` (service): 5 deps, 1 dependent +2. `Host.tsx` (page): 4 deps, 1 dependent +3. `Layout.tsx` (component): 4 deps, 1 dependent + +### Relations Analysis + +71 relations tracking entity interactions: + +``` +USES : 35 (49.3%) +IMPLEMENTS : 16 (22.5%) +CONSUMES : 5 ( 7.0%) +UPDATES : 3 ( 4.2%) +[... 10 more types, each <3%] +``` + +**Finding**: Too many relation types (14 total). Simplify to 3-5 core types. + +### Freshness + +- **Date range**: 2024-12-30 to 2025-12-30 +- **Most recent**: 2025-12-30 (0 days ago) +- **Status**: UP TO DATE + +### Duplication + +**Found**: 2 duplicate entity names +- `Backend.Docker.Capabilities` (2 entries) +- `Backend.Services.SnifferService.StormEngine` (2 entries) + +**Issue**: Poor deduplication + +--- + +## Quality Score: 70/100 + +| Factor | Score | Max | Notes | +|--------|-------|-----|-------| +| Freshness | 20 | 20 | Updated today | +| Relationship density | 30 | 30 | 3.3 per node (>3 threshold) | +| No duplicates | 0 | 20 | 2 duplicates found | +| Observation quality | 20 | 20 | 39 chars (optimal 30-100) | +| Proper timestamps | 0 | 10 | Only 30.9% (<50% threshold) | + +**Verdict**: GOOD - Minor improvements needed + +--- + +## High-Value Content + +Top 5 most-documented entities (by observation count): + +1. **Frontend.Traffic.PacketCrafting** (11 obs) - Advanced packet crafting UI +2. **Frontend.Traffic.StormFeature** (10 obs) - Packet storm generation +3. **Backend.Services.SnifferService.Storm** (9 obs) - Storm thread implementation +4. **Frontend.Patterns.ComponentStandardization** (9 obs) - UI pattern +5. **Backend.Services.SnifferService.Dissector** (8 obs) - Protocol dissection + +**Pattern**: Most valuable knowledge is **feature descriptions** and **architectural patterns**, not implementation details. + +--- + +## Problems Identified + +### 1. Over-Tracking +- **140 entities** is too many for a project of this size +- Tracking implementation details that change frequently +- Write-heavy pattern (1.5:1 ratio) suggests tracking overhead + +### 2. Poor Deduplication +- 2 duplicate entity names +- Inconsistent capitalization (`feature` vs `Feature`) +- Need better merge logic + +### 3. Too Many Relation Types +- 14 relation types, 10 used <3% each +- Hard to query ("what uses X" vs "what consumes X" vs "what depends on X") +- Consolidate to: USES, IMPLEMENTS, EXTENDS + +### 4. Timestamp Inconsistency +- Only 30.9% of observations have timestamps +- Hard to know when information is stale +- Should be 80%+ for usefulness + +### 5. Low Actual Usage +- 14.3% read usage (target: >40% for "required" component) +- 9.5% write usage (overhead for most sessions) +- Marked "CRITICAL" but behaves like "rarely used" + +--- + +## Optimization Recommendations + +### 1. Make Knowledge OPTIONAL + +**Current**: Knowledge loading marked "CRITICAL" in framework +**Proposed**: Optional with clear usage criteria + +**When to READ knowledge**: +- [ ] Multi-file feature spanning >3 components +- [ ] Touching unfamiliar domain (first time on feature) +- [ ] Architectural questions about dependencies +- [ ] >40% chance it contains relevant info + +**When to SKIP reading**: +- [x] Quick fixes (<10 min estimated) +- [x] Single-file edits +- [x] Bug fixes with known root cause +- [x] One-off scripts + +**When to WRITE knowledge**: +- [ ] New architectural pattern discovered (>2 components) +- [ ] Complex feature with non-obvious dependencies +- [ ] API contract changes affecting multiple consumers +- [ ] Learned something that took >30 min to figure out + +**When to SKIP writing**: +- [x] Implementation details (these belong in code comments) +- [x] Temporary workarounds +- [x] One-off fixes +- [x] Information already in README or docs + +**Emission change**: +```diff +- [KNOWLEDGE: loaded | type=project] ← mandatory at session start ++ [KNOWLEDGE: context=] ← optional, only when used +``` + +### 2. Archive Old Entries + +**Problem**: 140 entities, many likely stale +**Solution**: Archive entries >60 days old not recently accessed + +```bash +# Create archive format +knowledge_archive.json # older entries +project_knowledge.json # active working set (target: <80 entities) +``` + +**Criteria for archiving**: +- Last update >60 days ago +- No references in recent sessions +- Implementation details (keep architectural patterns) + +**Target**: Reduce to 60-80 active entities + +### 3. Fix Duplicates & Capitalization + +**Action 1**: Merge duplicates +```json +Backend.Docker.Capabilities (entry 1) +Backend.Docker.Capabilities (entry 2) +→ Merge observations, deduplicate +``` + +**Action 2**: Standardize capitalization +```diff +- feature, Feature ++ feature (lowercase) + +- Service, service ++ service (lowercase) +``` + +**Rule**: All entityType values lowercase + +### 4. Consolidate Relation Types + +**Current**: 14 relation types (too many) +**Proposed**: 5 core types + +| Current (14 types) | Proposed (5 types) | +|-------------------|-------------------| +| USES, CONSUMES, CONSUMES_VIA_WS, DEPENDS_ON, READS | **USES** | +| IMPLEMENTS, EXTENDS | **IMPLEMENTS** | +| CREATES, MODIFIES, UPDATES | **MODIFIES** | +| VALIDATES, ENABLES, MEASURES | **VALIDATES** | +| PROVIDES_SESSION | **PROVIDES** | + +**Benefit**: Simpler queries, less cognitive overhead + +### 5. Increase Timestamp Coverage + +**Current**: 30.9% of observations have timestamps +**Target**: 80%+ + +**Rule**: All new observations must include `upd:YYYY-MM-DD` + +```diff +- "Packet storm generation for testing" ++ "Packet storm generation for testing, upd:2025-12-30" +``` + +### 6. Focus on Architecture, Not Implementation + +**Keep tracking**: +- Feature descriptions (user-facing capabilities) +- Architectural patterns (how components interact) +- API contracts (endpoints, schemas) +- Complex algorithms (non-obvious logic) + +**Stop tracking**: +- Implementation details (function names, variables) +- Temporary state (current bugs, work-in-progress) +- Information in code comments +- Duplicate of README content + +**Example**: + +```diff +# DON'T TRACK (implementation detail): +- {"type":"entity","name":"PacketCrafting.handleSubmit","entityType":"function"} + +# DO TRACK (architectural pattern): ++ {"type":"entity","name":"Frontend.Patterns.PacketCrafting","entityType":"pattern", + "observations":["Left/right pane layout: params + output","Protocol-specific field injection"]} +``` + +--- + +## Format Optimization + +**Current format**: JSONL (JSON Lines) +- 100% parse success ✓ +- 183 char avg line length (moderate) ✓ +- Easy to append ✓ +- Searchable with grep ✓ + +**Assessment**: Format is GOOD, no change needed + +**Alternative considered**: Markdown with frontmatter +- Pros: More human-readable +- Cons: Harder to query programmatically, slower parsing +- **Decision**: KEEP JSONL + +--- + +## Implementation Plan + +### Phase 1: Framework Update (Quick) +1. Update `copilot-instructions.md`: + - Change knowledge loading from "CRITICAL" to "optional" + - Remove from mandatory session start + - Add usage criteria (when to read/write) + +2. Update agent files: + - Remove knowledge as required tool + - Add knowledge as optional context tool + +**Estimated time**: 15 minutes + +### Phase 2: Content Cleanup (Medium) +1. Merge 2 duplicate entries +2. Standardize capitalization (feature, service, etc.) +3. Consolidate 14→5 relation types +4. Add timestamps to observations missing them + +**Estimated time**: 30 minutes + +### Phase 3: Archival (Medium) +1. Identify entries >60 days old +2. Create `knowledge_archive.json` +3. Move stale entries to archive +4. Target: 140→80 active entities + +**Estimated time**: 20 minutes + +### Phase 4: Documentation (Quick) +1. Add `.github/knowledge-guide.md`: + - When to use knowledge + - How to query effectively + - Update patterns + +**Estimated time**: 15 minutes + +**Total effort**: ~80 minutes + +--- + +## Success Metrics + +Track these over next 10 sessions: + +| Metric | Before | Target | +|--------|--------|--------| +| Read usage | 14.3% | 30-40% | +| Write usage | 9.5% | 15-20% | +| Knowledge overhead | N/A | <5% session time | +| Quality score | 70/100 | 85+/100 | +| Active entities | 140 | 60-80 | +| Timestamp coverage | 30.9% | 80%+ | +| Duplicates | 2 | 0 | + +**Improvement hypothesis**: By making knowledge optional with clear criteria, usage should increase (agents use when valuable) while overhead decreases (skip when not needed). + +**Validation period**: 2 weeks + +--- + +## Comparison: Before vs After + +### Before (Current State) +``` +[SESSION: implement auth flow] @Developer + +[KNOWLEDGE: loaded | type=project] ← mandatory +[KNOWLEDGE: loaded | type=global] ← mandatory + +# Agent reads 257 entries (rarely finds relevant info) +# Overhead: ~30 seconds for knowledge loading +# Value: Used in 14.3% of sessions + +... work happens ... + +[KNOWLEDGE: added=1 | updated=0] ← writes implementation detail +[COMPLETE] +``` + +**Overhead**: 30 sec load + write tracking +**Value**: Low (14.3% hit rate) +**Result**: 40% overhead for quick tasks + +### After (Optimized) +``` +[SESSION: implement auth flow] @Developer + +# No mandatory knowledge loading +# Agent decides: "Single-file change, skip knowledge" + +... work happens ... + +# No knowledge write (implementation detail) +[COMPLETE] +``` + +**Overhead**: 0 sec +**Value**: Appropriate (knowledge not needed) +**Result**: <5% overhead + +**Example where knowledge IS used**: +``` +[SESSION: add new traffic protocol dissection] @Developer + +# Agent decides: "Multi-component feature, unfamiliar domain" +[KNOWLEDGE: context=Traffic dissection patterns] + +# Reads 5 relevant entities about protocol handling +# Finds: Frontend.Traffic.StormFeature has pattern to follow + +... work happens using pattern ... + +[KNOWLEDGE: added=2 | pattern=Protocol dissection pipeline] +[COMPLETE] +``` + +**Overhead**: 10 sec (targeted read) +**Value**: High (found useful pattern, avoided rework) +**Result**: Net positive (saved >30 min reinventing) + +--- + +## Conclusion + +**Current State**: Knowledge system is well-formatted (70/100 quality score) but **over-prescribed**. Marked "CRITICAL" despite 14.3% read usage creates overhead without value. + +**Root Cause**: Framework assumes all work benefits from knowledge context. Reality: Most tasks are quick fixes not requiring architectural context. + +**Solution**: Make knowledge **optional** with **clear usage criteria**: +- READ when: Multi-component work, unfamiliar domain, architectural questions +- WRITE when: New pattern (>2 entities), saved >30 min learning +- SKIP when: Quick fixes, single files, known solutions + +**Expected Impact**: +- ↓ Overhead: 40%→5% for quick tasks +- ↑ Value: 14.3%→35% usage (higher quality reads) +- ↑ Quality: 70→85 score (cleanup + better targeting) + +**Next Steps**: Implement Phase 1 (framework update) immediately, validate with next 5 sessions before proceeding to cleanup phases. diff --git a/docs/analysis/SKILLS_OPTIMIZATION.md b/docs/analysis/SKILLS_OPTIMIZATION.md new file mode 100644 index 00000000..7b4ebb44 --- /dev/null +++ b/docs/analysis/SKILLS_OPTIMIZATION.md @@ -0,0 +1,420 @@ +# Skills System Optimization Analysis + +**Date**: 2025-12-30 +**Methodology**: Empirical measurement across 23 workflow sessions + content analysis + +--- + +## Executive Summary + +**Problem**: Skills file is 431 lines with 14 claimed skills, but 0% direct usage in workflows. + +**Current State**: +- **Size**: 431 lines, 11KB (target: ~200 lines) +- **Skills**: 14 claimed, 1 missing implementation +- **Usage**: 0% direct skill references in workflows +- **Suggestions**: 11 emitted across 3 sessions (13% adoption) +- **Pattern mentions**: 1.8 avg/session (MODERATE indirect usage) + +**Recommendation**: Transform from verbose documentation to terse checklist format. Reduce 431→200 lines (54%). + +--- + +## Usage Measurement + +### Workflow Analysis (23 sessions) + +| Metric | Count | % Sessions | +|--------|-------|-----------| +| Direct skill references | 0 | 0.0% | +| Skill suggestions emitted | 11 | - | +| Sessions with suggestions | 3 | 13.0% | +| Pattern mentions (indirect) | 41 | - | +| Avg mentions/session | 1.8 | - | + +**Assessment**: Skills not used as quick reference (0% direct), moderate indirect pattern awareness (1.8/session) + +### Pattern Reuse in Workflows + +``` +workflow log : 22/23 sessions ( 95.7%) +testing : 7/23 sessions ( 30.4%) +security : 4/23 sessions ( 17.4%) +error handling : 3/23 sessions ( 13.0%) +orchestration : 3/23 sessions ( 13.0%) +component standardization : 1/23 sessions ( 4.3%) +handover : 1/23 sessions ( 4.3%) +``` + +**Finding**: "Workflow log" mentioned 95.7% but defined in both skills.md AND instructions/ (duplication) + +--- + +## Content Analysis + +### File Structure + +``` +Total lines: 431 + Headers: 33 ( 7.7%) + Checklists: 10 ( 2.3%) ← TOO FEW + Code blocks: 121 (28.1%) ← TOO MANY + Tables: 58 (13.5%) + Text: 102 (23.7%) + Empty: 107 (24.8%) +``` + +**Issue**: Only 10 checklist items for 14 skills = 0.7 items/skill (should be 3-5 items/skill) + +### Actionability Ratio + +``` +Actionable (checklists): 10 +Descriptive (text): 102 +Ratio: 10/102 = 0.10 +``` + +**Assessment**: MODERATE actionability (should be >0.15 for quick reference) + +### Verbosity + +- **Average skill block**: 1376 characters +- **Longest skill**: 5445 characters ("Key Files" handover pattern) +- **Target**: <500 characters per skill + +### Duplication + +- ⚠️ **Workflow log pattern**: Defined in both skills.md AND instructions/protocols.md +- ⚠️ **Session patterns**: [SESSION] markers in both skills.md AND instructions/ + +--- + +## Structural Issues + +### 1. Index Mismatch + +``` +Claimed in index: 14 skills +Listed in table: 15 skills +Actual H2 sections: 22 sections +Numbered skills: 14 +``` + +**Issue**: "UI Component Standardization" listed in index (#15) but no implementation found + +### 2. Skill Composition + +| Skill Type | Count | Value | +|-----------|-------|-------| +| With triggers | 0/4 | LOW - unclear when to use | +| With patterns | 1/4 | LOW - missing examples | +| With rules | 1/4 | LOW - not actionable | +| With examples | 1/4 | LOW - hard to apply | + +**Problem**: Skills missing structured format (Trigger → Pattern → Rules) + +### 3. Size Bloat + +``` +Current: 431 lines +Target: ~200 lines +Reduction needed: 54% +``` + +**Breakdown**: +- Code examples: 121 lines (28%) - move to docs +- Empty lines: 107 lines (25%) - excessive +- Descriptive text: 102 lines (24%) - make terse + +--- + +## Knowledge Cross-Reference + +**Skill/pattern entities in knowledge**: 5/141 (3.5%) + +``` +AgentFramework.SkillTransparency (protocol) - 6 observations +AgentFramework.SkillUsageTracking (protocol) - 6 observations +Frontend.UIComponents.CyberpunkCheckbox (pattern) - 8 observations +Frontend.UIComponents.CyberpunkSlider (pattern) - 8 observations +NOP.AgentFramework.Skills (framework) - 5 observations +``` + +**Finding**: Knowledge tracks actual patterns used (UI patterns), not all claimed skills + +--- + +## Problems Identified + +### 1. Not Being Used (0% direct usage) +- Skills file exists but agents don't consult it +- No loading at [SESSION] like knowledge +- Not referenced in completion checklist +- Behaves like optional documentation, not required reference + +### 2. Wrong Format (documentation vs checklists) +- **Current**: Verbose explanations with code examples +- **Needed**: Terse checklists for quick reference +- **Example**: "Error Handling" has 50-line explanation, should be 5-item checklist + +### 3. Duplication with Instructions +- Workflow log pattern duplicated +- Session boundaries duplicated +- Should live in ONE place + +### 4. Missing Structure +- 0% skills have proper Trigger→Pattern→Rules format +- Hard to know when to apply which skill +- Not scannable + +### 5. Bloat (431→200 lines needed) +- Code examples (121 lines): Should be in docs, not skills +- Empty lines (107 lines): Excessive whitespace +- Descriptive text (102 lines): Should be terse observations + +--- + +## Optimization Recommendations + +### 1. Transform to Terse Checklist Format + +**Before** (verbose): +```markdown +## 2. Error Handling + +**Trigger**: Exceptions, API responses + +```python +# Pattern: Custom exceptions + consistent API response +class AppError(Exception): + def __init__(self, msg: str, code: str, status: int = 500): + self.msg, self.code, self.status = msg, code, status + +# API Response: {"error": "msg", "code": "CODE", "details": {}} +``` + +**Rules**: +- ✅ No unhandled exceptions +- ✅ Consistent error format +- ✅ Appropriate HTTP codes +- ✅ Errors logged with context +``` + +**After** (terse): +```markdown +## Error Handling +**Trigger**: Exceptions, API responses | **Pattern**: Custom exceptions + JSON responses + +- [ ] No unhandled exceptions +- [ ] Consistent error format {"error","code","details"} +- [ ] Appropriate HTTP codes (400/401/403/404/500) +- [ ] Log with context (user, action, payload) +``` + +**Reduction**: 200 chars → 80 chars (60% reduction) + +### 2. Remove Duplication + +**Action**: Remove patterns already in instructions/ +- Workflow log → already in instructions/protocols.md +- Session boundaries → already in copilot-instructions.md +- Handover → agent-specific, not universal skill + +**Impact**: Remove 3-4 skills, focus on code patterns only + +### 3. Keep Only Reusable Patterns + +**Keep** (patterns with >10% usage): +- Testing (30.4% usage) +- Security (17.4% usage) +- Error handling (13.0% usage) + +**Remove** (patterns with <5% usage): +- Component standardization (4.3%, project-specific) +- Handover (4.3%, framework handles this) +- UI Component Standardization (0%, not implemented) + +**Add** (patterns in knowledge but missing from skills): +- UI patterns (CyberpunkCheckbox, CyberpunkSlider) +- Backend patterns (service structure, endpoint patterns) + +### 4. Standardize Format + +**Required structure** for each skill: +```markdown +## [Skill Name] +**Trigger**: [when to use] | **Pattern**: [approach] + +- [ ] Checklist item 1 +- [ ] Checklist item 2 +- [ ] Checklist item 3 +``` + +**Rules**: +- 3-5 checklist items per skill +- <500 chars per skill +- No code examples (link to docs instead) + +### 5. Integrate with Framework + +**Make skills mandatory**: +- Load at [SESSION] (like knowledge) +- Reference in completion checklist +- Auto-suggest when pattern detected + +**Update copilot-instructions.md**: +```diff +[SESSION: task] @mode ++ Query project_knowledge.json for context ++ Load .claude/skills.md for relevant patterns +``` + +--- + +## Implementation Plan + +### Phase 1: Content Reduction (30 min) + +1. **Remove duplicates**: Workflow log, Session boundaries, Handover (3 skills) +2. **Remove low-usage**: Component standardization, missing UI skill (2 skills) +3. **Remove code examples**: Move to docs/ (121 lines) +4. **Condense text**: Make observations terse (102→50 lines) + +**Target**: 431→200 lines + +### Phase 2: Format Standardization (30 min) + +1. **Apply template** to remaining 9 skills: + - Code Standards + - Error Handling + - Security + - Testing + - Git & Deploy + - Backend Patterns + - Frontend Patterns + - Infrastructure + - Context Switching + +2. **Add missing patterns** from knowledge: + - UI component patterns + - Service structure patterns + +**Target**: 11 skills, consistent format + +### Phase 3: Framework Integration (15 min) + +1. Update copilot-instructions.md: + - Add skills loading at [SESSION] + - Add skills reference to completion checklist + +2. Update agents: + - Reference skills in tool descriptions + +**Target**: Skills become required reference + +### Phase 4: Validation (10 min) + +1. Test with next 3 sessions +2. Measure usage increase from 0%→40%+ +3. Track skill suggestions (should increase) + +**Total effort**: ~85 minutes + +--- + +## Success Metrics + +Track over next 10 sessions: + +| Metric | Before | Target | +|--------|--------|--------| +| Direct skill usage | 0% | 40%+ | +| File size | 431 lines | 200 lines | +| Checklist items | 10 | 33-55 | +| Actionability ratio | 0.10 | 0.20+ | +| Pattern mentions | 1.8/session | 3+ | +| Skill suggestions | 13% sessions | 30%+ | + +--- + +## Comparison: Before vs After + +### Before (Current) +```markdown +# Claude Skills (431 lines) + +## Skill Index (14 Core Skills) +[58-line table] + +## 1. Code Standards +**Trigger**: Writing/modifying code + +``` +Files: <500 lines | Functions: <50 lines +[20 lines of rules and patterns] +``` + +**Language Detection**: +[15-line table] + +[... 380 more lines] +``` + +**Problems**: +- Not loaded at session start +- No completion checklist requirement +- Verbose format hard to scan +- 0% usage in workflows + +### After (Optimized) +```markdown +# Skills (200 lines) + +Quick reference checklists for common patterns. + +## Error Handling +**Trigger**: Exceptions, APIs | **Pattern**: Custom exceptions + JSON + +- [ ] No unhandled exceptions +- [ ] Consistent format {"error","code","details"} +- [ ] HTTP codes (400/401/403/404/500) +- [ ] Log with context + +## Testing +**Trigger**: New code, changes | **Pattern**: Arrange-Act-Assert + +- [ ] Unit tests for logic +- [ ] Integration tests for APIs +- [ ] E2E for critical flows +- [ ] 80%+ coverage + +[... 9 more concise skills] +``` + +**Benefits**: +- Loaded at [SESSION] automatically +- Required in completion checklist +- Terse format, quick to scan +- Target: 40%+ usage + +--- + +## Conclusion + +**Current State**: Skills file is verbose documentation (431 lines) with 0% direct usage despite 95.7% pattern awareness. + +**Root Cause**: Wrong format (documentation vs checklist) + not integrated with framework (optional vs required). + +**Solution**: +1. Reduce 431→200 lines (54% reduction) +2. Transform to terse checklist format (3-5 items per skill) +3. Integrate with framework (mandatory at [SESSION], completion checklist) +4. Remove duplication with instructions/ + +**Expected Impact**: +- ↑ Usage: 0%→40% direct reference +- ↓ Size: 431→200 lines (faster scanning) +- ↑ Actionability: 0.10→0.20+ ratio +- → Institutional memory: patterns captured and reused + +**Next Steps**: Implement Phase 1 (content reduction) immediately, validate with 3 sessions before proceeding. diff --git a/knowledge_archive.json b/knowledge_archive.json new file mode 100644 index 00000000..9ac37a10 --- /dev/null +++ b/knowledge_archive.json @@ -0,0 +1 @@ +{"type": "entity", "name": "AgentFramework.ProtocolEnforcement", "entityType": "pattern", "observations": ["Session start trigger at top of copilot-instructions.md", "Action indicators: check, fix, add, create, update, refactor, investigate, implement, test, debug, optimize", "Required emissions: [SESSION:] FIRST, [PHASE: CONTEXT] SECOND, [DECISION:], [ATTEMPT:], [SUBAGENT:]", "Protocol compliance checklist in workflow logs", "Skip protocol only for pure Q&A, single clarifications, no file edits", "upd:2024-12-30"]} diff --git a/project_knowledge.json b/project_knowledge.json index 02849a3f..cd205de7 100644 --- a/project_knowledge.json +++ b/project_knowledge.json @@ -1,261 +1,259 @@ -{"type":"entity","name":"NOP.Project.Architecture","entityType":"System","observations":["Full-stack network operations platform","FastAPI backend + React frontend + Docker infrastructure","Multi-protocol remote access (SSH, VNC, RDP, FTP)","upd:2025-12-28,refs:1"]} -{"type":"entity","name":"NOP.Backend.FastAPI","entityType":"Service","observations":["REST API with async operations","JWT authentication and session management","PostgreSQL + Redis data layer","upd:2025-12-27,refs:1"]} -{"type":"entity","name":"NOP.Frontend.React","entityType":"Service","observations":["TypeScript + Tailwind CSS","Zustand state management","Cyberpunk-themed UI design","upd:2025-12-27,refs:1"]} -{"type":"entity","name":"Frontend.AccessHub.VaultFeature","entityType":"Feature","observations":["Password-protected credential vault with group management","Three sorting modes: Recent, Frequent, Name","Supports adding/removing credentials from vault","Cyberpunk-styled UI with green accents and geometric symbols","upd:2025-12-27,refs:1"]} -{"type":"entity","name":"Frontend.AccessHub.ConnectionManagement","entityType":"Feature","observations":["Resizable connection area with drag handle","Fullscreen mode for active connections","Password-protected quick connect from vault","Tab-based connection interface","upd:2025-12-27,refs:1"]} -{"type":"entity","name":"Frontend.AccessHub.GroupManagement","entityType":"Feature","observations":["User-defined groups for organizing hosts","Group selector dropdown with custom styling","Add new groups via modal interface","Filter credentials by selected group","upd:2025-12-27,refs:1"]} -{"type":"entity","name":"Frontend.Traffic.PacketCrafting","entityType":"Feature","observations":["Advanced packet crafting interface with protocol selection (TCP/UDP/ICMP/ARP/IP)","Left pane: basic parameters (protocol, IPs, ports, flags, send control)","Right pane: terminal-style output with trace and response","Sliding structure panel (600px) for editing all packet fields by layer","Hex/ASCII payload editor with synchronized editing","IP dropdown with online assets highlighted green","Port dropdown with common services","Cyber-themed custom checkboxes for TCP flags","Embedded as tab in Traffic page (no header/back button)","Edit Structure button in Send Control section","upd:2025-12-28,refs:2"]} -{"type":"entity","name":"Frontend.Traffic.PacketStructure","entityType":"Feature","observations":["Layer 2 (Ethernet): Editable MAC addresses, fixed EtherType","Layer 3 (IPv4): Editable TOS/ID/Flags/TTL, fixed Version/IHL/FragOffset, auto checksum","Layer 4 (TCP): Editable ports/seq/ack/window/flags/urgent, fixed DataOffset/Reserved, auto checksum","Layer 4 (UDP): Editable ports, auto length/checksum","Layer 4 (ICMP): Editable type/code, auto checksum","Payload hex editor with Tab to add byte, Backspace to remove","upd:2025-12-28,refs:1"]} -{"type":"entity","name":"Frontend.Traffic.PacketInspector","entityType":"Feature","observations":["600px wide sliding panel from right","Full protocol dissection: Ethernet, ARP, IP, TCP, UDP, ICMP, DNS, HTTP, TLS","Application layer detection based on ports (SSH, FTP, MySQL, RDP, etc)","Hex dump with ASCII preview","Payload preview with hex and ASCII","Text-xs fonts for consistency","upd:2025-12-28,refs:1"]} -{"type":"entity","name":"Frontend.Traffic.Sorting","entityType":"Feature","observations":["Clickable column headers for sorting packets","Supports Time, Source, Destination, Protocol, Length columns","Ascending/descending toggle with visual indicators","SortIcon component shows ↕ (inactive), ↑ (asc), ↓ (desc)","upd:2025-12-28,refs:1"]} -{"type":"entity","name":"Frontend.Traffic.FlowFiltering","entityType":"Feature","observations":["Click on Active Flow to filter packet list","Filtered count shows 'N / total Packets'","Clear Filter button to reset","Highlights selected flow in purple","upd:2025-12-28,refs:1"]} -{"type":"entity","name":"Backend.Services.SnifferService.Dissector","entityType":"Feature","observations":["Full protocol dissection using Scapy","Supports Ethernet, ARP, IPv4, TCP, UDP, ICMP layers","DNS layer with query parsing","HTTP layer with request/response detection","TLS/SSL layer detection","Application layer detection via port mapping (30+ protocols)","Payload extraction with hex and ASCII preview","upd:2025-12-28,refs:1"]} -{"type":"entity","name":"Backend.Services.SnifferService.PassiveDiscovery","entityType":"Feature","observations":["Tracks IP addresses from network traffic for passive asset discovery","Configurable source-only mode prevents phantom hosts (default: enabled)","Source IP validation filters invalid IPs (0.0.0.0, broadcast, multicast, link-local)","Granular packet filtering: unicast, multicast, broadcast (configurable per type)","Maintains discovered_hosts dictionary with first/last seen timestamps and MAC addresses","Filters prevent false positives from ARP scans, stale connections, and network probes","Interface configurable via Settings with auto-detection dropdown","upd:2025-12-29"]} -{"type":"entity","name":"Backend.Services.AssetService","entityType":"Service","observations":["Network asset discovery and management","NMAP integration for scanning","Asset metadata and tracking","upd:2025-12-27,refs:1"]} -{"type":"entity","name":"Backend.Services.GuacamoleService","entityType":"Service","observations":["Remote desktop protocol handling","VNC, RDP, SSH connection management","Apache Guacamole integration","upd:2025-12-27,refs:1"]} -{"type":"entity","name":"Backend.Core.Security","entityType":"Module","observations":["JWT token generation and validation","Password hashing with bcrypt","Role-based access control","upd:2025-12-27,refs:1"]} -{"type":"codegraph","name":"AccessHub.tsx","nodeType":"component","dependencies":["useAccessStore","ProtocolConnection"],"dependents":["Layout"]} -{"type":"codegraph","name":"PacketCrafting.tsx","nodeType":"component","dependencies":["useAuthStore","assetService"],"dependents":["Traffic.tsx"]} -{"type":"codegraph","name":"Traffic.tsx","nodeType":"page","dependencies":["PacketCrafting","assetService"],"dependents":["Layout"]} -{"type":"codegraph","name":"AssetService.py","nodeType":"service","dependencies":["Database","NMAP"],"dependents":["DiscoveryEndpoint"]} -{"type":"codegraph","name":"GuacamoleService.py","nodeType":"service","dependencies":["HTTPClient","ConnectionPool"],"dependents":["AccessEndpoint"]} -{"type":"relation","from":"AccessHub","to":"VaultFeature","relationType":"IMPLEMENTS"} -{"type":"relation","from":"VaultFeature","to":"GroupManagement","relationType":"USES"} -{"type":"relation","from":"Traffic","to":"PacketCrafting","relationType":"IMPLEMENTS"} -{"type":"relation","from":"Traffic","to":"PacketInspector","relationType":"IMPLEMENTS"} -{"type":"relation","from":"Traffic","to":"Sorting","relationType":"IMPLEMENTS"} -{"type":"relation","from":"Traffic","to":"FlowFiltering","relationType":"IMPLEMENTS"} -{"type":"relation","from":"PacketCrafting","to":"PacketStructure","relationType":"USES"} -{"type":"relation","from":"PacketInspector","to":"SnifferService.Dissector","relationType":"CONSUMES"} -{"type":"relation","from":"Backend.FastAPI","to":"Backend.Services","relationType":"DEPENDS_ON"} -{"type":"relation","from":"Frontend.React","to":"Backend.FastAPI","relationType":"CONSUMES"} -{"type":"entity","name":"NOP.Backend.Models.Flow","entityType":"model","observations":["Network traffic flow tracking with QoS metrics, DPI, threat scoring","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Models.Event","entityType":"model","observations":["Audit logging with event types (login, scan, alert) and severity levels","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Models.Vulnerability","entityType":"model","observations":["Security findings with CVE/CWE tracking, CVSS scoring","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Models.TopologyEdge","entityType":"model","observations":["Network topology connections with edge types (direct, routed, VPN, inferred)","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Models.Scan","entityType":"model","observations":["Scan jobs with types (discovery, port, service, vuln) and status tracking","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Models.ScanResult","entityType":"model","observations":["Individual scan findings storage","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Models.Credential","entityType":"model","observations":["Encrypted credential storage with AES-256-GCM encryption","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Models.Asset","entityType":"model","observations":["Network asset with classification, confidence scoring, vendor detection","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Models.User","entityType":"model","observations":["Authentication with role-based access (admin, operator, analyst, viewer)","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Models.Settings","entityType":"model","observations":["System configuration storage by category","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.AuthEndpoint","entityType":"endpoint","observations":["JWT authentication with login/logout/token refresh","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.AssetsEndpoint","entityType":"endpoint","observations":["Asset CRUD operations, stats, online/offline filtering","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.DiscoveryEndpoint","entityType":"endpoint","observations":["Network scanning with background tasks, scan status tracking","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.TrafficEndpoint","entityType":"endpoint","observations":["WebSocket traffic streaming, packet crafting, PCAP export","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.ScansEndpoint","entityType":"endpoint","observations":["Scan management (placeholder implementation)","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.CredentialsEndpoint","entityType":"endpoint","observations":["Credential management (placeholder implementation)","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.SettingsEndpoint","entityType":"endpoint","observations":["System settings CRUD by category with defaults","Discovery settings: track_source_only, filter_unicast, filter_multicast, filter_broadcast","Interface auto-detection via /api/v1/traffic/interfaces","upd:2025-12-29"]} -{"type":"entity","name":"Frontend.Settings.InterfaceSelector","entityType":"Feature","observations":["Auto-detected network interfaces with dropdown selector","Shows interface name, IP, and status (up/down)","Polls interfaces every 5 seconds for updates","Cyberpunk-themed styling matching rest of Settings UI","Located in Discovery settings → Network Interface section","upd:2025-12-29"]} -{"type":"entity","name":"TestEnvironment.TrafficSimulator","entityType":"Tool","observations":["Realistic traffic generator using Scapy","Simulates 13 traffic types: HTTP, SSH, MySQL, SMB, RDP, VNC, FTP, DNS, ARP, mDNS, SSDP, DHCP, PING","Weighted random selection for realistic distribution","Configurable duration and intensity (low/medium/high)","Located at scripts/simulate_realistic_traffic.py","upd:2025-12-29"]} -{"type":"entity","name":"Backend.Services.SnifferService.StormEngine","entityType":"Feature","observations":["Multi-tier packet storm generator: low (<1k PPS with scapy), medium (1k-10k raw socket bursts), high (10k-50k single-thread), flood (50k+ multi-threaded)","Raw socket implementation with CAP_NET_RAW capability requirement","SO_BROADCAST socket option for broadcast address support","Achieves 130k+ PPS on 4-core system, scales ~40k PPS per core","Multi-threaded flood mode (2-4 threads) for very high PPS targets","Ether layer fallback when raw socket creation fails","Located in backend/app/services/SnifferService.py","upd:2025-12-30"]} -{"type":"entity","name":"Backend.Docker.Capabilities","entityType":"Configuration","observations":["Backend container requires privileged: true and cap_add: [NET_RAW, NET_ADMIN]","Necessary for raw socket creation in storm functionality","docker-compose restart does NOT rebuild images - must use docker-compose build","Located in docker-compose.yml backend service configuration","upd:2025-12-30"]} -{"type":"entity","name":"Frontend.Storm.LiveMonitoring","entityType":"Feature","observations":["Packet storm testing UI with live host monitoring","Non-blocking ping with 5s timeout, assets dropdown integration","Current Status panel showing storm/ping state indicators","Real-time graph with 0-target_pps scale and connected polyline","Cyber theme styling matching Traffic page","Located at frontend/src/pages/Storm.tsx","upd:2025-12-30"]} -{"type":"entity","name":"Docker.NetworkArchitecture","entityType":"Configuration","observations":["Main services use nop-internal network (auto-created)","Test environment uses test-network (172.21.0.0/16, auto-created by docker-compose.test.yml)","Main compose runs independently without test-network","Optional connection via scripts/connect-to-test-network.sh for debugging","Vulnerable services isolated in docker-compose.test.yml with runtime resource limits","Build-time resource limits: 4GB RAM, 2 CPUs via scripts/build-with-limits.sh","upd:2025-12-30"]} -{"type":"entity","name":"TestEnvironment.Hosts","entityType":"Infrastructure","observations":["7 test hosts on 172.21.0.0/24 network (nop_test-network)","web-server (172.21.0.42), rdp-server (172.21.0.50), vnc-server (172.21.0.51)","ftp-server (172.21.0.52), ssh-server (172.21.0.69), database-server (172.21.0.123), file-server (172.21.0.200)","Managed via docker-compose.test.yml","Used for passive discovery filter testing","upd:2025-12-29"]} -{"type":"entity","name":"NOP.Backend.API.ReportsEndpoint","entityType":"endpoint","observations":["Reporting functionality","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.HealthEndpoint","entityType":"endpoint","observations":["Service health checks","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.AccessEndpoint","entityType":"endpoint","observations":["Remote access testing (SSH, TCP, RDP, FTP operations)","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.EventsEndpoint","entityType":"endpoint","observations":["Event retrieval with pagination","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.HostEndpoint","entityType":"endpoint","observations":["Host system monitoring, terminal WebSocket, filesystem operations","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Services.SnifferService","entityType":"service","observations":["Real-time packet capture, protocol dissection (30+ protocols), packet crafting","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Services.PingService","entityType":"service","observations":["Advanced ping with ICMP/TCP/UDP support (hping3-like)","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Services.NetworkScanner","entityType":"service","observations":["NMAP integration for discovery, port scanning, service/OS detection","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Services.DiscoveryService","entityType":"service","observations":["Scan result processing, asset database updates","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Services.AccessHubService","entityType":"service","observations":["SSH/TCP/FTP testing, credential management, system info gathering","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Services.UserService","entityType":"service","observations":["User management operations","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Services.AssetService","entityType":"service","observations":["Asset management and tracking","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Services.GuacamoleService","entityType":"service","observations":["Remote desktop protocol handling","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Pages.Dashboard","entityType":"page","observations":["Statistics, traffic graphs, event feed, asset type distribution","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Pages.Login","entityType":"page","observations":["Authentication form with JWT token handling","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Pages.Assets","entityType":"page","observations":["Asset grid view with filtering, inline actions","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Pages.Scans","entityType":"page","observations":["Tab-based scanning interface with WebSocket updates","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Pages.AccessHub","entityType":"page","observations":["Multi-protocol remote access with vault feature","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Pages.Topology","entityType":"page","observations":["Force-directed graph with layout modes, traffic visualization, subnet filtering","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Pages.Traffic","entityType":"page","observations":["Packet capture, flow filtering, packet crafting, packet inspector","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Pages.Settings","entityType":"page","observations":["System configuration by category","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Pages.Host","entityType":"page","observations":["System metrics, terminal, filesystem browser, desktop access tabs","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Components.Layout","entityType":"component","observations":["Sidebar navigation with scan/connection indicators, cyber-themed design","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Components.AssetDetailsSidebar","entityType":"component","observations":["Asset details with quick scan/connect actions","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Components.ProtocolConnection","entityType":"component","observations":["Multi-protocol connection handler (SSH, RDP, VNC, FTP) with Guacamole","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Components.ScanSettingsModal","entityType":"component","observations":["Scan configuration dialog","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Components.PacketCrafting","entityType":"component","observations":["Packet crafting UI","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Components.PacketCrafting_new","entityType":"component","observations":["Alternative packet crafting implementation","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Store.AuthStore","entityType":"store","observations":["User authentication state, JWT token management","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Store.ScanStore","entityType":"store","observations":["Scan tab management, multi-host support, scan options","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Store.AccessStore","entityType":"store","observations":["Connection tab management, protocol tracking, status updates","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Store.DiscoveryStore","entityType":"store","observations":["Discovery state tracking","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Services.AssetService","entityType":"service","observations":["Asset API client with scan operations","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Services.DashboardService","entityType":"service","observations":["Dashboard statistics and events API client","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Services.AccessService","entityType":"service","observations":["Credential management API client","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Services.AuthService","entityType":"service","observations":["Authentication API client","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Services.HostService","entityType":"service","observations":["Host monitoring and filesystem API client","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.AssetCreate","entityType":"schema","observations":["Asset creation validation","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.AssetUpdate","entityType":"schema","observations":["Asset update validation","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.AssetResponse","entityType":"schema","observations":["Asset API response format","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.SettingsCategory","entityType":"schema","observations":["Settings category validation","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.TrafficStats","entityType":"schema","observations":["Traffic statistics response","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.FlowResponse","entityType":"schema","observations":["Network flow response format","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.CredentialCreate","entityType":"schema","observations":["Credential creation validation","upd:2025-12-28"]} -{"type":"entity","name":"Backend.Features.WebSocketTraffic","entityType":"feature","observations":["Real-time traffic streaming with configurable filters","upd:2025-12-28"]} -{"type":"entity","name":"Backend.Features.PacketDissection","entityType":"feature","observations":["Multi-layer protocol dissection (Ethernet→ARP/IP→TCP/UDP/ICMP→App)","upd:2025-12-28"]} -{"type":"entity","name":"Backend.Features.PacketCrafting","entityType":"feature","observations":["Custom packet construction and sending","upd:2025-12-28"]} -{"type":"entity","name":"Backend.Features.BackgroundScanning","entityType":"feature","observations":["Async network discovery with task queue","upd:2025-12-28"]} -{"type":"entity","name":"Backend.Features.HostMonitoring","entityType":"feature","observations":["System metrics (CPU, memory, disk, network, processes)","upd:2025-12-28"]} -{"type":"entity","name":"Backend.Features.TerminalWebSocket","entityType":"feature","observations":["Interactive terminal via WebSocket","upd:2025-12-28"]} -{"type":"entity","name":"Backend.Features.FileSystemBrowser","entityType":"feature","observations":["Remote file operations (read, write, browse)","upd:2025-12-28"]} -{"type":"entity","name":"Backend.Features.EventAuditing","entityType":"feature","observations":["Comprehensive event logging with severity levels","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.MultiHostScanning","entityType":"feature","observations":["Scan multiple IPs simultaneously","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.ScanTabManagement","entityType":"feature","observations":["Persistent scan sessions with log streaming","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.TopologyVisualization","entityType":"feature","observations":["Force-directed graph with 3 layout modes","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.TopologyTrafficOverlay","entityType":"feature","observations":["Traffic volume visualization on edges","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.TopologySubnetFiltering","entityType":"feature","observations":["Filter topology by network range","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.GuacamoleIntegration","entityType":"feature","observations":["Apache Guacamole for RDP/VNC/SSH","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.FTPFileManager","entityType":"feature","observations":["FTP file browser with upload/download","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.CredentialVault","entityType":"feature","observations":["Encrypted credential storage","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.SystemMetricsMonitoring","entityType":"feature","observations":["Real-time CPU/memory/disk graphs","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.ProcessManagement","entityType":"feature","observations":["System process viewer","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.FileTransfer","entityType":"feature","observations":["Resumable file upload/download with progress tracking","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.DesktopAccess","entityType":"feature","observations":["Embedded VNC/RDP desktop viewer","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.ScanProfileManagement","entityType":"feature","observations":["Predefined scan configurations","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.AssetStatistics","entityType":"feature","observations":["Aggregate metrics by type/vendor/status","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.EventFeed","entityType":"feature","observations":["Real-time system events display","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.InterfaceActivityMonitor","entityType":"feature","observations":["Per-interface traffic history graphs","upd:2025-12-28"]} -{"type":"entity","name":"Frontend.Features.ConnectionHistory","entityType":"feature","observations":["Access hub connection tracking","upd:2025-12-28"]} -{"type":"relation","from":"NOP.Backend.API.DiscoveryEndpoint","to":"NOP.Backend.Services.NetworkScanner","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.API.DiscoveryEndpoint","to":"NOP.Backend.Services.DiscoveryService","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.API.TrafficEndpoint","to":"NOP.Backend.Services.SnifferService","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.API.AccessEndpoint","to":"NOP.Backend.Services.AccessHubService","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.API.AccessEndpoint","to":"NOP.Backend.Services.GuacamoleService","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.API.HostEndpoint","to":"NOP.Backend.Services.PingService","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.API.AssetsEndpoint","to":"NOP.Backend.Services.AssetService","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.API.EventsEndpoint","to":"NOP.Backend.Models.Event","relationType":"CONSUMES"} -{"type":"relation","from":"NOP.Backend.Services.DiscoveryService","to":"NOP.Backend.Models.Asset","relationType":"MODIFIES"} -{"type":"relation","from":"NOP.Backend.Services.DiscoveryService","to":"NOP.Backend.Models.Event","relationType":"CREATES"} -{"type":"relation","from":"NOP.Backend.Services.AccessHubService","to":"NOP.Backend.Models.Credential","relationType":"CONSUMES"} -{"type":"relation","from":"NOP.Backend.Services.NetworkScanner","to":"NOP.Backend.Models.Asset","relationType":"READS"} -{"type":"relation","from":"NOP.Backend.Services.SnifferService","to":"NOP.Backend.Models.Flow","relationType":"CREATES"} -{"type":"relation","from":"Frontend.Pages.Dashboard","to":"Frontend.Services.DashboardService","relationType":"USES"} -{"type":"relation","from":"Frontend.Pages.Dashboard","to":"Frontend.Services.AssetService","relationType":"USES"} -{"type":"relation","from":"Frontend.Pages.Assets","to":"Frontend.Services.AssetService","relationType":"USES"} -{"type":"relation","from":"Frontend.Pages.Scans","to":"Frontend.Store.ScanStore","relationType":"USES"} -{"type":"relation","from":"Frontend.Pages.AccessHub","to":"Frontend.Store.AccessStore","relationType":"USES"} -{"type":"relation","from":"Frontend.Pages.AccessHub","to":"Frontend.Services.AccessService","relationType":"USES"} -{"type":"relation","from":"Frontend.Pages.Topology","to":"Frontend.Services.AssetService","relationType":"USES"} -{"type":"relation","from":"Frontend.Pages.Topology","to":"Frontend.Services.DashboardService","relationType":"USES"} -{"type":"relation","from":"Frontend.Pages.Traffic","to":"NOP.Backend.Services.SnifferService","relationType":"CONSUMES_VIA_WS"} -{"type":"relation","from":"Frontend.Pages.Host","to":"Frontend.Services.HostService","relationType":"USES"} -{"type":"relation","from":"Frontend.Pages.Settings","to":"NOP.Backend.API.SettingsEndpoint","relationType":"USES"} -{"type":"relation","from":"Frontend.Components.Layout","to":"Frontend.Store.AuthStore","relationType":"USES"} -{"type":"relation","from":"Frontend.Components.Layout","to":"Frontend.Store.ScanStore","relationType":"USES"} -{"type":"relation","from":"Frontend.Components.Layout","to":"Frontend.Store.AccessStore","relationType":"USES"} -{"type":"relation","from":"Frontend.Components.Layout","to":"Frontend.Store.DiscoveryStore","relationType":"USES"} -{"type":"relation","from":"Frontend.Components.AssetDetailsSidebar","to":"Frontend.Store.ScanStore","relationType":"USES"} -{"type":"relation","from":"Frontend.Components.AssetDetailsSidebar","to":"Frontend.Store.AccessStore","relationType":"USES"} -{"type":"relation","from":"Frontend.Components.ProtocolConnection","to":"Frontend.Store.AccessStore","relationType":"USES"} -{"type":"relation","from":"Frontend.Components.ProtocolConnection","to":"Frontend.Store.AuthStore","relationType":"USES"} -{"type":"relation","from":"Frontend.Pages.Topology","to":"Frontend.Features.TopologyVisualization","relationType":"IMPLEMENTS"} -{"type":"relation","from":"Frontend.Pages.Host","to":"Backend.Features.HostMonitoring","relationType":"IMPLEMENTS"} -{"type":"relation","from":"Frontend.Pages.Host","to":"Backend.Features.TerminalWebSocket","relationType":"IMPLEMENTS"} -{"type":"relation","from":"Frontend.Pages.Host","to":"Backend.Features.FileSystemBrowser","relationType":"IMPLEMENTS"} -{"type":"relation","from":"Frontend.Components.ProtocolConnection","to":"Frontend.Features.GuacamoleIntegration","relationType":"IMPLEMENTS"} -{"type":"relation","from":"Frontend.Components.ProtocolConnection","to":"Frontend.Features.FTPFileManager","relationType":"IMPLEMENTS"} -{"type":"relation","from":"NOP.Backend.Services.SnifferService","to":"Backend.Features.PacketDissection","relationType":"IMPLEMENTS"} -{"type":"relation","from":"NOP.Backend.Services.SnifferService","to":"Backend.Features.PacketCrafting","relationType":"IMPLEMENTS"} -{"type":"codegraph","name":"SnifferService.py","nodeType":"service","dependencies":["Scapy","Threading","AsyncIO"],"dependents":["TrafficEndpoint"]} -{"type":"codegraph","name":"PingService.py","nodeType":"service","dependencies":["AsyncIO","Subprocess"],"dependents":["HostEndpoint"]} -{"type":"codegraph","name":"NetworkScanner.py","nodeType":"service","dependencies":["NMAP","AsyncIO"],"dependents":["DiscoveryEndpoint","DiscoveryService"]} -{"type":"codegraph","name":"DiscoveryService.py","nodeType":"service","dependencies":["Database","NetworkScanner","Asset.Model"],"dependents":["DiscoveryEndpoint"]} -{"type":"codegraph","name":"AccessHubService.py","nodeType":"service","dependencies":["SSH","FTP","AsyncIO","Credential.Model"],"dependents":["AccessEndpoint"]} -{"type":"codegraph","name":"UserService.py","nodeType":"service","dependencies":["Database","User.Model"],"dependents":["AuthEndpoint"]} -{"type":"codegraph","name":"TrafficEndpoint","nodeType":"endpoint","dependencies":["SnifferService","WebSocket"],"dependents":[]} -{"type":"codegraph","name":"DiscoveryEndpoint","nodeType":"endpoint","dependencies":["NetworkScanner","DiscoveryService","BackgroundTasks"],"dependents":[]} -{"type":"codegraph","name":"AccessEndpoint","nodeType":"endpoint","dependencies":["AccessHubService","GuacamoleService"],"dependents":[]} -{"type":"codegraph","name":"HostEndpoint","nodeType":"endpoint","dependencies":["PingService","WebSocket","psutil"],"dependents":[]} -{"type":"codegraph","name":"EventsEndpoint","nodeType":"endpoint","dependencies":["Event.Model","Database"],"dependents":[]} -{"type":"codegraph","name":"SettingsEndpoint","nodeType":"endpoint","dependencies":["Settings.Model","Database"],"dependents":[]} -{"type":"codegraph","name":"Dashboard.tsx","nodeType":"page","dependencies":["DashboardService","AssetService","AuthStore"],"dependents":["Layout"]} -{"type":"codegraph","name":"Topology.tsx","nodeType":"page","dependencies":["AssetService","DashboardService","ForceGraph2D"],"dependents":["Layout"]} -{"type":"codegraph","name":"Host.tsx","nodeType":"page","dependencies":["HostService","AuthStore","AccessStore","xterm"],"dependents":["Layout"]} -{"type":"codegraph","name":"Assets.tsx","nodeType":"page","dependencies":["AssetService","AuthStore"],"dependents":["Layout"]} -{"type":"codegraph","name":"Scans.tsx","nodeType":"page","dependencies":["ScanStore","AuthStore"],"dependents":["Layout"]} -{"type":"codegraph","name":"Login.tsx","nodeType":"page","dependencies":["AuthStore","axios"],"dependents":["Layout"]} -{"type":"codegraph","name":"Layout.tsx","nodeType":"component","dependencies":["AuthStore","ScanStore","AccessStore","DiscoveryStore"],"dependents":["App"]} -{"type":"codegraph","name":"AssetDetailsSidebar.tsx","nodeType":"component","dependencies":["ScanStore","AccessStore"],"dependents":["Assets","Topology"]} -{"type":"codegraph","name":"ProtocolConnection.tsx","nodeType":"component","dependencies":["AccessStore","AccessService","Guacamole"],"dependents":["AccessHub","Host"]} -{"type":"codegraph","name":"ScanSettingsModal.tsx","nodeType":"component","dependencies":["ScanStore"],"dependents":["Scans"]} -{"type":"codegraph","name":"authStore.ts","nodeType":"store","dependencies":["zustand"],"dependents":["All pages","Layout"]} -{"type":"codegraph","name":"scanStore.ts","nodeType":"store","dependencies":["zustand"],"dependents":["Scans","AssetDetailsSidebar","Layout"]} -{"type":"codegraph","name":"accessStore.ts","nodeType":"store","dependencies":["zustand"],"dependents":["AccessHub","ProtocolConnection","Layout","Host"]} -{"type":"codegraph","name":"discoveryStore.ts","nodeType":"store","dependencies":["zustand"],"dependents":["Layout","Assets"]} -{"type":"codegraph","name":"assetService.ts","nodeType":"service","dependencies":["axios"],"dependents":["Dashboard","Assets","Topology"]} -{"type":"codegraph","name":"dashboardService.ts","nodeType":"service","dependencies":["axios"],"dependents":["Dashboard","Topology"]} -{"type":"codegraph","name":"accessService.ts","nodeType":"service","dependencies":["axios"],"dependents":["ProtocolConnection","AccessHub"]} -{"type":"codegraph","name":"authService.ts","nodeType":"service","dependencies":["axios"],"dependents":["Login","AuthStore"]} -{"type":"codegraph","name":"hostService.ts","nodeType":"service","dependencies":["axios"],"dependents":["Host"]} -{"type":"codegraph","name":"Flow.Model","nodeType":"model","dependencies":["SQLAlchemy","PostgreSQL"],"dependents":["SnifferService"]} -{"type":"codegraph","name":"Event.Model","nodeType":"model","dependencies":["SQLAlchemy","PostgreSQL"],"dependents":["EventsEndpoint","DiscoveryService"]} -{"type":"codegraph","name":"TopologyEdge.Model","nodeType":"model","dependencies":["SQLAlchemy","PostgreSQL","Asset.Model"],"dependents":[]} -{"type":"codegraph","name":"Vulnerability.Model","nodeType":"model","dependencies":["SQLAlchemy","PostgreSQL","Asset.Model"],"dependents":[]} -{"type":"entity","name":"NOP.Backend.Core.Config","entityType":"module","observations":["Application settings using Pydantic BaseSettings","Environment variable configuration","Database and Redis connection strings","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Core.Database","entityType":"module","observations":["SQLAlchemy async database engine and session factory","Connection pooling configuration","Async context manager for database sessions","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Core.Redis","entityType":"module","observations":["Redis async client configuration","Connection management for caching and pub/sub","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Core.InitDB","entityType":"module","observations":["Database initialization and seeding","Default admin user creation","Schema creation and migrations","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Utils.Diagnostic","entityType":"utility","observations":["System diagnostic tool for troubleshooting","Database connectivity verification","Admin user and password validation","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Utils.ResetAdmin","entityType":"utility","observations":["Admin password reset utility","Database admin user password update","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.UserCreate","entityType":"schema","observations":["User creation validation schema","Username, email, password, role validation","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.UserResponse","entityType":"schema","observations":["User API response format","Excludes sensitive password data","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.ScanCreate","entityType":"schema","observations":["Scan job creation validation","Target, scan type, options validation","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.ScanResponse","entityType":"schema","observations":["Scan job response format","Includes status and results","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.ScanResultResponse","entityType":"schema","observations":["Individual scan result response","Finding details and metadata","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.CredentialResponse","entityType":"schema","observations":["Credential API response format","Encrypted credential data","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.PingResponse","entityType":"schema","observations":["Ping operation result schema","Latency, packet loss, hop count data","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.Schemas.SettingsUpdateRequest","entityType":"schema","observations":["Settings update validation","Category-based configuration updates","upd:2025-12-28"]} -{"type":"entity","name":"NOP.Backend.API.WebSocketRouter","entityType":"endpoint","observations":["WebSocket routing infrastructure","Terminal and traffic stream management","upd:2025-12-28"]} -{"type":"codegraph","name":"Config.py","nodeType":"module","dependencies":["Pydantic","os"],"dependents":["main.py","all services"]} -{"type":"codegraph","name":"Database.py","nodeType":"module","dependencies":["SQLAlchemy","asyncpg"],"dependents":["all endpoints","all services"]} -{"type":"codegraph","name":"Redis.py","nodeType":"module","dependencies":["redis-async"],"dependents":["main.py","caching"]} -{"type":"codegraph","name":"InitDB.py","nodeType":"module","dependencies":["Database.py","User.Model","Security.py"],"dependents":["main.py"]} -{"type":"codegraph","name":"WebSocketRouter","nodeType":"router","dependencies":["FastAPI","WebSocket"],"dependents":["main.py"]} -{"type":"relation","from":"NOP.Backend.Core.Database","to":"NOP.Backend.Models","relationType":"PROVIDES_SESSION"} -{"type":"relation","from":"NOP.Backend.Core.InitDB","to":"NOP.Backend.Core.Database","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.Core.InitDB","to":"NOP.Backend.Core.Security","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.API.WebSocketRouter","to":"Backend.Features.TerminalWebSocket","relationType":"IMPLEMENTS"} -{"type":"relation","from":"NOP.Backend.API.WebSocketRouter","to":"Backend.Features.WebSocketTraffic","relationType":"IMPLEMENTS"} -{"type":"relation","from":"NOP.Backend.Utils.Diagnostic","to":"NOP.Backend.Core.Database","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.Utils.Diagnostic","to":"NOP.Backend.Core.Security","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.Utils.ResetAdmin","to":"NOP.Backend.Core.Database","relationType":"USES"} -{"type":"relation","from":"NOP.Backend.Utils.ResetAdmin","to":"NOP.Backend.Core.Security","relationType":"USES"} -{"type":"entity","name":"NOP.AgentFramework.Skills","entityType":"Framework","observations":["13 core skills covering Quality, Process, Backend, Frontend, DevOps","Auto-detection based on project stack (Python, TypeScript, Docker)","Domain-specific skills in .claude/skills/domain.md","8 NOP-specific patterns: Network services, WebSocket, Protocol dissection, React/Zustand, FastAPI","upd:2025-12-29,refs:1"]} -{"type":"entity","name":"NOP.AgentFramework.Knowledge","entityType":"Framework","observations":["Dual knowledge system: project_knowledge.json + global_knowledge.json","JSONL format for entities, relations, codegraph nodes","Entity types: System, Service, Feature, Component, Model, Endpoint, etc.","Size target: <100KB total, Entity:Cluster ratio ≥6:1","upd:2025-12-29,refs:1"]} -{"type":"entity","name":"NOP.AgentFramework.Workflows","entityType":"Framework","observations":["7 workflow types: init_project, import_project, refactor_code, update_knowledge, update_skills, update_documents, update_tests","Multi-agent orchestration: _DevTeam coordinates Architect, Developer, Reviewer, Researcher","7-phase execution: CONTEXT→PLAN→COORDINATE→INTEGRATE→VERIFY→LEARN→COMPLETE","Workflow logs in log/workflow/ with timestamp and task slug","upd:2025-12-29,refs:1"]} -{"type":"entity","name":"NOP.Documentation.Structure","entityType":"Documentation","observations":["11 core documents organized in 6 categories","Categories: architecture, technical, guides, development, design, features","Naming: ARCH_[sys]_v[N].md, API_[svc]_v[N].md","Consolidated approach: 10-15 core docs target","upd:2025-12-29,refs:1"]} -{"type":"relation","from":"NOP.AgentFramework.Workflows","to":"NOP.AgentFramework.Knowledge","relationType":"UPDATES"} -{"type":"relation","from":"NOP.AgentFramework.Workflows","to":"NOP.AgentFramework.Skills","relationType":"UPDATES"} -{"type":"relation","from":"NOP.AgentFramework.Workflows","to":"NOP.Documentation.Structure","relationType":"UPDATES"} -{"type":"relation","from":"NOP.AgentFramework.Knowledge","to":"Global.Pattern.Knowledge.JSONL","relationType":"USES"} -{"type":"entity","name":"Frontend.Traffic.StormFeature","entityType":"Feature","observations":["Packet storm generation for testing network protection mechanisms","Supports 5 packet types: broadcast, multicast, TCP, UDP, raw IP","Configurable PPS (1-100,000 packets per second)","Real-time metrics: packets sent, bytes sent, duration, current PPS","Live PPS graph with 60-second rolling window","TCP flag selection (SYN, ACK, FIN, RST, PSH, URG)","Interface selection with IP display","Optional source IP and payload configuration","Warning banner for responsible use","upd:2025-12-29"]} -{"type":"entity","name":"Backend.Services.SnifferService.Storm","entityType":"Service","observations":["Dedicated storm thread for packet generation","Scapy-based packet crafting and sending","Real-time PPS calculation with 1-second granularity","Input validation for packet type, PPS, ports","Single storm session enforcement","Metrics collection: packets_sent, bytes_sent, current_pps, duration","Support for broadcast, multicast, TCP, UDP, raw IP packets","Configurable TTL, flags, payload","upd:2025-12-29"]} -{"type":"entity","name":"Backend.API.TrafficEndpoint.Storm","entityType":"endpoint","observations":["POST /api/v1/traffic/storm/start - Start packet storm","POST /api/v1/traffic/storm/stop - Stop active storm","GET /api/v1/traffic/storm/metrics - Get real-time metrics","JSON configuration with packet_type, dest_ip, pps, flags","Returns success/error status and metrics","upd:2025-12-29"]} -{"type":"codegraph","name":"Storm.tsx","nodeType":"page","dependencies":["useAuthStore"],"dependents":["Traffic.tsx"]} -{"type":"relation","from":"Traffic","to":"StormFeature","relationType":"IMPLEMENTS"} -{"type":"relation","from":"StormFeature","to":"SnifferService.Storm","relationType":"CONSUMES"} -{"type":"relation","from":"SnifferService.Storm","to":"Scapy","relationType":"USES"} -{"type":"entity","name":"Backend.Services.SnifferService.StormEngine","entityType":"module","observations":["Multi-threaded raw socket flooding for high PPS (50k+)","SO_BROADCAST required for broadcast addresses","CAP_NET_RAW capability required in container","System max ~155k PPS on 4 cores, scales with CPU count","upd:2024-12-30"]} -{"type":"entity","name":"Backend.Docker.Capabilities","entityType":"config","observations":["CAP_NET_RAW for raw socket creation","CAP_NET_ADMIN for network configuration","docker-compose restart does not rebuild - use docker-compose build","upd:2024-12-30"]} -{"type":"entity","name":"AgentFramework.ProtocolEnforcement","entityType":"pattern","observations":["Session start trigger at top of copilot-instructions.md","Action indicators: check, fix, add, create, update, refactor, investigate, implement, test, debug, optimize","Required emissions: [SESSION:] FIRST, [PHASE: CONTEXT] SECOND, [DECISION:], [ATTEMPT:], [SUBAGENT:]","Protocol compliance checklist in workflow logs","Skip protocol only for pure Q&A, single clarifications, no file edits","upd:2024-12-30"]} -{"type":"entity","name":"AgentFramework.KnowledgeLoadingVerification","entityType":"protocol","observations":["Explicit emission requirement: [KNOWLEDGE: loaded | entities=N | sources=M]","Verifies knowledge loaded from project_knowledge.json and global_knowledge.json","Prevents silent failures in knowledge loading","Makes context availability transparent to users","upd:2025-12-30"]} -{"type":"entity","name":"AgentFramework.SkillTransparency","entityType":"protocol","observations":["Explicit emission requirement: [SKILLS: loaded=N | available: #1,#2,#3...]","Lists all 14 core skills at session start","Format: #N-Name or #N Name","Auto-detection determines active skills (10-12 stack-specific)","Creates capability transparency and accountability","upd:2025-12-30"]} -{"type":"entity","name":"AgentFramework.SkillUsageTracking","entityType":"protocol","observations":["Emission format: [SKILL: #N Name | applied] → context","Shows which skills are applied during work","Improves user understanding of agent reasoning","Creates audit trail in workflow logs","Examples: [SKILL: #3 Security | applied] → Validating input sanitization","upd:2025-12-30"]} -{"type":"relation","from":"AgentFramework.SkillTransparency","to":"AgentFramework.SkillUsageTracking","relationType":"ENABLES"} -{"type":"relation","from":"AgentFramework.KnowledgeLoadingVerification","to":"AgentFramework.ProtocolEnforcement","relationType":"EXTENDS"} -{"type":"entity","name":"AgentFramework.OptimizationAnalysis","entityType":"analysis","observations":["Analyzed 19 historical workflow logs for protocol compliance","0% compliance with SKILLS/KNOWLEDGE/SKILL tracking (except protocol definition log)","95%+ projected compliance with new protocol enforcement","85-93% reduction in debugging time through transparency","18x improvement in visibility and accountability","upd:2025-12-30"]} -{"type":"entity","name":"AgentFramework.HistoricalCompliance","entityType":"metric","observations":["SESSION emission: 15.8% (3/19 logs)","SKILLS declaration: 0% (0/19 logs)","KNOWLEDGE verification: 0% (0/19 logs)","SKILL usage tracking: 0% (0/19 logs)","Overall compliance: 5.3% baseline","upd:2025-12-30"]} -{"type":"entity","name":"Documentation.EcosystemOptimizationAnalysis","entityType":"document","observations":["Comprehensive analysis comparing old vs new protocol","19 workflow logs examined (2025-12-28 to 2025-12-30)","Case studies: Multi-thread session, Passive discovery, Ecosystem analysis","ROI analysis: Time savings, trust metrics, debugging improvements","Migration path defined: Awareness, Enforcement, Validation phases","upd:2025-12-30"]} -{"type":"relation","from":"AgentFramework.OptimizationAnalysis","to":"AgentFramework.KnowledgeLoadingVerification","relationType":"VALIDATES"} -{"type":"relation","from":"AgentFramework.OptimizationAnalysis","to":"AgentFramework.SkillTransparency","relationType":"VALIDATES"} -{"type":"relation","from":"AgentFramework.HistoricalCompliance","to":"AgentFramework.ProtocolEnforcement","relationType":"MEASURES"} -{"type":"entity","name":"Frontend.UIComponents.CyberpunkCheckbox","entityType":"Pattern","observations":["Standardized checkbox design across all pages","Hidden native input with sr-only peer class","Custom styled div with colored border (purple/red/blue/green based on context)","White ◆ symbol displayed when checked via conditional rendering","Smooth transitions on state change with peer-checked:bg-* classes","Disabled states supported with peer-disabled:opacity-50","Applied to: Scans (port options, vuln databases), Settings (all toggles), Traffic (HTTPS toggle), ScanSettingsModal (discovery options), ProtocolConnection (remember credentials), PacketCrafting (TCP flags)","upd:2025-12-30,refs:7"]} -{"type":"entity","name":"Frontend.UIComponents.CyberpunkSlider","entityType":"Pattern","observations":["Standardized range slider design across application","Thin track (0.5px height) with cyber-purple border on cyber-gray background","Square red thumb (12px) with 2px border and rounded-none style","Glow effect using shadow-[0_0_8px_rgba(255,0,102,0.6)]","Enhanced glow on hover shadow-[0_0_12px_rgba(255,0,102,0.9)]","Webkit and Mozilla specific pseudo-element styling","Applied to: Settings page (18+ sliders via SettingsSlider component), ScanSettingsModal (PPS timing slider)","upd:2025-12-30,refs:2"]} -{"type":"entity","name":"Frontend.Pages.Scans","entityType":"Component","observations":["Dual-pane layout: Port scan (left) + Vulnerability scan (right)","Port scan options use cyberpunk checkboxes with red theme","Vulnerability database selection with purple-themed checkboxes","Manual port input with auto-detection fallback","Confirmation dialog before vulnerability scanning showing host IP and ports","Vulnerability details side panel with exploit code display","Navigation banner removed from Exploit page directing users here","upd:2025-12-30,refs:1"]} -{"type":"entity","name":"Frontend.Patterns.ComponentStandardization","entityType":"Process","observations":["Pattern for standardizing UI components across application","Step 1: Use grep_search to find all instances of component type","Step 2: Read current implementations to understand variations","Step 3: Design standardized component with consistent styling","Step 4: Use multi_replace_string_in_file for batch updates","Step 5: Rebuild frontend to deploy changes","Successfully applied to checkboxes (11 locations) and sliders (19 locations)","Maintains theme consistency while allowing contextual color variations","upd:2025-12-30,refs:1"]} +{"type": "entity", "name": "AgentFramework.HistoricalCompliance", "entityType": "metric", "observations": ["SESSION emission: 15.8% (3/19 logs), upd:2025-12-30", "SKILLS declaration: 0% (0/19 logs), upd:2025-12-30", "KNOWLEDGE verification: 0% (0/19 logs), upd:2025-12-30", "SKILL usage tracking: 0% (0/19 logs), upd:2025-12-30", "Overall compliance: 5.3% baseline, upd:2025-12-30", "upd:2025-12-30"]} +{"type": "entity", "name": "AgentFramework.KnowledgeLoadingVerification", "entityType": "protocol", "observations": ["Explicit emission requirement: [KNOWLEDGE: loaded | entities=N | sources=M], upd:2025-12-30", "Verifies knowledge loaded from project_knowledge.json and global_knowledge.json, upd:2025-12-30", "Prevents silent failures in knowledge loading, upd:2025-12-30", "Makes context availability transparent to users, upd:2025-12-30", "upd:2025-12-30"]} +{"type": "entity", "name": "AgentFramework.KnowledgeSystem", "entityType": "system", "observations": ["Terse map: codegraph + session learnings, upd:2025-12-30", "Mandatory read at [SESSION], write at [COMPLETE], upd:2025-12-30", "Format: JSONL, 30-50 chars/observation, upd:2025-12-30"]} +{"type": "entity", "name": "AgentFramework.OptimizationAnalysis", "entityType": "analysis", "observations": ["Analyzed 19 historical workflow logs for protocol compliance, upd:2025-12-30", "0% compliance with SKILLS/KNOWLEDGE/SKILL tracking (except protocol definition log), upd:2025-12-30", "95%+ projected compliance with new protocol enforcement, upd:2025-12-30", "85-93% reduction in debugging time through transparency, upd:2025-12-30", "18x improvement in visibility and accountability, upd:2025-12-30", "upd:2025-12-30"]} +{"type": "entity", "name": "AgentFramework.SkillTransparency", "entityType": "protocol", "observations": ["Explicit emission requirement: [SKILLS: loaded=N | available: #1,#2,#3...], upd:2025-12-30", "Lists all 14 core skills at session start, upd:2025-12-30", "Format: #N-Name or #N Name, upd:2025-12-30", "Auto-detection determines active skills (10-12 stack-specific), upd:2025-12-30", "Creates capability transparency and accountability, upd:2025-12-30", "upd:2025-12-30"]} +{"type": "entity", "name": "AgentFramework.SkillUsageTracking", "entityType": "protocol", "observations": ["Emission format: [SKILL: #N Name | applied] → context, upd:2025-12-30", "Shows which skills are applied during work, upd:2025-12-30", "Improves user understanding of agent reasoning, upd:2025-12-30", "Creates audit trail in workflow logs, upd:2025-12-30", "Examples: [SKILL: #3 Security | applied] → Validating input sanitization, upd:2025-12-30", "upd:2025-12-30"]} +{"type": "entity", "name": "Backend.API.TrafficEndpoint.Storm", "entityType": "endpoint", "observations": ["POST /api/v1/traffic/storm/start - Start packet storm, upd:2025-12-30", "POST /api/v1/traffic/storm/stop - Stop active storm, upd:2025-12-30", "GET /api/v1/traffic/storm/metrics - Get real-time metrics, upd:2025-12-30", "JSON configuration with packet_type, dest_ip, pps, flags, upd:2025-12-30", "Returns success/error status and metrics, upd:2025-12-30", "upd:2025-12-29"]} +{"type": "entity", "name": "Backend.Core.Security", "entityType": "module", "observations": ["JWT token generation and validation, upd:2025-12-30", "Password hashing with bcrypt, upd:2025-12-30", "Role-based access control, upd:2025-12-30", "upd:2025-12-27,refs:1"]} +{"type": "entity", "name": "Backend.Docker.Capabilities", "entityType": "configuration", "observations": ["Backend container requires privileged: true and cap_add: [NET_RAW, NET_ADMIN], upd:2025-12-30", "Necessary for raw socket creation in storm functionality, upd:2025-12-30", "docker-compose restart does NOT rebuild images - must use docker-compose build, upd:2025-12-30", "Located in docker-compose.yml backend service configuration, upd:2025-12-30", "upd:2025-12-30", "CAP_NET_RAW for raw socket creation, upd:2025-12-30", "CAP_NET_ADMIN for network configuration, upd:2025-12-30", "docker-compose restart does not rebuild - use docker-compose build, upd:2025-12-30", "upd:2024-12-30"]} +{"type": "entity", "name": "Backend.Features.BackgroundScanning", "entityType": "feature", "observations": ["Async network discovery with task queue, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Backend.Features.EventAuditing", "entityType": "feature", "observations": ["Comprehensive event logging with severity levels, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Backend.Features.FileSystemBrowser", "entityType": "feature", "observations": ["Remote file operations (read, write, browse), upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Backend.Features.HostMonitoring", "entityType": "feature", "observations": ["System metrics (CPU, memory, disk, network, processes), upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Backend.Features.PacketCrafting", "entityType": "feature", "observations": ["Custom packet construction and sending, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Backend.Features.PacketDissection", "entityType": "feature", "observations": ["Multi-layer protocol dissection (Ethernet→ARP/IP→TCP/UDP/ICMP→App), upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Backend.Features.TerminalWebSocket", "entityType": "feature", "observations": ["Interactive terminal via WebSocket, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Backend.Features.WebSocketTraffic", "entityType": "feature", "observations": ["Real-time traffic streaming with configurable filters, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Backend.Services.AssetService", "entityType": "service", "observations": ["Network asset discovery and management, upd:2025-12-30", "NMAP integration for scanning, upd:2025-12-30", "Asset metadata and tracking, upd:2025-12-30", "upd:2025-12-27,refs:1"]} +{"type": "entity", "name": "Backend.Services.GuacamoleService", "entityType": "service", "observations": ["Remote desktop protocol handling, upd:2025-12-30", "VNC, RDP, SSH connection management, upd:2025-12-30", "Apache Guacamole integration, upd:2025-12-30", "upd:2025-12-27,refs:1"]} +{"type": "entity", "name": "Backend.Services.SnifferService.Dissector", "entityType": "feature", "observations": ["Full protocol dissection using Scapy, upd:2025-12-30", "Supports Ethernet, ARP, IPv4, TCP, UDP, ICMP layers, upd:2025-12-30", "DNS layer with query parsing, upd:2025-12-30", "HTTP layer with request/response detection, upd:2025-12-30", "TLS/SSL layer detection, upd:2025-12-30", "Application layer detection via port mapping (30+ protocols), upd:2025-12-30", "Payload extraction with hex and ASCII preview, upd:2025-12-30", "upd:2025-12-28,refs:1"]} +{"type": "entity", "name": "Backend.Services.SnifferService.PassiveDiscovery", "entityType": "feature", "observations": ["Tracks IP addresses from network traffic for passive asset discovery, upd:2025-12-30", "Configurable source-only mode prevents phantom hosts (default: enabled), upd:2025-12-30", "Source IP validation filters invalid IPs (0.0.0.0, broadcast, multicast, link-local), upd:2025-12-30", "Granular packet filtering: unicast, multicast, broadcast (configurable per type), upd:2025-12-30", "Maintains discovered_hosts dictionary with first/last seen timestamps and MAC addresses, upd:2025-12-30", "Filters prevent false positives from ARP scans, stale connections, and network probes, upd:2025-12-30", "Interface configurable via Settings with auto-detection dropdown, upd:2025-12-30", "upd:2025-12-29"]} +{"type": "entity", "name": "Backend.Services.SnifferService.Storm", "entityType": "service", "observations": ["Dedicated storm thread for packet generation, upd:2025-12-30", "Scapy-based packet crafting and sending, upd:2025-12-30", "Real-time PPS calculation with 1-second granularity, upd:2025-12-30", "Input validation for packet type, PPS, ports, upd:2025-12-30", "Single storm session enforcement, upd:2025-12-30", "Metrics collection: packets_sent, bytes_sent, current_pps, duration, upd:2025-12-30", "Support for broadcast, multicast, TCP, UDP, raw IP packets, upd:2025-12-30", "Configurable TTL, flags, payload, upd:2025-12-30", "upd:2025-12-29"]} +{"type": "entity", "name": "Backend.Services.SnifferService.StormEngine", "entityType": "feature", "observations": ["Multi-tier packet storm generator: low (<1k PPS with scapy), medium (1k-10k raw socket bursts), high (10k-50k single-thread), flood (50k+ multi-threaded), upd:2025-12-30", "Raw socket implementation with CAP_NET_RAW capability requirement, upd:2025-12-30", "SO_BROADCAST socket option for broadcast address support, upd:2025-12-30", "Achieves 130k+ PPS on 4-core system, scales ~40k PPS per core, upd:2025-12-30", "Multi-threaded flood mode (2-4 threads) for very high PPS targets, upd:2025-12-30", "Ether layer fallback when raw socket creation fails, upd:2025-12-30", "Located in backend/app/services/SnifferService.py, upd:2025-12-30", "upd:2025-12-30", "Multi-threaded raw socket flooding for high PPS (50k+), upd:2025-12-30", "SO_BROADCAST required for broadcast addresses, upd:2025-12-30", "CAP_NET_RAW capability required in container, upd:2025-12-30", "System max ~155k PPS on 4 cores, scales with CPU count, upd:2025-12-30", "upd:2024-12-30"]} +{"type": "entity", "name": "Docker.NetworkArchitecture", "entityType": "configuration", "observations": ["Main services use nop-internal network (auto-created), upd:2025-12-30", "Test environment uses test-network (172.21.0.0/16, auto-created by docker-compose.test.yml), upd:2025-12-30", "Main compose runs independently without test-network, upd:2025-12-30", "Optional connection via scripts/connect-to-test-network.sh for debugging, upd:2025-12-30", "Vulnerable services isolated in docker-compose.test.yml with runtime resource limits, upd:2025-12-30", "Build-time resource limits: 4GB RAM, 2 CPUs via scripts/build-with-limits.sh, upd:2025-12-30", "upd:2025-12-30"]} +{"type": "entity", "name": "Documentation.EcosystemOptimizationAnalysis", "entityType": "document", "observations": ["Comprehensive analysis comparing old vs new protocol, upd:2025-12-30", "19 workflow logs examined (2025-12-28 to 2025-12-30), upd:2025-12-30", "Case studies: Multi-thread session, Passive discovery, Ecosystem analysis, upd:2025-12-30", "ROI analysis: Time savings, trust metrics, debugging improvements, upd:2025-12-30", "Migration path defined: Awareness, Enforcement, Validation phases, upd:2025-12-30", "upd:2025-12-30"]} +{"type": "entity", "name": "Frontend.AccessHub.ConnectionManagement", "entityType": "feature", "observations": ["Resizable connection area with drag handle, upd:2025-12-30", "Fullscreen mode for active connections, upd:2025-12-30", "Password-protected quick connect from vault, upd:2025-12-30", "Tab-based connection interface, upd:2025-12-30", "upd:2025-12-27,refs:1"]} +{"type": "entity", "name": "Frontend.AccessHub.GroupManagement", "entityType": "feature", "observations": ["User-defined groups for organizing hosts, upd:2025-12-30", "Group selector dropdown with custom styling, upd:2025-12-30", "Add new groups via modal interface, upd:2025-12-30", "Filter credentials by selected group, upd:2025-12-30", "upd:2025-12-27,refs:1"]} +{"type": "entity", "name": "Frontend.AccessHub.VaultFeature", "entityType": "feature", "observations": ["Password-protected credential vault with group management, upd:2025-12-30", "Three sorting modes: Recent, Frequent, Name, upd:2025-12-30", "Supports adding/removing credentials from vault, upd:2025-12-30", "Cyberpunk-styled UI with green accents and geometric symbols, upd:2025-12-30", "upd:2025-12-27,refs:1"]} +{"type": "entity", "name": "Frontend.Components.AssetDetailsSidebar", "entityType": "component", "observations": ["Asset details with quick scan/connect actions, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Components.Layout", "entityType": "component", "observations": ["Sidebar navigation with scan/connection indicators, cyber-themed design, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Components.PacketCrafting", "entityType": "component", "observations": ["Packet crafting UI, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Components.PacketCrafting_new", "entityType": "component", "observations": ["Alternative packet crafting implementation, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Components.ProtocolConnection", "entityType": "component", "observations": ["Multi-protocol connection handler (SSH, RDP, VNC, FTP) with Guacamole, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Components.ScanSettingsModal", "entityType": "component", "observations": ["Scan configuration dialog, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.AssetStatistics", "entityType": "feature", "observations": ["Aggregate metrics by type/vendor/status, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.ConnectionHistory", "entityType": "feature", "observations": ["Access hub connection tracking, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.CredentialVault", "entityType": "feature", "observations": ["Encrypted credential storage, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.DesktopAccess", "entityType": "feature", "observations": ["Embedded VNC/RDP desktop viewer, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.EventFeed", "entityType": "feature", "observations": ["Real-time system events display, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.FTPFileManager", "entityType": "feature", "observations": ["FTP file browser with upload/download, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.FileTransfer", "entityType": "feature", "observations": ["Resumable file upload/download with progress tracking, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.GuacamoleIntegration", "entityType": "feature", "observations": ["Apache Guacamole for RDP/VNC/SSH, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.InterfaceActivityMonitor", "entityType": "feature", "observations": ["Per-interface traffic history graphs, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.MultiHostScanning", "entityType": "feature", "observations": ["Scan multiple IPs simultaneously, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.ProcessManagement", "entityType": "feature", "observations": ["System process viewer, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.ScanProfileManagement", "entityType": "feature", "observations": ["Predefined scan configurations, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.ScanTabManagement", "entityType": "feature", "observations": ["Persistent scan sessions with log streaming, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.SystemMetricsMonitoring", "entityType": "feature", "observations": ["Real-time CPU/memory/disk graphs, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.TopologySubnetFiltering", "entityType": "feature", "observations": ["Filter topology by network range, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.TopologyTrafficOverlay", "entityType": "feature", "observations": ["Traffic volume visualization on edges, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Features.TopologyVisualization", "entityType": "feature", "observations": ["Force-directed graph with 3 layout modes, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Pages.AccessHub", "entityType": "page", "observations": ["Multi-protocol remote access with vault feature, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Pages.Assets", "entityType": "page", "observations": ["Asset grid view with filtering, inline actions, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Pages.Dashboard", "entityType": "page", "observations": ["Statistics, traffic graphs, event feed, asset type distribution, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Pages.Host", "entityType": "page", "observations": ["System metrics, terminal, filesystem browser, desktop access tabs, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Pages.Login", "entityType": "page", "observations": ["Authentication form with JWT token handling, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Pages.Scans", "entityType": "page", "observations": ["Tab-based scanning interface with WebSocket updates, upd:2025-12-30", "upd:2025-12-28", "Dual-pane layout: Port scan (left) + Vulnerability scan (right), upd:2025-12-30", "Port scan options use cyberpunk checkboxes with red theme, upd:2025-12-30", "Vulnerability database selection with purple-themed checkboxes, upd:2025-12-30", "Manual port input with auto-detection fallback, upd:2025-12-30", "Confirmation dialog before vulnerability scanning showing host IP and ports, upd:2025-12-30", "Vulnerability details side panel with exploit code display, upd:2025-12-30", "Navigation banner removed from Exploit page directing users here, upd:2025-12-30", "upd:2025-12-30,refs:1"]} +{"type": "entity", "name": "Frontend.Pages.Settings", "entityType": "page", "observations": ["System configuration by category, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Pages.Topology", "entityType": "page", "observations": ["Force-directed graph with layout modes, traffic visualization, subnet filtering, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Pages.Traffic", "entityType": "page", "observations": ["Packet capture, flow filtering, packet crafting, packet inspector, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Patterns.ComponentStandardization", "entityType": "process", "observations": ["Pattern for standardizing UI components across application, upd:2025-12-30", "Step 1: Use grep_search to find all instances of component type, upd:2025-12-30", "Step 2: Read current implementations to understand variations, upd:2025-12-30", "Step 3: Design standardized component with consistent styling, upd:2025-12-30", "Step 4: Use multi_replace_string_in_file for batch updates, upd:2025-12-30", "Step 5: Rebuild frontend to deploy changes, upd:2025-12-30", "Successfully applied to checkboxes (11 locations) and sliders (19 locations), upd:2025-12-30", "Maintains theme consistency while allowing contextual color variations, upd:2025-12-30", "upd:2025-12-30,refs:1"]} +{"type": "entity", "name": "Frontend.Services.AccessService", "entityType": "service", "observations": ["Credential management API client, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Services.AssetService", "entityType": "service", "observations": ["Asset API client with scan operations, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Services.AuthService", "entityType": "service", "observations": ["Authentication API client, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Services.DashboardService", "entityType": "service", "observations": ["Dashboard statistics and events API client, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Services.HostService", "entityType": "service", "observations": ["Host monitoring and filesystem API client, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Settings.InterfaceSelector", "entityType": "feature", "observations": ["Auto-detected network interfaces with dropdown selector, upd:2025-12-30", "Shows interface name, IP, and status (up/down), upd:2025-12-30", "Polls interfaces every 5 seconds for updates, upd:2025-12-30", "Cyberpunk-themed styling matching rest of Settings UI, upd:2025-12-30", "Located in Discovery settings → Network Interface section, upd:2025-12-30", "upd:2025-12-29"]} +{"type": "entity", "name": "Frontend.Store.AccessStore", "entityType": "store", "observations": ["Connection tab management, protocol tracking, status updates, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Store.AuthStore", "entityType": "store", "observations": ["User authentication state, JWT token management, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Store.DiscoveryStore", "entityType": "store", "observations": ["Discovery state tracking, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Store.ScanStore", "entityType": "store", "observations": ["Scan tab management, multi-host support, scan options, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "Frontend.Storm.LiveMonitoring", "entityType": "feature", "observations": ["Packet storm testing UI with live host monitoring, upd:2025-12-30", "Non-blocking ping with 5s timeout, assets dropdown integration, upd:2025-12-30", "Current Status panel showing storm/ping state indicators, upd:2025-12-30", "Real-time graph with 0-target_pps scale and connected polyline, upd:2025-12-30", "Cyber theme styling matching Traffic page, upd:2025-12-30", "Located at frontend/src/pages/Storm.tsx, upd:2025-12-30", "upd:2025-12-30"]} +{"type": "entity", "name": "Frontend.Traffic.FlowFiltering", "entityType": "feature", "observations": ["Click on Active Flow to filter packet list, upd:2025-12-30", "Filtered count shows 'N / total Packets', upd:2025-12-30", "Clear Filter button to reset, upd:2025-12-30", "Highlights selected flow in purple, upd:2025-12-30", "upd:2025-12-28,refs:1"]} +{"type": "entity", "name": "Frontend.Traffic.PacketCrafting", "entityType": "feature", "observations": ["Advanced packet crafting interface with protocol selection (TCP/UDP/ICMP/ARP/IP), upd:2025-12-30", "Left pane: basic parameters (protocol, IPs, ports, flags, send control), upd:2025-12-30", "Right pane: terminal-style output with trace and response, upd:2025-12-30", "Sliding structure panel (600px) for editing all packet fields by layer, upd:2025-12-30", "Hex/ASCII payload editor with synchronized editing, upd:2025-12-30", "IP dropdown with online assets highlighted green, upd:2025-12-30", "Port dropdown with common services, upd:2025-12-30", "Cyber-themed custom checkboxes for TCP flags, upd:2025-12-30", "Embedded as tab in Traffic page (no header/back button), upd:2025-12-30", "Edit Structure button in Send Control section, upd:2025-12-30", "upd:2025-12-28,refs:2"]} +{"type": "entity", "name": "Frontend.Traffic.PacketInspector", "entityType": "feature", "observations": ["600px wide sliding panel from right, upd:2025-12-30", "Full protocol dissection: Ethernet, ARP, IP, TCP, UDP, ICMP, DNS, HTTP, TLS, upd:2025-12-30", "Application layer detection based on ports (SSH, FTP, MySQL, RDP, etc), upd:2025-12-30", "Hex dump with ASCII preview, upd:2025-12-30", "Payload preview with hex and ASCII, upd:2025-12-30", "Text-xs fonts for consistency, upd:2025-12-30", "upd:2025-12-28,refs:1"]} +{"type": "entity", "name": "Frontend.Traffic.PacketStructure", "entityType": "feature", "observations": ["Layer 2 (Ethernet): Editable MAC addresses, fixed EtherType, upd:2025-12-30", "Layer 3 (IPv4): Editable TOS/ID/Flags/TTL, fixed Version/IHL/FragOffset, auto checksum, upd:2025-12-30", "Layer 4 (TCP): Editable ports/seq/ack/window/flags/urgent, fixed DataOffset/Reserved, auto checksum, upd:2025-12-30", "Layer 4 (UDP): Editable ports, auto length/checksum, upd:2025-12-30", "Layer 4 (ICMP): Editable type/code, auto checksum, upd:2025-12-30", "Payload hex editor with Tab to add byte, Backspace to remove, upd:2025-12-30", "upd:2025-12-28,refs:1"]} +{"type": "entity", "name": "Frontend.Traffic.Sorting", "entityType": "feature", "observations": ["Clickable column headers for sorting packets, upd:2025-12-30", "Supports Time, Source, Destination, Protocol, Length columns, upd:2025-12-30", "Ascending/descending toggle with visual indicators, upd:2025-12-30", "SortIcon component shows ↕ (inactive), ↑ (asc), ↓ (desc), upd:2025-12-30", "upd:2025-12-28,refs:1"]} +{"type": "entity", "name": "Frontend.Traffic.StormFeature", "entityType": "feature", "observations": ["Packet storm generation for testing network protection mechanisms, upd:2025-12-30", "Supports 5 packet types: broadcast, multicast, TCP, UDP, raw IP, upd:2025-12-30", "Configurable PPS (1-100,000 packets per second), upd:2025-12-30", "Real-time metrics: packets sent, bytes sent, duration, current PPS, upd:2025-12-30", "Live PPS graph with 60-second rolling window, upd:2025-12-30", "TCP flag selection (SYN, ACK, FIN, RST, PSH, URG), upd:2025-12-30", "Interface selection with IP display, upd:2025-12-30", "Optional source IP and payload configuration, upd:2025-12-30", "Warning banner for responsible use, upd:2025-12-30", "upd:2025-12-29"]} +{"type": "entity", "name": "Frontend.UIComponents.CyberpunkCheckbox", "entityType": "pattern", "observations": ["Standardized checkbox design across all pages, upd:2025-12-30", "Hidden native input with sr-only peer class, upd:2025-12-30", "Custom styled div with colored border (purple/red/blue/green based on context), upd:2025-12-30", "White ◆ symbol displayed when checked via conditional rendering, upd:2025-12-30", "Smooth transitions on state change with peer-checked:bg-* classes, upd:2025-12-30", "Disabled states supported with peer-disabled:opacity-50, upd:2025-12-30", "Applied to: Scans (port options, vuln databases), Settings (all toggles), Traffic (HTTPS toggle), ScanSettingsModal (discovery options), ProtocolConnection (remember credentials), PacketCrafting (TCP flags), upd:2025-12-30", "upd:2025-12-30,refs:7"]} +{"type": "entity", "name": "Frontend.UIComponents.CyberpunkSlider", "entityType": "pattern", "observations": ["Standardized range slider design across application, upd:2025-12-30", "Thin track (0.5px height) with cyber-purple border on cyber-gray background, upd:2025-12-30", "Square red thumb (12px) with 2px border and rounded-none style, upd:2025-12-30", "Glow effect using shadow-[0_0_8px_rgba(255,0,102,0.6)], upd:2025-12-30", "Enhanced glow on hover shadow-[0_0_12px_rgba(255,0,102,0.9)], upd:2025-12-30", "Webkit and Mozilla specific pseudo-element styling, upd:2025-12-30", "Applied to: Settings page (18+ sliders via SettingsSlider component), ScanSettingsModal (PPS timing slider), upd:2025-12-30", "upd:2025-12-30,refs:2"]} +{"type": "entity", "name": "NOP.AgentFramework.Knowledge", "entityType": "framework", "observations": ["Dual knowledge system: project_knowledge.json + global_knowledge.json, upd:2025-12-30", "JSONL format for entities, relations, codegraph nodes, upd:2025-12-30", "Entity types: System, Service, Feature, Component, Model, Endpoint, etc., upd:2025-12-30", "Size target: <100KB total, Entity:Cluster ratio ≥6:1, upd:2025-12-30", "upd:2025-12-29,refs:1"]} +{"type": "entity", "name": "NOP.AgentFramework.Skills", "entityType": "framework", "observations": ["13 core skills covering Quality, Process, Backend, Frontend, DevOps, upd:2025-12-30", "Auto-detection based on project stack (Python, TypeScript, Docker), upd:2025-12-30", "Domain-specific skills in .claude/skills/domain.md, upd:2025-12-30", "8 NOP-specific patterns: Network services, WebSocket, Protocol dissection, React/Zustand, FastAPI, upd:2025-12-30", "upd:2025-12-29,refs:1"]} +{"type": "entity", "name": "NOP.AgentFramework.Workflows", "entityType": "framework", "observations": ["7 workflow types: init_project, import_project, refactor_code, update_knowledge, update_skills, update_documents, update_tests, upd:2025-12-30", "Multi-agent orchestration: _DevTeam coordinates Architect, Developer, Reviewer, Researcher, upd:2025-12-30", "7-phase execution: CONTEXT→PLAN→COORDINATE→INTEGRATE→VERIFY→LEARN→COMPLETE, upd:2025-12-30", "Workflow logs in log/workflow/ with timestamp and task slug, upd:2025-12-30", "upd:2025-12-29,refs:1"]} +{"type": "entity", "name": "NOP.Backend.API.AccessEndpoint", "entityType": "endpoint", "observations": ["Remote access testing (SSH, TCP, RDP, FTP operations), upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.AssetsEndpoint", "entityType": "endpoint", "observations": ["Asset CRUD operations, stats, online/offline filtering, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.AuthEndpoint", "entityType": "endpoint", "observations": ["JWT authentication with login/logout/token refresh, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.CredentialsEndpoint", "entityType": "endpoint", "observations": ["Credential management (placeholder implementation), upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.DiscoveryEndpoint", "entityType": "endpoint", "observations": ["Network scanning with background tasks, scan status tracking, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.EventsEndpoint", "entityType": "endpoint", "observations": ["Event retrieval with pagination, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.HealthEndpoint", "entityType": "endpoint", "observations": ["Service health checks, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.HostEndpoint", "entityType": "endpoint", "observations": ["Host system monitoring, terminal WebSocket, filesystem operations, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.ReportsEndpoint", "entityType": "endpoint", "observations": ["Reporting functionality, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.ScansEndpoint", "entityType": "endpoint", "observations": ["Scan management (placeholder implementation), upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.SettingsEndpoint", "entityType": "endpoint", "observations": ["System settings CRUD by category with defaults, upd:2025-12-30", "Discovery settings: track_source_only, filter_unicast, filter_multicast, filter_broadcast, upd:2025-12-30", "Interface auto-detection via /api/v1/traffic/interfaces, upd:2025-12-30", "upd:2025-12-29"]} +{"type": "entity", "name": "NOP.Backend.API.TrafficEndpoint", "entityType": "endpoint", "observations": ["WebSocket traffic streaming, packet crafting, PCAP export, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.API.WebSocketRouter", "entityType": "endpoint", "observations": ["WebSocket routing infrastructure, upd:2025-12-30", "Terminal and traffic stream management, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Core.Config", "entityType": "module", "observations": ["Application settings using Pydantic BaseSettings, upd:2025-12-30", "Environment variable configuration, upd:2025-12-30", "Database and Redis connection strings, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Core.Database", "entityType": "module", "observations": ["SQLAlchemy async database engine and session factory, upd:2025-12-30", "Connection pooling configuration, upd:2025-12-30", "Async context manager for database sessions, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Core.InitDB", "entityType": "module", "observations": ["Database initialization and seeding, upd:2025-12-30", "Default admin user creation, upd:2025-12-30", "Schema creation and migrations, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Core.Redis", "entityType": "module", "observations": ["Redis async client configuration, upd:2025-12-30", "Connection management for caching and pub/sub, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.FastAPI", "entityType": "service", "observations": ["REST API with async operations, upd:2025-12-30", "JWT authentication and session management, upd:2025-12-30", "PostgreSQL + Redis data layer, upd:2025-12-30", "upd:2025-12-27,refs:1"]} +{"type": "entity", "name": "NOP.Backend.Models.Asset", "entityType": "model", "observations": ["Network asset with classification, confidence scoring, vendor detection, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Models.Credential", "entityType": "model", "observations": ["Encrypted credential storage with AES-256-GCM encryption, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Models.Event", "entityType": "model", "observations": ["Audit logging with event types (login, scan, alert) and severity levels, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Models.Flow", "entityType": "model", "observations": ["Network traffic flow tracking with QoS metrics, DPI, threat scoring, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Models.Scan", "entityType": "model", "observations": ["Scan jobs with types (discovery, port, service, vuln) and status tracking, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Models.ScanResult", "entityType": "model", "observations": ["Individual scan findings storage, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Models.Settings", "entityType": "model", "observations": ["System configuration storage by category, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Models.TopologyEdge", "entityType": "model", "observations": ["Network topology connections with edge types (direct, routed, VPN, inferred), upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Models.User", "entityType": "model", "observations": ["Authentication with role-based access (admin, operator, analyst, viewer), upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Models.Vulnerability", "entityType": "model", "observations": ["Security findings with CVE/CWE tracking, CVSS scoring, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.AssetCreate", "entityType": "schema", "observations": ["Asset creation validation, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.AssetResponse", "entityType": "schema", "observations": ["Asset API response format, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.AssetUpdate", "entityType": "schema", "observations": ["Asset update validation, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.CredentialCreate", "entityType": "schema", "observations": ["Credential creation validation, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.CredentialResponse", "entityType": "schema", "observations": ["Credential API response format, upd:2025-12-30", "Encrypted credential data, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.FlowResponse", "entityType": "schema", "observations": ["Network flow response format, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.PingResponse", "entityType": "schema", "observations": ["Ping operation result schema, upd:2025-12-30", "Latency, packet loss, hop count data, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.ScanCreate", "entityType": "schema", "observations": ["Scan job creation validation, upd:2025-12-30", "Target, scan type, options validation, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.ScanResponse", "entityType": "schema", "observations": ["Scan job response format, upd:2025-12-30", "Includes status and results, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.ScanResultResponse", "entityType": "schema", "observations": ["Individual scan result response, upd:2025-12-30", "Finding details and metadata, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.SettingsCategory", "entityType": "schema", "observations": ["Settings category validation, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.SettingsUpdateRequest", "entityType": "schema", "observations": ["Settings update validation, upd:2025-12-30", "Category-based configuration updates, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.TrafficStats", "entityType": "schema", "observations": ["Traffic statistics response, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.UserCreate", "entityType": "schema", "observations": ["User creation validation schema, upd:2025-12-30", "Username, email, password, role validation, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Schemas.UserResponse", "entityType": "schema", "observations": ["User API response format, upd:2025-12-30", "Excludes sensitive password data, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Services.AccessHubService", "entityType": "service", "observations": ["SSH/TCP/FTP testing, credential management, system info gathering, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Services.AssetService", "entityType": "service", "observations": ["Asset management and tracking, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Services.DiscoveryService", "entityType": "service", "observations": ["Scan result processing, asset database updates, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Services.GuacamoleService", "entityType": "service", "observations": ["Remote desktop protocol handling, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Services.NetworkScanner", "entityType": "service", "observations": ["NMAP integration for discovery, port scanning, service/OS detection, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Services.PingService", "entityType": "service", "observations": ["Advanced ping with ICMP/TCP/UDP support (hping3-like), upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Services.SnifferService", "entityType": "service", "observations": ["Real-time packet capture, protocol dissection (30+ protocols), packet crafting, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Services.UserService", "entityType": "service", "observations": ["User management operations, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Utils.Diagnostic", "entityType": "utility", "observations": ["System diagnostic tool for troubleshooting, upd:2025-12-30", "Database connectivity verification, upd:2025-12-30", "Admin user and password validation, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Backend.Utils.ResetAdmin", "entityType": "utility", "observations": ["Admin password reset utility, upd:2025-12-30", "Database admin user password update, upd:2025-12-30", "upd:2025-12-28"]} +{"type": "entity", "name": "NOP.Documentation.Structure", "entityType": "documentation", "observations": ["11 core documents organized in 6 categories, upd:2025-12-30", "Categories: architecture, technical, guides, development, design, features, upd:2025-12-30", "Naming: ARCH_[sys]_v[N].md, API_[svc]_v[N].md, upd:2025-12-30", "Consolidated approach: 10-15 core docs target, upd:2025-12-30", "upd:2025-12-29,refs:1"]} +{"type": "entity", "name": "NOP.Frontend.React", "entityType": "service", "observations": ["TypeScript + Tailwind CSS, upd:2025-12-30", "Zustand state management, upd:2025-12-30", "Cyberpunk-themed UI design, upd:2025-12-30", "upd:2025-12-27,refs:1"]} +{"type": "entity", "name": "NOP.Project.Architecture", "entityType": "system", "observations": ["Full-stack network operations platform, upd:2025-12-30", "FastAPI backend + React frontend + Docker infrastructure, upd:2025-12-30", "Multi-protocol remote access (SSH, VNC, RDP, FTP), upd:2025-12-30", "upd:2025-12-28,refs:1"]} +{"type": "entity", "name": "TestEnvironment.Hosts", "entityType": "infrastructure", "observations": ["7 test hosts on 172.21.0.0/24 network (nop_test-network), upd:2025-12-30", "web-server (172.21.0.42), rdp-server (172.21.0.50), vnc-server (172.21.0.51), upd:2025-12-30", "ftp-server (172.21.0.52), ssh-server (172.21.0.69), database-server (172.21.0.123), file-server (172.21.0.200), upd:2025-12-30", "Managed via docker-compose.test.yml, upd:2025-12-30", "Used for passive discovery filter testing, upd:2025-12-30", "upd:2025-12-29"]} +{"type": "entity", "name": "TestEnvironment.TrafficSimulator", "entityType": "tool", "observations": ["Realistic traffic generator using Scapy, upd:2025-12-30", "Simulates 13 traffic types: HTTP, SSH, MySQL, SMB, RDP, VNC, FTP, DNS, ARP, mDNS, SSDP, DHCP, PING, upd:2025-12-30", "Weighted random selection for realistic distribution, upd:2025-12-30", "Configurable duration and intensity (low/medium/high), upd:2025-12-30", "Located at scripts/simulate_realistic_traffic.py, upd:2025-12-30", "upd:2025-12-29"]} +{"type": "codegraph", "name": "AccessEndpoint", "nodeType": "endpoint", "dependencies": ["AccessHubService", "GuacamoleService"], "dependents": []} +{"type": "codegraph", "name": "AccessHub.tsx", "nodeType": "component", "dependencies": ["useAccessStore", "ProtocolConnection"], "dependents": ["Layout"]} +{"type": "codegraph", "name": "AccessHubService.py", "nodeType": "service", "dependencies": ["SSH", "FTP", "AsyncIO", "Credential.Model"], "dependents": ["AccessEndpoint"]} +{"type": "codegraph", "name": "AssetDetailsSidebar.tsx", "nodeType": "component", "dependencies": ["ScanStore", "AccessStore"], "dependents": ["Assets", "Topology"]} +{"type": "codegraph", "name": "AssetService.py", "nodeType": "service", "dependencies": ["Database", "NMAP"], "dependents": ["DiscoveryEndpoint"]} +{"type": "codegraph", "name": "Assets.tsx", "nodeType": "page", "dependencies": ["AssetService", "AuthStore"], "dependents": ["Layout"]} +{"type": "codegraph", "name": "Config.py", "nodeType": "module", "dependencies": ["Pydantic", "os"], "dependents": ["main.py", "all services"]} +{"type": "codegraph", "name": "Dashboard.tsx", "nodeType": "page", "dependencies": ["DashboardService", "AssetService", "AuthStore"], "dependents": ["Layout"]} +{"type": "codegraph", "name": "Database.py", "nodeType": "module", "dependencies": ["SQLAlchemy", "asyncpg"], "dependents": ["all endpoints", "all services"]} +{"type": "codegraph", "name": "DiscoveryEndpoint", "nodeType": "endpoint", "dependencies": ["NetworkScanner", "DiscoveryService", "BackgroundTasks"], "dependents": []} +{"type": "codegraph", "name": "DiscoveryService.py", "nodeType": "service", "dependencies": ["Database", "NetworkScanner", "Asset.Model"], "dependents": ["DiscoveryEndpoint"]} +{"type": "codegraph", "name": "Event.Model", "nodeType": "model", "dependencies": ["SQLAlchemy", "PostgreSQL"], "dependents": ["EventsEndpoint", "DiscoveryService"]} +{"type": "codegraph", "name": "EventsEndpoint", "nodeType": "endpoint", "dependencies": ["Event.Model", "Database"], "dependents": []} +{"type": "codegraph", "name": "Flow.Model", "nodeType": "model", "dependencies": ["SQLAlchemy", "PostgreSQL"], "dependents": ["SnifferService"]} +{"type": "codegraph", "name": "GuacamoleService.py", "nodeType": "service", "dependencies": ["HTTPClient", "ConnectionPool"], "dependents": ["AccessEndpoint"]} +{"type": "codegraph", "name": "Host.tsx", "nodeType": "page", "dependencies": ["HostService", "AuthStore", "AccessStore", "xterm"], "dependents": ["Layout"]} +{"type": "codegraph", "name": "HostEndpoint", "nodeType": "endpoint", "dependencies": ["PingService", "WebSocket", "psutil"], "dependents": []} +{"type": "codegraph", "name": "InitDB.py", "nodeType": "module", "dependencies": ["Database.py", "User.Model", "Security.py"], "dependents": ["main.py"]} +{"type": "codegraph", "name": "Layout.tsx", "nodeType": "component", "dependencies": ["AuthStore", "ScanStore", "AccessStore", "DiscoveryStore"], "dependents": ["App"]} +{"type": "codegraph", "name": "Login.tsx", "nodeType": "page", "dependencies": ["AuthStore", "axios"], "dependents": ["Layout"]} +{"type": "codegraph", "name": "NetworkScanner.py", "nodeType": "service", "dependencies": ["NMAP", "AsyncIO"], "dependents": ["DiscoveryEndpoint", "DiscoveryService"]} +{"type": "codegraph", "name": "PacketCrafting.tsx", "nodeType": "component", "dependencies": ["useAuthStore", "assetService"], "dependents": ["Traffic.tsx"]} +{"type": "codegraph", "name": "PingService.py", "nodeType": "service", "dependencies": ["AsyncIO", "Subprocess"], "dependents": ["HostEndpoint"]} +{"type": "codegraph", "name": "ProtocolConnection.tsx", "nodeType": "component", "dependencies": ["AccessStore", "AccessService", "Guacamole"], "dependents": ["AccessHub", "Host"]} +{"type": "codegraph", "name": "Redis.py", "nodeType": "module", "dependencies": ["redis-async"], "dependents": ["main.py", "caching"]} +{"type": "codegraph", "name": "ScanSettingsModal.tsx", "nodeType": "component", "dependencies": ["ScanStore"], "dependents": ["Scans"]} +{"type": "codegraph", "name": "Scans.tsx", "nodeType": "page", "dependencies": ["ScanStore", "AuthStore"], "dependents": ["Layout"]} +{"type": "codegraph", "name": "SettingsEndpoint", "nodeType": "endpoint", "dependencies": ["Settings.Model", "Database"], "dependents": []} +{"type": "codegraph", "name": "SnifferService.py", "nodeType": "service", "dependencies": ["Scapy", "Threading", "AsyncIO"], "dependents": ["TrafficEndpoint"]} +{"type": "codegraph", "name": "Storm.tsx", "nodeType": "page", "dependencies": ["useAuthStore"], "dependents": ["Traffic.tsx"]} +{"type": "codegraph", "name": "Topology.tsx", "nodeType": "page", "dependencies": ["AssetService", "DashboardService", "ForceGraph2D"], "dependents": ["Layout"]} +{"type": "codegraph", "name": "TopologyEdge.Model", "nodeType": "model", "dependencies": ["SQLAlchemy", "PostgreSQL", "Asset.Model"], "dependents": []} +{"type": "codegraph", "name": "Traffic.tsx", "nodeType": "page", "dependencies": ["PacketCrafting", "assetService"], "dependents": ["Layout"]} +{"type": "codegraph", "name": "TrafficEndpoint", "nodeType": "endpoint", "dependencies": ["SnifferService", "WebSocket"], "dependents": []} +{"type": "codegraph", "name": "UserService.py", "nodeType": "service", "dependencies": ["Database", "User.Model"], "dependents": ["AuthEndpoint"]} +{"type": "codegraph", "name": "Vulnerability.Model", "nodeType": "model", "dependencies": ["SQLAlchemy", "PostgreSQL", "Asset.Model"], "dependents": []} +{"type": "codegraph", "name": "WebSocketRouter", "nodeType": "router", "dependencies": ["FastAPI", "WebSocket"], "dependents": ["main.py"]} +{"type": "codegraph", "name": "accessService.ts", "nodeType": "service", "dependencies": ["axios"], "dependents": ["ProtocolConnection", "AccessHub"]} +{"type": "codegraph", "name": "accessStore.ts", "nodeType": "store", "dependencies": ["zustand"], "dependents": ["AccessHub", "ProtocolConnection", "Layout", "Host"]} +{"type": "codegraph", "name": "assetService.ts", "nodeType": "service", "dependencies": ["axios"], "dependents": ["Dashboard", "Assets", "Topology"]} +{"type": "codegraph", "name": "authService.ts", "nodeType": "service", "dependencies": ["axios"], "dependents": ["Login", "AuthStore"]} +{"type": "codegraph", "name": "authStore.ts", "nodeType": "store", "dependencies": ["zustand"], "dependents": ["All pages", "Layout"]} +{"type": "codegraph", "name": "dashboardService.ts", "nodeType": "service", "dependencies": ["axios"], "dependents": ["Dashboard", "Topology"]} +{"type": "codegraph", "name": "discoveryStore.ts", "nodeType": "store", "dependencies": ["zustand"], "dependents": ["Layout", "Assets"]} +{"type": "codegraph", "name": "hostService.ts", "nodeType": "service", "dependencies": ["axios"], "dependents": ["Host"]} +{"type": "codegraph", "name": "scanStore.ts", "nodeType": "store", "dependencies": ["zustand"], "dependents": ["Scans", "AssetDetailsSidebar", "Layout"]} +{"type": "relation", "from": "AccessHub", "to": "VaultFeature", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "AgentFramework.HistoricalCompliance", "to": "AgentFramework.ProtocolEnforcement", "relationType": "VALIDATES"} +{"type": "relation", "from": "AgentFramework.KnowledgeLoadingVerification", "to": "AgentFramework.ProtocolEnforcement", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "AgentFramework.KnowledgeSystem", "to": "project_knowledge.json", "relationType": "USES"} +{"type": "relation", "from": "AgentFramework.OptimizationAnalysis", "to": "AgentFramework.KnowledgeLoadingVerification", "relationType": "VALIDATES"} +{"type": "relation", "from": "AgentFramework.OptimizationAnalysis", "to": "AgentFramework.SkillTransparency", "relationType": "VALIDATES"} +{"type": "relation", "from": "AgentFramework.SkillTransparency", "to": "AgentFramework.SkillUsageTracking", "relationType": "VALIDATES"} +{"type": "relation", "from": "Backend.FastAPI", "to": "Backend.Services", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Components.AssetDetailsSidebar", "to": "Frontend.Store.AccessStore", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Components.AssetDetailsSidebar", "to": "Frontend.Store.ScanStore", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Components.Layout", "to": "Frontend.Store.AccessStore", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Components.Layout", "to": "Frontend.Store.AuthStore", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Components.Layout", "to": "Frontend.Store.DiscoveryStore", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Components.Layout", "to": "Frontend.Store.ScanStore", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Components.ProtocolConnection", "to": "Frontend.Features.FTPFileManager", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "Frontend.Components.ProtocolConnection", "to": "Frontend.Features.GuacamoleIntegration", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "Frontend.Components.ProtocolConnection", "to": "Frontend.Store.AccessStore", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Components.ProtocolConnection", "to": "Frontend.Store.AuthStore", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.AccessHub", "to": "Frontend.Services.AccessService", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.AccessHub", "to": "Frontend.Store.AccessStore", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.Assets", "to": "Frontend.Services.AssetService", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.Dashboard", "to": "Frontend.Services.AssetService", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.Dashboard", "to": "Frontend.Services.DashboardService", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.Host", "to": "Backend.Features.FileSystemBrowser", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "Frontend.Pages.Host", "to": "Backend.Features.HostMonitoring", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "Frontend.Pages.Host", "to": "Backend.Features.TerminalWebSocket", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "Frontend.Pages.Host", "to": "Frontend.Services.HostService", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.Scans", "to": "Frontend.Store.ScanStore", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.Settings", "to": "NOP.Backend.API.SettingsEndpoint", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.Topology", "to": "Frontend.Features.TopologyVisualization", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "Frontend.Pages.Topology", "to": "Frontend.Services.AssetService", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.Topology", "to": "Frontend.Services.DashboardService", "relationType": "USES"} +{"type": "relation", "from": "Frontend.Pages.Traffic", "to": "NOP.Backend.Services.SnifferService", "relationType": "USES"} +{"type": "relation", "from": "Frontend.React", "to": "Backend.FastAPI", "relationType": "USES"} +{"type": "relation", "from": "NOP.AgentFramework.Knowledge", "to": "Global.Pattern.Knowledge.JSONL", "relationType": "USES"} +{"type": "relation", "from": "NOP.AgentFramework.Workflows", "to": "NOP.AgentFramework.Knowledge", "relationType": "MODIFIES"} +{"type": "relation", "from": "NOP.AgentFramework.Workflows", "to": "NOP.AgentFramework.Skills", "relationType": "MODIFIES"} +{"type": "relation", "from": "NOP.AgentFramework.Workflows", "to": "NOP.Documentation.Structure", "relationType": "MODIFIES"} +{"type": "relation", "from": "NOP.Backend.API.AccessEndpoint", "to": "NOP.Backend.Services.AccessHubService", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.API.AccessEndpoint", "to": "NOP.Backend.Services.GuacamoleService", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.API.AssetsEndpoint", "to": "NOP.Backend.Services.AssetService", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.API.DiscoveryEndpoint", "to": "NOP.Backend.Services.DiscoveryService", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.API.DiscoveryEndpoint", "to": "NOP.Backend.Services.NetworkScanner", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.API.EventsEndpoint", "to": "NOP.Backend.Models.Event", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.API.HostEndpoint", "to": "NOP.Backend.Services.PingService", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.API.TrafficEndpoint", "to": "NOP.Backend.Services.SnifferService", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.API.WebSocketRouter", "to": "Backend.Features.TerminalWebSocket", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "NOP.Backend.API.WebSocketRouter", "to": "Backend.Features.WebSocketTraffic", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "NOP.Backend.Core.Database", "to": "NOP.Backend.Models", "relationType": "PROVIDES"} +{"type": "relation", "from": "NOP.Backend.Core.InitDB", "to": "NOP.Backend.Core.Database", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.Core.InitDB", "to": "NOP.Backend.Core.Security", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.Services.AccessHubService", "to": "NOP.Backend.Models.Credential", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.Services.DiscoveryService", "to": "NOP.Backend.Models.Asset", "relationType": "MODIFIES"} +{"type": "relation", "from": "NOP.Backend.Services.DiscoveryService", "to": "NOP.Backend.Models.Event", "relationType": "MODIFIES"} +{"type": "relation", "from": "NOP.Backend.Services.NetworkScanner", "to": "NOP.Backend.Models.Asset", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.Services.SnifferService", "to": "Backend.Features.PacketCrafting", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "NOP.Backend.Services.SnifferService", "to": "Backend.Features.PacketDissection", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "NOP.Backend.Services.SnifferService", "to": "NOP.Backend.Models.Flow", "relationType": "MODIFIES"} +{"type": "relation", "from": "NOP.Backend.Utils.Diagnostic", "to": "NOP.Backend.Core.Database", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.Utils.Diagnostic", "to": "NOP.Backend.Core.Security", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.Utils.ResetAdmin", "to": "NOP.Backend.Core.Database", "relationType": "USES"} +{"type": "relation", "from": "NOP.Backend.Utils.ResetAdmin", "to": "NOP.Backend.Core.Security", "relationType": "USES"} +{"type": "relation", "from": "PacketCrafting", "to": "PacketStructure", "relationType": "USES"} +{"type": "relation", "from": "PacketInspector", "to": "SnifferService.Dissector", "relationType": "USES"} +{"type": "relation", "from": "SnifferService.Storm", "to": "Scapy", "relationType": "USES"} +{"type": "relation", "from": "StormFeature", "to": "SnifferService.Storm", "relationType": "USES"} +{"type": "relation", "from": "Traffic", "to": "FlowFiltering", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "Traffic", "to": "PacketCrafting", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "Traffic", "to": "PacketInspector", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "Traffic", "to": "Sorting", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "Traffic", "to": "StormFeature", "relationType": "IMPLEMENTS"} +{"type": "relation", "from": "VaultFeature", "to": "GroupManagement", "relationType": "USES"}