# ./dream_agent.py
"""
By design, the dream_agent will only inspect, analyze, and report. It operates like an engineering consultant presenting a formal change proposal. It will generate a clear visual report of what it wants to optimize, but it is programmatically barred from altering a single character of the source code until the end-user explicitly clicks 'Apply Changes'. If clicked 'Discard', the proposal is immediately deleted from memory, leaving files completely untouched.
To achieve this cleanly, dream_agent.py is built to extract code modifications using structured XML tags (...). The app will display the text outside these tags as the review proposal, while storing the raw code safely inside a hidden Gradio State component until chosen to authorize or kill the transaction.
The standalone module - dream_agent.py - reads the workspace targets, consults dream.md protocols, executes a non-destructive simulation via llama-3.1-8b-instant, and formats the actionable proposal layout.
"""
import os
import re
from groq import Groq # Substituted automatically if utilizing alternative client wrappers
def execute_dream_reflection(target_file="core_logic.py"):
"""
Phase 1: Deep Cognitive Audit Run
Reads local workspace files and drafts optimized changes without writing them to disk.
"""
# 1. Verification Guardrails
if not os.path.exists(target_file):
return f"### ❌ Audit Aborted\nTarget workspace asset `{target_file}` could not be located for tracing."
if not os.path.exists("dream.md"):
return "### ❌ Audit Aborted\nCognitive ruleset configuration `dream.md` is missing from root."
# 2. Ingest Environment Source Files
with open(target_file, "r", encoding="utf-8") as f:
source_code = f.read()
with open("dream.md", "r", encoding="utf-8") as f:
dream_rules = f.read()
# 3. Initialize Independent Client API
# Uses the same environment token configuration pattern as core_logic/storage
#client = Groq(api_key=os.getenv("GROQ_API_KEY") or os.getenv("HF_TOKEN"))
client = Groq(api_key=os.getenv("GROQ_API_KEY") or os.getenv("HF_TOKEN"))
# 4. Construct Isolated Simulation Prompt
simulation_prompt = f"""{dream_rules}
You are running a deep structural code simulation. Analyze the following live Python file for efficiency bottlenecks, redundant structures, or logic holes.
LIVE WORKSPACE CODE TARGET: `{target_file}`
```python
{source_code}
CRITICAL COMPILATION MATRIX FOR YOUR OUTPUT:
Provide a clear Markdown analysis of what you found under "👁️ ANALYSIS SUMMARY".
Provide the complete, production-ready replacement code under "📐 TARGET PATCH PROPOSAL".
Wrap your replacement code EXACTLY within structural and tags.
YOUR RESPONSE MUST FOLLOW THIS EXACT TEMPLATE:
👁️ ANALYSIS SUMMARY
[Detail the exact code gaps, risks, or performance debt you identified here]
📐 TARGET PATCH PROPOSAL
Complete, modified ready-to-run replacement code block goes here
"""
"""
Note on max_tokens -> When making an API call to Groq without a max_tokens parameter, the server does not leave the window wide open. Instead, it applies a provider-side default cap. For most execution endpoints running Llama 3.1 models, if no parameter is specified, the engine typically cuts off or caps the generation token pool automatically (often default-limited at around 1024 or 2048 tokens).
"""
try:
completion = client.chat.completions.create(
model="llama-3.1-8b-instant",
messages=[{"role": "user", "content": simulation_prompt}],
temperature=0.0, # Force absolute deterministic logic pathing
max_tokens=4096, # Allots enough context space to prevent truncation loops
top_p=1.0 # Works alongside temp=0.0 to focus token selection tightly
)
proposal_payload = completion.choices[0].message.content
return proposal_payload
except Exception as simulation_error:
return f"### ❌ Cognitive Run Exception\nAPI interaction layer encountered an execution fault: {str(simulation_error)}"
def apply_authorized_patch(proposal_text, target_file="core_logic.py"):
"""
Phase 2: Gated Confirmation Commit Execution
Extracts code from XML tags, creates a rollback backup, and overwrites the target file.
"""
try:
# Extract content between tags
patch_match = re.search(r"([\s\S]*?)", proposal_text)
if not patch_match:
return "❌ **Patch Aborted:** Could not extract structural `` bounds from model proposal."
clean_extracted_code = patch_match.group(1).strip()
# Strip away markdown code block wrappers if the model wrapped them inside the XML tags
if clean_extracted_code.startswith("```python"):
clean_extracted_code = clean_extracted_code[9:]
if clean_extracted_code.startswith("```"):
clean_extracted_code = clean_extracted_code[3:]
if clean_extracted_code.endswith("```"):
clean_extracted_code = clean_extracted_code[:-3]
clean_extracted_code = clean_extracted_code.strip()
# Safety Step: Establish a recovery point backup before committing changes
if os.path.exists(target_file):
backup_path = f"{target_file}.bak"
import shutil
shutil.copy2(target_file, backup_path)
print(f"[+] Local rollback checkpoint generated at: {backup_path}")
# Execute File Writing Commit Transaction
with open(target_file, "w", encoding="utf-8") as f:
f.write(clean_extracted_code)
return f"✅ **Environment Patched Successfully:** `{target_file}` has been updated. Rollback backup preserved at `{target_file}.bak`."
except Exception as write_fault:
return f"❌ **Systemic Write Failure:** Execution aborted while updating file system: {str(write_fault)}"