feat: sync with upstream — v1.2.0, in-app updates, Projects, modules
Brings the public tree back in line with the development repo after several weeks of drift caused by a stale publish include list. New: - In-app update path: GET /update/check compares the checkout against origin/main and POST /update/apply runs `ncp upgrade` detached (pull, rebuild, restart). The sidebar shows the version, checks on click, and offers an "update available" pill. - Projects: a project workspace groups chats and RAG documents, with per-project instructions and document retrieval scoped to the active project. Replaces the standalone Documents page. - modules/: auto-discovered feature plugins (mail, network) with their frontend counterparts and tests. - Memory curation runs in-process (synapse/memory/curator.py) on the chat model when a conversation goes idle. The separate memory service on :8001 is gone, along with the launcher lines that started it. Also: the KDE theme, panel and Promethean terminal assets, the full test suite, and VERSION 1.2.0. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This commit is contained in:
+7
-16
@@ -10,7 +10,7 @@ The window opens IMMEDIATELY on a loading page and navigates to the app once the
|
||||
backend answers, rather than waiting up to 40s with nothing on screen and then
|
||||
appearing. One window the whole time: nothing pops up and vanishes, and there is
|
||||
no moment where the user is left wondering whether the command did anything.
|
||||
The loading page's status line is updated live (memory -> backend -> ready) via
|
||||
The loading page's status line is updated live (backend -> ready) via
|
||||
evaluate_js, instead of sitting on one static sentence for the whole wait - the
|
||||
point is a user watching the window can tell what stage it's stuck on, without
|
||||
needing to go read a terminal or a log file to find out.
|
||||
@@ -24,7 +24,6 @@ import time
|
||||
import urllib.request
|
||||
|
||||
URL = "http://localhost:8000"
|
||||
MEMORY_URL = "http://localhost:8001/"
|
||||
ICON_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "assets", "NexusOS.ico")
|
||||
|
||||
# Inline so it renders with no server and no asset files - the whole point is
|
||||
@@ -47,7 +46,7 @@ LOADING_HTML = """<!doctype html>
|
||||
<div class="box">
|
||||
<div class="ring"></div>
|
||||
<h1>Starting NexusOS</h1>
|
||||
<p id="status">Starting memory service...</p>
|
||||
<p id="status">Starting backend...</p>
|
||||
</div>
|
||||
</body></html>"""
|
||||
|
||||
@@ -56,7 +55,7 @@ FAILED_HTML = LOADING_HTML.replace(
|
||||
).replace(
|
||||
"Starting NexusOS", "Backend did not start"
|
||||
).replace(
|
||||
'id="status">Starting memory service...',
|
||||
'id="status">Starting backend...',
|
||||
'id="status">Nothing answered on :8000 after 40s. Check: ncp logs -b',
|
||||
)
|
||||
|
||||
@@ -80,23 +79,15 @@ def _http_ok(url: str, timeout: float = 2.0) -> bool:
|
||||
|
||||
|
||||
def _wait_for_backend(win, timeout: float = 40.0) -> bool:
|
||||
"""Poll memory, then the backend, updating the on-screen status as each
|
||||
comes up - so the window never loads before the server is up (which shows
|
||||
a localhost error the webview won't retry), and never sits on one sentence
|
||||
while actually moving through two separate services."""
|
||||
"""Poll the backend, updating the on-screen status as it comes up - so the
|
||||
window never loads before the server is up, which shows a localhost error
|
||||
the webview won't retry."""
|
||||
status_url = URL.rstrip("/") + "/status"
|
||||
deadline = time.time() + timeout
|
||||
|
||||
memory_ready = _http_ok(MEMORY_URL)
|
||||
if memory_ready:
|
||||
_set_status(win, "Starting backend...")
|
||||
_set_status(win, "Starting backend...")
|
||||
|
||||
while time.time() < deadline:
|
||||
if not memory_ready:
|
||||
memory_ready = _http_ok(MEMORY_URL)
|
||||
if memory_ready:
|
||||
_set_status(win, "Starting backend...")
|
||||
|
||||
try:
|
||||
# 5s, not 2: /status probes Ollama, and a wedged Ollama made it
|
||||
# slower than a 2s ceiling - the backend was up and answering 200
|
||||
|
||||
Reference in New Issue
Block a user