feat: Phase 7I + UI refresh (capture form, memory/domain/activity pages, topnav)
Closes three gaps the user surfaced: (1) OpenClaw agents run blind
without AtoCore context, (2) mobile/desktop chats can't be captured
at all, (3) wiki UI hadn't kept up with backend capabilities.
Phase 7I — OpenClaw two-way bridge
- Plugin now calls /context/build on before_agent_start and prepends
the context pack to event.prompt, so whatever LLM runs underneath
(sonnet, opus, codex, local model) answers grounded in AtoCore
knowledge. Captured prompt stays the user's original text; fail-open
with a 5s timeout. Config-gated via injectContext flag.
- Plugin version 0.0.0 → 0.2.0; README rewritten.
UI refresh
- /wiki/capture — paste-to-ingest form for Claude Desktop / web / mobile
/ ChatGPT / other. Goes through normal /interactions pipeline with
client="claude-desktop|claude-web|claude-mobile|chatgpt|other".
Fixes the rotovap/mushroom-on-phone gap.
- /wiki/memories/{id} (Phase 7E) — full memory detail: content, status,
confidence, refs, valid_until, domain_tags (clickable to domain
pages), project link, source chunk, graduated-to-entity link, full
audit trail, related-by-tag neighbors.
- /wiki/domains/{tag} (Phase 7F) — cross-project view: all active
memories with the given tag grouped by project, sorted by count.
Case-insensitive, whitespace-tolerant. Also surfaces graduated
entities carrying the tag.
- /wiki/activity — autonomous-activity timeline feed. Summary chips
by action (created/promoted/merged/superseded/decayed/canonicalized)
and by actor (auto-dedup-tier1, auto-dedup-tier2, confidence-decay,
phase10-auto-promote, transient-to-durable, tag-canon, human-triage).
Answers "what has the brain been doing while I was away?"
- Home refresh: persistent topnav (Home · Activity · Capture · Triage
· Dashboard), "What the brain is doing" snippet above project cards
showing recent autonomous-actor counts, link to full activity.
Tests: +10 (capture page, memory detail + 404, domain cross-project +
empty + tag normalization, activity feed + groupings, home topnav,
superseded-source detail after merge). 440 → 450.
Known next: capture-browser extension for Claude.ai web (bigger
project, deferred); voice/mobile relay (adjacent).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -33,8 +33,12 @@ from atocore.interactions.service import (
|
||||
)
|
||||
from atocore.engineering.mirror import generate_project_overview
|
||||
from atocore.engineering.wiki import (
|
||||
render_activity,
|
||||
render_capture,
|
||||
render_domain,
|
||||
render_entity,
|
||||
render_homepage,
|
||||
render_memory_detail,
|
||||
render_project,
|
||||
render_search,
|
||||
)
|
||||
@@ -119,6 +123,33 @@ def wiki_search(q: str = "") -> HTMLResponse:
|
||||
return HTMLResponse(content=render_search(q))
|
||||
|
||||
|
||||
@router.get("/wiki/capture", response_class=HTMLResponse)
|
||||
def wiki_capture() -> HTMLResponse:
|
||||
"""Phase 7I follow-up: paste mobile/desktop chats into AtoCore."""
|
||||
return HTMLResponse(content=render_capture())
|
||||
|
||||
|
||||
@router.get("/wiki/memories/{memory_id}", response_class=HTMLResponse)
|
||||
def wiki_memory(memory_id: str) -> HTMLResponse:
|
||||
"""Phase 7E: memory detail with audit trail + neighbors."""
|
||||
html = render_memory_detail(memory_id)
|
||||
if html is None:
|
||||
raise HTTPException(status_code=404, detail="Memory not found")
|
||||
return HTMLResponse(content=html)
|
||||
|
||||
|
||||
@router.get("/wiki/domains/{tag}", response_class=HTMLResponse)
|
||||
def wiki_domain(tag: str) -> HTMLResponse:
|
||||
"""Phase 7F: cross-project view for a domain tag."""
|
||||
return HTMLResponse(content=render_domain(tag))
|
||||
|
||||
|
||||
@router.get("/wiki/activity", response_class=HTMLResponse)
|
||||
def wiki_activity(hours: int = 48, limit: int = 100) -> HTMLResponse:
|
||||
"""Autonomous-activity timeline feed."""
|
||||
return HTMLResponse(content=render_activity(hours=hours, limit=limit))
|
||||
|
||||
|
||||
@router.get("/admin/triage", response_class=HTMLResponse)
|
||||
def admin_triage(limit: int = 100) -> HTMLResponse:
|
||||
"""Human triage UI for candidate memories.
|
||||
|
||||
Reference in New Issue
Block a user