TheEdict's picture
Add VerdantClaw UI - 6 tabs with chat, requirements, editor, graph, memory, code
15a8de3 verified
Raw
History Blame Contribute Delete
6.55 kB
# /// script
# requires-python = ">=3.10"
# dependencies = [
# "marimo",
# ]
# ///
import marimo
__generated_with = "0.17.6"
app = marimo.App()
@app.cell
def _():
"""Import everything once - shared across all cells"""
import marimo as mo
return (mo,)
@app.cell
def _(mo):
"""Header"""
mo.md("# 🦀 VerdantClaw-Secure")
mo.md("**Flow Engineering Requirements System**")
mo.md("---")
return
@app.cell
def _(mo):
"""Tab 1: Chat with ZeroClaw"""
mo.md("### 💬 Chat with ZeroClaw")
chat_message = mo.ui.text_area(
label="Your message:",
placeholder="Ask ZeroClaw anything about requirements...",
full_width=True
)
def send_chat(msg):
if not msg.strip():
return mo.md("⚠️ Please enter a message")
return mo.md(f"**You said:** {msg}\n\n*(ZeroClaw integration coming soon)*")
chat_result = send_chat(chat_message.value)
mo.vstack([
chat_message,
mo.ui.run_button(label="🚀 Send"),
chat_result
])
return
@app.cell
def _(mo):
"""Tab 2: Requirements Browser"""
mo.md("### 📋 Requirements Browser")
mo.md("""
**Status:** ⚠️ Workspace not configured yet
Once deployed, this will show requirements from:
- `/app/workspace/Requirements/`
- Files: `REQ-001.md`, `REQ-002.md`, etc.
""")
mo.md("**Sample Requirements:**")
mo.md("""
- 📄 `REQ-001.md` - User Authentication
- 📄 `REQ-002.md` - Data Processing Pipeline
- 📄 `REQ-003.md` - API Integration
""")
return
@app.cell
def _(mo):
"""Tab 3: Requirements Editor"""
mo.md("### ✏️ Requirements Editor")
req_filename = mo.ui.text(
label="Filename:",
value="REQ-001.md"
)
req_content = mo.ui.text_area(
label="Content (Markdown):",
value="""# REQ-001: User Authentication
## Description
Users must authenticate before accessing protected resources.
## Acceptance Criteria
- [ ] Login form with email/password
- [ ] Password reset functionality
- [ ] Session timeout after 30 minutes
## Status
- [x] Draft
- [ ] Approved
- [ ] Implemented
""",
full_width=True,
height=300
)
def save_req(name, text):
return mo.md(f"✅ Would save to: `/app/workspace/Requirements/{name}`\n\n*(File writing enabled after deployment)*")
editor_result = save_req(req_filename.value, req_content.value)
mo.vstack([
req_filename,
req_content,
mo.ui.run_button(label="💾 Save Requirement"),
editor_result
])
return
@app.cell
def _(mo):
"""Tab 4: Graph Visualization"""
mo.md("### 📊 Requirements Graph")
mo.md("""
**Memgraph Status:** ⚠️ Not connected (local testing)
Once deployed, this will visualize:
- Requirements as nodes
- Dependencies as edges
- Status indicators
""")
# Sample visualization (placeholder)
import plotly.graph_objects as go
fig = go.Figure(data=[go.Scatter(
x=[1, 2, 3, 4, 5],
y=[1, 2, 3, 4, 5],
mode='markers+text',
text=['REQ-001', 'REQ-002', 'REQ-003', 'REQ-004', 'REQ-005'],
marker=dict(size=30, color='#0066cc'),
textposition="top center",
textfont=dict(size=12)
)])
fig.update_layout(
title="Requirements Dependency Graph (Sample)",
xaxis=dict(showgrid=False, zeroline=False),
yaxis=dict(showgrid=False, zeroline=False),
plot_bgcolor='white',
width=700,
height=400,
showlegend=False
)
graph = mo.ui.plotly(fig)
return
@app.cell
def _(mo):
"""Tab 5: Memory Editor"""
mo.md("### 🧠 ZeroClaw Memory")
mo.md("""
Persistent memory for AI context. This file is read by ZeroClaw
to understand your project's requirements and decisions.
""")
memory = mo.ui.text_area(
label="Memory Content:",
value="""# Project Memory
## Project Overview
VerdantClaw is an AI-powered requirements management system.
## Key Decisions
- Using Memgraph for requirements graph
- ZeroClaw for AI agent gateway
- Obsidian for local vault sync
## Current Focus
- Building IDE-like interface
- AI-assisted requirement writing
- Graph visualization
""",
full_width=True,
height=300
)
def save_mem():
return mo.md("✅ Would save to: `/app/workspace/MEMORY.md`\n\n*(File writing enabled after deployment)*")
mem_result = save_mem()
mo.vstack([
memory,
mo.ui.run_button(label="💾 Save Memory"),
mem_result
])
return
@app.cell
def _(mo):
"""Tab 6: Code Executor"""
mo.md("### 💻 Code Executor")
mo.md("""
Execute Python code in the server environment.
**Warning:** Only run trusted code.
""")
code_editor = mo.ui.code_editor(
language="python",
value="""# Example: Print system info
import sys
import os
print(f"Python version: {sys.version}")
print(f"Working directory: {os.getcwd()}")
print(f"\\nHello from VerdantClaw! 🦀")
"""
)
def run_code(c):
import sys
from io import StringIO
old_stdout = sys.stdout
sys.stdout = buf = StringIO()
try:
exec(c, {}, {})
output = buf.getvalue()
if output:
return mo.md(f"**Output:**\n```\n{output}\n```")
else:
return mo.md("✅ Code executed (no output)")
except Exception as e:
return mo.md(f"❌ Error:\n```\n{str(e)}\n```")
finally:
sys.stdout = old_stdout
code_result = run_code(code_editor.value)
mo.vstack([
code_editor,
mo.ui.run_button(label="▶️ Run Code"),
code_result
])
return
@app.cell
def _(mo):
"""Footer"""
mo.md("""
---
**VerdantClaw-Secure** | Flow Engineering Requirements System
Powered by: **Marimo** · **ZeroClaw** · **Memgraph** · **OmniRoute**
*Testing locally - Deploy to Hugging Face Spaces for full functionality*
""")
return
if __name__ == "__main__":
app.run()