feat: read-only drawer with scene, activity, edges, memories
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
<div class="drawer-content">
|
||||
<header class="drawer-header">
|
||||
<h2>{{ host_bot.name }}</h2>
|
||||
<button class="drawer-close" type="button"
|
||||
onclick="document.getElementById('drawer').setAttribute('hidden','')">×</button>
|
||||
</header>
|
||||
|
||||
<section class="drawer-section">
|
||||
<h3>Scene</h3>
|
||||
{% if scene %}
|
||||
<p>Started: {{ scene.started_at }}</p>
|
||||
{% endif %}
|
||||
{% if container %}
|
||||
<p>Container: {{ container.name }} ({{ container.type }})</p>
|
||||
{% else %}
|
||||
<p class="muted">No active container.</p>
|
||||
{% endif %}
|
||||
<p>Time: {{ chat.time }}</p>
|
||||
</section>
|
||||
|
||||
<section class="drawer-section">
|
||||
<h3>Activity</h3>
|
||||
{% for label, act in [("you", you_activity), (host_bot.name, bot_activity)] %}
|
||||
<div class="activity-row">
|
||||
<strong>{{ label }}</strong>
|
||||
{% if act %}
|
||||
<p>{{ act.posture or "—" }} / {{ (act.action or {}).verb or "—" }}</p>
|
||||
{% if act.attention %}<p class="muted">attention: {{ act.attention }}</p>{% endif %}
|
||||
{% if act.holding %}<p class="muted">holding: {{ act.holding|join(", ") }}</p>{% endif %}
|
||||
{% else %}
|
||||
<p class="muted">No activity recorded.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</section>
|
||||
|
||||
<section class="drawer-section">
|
||||
<h3>Edges</h3>
|
||||
{% if edge_b2y %}
|
||||
<div class="edge-row">
|
||||
<strong>{{ host_bot.name }} → you</strong>
|
||||
<p>Affinity: {{ edge_b2y.affinity }}/100 · Trust: {{ edge_b2y.trust }}/100</p>
|
||||
{% if edge_b2y.summary %}<p class="muted">{{ edge_b2y.summary }}</p>{% endif %}
|
||||
{% if edge_b2y.knowledge %}
|
||||
<details><summary>Knowledge ({{ edge_b2y.knowledge|length }})</summary>
|
||||
<ul>{% for fact in edge_b2y.knowledge %}<li>{{ fact }}</li>{% endfor %}</ul>
|
||||
</details>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if edge_y2b %}
|
||||
<div class="edge-row">
|
||||
<strong>you → {{ host_bot.name }}</strong>
|
||||
<p>Affinity: {{ edge_y2b.affinity }}/100 · Trust: {{ edge_y2b.trust }}/100</p>
|
||||
{% if edge_y2b.summary %}<p class="muted">{{ edge_y2b.summary }}</p>{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if not edge_b2y and not edge_y2b %}
|
||||
<p class="muted">No edges yet.</p>
|
||||
{% endif %}
|
||||
</section>
|
||||
|
||||
<section class="drawer-section">
|
||||
<h3>Pinned memories ({{ pinned|length }} / {{ pin_cap }})</h3>
|
||||
{% if pinned %}
|
||||
<ul class="memory-list">
|
||||
{% for m in pinned %}
|
||||
<li>
|
||||
<span class="sig sig-{{ m.significance }}">{{ ['·','•','★','★★'][m.significance|default(0)] }}</span>
|
||||
{{ m.pov_summary }}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p class="muted">No pinned memories.</p>
|
||||
{% endif %}
|
||||
</section>
|
||||
|
||||
<section class="drawer-section">
|
||||
<h3>Recent memories</h3>
|
||||
{% if recent_memories %}
|
||||
<ul class="memory-list">
|
||||
{% for m in recent_memories %}
|
||||
<li>
|
||||
<span class="sig sig-{{ m.significance }}">{{ ['·','•','★','★★'][m.significance|default(0)] }}</span>
|
||||
{{ m.pov_summary[:200] }}{% if m.pov_summary|length > 200 %}…{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p class="muted">No memories yet.</p>
|
||||
{% endif %}
|
||||
</section>
|
||||
</div>
|
||||
@@ -30,8 +30,11 @@
|
||||
<button type="submit">Send</button>
|
||||
</form>
|
||||
|
||||
<aside class="drawer" id="drawer" hidden>
|
||||
<p class="muted">Drawer (read-only). T24 fills this in.</p>
|
||||
<aside class="drawer" id="drawer" hidden
|
||||
hx-get="/chats/{{ chat.id }}/drawer"
|
||||
hx-trigger="revealed"
|
||||
hx-swap="innerHTML">
|
||||
<p class="muted">Loading drawer…</p>
|
||||
</aside>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
Reference in New Issue
Block a user