{% extends "dashboard/base.html" %} {% block title %}{{ project.title or 'Project' }} - Cyborg Dashboard{% endblock %} {% block content %}
← Back to Projects

{{ project.title or 'Untitled Project' }}

{{ project.id }} {% if project.state == 'planning' %} PLANNING {% elif project.state == 'active' %} ACTIVE {% elif project.state == 'closed' %} COMPLETED {% elif project.state == 'paused' %} PAUSED {% endif %}
{% if project.state == 'active' %}
{% elif project.state == 'paused' %}
{% endif %}
PROGRESS
{% if project.total_tasks > 0 %} {{ (project.completed_tasks / project.total_tasks * 100)|int }}% {% else %} 0% {% endif %}
{{ project.completed_tasks or 0 }}/{{ project.total_tasks or 0 }} tasks completed
HEALTH SCORE
{% if health_checks and health_checks[0].health_score is not none %} {{ (health_checks[0].health_score * 100)|int }}% {% else %} N/A {% endif %}
{% if health_checks and health_checks[0].risk_level %} {{ health_checks[0].risk_level|upper }} RISK {% else %} Not checked {% endif %}
CREATED
{{ project.created_at[:10] if project.created_at else '' }}
{{ project.created_at|relative_time if project.created_at else '' }}
{% if project.state == 'planning' or specs %}

Specs & Planning {% if project.state in ('paused', 'closed') %} {% endif %}

{% if project.state == 'planning' %}
{% if not specs %} Waiting for spec generation… {% elif specs[0].status == 'rejected' %} Spec rejected — generating revised spec… {% elif specs[0].status == 'pending_approval' %} Spec pending approval — review and approve to start execution {% elif specs[0].status == 'approved' %} Generating revised spec… {% else %} Planning in progress {% endif %}
{% endif %} {% if specs %}
{% for spec in specs %} {% if not loop.first %} {% endif %} {% endfor %} {% if specs|length > 1 %} {% endif %}
{% else %}
No specs submitted yet
{% endif %} {% if project.state in ('paused', 'closed') %}

Revise Spec

{% endif %}
{% endif %}

Tasks

{% for task in tasks[:10] %}
{% if task.status == 'completed' %}✓ {% elif task.status == 'active' %}◈ {% elif task.status == 'failed' %}✖ {% else %}○{% endif %}
{{ task.title or 'Untitled Task' }}
{{ task.id[:8] }}
{{ task.status|upper }}
{% else %}
No tasks found
{% endfor %}

Project Files {{ file_count }}

{% if file_categories %}
{% for category, files in file_categories.items() %}

{{ category }}/

{% if category == "tasks" %} {% set ns = namespace(grouped=[]) %} {% for f in files %} {% if f.task_title %} {% set ns.grouped = ns.grouped + [f] %} {% endif %} {% endfor %} {% if ns.grouped %} {% set fi = namespace(tid='', total=0) %} {% for f in ns.grouped %} {% set is_new = fi.tid != f.task_short_id %} {% if is_new %} {% if fi.tid %} {% if fi.total > 3 %} {% endif %}
{% endif %} {% set fi.tid = f.task_short_id %} {% set fi.total = f.task_file_count %}
{{ f.task_title }}
{% endif %} {{ f.name|file_icon }} {{ f.name }} {{ f.size_bytes|file_size }} {% endfor %} {% if fi.tid %} {% if fi.total > 3 %} {% endif %}
{% endif %} {% endif %} {% else %}
{% for f in files %} {{ f.name|file_icon }} {{ f.name }} {{ f.size_bytes|file_size }} {% if loop.last and f.category_file_count and f.category_file_count > 10 %} {% endif %} {% endfor %}
{% endif %}
{% endfor %}
{% else %}
No files found in project workspace
{% endif %}

Prompt History {{ prompts|length }}

{% for prompt in prompts[:20] %} {% set category_colors = { 'plan_generation': 'text-accent-cyan bg-accent-cyan/15', 'criteria_evaluation': 'text-accent-cyan bg-accent-cyan/15', 'strategy_refinement': 'text-accent-cyan bg-accent-cyan/15', 'learning_extraction': 'text-accent-cyan bg-accent-cyan/15', 'task_planning': 'text-accent-cyan bg-accent-cyan/15', 'health_analysis': 'text-accent-cyan bg-accent-cyan/15', 'follow_up_generation': 'text-accent-cyan bg-accent-cyan/15', 'task_assignment': 'text-accent-purple bg-accent-purple/15', 'needs_input': 'text-accent-orange bg-accent-orange/15', 'notification': 'text-accent-pink bg-accent-pink/15', } %}
{{ prompt.category.replace('_', ' ') }} {% if prompt.session_key %} {{ prompt.session_key }} {% endif %} {% if prompt.task_id %} task:{{ prompt.task_id[:8] }} {% endif %} {% if prompt.token_count_estimate %} {{ prompt.token_count_estimate }} tokens {% endif %} {{ prompt.timestamp|relative_time }}
{{ prompt.prompt_text }}
{% else %}
No prompts logged yet
{% endfor %}

Journal & Activity

{% for entry in journal[:20] %}
{{ entry.created_at|relative_time }}
{{ entry.entry_type }} {{ entry.content[:200] }}
{% else %}
No journal entries
{% endfor %}

Danger Zone

Permanently delete this project and all associated data. This cannot be undone.

{% endblock %}