World: explosive file sparks + 3 real views (Flat 2D / Live Gource / Brain)
- Explosive sparks on file/project I/O: /api/world/live tags file-ish tools
(read/write/drive/vault/obsidian/edit/save) with touch weight 1; the engine
carries it as a node "burst" and the renderer fires a big fast particle blast.
- The formation tabs are now genuinely different views:
- Flat — the previous 2D React-Flow forest (WorldFlow), overlaid.
- Live — the WebGL Gource clone (glow sprites + sparks + trails + beams).
- Hierarchy — a NEW neural-brain view: agents are neurons in a dormant
two-hemisphere mesh; active agents fire signal particles along pathway edges
to their nearest neighbours (chaining), so the brain lights up as agents work.
- Render groups (gource/brain) + 3D particle system so signals travel in depth;
shared particle update; OrbitControls (rotate + pinch-zoom) across all WebGL views.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
da20417fda
commit
3b012b12bf
@@ -86,10 +86,16 @@ fn normalize_run_event(agent_id: &str, event_type: &str, payload: &Value) -> Vec
|
||||
let tool = payload.get("tool").and_then(|v| v.as_str()).unwrap_or("tool");
|
||||
let node_id = format!("tool:{tool}");
|
||||
let target = payload.get("input").map(summarize_input).unwrap_or_default();
|
||||
// File/project I/O gets an explosive burst (high touch weight).
|
||||
let lower = tool.to_lowercase();
|
||||
let file_op = ["file", "read", "write", "drive", "vault", "obsidian", "edit", "fs", "save"]
|
||||
.iter()
|
||||
.any(|k| lower.contains(k));
|
||||
let weight = if file_op { 1.0 } else { 0.4 };
|
||||
out.push(("agent.tool.call", json!({ "agentId": agent_id, "tool": tool, "target": target })));
|
||||
out.push(("node.activity", json!({ "nodeId": node_id, "label": tool, "kind": "service", "heat": 0.9 })));
|
||||
out.push(("node.activity", json!({ "nodeId": node_id, "label": tool, "kind": "service", "heat": if file_op { 1.0 } else { 0.9 } })));
|
||||
// the agent converges on the tool it's using (the Gource beam)
|
||||
out.push(("world.touch", json!({ "agentId": agent_id, "nodeId": node_id, "kind": "service" })));
|
||||
out.push(("world.touch", json!({ "agentId": agent_id, "nodeId": node_id, "kind": "service", "weight": weight })));
|
||||
}
|
||||
"approval_required" => {
|
||||
let action = payload.get("action_type").and_then(|v| v.as_str()).unwrap_or("action");
|
||||
|
||||
Reference in New Issue
Block a user