Missed files (#19)
Co-authored-by: Sagnik <sagnik7896@gmail.com> Reviewed-on: sagnik/Project_Velocity#19
875
.Agent Context/Bibels/Project Velocity Master Bibel.md
Normal file
@@ -0,0 +1,875 @@
|
||||
# Project Velocity Master Bibel
|
||||
|
||||
**Status:** Master source of truth
|
||||
**Prepared:** 2026-04-12
|
||||
**Scope:** Unified synthesis of Project Velocity markdown documentation across product, architecture, infrastructure, operations, iOS, web, AI workflows, and GTM context
|
||||
**Exclusions:** Anything under `Sourik` was intentionally excluded from this synthesis
|
||||
**Method:** This document normalizes and reconciles the current documentation corpus. It is not a raw concatenation. Where source docs disagree, this bibel favors the latest operational truth and the more concrete implementation artifact.
|
||||
|
||||
---
|
||||
|
||||
## Chapter Index
|
||||
|
||||
1. Charter and Scope
|
||||
2. Source Corpus
|
||||
3. Product Thesis
|
||||
4. Commercial Model
|
||||
5. Customer and User Model
|
||||
6. Suite Architecture
|
||||
7. Core Product Surfaces
|
||||
8. Oracle
|
||||
9. Sentinel
|
||||
10. Dream Weaver and Catalyst
|
||||
11. Web Application
|
||||
12. iOS Application
|
||||
13. Backend and AI Runtime
|
||||
14. Data Model and Core Entities
|
||||
15. Infrastructure and Deployment Model
|
||||
16. Stable Ingress Layer
|
||||
17. Linux AWS Control Surface
|
||||
18. Operating Flows
|
||||
19. Security, Privacy, and Sovereignty
|
||||
20. Current Live Truth
|
||||
21. Build Priorities and Open Gaps
|
||||
22. Runbooks and Team Usage
|
||||
23. Source Lineage Map
|
||||
|
||||
---
|
||||
|
||||
## 1. Charter and Scope
|
||||
|
||||
Project Velocity is not one app. It is a private, on-prem or client-controlled real-estate operating system composed of:
|
||||
|
||||
- a premium web interface
|
||||
- a native iPad surface
|
||||
- an AI CRM and analytics layer
|
||||
- a biometric perception and scoring layer
|
||||
- a visual generation layer
|
||||
- a durable infrastructure and operator layer
|
||||
|
||||
Velocity is designed around an anti-SaaS principle:
|
||||
|
||||
- client data stays with the client
|
||||
- deployments can run on-prem or in client-controlled cloud
|
||||
- the product is sold as strategic capability, not seat-based software
|
||||
|
||||
This master bibel exists to collapse scattered markdown artifacts into one normalized document the team can use as the primary reference.
|
||||
|
||||
---
|
||||
|
||||
## 2. Source Corpus
|
||||
|
||||
This bibel synthesizes the key Project Velocity markdown sources, including:
|
||||
|
||||
- core bibles:
|
||||
- `velocity_technical_bible.md`
|
||||
- `velocity_ios_bible.md`
|
||||
- `Project Velocity - The Oracle.md`
|
||||
- `The Sentinel Bibel.md`
|
||||
- `Desineuron Ops Control Plane Bibel.md`
|
||||
- infrastructure:
|
||||
- `TEAM_HANDOFF_2026-04-08.md`
|
||||
- ingress and ops control plane READMEs
|
||||
- Comfy and Dream Weaver:
|
||||
- `DREAMWEAVER_TECHNICAL_SPEC.md`
|
||||
- `A100_DEPLOYMENT_VALIDATION.md`
|
||||
- `comfy_engine/scripts/README.md`
|
||||
- operational truth docs:
|
||||
- `nemoclaw_setup_truth.md`
|
||||
- `velocity_status_report.md`
|
||||
- `oracle_development_status.md`
|
||||
- strategic and customer docs:
|
||||
- Kolkata builder intel
|
||||
- Customer 0 strategy
|
||||
- customer persona notes
|
||||
- sprint and user story docs
|
||||
|
||||
Excluded from synthesis:
|
||||
|
||||
- any path containing `Sourik`
|
||||
- vendor or dependency markdown such as `node_modules`
|
||||
- non-authoritative third-party readmes unless they directly influenced repo behavior
|
||||
|
||||
---
|
||||
|
||||
## 3. Product Thesis
|
||||
|
||||
Velocity is a real-estate sales acceleration platform for high-value property selling environments.
|
||||
|
||||
Its core promise is:
|
||||
|
||||
- compress sales cycles
|
||||
- increase intelligence during sales interactions
|
||||
- reduce lead leakage
|
||||
- preserve data sovereignty
|
||||
- give each property or portfolio a private, premium operating stack
|
||||
|
||||
The product is built around a first-principles model:
|
||||
|
||||
- property-specific intelligence matters
|
||||
- portfolio intelligence unlocks when multiple properties are active
|
||||
- AI should operate the workflow surface, not just answer questions
|
||||
- product delivery must be standardized enough to avoid bespoke installation chaos
|
||||
|
||||
Velocity is therefore best understood as a modular operating system, not a single dashboard.
|
||||
|
||||
---
|
||||
|
||||
## 4. Commercial Model
|
||||
|
||||
The business model reflected in the documentation is:
|
||||
|
||||
- initial setup fee
|
||||
- monthly maintenance / bleeding-edge upgrade fee
|
||||
- inventory-linked or performance-linked downstream value capture
|
||||
|
||||
The product is not sold primarily by seats. The most important commercial unit is the property, with portfolio behavior unlocking when multiple properties are onboarded.
|
||||
|
||||
Working internal segmentation:
|
||||
|
||||
- **Tier 3 / city-channel model**
|
||||
- CP or channel-heavy deployment
|
||||
- one city per install
|
||||
- can cover many builders in that city
|
||||
- user count can still be high
|
||||
- **Tier 2 / project-builder model**
|
||||
- per-project deployment for a builder
|
||||
- narrower operational scope
|
||||
- property-specific generation and sales workflows
|
||||
- **Tier 1 / enterprise portfolio model**
|
||||
- multi-property or multi-portfolio controls
|
||||
- monitoring and interaction layers across properties
|
||||
- governance and deeper integrations
|
||||
|
||||
Commercially, the strongest internal framing is:
|
||||
|
||||
- first property gets full setup
|
||||
- second property unlocks portfolio features
|
||||
- enterprise control grows with property count and operational complexity
|
||||
|
||||
---
|
||||
|
||||
## 5. Customer and User Model
|
||||
|
||||
### Customer Types
|
||||
|
||||
- developers / builders
|
||||
- brokerages and CPs
|
||||
- city-channel sales operators
|
||||
- enterprise portfolio operators
|
||||
|
||||
### Internal User Types
|
||||
|
||||
- junior broker
|
||||
- senior broker
|
||||
- sales director
|
||||
- marketing operator
|
||||
- data steward
|
||||
- compliance reviewer
|
||||
- platform admin
|
||||
- operator / infra admin
|
||||
|
||||
### Team Reality
|
||||
|
||||
The current docs imply two simultaneous realities:
|
||||
|
||||
- product reality for future customers
|
||||
- internal Desineuron operating reality used to build, demo, and run the system
|
||||
|
||||
This bibel captures both, but prefers the operational truth when implementation details matter.
|
||||
|
||||
---
|
||||
|
||||
## 6. Suite Architecture
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[Velocity User Surface] --> B[Web App]
|
||||
A --> C[iPad App]
|
||||
B --> D[FastAPI Neural Core]
|
||||
C --> D
|
||||
D --> E[Oracle]
|
||||
D --> F[Sentinel]
|
||||
D --> G[Inventory]
|
||||
D --> H[Dream Weaver / Catalyst]
|
||||
E --> I[PostgreSQL]
|
||||
F --> I
|
||||
G --> I
|
||||
D --> J[NemoClaw / Reasoning Layer]
|
||||
H --> K[ComfyUI / GPU Workloads]
|
||||
L[Linux Control Surface] --> M[AWS GPU Nodes]
|
||||
L --> N[S3 Canonical Asset Store]
|
||||
O[t4g Stable Ingress] --> B
|
||||
O --> C
|
||||
O --> L
|
||||
O --> M
|
||||
```
|
||||
|
||||
Velocity has four major planes:
|
||||
|
||||
- **experience plane**
|
||||
- web app
|
||||
- iPad app
|
||||
- **intelligence plane**
|
||||
- Oracle
|
||||
- Sentinel
|
||||
- NemoClaw
|
||||
- Dream Weaver / Catalyst
|
||||
- **data plane**
|
||||
- PostgreSQL
|
||||
- asset storage
|
||||
- S3 model store
|
||||
- **operations plane**
|
||||
- Linux control surface
|
||||
- stable ingress
|
||||
- AWS GPU workers
|
||||
|
||||
---
|
||||
|
||||
## 7. Core Product Surfaces
|
||||
|
||||
The currently documented product surfaces are:
|
||||
|
||||
- **Dashboard**
|
||||
- KPIs, health, activity, sentiment, velocity
|
||||
- **Oracle**
|
||||
- AI CRM and analytical canvas
|
||||
- **Sentinel**
|
||||
- biometric and attention-scoring engine
|
||||
- **Inventory**
|
||||
- unit and property availability tracking
|
||||
- **Dream Weaver / Catalyst**
|
||||
- visual generation and asset transformation
|
||||
- **Settings / operator surfaces**
|
||||
- system configuration, connectivity, route control, infra control
|
||||
|
||||
---
|
||||
|
||||
## 8. Oracle
|
||||
|
||||
Oracle is the AI operating surface of Velocity. It is not a simple chatbot.
|
||||
|
||||
### What Oracle Is
|
||||
|
||||
- a prompt-driven CRM intelligence surface
|
||||
- a persistent vertical canvas
|
||||
- a branchable and mergeable analytical workspace
|
||||
- a controlled data access gateway mediated by Nemoclaw and policy
|
||||
|
||||
### Core Oracle Principles
|
||||
|
||||
- natural-language intent becomes typed execution
|
||||
- durable page revisions replace ephemeral AI replies
|
||||
- collaboration uses forks and merge requests
|
||||
- provenance and auditability are mandatory
|
||||
- AI planning must remain policy-constrained
|
||||
|
||||
### Oracle Architecture
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[User Prompt] --> B[Prompt Execution]
|
||||
B --> C[NemoClaw Planning]
|
||||
C --> D[Policy Validation]
|
||||
D --> E[Data Access Gateway]
|
||||
E --> F[PostgreSQL / Tenant Data]
|
||||
F --> G[Visualization Resolver]
|
||||
G --> H[Canvas Component]
|
||||
H --> I[Revisioned Oracle Canvas]
|
||||
I --> J[Fork / Merge Workflow]
|
||||
```
|
||||
|
||||
### Core Oracle Behaviors
|
||||
|
||||
- prompt authoring with context
|
||||
- retrieval planning through semantic mapping
|
||||
- policy-validated data access
|
||||
- component synthesis or template selection
|
||||
- append/insert/replace on a vertically scrolling canvas
|
||||
- fork and merge semantics for shared work
|
||||
|
||||
### Oracle Truth in Repo
|
||||
|
||||
The repo has:
|
||||
|
||||
- a styled Oracle shell
|
||||
- temporary mock-oriented UI behavior
|
||||
- placeholder backend Oracle route files
|
||||
|
||||
The repo does not yet have:
|
||||
|
||||
- the full production Oracle runtime mounted and wired end to end
|
||||
|
||||
So Oracle is conceptually mature, but partially implemented.
|
||||
|
||||
---
|
||||
|
||||
## 9. Sentinel
|
||||
|
||||
Sentinel is the biometric, session-intelligence, and attention-scoring engine.
|
||||
|
||||
### Core Principles
|
||||
|
||||
- local-first perception
|
||||
- no raw webcam stream to remote backend
|
||||
- PostgreSQL as source of truth
|
||||
- real-time broker-facing intelligence
|
||||
- infrastructure truth over nostalgic planning
|
||||
|
||||
### Sentinel Inputs
|
||||
|
||||
- browser-side facial blendshape data
|
||||
- scene timing
|
||||
- CRM context
|
||||
- asset opens
|
||||
- CCTV enrichment
|
||||
- auto-mode session evidence
|
||||
|
||||
### Sentinel Outputs
|
||||
|
||||
- QD score
|
||||
- lead tags
|
||||
- live notifications
|
||||
- session intelligence
|
||||
- vault-open intelligence
|
||||
- auto-mode lead linkage
|
||||
|
||||
### Sentinel Modes
|
||||
|
||||
- **Assigned Mode**
|
||||
- tied to existing lead
|
||||
- **Auto Mode**
|
||||
- no pre-bound lead
|
||||
- CCTV and session evidence reconcile later
|
||||
|
||||
### Sentinel Flow
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[Browser Webcam + MediaPipe] --> B[Biometric Packets]
|
||||
B --> C[/api/sentinel/ws/perception]
|
||||
C --> D[Scene Lookup]
|
||||
D --> E[NemoClaw Scoring]
|
||||
E --> F[perception_sessions]
|
||||
E --> G[omnichannel_logs]
|
||||
E --> H[Live QD Broadcast]
|
||||
I[CCTV OCR/Event] --> J[/api/cctv/event]
|
||||
J --> K[Auto Mode Matcher]
|
||||
K --> L[Lead Link or Lead Create]
|
||||
```
|
||||
|
||||
### Active Truth
|
||||
|
||||
The docs are explicit that:
|
||||
|
||||
- NVIDIA-hosted completions are the active primary path
|
||||
- Ollama/OpenShell exist but are not the production-first scoring path
|
||||
|
||||
That distinction should remain explicit in team communication.
|
||||
|
||||
---
|
||||
|
||||
## 10. Dream Weaver and Catalyst
|
||||
|
||||
Dream Weaver is the structural-preservation visual restyling system. Catalyst is the broader generation and asset automation layer.
|
||||
|
||||
### Dream Weaver Objective
|
||||
|
||||
Restyle interiors while preserving:
|
||||
|
||||
- geometry
|
||||
- window placement
|
||||
- vanishing points
|
||||
- architectural truth
|
||||
|
||||
### Technical Strategy
|
||||
|
||||
- RealVisXL V5.0 Lightning as core model family in the historical design docs
|
||||
- stacked ControlNet approach
|
||||
- depth + line preservation
|
||||
- SAM-based masking
|
||||
- workflow portability through ComfyUI API JSON
|
||||
|
||||
### Operational Direction
|
||||
|
||||
The later infra work also shows Qwen-based image edit/generation workflows entering the stack. So the project now contains two overlapping visual-generation realities:
|
||||
|
||||
- Dream Weaver spec centered on SDXL / RealVisXL / ControlNet / SAM
|
||||
- operational AWS generation work centered on Qwen image models and ComfyUI / GPU orchestration
|
||||
|
||||
These should be treated as parallel capabilities, not contradictions.
|
||||
|
||||
### Dream Weaver Pipeline
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[Reference / Room Image] --> B[Preprocess]
|
||||
B --> C[M-LSD]
|
||||
B --> D[Depth]
|
||||
B --> E[SAM / Masking]
|
||||
C --> F[Control Stack]
|
||||
D --> F
|
||||
E --> F
|
||||
F --> G[Sampler / Restyler]
|
||||
G --> H[Styled Output]
|
||||
H --> I[API / iPad / Batch Workflow]
|
||||
```
|
||||
|
||||
### Operational Purpose
|
||||
|
||||
- interior restyling
|
||||
- marketing posters
|
||||
- cinematic video
|
||||
- mobile-triggered asset generation
|
||||
- broker-facing wow factor
|
||||
|
||||
---
|
||||
|
||||
## 11. Web Application
|
||||
|
||||
The web app is a React + TypeScript + Vite application.
|
||||
|
||||
### Frontend Stack
|
||||
|
||||
- React 19
|
||||
- TypeScript
|
||||
- Vite
|
||||
- Zustand
|
||||
- Tailwind CSS
|
||||
- shadcn/ui
|
||||
- Radix UI
|
||||
- Framer Motion
|
||||
- Recharts
|
||||
- React Hook Form
|
||||
- Zod
|
||||
|
||||
### Core Web Modules
|
||||
|
||||
- Dashboard
|
||||
- Oracle
|
||||
- Sentinel
|
||||
- Inventory
|
||||
- Settings
|
||||
|
||||
### State Model
|
||||
|
||||
The docs describe Zustand-backed state slices for:
|
||||
|
||||
- auth
|
||||
- navigation
|
||||
- Oracle
|
||||
- Sentinel
|
||||
- Dashboard
|
||||
- Inventory
|
||||
- system state
|
||||
|
||||
### Current Truth
|
||||
|
||||
The web app appears stronger as a polished shell than as a fully integrated production data surface. It carries much of the premium experience language and component structure the rest of the system is meant to converge toward.
|
||||
|
||||
---
|
||||
|
||||
## 12. iOS Application
|
||||
|
||||
Velocity iOS is the native mobile counterpart for Apple devices, especially the showroom iPad surface.
|
||||
|
||||
### iOS Stack
|
||||
|
||||
- Swift
|
||||
- SwiftUI
|
||||
- Combine / Observation
|
||||
- Alamofire for networking
|
||||
- native animation and glassmorphism
|
||||
|
||||
### iOS Modules
|
||||
|
||||
- Dashboard
|
||||
- Oracle
|
||||
- Sentinel
|
||||
- Inventory
|
||||
- Settings
|
||||
|
||||
### Strategic Role
|
||||
|
||||
The iPad app is not just a companion. It is central to the product’s premium physical-sales-gallery positioning.
|
||||
|
||||
Important documented capabilities:
|
||||
|
||||
- portable sales intelligence
|
||||
- native presentation surface
|
||||
- AI generation triggering
|
||||
- AR sun-path overlay
|
||||
- inventory and lead interaction on the floor
|
||||
|
||||
### Design Direction
|
||||
|
||||
- native fluidity
|
||||
- battery efficiency
|
||||
- premium dark/glass aesthetic
|
||||
- parity with web where needed, but not web-in-a-wrapper
|
||||
|
||||
---
|
||||
|
||||
## 13. Backend and AI Runtime
|
||||
|
||||
The backend is a FastAPI neural core with PostgreSQL, auth, websockets, and AI orchestration.
|
||||
|
||||
### Key Responsibilities
|
||||
|
||||
- API routing
|
||||
- auth and RBAC
|
||||
- CRM and lead operations
|
||||
- Sentinel perception processing
|
||||
- Oracle execution path
|
||||
- websockets and notifications
|
||||
- video and scene catalog access
|
||||
- NemoClaw integration
|
||||
|
||||
### NemoClaw Role
|
||||
|
||||
NemoClaw is the reasoning layer used across:
|
||||
|
||||
- lead tagging
|
||||
- CCTV profiling
|
||||
- QD scoring
|
||||
- future Oracle planning and data access interpretation
|
||||
|
||||
### Prompt Truth in Repo
|
||||
|
||||
The repo contains explicit prompt artifacts for:
|
||||
|
||||
- `cctv_profiler`
|
||||
- `lead_tagger`
|
||||
- `qd_calculator`
|
||||
|
||||
These are concrete prompt contracts, not vague intentions. They should be treated as product logic.
|
||||
|
||||
### Runtime Reality
|
||||
|
||||
The system documentation repeatedly shows a hybrid runtime model:
|
||||
|
||||
- hosted NVIDIA-compatible reasoning path as primary
|
||||
- private / local alternatives possible
|
||||
- runtime abstraction should outlive vendor choice
|
||||
|
||||
---
|
||||
|
||||
## 14. Data Model and Core Entities
|
||||
|
||||
The major persistent entities reflected across the docs are:
|
||||
|
||||
- users and roles
|
||||
- leads and lead intelligence
|
||||
- inventory and project data
|
||||
- perception sessions
|
||||
- CCTV events
|
||||
- vault assets and opens
|
||||
- omnichannel logs
|
||||
- page revisions and canvas components
|
||||
- model catalog and hydration state
|
||||
- machine sessions and cost records
|
||||
|
||||
### Persistent Truth
|
||||
|
||||
PostgreSQL is the primary source of truth for operational data.
|
||||
S3 is becoming the canonical store for large model and asset artifacts.
|
||||
AWS GPU NVMe is treated as fast ephemeral runtime cache, not authoritative storage.
|
||||
|
||||
---
|
||||
|
||||
## 15. Infrastructure and Deployment Model
|
||||
|
||||
Project Velocity now has a clear split between:
|
||||
|
||||
- **stable control surfaces**
|
||||
- **ephemeral compute workers**
|
||||
- **canonical storage**
|
||||
|
||||
### Current Deployment Pattern
|
||||
|
||||
- Linux box:
|
||||
- long-lived control surface
|
||||
- private origin services
|
||||
- operator tooling
|
||||
- AWS t4g ingress:
|
||||
- stable public edge
|
||||
- route manager
|
||||
- AWS GPU instances:
|
||||
- disposable compute nodes
|
||||
- ComfyUI and model workloads
|
||||
- S3:
|
||||
- canonical model / workflow / asset store
|
||||
|
||||
### Architectural Principle
|
||||
|
||||
This is not “one giant computer.”
|
||||
It is:
|
||||
|
||||
- one control plane
|
||||
- one ingress plane
|
||||
- one durable asset plane
|
||||
- many disposable compute workers
|
||||
|
||||
That is the correct model.
|
||||
|
||||
---
|
||||
|
||||
## 16. Stable Ingress Layer
|
||||
|
||||
The stable ingress layer is the permanent public front door.
|
||||
|
||||
### Purpose
|
||||
|
||||
- stable public IP
|
||||
- DNS target for public routes
|
||||
- TLS termination
|
||||
- hostname-based routing
|
||||
- forwarding to Linux or AWS backends
|
||||
|
||||
### Current Public Surfaces
|
||||
|
||||
The handoff documents establish these public hostnames as part of the route model:
|
||||
|
||||
- `office.desineuron.in`
|
||||
- `git.desineuron.in`
|
||||
- `cloud.desineuron.in`
|
||||
- `projects.desineuron.in`
|
||||
- `talk.desineuron.in`
|
||||
- `vpn.desineuron.in`
|
||||
- `comfy.desineuron.in`
|
||||
- `ops.desineuron.in`
|
||||
|
||||
### Key Design Principle
|
||||
|
||||
Backends may change. Public identity should not.
|
||||
|
||||
That is why:
|
||||
|
||||
- GPU workers should not own the stable Elastic IP
|
||||
- the ingress box should stay alive and route based on managed config
|
||||
|
||||
---
|
||||
|
||||
## 17. Linux AWS Control Surface
|
||||
|
||||
The Linux box is now the operational control surface for AWS.
|
||||
|
||||
### Responsibilities
|
||||
|
||||
- machine lifecycle management
|
||||
- preferred instance selection
|
||||
- spot/on-demand visibility
|
||||
- session and cost tracking
|
||||
- route management through ingress
|
||||
- model ingest and hydration orchestration
|
||||
- operator UI and CLI
|
||||
|
||||
### Canonical Asset Strategy
|
||||
|
||||
The documentation evolution shows a strong convergence:
|
||||
|
||||
- Linux can store local copies
|
||||
- but S3 should be the canonical large-model source for ephemeral AWS hydration
|
||||
|
||||
That is the right direction because S3 is:
|
||||
|
||||
- durable
|
||||
- AWS-native
|
||||
- fast to hydrate with `s5cmd`
|
||||
- not dependent on home network conditions
|
||||
|
||||
### Control Plane Flow
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[Operator UI / CLI on Linux] --> B[Launch AWS Worker]
|
||||
B --> C[Worker Bootstrap]
|
||||
C --> D[Hydrate from S3]
|
||||
D --> E[Verify Manifest]
|
||||
E --> F[Start Workload]
|
||||
F --> G[Map Route Through Ingress]
|
||||
G --> H[Track Runtime / Cost / Logs]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 18. Operating Flows
|
||||
|
||||
### Lead Intelligence Flow
|
||||
|
||||
- lead enters through channel
|
||||
- Oracle / backend receives it
|
||||
- tagging and enrichment happen
|
||||
- lead lands in CRM operating surface
|
||||
|
||||
### Sentinel Session Flow
|
||||
|
||||
- broker runs session
|
||||
- MediaPipe emits perception packets
|
||||
- backend computes QD and updates lead/session state
|
||||
- notifications stream back in real time
|
||||
|
||||
### Dream Weaver / Comfy Flow
|
||||
|
||||
- operator or app triggers generation
|
||||
- GPU worker receives workflow
|
||||
- model hydrates if missing
|
||||
- ComfyUI or pipeline runs
|
||||
- output is returned or archived
|
||||
|
||||
### Infra Control Flow
|
||||
|
||||
- operator selects profile
|
||||
- Linux control surface launches worker
|
||||
- route gets mapped through ingress
|
||||
- workload is exposed without changing public identity
|
||||
|
||||
---
|
||||
|
||||
## 19. Security, Privacy, and Sovereignty
|
||||
|
||||
Project Velocity’s strongest recurring architectural doctrine is data sovereignty.
|
||||
|
||||
### Security Principles
|
||||
|
||||
- client data belongs to client
|
||||
- on-prem or client-controlled cloud must be supported
|
||||
- zero-trust between services
|
||||
- least privilege for machine roles
|
||||
- no hidden production dependencies on developer laptops
|
||||
- auditability matters for both operations and business decisions
|
||||
|
||||
### Privacy Positioning
|
||||
|
||||
Velocity is explicitly positioned as anti-SaaS in the strategic docs.
|
||||
|
||||
That means product delivery should support:
|
||||
|
||||
- on-prem deployment
|
||||
- client-owned cloud
|
||||
- local or sovereign runtime options
|
||||
- explicit consent and audit around biometric flows
|
||||
|
||||
This is not just a compliance detail. It is a core selling argument.
|
||||
|
||||
---
|
||||
|
||||
## 20. Current Live Truth
|
||||
|
||||
Based on the most recent infrastructure handoff and operational truth docs, the current live picture is:
|
||||
|
||||
- stable ingress is running on AWS `t4g.micro`
|
||||
- Linux box is the long-lived origin and control surface
|
||||
- ComfyUI is exposed through managed ingress routing
|
||||
- auto-heal exists for:
|
||||
- home IP sync
|
||||
- Comfy route sync
|
||||
- ops control plane is live on Linux
|
||||
- S3 is in place as the canonical control-plane bucket
|
||||
|
||||
Important operational truths that should not be lost:
|
||||
|
||||
- GPU nodes are ephemeral and should be treated that way
|
||||
- route management should be dynamic, not hardcoded
|
||||
- NVMe is for speed, not truth
|
||||
- Linux and S3 together are the operational backbone
|
||||
|
||||
---
|
||||
|
||||
## 21. Build Priorities and Open Gaps
|
||||
|
||||
The documentation implies this priority order:
|
||||
|
||||
1. stabilize control plane and ingress
|
||||
2. stabilize model hydration and GPU orchestration
|
||||
3. finish Oracle backend/runtime implementation
|
||||
4. continue iOS and web convergence
|
||||
5. standardize packaging for on-prem delivery
|
||||
|
||||
### Open Gaps
|
||||
|
||||
- Oracle production runtime is not fully wired yet
|
||||
- several frontend surfaces still rely on mock or transitional behavior
|
||||
- deployment packaging for customer installs is not yet standardized enough
|
||||
- multi-property / portfolio product packaging needs formalization in product artifacts
|
||||
- some business docs are strong on thesis but still need conversion into installable product contracts
|
||||
|
||||
---
|
||||
|
||||
## 22. Runbooks and Team Usage
|
||||
|
||||
### What the team should point to for truth
|
||||
|
||||
- **this master bibel** for unified product and architecture truth
|
||||
- **ingress handoff** for current infra routing truth
|
||||
- **ops control plane bibel** for operator workflows
|
||||
|
||||
### When a new service is added
|
||||
|
||||
The team should define:
|
||||
|
||||
- what plane it belongs to
|
||||
- whether it is stable or ephemeral
|
||||
- where its truth is stored
|
||||
- how it is routed publicly
|
||||
- which system owns its startup, health, and recovery
|
||||
|
||||
### Operational Rule
|
||||
|
||||
If a workflow depends on a developer’s Windows laptop staying alive, it is not production-ready.
|
||||
|
||||
---
|
||||
|
||||
## 23. Source Lineage Map
|
||||
|
||||
This master bibel draws primarily from these source families:
|
||||
|
||||
### Product and architecture
|
||||
|
||||
- `Project Velocity - The Oracle.md`
|
||||
- `The Sentinel Bibel.md`
|
||||
- `velocity_technical_bible.md`
|
||||
- `velocity_ios_bible.md`
|
||||
- `oracle_development_status.md`
|
||||
|
||||
### Visual generation
|
||||
|
||||
- `DREAMWEAVER_TECHNICAL_SPEC.md`
|
||||
- `A100_DEPLOYMENT_VALIDATION.md`
|
||||
- `comfy_engine/scripts/README.md`
|
||||
- `Project Velocity_ Dream Weaver.md`
|
||||
|
||||
### Infra and operations
|
||||
|
||||
- `TEAM_HANDOFF_2026-04-08.md`
|
||||
- `Desineuron Ops Control Plane Bibel.md`
|
||||
- `nemoclaw_setup_truth.md`
|
||||
- `infrastructure_deployment_manifest.md`
|
||||
- ingress and ops READMEs
|
||||
|
||||
### Business and GTM context
|
||||
|
||||
- `Velocity Kolkata Customer 0 Strategy - Get My Ghar.md`
|
||||
- `Kolkata Builder Intel and Meeting Map - April 2026.md`
|
||||
- `Customer Personas for Abu Dhabi and Dubai...md`
|
||||
- sprint user story docs
|
||||
|
||||
### Prompt and AI behavior contracts
|
||||
|
||||
- `backend/nemoclaw_prompts/*.md`
|
||||
|
||||
---
|
||||
|
||||
## Final Position
|
||||
|
||||
Project Velocity is best understood as a sovereign, modular real-estate operating system with:
|
||||
|
||||
- premium user surfaces
|
||||
- AI-driven CRM and perception intelligence
|
||||
- property-linked generation workflows
|
||||
- a private operational backbone
|
||||
- a route-stable ingress layer
|
||||
- a Linux-hosted control plane
|
||||
- S3-backed canonical model and asset strategy
|
||||
|
||||
That is the coherent architecture the scattered docs were already converging toward.
|
||||
@@ -0,0 +1,355 @@
|
||||
# Sourik Code Intake and Compatibility Report
|
||||
|
||||
**Prepared:** 2026-04-12
|
||||
**Scope:** `Project_Velocity/Sourik` only, evaluated against the current non-`Sourik` Project Velocity codebase, built features, and live operating model
|
||||
**Purpose:** Decide what from `Sourik` is worth merging, what is redundant, what is bloat, and where the conflicts will be
|
||||
|
||||
---
|
||||
|
||||
## Scoring Model
|
||||
|
||||
| Score | Meaning |
|
||||
| --- | --- |
|
||||
| 1 | Banish. Do not merge into main. |
|
||||
| 2 | Archive only. Historical value, no production merge value. |
|
||||
| 3 | Very weak merge candidate. Requires heavy rewrite or extraction. |
|
||||
| 4 | Risky or partial. Import only if a specific owner adopts it. |
|
||||
| 5 | Mixed value. Keep for reference, not direct merge. |
|
||||
| 6 | Useful implementation ideas, but not merge-ready. |
|
||||
| 7 | Good candidate for selective integration. |
|
||||
| 8 | Strong subsystem candidate. |
|
||||
| 9 | High-value, near-merge-ready if wiring assumptions are corrected. |
|
||||
| 10 | Critical import candidate. No direct equivalent or materially better than current mainline. |
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
The `Sourik` tree is not one clean feature branch. It is a mixed bundle of:
|
||||
|
||||
- real backend/API work
|
||||
- a separate Go agent runtime
|
||||
- frontend additions for marketing and analytics
|
||||
- a partial iOS spike
|
||||
- strong test evidence in some areas
|
||||
- large amounts of residue:
|
||||
- local env files
|
||||
- coverage outputs
|
||||
- compiled binaries
|
||||
- sqlite prototypes
|
||||
- pycache
|
||||
- logs
|
||||
- duplicate docs
|
||||
|
||||
The correct merge posture is:
|
||||
|
||||
- **do not merge the tree wholesale**
|
||||
- **extract selected subsystems**
|
||||
- **banish operational residue**
|
||||
- **treat the Go runtime as an alternate architecture, not as an automatic addition**
|
||||
|
||||
Highest-value areas in `Sourik`:
|
||||
|
||||
- Python API modules around leads, persona, analytics, websocket, kanban, and Sentinel consent/GDPR patterns
|
||||
- test coverage and test cases
|
||||
- some Catalyst service abstractions
|
||||
- some iOS camera/time-light experiment code
|
||||
|
||||
Highest-risk areas:
|
||||
|
||||
- duplicate backend entrypoint and alternate runtime model
|
||||
- alternate Nemoclaw + MCP + Go server stack
|
||||
- hardcoded stale infrastructure assumptions
|
||||
- local SQLite-first assumptions that conflict with current PostgreSQL truth
|
||||
- Comfy service hardcoded to stale IPs
|
||||
|
||||
---
|
||||
|
||||
## What Sourik Actually Contains
|
||||
|
||||
### Implementation Shape
|
||||
|
||||
`Sourik/velocity` contains:
|
||||
|
||||
- Python FastAPI app:
|
||||
- `main.py`
|
||||
- `api/*.py`
|
||||
- `services/*.py`
|
||||
- `db/connection.py`
|
||||
- Go runtime:
|
||||
- `main.go`
|
||||
- `internal/nemoclaw/*`
|
||||
- `internal/oracle/*`
|
||||
- `internal/mcp/*`
|
||||
- `internal/sentinel/*`
|
||||
- `integrations/*.go`
|
||||
- frontend additions:
|
||||
- `frontend/src/app/marketing/page.tsx`
|
||||
- `frontend/src/lib/api.ts`
|
||||
- dashboard/marketing components
|
||||
- iOS spike:
|
||||
- `VelocityApp/*`
|
||||
- docs and summaries:
|
||||
- `README.md`
|
||||
- `SPRINT_SUMMARY_FOR_SAGNIK.md`
|
||||
- `SPEC.md`
|
||||
- `docs/*`
|
||||
- residue:
|
||||
- `.env`
|
||||
- `prototype.db`
|
||||
- coverage outputs
|
||||
- binaries
|
||||
- logs
|
||||
- pycache
|
||||
|
||||
### Sourik Architecture According to Sourik
|
||||
|
||||
The root `README.md` describes an “Agentic Operations Layer” with:
|
||||
|
||||
- WhatsApp webhook
|
||||
- Go OpenClaw/NemoClaw layer
|
||||
- MCP server
|
||||
- ComfyUI / CRM / visual hub integrations
|
||||
|
||||
That is a materially different center-of-gravity from the current mainline, where:
|
||||
|
||||
- FastAPI backend is the operational center
|
||||
- Linux control surface and ingress are already live
|
||||
- Comfy routing and AWS orchestration are already established
|
||||
|
||||
This matters. `Sourik` is not just “new features.” It contains an alternate operating model.
|
||||
|
||||
---
|
||||
|
||||
## Compatibility with Current Mainline
|
||||
|
||||
### Current Mainline Truth
|
||||
|
||||
The non-`Sourik` codebase already has:
|
||||
|
||||
- a live FastAPI backend in `backend/main.py`
|
||||
- active routers for Sentinel, CCTV, videos, scenes, vault
|
||||
- a real Nemoclaw client abstraction in Python
|
||||
- an Oracle implementation path in `backend/oracle/*`
|
||||
- a premium React app in `app/src/*`
|
||||
- a live ingress plane in `infrastructure/desineuron_ingress/*`
|
||||
- a live Linux AWS control surface in `infrastructure/ops_control_plane/*`
|
||||
- a real iOS app tree in `iOS/velocity/velocity/*`
|
||||
|
||||
So the comparison baseline is not theoretical. It is a partially working system with live infrastructure.
|
||||
|
||||
### Main Compatibility Findings
|
||||
|
||||
| Sourik Area | Mainline Equivalent | Compatibility |
|
||||
| --- | --- | --- |
|
||||
| `velocity/api/leads.py` | no equally complete current leads CRUD module in mainline backend | Good candidate |
|
||||
| `velocity/api/sentinel.py` | overlaps with `backend/routers/sentinel.py` but focuses on consent/GDPR/biometric storage | Selective candidate |
|
||||
| `velocity/api/catalyst.py` | overlaps with `backend/api/routes_catalyst.py` | Merge conflict likely |
|
||||
| `velocity/api/ws.py` | overlaps conceptually with current websocket/event logic | Selective candidate |
|
||||
| `velocity/api/analytics.py` | weak/no exact current equivalent | Good candidate |
|
||||
| `velocity/api/persona.py` | likely additive | Good candidate |
|
||||
| `velocity/api/kanban.py` | no clear current equivalent in mainline | Good candidate |
|
||||
| `velocity/services/comfyui_service.py` | conflicts with current ingress + Comfy routing + live GPU architecture | Poor direct candidate |
|
||||
| `velocity/main.py` | conflicts with `backend/main.py` | Do not merge directly |
|
||||
| `velocity/main.go` + `internal/*` | alternate runtime architecture | Do not merge directly |
|
||||
| `VelocityApp/*` | overlaps with current iOS app | Selective candidate only |
|
||||
|
||||
---
|
||||
|
||||
## Scored Intake Table
|
||||
|
||||
| Sourik Path / Scope | Score | Merge Recommendation | Reason |
|
||||
| --- | ---: | --- | --- |
|
||||
| `Sourik/velocity/api/leads.py` | 8 | Selective merge candidate | Real CRUD, qualification, demographics endpoints. Mainline has product need here and no equally complete direct equivalent. Needs DB contract alignment. |
|
||||
| `Sourik/velocity/api/kanban.py` | 8 | Selective merge candidate | Kanban behavior is useful and currently underrepresented in mainline implementation. |
|
||||
| `Sourik/velocity/api/analytics.py` | 8 | Selective merge candidate | Adds reporting/analytics surface that appears useful for Marketing and Oracle support. |
|
||||
| `Sourik/velocity/api/persona.py` | 7 | Selective merge candidate | Likely additive business logic and API value. |
|
||||
| `Sourik/velocity/api/chat_logs.py` | 7 | Selective merge candidate | Useful if mapped into Oracle / CRM flows; needs contract alignment with current auth and DB. |
|
||||
| `Sourik/velocity/api/ws.py` | 7 | Selective merge candidate | Useful patterns and tests likely exist, but websocket ownership already exists in current backend. |
|
||||
| `Sourik/velocity/api/sentinel.py` | 7 | Extract specific features only | Valuable for biometric consent, GDPR, and export patterns. But it is SQLite-centered and overlaps with current Sentinel runtime. |
|
||||
| `Sourik/velocity/tests/api/*` | 9 | Strong import candidate | Test suites are high-value, especially for a fragile future merge. Adapt tests even if code is not merged verbatim. |
|
||||
| `Sourik/velocity/tests/internal/nemoclaw/*` | 7 | Import selectively | Good coverage and behavioral protection if Go/Nemo concepts are retained anywhere. |
|
||||
| `Sourik/velocity/services/ad_network_skills.py` | 7 | Selective merge candidate | Likely useful for Catalyst ad automation and may complement current Meta-focused path. |
|
||||
| `Sourik/velocity/services/social_posting.py` | 7 | Selective merge candidate | Useful capability if social publishing remains in scope. |
|
||||
| `Sourik/velocity/services/catalyst_content.py` | 7 | Selective merge candidate | Useful Catalyst logic, but must be aligned with current Comfy and asset pipeline. |
|
||||
| `Sourik/velocity/services/comfyui_service.py` | 4 | Reference only, do not merge directly | Hardcodes stale host/IP and assumes a different Comfy deployment pattern from the current live ingress-managed GPU model. |
|
||||
| `Sourik/velocity/frontend/src/app/marketing/page.tsx` | 7 | Selective UI import candidate | Useful product surface not currently dominant in mainline app. Needs design-system integration and router alignment. |
|
||||
| `Sourik/velocity/frontend/src/components/marketing/*` | 7 | Selective UI import candidate | Likely useful for Catalyst/marketing module. |
|
||||
| `Sourik/velocity/frontend/src/components/dashboard/*` | 6 | Compare component by component | Useful ideas, but mainline already has strong dashboard surfaces. Merge only where functionality is genuinely additive. |
|
||||
| `Sourik/velocity/frontend/src/lib/api.ts` | 5 | Reference only; do not merge as-is | Useful contract hints, but current mainline already has API client layers. This should inform consolidation, not become a second truth. |
|
||||
| `Sourik/VelocityApp/Features/CameraView.swift` | 7 | Selective import candidate | Good feature spike: camera capture + send-to-Comfy flow + time/light controls. Worth comparing to current iOS inventory/AR path. |
|
||||
| `Sourik/VelocityApp/Features/TimeControlSlider.swift` | 7 | Selective import candidate | Likely useful to augment Sun/lighting feature work. |
|
||||
| `Sourik/VelocityApp/Features/TimeLightEngine.swift` | 7 | Selective import candidate | Strong fit with current Velocity iOS sun-path direction. |
|
||||
| `Sourik/VelocityApp/Core/Router.swift` | 5 | Review only | Could help, but current iOS structure already has navigation patterns. |
|
||||
| `Sourik/velocity/main.py` | 3 | Do not merge directly | It creates a second FastAPI root with a different DB model, routing shape, and operational assumptions. Extract modules only. |
|
||||
| `Sourik/velocity/main.go` | 3 | Do not merge directly | Alternate runtime center. Valuable as concept or archived subsystem, but not compatible with current mainline architecture without a deliberate platform decision. |
|
||||
| `Sourik/velocity/internal/nemoclaw/*` | 4 | Review as architecture experiments only | Significant conceptual overlap with current Python Nemoclaw path. A direct merge would create two control centers. |
|
||||
| `Sourik/velocity/internal/mcp/*` | 5 | Review selectively | Interesting if you want future MCP work, but not aligned with current operational center yet. |
|
||||
| `Sourik/velocity/internal/oracle/*` | 4 | Reference only for now | Current mainline already has an Oracle implementation direction in Python. Direct merge would fork the architecture. |
|
||||
| `Sourik/velocity/internal/sentinel/sentinel_api.go` | 4 | Reference only | Sentinel is already active in Python backend. |
|
||||
| `Sourik/velocity/integrations/*.go` | 5 | Review case-by-case | Potentially useful adapters, but only if the Go runtime is retained. |
|
||||
| `Sourik/velocity/docs/COMFYUI_HANDOFF.md` | 6 | Keep as reference | Useful context for intended wire-up, but assumes VPN/headscale-era setup that no longer matches current ingress truth. |
|
||||
| `Sourik/SPRINT_SUMMARY_FOR_SAGNIK.md` | 7 | Keep as reference artifact | Useful for intent, coverage claims, and blocked wire list. Not production code. |
|
||||
| `Sourik/SPEC.md` | 5 | Archive as historical spec | Useful context, but contains stale node IPs, port assumptions, and stage-only instructions that no longer match live infrastructure. |
|
||||
| `Sourik/PRD.md` | 2 | Archive only | Too thin to be operationally meaningful. |
|
||||
| `Sourik/velocity/README.md` | 6 | Keep as architecture snapshot | Good summary of Sourik’s intended architecture. |
|
||||
| `Sourik/velocity/.env` | 1 | Banish | Local secrets/config residue. Must not merge. |
|
||||
| `Sourik/desineuron-l4-node.pem` | 1 | Banish | Private key material in source tree. Never merge. |
|
||||
| `Sourik/velocity/db/prototype.db` | 1 | Banish | Local prototype database, not source. |
|
||||
| `Sourik/velocity/prototype.db` | 1 | Banish | Same issue. |
|
||||
| `Sourik/velocity/.coverage` | 1 | Banish | Coverage artifact. |
|
||||
| `Sourik/velocity/coverage*` | 1 | Banish | Coverage outputs, not source. |
|
||||
| `Sourik/velocity/.agent/*coverage*`, `*test_output*` | 1 | Banish | CI/test residue. |
|
||||
| `Sourik/velocity/antigravity_server` | 1 | Banish | Compiled binary, not source. |
|
||||
| `Sourik/velocity/antigravity_test_build.exe` | 1 | Banish | Compiled Windows artifact, not source. |
|
||||
| `Sourik/velocity/__pycache__`, `.pytest_cache` | 1 | Banish | Generated caches. |
|
||||
| `Sourik/velocity/logs/VALIDATION_FINAL.log` | 2 | Archive only | Useful as evidence, not source. |
|
||||
| `Sourik/velocity/test_out.txt`, `guide_extracted.txt`, `guide_utf8.txt` | 2 | Archive only | Scratch outputs. |
|
||||
| `Sourik/velocity/stubs/*` | 3 | Archive or keep in a clearly marked scratch area | Potentially useful examples, but not merge targets. |
|
||||
| `Sourik/velocity/archive/*` | 2 | Archive only | Historical material. |
|
||||
|
||||
---
|
||||
|
||||
## Bloat and Residue in Sourik
|
||||
|
||||
These are immediate no-merge items:
|
||||
|
||||
- private keys
|
||||
- `.env`
|
||||
- `.coverage`
|
||||
- `coverage*`
|
||||
- `.pytest_cache`
|
||||
- `__pycache__`
|
||||
- compiled binaries
|
||||
- local sqlite databases
|
||||
- raw logs
|
||||
- scratch text files
|
||||
|
||||
These do not need debate. They are not source code.
|
||||
|
||||
---
|
||||
|
||||
## Redundant vs Additive Features
|
||||
|
||||
### Redundant or Architecturally Conflicting
|
||||
|
||||
1. **FastAPI root app**
|
||||
- `Sourik/velocity/main.py`
|
||||
- conflicts with current `backend/main.py`
|
||||
- creates a second root service with different routing and DB assumptions
|
||||
|
||||
2. **Go agent runtime**
|
||||
- `Sourik/velocity/main.go`
|
||||
- `internal/nemoclaw/*`
|
||||
- `internal/mcp/*`
|
||||
- this is an alternate operational center, not a drop-in feature set
|
||||
|
||||
3. **ComfyUI service**
|
||||
- assumes stale IP-based deployment
|
||||
- current system already has:
|
||||
- stable ingress
|
||||
- GPU worker tagging
|
||||
- auto-healing route sync
|
||||
- Linux AWS control plane
|
||||
|
||||
### Additive and Potentially Valuable
|
||||
|
||||
1. **Lead / Kanban / Persona / Analytics Python APIs**
|
||||
- mainline can benefit directly from these
|
||||
|
||||
2. **Sentinel consent and GDPR patterns**
|
||||
- these are useful as selective feature imports into current Sentinel
|
||||
|
||||
3. **Marketing frontend**
|
||||
- a real additive surface for the Catalyst/marketing module
|
||||
|
||||
4. **iOS camera and time/light features**
|
||||
- fit directly with current iPad vision and sun/AR direction
|
||||
|
||||
5. **Test suites**
|
||||
- very high value regardless of whether code merges directly
|
||||
|
||||
---
|
||||
|
||||
## Compatibility with Built Features
|
||||
|
||||
### Works with Current Mainline Direction
|
||||
|
||||
- property and lead workflows
|
||||
- marketing/campaign intelligence
|
||||
- camera-driven iOS interactions
|
||||
- GDPR/consent handling
|
||||
- Kanban CRM motions
|
||||
|
||||
### Conflicts with Current Mainline Truth
|
||||
|
||||
- SQLite/prototype-first database assumptions
|
||||
- hardcoded or stale infrastructure endpoints
|
||||
- alternate Go-first NemoClaw/MCP control center
|
||||
- separate backend root service
|
||||
- stale VPN/headscale-era deployment assumptions
|
||||
|
||||
---
|
||||
|
||||
## Recommended Intake Strategy
|
||||
|
||||
### Merge Now Candidates
|
||||
|
||||
- `velocity/api/leads.py`
|
||||
- `velocity/api/kanban.py`
|
||||
- `velocity/api/analytics.py`
|
||||
- `velocity/api/persona.py`
|
||||
- tests supporting the above
|
||||
- selected marketing frontend components
|
||||
- selected iOS camera/time-light feature files
|
||||
|
||||
### Extract, Rewrite, Then Merge
|
||||
|
||||
- `velocity/api/sentinel.py`
|
||||
- `velocity/api/chat_logs.py`
|
||||
- `velocity/services/*`
|
||||
- `frontend/src/lib/api.ts`
|
||||
|
||||
### Do Not Merge Directly
|
||||
|
||||
- `velocity/main.py`
|
||||
- `velocity/main.go`
|
||||
- `velocity/internal/nemoclaw/*`
|
||||
- `velocity/internal/oracle/*`
|
||||
- `velocity/internal/mcp/*`
|
||||
- `velocity/services/comfyui_service.py`
|
||||
|
||||
### Banish Immediately from Merge Candidate Set
|
||||
|
||||
- `.env`
|
||||
- `.pem`
|
||||
- `.db`
|
||||
- `coverage*`
|
||||
- `.coverage`
|
||||
- `.pytest_cache`
|
||||
- `__pycache__`
|
||||
- binaries
|
||||
- logs
|
||||
- scratch outputs
|
||||
|
||||
---
|
||||
|
||||
## Final Recommendation
|
||||
|
||||
Sourik’s code should be treated as:
|
||||
|
||||
- **30% importable feature work**
|
||||
- **30% useful reference and test material**
|
||||
- **40% architectural conflict or residue**
|
||||
|
||||
The best path is:
|
||||
|
||||
1. strip all residue first
|
||||
2. import Python feature modules selectively
|
||||
3. import tests aggressively
|
||||
4. compare marketing frontend additions against current app
|
||||
5. compare iOS camera/time-light features against current iOS app
|
||||
6. keep the Go/Nemo/MCP stack out of the first merge unless you deliberately choose to adopt that architecture
|
||||
|
||||
That will give you the value in Sourik’s work without poisoning the current mainline with a second operating model.
|
||||
|
||||
@@ -0,0 +1,402 @@
|
||||
# Project Velocity Pre-Sourik Purge Report
|
||||
|
||||
**Prepared:** 2026-04-12
|
||||
**Scope:** Current `Project_Velocity` codebase excluding `Sourik` for scoring, with a separate compatibility pass against the incoming `Sourik` tree
|
||||
**Purpose:** Identify what should be kept, archived, consolidated, or purged before merging `Sourik` into the main codebase
|
||||
**Action in this report:** No deletion. Assessment only.
|
||||
|
||||
---
|
||||
|
||||
## Scoring Model
|
||||
|
||||
| Score | Meaning |
|
||||
| --- | --- |
|
||||
| 1 | Banish. Strong candidate for removal from repo or immediate quarantine. |
|
||||
| 2 | Very low value. Likely generated, stale, insecure, or misleading. |
|
||||
| 3 | Archive out of main repo. Has historical value but should not live in the main working tree. |
|
||||
| 4 | Review aggressively. Possible duplicate, stale path, or unclear ownership. |
|
||||
| 5 | Transitional. Keep only if a near-term owner confirms it. |
|
||||
| 6 | Useful but not core. Keep if it supports current delivery or migration. |
|
||||
| 7 | Important support artifact. |
|
||||
| 8 | Core implementation path. |
|
||||
| 9 | Highly important operational or product-critical code. |
|
||||
| 10 | Do not purge. Source-of-truth, live runtime, or critical integration surface. |
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
The current codebase has five major purge or merge-hardening problems before `Sourik` is brought in:
|
||||
|
||||
1. **Repo bloat is severe**
|
||||
- `models/` alone is about `13237.61 MB`
|
||||
- `db assets/` is about `3689.78 MB`
|
||||
- `app/` is about `2588.26 MB`
|
||||
- `Payload/` is about `523.81 MB`
|
||||
- `comfy_engine/` is about `524.58 MB`
|
||||
|
||||
2. **The repo contains generated and duplicated artifacts**
|
||||
- `app/dist/` is about `442.56 MB`
|
||||
- `app/public/models/` is about `437.58 MB`
|
||||
- `app/assets/House Floor Plans/` is about `958.41 MB`
|
||||
- the iOS tree has duplicated source files under both:
|
||||
- `iOS/App`, `iOS/Core`, `iOS/Features`
|
||||
- `iOS/velocity/velocity/...`
|
||||
|
||||
3. **There are many zero-byte placeholder files**
|
||||
- especially under `agents/`, `backend/api/`, `backend/database/`, `backend/sentinel/`, `comfy_engine/scripts/`, `infrastructure/aws_scale/`, and `infrastructure/blackbox_local/`
|
||||
- these create false surface area and false merge confidence
|
||||
|
||||
4. **The repo contains security-sensitive or machine-local artifacts**
|
||||
- `desineuron-l4-node.pem` in repo root is unacceptable long-term
|
||||
- historical bootstrap scripts contain stale IPs, stale assumptions, and one-off deployment logic
|
||||
|
||||
5. **The incoming Sourik tree overlaps the most dangerous places**
|
||||
- backend API surface
|
||||
- frontend API client and dashboard/marketing modules
|
||||
- Oracle/Catalyst/Sentinel concepts
|
||||
- alternative runtime stacks in Go/Python
|
||||
|
||||
The highest-priority pre-merge action is not deleting business logic. It is removing ambiguity.
|
||||
|
||||
---
|
||||
|
||||
## Quantitative Findings
|
||||
|
||||
### Largest top-level paths
|
||||
|
||||
| Path | Size |
|
||||
| --- | ---: |
|
||||
| `models/` | `13237.61 MB` |
|
||||
| `db assets/` | `3689.78 MB` |
|
||||
| `app/` | `2588.26 MB` |
|
||||
| `comfy_engine/` | `524.58 MB` |
|
||||
| `Payload/` | `523.81 MB` |
|
||||
| `.Agent Context/` | `8.92 MB` |
|
||||
| `backend/` | `0.40 MB` |
|
||||
| `iOS/` | `0.33 MB` |
|
||||
| `infrastructure/` | `0.27 MB` |
|
||||
|
||||
### Generated or duplicated asset-heavy paths
|
||||
|
||||
| Path | Size | Assessment |
|
||||
| --- | ---: | --- |
|
||||
| `app/dist/` | `442.56 MB` | Generated build output. Should not live in source control as working source. |
|
||||
| `app/public/models/` | `437.58 MB` | Runtime-facing duplicates of model assets. |
|
||||
| `app/assets/House Floor Plans/` | `958.41 MB` | Source asset tree with duplicate downstream copies. |
|
||||
| `db assets/` | `3689.78 MB` | Valuable business/demo data, but too heavy for a clean app repo. |
|
||||
| `models/` | `13237.61 MB` | Runtime model binaries. Belongs in artifact storage, not Git. |
|
||||
| `Payload/` | `523.81 MB` | Packaged payload/archive staging. Likely not source-of-truth. |
|
||||
|
||||
### Zero-byte files found
|
||||
|
||||
Representative zero-byte paths include:
|
||||
|
||||
- `agents/docker-compose.agents.yml`
|
||||
- `agents/openclaw_gateway/openclaw.json`
|
||||
- `agents/openclaw_gateway/workspace/AGENTS.md`
|
||||
- `agents/openclaw_gateway/workspace/HEARTBEAT.md`
|
||||
- `agents/skills/meta_ads_manager.py`
|
||||
- `agents/skills/social_publisher.py`
|
||||
- `agents/skills/whatsapp_connector.ts`
|
||||
- `backend/api/routes_crm.py`
|
||||
- `backend/api/routes_oracle.py`
|
||||
- `backend/api/routes_weaver.py`
|
||||
- `backend/database/pinecone_client.py`
|
||||
- `backend/database/schemas.py`
|
||||
- `backend/database/supabase_client.py`
|
||||
- `backend/sentinel/face_tracker.py`
|
||||
- `backend/sentinel/sentiment_engine.py`
|
||||
- `comfy_engine/scripts/auto_term_sheet.py`
|
||||
- `comfy_engine/scripts/queue_manager.py`
|
||||
- `comfy_engine/workflows/cinematic_wan22_14b.json`
|
||||
- `comfy_engine/workflows/dream_weaver_restyle.json`
|
||||
- `infrastructure/aws_scale/node1_agents.tf`
|
||||
- `infrastructure/aws_scale/node2_rendering.tf`
|
||||
- `infrastructure/aws_scale/tailscale_config.sh`
|
||||
- `infrastructure/blackbox_local/docker-compose.local.yml`
|
||||
- `infrastructure/blackbox_local/setup_gpu_env.sh`
|
||||
|
||||
These files are more dangerous than absent files because they imply functionality that does not exist.
|
||||
|
||||
---
|
||||
|
||||
## Duplicate Code and Structural Redundancy
|
||||
|
||||
### iOS duplicate source trees
|
||||
|
||||
The following file sets are byte-identical duplicates:
|
||||
|
||||
- `iOS/App/ContentView.swift`
|
||||
- `iOS/velocity/velocity/App/ContentView.swift`
|
||||
|
||||
- `iOS/App/VelocityApp.swift`
|
||||
- `iOS/velocity/velocity/App/VelocityApp.swift`
|
||||
|
||||
- `iOS/Core/State/AppStore.swift`
|
||||
- `iOS/velocity/velocity/Core/State/AppStore.swift`
|
||||
|
||||
- `iOS/Core/UI/GlassBlurView.swift`
|
||||
- `iOS/velocity/velocity/Core/UI/GlassBlurView.swift`
|
||||
|
||||
- `iOS/Core/UI/VelocityTheme.swift`
|
||||
- `iOS/velocity/velocity/Core/UI/VelocityTheme.swift`
|
||||
|
||||
- `iOS/Features/Dashboard/DashboardView.swift`
|
||||
- `iOS/velocity/velocity/Features/Dashboard/DashboardView.swift`
|
||||
|
||||
- `iOS/Features/Oracle/OracleView.swift`
|
||||
- `iOS/velocity/velocity/Features/Oracle/OracleView.swift`
|
||||
|
||||
- `iOS/Features/Sentinel/SentinelView.swift`
|
||||
- `iOS/velocity/velocity/Features/Sentinel/SentinelView.swift`
|
||||
|
||||
- `iOS/Features/Settings/SettingsView.swift`
|
||||
- `iOS/velocity/velocity/Features/Settings/SettingsView.swift`
|
||||
|
||||
Interpretation:
|
||||
|
||||
- one tree is acting like a clean source mirror
|
||||
- the other is the real Xcode project path
|
||||
- keeping both guarantees confusion and future merge drift
|
||||
|
||||
### Frontend demo/runtime split
|
||||
|
||||
There is a real split between:
|
||||
|
||||
- polished app shell modules in `app/src/components/modules/*`
|
||||
- newer Oracle-specific implementation under `app/src/oracle/*`
|
||||
- demo fallback content in `app/src/oracle/lib/oracleDemoData.ts`
|
||||
|
||||
This is not purge-worthy by itself, but it is a clear merge-risk zone because multiple “truths” exist:
|
||||
|
||||
- product shell truth
|
||||
- demo truth
|
||||
- intended production truth
|
||||
|
||||
---
|
||||
|
||||
## Scored Purge Table
|
||||
|
||||
| Path / Scope | Type | Score | Recommendation | Reason |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| `desineuron-l4-node.pem` | file | 1 | Banish from repo immediately | Private key material does not belong in source control. This is a security risk, not just clutter. |
|
||||
| `3.0.0` | file | 1 | Banish | Zero-value stray file with no semantic role. |
|
||||
| `app/dist/` | dir | 1 | Banish from repo, generate in CI/local only | Build output. Large, derived, and guaranteed merge noise. |
|
||||
| `agents/docker-compose.agents.yml` | file | 1 | Banish unless populated immediately | Zero-byte placeholder that implies a deployable agents stack that does not exist. |
|
||||
| `agents/openclaw_gateway/openclaw.json` | file | 1 | Banish or implement | Zero-byte config placeholder. |
|
||||
| `agents/openclaw_gateway/workspace/AGENTS.md` | file | 1 | Banish | Zero-byte placeholder. |
|
||||
| `agents/openclaw_gateway/workspace/HEARTBEAT.md` | file | 1 | Banish | Zero-byte placeholder. |
|
||||
| `agents/skills/meta_ads_manager.py` | file | 1 | Banish or implement elsewhere | Empty skill file creates false feature surface. |
|
||||
| `agents/skills/social_publisher.py` | file | 1 | Banish or implement elsewhere | Same issue. |
|
||||
| `agents/skills/whatsapp_connector.ts` | file | 1 | Banish or implement elsewhere | Same issue. |
|
||||
| `backend/api/routes_crm.py` | file | 1 | Banish or fill before merge | Empty route file conflicts conceptually with live backend ownership. |
|
||||
| `backend/api/routes_oracle.py` | file | 1 | Banish or redirect to real Oracle router | Empty file directly conflicts with actual Oracle implementation path in `backend/oracle/router_v1.py`. |
|
||||
| `backend/api/routes_weaver.py` | file | 1 | Banish or implement | Empty route file. |
|
||||
| `backend/database/pinecone_client.py` | file | 1 | Banish | Empty placeholder, no runtime value. |
|
||||
| `backend/database/schemas.py` | file | 1 | Banish | Empty placeholder; current schema truth lives elsewhere. |
|
||||
| `backend/database/supabase_client.py` | file | 1 | Banish | Empty placeholder and architecturally confusing because current truth favors PostgreSQL-first. |
|
||||
| `backend/sentinel/face_tracker.py` | file | 1 | Banish | Empty placeholder. |
|
||||
| `backend/sentinel/sentiment_engine.py` | file | 1 | Banish | Empty placeholder. |
|
||||
| `comfy_engine/scripts/auto_term_sheet.py` | file | 1 | Banish | Empty placeholder. |
|
||||
| `comfy_engine/scripts/queue_manager.py` | file | 1 | Banish | Empty placeholder. |
|
||||
| `comfy_engine/workflows/cinematic_wan22_14b.json` | file | 1 | Banish or replace with real workflow export | Empty workflow file is actively misleading. |
|
||||
| `comfy_engine/workflows/dream_weaver_restyle.json` | file | 1 | Banish or replace with real workflow export | Same issue. |
|
||||
| `infrastructure/aws_scale/node1_agents.tf` | file | 1 | Banish or implement in a real infra module | Empty Terraform file is dead weight. |
|
||||
| `infrastructure/aws_scale/node2_rendering.tf` | file | 1 | Banish or implement in a real infra module | Same issue. |
|
||||
| `infrastructure/aws_scale/tailscale_config.sh` | file | 1 | Banish | Empty and also contradicts current non-Tailscale operating direction. |
|
||||
| `infrastructure/blackbox_local/docker-compose.local.yml` | file | 1 | Banish or define properly | Empty infra stub. |
|
||||
| `infrastructure/blackbox_local/setup_gpu_env.sh` | file | 1 | Banish or define properly | Empty infra stub. |
|
||||
| `backend_deploy_20260401.tgz` | file | 2 | Archive outside repo | Historical deploy artifact, not source. |
|
||||
| `Payload/comfy_engine.zip` | file | 2 | Archive outside repo | Packaged artifact. Valuable for history, not for source control. |
|
||||
| `remote_bootstrap_20260401.sh` | file | 3 | Archive under runbooks or infra-history | Historical one-off bootstrap with time-bound assumptions. |
|
||||
| `patch_nemoclaw_service_20260401.sh` | file | 3 | Archive | One-off patch script, not durable runtime code. |
|
||||
| `user_data_bootstrap.sh` | file | 4 | Keep only if still current; otherwise archive to infra-history | Contains useful S3/bootstrap logic, but also bakes old assumptions. |
|
||||
| `dw_gateway_v2_min.py` | file | 4 | Review for consolidation into backend or comfy service layer | Functional, but sits as a root-level one-off service, not in an owned module. |
|
||||
| `monitor_nvme.py` | file | 4 | Archive to ops scripts if still useful | Ad hoc operational helper, not core product code. |
|
||||
| `monitor_qwen.py` | file | 4 | Archive to ops scripts if still useful | Same issue. |
|
||||
| `test_scp.txt` | file | 1 | Banish | Stray scratch file. |
|
||||
| `app/public/models/` | dir | 3 | Review for consolidation | Likely runtime-facing duplicates of source model assets. |
|
||||
| `app/assets/House Floor Plans/` | dir | 5 | Keep as design/source assets, but deduplicate outputs | Real source value exists, but there are duplicate exports in `public/` and `dist/`. |
|
||||
| `db assets/` | dir | 5 | Move to data repository or artifact store | Valuable for demo and product data, but too heavy and merge-hostile for application repo. |
|
||||
| `models/` | dir | 2 | Move to S3/artifact store, keep manifest only in repo | Runtime models should not live in Git. Canonical storage should be S3 or controlled local store. |
|
||||
| `iOS/App`, `iOS/Core`, `iOS/Features` | dir tree | 4 | Consolidate with actual Xcode tree | Duplicates the active app tree and guarantees drift. |
|
||||
| `iOS/velocity/velocity/...` | dir tree | 8 | Keep as likely real app source-of-truth | This appears to be the actual project-backed path tied to Xcode. |
|
||||
| `app/src/oracle/lib/oracleDemoData.ts` | file | 5 | Keep short-term, mark explicitly as demo-only | Useful for UI continuity, but dangerous if mistaken for live data path. |
|
||||
| `app/src/lib/oracleQueryClient.ts` | file | 6 | Review against `app/src/oracle/lib/oracleApiClient.ts` | Potential overlap between legacy Oracle client and new Oracle path. |
|
||||
| `app/src/oracle/lib/oracleApiClient.ts` | file | 8 | Keep | Newer Oracle contract path. |
|
||||
| `backend/main.py` | file | 10 | Keep | Current backend integration root. |
|
||||
| `backend/routers/sentinel.py` | file | 10 | Keep | Live Sentinel backbone. |
|
||||
| `backend/routers/cctv.py` | file | 9 | Keep | Active auto-mode/CCTV path. |
|
||||
| `backend/routers/videos.py` | file | 9 | Keep | Active video catalog runtime path. |
|
||||
| `backend/routers/vault.py` | file | 9 | Keep | Live vault and trackable-link logic. |
|
||||
| `backend/services/nemoclaw_client.py` | file | 10 | Keep | Current AI runtime integration truth. |
|
||||
| `backend/services/auto_mode_matcher.py` | file | 9 | Keep | Core Sentinel automation logic. |
|
||||
| `backend/oracle/router_v1.py` | file | 9 | Keep | Real Oracle implementation path, even if not fully mounted in the main runtime. |
|
||||
| `backend/oracle/*` | dir tree | 8 | Keep | Important product direction with tests and contracts. |
|
||||
| `backend/tests/oracle/*` | dir tree | 8 | Keep | High-value protection for a fragile future merge area. |
|
||||
| `app/src/components/modules/Sentinel.tsx` and `sentinel/*` | module area | 9 | Keep | Core UI for a real implemented subsystem. |
|
||||
| `app/src/components/modules/Catalyst.tsx` | file | 7 | Keep, but compare against Sourik marketing/catalyst ideas | Active surface with likely future overlap. |
|
||||
| `app/src/components/modules/Oracle.tsx` + `app/src/app/oracle/page.tsx` | module area | 9 | Keep | Core UI architecture for Oracle. |
|
||||
| `infrastructure/desineuron_ingress/*` | dir tree | 10 | Keep | Live infrastructure truth and runbooks. |
|
||||
| `infrastructure/ops_control_plane/*` | dir tree | 10 | Keep | Live operational control surface. |
|
||||
| `.Agent Context/Bibels/*` | docs | 8 | Keep and consolidate | High-value product/infra truth. |
|
||||
|
||||
---
|
||||
|
||||
## Strong Retain Set
|
||||
|
||||
These are the areas that should be treated as current core code, not purge targets:
|
||||
|
||||
- `backend/main.py`
|
||||
- `backend/routers/*` except empty placeholder files in `backend/api/`
|
||||
- `backend/services/*`
|
||||
- `backend/oracle/*`
|
||||
- `backend/db/*`
|
||||
- `backend/tests/*`
|
||||
- `app/src/*` excluding clearly demo-only or overlapping legacy Oracle client paths that need review
|
||||
- `infrastructure/desineuron_ingress/*`
|
||||
- `infrastructure/ops_control_plane/*`
|
||||
- `iOS/velocity/velocity/*` as the likely canonical iOS app path
|
||||
- `.Agent Context/Bibels/*`
|
||||
|
||||
---
|
||||
|
||||
## Redundant or Misleading Areas
|
||||
|
||||
### 1. The agents subtree
|
||||
|
||||
Current assessment:
|
||||
|
||||
- almost entirely placeholder surface
|
||||
- no runtime truth
|
||||
- no concrete ownership
|
||||
- high probability of direct collision with Sourik’s actual agents and MCP work
|
||||
|
||||
Recommendation:
|
||||
|
||||
- do **not** merge any existing non-Sourik `agents/` placeholders forward as if they are real
|
||||
- either delete them later or move them to a scratch/archive area
|
||||
|
||||
### 2. Duplicate iOS trees
|
||||
|
||||
Current assessment:
|
||||
|
||||
- exact duplicate code across two trees
|
||||
- one likely mirrors source
|
||||
- the nested Xcode-backed tree is the practical source of truth
|
||||
|
||||
Recommendation:
|
||||
|
||||
- pick one tree before large merges
|
||||
- otherwise every iOS merge becomes a double-merge
|
||||
|
||||
### 3. Root-level ops scripts
|
||||
|
||||
Current assessment:
|
||||
|
||||
- some are useful operational history
|
||||
- none should remain ambiguous root-level “maybe runtime” assets
|
||||
|
||||
Recommendation:
|
||||
|
||||
- either move to `infrastructure/archive/` or formalize them under owned infra modules
|
||||
|
||||
---
|
||||
|
||||
## Compatibility Assessment for Incoming Sourik Merge
|
||||
|
||||
This section is based on the **shape** of the incoming `Sourik` tree and how it overlaps with the current codebase.
|
||||
|
||||
### High-Conflict Zones
|
||||
|
||||
| Incoming Sourik Area | Current Main Area | Risk | Why |
|
||||
| --- | --- | --- | --- |
|
||||
| `Sourik/velocity/api/*.py` | `backend/main.py`, `backend/routers/*`, `backend/api/*` | High | Both define backend API surfaces for Catalyst, Sentinel, leads, websockets, and chat/log flows. |
|
||||
| `Sourik/velocity/frontend/src/lib/api.ts` | `app/src/lib/api.ts`, `app/src/oracle/lib/oracleApiClient.ts` | High | Conflicting client-side contract layers are likely. |
|
||||
| `Sourik/velocity/frontend/src/components/...` | `app/src/components/modules/*` | High | Dashboard, marketing, and visual modules are likely to overlap semantically. |
|
||||
| `Sourik/velocity/internal/oracle/*` | `backend/oracle/*` | High | Two different Oracle implementations or mental models may coexist. |
|
||||
| `Sourik/velocity/internal/nemoclaw/*` | `backend/services/nemoclaw_client.py`, prompt files | High | Strong conceptual overlap around reasoning/runtime responsibilities. |
|
||||
| `Sourik/velocity/services/comfyui_service.py` | `infrastructure/desineuron_ingress/*`, ops control plane, current Comfy deployment path | High | Comfy runtime ownership is already established elsewhere. |
|
||||
| `Sourik/VelocityApp/*` | `iOS/velocity/velocity/*` | Medium-High | iOS naming and feature overlap likely. |
|
||||
|
||||
### Medium-Conflict Zones
|
||||
|
||||
| Incoming Sourik Area | Current Main Area | Risk | Why |
|
||||
| --- | --- | --- | --- |
|
||||
| `Sourik/velocity/marketing/*` | `backend/api/routes_catalyst.py`, `app/src/components/modules/Catalyst.tsx` | Medium | Similar domain, different implementation lineage. |
|
||||
| `Sourik/velocity/mcp/*` | current repo has almost no real MCP implementation outside ops/docs | Medium | Less direct code collision, but conceptual ownership must be assigned. |
|
||||
| `Sourik/velocity/integrations/*` | current backend service boundaries | Medium | Could be useful if treated as adapter candidates instead of merged blindly. |
|
||||
|
||||
### Low-Compatibility / High-Archive Areas in Sourik
|
||||
|
||||
These should not be merged into main as-is later:
|
||||
|
||||
- `.pytest_cache`
|
||||
- compiled `.pyc`
|
||||
- `.env`
|
||||
- local `prototype.db`
|
||||
- `coverage*`
|
||||
- test output logs
|
||||
- bundled `.exe`
|
||||
- scratch guides and extracted intermediates
|
||||
- duplicate keys such as `desineuron-l4-node.pem`
|
||||
|
||||
---
|
||||
|
||||
## Pre-Merge Filter Recommendations
|
||||
|
||||
Before merging `Sourik`, do this sequence:
|
||||
|
||||
1. **Purge or quarantine score 1-2 paths from the current main tree**
|
||||
- especially secrets, zero-byte placeholders, build output, and archived binaries
|
||||
|
||||
2. **Resolve canonical owners**
|
||||
- iOS canonical tree
|
||||
- Oracle backend owner path
|
||||
- Comfy/infra owner path
|
||||
- AI runtime owner path
|
||||
|
||||
3. **Mark demo-only code explicitly**
|
||||
- especially Oracle demo fallback and any mock client layers
|
||||
|
||||
4. **Move heavy artifacts out of repo**
|
||||
- models
|
||||
- generated builds
|
||||
- payload zips
|
||||
- bulky demo assets if they are not required in the core app repo
|
||||
|
||||
5. **Merge Sourik by subsystem, not by tree**
|
||||
- backend API
|
||||
- frontend marketing/dashboard
|
||||
- Oracle logic
|
||||
- MCP/integrations
|
||||
- iOS
|
||||
|
||||
6. **Do not allow two runtimes for the same responsibility**
|
||||
- one Oracle backend
|
||||
- one Comfy orchestration path
|
||||
- one Nemoclaw integration contract
|
||||
- one frontend API client contract per domain
|
||||
|
||||
---
|
||||
|
||||
## Final Recommendation
|
||||
|
||||
The current codebase is not yet ready for a blind merge with `Sourik`.
|
||||
|
||||
The biggest blockers are:
|
||||
|
||||
- fake surface area from empty files
|
||||
- duplicated iOS source roots
|
||||
- heavy runtime assets in Git
|
||||
- root-level operational drift
|
||||
- overlapping conceptual ownership around Oracle, Nemoclaw, Catalyst, and API contracts
|
||||
|
||||
The right move is:
|
||||
|
||||
- purge ambiguity first
|
||||
- then merge subsystem by subsystem
|
||||
|
||||
That will save far more time than trying to reconcile two partially overlapping stacks after the fact.
|
||||
|
||||
338
.Agent Context/Sprint 1/Sprint 1 Fact Table - 2026-04-12.md
Normal file
@@ -0,0 +1,338 @@
|
||||
# Sprint 1 Fact Table
|
||||
|
||||
**Date:** 2026-04-12
|
||||
**Scope:** Reconciliation of `userstories.csv` and `tasks.csv` against the current Project Velocity repo, live infrastructure, and evolved product direction
|
||||
**Purpose:** Show what is done, partial, changed, deferred to v2, or still missing
|
||||
|
||||
**Important Note:** `tasks.csv` and `userstories.csv` contain many items marked `Closed`. That is treated here as historical planning metadata, not source-of-truth delivery status. This fact table is based on the current repo, live infrastructure, and the product direction clarified after Sprint 1.
|
||||
|
||||
---
|
||||
|
||||
## Status Key
|
||||
|
||||
| Status | Meaning |
|
||||
| --- | --- |
|
||||
| `Done` | Implemented in current mainline or achieved through an evolved equivalent |
|
||||
| `Partial` | Significant work exists, but the original intent is not fully complete |
|
||||
| `Changed` | Original task was superseded or split into a better/different architecture |
|
||||
| `V2` | Intentionally better treated as v2 or later, not a Sprint 1 blocker now |
|
||||
| `Missing` | Not materially implemented in mainline yet |
|
||||
|
||||
---
|
||||
|
||||
## Executive Summary
|
||||
|
||||
### User Story Rollup
|
||||
|
||||
| User Story | Status | Reality |
|
||||
| --- | --- | --- |
|
||||
| `1.1 Local/Cloud Hardware Config` | `Changed` | The current AWS/Linux stack is simulation hardware for product proving. The client-facing recommendation is now minimum `1x NVIDIA RTX PRO 6000 Blackwell 96GB`, recommended `2x`, with horizontal scaling and DGX/H100-class builds for HNI clients. |
|
||||
| `1.2 ComfyUI Visual Workflows` | `Partial` | Dream Weaver, Qwen poster, and Wan 2.2 workflow assets all exist locally as real code and workflow JSONs. The remaining gap is production-grade orchestration, async automation, and canonical packaging. |
|
||||
| `1.3 System Prompts & UI Logic` | `Partial` | Prompt assets and UI direction exist, but there is no single canonical prompt inventory mapping persona -> function -> file -> model -> API surface. |
|
||||
| `2.1 Swift/iPad App` | `Partial` | The iOS app is materially implemented and was proven once in simulated form. The blocker is stable endpoint contract and environment passthrough, not absence of implementation. |
|
||||
| `2.2 FastAPI Neural Core` | `Done` | FastAPI backend, PostgreSQL, auth, Sentinel stack, vault, scenes, videos, and live infra are in place. This is the real operating backend, not a placeholder. |
|
||||
| `2.3 CRM/WebOS React Wiring` | `Partial` | WebOS shell is strong, but the canonical CRM backend contract is incomplete. Leads/chat/kanban wiring is still not fully landed in mainline. |
|
||||
| `3.1 Claw Bot Ecosystem` | `Changed` | The original OpenClaw framing is obsolete. The intended truth is NemoClaw as the operating agent inside on-prem or client-cloud deployments, with stronger local-model autonomy planned later. |
|
||||
| `3.2 MCP Server/Tools` | `V2` | MCP work is deliberate in Sourik's tree, but it is not part of the current mainline operating center yet. |
|
||||
| `3.3 Marketing Automation` | `Partial` | Meta/Catalyst foundations exist and visual generation is wired conceptually, but Google Ads, autonomous posting, and a unified production-grade campaign loop remain open. |
|
||||
| `4.1 Future Life and Time & Light Engine` | `Changed` | This story has effectively split: `Future Life` is now v2, while `Time & Light` remains a v1 item with significant implementation already present in iOS. |
|
||||
| `4.2 Engagement Intelligence and Social Proof layer` | `Partial` | Sentinel intelligence exists, and there is a real browser-webcam perception path using Google MediaPipe on the frontend. The sales-facing social proof, room-peak, and wealth/legacy payoff layers are not fully delivered yet. |
|
||||
|
||||
### Summary Counts
|
||||
|
||||
| Status | Count |
|
||||
| --- | ---: |
|
||||
| `Done` | 1 |
|
||||
| `Partial` | 6 |
|
||||
| `Changed` | 3 |
|
||||
| `V2` | 1 |
|
||||
| `Missing` | 0 |
|
||||
|
||||
Interpretation:
|
||||
|
||||
- Sprint 1 was not a failure
|
||||
- the repo contains more real implementation than the old fact table gave credit for
|
||||
- the biggest drift is not infra anymore
|
||||
- the biggest drift is CRM completion, stable app/backend contracts, prompt inventory, and productized execution paths
|
||||
|
||||
---
|
||||
|
||||
## User Story Fact Table
|
||||
|
||||
| User Story | Original Intent | Current Status | Evidence / Current Truth | What Remains |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `1.1 Local/Cloud Hardware Config` | Define Black Box + provision 8xA100 + split nodes + tunnels | `Changed` | Current infra is a proving ground: Linux control surface, AWS GPU workers, S3 strategy, stable `t4g.micro` ingress. For clients, the target recommendation is minimum `1x RTX PRO 6000 Blackwell 96GB`, recommended `2x`, and horizontal scaling if workload grows. HNI builders can justify DGX/H100-class systems. | Formalize the customer hardware matrix, scaling tiers, and on-prem packaging playbook. |
|
||||
| `1.2 ComfyUI Visual Workflows` | Dream Weaver, poster gen, Wan 2.2, async queue API | `Partial` | The repo contains real workflow assets and code: `comfy_engine/workflows/dreamweaver_phase1_depth.json`, `dreamweaver_phase2_multicontrol.json`, `dreamweaver_phase3_batch.json`, `dreamweaver_a100_human_preservation.json`, `catalyst_poster_qwen.json`, `cinematic_wan22_14b.json`, plus `dw_gateway_v2.py`, `queue_manager.py`, and batch/test scripts. | Standardize canonical workflow packaging, unify gateway/runtime assumptions, and finish end-to-end async automation across all workflows. |
|
||||
| `1.3 System Prompts & UI Logic` | Oracle persona prompts, Catalyst prompts, lock frontend/API design | `Partial` | Oracle architecture is deeply specified, and prompt assets already exist in `backend/nemoclaw_prompts/*.md` plus Dream Weaver prompt files. UI language exists. | Build a first-principles prompt inventory: which personas/functions exist, which prompt files are canonical, where Oracle prompts live, where Catalyst prompts live, and what API contracts they expect. |
|
||||
| `2.1 Swift/iPad App` | Native shell + camera + sun path | `Partial` | The app is materially implemented: `ComfyClient.swift`, `InventoryView.swift`, `ARSunOverlayView.swift`, `SunMath.swift`, `SimulatorSunOverlayView.swift`, and slider/camera flow are present in the canonical iOS tree. It has been demonstrated once in simulated form from Sayan's MacBook. | Stabilize environment passthrough and endpoint mapping so the existing app can reliably talk to the current backend/Comfy gateways after code merge. |
|
||||
| `2.2 FastAPI Neural Core` | FastAPI + PostgreSQL + endpoints + websockets | `Done` | `backend/main.py` is a real unified backend with DB pool lifecycle, auth, Catalyst, Sentinel, CCTV, scenes, videos, vault, static assets, and websocket support. This is already a live operating backend rather than a stub. | Expand feature breadth, not existence: CRM routes, Oracle mounting/contract cleanup, and stricter API/schema discipline. |
|
||||
| `2.3 CRM/WebOS React Wiring` | Connect WebOS to backend, Kanban, dashboard sentiment | `Partial` | The WebOS/UI layer is real, but the backend contract is incomplete. `backend/api/routes_crm.py` is zero bytes, `backend/api/routes_oracle.py` is zero bytes, and the frontend still uses `app/src/components/oracle/mockLeads.ts`. `PipelineView.tsx` and CRM types exist, but they are not backed by canonical live endpoints yet. | Finish the real lead/chat/kanban/oracle endpoints, replace mock lead data, wire CRM websocket updates, define DB structure, and generate synthetic client data for verification. |
|
||||
| `3.1 Claw Bot Ecosystem` | Deploy OpenClaw as primary communication agent | `Changed` | The product direction is now NemoClaw as the operating agent for client on-prem or client-cloud deployments. Current reality still uses the Python backend as the main runtime center, with future agent hardening planned. | Define the v1 NemoClaw boundary cleanly: what it owns now, how it integrates with CRM and Catalyst, and what shifts to local `30B/70B` models in v2. |
|
||||
| `3.2 MCP Server/Tools` | Local files, DB, internet via MCP | `V2` | MCP work exists deliberately in Sourik's code and should be treated as an explicit future subsystem, not accidental residue. | Revisit only after Sayan approval and after the core CRM/product surfaces stabilize enough to absorb it cleanly. |
|
||||
| `3.3 Marketing Automation` | Meta/Google, bids, content generation, posting | `Partial` | Mainline has a substantial Catalyst UI in `app/src/components/modules/Catalyst.tsx` and live Meta-oriented backend routes in `backend/api/routes_catalyst.py` for campaign creation, creative sync, insights, lookalike audiences, and auth. Qwen/Wan workflow references are already reflected in the UI. | Missing pieces are Google Ads parity, autonomous posting, unified audience/budget/bid loop, production-grade marketing DB/state, and a non-fragmented front-to-back execution path. |
|
||||
| `4.1 Future Life and Time & Light Engine` | Future Life videos + iPad time/light engine | `Changed` | The story is now two scopes. `Future Life` is pushed to v2. `Time & Light` is materially implemented in iOS via AR sun overlay, sun math, SceneKit dollhouse, sliders, and simulator fallback. | For v1, finish endpoint stability, validation on real devices, and tighten the product surface around Time & Light. For v2, Future Life needs a defined cinematic workflow and asset/runtime contract. |
|
||||
| `4.2 Engagement Intelligence and Social Proof layer` | Social proof, emotional anchoring, wealth projection | `Partial` | Sentinel/QD logic exists, and the repo already contains a live-session browser path for webcam perception: `PerceptionPlayer.tsx` captures webcam, `useMediapipeFaceLandmarker.ts` runs Google MediaPipe in-browser, `landmarkPacketEncoder.ts` emits compact blendshape packets, and `backend/routers/sentinel.py` ingests them over WebSocket and returns QD updates. Your intended broader testing path can also use browser automation and public/free CCTV feeds. | Validate the live MacBook browser path end-to-end with Sayan, then decide how much additional CCTV/browser testing is needed before productizing the sales-facing social proof and room-peak layers. |
|
||||
|
||||
---
|
||||
|
||||
## Task Fact Table
|
||||
|
||||
| Ref | Task | Status | Fact | Notes |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `W1-2` | Define local Black Box edge server requirements | `Partial` | The architectural direction is now clear, but the customer-facing hardware matrix is still not formalized in one deployment standard. | Document minimum `1x RTX PRO 6000 Blackwell 96GB`, recommended `2x`, horizontal scaling, and DGX/H100 escalation path. |
|
||||
| `W2-3` | Provision AWS 8xA100 instance | `Changed` | Current AWS GPU use is validation hardware, not the final customer recommendation. | The live L4/G6 path served testing; product packaging should now reference Blackwell-class on-prem targets. |
|
||||
| `W2-4` | Virtualize AWS into Node 1 and Node 2 | `Changed` | Not how the system evolved. | Replaced by Linux control plane + ephemeral AWS workers. |
|
||||
| `W2-5` | Secure SSH tunnel access | `Changed` | Stable ingress, SSM, LAN access, and route sync superseded this. | Current system is better than the original tunnel-only idea. |
|
||||
| `W1-7` | Dream Weaver interior restyling workflow | `Partial` | Real workflow JSONs, gateway code, prompt expansion, mask preprocessing, A100 executor, and batch processor exist locally. | Convert the local workflow stack into a canonical production package with stable endpoints and validation. |
|
||||
| `W1-8` | Marketing poster workflow using Qwen-Image 2512 | `Partial` | `comfy_engine/workflows/catalyst_poster_qwen.json` exists and the Catalyst surface references Qwen poster generation directly. | Make the poster flow an operator-safe product path instead of a local workflow asset plus operational runs. |
|
||||
| `W2-9` | Wan 2.2 video generation workflow | `Partial` | `comfy_engine/workflows/cinematic_wan22_14b.json` exists and the Catalyst UI explicitly models Wan 2.2 generation states. | Productionize and validate the actual operator/runtime path; keep broader Future Life cinematic orchestration in v2. |
|
||||
| `W2-10` | Expose all ComfyUI workflows via Async Queue API | `Partial` | `dw_gateway_v2.py`, `dw_gateway_v2_min.py`, `queue_manager.py`, and iOS `ComfyClient.swift` show a real queue/poll/result model exists. | Unify this into one canonical async API across Dream Weaver, Qwen poster, and Wan video workflows. |
|
||||
| `W1-12` | Draft Oracle persona prompts | `Partial` | Prompt assets exist across current and parallel work. | Final product-grade persona contract still needs consolidation. |
|
||||
| `W1-13` | Create Catalyst marketing prompts | `Partial` | Partial logic exists in Catalyst and service layers. | Build a canonical prompt map and separate strategy prompts from execution prompts. |
|
||||
| `W1-14` | Lock frontend UI design and API schemas | `Partial` | Premium UI direction exists strongly. | API schemas are still evolving, especially for Oracle and CRM. |
|
||||
| `W1-16` | Build native SwiftUI app shell | `Done` | Mainline iOS shell and modules exist. | Feature stabilization is separate. |
|
||||
| `W1-17` | Camera capture feature to ComfyUI | `Partial` | Mainline iOS includes `CameraPicker` and a real `ComfyClient` talking to a Dream Weaver gateway. | Stabilize live endpoints and prove the flow again after code consolidation. |
|
||||
| `W1-18` | Sun Path overlay in iPad app | `Partial` | ARKit, CoreLocation, CoreMotion, SceneKit, `SunMath`, and simulator fallback are implemented in the canonical iOS tree. | Real-device acceptance, UX tightening, and full passthrough validation remain. |
|
||||
| `W1-20` | Marketing page frontend for Sourik | `Partial` | Mainline has a substantial Catalyst module already, even though Sourik also built a separate marketing page. | Decide whether to port selective Sourik marketing widgets or keep mainline Catalyst as the only truth. |
|
||||
| `W1-21` | Python FastAPI server with PostgreSQL | `Done` | Implemented and live. | Closed for Sprint 1 baseline. |
|
||||
| `W1-22` | `/api/leads`, `/api/chat-logs` for Oracle | `Missing` | Mainline still lacks real mounted implementations here, and `routes_crm.py` / `routes_oracle.py` are zero-byte placeholders. | Strong candidate to import selectively from Sourik and adapt to the mainline DB contract. |
|
||||
| `W1-23` | `/api/biometrics`, `/api/sentiment` endpoints for Sentinel | `Changed` | Current mainline uses Sentinel websocket/session architecture instead of this exact REST shape, but there is a real working browser-webcam perception path using MediaPipe and WebSocket packet streaming. | Functional equivalent exists; the next step is live validation from Sayan's MacBook rather than re-arguing endpoint names. |
|
||||
| `W1-24` | WebSockets to stream real-time updates to WebOS | `Partial` | Sentinel and notification live flows exist, including QD update broadcasts back into the perception player. | Broader CRM websocket sync is not fully closed. |
|
||||
| `W2-26` | Connect React frontend components to FastAPI | `Partial` | Mainline has live backend wiring in some modules, but the CRM surface still depends on mocks and incomplete contracts. | Replace mock data, land CRM/oracle routes, and verify contract parity end-to-end. |
|
||||
| `W2-27` | Simplified Kanban CRM pipeline | `Missing` | The polished implementation exists in Sourik, not in current mainline. | Important gap and likely one of the first selective imports. |
|
||||
| `W2-28` | Dashboard visualizes AI sentiment output | `Partial` | Sentinel/dashboard UI work exists. | Needs a stricter acceptance pass tied to real CRM data and post-tour actions. |
|
||||
| `W1-30` | Deploy OpenClaw as primary communication agent | `Changed` | The target concept has shifted to NemoClaw as the future operating agent, not OpenClaw as originally phrased. | Define the actual v1 NemoClaw contract and keep the model-local migration in v2. |
|
||||
| `W1-31` | Connect bot to WhatsApp/Email APIs | `V2` | Not current mainline truth. | Can return when communication agent architecture is stabilized. |
|
||||
| `W1-32` | Configure DM pairing and security allowlists | `V2` | More agent-stack specific than current core product need. | Defer. |
|
||||
| `W1-33` | Route parsed transcripts/call durations into CRM DB | `Partial` | Architectural direction exists. | Concrete integrated mainline path is still incomplete. |
|
||||
| `W1-35` | Set up MCP server | `V2` | Not part of current mainline critical path. | Defer. |
|
||||
| `W1-36` | Configure HEARTBEAT or Cron background tasks | `Partial` | Infra timers/services now exist for ops sync and auto-heal. | Agent heartbeat specifically is not mainline yet. |
|
||||
| `W1-37` | Configure Brave Search API for autonomous research | `V2` | Exists only in parallel/agent-oriented direction. | Defer. |
|
||||
| `W2-39` | Integrate Meta Business API and Google Ads API as skills | `Partial` | Meta exists in `routes_catalyst.py`; Google Ads is not landed in mainline. | Keep Google as open and treat the current state as Meta-first. |
|
||||
| `W2-40` | Read insights, manage budgets, execute bidding | `Partial` | Mainline covers campaign creation, creative sync, realtime insights, and lookalikes. | Budget governance, automated bidding, and unified marketing state are still incomplete. |
|
||||
| `W2-41` | Bridge agent to Sagnik ComfyUI API for posters/videos | `Partial` | The gateway/queue model exists, but the agent-operable bridge is not yet a polished first-class mainline subsystem. | Candidate for consolidation once NemoClaw/Catalyst boundaries are clarified. |
|
||||
| `W2-42` | Autonomous content posting via headless browser or APIs | `V2` | Not done in mainline. | Defer. |
|
||||
| `44` | Future Life Simulation workflow | `V2` | The story is intentionally pushed to v2 now. Wan workflow assets exist, but not the full Future Life product layer. | Keep out of Sprint 1 closure. |
|
||||
| `45` | Time & Light Engine in Swift iPad app | `Partial` | The underlying implementation is materially there: AR sun overlay, sun math, SceneKit lighting, simulator path. | Finish product hardening and real-device verification. |
|
||||
| `46` | Touch sliders for month/time/obstruction | `Partial` | Slider-driven control exists in the iOS inventory/time-light surface. | Tighten UX and confirm the final obstruction/massing behavior you want. |
|
||||
| `48` | Legacy Mode wealth projection UI | `V2` | Not in current mainline. | Good v2 candidate. |
|
||||
| `49` | Social Proof live map | `V2` | Not closed in mainline. | Good v2 candidate. |
|
||||
| `50` | Sentinel backend for eye-tracking and micro-expression from iPad camera | `Partial` | This capability exists more clearly in Sourik's parallel Sentinel work than in current mainline. Mainline has the Sentinel backbone, but not the final iPad-first ingestion path you want to test. | Decide the testing source path: iPad camera, browser instrumentation, or public/free CCTV footage for development. |
|
||||
| `51` | Dashboard visualize emotional spike by room | `Partial` | The data concept exists, but the sales-facing room-peak UI payoff is not clearly delivered in mainline. | Build the actual post-tour anchor surface, not just the data plumbing. |
|
||||
|
||||
---
|
||||
|
||||
## What Is Actually Closed in Sprint 1 Terms
|
||||
|
||||
These items are reasonably closed if judged by evolved product reality rather than literal wording:
|
||||
|
||||
- native app shell exists
|
||||
- Dream Weaver local workflow stack exists
|
||||
- Wan 2.2 and Qwen workflow assets exist locally
|
||||
- FastAPI + PostgreSQL neural core exists
|
||||
- Sentinel backbone exists
|
||||
- browser-webcam Sentinel perception path exists
|
||||
- vault/notifications exist
|
||||
- scenes/video/session pipeline exists
|
||||
- live AWS/Linux/ingress infrastructure exists
|
||||
|
||||
---
|
||||
|
||||
## What Is Escaping Attention
|
||||
|
||||
These are the most likely to be forgotten because adjacent systems exist:
|
||||
|
||||
1. `leads` and `chat-logs` APIs
|
||||
- easy to assume done because backend exists
|
||||
- they are not landed in current mainline routes yet
|
||||
|
||||
2. Kanban CRM logic
|
||||
- same issue
|
||||
|
||||
3. camera-to-Comfy flow in the iPad app
|
||||
- implementation exists, but endpoint stability and integration need proving after merge
|
||||
|
||||
4. marketing execution path
|
||||
- there is a substantial Catalyst module, but the backend and execution loop are not fully unified
|
||||
|
||||
5. room-level emotional spike visualization
|
||||
- scene-aware data exists
|
||||
- explicit sales UI payoff may still be missing
|
||||
|
||||
6. prompt inventory
|
||||
- prompt files exist in multiple places
|
||||
- there is no single canonical map of persona/function -> prompt -> model -> API surface
|
||||
|
||||
7. live MacBook webcam validation
|
||||
- the path exists in code
|
||||
- it still needs a real end-to-end run from Sayan's machine against the current deployed environment
|
||||
|
||||
---
|
||||
|
||||
## Recommended Interpretation for Planning
|
||||
|
||||
### Keep in active near-term scope
|
||||
|
||||
- leads API
|
||||
- chat logs API
|
||||
- kanban pipeline
|
||||
- frontend/backend CRM wiring
|
||||
- CRM database structure
|
||||
- synthetic `100`-client dataset for system verification
|
||||
- endpoint stabilization for the iPad app
|
||||
- room-level emotional spike sales surface
|
||||
- marketing execution path consolidation
|
||||
- prompt inventory and persona contract mapping
|
||||
|
||||
### Treat as explicitly v2
|
||||
|
||||
- MCP server and Brave search
|
||||
- autonomous content posting
|
||||
- Future Life cinematic product layer
|
||||
- Legacy Mode wealth projection
|
||||
- Social Proof live clustering layer
|
||||
|
||||
### Treat as changed, not failed
|
||||
|
||||
- 8xA100 provisioning and node virtualization
|
||||
- SSH-tunnel-based access model
|
||||
- OpenClaw-primary communication architecture
|
||||
- combined Future Life + Time & Light story packaging
|
||||
|
||||
---
|
||||
|
||||
## CRM Remaining Pieces
|
||||
|
||||
These are the concrete mainline CRM gaps visible in the repo today:
|
||||
|
||||
1. Backend lead and chat routes are not landed.
|
||||
- `backend/api/routes_crm.py` is zero bytes
|
||||
- `backend/api/routes_oracle.py` is zero bytes
|
||||
|
||||
2. Frontend CRM still depends on mock data.
|
||||
- `app/src/components/oracle/mockLeads.ts` is still the effective lead source for parts of the UI
|
||||
|
||||
3. Kanban is not implemented in mainline.
|
||||
- The cleanest working version currently lives in Sourik's tree
|
||||
|
||||
4. Chat transcript and interaction ingestion are not unified into one canonical CRM schema yet.
|
||||
|
||||
5. Oracle action surfaces and CRM writebacks are not yet a stable contract.
|
||||
|
||||
6. Websocket semantics are not yet closed for CRM pipeline movement, lead updates, and interaction feeds.
|
||||
|
||||
7. Synthetic verification data does not exist yet.
|
||||
- You should generate at least `100` realistic synthetic client/lead records and run the full pipeline against them before treating CRM as stable.
|
||||
|
||||
## CRM Database Brainstorming Starter
|
||||
|
||||
Minimum canonical entities for the next pass:
|
||||
|
||||
- `projects`
|
||||
- `properties`
|
||||
- `units`
|
||||
- `leads`
|
||||
- `lead_contact_methods`
|
||||
- `lead_interactions`
|
||||
- `lead_messages`
|
||||
- `lead_stage_events`
|
||||
- `site_visits`
|
||||
- `sentinel_sessions`
|
||||
- `sentiment_events`
|
||||
- `room_interest_events`
|
||||
- `tasks`
|
||||
- `owners/users`
|
||||
- `campaign_attributions`
|
||||
- `documents`
|
||||
- `oracle_actions`
|
||||
|
||||
High-value relationships:
|
||||
|
||||
- one `project` has many `properties`
|
||||
- one `property` has many `units`
|
||||
- one `lead` can have many `interactions`, `messages`, `site_visits`, and `stage_events`
|
||||
- one `sentinel_session` can produce many `sentiment_events` and `room_interest_events`
|
||||
- one `oracle_action` should map back to one canonical CRM write event
|
||||
|
||||
---
|
||||
|
||||
## Prompt Inventory Gap
|
||||
|
||||
Prompt work exists, but the system does not yet have one canonical inventory. At minimum the next prompt pass should answer:
|
||||
|
||||
1. Which personas exist now:
|
||||
- Oracle
|
||||
- NemoClaw
|
||||
- Catalyst
|
||||
- Sentinel/QD evaluator
|
||||
- CCTV profiler
|
||||
- lead tagger
|
||||
|
||||
2. Which files are canonical:
|
||||
- `backend/nemoclaw_prompts/qd_calculator.md`
|
||||
- `backend/nemoclaw_prompts/lead_tagger.md`
|
||||
- `backend/nemoclaw_prompts/cctv_profiler.md`
|
||||
- Dream Weaver prompt files under `comfy_engine/prompts/`
|
||||
- any Oracle/Catalyst prompt files that still only exist in docs or parallel code
|
||||
|
||||
3. Which model each prompt targets
|
||||
|
||||
4. Which runtime/API surface calls each prompt
|
||||
|
||||
5. Which prompts are system prompts, tool prompts, UI copy, or generation prompts
|
||||
|
||||
---
|
||||
|
||||
## Updated Active Task List
|
||||
|
||||
### Must finish for Sprint 1 truth to feel real
|
||||
|
||||
- land canonical `leads`, `chat_logs`, and `kanban` backend routes
|
||||
- replace frontend CRM mock data with live API-backed state
|
||||
- define and implement the canonical CRM database schema
|
||||
- generate `100` synthetic client/lead records and verify the end-to-end CRM flow
|
||||
- validate the Sentinel live-session webcam path from Sayan's MacBook
|
||||
- stabilize iOS endpoint passthrough and prove camera-to-Dream-Weaver again
|
||||
- finish the room-level emotional spike sales surface
|
||||
- create the prompt inventory and persona/function map
|
||||
|
||||
### Important, but after the CRM spine is stable
|
||||
|
||||
- unify Dream Weaver/Qwen/Wan async automation into one canonical queue API
|
||||
- harden Catalyst execution flow from UI -> backend -> generation -> asset sync
|
||||
- define the v1 NemoClaw contract inside the product
|
||||
- decide which Sourik CRM/marketing modules are selectively imported
|
||||
|
||||
### Explicitly v2
|
||||
|
||||
- Future Life cinematic product layer
|
||||
- MCP server integration
|
||||
- Brave Search autonomous research
|
||||
- autonomous content posting
|
||||
- Legacy Mode wealth projection
|
||||
- Social Proof live clustering layer
|
||||
|
||||
---
|
||||
|
||||
## Bottom Line
|
||||
|
||||
Sprint 1 is best described as:
|
||||
|
||||
- **infrastructure and core runtime: substantially achieved**
|
||||
- **Dream Weaver / Qwen / Wan local workflow assets: materially present**
|
||||
- **Sentinel backbone: substantially achieved**
|
||||
- **web and iOS implementation surface: materially present**
|
||||
- **full CRM operationalization: still incomplete**
|
||||
- **agent, marketing, and prompt unification: incomplete and needs explicit ownership**
|
||||
|
||||
The biggest remaining work is not more infra.
|
||||
|
||||
It is:
|
||||
|
||||
- completing the CRM layer
|
||||
- deciding the canonical CRM schema
|
||||
- stabilizing app/backend passthrough
|
||||
- unifying frontend/backend contracts
|
||||
- building a prompt inventory from first principles
|
||||
- deciding which Sourik subsystems to port into mainline
|
||||
- explicitly labeling v2 items so they stop pretending to be Sprint 1 leftovers
|
||||
41
.Agent Context/Sprint 1/tasks.csv
Normal file
@@ -0,0 +1,41 @@
|
||||
id,ref,subject,description,user_story,sprint_id,sprint,sprint_estimated_start,sprint_estimated_finish,owner,owner_full_name,assigned_to,assigned_to_full_name,status,is_iocaine,is_closed,us_order,taskboard_order,attachments,external_reference,tags,watchers,voters,created_date,modified_date,finished_date,due_date,due_date_reason
|
||||
1,2,"W1: Define the local ""Black Box"" edge server requirements for the offline-first experience center setup.",,1,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,1772221706761,0,0,,,[],0,2026-02-27 19:48:26.771342+00:00,2026-02-28 18:47:00.119354+00:00,2026-02-28 18:47:00.120611+00:00,,
|
||||
2,3,W2: Provision the AWS 8xA100 instance.,,1,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,1772221725889,1,0,,,[],0,2026-02-27 19:48:45.899103+00:00,2026-03-09 18:10:45.526266+00:00,2026-03-09 18:10:45.527568+00:00,,
|
||||
3,4,W2: Configure virtualization to split the AWS instance into two compute nodes: Node 1 (Sourik's Agent/Bot Operations) and Node 2 (Sagnik & Sayan's Model/Render Operations).,,1,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,1772221741690,2,0,,,[],0,2026-02-27 19:49:01.700573+00:00,2026-03-09 18:10:16.322481+00:00,2026-03-09 18:10:16.323670+00:00,,
|
||||
4,5,W2: Set up secure SSH tunnels networks to allow remote access to the AWS nodes.,,1,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,1772221755869,3,0,,,[],0,2026-02-27 19:49:15.879374+00:00,2026-03-09 18:10:51.657474+00:00,2026-03-09 18:10:51.658742+00:00,,
|
||||
5,7,"W1: Build the ""Dream Weaver"" interior restyling workflow using ControlNet + segment masking to preserve room geometry while changing aesthetics.",,6,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,True,True,1772221838514,0,0,,,[5],0,2026-02-27 19:50:38.524388+00:00,2026-03-09 18:08:05.779876+00:00,2026-03-09 18:08:05.781212+00:00,,
|
||||
6,8,W1: Build a marketing poster generation workflow using Qwen-Image 2512 to leverage its advanced multilingual text rendering capabilities for precise real estate typography.,,6,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,1772221850050,1,0,,,[],0,2026-02-27 19:50:50.060934+00:00,2026-03-24 07:52:12.691412+00:00,2026-03-24 07:52:12.695999+00:00,,
|
||||
7,9,W2: Implement the Wan 2.2 (14B or 1.3B) video generation workflow for cinematic promotional videos.,,6,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,1772221863123,2,0,,,[],0,2026-02-27 19:51:03.133310+00:00,2026-04-12 09:44:11.404656+00:00,2026-04-12 09:44:11.406137+00:00,,
|
||||
8,10,W2: Expose all ComfyUI workflows via the Asynchronous Queue API so Sourik's agents can trigger them automatically.,,6,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,1772221874697,3,0,,,[],0,2026-02-27 19:51:14.706589+00:00,2026-04-12 09:44:17.813778+00:00,2026-04-12 09:44:17.815079+00:00,,
|
||||
9,12,"W1: Draft ""The Oracle"" persona prompts (adapting the tone of top-tier Dubai brokers) for the WhatsApp CRM agent.",,11,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,0,1,0,,,[],0,2026-02-27 19:52:17.829687+00:00,2026-04-12 09:44:34.497116+00:00,2026-04-12 09:44:34.498417+00:00,,
|
||||
10,13,"W1: Create marketing strategy prompts for ""The Catalyst"" to generate Meta/Google ad copy based on demographic inputs.",,11,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,1772221937822,2,0,,,[],0,2026-02-27 19:52:32.110749+00:00,2026-04-12 09:44:32.953327+00:00,2026-04-12 09:44:32.954497+00:00,,
|
||||
11,14,"W1: Lock the frontend UI design (the ""Apple/Steve Jobs"" aesthetic) and officially hand over the React components and required API schemas to Sayan for backend wiring.",,11,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,1772221937821,0,0,,,[],0,2026-02-27 19:52:45.221808+00:00,2026-03-24 07:52:58.958801+00:00,2026-03-24 07:52:58.960593+00:00,,
|
||||
12,16,"W1: Build the native SwiftUI app shell mirroring the WebOS interface (Dashboard, Inventory, Oracle tabs).",,15,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222024957,0,6,,,[6],0,2026-02-27 19:53:44.966875+00:00,2026-03-07 12:36:31.475097+00:00,2026-03-07 12:36:31.476262+00:00,,
|
||||
13,17,W1: Implement the camera capture feature to take photos of empty walls/rooms and push them to Sagnik's ComfyUI API endpoint.,,15,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222036382,1,0,,,[],0,2026-02-27 19:53:56.392802+00:00,2026-03-24 07:55:47.038974+00:00,2026-03-24 07:55:47.040142+00:00,,
|
||||
14,18,W1: Integrate ARKit/CoreLocation/CoreMotion to overlay the mathematical Sun Path over the live camera feed or 3D model view.,,15,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222050984,2,0,,,[],0,2026-02-27 19:54:10.993883+00:00,2026-03-24 07:55:49.152302+00:00,2026-03-24 07:55:49.153709+00:00,,
|
||||
15,20,W1: Set up the Marketing page frontend for Sourik.,,19,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222108515,0,0,,,[],0,2026-02-27 19:55:08.524248+00:00,2026-03-24 07:53:40.935245+00:00,2026-03-24 07:53:40.936625+00:00,,
|
||||
16,21,W1: Set up the Python FastAPI server with a PostgreSQL database.,,19,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222119363,1,0,,,[],0,2026-02-27 19:55:19.373616+00:00,2026-04-12 09:44:42.960490+00:00,2026-04-12 09:44:42.961685+00:00,,
|
||||
17,22,"W1: Create API endpoints for ""The Oracle"" (/api/leads, /api/chat-logs) to receive data from Sourik's WhatsApp bots.",,19,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222129398,2,0,,,[],0,2026-02-27 19:55:29.408246+00:00,2026-04-12 09:44:47.034107+00:00,2026-04-12 09:44:47.035298+00:00,,
|
||||
18,23,"W1: Create API endpoints for ""The Sentinel"" (/api/biometrics, /api/sentiment) to ingest video player facial/voice data points.",,19,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222140319,3,0,,,[],0,2026-02-27 19:55:40.327197+00:00,2026-04-12 09:44:53.214983+00:00,2026-04-12 09:44:53.216156+00:00,,
|
||||
19,24,W1: Set up WebSockets to stream real-time updates directly to the WebOS React frontend.,,19,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222152434,4,0,,,[],0,2026-02-27 19:55:52.443171+00:00,2026-04-12 09:45:01.241831+00:00,2026-04-12 09:45:01.243037+00:00,,
|
||||
20,26,W2: Connect the frontend React components to the FastAPI endpoints.,,25,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222216251,0,0,,,[],0,2026-02-27 19:56:56.261160+00:00,2026-04-12 09:45:04.249760+00:00,2026-04-12 09:45:04.251615+00:00,,
|
||||
21,27,"W2: Develop the logic for the simplified ""Kanban"" CRM pipeline, ensuring lead stages automatically update based on triggers from ""The Oracle"".",,25,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222226063,1,0,,,[],0,2026-02-27 19:57:06.074849+00:00,2026-04-12 09:45:06.556812+00:00,2026-04-12 09:45:06.557988+00:00,,
|
||||
22,28,W2: Ensure the WebOS dashboard accurately visualizes the parsed AI sentiment data’s output.,,25,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772222236473,2,0,,,[],0,2026-02-27 19:57:16.484481+00:00,2026-04-12 09:45:08.647867+00:00,2026-04-12 09:45:08.649243+00:00,,
|
||||
23,30,W1: Deploy OpenClaw to act as the primary communication agent.,,29,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222353354,0,0,,,[],0,2026-02-27 19:59:13.363801+00:00,2026-03-24 07:56:23.466079+00:00,2026-03-24 07:56:23.467239+00:00,,
|
||||
24,31,W1: Connect the bot to WhatsApp/Email APIs to ingest client messages.,,29,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222364232,1,0,,,[],0,2026-02-27 19:59:24.241508+00:00,2026-03-24 07:56:25.188356+00:00,2026-03-24 07:56:25.189555+00:00,,
|
||||
25,32,W1: Configure DM pairing and security allowlists.,,29,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222376473,2,0,,,[],0,2026-02-27 19:59:36.483694+00:00,2026-03-24 07:56:27.169875+00:00,2026-03-24 07:56:27.171056+00:00,,
|
||||
26,33,"W1: Route all parsed chat transcripts, call durations, and interaction logs directly into Sayan's CRM database via FastAPI webhooks.",,29,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222387241,3,0,,,"[5, 6]",0,2026-02-27 19:59:47.252349+00:00,2026-03-24 07:56:30.206587+00:00,2026-03-24 07:56:30.207755+00:00,,
|
||||
27,35,"W1: Set up the Model Context Protocol (MCP) server for secure access to local files, the property database, and the internet.",,34,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222448792,0,0,,,[],0,2026-02-27 20:00:48.802138+00:00,2026-03-24 07:56:37.925832+00:00,2026-03-24 07:56:37.927003+00:00,,
|
||||
28,36,W1: Configure HEARTBEAT.md or Cron tools for periodic background tasks.,,34,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222458999,1,0,,,[],0,2026-02-27 20:00:59.008938+00:00,2026-03-24 07:56:40.173506+00:00,2026-03-24 07:56:40.174676+00:00,,
|
||||
29,37,W1: Configure Brave Search API to allow the agent to autonomously research target audiences.,"Task #37 is complete! We built the Brave Search tool into the central MCP server. It's fully functional with exponential backoff for rate limits, context-aware timeouts, and a graceful fallback in the event of missing keys (automatically reverts back to DuckDuckGo, so we never stall). All tests pass. Will just need to grab the standard free API Key when we move to cloud.",34,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222469781,2,0,,,[],0,2026-02-27 20:01:09.790996+00:00,2026-03-24 07:56:42.200997+00:00,2026-03-24 07:56:42.202158+00:00,,
|
||||
30,39,"W2: Integrate Meta Business API and Google AdWords API as agent ""Skills"".",,38,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222528624,1,0,,,[],0,2026-02-27 20:02:08.634609+00:00,2026-04-12 09:45:13.092812+00:00,2026-04-12 09:45:13.094098+00:00,,
|
||||
31,40,"W2: Give the agent the ability to read ad insights, manage marketing budgets, and execute automated bidding strategies.",,38,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222537734,2,0,,,[],0,2026-02-27 20:02:17.744121+00:00,2026-04-12 09:45:19.901845+00:00,2026-03-24 07:57:18.950521+00:00,,
|
||||
32,41,W2: Write the bridging script allowing the agent to autonomously prompt Sagnik's ComfyUI API to generate custom posters and promotional videos.,,38,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222546643,3,0,,,[],0,2026-02-27 20:02:26.650336+00:00,2026-04-12 09:45:15.334261+00:00,2026-04-12 09:45:15.335454+00:00,,
|
||||
33,42,W2: Configure the headless browser tool or social APIs for autonomous content posting.,,38,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772222537735,4,0,,,[],0,2026-02-27 20:02:40.625582+00:00,2026-03-24 07:57:23.338020+00:00,2026-03-24 07:57:21.742863+00:00,,
|
||||
34,44,"Build a ComfyUI/Wan 2.2 workflow for ""Future Life Simulation"" that generates cinematic videos of specific lifestyle prompts (morning sunlight, kids playing, dinner parties) mapped to the unit's floorplan.",,43,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,Closed,False,True,0,0,0,,,[],0,2026-02-28 12:39:21.287833+00:00,2026-04-12 09:45:41.029569+00:00,2026-04-12 09:45:41.030850+00:00,,
|
||||
35,45,"Integrate a ""Time & Light Engine"" into the Swift iPad app using ARKit/SceneKit to simulate real-time sun paths, seasonal shadows, and weather changes (rain, festive lighting) over the 3D model.",,43,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772282361281,1,0,,,[],0,2026-02-28 12:39:39.275027+00:00,2026-04-12 09:45:43.695076+00:00,2026-04-12 09:45:43.696260+00:00,,
|
||||
36,46,"Add interactive touchscreen sliders to the iPad app to control month, time of day, and view obstruction massing.",,43,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772282437251,2,0,,,[],0,2026-02-28 12:40:37.257926+00:00,2026-04-12 09:45:48.208124+00:00,2026-04-12 09:45:48.209326+00:00,,
|
||||
37,48,"Build the ""Legacy Mode"" wealth projection UI in the iPad app and WebOS, visualizing 10-20 year compounding appreciation and rental yields against gold/stock benchmarks.",,47,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772282707104,0,0,,,[],0,2026-02-28 12:45:07.113994+00:00,2026-04-12 09:45:56.516622+00:00,2026-04-12 09:45:56.517875+00:00,,
|
||||
38,49,"Create the ""Social Proof"" live map in the frontend, dynamically clustering anonymized buyer demographics (NRI vs local, professions) to build tribe psychology.",,47,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772282719217,1,0,,,[],0,2026-02-28 12:45:19.226139+00:00,2026-04-12 09:45:59.591950+00:00,2026-04-12 09:45:59.593490+00:00,,
|
||||
39,50,"Configure ""The Sentinel"" backend API to ingest and process eye-tracking and micro-expression data from the iPad's front-facing camera (with consent) during the tour.",Task #50 is complete! [sentinel.py](cci:7://file:///c:/MY%20VEL%20FILE/velocity/api/sentinel.py:0:0-0:0) is now extended. We set up 6 dedicated API endpoints ready to cleanly digest your real-time Eye-Tracking data alongside the Micro-Expression FACS streams. Everything is guarded strictly by an active-consent barrier and will automatically GDPR-purge dynamically on consent withdrawal. We can get together later this week and hit the endpoints to lock up iPad validation natively! Let me know when ready.,47,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,Closed,False,True,1772282731186,2,0,,,[],0,2026-02-28 12:45:31.195687+00:00,2026-04-12 09:45:54.625387+00:00,2026-04-12 09:45:54.627021+00:00,,
|
||||
40,51,"Update the WebOS CRM dashboard to visualize the emotional spike data, highlighting exactly which rooms peaked the buyer's interest for post-tour sales anchoring.",,47,2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,Closed,False,True,1772282741695,3,0,,,[],0,2026-02-28 12:45:41.704928+00:00,2026-04-12 09:46:06.085593+00:00,2026-04-12 09:46:06.086765+00:00,,
|
||||
|
12
.Agent Context/Sprint 1/userstories.csv
Normal file
@@ -0,0 +1,12 @@
|
||||
id,ref,subject,description,sprint_id,sprint,sprint_estimated_start,sprint_estimated_finish,owner,owner_full_name,assigned_to,assigned_to_full_name,assigned_users,assigned_users_full_name,status,is_closed,swimlane,back-points,design-points,front-points,ux-points,total-points,backlog_order,sprint_order,kanban_order,created_date,modified_date,finish_date,client_requirement,team_requirement,attachments,generated_from_issue,generated_from_task,from_task_ref,external_reference,tasks,tags,watchers,voters,due_date,due_date_reason,epics
|
||||
17,1,1.1: Local/Cloud Hardware Config,"As an Architect, I need to configure the local and cloud hardware environments so the team can build without bottlenecks.",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,sagnik,Sagnik,New,True,,8.0,,,,8.0,1772221676403176,1,1772221676413004,2026-02-27 19:47:56.413009+00:00,2026-02-27 20:03:07.048568+00:00,2026-03-09 18:10:51.665179+00:00,False,False,0,,,,,"2,3,4,5",,[],0,,,
|
||||
18,6,1.2: ComfyUI Visual Workflows,"As an AI Visual Artist, I need to create API-ready ComfyUI workflows for ""The Catalyst"" and the ""Immersive Sales Companion"".",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,sagnik,Sagnik,New,True,,3.0,3.0,2.0,,8.0,1772221817549925,2,1772221817561352,2026-02-27 19:50:17.561358+00:00,2026-02-27 20:03:19.741415+00:00,2026-04-12 09:44:17.822335+00:00,False,False,0,,,,,"7,8,9,10",,[],0,,,
|
||||
19,11,1.3: System Prompts & UI Logic,"As an AI Engineer, I need to generate system prompts and fine-tune models so ""The Oracle"" and ""The Catalyst"" behave like elite real estate professionals.",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,sagnik,Sagnik,New,True,,,3.0,3.0,2.0,8.0,1772221917508059,3,1772221917519214,2026-02-27 19:51:57.519220+00:00,2026-02-27 20:03:30.481650+00:00,2026-04-12 09:44:34.504511+00:00,False,False,0,,,,,"12,13,14",,[],0,,,
|
||||
20,15,2.1: Swift/iPad App,"As an iOS Developer, I need to build the ""Immersive Sales Companion"" iPad App using Swift.",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,sayan,Sayan,New,True,,,2.0,3.0,3.0,8.0,1772222005626031,4,1772222005637374,2026-02-27 19:53:25.637380+00:00,2026-02-27 20:03:46.311976+00:00,2026-03-24 07:55:49.192166+00:00,False,False,0,,,,,"16,17,18",,[],0,,,
|
||||
21,19,2.2: FastAPI Neural Core,"As a Backend Engineer, I need to build the FastAPI neural core to connect all 4 software components.",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,sayan,Sayan,New,True,,8.0,,,,8.0,1772222093978956,5,1772222093990417,2026-02-27 19:54:53.990424+00:00,2026-02-27 20:03:54.338526+00:00,2026-04-12 09:45:01.249998+00:00,False,False,0,,,,,"20,21,22,23,24",,[],0,,,
|
||||
22,25,2.3: CRM/WebOS React Wiring,"As a Full-Stack Engineer, I need to build the ""Walled Garden"" CRM and wire the React WebOS.",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,sayan,Sayan,New,True,,3.0,,3.0,2.0,8.0,2,6,1772222201088772,2026-02-27 19:56:41.088779+00:00,2026-02-27 20:04:03.943036+00:00,2026-04-12 09:45:08.655385+00:00,False,False,0,,,,,"26,27,28",,[],0,,,
|
||||
23,29,3.1: Claw Bot Ecosystem,"As an Automation Engineer, I need to deploy and manage the Claw bot ecosystem for ""The Oracle"".",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,sourik,Sourik,New,True,,5.0,,,,5.0,1772222326327364,7,1772222326336825,2026-02-27 19:58:46.336830+00:00,2026-02-27 20:04:13.817190+00:00,2026-03-24 07:56:30.213938+00:00,False,False,0,,,,,"30,31,32,33",,[],0,,,
|
||||
24,34,3.2: MCP Server/Tools,"As an AI Operator, I need to set up the MCP Server and Agent System Tools.",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,sourik,Sourik,New,True,,5.0,,,,5.0,1,8,1772222428317194,2026-02-27 20:00:28.317200+00:00,2026-02-27 20:04:22.989314+00:00,2026-03-24 07:56:42.208437+00:00,False,False,0,,,,,"35,36,37",,[],0,,,
|
||||
25,38,3.3: Marketing Automation,"As a Marketing Automation Lead, I need to build ""The Catalyst"" integration.",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sourik,Sourik,sourik,Sourik,New,True,,3.0,1.0,2.0,2.0,8.0,1772222512196395,9,1772222512207080,2026-02-27 20:01:52.207086+00:00,2026-02-27 20:04:31.646325+00:00,2026-04-12 09:45:15.341636+00:00,False,False,0,,,,,"39,40,41,42",,[],0,,,
|
||||
26,43,4.1: Future Life and Time & Light Engine,"As an AI Visual Artist and iOS Developer, we need to build the ""Future Life"" and ""Time & Light"" engines to emotionally anchor the buyer to the property.",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sagnik,Sagnik,"sagnik,sayan","Sagnik,Sayan",New,True,,8.0,5.0,5.0,5.0,23.0,1772282330939916,10,1772282330950456,2026-02-28 12:38:50.950461+00:00,2026-02-28 12:38:50.955347+00:00,2026-04-12 09:45:48.215061+00:00,False,False,0,,,,,"44,45,46",,[],0,,,
|
||||
27,47,4.2: Engagement Intelligence and Social Proof layer,"As a Full-Stack Engineer and Automation Lead, we need to build the Engagement Intelligence and Social Proof layer to give the sales team data-driven closing tools.",2,Prototype Features Sprint,2026-02-28,2026-03-14,sagnik,Sagnik,sayan,Sayan,"sayan,sourik","Sayan,Sourik",New,True,,8.0,3.0,5.0,3.0,19.0,1772282692419979,11,1772282692429575,2026-02-28 12:44:52.429580+00:00,2026-02-28 12:44:52.435018+00:00,2026-04-12 09:46:06.092864+00:00,False,False,0,,,,,"48,49,50,51",,[],0,,,
|
||||
|
BIN
Payload/Screenshots/01. Dashboard.png
Normal file
|
After Width: | Height: | Size: 448 KiB |
BIN
Payload/Screenshots/02. The Oracle.png
Normal file
|
After Width: | Height: | Size: 451 KiB |
BIN
Payload/Screenshots/03-A. The Sentinel - Overview.png
Normal file
|
After Width: | Height: | Size: 343 KiB |
BIN
Payload/Screenshots/03-B. The Sentinel - Live Session.png
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
Payload/Screenshots/04. Inventory.png
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
Payload/Screenshots/05. The Catalyst.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
Payload/Screenshots/06. Settings.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
35
app/.codex-readme-shots.mjs
Normal file
@@ -0,0 +1,35 @@
|
||||
import { chromium } from "@playwright/test";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
const outDir = path.resolve("../docs/images/readme");
|
||||
fs.mkdirSync(outDir, { recursive: true });
|
||||
|
||||
const browser = await chromium.launch({ headless: true });
|
||||
const context = await browser.newContext({ viewport: { width: 1600, height: 1000 }, deviceScaleFactor: 1 });
|
||||
const page = await context.newPage();
|
||||
|
||||
async function shot(name, url, wait = 2000) {
|
||||
await page.goto(url, { waitUntil: "networkidle" });
|
||||
await page.waitForTimeout(wait);
|
||||
await page.screenshot({ path: path.join(outDir, name), fullPage: true });
|
||||
}
|
||||
|
||||
await shot("login.png", "http://127.0.0.1:5173/login", 1500);
|
||||
|
||||
await page.goto("http://127.0.0.1:5173/login", { waitUntil: "networkidle" });
|
||||
await page.waitForTimeout(1000);
|
||||
await page.locator('button').first().click();
|
||||
await page.waitForTimeout(3200);
|
||||
await page.goto("http://127.0.0.1:5173/dashboard", { waitUntil: "networkidle" });
|
||||
await page.waitForTimeout(2500);
|
||||
await page.screenshot({ path: path.join(outDir, "dashboard.png"), fullPage: true });
|
||||
|
||||
for (const route of ["oracle", "sentinel", "inventory", "catalyst", "settings"]) {
|
||||
await page.goto(`http://127.0.0.1:5173/${route}`, { waitUntil: "networkidle" });
|
||||
await page.waitForTimeout(route === "sentinel" ? 3000 : 2200);
|
||||
await page.screenshot({ path: path.join(outDir, `${route}.png`), fullPage: true });
|
||||
}
|
||||
|
||||
await browser.close();
|
||||
console.log(outDir);
|
||||
24
app/dist/index.html
vendored
@@ -1,17 +1,13 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Velocity WebOS</title>
|
||||
<script type="module" crossorigin src="./assets/index-jrtSlzlr.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/index-BwTUL7MU.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
</body>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Velocity WebOS</title>
|
||||
<script type="module" crossorigin src="./assets/index-CJRJmEe7.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/index-UA0RXBVG.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
</body>
|
||||
202
app/node_modules/.tmp/tsconfig.app.tsbuildinfo
generated
vendored
@@ -1,201 +1 @@
|
||||
<<<<<<< HEAD
|
||||
{
|
||||
"root": [
|
||||
"../../src/app.tsx",
|
||||
"../../src/main.tsx",
|
||||
"../../src/app/oracle/page.tsx",
|
||||
"../../src/components/layout/loginscreen.tsx",
|
||||
"../../src/components/layout/sidebar.tsx",
|
||||
"../../src/components/modules/catalyst.tsx",
|
||||
"../../src/components/modules/dashboard.tsx",
|
||||
"../../src/components/modules/groundtruthpicker.tsx",
|
||||
"../../src/components/modules/inventory.tsx",
|
||||
"../../src/components/modules/oracle.tsx",
|
||||
"../../src/components/modules/sentinel.tsx",
|
||||
"../../src/components/modules/settings.tsx",
|
||||
"../../src/components/oracle/leadinspector.tsx",
|
||||
"../../src/components/oracle/pipelineview.tsx",
|
||||
"../../src/components/oracle/mockleads.ts",
|
||||
"../../src/components/sentinel/journeyriver/inspectorpanel.tsx",
|
||||
"../../src/components/sentinel/journeyriver/riverpath.tsx",
|
||||
"../../src/components/sentinel/journeyriver/index.tsx",
|
||||
"../../src/components/ui/accordion.tsx",
|
||||
"../../src/components/ui/alert-dialog.tsx",
|
||||
"../../src/components/ui/alert.tsx",
|
||||
"../../src/components/ui/aspect-ratio.tsx",
|
||||
"../../src/components/ui/avatar.tsx",
|
||||
"../../src/components/ui/badge.tsx",
|
||||
"../../src/components/ui/breadcrumb.tsx",
|
||||
"../../src/components/ui/button-group.tsx",
|
||||
"../../src/components/ui/button.tsx",
|
||||
"../../src/components/ui/calendar.tsx",
|
||||
"../../src/components/ui/card.tsx",
|
||||
"../../src/components/ui/carousel.tsx",
|
||||
"../../src/components/ui/chart.tsx",
|
||||
"../../src/components/ui/checkbox.tsx",
|
||||
"../../src/components/ui/collapsible.tsx",
|
||||
"../../src/components/ui/command.tsx",
|
||||
"../../src/components/ui/context-menu.tsx",
|
||||
"../../src/components/ui/dialog.tsx",
|
||||
"../../src/components/ui/drawer.tsx",
|
||||
"../../src/components/ui/dropdown-menu.tsx",
|
||||
"../../src/components/ui/empty.tsx",
|
||||
"../../src/components/ui/field.tsx",
|
||||
"../../src/components/ui/form.tsx",
|
||||
"../../src/components/ui/hover-card.tsx",
|
||||
"../../src/components/ui/input-group.tsx",
|
||||
"../../src/components/ui/input-otp.tsx",
|
||||
"../../src/components/ui/input.tsx",
|
||||
"../../src/components/ui/item.tsx",
|
||||
"../../src/components/ui/kbd.tsx",
|
||||
"../../src/components/ui/label.tsx",
|
||||
"../../src/components/ui/menubar.tsx",
|
||||
"../../src/components/ui/navigation-menu.tsx",
|
||||
"../../src/components/ui/pagination.tsx",
|
||||
"../../src/components/ui/popover.tsx",
|
||||
"../../src/components/ui/progress.tsx",
|
||||
"../../src/components/ui/radio-group.tsx",
|
||||
"../../src/components/ui/resizable.tsx",
|
||||
"../../src/components/ui/scroll-area.tsx",
|
||||
"../../src/components/ui/select.tsx",
|
||||
"../../src/components/ui/separator.tsx",
|
||||
"../../src/components/ui/sheet.tsx",
|
||||
"../../src/components/ui/sidebar.tsx",
|
||||
"../../src/components/ui/skeleton.tsx",
|
||||
"../../src/components/ui/slider.tsx",
|
||||
"../../src/components/ui/sonner.tsx",
|
||||
"../../src/components/ui/spinner.tsx",
|
||||
"../../src/components/ui/switch.tsx",
|
||||
"../../src/components/ui/table.tsx",
|
||||
"../../src/components/ui/tabs.tsx",
|
||||
"../../src/components/ui/textarea.tsx",
|
||||
"../../src/components/ui/toggle-group.tsx",
|
||||
"../../src/components/ui/toggle.tsx",
|
||||
"../../src/components/ui/tooltip.tsx",
|
||||
"../../src/hooks/use-mobile.ts",
|
||||
"../../src/lib/oraclequeryclient.ts",
|
||||
"../../src/lib/utils.ts",
|
||||
"../../src/oracle/components/branchbar.tsx",
|
||||
"../../src/oracle/components/canvasviewport.tsx",
|
||||
"../../src/oracle/components/componentregistry.tsx",
|
||||
"../../src/oracle/components/promptrail.tsx",
|
||||
"../../src/oracle/components/rollbackconfirmmodal.tsx",
|
||||
"../../src/oracle/components/sharemodal.tsx",
|
||||
"../../src/oracle/components/renderers/activitystreamrenderer.tsx",
|
||||
"../../src/oracle/components/renderers/barchartrenderer.tsx",
|
||||
"../../src/oracle/components/renderers/errornoticerenderer.tsx",
|
||||
"../../src/oracle/components/renderers/geomaprenderer.tsx",
|
||||
"../../src/oracle/components/renderers/kpitilerenderer.tsx",
|
||||
"../../src/oracle/components/renderers/linechartrenderer.tsx",
|
||||
"../../src/oracle/components/renderers/pipelineboardrenderer.tsx",
|
||||
"../../src/oracle/components/renderers/rendererwrapper.tsx",
|
||||
"../../src/oracle/components/renderers/tablerenderer.tsx",
|
||||
"../../src/oracle/components/renderers/timelinerenderer.tsx",
|
||||
"../../src/oracle/components/review/mergereviewdrawer.tsx",
|
||||
"../../src/oracle/hooks/useoracleexecution.ts",
|
||||
"../../src/oracle/hooks/useoraclepage.ts",
|
||||
"../../src/oracle/lib/oracleapiclient.ts",
|
||||
"../../src/oracle/lib/oracledemodata.ts",
|
||||
"../../src/oracle/types/canvas.ts",
|
||||
"../../src/store/usecurrencystore.ts",
|
||||
"../../src/store/usemarketingstore.ts",
|
||||
"../../src/store/usestore.ts",
|
||||
"../../src/types/crm.ts",
|
||||
"../../src/types/index.ts",
|
||||
"../../src/utils/curvegenerator.ts"
|
||||
],
|
||||
"version": "5.9.3"
|
||||
}
|
||||
=======
|
||||
{
|
||||
"root": [
|
||||
"../../src/app.tsx",
|
||||
"../../src/global.d.ts",
|
||||
"../../src/main.tsx",
|
||||
"../../src/app/oracle/page.tsx",
|
||||
"../../src/components/layout/loginscreen.tsx",
|
||||
"../../src/components/layout/notificationcenter.tsx",
|
||||
"../../src/components/layout/sidebar.tsx",
|
||||
"../../src/components/modules/catalyst.tsx",
|
||||
"../../src/components/modules/dashboard.tsx",
|
||||
"../../src/components/modules/inventory.tsx",
|
||||
"../../src/components/modules/oracle.tsx",
|
||||
"../../src/components/modules/sentinel.tsx",
|
||||
"../../src/components/modules/settings.tsx",
|
||||
"../../src/components/modules/sentinel/perceptionplayer.tsx",
|
||||
"../../src/components/modules/sentinel/sentinellivesession.tsx",
|
||||
"../../src/components/oracle/leadinspector.tsx",
|
||||
"../../src/components/oracle/pipelineview.tsx",
|
||||
"../../src/components/oracle/mockleads.ts",
|
||||
"../../src/components/sentinel/journeyriver/inspectorpanel.tsx",
|
||||
"../../src/components/sentinel/journeyriver/riverpath.tsx",
|
||||
"../../src/components/sentinel/journeyriver/index.tsx",
|
||||
"../../src/components/ui/accordion.tsx",
|
||||
"../../src/components/ui/alert-dialog.tsx",
|
||||
"../../src/components/ui/alert.tsx",
|
||||
"../../src/components/ui/aspect-ratio.tsx",
|
||||
"../../src/components/ui/avatar.tsx",
|
||||
"../../src/components/ui/badge.tsx",
|
||||
"../../src/components/ui/breadcrumb.tsx",
|
||||
"../../src/components/ui/button-group.tsx",
|
||||
"../../src/components/ui/button.tsx",
|
||||
"../../src/components/ui/calendar.tsx",
|
||||
"../../src/components/ui/card.tsx",
|
||||
"../../src/components/ui/carousel.tsx",
|
||||
"../../src/components/ui/chart.tsx",
|
||||
"../../src/components/ui/checkbox.tsx",
|
||||
"../../src/components/ui/collapsible.tsx",
|
||||
"../../src/components/ui/command.tsx",
|
||||
"../../src/components/ui/context-menu.tsx",
|
||||
"../../src/components/ui/dialog.tsx",
|
||||
"../../src/components/ui/drawer.tsx",
|
||||
"../../src/components/ui/dropdown-menu.tsx",
|
||||
"../../src/components/ui/empty.tsx",
|
||||
"../../src/components/ui/field.tsx",
|
||||
"../../src/components/ui/form.tsx",
|
||||
"../../src/components/ui/hover-card.tsx",
|
||||
"../../src/components/ui/input-group.tsx",
|
||||
"../../src/components/ui/input-otp.tsx",
|
||||
"../../src/components/ui/input.tsx",
|
||||
"../../src/components/ui/item.tsx",
|
||||
"../../src/components/ui/kbd.tsx",
|
||||
"../../src/components/ui/label.tsx",
|
||||
"../../src/components/ui/menubar.tsx",
|
||||
"../../src/components/ui/navigation-menu.tsx",
|
||||
"../../src/components/ui/pagination.tsx",
|
||||
"../../src/components/ui/popover.tsx",
|
||||
"../../src/components/ui/progress.tsx",
|
||||
"../../src/components/ui/radio-group.tsx",
|
||||
"../../src/components/ui/resizable.tsx",
|
||||
"../../src/components/ui/scroll-area.tsx",
|
||||
"../../src/components/ui/select.tsx",
|
||||
"../../src/components/ui/separator.tsx",
|
||||
"../../src/components/ui/sheet.tsx",
|
||||
"../../src/components/ui/sidebar.tsx",
|
||||
"../../src/components/ui/skeleton.tsx",
|
||||
"../../src/components/ui/slider.tsx",
|
||||
"../../src/components/ui/sonner.tsx",
|
||||
"../../src/components/ui/spinner.tsx",
|
||||
"../../src/components/ui/switch.tsx",
|
||||
"../../src/components/ui/table.tsx",
|
||||
"../../src/components/ui/tabs.tsx",
|
||||
"../../src/components/ui/textarea.tsx",
|
||||
"../../src/components/ui/toggle-group.tsx",
|
||||
"../../src/components/ui/toggle.tsx",
|
||||
"../../src/components/ui/tooltip.tsx",
|
||||
"../../src/hooks/use-mobile.ts",
|
||||
"../../src/hooks/usemediapipefacelandmarker.ts",
|
||||
"../../src/hooks/usevelocitysocket.ts",
|
||||
"../../src/lib/api.ts",
|
||||
"../../src/lib/oraclequeryclient.ts",
|
||||
"../../src/lib/utils.ts",
|
||||
"../../src/store/usemarketingstore.ts",
|
||||
"../../src/store/usestore.ts",
|
||||
"../../src/types/crm.ts",
|
||||
"../../src/types/index.ts",
|
||||
"../../src/utils/curvegenerator.ts",
|
||||
"../../src/utils/landmarkpacketencoder.ts"
|
||||
],
|
||||
"version": "5.9.3"
|
||||
}
|
||||
>>>>>>> feat/#15
|
||||
{"root":["../../src/app.tsx","../../src/global.d.ts","../../src/main.tsx","../../src/app/oracle/page.tsx","../../src/components/layout/loginscreen.tsx","../../src/components/layout/notificationcenter.tsx","../../src/components/layout/sidebar.tsx","../../src/components/modules/catalyst.tsx","../../src/components/modules/catalystmarketingtab.tsx","../../src/components/modules/dashboard.tsx","../../src/components/modules/groundtruthpicker.tsx","../../src/components/modules/inventory.tsx","../../src/components/modules/oracle.tsx","../../src/components/modules/sentinel.tsx","../../src/components/modules/settings.tsx","../../src/components/modules/sentinel/perceptionplayer.tsx","../../src/components/modules/sentinel/sentinellivesession.tsx","../../src/components/oracle/leadinspector.tsx","../../src/components/oracle/pipelineview.tsx","../../src/components/oracle/mockleads.ts","../../src/components/sentinel/journeyriver/inspectorpanel.tsx","../../src/components/sentinel/journeyriver/riverpath.tsx","../../src/components/sentinel/journeyriver/index.tsx","../../src/components/ui/accordion.tsx","../../src/components/ui/alert-dialog.tsx","../../src/components/ui/alert.tsx","../../src/components/ui/aspect-ratio.tsx","../../src/components/ui/avatar.tsx","../../src/components/ui/badge.tsx","../../src/components/ui/breadcrumb.tsx","../../src/components/ui/button-group.tsx","../../src/components/ui/button.tsx","../../src/components/ui/calendar.tsx","../../src/components/ui/card.tsx","../../src/components/ui/carousel.tsx","../../src/components/ui/chart.tsx","../../src/components/ui/checkbox.tsx","../../src/components/ui/collapsible.tsx","../../src/components/ui/command.tsx","../../src/components/ui/context-menu.tsx","../../src/components/ui/dialog.tsx","../../src/components/ui/drawer.tsx","../../src/components/ui/dropdown-menu.tsx","../../src/components/ui/empty.tsx","../../src/components/ui/field.tsx","../../src/components/ui/form.tsx","../../src/components/ui/hover-card.tsx","../../src/components/ui/input-group.tsx","../../src/components/ui/input-otp.tsx","../../src/components/ui/input.tsx","../../src/components/ui/item.tsx","../../src/components/ui/kbd.tsx","../../src/components/ui/label.tsx","../../src/components/ui/menubar.tsx","../../src/components/ui/navigation-menu.tsx","../../src/components/ui/pagination.tsx","../../src/components/ui/popover.tsx","../../src/components/ui/progress.tsx","../../src/components/ui/radio-group.tsx","../../src/components/ui/resizable.tsx","../../src/components/ui/scroll-area.tsx","../../src/components/ui/select.tsx","../../src/components/ui/separator.tsx","../../src/components/ui/sheet.tsx","../../src/components/ui/sidebar.tsx","../../src/components/ui/skeleton.tsx","../../src/components/ui/slider.tsx","../../src/components/ui/sonner.tsx","../../src/components/ui/spinner.tsx","../../src/components/ui/switch.tsx","../../src/components/ui/table.tsx","../../src/components/ui/tabs.tsx","../../src/components/ui/textarea.tsx","../../src/components/ui/toggle-group.tsx","../../src/components/ui/toggle.tsx","../../src/components/ui/tooltip.tsx","../../src/hooks/use-mobile.ts","../../src/hooks/usecrmbootstrap.ts","../../src/hooks/usemediapipefacelandmarker.ts","../../src/hooks/usevelocitysocket.ts","../../src/lib/api.ts","../../src/lib/crmmappers.ts","../../src/lib/oraclequeryclient.ts","../../src/lib/utils.ts","../../src/oracle/components/branchbar.tsx","../../src/oracle/components/canvasviewport.tsx","../../src/oracle/components/componentregistry.tsx","../../src/oracle/components/promptrail.tsx","../../src/oracle/components/rollbackconfirmmodal.tsx","../../src/oracle/components/sharemodal.tsx","../../src/oracle/components/renderers/activitystreamrenderer.tsx","../../src/oracle/components/renderers/barchartrenderer.tsx","../../src/oracle/components/renderers/errornoticerenderer.tsx","../../src/oracle/components/renderers/geomaprenderer.tsx","../../src/oracle/components/renderers/kpitilerenderer.tsx","../../src/oracle/components/renderers/linechartrenderer.tsx","../../src/oracle/components/renderers/pipelineboardrenderer.tsx","../../src/oracle/components/renderers/rendererwrapper.tsx","../../src/oracle/components/renderers/tablerenderer.tsx","../../src/oracle/components/renderers/timelinerenderer.tsx","../../src/oracle/components/review/mergereviewdrawer.tsx","../../src/oracle/hooks/useoracleexecution.ts","../../src/oracle/hooks/useoraclepage.ts","../../src/oracle/lib/oracleapiclient.ts","../../src/oracle/lib/oracledemodata.ts","../../src/oracle/types/canvas.ts","../../src/store/usecurrencystore.ts","../../src/store/usemarketingstore.ts","../../src/store/usestore.ts","../../src/types/crm.ts","../../src/types/index.ts","../../src/utils/curvegenerator.ts","../../src/utils/landmarkpacketencoder.ts"],"version":"5.9.3"}
|
||||
18
app/node_modules/.vite/deps/@radix-ui_react-avatar.js
generated
vendored
@@ -1,26 +1,14 @@
|
||||
"use client";
|
||||
import {
|
||||
<<<<<<< HEAD
|
||||
createSlot
|
||||
} from "./chunk-YWBEB5PG.js";
|
||||
import {
|
||||
require_shim
|
||||
} from "./chunk-TXHHHGR3.js";
|
||||
import {
|
||||
=======
|
||||
>>>>>>> feat/#15
|
||||
useCallbackRef,
|
||||
useLayoutEffect2
|
||||
} from "./chunk-GRXJTWBV.js";
|
||||
import {
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
require_shim
|
||||
} from "./chunk-642Z5WD3.js";
|
||||
import {
|
||||
>>>>>>> feat/#15
|
||||
require_react_dom
|
||||
} from "./chunk-YLZ34CCM.js";
|
||||
import {
|
||||
require_shim
|
||||
} from "./chunk-642Z5WD3.js";
|
||||
import {
|
||||
createSlot
|
||||
} from "./chunk-5HUACAZ7.js";
|
||||
|
||||
3706
app/node_modules/.vite/deps/@react-three_drei.js
generated
vendored
14
app/node_modules/.vite/deps/@react-three_fiber.js
generated
vendored
@@ -28,23 +28,13 @@ import {
|
||||
useLoader,
|
||||
useStore,
|
||||
useThree
|
||||
<<<<<<< HEAD
|
||||
} from "./chunk-5ESDTKMP.js";
|
||||
import "./chunk-NJ4V5H3P.js";
|
||||
import "./chunk-L3Z576C2.js";
|
||||
import "./chunk-GUQHL3N7.js";
|
||||
import "./chunk-TXHHHGR3.js";
|
||||
import "./chunk-2YVA4HRZ.js";
|
||||
import "./chunk-WUR7D6NS.js";
|
||||
=======
|
||||
} from "./chunk-CSHY5MMV.js";
|
||||
import "./chunk-LTNRPUSL.js";
|
||||
} from "./chunk-JRJA23OI.js";
|
||||
import "./chunk-INS7YHTD.js";
|
||||
import "./chunk-QURGMCZB.js";
|
||||
import "./chunk-LTNRPUSL.js";
|
||||
import "./chunk-642Z5WD3.js";
|
||||
import "./chunk-USXRE7Q2.js";
|
||||
import "./chunk-ZNKPWGXJ.js";
|
||||
>>>>>>> feat/#15
|
||||
import "./chunk-G3PMV62Z.js";
|
||||
export {
|
||||
Canvas,
|
||||
|
||||
491
app/node_modules/.vite/deps/_metadata.json
generated
vendored
@@ -1,343 +1,196 @@
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
"hash": "b2c5007d",
|
||||
"configHash": "d9a82a01",
|
||||
"lockfileHash": "8a04eea8",
|
||||
"browserHash": "c208d4ff",
|
||||
=======
|
||||
"hash": "48124858",
|
||||
"configHash": "2be684c6",
|
||||
"lockfileHash": "dbdb05fd",
|
||||
"browserHash": "4b08622a",
|
||||
>>>>>>> feat/#15
|
||||
"configHash": "2be684c6",
|
||||
"lockfileHash": "dbdb05fd",
|
||||
"browserHash": "bc295ff7",
|
||||
"optimized": {
|
||||
"react": {
|
||||
"src": "../../react/index.js",
|
||||
"file": "react.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "a26efb1d",
|
||||
=======
|
||||
"fileHash": "54ab4c2f",
|
||||
>>>>>>> feat/#15
|
||||
"react": {
|
||||
"src": "../../react/index.js",
|
||||
"file": "react.js",
|
||||
"fileHash": "ca909492",
|
||||
"needsInterop": true
|
||||
},
|
||||
"react-dom": {
|
||||
"src": "../../react-dom/index.js",
|
||||
"file": "react-dom.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "c6e68a6f",
|
||||
=======
|
||||
"fileHash": "ae1b5cb6",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"react-dom": {
|
||||
"src": "../../react-dom/index.js",
|
||||
"file": "react-dom.js",
|
||||
"fileHash": "9ea60d36",
|
||||
"needsInterop": true
|
||||
},
|
||||
"react/jsx-dev-runtime": {
|
||||
"src": "../../react/jsx-dev-runtime.js",
|
||||
"file": "react_jsx-dev-runtime.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "7531df54",
|
||||
=======
|
||||
"fileHash": "835e3f15",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"react/jsx-dev-runtime": {
|
||||
"src": "../../react/jsx-dev-runtime.js",
|
||||
"file": "react_jsx-dev-runtime.js",
|
||||
"fileHash": "f778ce34",
|
||||
"needsInterop": true
|
||||
},
|
||||
"react/jsx-runtime": {
|
||||
"src": "../../react/jsx-runtime.js",
|
||||
"file": "react_jsx-runtime.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "a247453f",
|
||||
=======
|
||||
"fileHash": "4c9e32b0",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"react/jsx-runtime": {
|
||||
"src": "../../react/jsx-runtime.js",
|
||||
"file": "react_jsx-runtime.js",
|
||||
"fileHash": "afe32f9c",
|
||||
"needsInterop": true
|
||||
},
|
||||
"@radix-ui/react-avatar": {
|
||||
"src": "../../@radix-ui/react-avatar/dist/index.mjs",
|
||||
"file": "@radix-ui_react-avatar.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "d86de0d6",
|
||||
=======
|
||||
"fileHash": "953014a7",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"@radix-ui/react-avatar": {
|
||||
"src": "../../@radix-ui/react-avatar/dist/index.mjs",
|
||||
"file": "@radix-ui_react-avatar.js",
|
||||
"fileHash": "78604ab7",
|
||||
"needsInterop": false
|
||||
},
|
||||
"@radix-ui/react-dropdown-menu": {
|
||||
"src": "../../@radix-ui/react-dropdown-menu/dist/index.mjs",
|
||||
"file": "@radix-ui_react-dropdown-menu.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "51cbea4a",
|
||||
=======
|
||||
"fileHash": "793919d7",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"@radix-ui/react-dropdown-menu": {
|
||||
"src": "../../@radix-ui/react-dropdown-menu/dist/index.mjs",
|
||||
"file": "@radix-ui_react-dropdown-menu.js",
|
||||
"fileHash": "7e6567c2",
|
||||
"needsInterop": false
|
||||
},
|
||||
"@radix-ui/react-slot": {
|
||||
"src": "../../@radix-ui/react-slot/dist/index.mjs",
|
||||
"file": "@radix-ui_react-slot.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "d49e4181",
|
||||
=======
|
||||
"fileHash": "4ee317ec",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"@radix-ui/react-slot": {
|
||||
"src": "../../@radix-ui/react-slot/dist/index.mjs",
|
||||
"file": "@radix-ui_react-slot.js",
|
||||
"fileHash": "4f153a2d",
|
||||
"needsInterop": false
|
||||
},
|
||||
"@react-three/drei": {
|
||||
"src": "../../@react-three/drei/index.js",
|
||||
"file": "@react-three_drei.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "49af0e0c",
|
||||
=======
|
||||
"fileHash": "bb1a1525",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"@react-three/drei": {
|
||||
"src": "../../@react-three/drei/index.js",
|
||||
"file": "@react-three_drei.js",
|
||||
"fileHash": "313a1f02",
|
||||
"needsInterop": false
|
||||
},
|
||||
"@react-three/fiber": {
|
||||
"src": "../../@react-three/fiber/dist/react-three-fiber.esm.js",
|
||||
"file": "@react-three_fiber.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "6e6f65b1",
|
||||
=======
|
||||
"fileHash": "7a3ce954",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"@react-three/fiber": {
|
||||
"src": "../../@react-three/fiber/dist/react-three-fiber.esm.js",
|
||||
"file": "@react-three_fiber.js",
|
||||
"fileHash": "5e5643b4",
|
||||
"needsInterop": false
|
||||
},
|
||||
"class-variance-authority": {
|
||||
"src": "../../class-variance-authority/dist/index.mjs",
|
||||
"file": "class-variance-authority.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "0e514934",
|
||||
=======
|
||||
"fileHash": "80d8c035",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"class-variance-authority": {
|
||||
"src": "../../class-variance-authority/dist/index.mjs",
|
||||
"file": "class-variance-authority.js",
|
||||
"fileHash": "69d37784",
|
||||
"needsInterop": false
|
||||
},
|
||||
"clsx": {
|
||||
"src": "../../clsx/dist/clsx.mjs",
|
||||
"file": "clsx.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "e71ef32c",
|
||||
=======
|
||||
"fileHash": "bb4a0943",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"clsx": {
|
||||
"src": "../../clsx/dist/clsx.mjs",
|
||||
"file": "clsx.js",
|
||||
"fileHash": "861ef14c",
|
||||
"needsInterop": false
|
||||
},
|
||||
"framer-motion": {
|
||||
"src": "../../framer-motion/dist/es/index.mjs",
|
||||
"file": "framer-motion.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "5b5818ee",
|
||||
=======
|
||||
"fileHash": "9729455b",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"framer-motion": {
|
||||
"src": "../../framer-motion/dist/es/index.mjs",
|
||||
"file": "framer-motion.js",
|
||||
"fileHash": "3f8d4bda",
|
||||
"needsInterop": false
|
||||
},
|
||||
"lucide-react": {
|
||||
"src": "../../lucide-react/dist/esm/lucide-react.js",
|
||||
"file": "lucide-react.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "fb6a8921",
|
||||
=======
|
||||
"fileHash": "cdd57b8d",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"lucide-react": {
|
||||
"src": "../../lucide-react/dist/esm/lucide-react.js",
|
||||
"file": "lucide-react.js",
|
||||
"fileHash": "f8a0e731",
|
||||
"needsInterop": false
|
||||
},
|
||||
"react-dom/client": {
|
||||
"src": "../../react-dom/client.js",
|
||||
"file": "react-dom_client.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "032f0a73",
|
||||
=======
|
||||
"fileHash": "49cc8986",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"react-dom/client": {
|
||||
"src": "../../react-dom/client.js",
|
||||
"file": "react-dom_client.js",
|
||||
"fileHash": "bb1fb188",
|
||||
"needsInterop": true
|
||||
},
|
||||
"react-router-dom": {
|
||||
"src": "../../react-router-dom/dist/index.mjs",
|
||||
"file": "react-router-dom.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "fa45c285",
|
||||
=======
|
||||
"fileHash": "9982d9b7",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"react-router-dom": {
|
||||
"src": "../../react-router-dom/dist/index.mjs",
|
||||
"file": "react-router-dom.js",
|
||||
"fileHash": "69a5af47",
|
||||
"needsInterop": false
|
||||
},
|
||||
"recharts": {
|
||||
"src": "../../recharts/es6/index.js",
|
||||
"file": "recharts.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "b3d6765a",
|
||||
=======
|
||||
"fileHash": "a27d1b2d",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"recharts": {
|
||||
"src": "../../recharts/es6/index.js",
|
||||
"file": "recharts.js",
|
||||
"fileHash": "8c3719f7",
|
||||
"needsInterop": false
|
||||
},
|
||||
"tailwind-merge": {
|
||||
"src": "../../tailwind-merge/dist/bundle-mjs.mjs",
|
||||
"file": "tailwind-merge.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "47183e49",
|
||||
=======
|
||||
"fileHash": "3b07b318",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"sonner": {
|
||||
"src": "../../sonner/dist/index.mjs",
|
||||
"file": "sonner.js",
|
||||
"fileHash": "ff7fef4b",
|
||||
"needsInterop": false
|
||||
},
|
||||
"three": {
|
||||
"src": "../../three/build/three.module.js",
|
||||
"file": "three.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "d78c89ed",
|
||||
=======
|
||||
"fileHash": "a18f1fc6",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"tailwind-merge": {
|
||||
"src": "../../tailwind-merge/dist/bundle-mjs.mjs",
|
||||
"file": "tailwind-merge.js",
|
||||
"fileHash": "b1f20ce9",
|
||||
"needsInterop": false
|
||||
},
|
||||
"zustand": {
|
||||
"src": "../../zustand/esm/index.mjs",
|
||||
"file": "zustand.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "39f09270",
|
||||
=======
|
||||
"fileHash": "179748be",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"three": {
|
||||
"src": "../../three/build/three.module.js",
|
||||
"file": "three.js",
|
||||
"fileHash": "cae86099",
|
||||
"needsInterop": false
|
||||
},
|
||||
"zustand/middleware": {
|
||||
"src": "../../zustand/esm/middleware.mjs",
|
||||
"file": "zustand_middleware.js",
|
||||
<<<<<<< HEAD
|
||||
"fileHash": "ce09abfc",
|
||||
"needsInterop": false
|
||||
},
|
||||
"sonner": {
|
||||
"src": "../../sonner/dist/index.mjs",
|
||||
"file": "sonner.js",
|
||||
"fileHash": "b1e28aee",
|
||||
=======
|
||||
"fileHash": "89cbbc77",
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"zustand": {
|
||||
"src": "../../zustand/esm/index.mjs",
|
||||
"file": "zustand.js",
|
||||
"fileHash": "60f9f3ea",
|
||||
"needsInterop": false
|
||||
}
|
||||
},
|
||||
"chunks": {
|
||||
"hls-Q6LDPZPT": {
|
||||
"file": "hls-Q6LDPZPT.js"
|
||||
},
|
||||
"vision_bundle-ZAS5UOAV": {
|
||||
"file": "vision_bundle-ZAS5UOAV.js"
|
||||
},
|
||||
"chunk-QJTQF54Q": {
|
||||
"file": "chunk-QJTQF54Q.js"
|
||||
},
|
||||
<<<<<<< HEAD
|
||||
"chunk-O4L7C4YS": {
|
||||
"file": "chunk-O4L7C4YS.js"
|
||||
},
|
||||
"chunk-7GZ4CI6Q": {
|
||||
"file": "chunk-7GZ4CI6Q.js"
|
||||
},
|
||||
"chunk-7GZ4CI6Q": {
|
||||
"file": "chunk-7GZ4CI6Q.js"
|
||||
},
|
||||
"chunk-OAEA5FZL": {
|
||||
"file": "chunk-OAEA5FZL.js"
|
||||
},
|
||||
"chunk-5ESDTKMP": {
|
||||
"file": "chunk-5ESDTKMP.js""chunk-5ESDTKMP": {
|
||||
"file": "chunk-5ESDTKMP.js"
|
||||
},
|
||||
"chunk-NJ4V5H3P": {
|
||||
"file": "chunk-NJ4V5H3P.js""chunk-NJ4V5H3P": {
|
||||
"file": "chunk-NJ4V5H3P.js"
|
||||
},
|
||||
"chunk-L3Z576C2": {
|
||||
"file": "chunk-L3Z576C2.js"
|
||||
},
|
||||
"chunk-6MXH2QM6": {
|
||||
"file": "chunk-6MXH2QM6.js""chunk-6MXH2QM6": {
|
||||
"file": "chunk-6MXH2QM6.js"
|
||||
},
|
||||
"chunk-GUQHL3N7": {
|
||||
"file": "chunk-GUQHL3N7.js""chunk-GUQHL3N7": {
|
||||
"file": "chunk-GUQHL3N7.js"
|
||||
},
|
||||
"chunk-EQCCHGRT": {
|
||||
"file": "chunk-EQCCHGRT.js"
|
||||
},
|
||||
"chunk-YWBEB5PG": {
|
||||
"file": "chunk-YWBEB5PG.js"
|
||||
},
|
||||
"chunk-YWBEB5PG": {
|
||||
"file": "chunk-YWBEB5PG.js"
|
||||
},
|
||||
"chunk-TXHHHGR3": {
|
||||
"file": "chunk-TXHHHGR3.js"
|
||||
},
|
||||
"chunk-23FVUG5N": {
|
||||
"file": "chunk-23FVUG5N.js"
|
||||
},
|
||||
"chunk-2VUH7NEY": {
|
||||
"file": "chunk-2VUH7NEY.js"
|
||||
},
|
||||
"chunk-23FVUG5N": {
|
||||
"file": "chunk-23FVUG5N.js"
|
||||
},
|
||||
"chunk-2VUH7NEY": {
|
||||
"file": "chunk-2VUH7NEY.js"
|
||||
},
|
||||
"chunk-YF4B4G2L": {
|
||||
"file": "chunk-YF4B4G2L.js"
|
||||
=======
|
||||
},
|
||||
"zustand/middleware": {
|
||||
"src": "../../zustand/esm/middleware.mjs",
|
||||
"file": "zustand_middleware.js",
|
||||
"fileHash": "3b17a615",
|
||||
"needsInterop": false
|
||||
}
|
||||
},
|
||||
"chunks": {
|
||||
"hls-Q6LDPZPT": {
|
||||
"file": "hls-Q6LDPZPT.js"
|
||||
},
|
||||
"vision_bundle-ZAS5UOAV": {
|
||||
"file": "vision_bundle-ZAS5UOAV.js"
|
||||
},
|
||||
"chunk-H4GSM2WL": {
|
||||
"file": "chunk-H4GSM2WL.js"
|
||||
},
|
||||
"chunk-XGWIEMTH": {
|
||||
"file": "chunk-XGWIEMTH.js"
|
||||
},
|
||||
"chunk-H4GSM2WL": {
|
||||
"file": "chunk-H4GSM2WL.js"
|
||||
},
|
||||
"chunk-OAEA5FZL": {
|
||||
"file": "chunk-OAEA5FZL.js"
|
||||
},
|
||||
"chunk-CSHY5MMV": {
|
||||
"file": "chunk-CSHY5MMV.js"
|
||||
},
|
||||
"chunk-LTNRPUSL": {
|
||||
"file": "chunk-LTNRPUSL.js"
|
||||
},
|
||||
"chunk-INS7YHTD": {
|
||||
"file": "chunk-INS7YHTD.js"
|
||||
},
|
||||
"chunk-AFNBKP7P": {
|
||||
"file": "chunk-AFNBKP7P.js"
|
||||
},
|
||||
"chunk-QURGMCZB": {
|
||||
"file": "chunk-QURGMCZB.js"
|
||||
},
|
||||
"chunk-GRXJTWBV": {
|
||||
"file": "chunk-GRXJTWBV.js"
|
||||
},
|
||||
"chunk-642Z5WD3": {
|
||||
"file": "chunk-642Z5WD3.js"
|
||||
},
|
||||
"chunk-YLZ34CCM": {
|
||||
"file": "chunk-YLZ34CCM.js"
|
||||
>>>>>>> feat/#15
|
||||
},
|
||||
"chunk-5HUACAZ7": {
|
||||
"file": "chunk-5HUACAZ7.js"
|
||||
},
|
||||
"chunk-HPBHRBIF": {
|
||||
"file": "chunk-HPBHRBIF.js"
|
||||
},
|
||||
"chunk-USXRE7Q2": {
|
||||
"file": "chunk-USXRE7Q2.js"
|
||||
},
|
||||
"chunk-ZNKPWGXJ": {
|
||||
"file": "chunk-ZNKPWGXJ.js"
|
||||
},
|
||||
"chunk-U7P2NEEE": {
|
||||
"file": "chunk-U7P2NEEE.js"
|
||||
},
|
||||
"chunk-G3PMV62Z": {
|
||||
"file": "chunk-G3PMV62Z.js"
|
||||
}
|
||||
}
|
||||
}
|
||||
"file": "chunk-XGWIEMTH.js"
|
||||
},
|
||||
"chunk-OAEA5FZL": {
|
||||
"file": "chunk-OAEA5FZL.js"
|
||||
},
|
||||
"chunk-AFNBKP7P": {
|
||||
"file": "chunk-AFNBKP7P.js"
|
||||
},
|
||||
"chunk-QJTQF54Q": {
|
||||
"file": "chunk-QJTQF54Q.js"
|
||||
},
|
||||
"chunk-JRJA23OI": {
|
||||
"file": "chunk-JRJA23OI.js"
|
||||
},
|
||||
"chunk-INS7YHTD": {
|
||||
"file": "chunk-INS7YHTD.js"
|
||||
},
|
||||
"chunk-QURGMCZB": {
|
||||
"file": "chunk-QURGMCZB.js"
|
||||
},
|
||||
"chunk-LTNRPUSL": {
|
||||
"file": "chunk-LTNRPUSL.js"
|
||||
},
|
||||
"chunk-U7P2NEEE": {
|
||||
"file": "chunk-U7P2NEEE.js"
|
||||
},
|
||||
"chunk-GRXJTWBV": {
|
||||
"file": "chunk-GRXJTWBV.js"
|
||||
},
|
||||
"chunk-YLZ34CCM": {
|
||||
"file": "chunk-YLZ34CCM.js"
|
||||
},
|
||||
"chunk-642Z5WD3": {
|
||||
"file": "chunk-642Z5WD3.js"
|
||||
},
|
||||
"chunk-5HUACAZ7": {
|
||||
"file": "chunk-5HUACAZ7.js"
|
||||
},
|
||||
"chunk-HPBHRBIF": {
|
||||
"file": "chunk-HPBHRBIF.js"
|
||||
},
|
||||
"chunk-USXRE7Q2": {
|
||||
"file": "chunk-USXRE7Q2.js"
|
||||
},
|
||||
"chunk-ZNKPWGXJ": {
|
||||
"file": "chunk-ZNKPWGXJ.js"
|
||||
},
|
||||
"chunk-G3PMV62Z": {
|
||||
"file": "chunk-G3PMV62Z.js"
|
||||
}
|
||||
}
|
||||
}
|
||||
6
app/node_modules/.vite/deps/recharts.js
generated
vendored
@@ -1,15 +1,15 @@
|
||||
import {
|
||||
_extends
|
||||
} from "./chunk-H4GSM2WL.js";
|
||||
import {
|
||||
clsx_default
|
||||
} from "./chunk-U7P2NEEE.js";
|
||||
import {
|
||||
require_react_dom
|
||||
} from "./chunk-YLZ34CCM.js";
|
||||
import {
|
||||
require_react
|
||||
} from "./chunk-ZNKPWGXJ.js";
|
||||
import {
|
||||
clsx_default
|
||||
} from "./chunk-U7P2NEEE.js";
|
||||
import {
|
||||
__commonJS,
|
||||
__export,
|
||||
|
||||
BIN
backend/api/__pycache__/routes_crm.cpython-314.pyc
Normal file
BIN
backend/api/__pycache__/routes_oracle.cpython-314.pyc
Normal file
BIN
backend/oracle/__pycache__/__init__.cpython-314.pyc
Normal file
BIN
backend/oracle/__pycache__/action_service.cpython-314.pyc
Normal file
BIN
backend/oracle/__pycache__/canvas_service.cpython-314.pyc
Normal file
BIN
backend/oracle/__pycache__/collaboration_service.cpython-314.pyc
Normal file
BIN
backend/oracle/__pycache__/data_access_gateway.cpython-314.pyc
Normal file
BIN
backend/oracle/__pycache__/persona_service.cpython-314.pyc
Normal file
BIN
backend/oracle/__pycache__/policy_service.cpython-314.pyc
Normal file
BIN
backend/oracle/__pycache__/prompt_orchestrator.cpython-314.pyc
Normal file
BIN
backend/oracle/__pycache__/router_v1.cpython-314.pyc
Normal file
BIN
backend/services/__pycache__/ad_network_service.cpython-314.pyc
Normal file
BIN
backend/services/__pycache__/mcp_registry.cpython-314.pyc
Normal file
BIN
backend/services/__pycache__/nemoclaw_runtime.cpython-314.pyc
Normal file
BIN
backend/tests/__pycache__/__init__.cpython-314.pyc
Normal file
BIN
backend/tests/__pycache__/test_crm_routes.cpython-314.pyc
Normal file
BIN
backend/tests/__pycache__/test_nemoclaw_runtime.cpython-314.pyc
Normal file
BIN
backend/tests/oracle/__pycache__/__init__.cpython-314.pyc
Normal file
@@ -42,18 +42,4 @@ ops.desineuron.in {
|
||||
}
|
||||
}
|
||||
|
||||
comfy.desineuron.in {
|
||||
log {
|
||||
output file /var/log/caddy/access.log
|
||||
format json
|
||||
}
|
||||
|
||||
reverse_proxy http://172.31.46.190:8188 {
|
||||
header_up Host {host}
|
||||
header_up X-Forwarded-Host {host}
|
||||
header_up X-Forwarded-Proto {scheme}
|
||||
header_up X-Forwarded-For {remote_host}
|
||||
}
|
||||
}
|
||||
|
||||
import /etc/caddy/managed/*.caddy
|
||||
|
||||
@@ -19,7 +19,7 @@ Date: 2026-04-08
|
||||
13. Remaining Improvement Ideas
|
||||
14. Rollback
|
||||
15. Team Summary
|
||||
16. Current Status Snapshot - 2026-04-11
|
||||
16. Current Status Snapshot - 2026-04-12
|
||||
17. Linux Ops Control Plane
|
||||
|
||||
### Outcome
|
||||
@@ -87,7 +87,7 @@ Current GPU worker:
|
||||
- Type: `g6.12xlarge`
|
||||
- Region: `us-east-1`
|
||||
- Private IP: `172.31.46.190`
|
||||
- Current public IP: `18.208.176.121`
|
||||
- Current public IP: `100.31.64.121`
|
||||
- Launch time: `2026-04-11T06:14:04Z`
|
||||
|
||||
Open ingress ports:
|
||||
@@ -168,7 +168,7 @@ Public hostname checks through the new ingress:
|
||||
- `talk.desineuron.in` -> `200 /login` on `talk.desineuron.in`
|
||||
- `vpn.desineuron.in` -> `200`
|
||||
- `ops.desineuron.in/login` -> `200`
|
||||
- `comfy.desineuron.in` -> `502`
|
||||
- `comfy.desineuron.in` -> `200`
|
||||
|
||||
Important note:
|
||||
|
||||
@@ -203,9 +203,8 @@ Current live path:
|
||||
|
||||
Current public result:
|
||||
|
||||
- `comfy.desineuron.in` currently returns `502 Bad Gateway`
|
||||
- ingress route is present and Caddy is healthy
|
||||
- the current GPU backend is not yet listening on `172.31.46.190:8188`, so this is a backend readiness issue, not a DNS or edge-TLS issue
|
||||
- `comfy.desineuron.in` currently returns `200 OK`
|
||||
- ingress route is now managed dynamically instead of hardcoded to one GPU private IP
|
||||
|
||||
Current GPU service:
|
||||
|
||||
@@ -214,11 +213,20 @@ Current GPU service:
|
||||
- log path: `/var/log/comfyui/service.log`
|
||||
- port: `8188/tcp`
|
||||
|
||||
Current backend state on `2026-04-11`:
|
||||
Current backend state on `2026-04-12`:
|
||||
|
||||
- `comfyui.service` is `activating`
|
||||
- latest log shows ComfyUI startup and `Starting server`
|
||||
- the process is still not binding `8188`, so ingress sees the backend as unavailable
|
||||
- `comfyui.service` is `active`
|
||||
- `main.py` is present under `/opt/dlami/nvme/ComfyUI`
|
||||
- the process is listening on `0.0.0.0:8188`
|
||||
- the public ingress path is healthy again
|
||||
|
||||
Auto-healing fix applied:
|
||||
|
||||
- ComfyUI `systemd` service now runs an `ExecStartPre` recovery script at `/usr/local/bin/desineuron-ensure-comfyui.sh`
|
||||
- that script reclones/repairs `/opt/dlami/nvme/ComfyUI` if the tree is missing or damaged
|
||||
- Linux now runs `desineuron-comfy-route-sync.timer`
|
||||
- the timer updates the managed Caddy route for `comfy.desineuron.in` to the current private IP of the AWS instance tagged `DesineuronRole=comfyui`
|
||||
- this protects the public route from GPU instance IP drift without manual Caddy edits
|
||||
|
||||
Expected endpoints:
|
||||
|
||||
@@ -244,6 +252,10 @@ Infrastructure artifacts in repo:
|
||||
- [desineuron-ingress-home-ip-sync.service](/F:/Workin%20In%20Progress/DESINEURON/GITLAB/Project_Velocity/infrastructure/desineuron_ingress/desineuron-ingress-home-ip-sync.service)
|
||||
- [desineuron-ingress-home-ip-sync.timer](/F:/Workin%20In%20Progress/DESINEURON/GITLAB/Project_Velocity/infrastructure/desineuron_ingress/desineuron-ingress-home-ip-sync.timer)
|
||||
- [install_linux_ingress_ip_sync.sh](/F:/Workin%20In%20Progress/DESINEURON/GITLAB/Project_Velocity/infrastructure/desineuron_ingress/install_linux_ingress_ip_sync.sh)
|
||||
- [sync_comfy_route.py](/F:/Workin%20In%20Progress/DESINEURON/GITLAB/Project_Velocity/infrastructure/desineuron_ingress/sync_comfy_route.py)
|
||||
- [desineuron-comfy-route-sync.service](/F:/Workin%20In%20Progress/DESINEURON/GITLAB/Project_Velocity/infrastructure/desineuron_ingress/desineuron-comfy-route-sync.service)
|
||||
- [desineuron-comfy-route-sync.timer](/F:/Workin%20In%20Progress/DESINEURON/GITLAB/Project_Velocity/infrastructure/desineuron_ingress/desineuron-comfy-route-sync.timer)
|
||||
- [install_linux_comfy_route_sync.sh](/F:/Workin%20In%20Progress/DESINEURON/GITLAB/Project_Velocity/infrastructure/desineuron_ingress/install_linux_comfy_route_sync.sh)
|
||||
- [README.md](/F:/Workin%20In%20Progress/DESINEURON/GITLAB/Project_Velocity/infrastructure/ops_control_plane/README.md)
|
||||
- [Desineuron Ops Control Plane Bibel.md](/F:/Workin%20In%20Progress/DESINEURON/GITLAB/Project_Velocity/.Agent%20Context/Bibels/Desineuron%20Ops%20Control%20Plane%20Bibel.md)
|
||||
|
||||
@@ -290,6 +302,37 @@ Current state:
|
||||
- Last recorded home public IP: `223.185.28.89`
|
||||
- Ingress SSH rule CIDR: `223.185.28.89/32`
|
||||
|
||||
### Dynamic Comfy Route Sync
|
||||
|
||||
Purpose:
|
||||
|
||||
- keep `comfy.desineuron.in` mapped to the correct AWS GPU private IP even if the GPU instance public/private IP changes
|
||||
- remove the need to hand-edit `/etc/caddy/Caddyfile` for ComfyUI moves
|
||||
|
||||
Design:
|
||||
|
||||
- Linux runs `desineuron-comfy-route-sync.timer`
|
||||
- timer fires on boot and every 2 minutes
|
||||
- service looks for the newest running EC2 instance tagged `DesineuronRole=comfyui`
|
||||
- service reads its current private IP
|
||||
- service connects to the ingress node and updates the managed Caddy route with `/usr/local/bin/manage_desineuron_routes.py`
|
||||
- Caddy is validated and reloaded only after a successful route update
|
||||
|
||||
Installed Linux paths:
|
||||
|
||||
- `/usr/local/bin/sync_comfy_route.py`
|
||||
- `/etc/systemd/system/desineuron-comfy-route-sync.service`
|
||||
- `/etc/systemd/system/desineuron-comfy-route-sync.timer`
|
||||
- `/etc/desineuron-comfy-route-sync.env`
|
||||
- `/opt/desineuron-comfy-route-sync/.venv`
|
||||
- `/var/lib/desineuron-comfy-route-sync/current_target.txt`
|
||||
|
||||
Current state:
|
||||
|
||||
- Timer: enabled and active
|
||||
- Current synced target: `172.31.46.190`
|
||||
- Current target instance tag: `DesineuronRole=comfyui`
|
||||
|
||||
### Operational Commands
|
||||
|
||||
Check AWS ingress status:
|
||||
@@ -319,6 +362,7 @@ ssh -i "$env:USERPROFILE\.ssh\id_ed25519_desineuron_lan" desineuron-node-01@192.
|
||||
ssh -i "$env:USERPROFILE\.ssh\id_ed25519_desineuron_lan" desineuron-node-01@192.168.1.4 "echo '***' | sudo -S journalctl -u desineuron-ingress-home-ip-sync -n 50 --no-pager"
|
||||
ssh -i "$env:USERPROFILE\.ssh\id_ed25519_desineuron_lan" desineuron-node-01@192.168.1.4 "echo '***' | sudo -S systemctl status desineuron-ops-control-plane.service --no-pager"
|
||||
ssh -i "$env:USERPROFILE\.ssh\id_ed25519_desineuron_lan" desineuron-node-01@192.168.1.4 "echo '***' | sudo -S docker compose -f /opt/desineuron-ops-control-plane/docker-compose.yml ps"
|
||||
ssh -i "$env:USERPROFILE\.ssh\id_ed25519_desineuron_lan" desineuron-node-01@192.168.1.4 "echo '***' | sudo -S systemctl status desineuron-comfy-route-sync.service desineuron-comfy-route-sync.timer --no-pager"
|
||||
```
|
||||
|
||||
Public endpoint validation:
|
||||
@@ -449,14 +493,15 @@ Additional mapped route:
|
||||
|
||||
- `comfy.desineuron.in` now terminates on the same stable ingress and forwards to the GPU node's private address `172.31.46.190:8188`.
|
||||
- No further DNS change is needed for ComfyUI.
|
||||
- The backend is supervised by `systemd`, but the current worker is not yet binding `8188`, so public access is currently degraded with `502`.
|
||||
- The backend is supervised by `systemd` and currently healthy.
|
||||
- The route is now auto-synced from Linux based on the tagged AWS ComfyUI worker, so future IP changes do not require manual ingress edits.
|
||||
- The team can use:
|
||||
- `https://comfy.desineuron.in/prompt`
|
||||
- `https://comfy.desineuron.in/history/{prompt_id}`
|
||||
- `https://comfy.desineuron.in/queue`
|
||||
- `https://comfy.desineuron.in/upload/image`
|
||||
|
||||
### Current Status Snapshot - 2026-04-11
|
||||
### Current Status Snapshot - 2026-04-12
|
||||
|
||||
Live public service state:
|
||||
|
||||
@@ -467,7 +512,7 @@ Live public service state:
|
||||
- `talk.desineuron.in` -> `200`
|
||||
- `vpn.desineuron.in` -> `200`
|
||||
- `ops.desineuron.in/login` -> `200`
|
||||
- `comfy.desineuron.in` -> `502`
|
||||
- `comfy.desineuron.in` -> `200`
|
||||
|
||||
Linux-origin health:
|
||||
|
||||
@@ -490,10 +535,16 @@ Ingress health:
|
||||
|
||||
GPU ComfyUI state:
|
||||
|
||||
- `comfyui.service` -> `activating`
|
||||
- latest logs show ComfyUI startup sequence completing toward `Starting server`
|
||||
- no active listener on `8188` yet
|
||||
- ingress cannot connect to `172.31.46.190:8188`, which is why the public result is `502`
|
||||
- `comfyui.service` -> `active`
|
||||
- `main.py` present under `/opt/dlami/nvme/ComfyUI`
|
||||
- listener present on `0.0.0.0:8188`
|
||||
- public ingress path is healthy
|
||||
|
||||
Comfy auto-heal state:
|
||||
|
||||
- `desineuron-comfy-route-sync.timer` -> `active`
|
||||
- synced target file -> `/var/lib/desineuron-comfy-route-sync/current_target.txt`
|
||||
- current synced target -> `172.31.46.190`
|
||||
|
||||
### Linux Ops Control Plane
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
[Unit]
|
||||
Description=Sync comfy.desineuron.in managed route to current GPU private IP
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
EnvironmentFile=/etc/desineuron-comfy-route-sync.env
|
||||
ExecStart=/opt/desineuron-comfy-route-sync/.venv/bin/python /usr/local/bin/sync_comfy_route.py
|
||||
@@ -0,0 +1,10 @@
|
||||
[Unit]
|
||||
Description=Run comfy route sync on boot and every 2 minutes
|
||||
|
||||
[Timer]
|
||||
OnBootSec=1min
|
||||
OnUnitActiveSec=2min
|
||||
Unit=desineuron-comfy-route-sync.service
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
@@ -4,22 +4,41 @@ set -euo pipefail
|
||||
COMFY_DIR="/opt/dlami/nvme/ComfyUI"
|
||||
SERVICE_NAME="comfyui"
|
||||
LOG_DIR="/var/log/comfyui"
|
||||
ENSURE_SCRIPT="/usr/local/bin/desineuron-ensure-comfyui.sh"
|
||||
|
||||
if ! command -v git >/dev/null 2>&1; then
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y git
|
||||
fi
|
||||
|
||||
sudo tee "${ENSURE_SCRIPT}" >/dev/null <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
COMFY_DIR="/opt/dlami/nvme/ComfyUI"
|
||||
|
||||
sudo mkdir -p /opt/dlami/nvme
|
||||
sudo chown -R ubuntu:ubuntu /opt/dlami/nvme
|
||||
|
||||
if [ ! -d "${COMFY_DIR}/.git" ]; then
|
||||
sudo mkdir -p /opt/dlami/nvme
|
||||
sudo chown -R ubuntu:ubuntu /opt/dlami/nvme
|
||||
rm -rf "${COMFY_DIR}"
|
||||
git clone https://github.com/comfyanonymous/ComfyUI.git "${COMFY_DIR}"
|
||||
else
|
||||
git -C "${COMFY_DIR}" pull --ff-only
|
||||
git -C "${COMFY_DIR}" fetch --all --prune
|
||||
git -C "${COMFY_DIR}" reset --hard origin/master
|
||||
fi
|
||||
|
||||
python3 -m pip install -r "${COMFY_DIR}/requirements.txt"
|
||||
|
||||
if [ ! -f "${COMFY_DIR}/main.py" ]; then
|
||||
echo "ComfyUI main.py missing after ensure step" >&2
|
||||
exit 1
|
||||
fi
|
||||
EOF
|
||||
sudo chmod 0755 "${ENSURE_SCRIPT}"
|
||||
|
||||
sudo -u ubuntu "${ENSURE_SCRIPT}"
|
||||
|
||||
sudo mkdir -p "${LOG_DIR}"
|
||||
sudo chown -R ubuntu:ubuntu "${LOG_DIR}"
|
||||
|
||||
@@ -36,6 +55,7 @@ Group=ubuntu
|
||||
WorkingDirectory=/opt/dlami/nvme/ComfyUI
|
||||
Environment=HOME=/home/ubuntu
|
||||
Environment=PYTHONUNBUFFERED=1
|
||||
ExecStartPre=/usr/local/bin/desineuron-ensure-comfyui.sh
|
||||
ExecStart=/usr/bin/python3 /opt/dlami/nvme/ComfyUI/main.py --listen 0.0.0.0 --port 8188 --disable-auto-launch
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
APP_ROOT=/opt/desineuron-comfy-route-sync
|
||||
VENV_PATH="$APP_ROOT/.venv"
|
||||
ENV_FILE=/etc/desineuron-comfy-route-sync.env
|
||||
SCRIPT_PATH=/usr/local/bin/sync_comfy_route.py
|
||||
SERVICE_FILE=/etc/systemd/system/desineuron-comfy-route-sync.service
|
||||
TIMER_FILE=/etc/systemd/system/desineuron-comfy-route-sync.timer
|
||||
|
||||
sudo mkdir -p "$APP_ROOT" /var/lib/desineuron-comfy-route-sync
|
||||
python3 -m venv "$VENV_PATH"
|
||||
"$VENV_PATH/bin/pip" install --upgrade pip boto3
|
||||
|
||||
sudo install -m 0755 /tmp/desineuron_ingress/sync_comfy_route.py "$SCRIPT_PATH"
|
||||
sudo install -m 0644 /tmp/desineuron_ingress/desineuron-comfy-route-sync.service "$SERVICE_FILE"
|
||||
sudo install -m 0644 /tmp/desineuron_ingress/desineuron-comfy-route-sync.timer "$TIMER_FILE"
|
||||
|
||||
sudo tee "$ENV_FILE" >/dev/null <<EOF
|
||||
OPS_ENV_FILE=/opt/desineuron-ops-control-plane/.env
|
||||
COMFY_ROUTE_HOSTNAME=comfy.desineuron.in
|
||||
COMFY_ROUTE_PORT=8188
|
||||
COMFY_INSTANCE_TAG_KEY=DesineuronRole
|
||||
COMFY_INSTANCE_TAG_VALUE=comfyui
|
||||
COMFY_ROUTE_STATE_FILE=/var/lib/desineuron-comfy-route-sync/current_target.txt
|
||||
INGRESS_SSH_KEY_PATH=/opt/desineuron-ops-control-plane/state/desineuron-l4-node.pem
|
||||
EOF
|
||||
|
||||
sudo chmod 600 "$ENV_FILE"
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now desineuron-comfy-route-sync.timer
|
||||
sudo systemctl start desineuron-comfy-route-sync.service
|
||||
sudo systemctl --no-pager --full status desineuron-comfy-route-sync.service desineuron-comfy-route-sync.timer
|
||||
142
infrastructure/desineuron_ingress/sync_comfy_route.py
Normal file
@@ -0,0 +1,142 @@
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import boto3
|
||||
|
||||
|
||||
def load_env_file(path: Path) -> dict[str, str]:
|
||||
data: dict[str, str] = {}
|
||||
if not path.exists():
|
||||
return data
|
||||
for line in path.read_text(encoding="utf-8").splitlines():
|
||||
line = line.strip()
|
||||
if not line or line.startswith("#") or "=" not in line:
|
||||
continue
|
||||
key, value = line.split("=", 1)
|
||||
data[key.strip()] = value.strip()
|
||||
return data
|
||||
|
||||
|
||||
def env(name: str, default: str = "") -> str:
|
||||
return os.environ.get(name, default)
|
||||
|
||||
|
||||
def resolve_target_instance(ec2) -> dict | None:
|
||||
explicit_instance_id = env("COMFY_INSTANCE_ID")
|
||||
if explicit_instance_id:
|
||||
reservations = ec2.describe_instances(InstanceIds=[explicit_instance_id])["Reservations"]
|
||||
for reservation in reservations:
|
||||
for instance in reservation["Instances"]:
|
||||
if instance["State"]["Name"] == "running":
|
||||
return instance
|
||||
return None
|
||||
|
||||
tag_key = env("COMFY_INSTANCE_TAG_KEY", "DesineuronRole")
|
||||
tag_value = env("COMFY_INSTANCE_TAG_VALUE", "comfyui")
|
||||
filters = [
|
||||
{"Name": "instance-state-name", "Values": ["running"]},
|
||||
{"Name": f"tag:{tag_key}", "Values": [tag_value]},
|
||||
]
|
||||
reservations = ec2.describe_instances(Filters=filters)["Reservations"]
|
||||
instances = [instance for reservation in reservations for instance in reservation["Instances"]]
|
||||
if not instances:
|
||||
return None
|
||||
instances.sort(key=lambda row: row["LaunchTime"], reverse=True)
|
||||
return instances[0]
|
||||
|
||||
|
||||
def upsert_route(hostname: str, private_ip: str, port: int) -> subprocess.CompletedProcess[str]:
|
||||
ingress_host = env("INGRESS_SSH_HOST")
|
||||
ingress_user = env("INGRESS_SSH_USER", "ec2-user")
|
||||
ingress_port = env("INGRESS_SSH_PORT", "22")
|
||||
ingress_key = env("INGRESS_SSH_KEY_PATH")
|
||||
helper = env("INGRESS_ROUTE_HELPER", "/usr/local/bin/manage_desineuron_routes.py")
|
||||
payload = json.dumps(
|
||||
{
|
||||
"hostname": hostname,
|
||||
"scheme": "http",
|
||||
"target_host": private_ip,
|
||||
"target_port": port,
|
||||
}
|
||||
)
|
||||
command = (
|
||||
f"sudo {helper} upsert '{payload}'"
|
||||
" && sudo caddy validate --config /etc/caddy/Caddyfile"
|
||||
" && sudo systemctl reload caddy"
|
||||
)
|
||||
return subprocess.run(
|
||||
[
|
||||
"ssh",
|
||||
"-o",
|
||||
"StrictHostKeyChecking=no",
|
||||
"-o",
|
||||
"UserKnownHostsFile=/dev/null",
|
||||
"-i",
|
||||
ingress_key,
|
||||
"-p",
|
||||
ingress_port,
|
||||
f"{ingress_user}@{ingress_host}",
|
||||
command,
|
||||
],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=False,
|
||||
)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
ops_env = load_env_file(Path(env("OPS_ENV_FILE", "/opt/desineuron-ops-control-plane/.env")))
|
||||
for key in ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_DEFAULT_REGION"]:
|
||||
if key not in os.environ and key in ops_env:
|
||||
os.environ[key] = ops_env[key]
|
||||
os.environ.setdefault("AWS_DEFAULT_REGION", ops_env.get("OPS_DEFAULT_REGION", "us-east-1"))
|
||||
os.environ.setdefault("INGRESS_SSH_HOST", ops_env.get("OPS_INGRESS_SSH_HOST", ""))
|
||||
os.environ.setdefault("INGRESS_SSH_USER", ops_env.get("OPS_INGRESS_SSH_USER", "ec2-user"))
|
||||
os.environ.setdefault("INGRESS_SSH_PORT", ops_env.get("OPS_INGRESS_SSH_PORT", "22"))
|
||||
normalized_key_path = ops_env.get("OPS_SSH_KEY_PATH", "/opt/desineuron-ops-control-plane/state/desineuron-l4-node.pem")
|
||||
if normalized_key_path.startswith("/app/state/"):
|
||||
normalized_key_path = normalized_key_path.replace("/app/state/", "/opt/desineuron-ops-control-plane/state/")
|
||||
os.environ.setdefault("INGRESS_SSH_KEY_PATH", normalized_key_path)
|
||||
os.environ.setdefault("INGRESS_ROUTE_HELPER", ops_env.get("OPS_INGRESS_ROUTE_HELPER", "/usr/local/bin/manage_desineuron_routes.py"))
|
||||
|
||||
region = os.environ["AWS_DEFAULT_REGION"]
|
||||
hostname = env("COMFY_ROUTE_HOSTNAME", "comfy.desineuron.in")
|
||||
port = int(env("COMFY_ROUTE_PORT", "8188"))
|
||||
state_file = Path(env("COMFY_ROUTE_STATE_FILE", "/var/lib/desineuron-comfy-route-sync/current_target.txt"))
|
||||
|
||||
ec2 = boto3.client("ec2", region_name=region)
|
||||
instance = resolve_target_instance(ec2)
|
||||
if not instance:
|
||||
print("No running comfyui target instance found", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
private_ip = instance.get("PrivateIpAddress")
|
||||
if not private_ip:
|
||||
print("Target instance has no private IP", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
current = state_file.read_text(encoding="utf-8").strip() if state_file.exists() else ""
|
||||
if current == private_ip:
|
||||
print(json.dumps({"status": "noop", "hostname": hostname, "target_host": private_ip}))
|
||||
return 0
|
||||
|
||||
result = upsert_route(hostname, private_ip, port)
|
||||
if result.returncode != 0:
|
||||
print(result.stdout)
|
||||
print(result.stderr, file=sys.stderr)
|
||||
return result.returncode
|
||||
|
||||
state_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
state_file.write_text(private_ip, encoding="utf-8")
|
||||
print(json.dumps({"status": "updated", "hostname": hostname, "target_host": private_ip}))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||