Skip to content

V2.1#20

Merged
Neuro-Rift merged 3 commits into
mainfrom
V2.1
Feb 11, 2026
Merged

V2.1#20
Neuro-Rift merged 3 commits into
mainfrom
V2.1

Conversation

@Neuro-Rift
Copy link
Copy Markdown
Owner

No description provided.

@Neuro-Rift Neuro-Rift merged commit 56998a6 into main Feb 11, 2026
2 of 4 checks passed
@deepsource-io
Copy link
Copy Markdown
Contributor

deepsource-io Bot commented Feb 11, 2026

Here's the code health analysis summary for commits de333c2..50c4e2f. View details on DeepSource ↗.

Analysis Summary

AnalyzerStatusSummaryLink
DeepSource Python LogoPython❌ Failure
❗ 2 occurences introduced
🎯 18 occurences resolved
View Check ↗

💡 If you’re a repository administrator, you can configure the quality gates from the settings.

1 similar comment
@deepsource-io
Copy link
Copy Markdown
Contributor

deepsource-io Bot commented Feb 11, 2026

Here's the code health analysis summary for commits de333c2..50c4e2f. View details on DeepSource ↗.

Analysis Summary

AnalyzerStatusSummaryLink
DeepSource Python LogoPython❌ Failure
❗ 2 occurences introduced
🎯 18 occurences resolved
View Check ↗

💡 If you’re a repository administrator, you can configure the quality gates from the settings.

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Feb 11, 2026

Greptile Overview

Greptile Summary

This PR attempts to introduce NeuroRift V2.1 with an enhanced Web Mode interface, but contains critical unresolved Git merge conflicts that prevent the code from executing.

Critical Issues

  • 14+ files contain unresolved merge conflict markers (<<<<<<<, =======, >>>>>>>) including core files like neurorift_main.py, setup.py, requirements.txt, and most web-ui components
  • The main entry point neurorift_main.py has merge conflicts in the header, imports, and __init__ method - Python will fail to parse this file
  • requirements.txt has a syntax error (missing newline between dependencies) and duplicate aiofiles entries
  • setup.py has conflicts in the module list that will cause package installation to fail
  • All web-ui React components have unresolved conflicts between two different implementations

Logical Issues Found

  • Hardcoded path uses .vulnforge instead of .neurorift in web-ui/src/app/api/sessions/route.ts:9
  • Argument parsing in web-ui/src/app/api/tools/run/route.ts:20 doesn't handle quoted arguments correctly
  • Hardcoded /usr/bin/go path in neurorift_main.py:221 won't work on all systems

What This PR Attempts to Add

When conflicts are resolved, this PR appears to introduce:

  • Next.js-based web UI with an "Operator Plane" for manual tool execution
  • Session management UI and APIs
  • Artifact viewer for scan results
  • Multiple panel components (Agent Graph, Memory Pulse, Permissions, Config, etc.)
  • Adapter pattern for prototype vs. real mode
  • New API routes for tool execution, session management, and filesystem access

This PR cannot be merged in its current state - all merge conflicts must be resolved first.

Confidence Score: 0/5

  • This PR cannot be merged - contains unresolved merge conflicts that break all core functionality
  • Score of 0 reflects that the code will not execute due to Git merge conflict markers in critical files including the main entry point, package configuration, and dependencies. Python cannot parse files with <<<<<<< markers, npm cannot install from a malformed requirements.txt, and React components cannot compile with conflicting implementations. The PR must be completely reworked to resolve all conflicts before it can be reviewed for functionality.
  • Critical attention required: neurorift_main.py, setup.py, requirements.txt, web-ui/src/app/page.tsx, web-ui/src/components/webmode/WebModeProvider.tsx, and 9+ other web-ui panel components - all contain unresolved merge conflicts

Important Files Changed

Filename Overview
neurorift_main.py Contains unresolved merge conflicts throughout - cannot execute
requirements.txt Has merge conflicts and syntax error in dependencies list
setup.py Unresolved merge conflicts in module list and metadata
web-ui/src/app/page.tsx Entire component has unresolved merge conflict
web-ui/src/components/webmode/WebModeProvider.tsx Complete merge conflict in context provider implementation
web-ui/src/app/api/sessions/route.ts New API endpoint with path mismatch bug (uses .vulnforge instead of .neurorift)
web-ui/src/app/api/tools/run/route.ts Tool execution API with argument parsing issue for quoted strings
web-ui/src/app/layout.tsx Root layout with merge conflict in metadata/structure
web-ui/src/components/webmode/panels/CommandPanel.tsx Command panel with merge conflicts
web-ui/src/components/webmode/panels/AgentGraphPanel.tsx Agent visualization panel with merge conflicts

Sequence Diagram

sequenceDiagram
    participant User
    participant WebUI as Next.js Web UI
    participant API as API Routes
    participant Adapter as WebMode Adapter
    participant Python as NeuroRift Backend
    participant Tools as Security Tools

    User->>WebUI: Access Operator Plane
    WebUI->>API: POST /api/tools/run
    API->>API: Validate allowed tools
    API->>Tools: spawn(tool, args)
    Tools-->>API: stdout/stderr streams
    API-->>WebUI: Return executionId
    
    User->>WebUI: Poll execution status
    WebUI->>API: GET /api/tools/status/[id]
    API-->>WebUI: Tool execution status
    
    User->>WebUI: View session artifacts
    WebUI->>API: GET /api/sessions/[id]/artifacts
    API->>Python: Read ~/.neurorift/sessions
    Python-->>API: File tree
    API-->>WebUI: Artifact list
    
    User->>WebUI: View artifact content
    WebUI->>API: GET /api/fs/content
    API->>Python: Read file
    Python-->>API: File content
    API-->>WebUI: Display content
Loading

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 50c4e2f6ed

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread web-ui/src/app/page.tsx
@@ -1,7 +1,152 @@
'use client';

<<<<<<< HEAD
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P0 Badge Remove unresolved merge markers before release

This commit includes unresolved conflict markers (for example <<<<<<< HEAD), and the same marker pattern appears across multiple new source files in both Python and TypeScript; leaving these in place breaks parsing/build steps and prevents the application from starting reliably in any environment.

Useful? React with 👍 / 👎.

Comment on lines +22 to +24
async loadSession(id: string): Promise<void> {
await this.fetchJson(`/api/sessions/${id}/load`, { method: 'POST' });
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Align real-mode adapter routes with existing API handlers

In real mode (NEXT_PUBLIC_NR_MODE=real), the UI calls adapter methods like loadSession, deleteSession, and cancelTool, but this adapter points to endpoints such as /api/sessions/:id/load and /api/tools/cancel/:id that are not implemented by the API routes added in this commit (only /api/sessions, /api/sessions/[id]/artifacts, /api/tools/run, /api/tools/status/[id], and /api/fs/content exist), so these user actions will consistently fail with 404s.

Useful? React with 👍 / 👎.

// For now, allow reading files we know are artifacts.

try {
const content = await fs.readFile(filePath, 'utf-8');
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restrict file reads to the artifact root

This endpoint reads the path query parameter directly from the request and passes it to fs.readFile without canonicalization or root enforcement, so any caller with access to the web API can request arbitrary local files (for example system or SSH config files) instead of only session artifacts.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@greptile-apps greptile-apps Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

37 files reviewed, 13 comments

Edit Code Review Agent Settings | Greptile

Comment thread neurorift_main.py
Comment on lines 3 to 24
@@ -10,6 +20,7 @@
# ║ NeuroRift - Designed by demonking369 🧠 ║
# ║ GitHub: https://github.com/demonking369/NeuroRift ║
# ║ Multi-Agent Intelligence for Security Research ⚡ ║
>>>>>>> main
# ╚══════════════════════════════════════════════════════════╝
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unresolved Git merge conflict markers prevent execution

Suggested change
"""
NeuroRift - Terminal-Based Multi-Agent Intelligence System
For authorized security testing and educational purposes only.
Designed and developed by demonking369
"""
# ╔══════════════════════════════════════════════════════════╗
# ║ NeuroRift - Designed by demonking369 🧠 ║
# ║ GitHub: https://github.com/demonking369/NeuroRift ║
# ║ Multi-Agent Intelligence for Security Research ⚡ ║
# ╚══════════════════════════════════════════════════════════╝

Comment thread neurorift_main.py
Comment on lines 36 to +80
@@ -56,6 +77,7 @@
from modules.ai.agents import NRPlanner, NROperator, NRAnalyst, NRScribe
from modules.tools.base import ToolMode
from modules.config.config_wizard import ConfigWizard
>>>>>>> main
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unresolved merge conflict in imports section - resolve to use correct imports for the main branch version

Comment thread neurorift_main.py
Comment on lines 89 to +120
@@ -86,6 +117,7 @@ def __init__(self):
self.operator = NROperator(self.execution_manager)
self.analyst = NRAnalyst(self.ollama)
self.scribe = NRScribe(self.ollama)
>>>>>>> main
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unresolved merge conflict in __init__ method - must be resolved before the class can be instantiated

Comment thread requirements.txt
Comment on lines +12 to +17
<<<<<<< HEAD
aiofiles>=23.1.0
=======
click>=8.0.0
yaspin>=3.0.0
>>>>>>> main
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unresolved merge conflict - duplicate aiofiles dependency with different versions

Suggested change
<<<<<<< HEAD
aiofiles>=23.1.0
=======
click>=8.0.0
yaspin>=3.0.0
>>>>>>> main
# Security dependencies

Comment thread setup.py
Comment on lines 56 to +75
@@ -60,6 +72,7 @@
"Documentation": "https://github.com/demonking369/NeuroRift",
"Source Code": "https://github.com/demonking369/NeuroRift",
},
>>>>>>> main
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unresolved merge conflict in package metadata

Comment thread web-ui/src/app/page.tsx
Comment on lines +3 to +145
<<<<<<< HEAD
import { useState } from 'react';
import { WebModeProvider } from '@/components/webmode/WebModeProvider';
import { CommandPanel } from '@/components/webmode/panels/CommandPanel';
import { AgentGraphPanel } from '@/components/webmode/panels/AgentGraphPanel';
import { MemoryPulsePanel } from '@/components/webmode/panels/MemoryPulsePanel';
import { PermissionsPanel } from '@/components/webmode/panels/PermissionsPanel';
import { ConfigMatrixPanel } from '@/components/webmode/panels/ConfigMatrixPanel';
import { OnlineModePanel } from '@/components/webmode/panels/OnlineModePanel';
import { ActivityStreamPanel } from '@/components/webmode/panels/ActivityStreamPanel';
import { ExecutionTimelinePanel } from '@/components/webmode/panels/ExecutionTimelinePanel';
import { IntentFlowPanel } from '@/components/webmode/panels/IntentFlowPanel';
import { ManualToolPanel } from '@/components/webmode/panels/ManualToolPanel';
import { SessionManagerPanel } from '@/components/webmode/panels/SessionManagerPanel';
import { ArtifactViewerPanel } from '@/components/webmode/panels/ArtifactViewerPanel';
import { cn } from '@/lib/utils';
import { useWebModeContext } from '@/components/webmode/WebModeProvider'; // Import context hook

const TABS = [
{ id: 'command', label: 'Command' },
{ id: 'operator', label: 'Operator' }, // New Operator Tab
{ id: 'agents', label: 'Agents' },
{ id: 'memory', label: 'Memory' },
{ id: 'permissions', label: 'Permissions' },
{ id: 'config', label: 'Config' },
{ id: 'online', label: 'Online' },
] as const;

type TabId = (typeof TABS)[number]['id'];

function ModeBanner() {
const { adapter } = useWebModeContext();
// Check if adapter is prototype (this check is a bit naive, ideally we check config or adapter type property)
// But since we don't expose type, we can infer or rely on config injection
const isPrototype = adapter.constructor.name === 'PrototypeAdapter';

if (isPrototype) {
return (
<div className="bg-yellow-500/10 border-b border-yellow-500/20 text-yellow-500 text-[10px] font-mono text-center py-1 uppercase tracking-widest">
⚠ Prototype Mode — Simulated Environment
</div>
);
}
return null;
}


function Dashboard() {
const [activeTab, setActiveTab] = useState<TabId>('command');

return (
<div className="min-h-screen bg-neuro-bg flex flex-col">
<ModeBanner />
{/* Header */}
<header className="border-b border-neuro-border/40 bg-neuro-surface/50 backdrop-blur-sm sticky top-0 z-50">
<div className="max-w-7xl mx-auto px-4 py-3 flex items-center justify-between">
<div className="flex items-center gap-3">
<div className="w-8 h-8 rounded-lg bg-gradient-to-br from-cyan-400 to-blue-600 flex items-center justify-center text-white font-bold text-sm">N</div>
<div>
<h1 className="text-sm font-bold uppercase tracking-[0.2em] text-neuro-text-primary">NeuroRift</h1>
<div className="text-[9px] uppercase tracking-wider text-neuro-text-muted">Web Mode — Control Plane</div>
</div>
</div>
<div className="flex items-center gap-2">
<div className="w-2 h-2 bg-emerald-400 rounded-full animate-pulse" />
<span className="text-[10px] uppercase tracking-wider text-emerald-300">Online</span>
</div>
</div>
</header>

{/* Tab Navigation */}
<nav className="border-b border-neuro-border/30 bg-neuro-bg/80 backdrop-blur-sm sticky top-[52px] z-40">
<div className="max-w-7xl mx-auto px-4 flex gap-1 overflow-x-auto">
{TABS.map(tab => (
<button
key={tab.id}
onClick={() => setActiveTab(tab.id)}
className={cn(
"px-4 py-2.5 text-xs uppercase tracking-[0.2em] border-b-2 transition-all whitespace-nowrap",
activeTab === tab.id
? "border-cyan-400 text-cyan-300"
: "border-transparent text-neuro-text-muted hover:text-neuro-text-secondary"
)}
>
{tab.label}
</button>
))}
</div>
</nav>

{/* Main Content */}
<main className="max-w-7xl mx-auto px-4 py-6 flex-1 min-h-0">
{activeTab === 'operator' ? (
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6 h-[calc(100vh-140px)]">
<div className="flex flex-col gap-6 h-full min-h-0">
<div className="flex-1 min-h-0">
<ManualToolPanel />
</div>
<div className="flex-1 min-h-0">
<SessionManagerPanel />
</div>
</div>
<div className="h-full min-h-0">
<ArtifactViewerPanel />
</div>
</div>
) : (
<div className="grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6">
{/* Primary Panel */}
<div className="rounded-2xl border border-neuro-border/40 bg-neuro-surface/30 backdrop-blur-sm p-6">
{activeTab === 'command' && <CommandPanel />}
{activeTab === 'agents' && <AgentGraphPanel />}
{activeTab === 'memory' && <MemoryPulsePanel />}
{activeTab === 'permissions' && <PermissionsPanel />}
{activeTab === 'config' && <ConfigMatrixPanel />}
{activeTab === 'online' && <OnlineModePanel />}
</div>

{/* Sidebar */}
<div className="space-y-6">
<div className="rounded-2xl border border-neuro-border/40 bg-neuro-surface/30 backdrop-blur-sm p-4">
<ActivityStreamPanel />
</div>
<div className="rounded-2xl border border-neuro-border/40 bg-neuro-surface/30 backdrop-blur-sm p-4">
<ExecutionTimelinePanel />
</div>
<div className="rounded-2xl border border-neuro-border/40 bg-neuro-surface/30 backdrop-blur-sm p-4">
<IntentFlowPanel />
</div>
</div>
</div>
)}
</main>
</div>
);
}

export default function WebModePage() {
return (
<WebModeProvider>
<Dashboard />
</WebModeProvider>
);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unresolved merge conflict - entire component implementation conflicts between HEAD and main branches

Comment on lines 3 to +216
@@ -36,15 +193,24 @@ export function WebModeProvider({ children }: { children: React.ReactNode }) {
sendSignal,
}}
>
>>>>>>> main
{children}
</WebModeContext.Provider>
);
}

<<<<<<< HEAD
export const useWebModeContext = () => {
const context = useContext(WebModeContext);
if (!context) throw new Error('useWebModeContext must be used within WebModeProvider');
return context;
};
=======
export function useWebModeContext() {
const context = useContext(WebModeContext);
if (!context) {
throw new Error('useWebModeContext must be used within WebModeProvider');
}
return context;
}
>>>>>>> main
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unresolved merge conflict throughout entire provider component - conflicting implementations of context provider and hooks

Comment thread .gitignore
Comment on lines +74 to +91
<<<<<<< HEAD
*.temp

# Web development
node_modules/
.next/
out/
.env*.local
.npm/

# Build artifacts
dist/
build/
*.egg-info/

=======
*.temp
>>>>>>> main
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unresolved merge conflict in .gitignore file


export async function GET() {
try {
const sessionsDir = path.join(os.homedir(), '.vulnforge', 'sessions');
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hardcoded path uses .vulnforge but project is named NeuroRift - should use .neurorift to match neurorift_main.py:86

Suggested change
const sessionsDir = path.join(os.homedir(), '.vulnforge', 'sessions');
const sessionsDir = path.join(os.homedir(), '.neurorift', 'sessions');

}

const executionId = `exec_${Date.now()}`;
const cmdArgs = args.split(' ').filter((a: string) => a.length > 0);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

splitting args by space doesn't handle quoted arguments - args = "-p 80 -oX 'my file.xml'" would incorrectly split the filename

@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Feb 11, 2026

Additional Comments (3)

neurorift_main.py
hardcoded executable path /usr/bin/go may not work on all systems - go tool should be found via PATH instead


requirements.txt
missing comma between tqdm>=4.62.0 and duckduckgo-search will cause syntax error

tqdm>=4.62.0
duckduckgo-search

setup.py
unresolved merge conflict in py_modules list - contains invalid module references that will fail during package installation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants