@rubytech/create-realagent 1.0.661 → 1.0.663

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. package/package.json +1 -1
  2. package/payload/platform/neo4j/schema.cypher +18 -0
  3. package/payload/platform/plugins/docs/references/memory-guide.md +4 -2
  4. package/payload/platform/plugins/docs/references/platform.md +2 -0
  5. package/payload/platform/plugins/docs/references/troubleshooting.md +13 -0
  6. package/payload/server/public/assets/{admin-CZ3-YQhl.js → admin-C9qoVb2l.js} +62 -62
  7. package/payload/server/public/assets/{data-BmeeI1Ix.js → data-C-WE3FGr.js} +1 -1
  8. package/payload/server/public/assets/{file-D4Qulqz_.js → file-lmzx24EO.js} +1 -1
  9. package/payload/server/public/assets/{graph-MoIys9Ub.js → graph-DkjvCb8B.js} +17 -17
  10. package/payload/server/public/assets/{house-B0Hukxjp.js → house-ClhI06TA.js} +1 -1
  11. package/payload/server/public/assets/{jsx-runtime-C6owBiFB.css → jsx-runtime-CLCFnMYD.css} +1 -1
  12. package/payload/server/public/assets/{public-LvjJTLGn.js → public-Dz33-dIE.js} +1 -1
  13. package/payload/server/public/assets/{share-2-BafZBLp9.js → share-2-MZ4MqbjS.js} +1 -1
  14. package/payload/server/public/assets/{useVoiceRecorder-dLOpmcYJ.js → useVoiceRecorder-Cm0G51D_.js} +1 -1
  15. package/payload/server/public/assets/{x-BOZIeV0f.js → x-CLhtM_Mh.js} +1 -1
  16. package/payload/server/public/data.html +6 -6
  17. package/payload/server/public/graph.html +6 -6
  18. package/payload/server/public/index.html +7 -7
  19. package/payload/server/public/public.html +4 -4
  20. package/payload/server/server.js +248 -72
  21. /package/payload/server/public/assets/{jsx-runtime-CmCvZzVE.js → jsx-runtime-ImbU973I.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-realagent",
3
- "version": "1.0.661",
3
+ "version": "1.0.663",
4
4
  "description": "Install Real Agent — Built for agents. By agents.",
5
5
  "bin": {
6
6
  "create-realagent": "./dist/index.js"
@@ -597,6 +597,24 @@ FOR (ag:AccessGrant) ON (ag.status);
597
597
  CREATE CONSTRAINT admin_user_id_unique IF NOT EXISTS
598
598
  FOR (au:AdminUser) REQUIRE au.userId IS UNIQUE;
599
599
 
600
+ // ----------------------------------------------------------
601
+ // GraphPreference — per-(accountId, userId) UI metadata for /graph
602
+ //
603
+ // Carries the operator's persisted default filter view (labels +
604
+ // includeTrashed) so the /graph page opens with the chosen filter
605
+ // applied on next pageload. Never a user-facing node type — hidden
606
+ // from filter chips via HIDDEN_BY_DEFAULT_LABELS.
607
+ //
608
+ // MERGE-keyed on the composite (accountId, userId). No UNIQUE
609
+ // constraint — the composite MERGE keys are idempotent and the
610
+ // preference is UI metadata, not load-bearing data. A constraint
611
+ // would require both keys in a single composite, which Neo4j
612
+ // supports but adds schema surface for no behavioural benefit.
613
+ // ----------------------------------------------------------
614
+
615
+ CREATE INDEX graph_preference_account_user IF NOT EXISTS
616
+ FOR (p:GraphPreference) ON (p.accountId, p.userId);
617
+
600
618
  // ----------------------------------------------------------
601
619
  // ToolCall — durable audit trail for agent tool invocations
602
620
  //
@@ -84,9 +84,11 @@ Ask naturally:
84
84
 
85
85
  Maxy answers relational questions — "list all my people", "how many tasks do I have", "find the person with email X", "show me the 20 most recently created nodes" — via direct read-only Cypher against your Neo4j. This is faster and more precise than semantic search when the question is "the exact set where", not "things similar to".
86
86
 
87
- You can also open a visual view of your graph at any time from the burger menu → **Graph**. It renders up to 200 of your most recently updated nodes as a force-directed map, coloured by label (Person, Service, KnowledgeDocument, Task, …). Click a node to see its properties; type in the search box to highlight matches.
87
+ You can also open a visual view of your graph at any time from the burger menu → **Graph**. Click the **Filter** button in the toolbar to open the filter menu — it lists only the node types that actually exist in your graph (so you won't see chips for types you've never written). Active chips render a force-directed map, coloured by label (Person, Service, KnowledgeDocument, Task, …). Click a node to see its properties and explore its neighbourhood; click the **Back** control or empty canvas to return to your filter view with the same chips still selected. Type in the search box to highlight matches.
88
88
 
89
- **Delete a node:** drag it to the trash icon top-right of the canvas. No confirmation deletes are reversible for 30 days. To restore, toggle **Show trashed** above the canvas and click **Restore** on the node, or ask Maxy in chat ("restore the <label> I just deleted").
89
+ **Save a default view:** once you have the chips you want, click **Set default view** in the filter menu. Next time you open **Graph**, those chips are pre-selected and your data renders immediately. The default is per-admin, per-account each admin on each account has their own.
90
+
91
+ **Delete a node:** drag it to the trash icon top-right of the canvas. No confirmation — deletes are reversible for 30 days. To restore, toggle **Show trashed** inside the filter menu and click **Restore** on the node, or ask Maxy in chat ("restore the <label> I just deleted").
90
92
 
91
93
  The page reads only your own brand's Neo4j — a Maxy device and a Real Agent device share no graph state even when on the same laptop. No credentials are required; the view inherits your admin session.
92
94
 
@@ -72,6 +72,8 @@ The Software Update window mounts the terminal lazily: neither the terminal, its
72
72
 
73
73
  Because the terminal is the only surface, it narrates its own state when something goes wrong. The moment you click Upgrade, the terminal echoes a timestamped `[upgrade] starting at <UTC> — shell+ws+tmux+xterm chain OK` line before the `npx` invocation begins — that single line confirms the WebSocket, tmux session, shell, and xterm renderer are all working end-to-end. If 5 seconds then pass with no output from `npx`, the terminal itself writes a `[terminal] no bytes from upstream in 5s — ws.readyState=…, bytesReceived=…, attempt=…` diagnostic into its own buffer, and repeats that narration every 30 seconds of continued silence. If even that narration never appears within ~10 seconds of click, the xterm renderer or its WebSocket is broken and reloading the admin UI is the fix. On the server side, `~/.maxy/logs/terminal.log` carries a `terminal-proxy-flow` heartbeat every 5 seconds while bytes are moving and every ~30 seconds while idle, with `clientBytes`, `upstreamBytes`, and `idleMs` fields — so a stuck upstream presents as `upstreamBytes` frozen and `idleMs` climbing, directly visible in a `tail -f` without any client-side evidence needed.
74
74
 
75
+ The terminal also opens as a standalone header-menu surface. The burger menu in the admin chat includes a **Terminal** entry next to **Browser**; clicking it mounts a fullscreen overlay that attaches to the same `maxy-pty` tmux session. This surface is pure attach — no upgrade command is sent — so you can run arbitrary shell work without touching the Software Update flow. Closing the overlay (Escape or the `×` button) detaches from tmux; the session on the Pi keeps running, and re-opening re-attaches with full scrollback intact. Both surfaces can be open simultaneously and show the same session via tmux's native multi-attach. Authorisation is identical to the upgrade surface: the same `canAccessAdmin()` gate + same-origin check + public-host rejection the WebSocket proxy enforces for every client. If `ttyd` is unreachable, the overlay renders the same inline "Remote terminal not available" message with a Try again button; server-side you discriminate surfaces via `grep corrId=header-overlay ~/.maxy/logs/terminal.log` (the upgrade modal uses `corrId=upgrade-modal`).
76
+
75
77
  ## AI Content Provenance
76
78
 
77
79
  When your public agent sends a message to someone — via email, WhatsApp, Telegram, or SMS — the platform automatically includes a brief disclosure that the content was generated by AI. This is transparent and cannot be turned off.
@@ -142,6 +142,19 @@ In `terminal.log`, look for `terminal-proxy-flow` lines — they're emitted ever
142
142
 
143
143
  **If no narration appears at all within ~10 seconds of click:** the xterm renderer or its WebSocket is broken — reload the admin UI in your browser. The absence of the self-narration is itself the diagnostic. On reload, if the preamble line does not appear again within a few hundred milliseconds of clicking Upgrade, the admin server cannot reach `ttyd`; follow the "Admin terminal not available" steps above.
144
144
 
145
+ ## Terminal menu item renders an empty rectangle
146
+
147
+ **Symptom:** You opened the burger menu, clicked **Terminal**, and the fullscreen overlay mounted but the body area stayed black for more than a second or two — no prompt, no scrollback, just an empty rectangle where the shell should be.
148
+
149
+ **What it means:** `ttyd` on `127.0.0.1:7681` is not accepting the WebSocket, so `RemoteTerminal` cannot attach to `maxy-pty`. If `maxy-ttyd.service` is unreachable for long enough, the overlay flips to an inline "Remote terminal not available" message with a **Try again** button — but before that trips you get the empty-rectangle window. The quickest check is the same one used for the Software Update path:
150
+
151
+ ```bash
152
+ sudo systemctl --user status maxy-ttyd
153
+ sudo tail -n 50 ~/.maxy/logs/terminal.log
154
+ ```
155
+
156
+ Filter the log to this surface specifically: `grep corrId=header-overlay ~/.maxy/logs/terminal.log` — the Software Update window uses `corrId=upgrade-modal`, so the discriminator lets you tell which client hit the problem. A healthy open looks like `proxy-open corrId=header-overlay` followed by `proxy-flow` heartbeats every 5s; an unreachable backend looks like `proxy-error side=upstream-connect err=ECONNREFUSED`. If `maxy-ttyd` is not running, restart it with `sudo systemctl --user restart maxy-ttyd`, close the overlay, and reopen it from the burger menu — `tmux new-session -A` is idempotent so your session and scrollback come back intact.
157
+
145
158
  ## Orphan Account Directory Archived to `.trash/`
146
159
 
147
160
  **What happened:** During upgrade, the installer detected multiple account directories under `~/maxy/data/accounts/` and identified one as live (its `admins` list matches the device's `users.json`). Non-matching siblings are archived — not deleted — under `~/maxy/data/accounts/.trash/<uuid>-<ISO8601-ts>/`.