total-recall-brain 3.41.4 → 3.41.6
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.
- package/bin/total-recall.mjs +10 -6
- package/docs/reference/cli-reference.md +18 -0
- package/frontend/dist/assets/index-4tGQfTa2.js +5605 -0
- package/frontend/dist/assets/index-DtwsDyFM.css +1 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/package.json +11 -0
- package/frontend/src/App.tsx +47 -122
- package/frontend/src/components/plugins/plugin-frame.ts +1 -0
- package/frontend/src/index.css +152 -86
- package/frontend/src/pages/HelpPage.tsx +13 -10
- package/frontend/src/pages/MemoryPage.tsx +28 -30
- package/frontend/src/pages/NetworkPage.tsx +3 -3
- package/frontend/src/pages/PluginsPage.tsx +6 -5
- package/frontend/src/pages/RulesPage.tsx +16 -12
- package/package.json +4 -3
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/package-lock.json +3114 -36
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/package.json +4 -1
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package-lock.json +3114 -36
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package.json +4 -1
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/package-lock.json +3121 -33
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/package.json +4 -1
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/package-lock.json +3122 -34
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/package.json +4 -1
- package/scaffold/.agent/skills/total-recall/plugins/mesh/package-lock.json +3127 -49
- package/scaffold/.agent/skills/total-recall/plugins/mesh/package.json +5 -2
- package/scaffold/.agent/skills/total-recall/plugins/mesh/src/core/mesh.mjs +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/capability/index.mjs +136 -7
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/cli.mjs +135 -26
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package-lock.json +3121 -33
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/package.json +5 -2
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/plugin.json +228 -9
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/skills/meta-harness/SKILL.md +24 -30
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/alerts.mjs +29 -16
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/cascade.mjs +73 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/coordinator.mjs +182 -365
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/dispatch.mjs +33 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/documentation.mjs +40 -14
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/executor.mjs +4 -4
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/agy.mjs +187 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/claude.mjs +275 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/cline.mjs +132 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/codex.mjs +187 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/cursor.mjs +158 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/devin.mjs +157 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/dsh.mjs +183 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/grok.mjs +132 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/hermes.mjs +173 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/index.mjs +87 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/openclaw.mjs +173 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate-adapters/pi.mjs +129 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/gate.mjs +12 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/json-reply.mjs +22 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/learner.mjs +72 -70
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/model-catalog.mjs +195 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/paths.mjs +11 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/pool.mjs +36 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/review.mjs +169 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/router.mjs +136 -346
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/runtime.mjs +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/ssss-store.mjs +20 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/telemetry.mjs +43 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/threads.mjs +156 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/worker.mjs +117 -35
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/src/worktree.mjs +51 -0
- package/scaffold/.agent/skills/total-recall/plugins/meta-harness/ui/card.js +398 -57
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/cli.mjs +304 -46
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/package-lock.json +367 -41
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/package.json +5 -2
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/plugin.json +33 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/config.mjs +2 -2
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/generate.mjs +159 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/graph.mjs +197 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/lint.mjs +153 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/mesh-vaults.mjs +261 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/refresh.mjs +151 -4
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/search.mjs +114 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/src/token.mjs +96 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/card.js +899 -662
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/vendor/openwiki.mjs +8987 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/vendor/skills/mermaid-diagrams/SKILL.md +44 -0
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/vendor/skills/write-connector/SKILL.md +56 -0
- package/scaffold/.agent/skills/total-recall/plugins/security/package-lock.json +3097 -81
- package/scaffold/.agent/skills/total-recall/plugins/security/package.json +4 -1
- package/src/cli/agent.mjs +12 -1
- package/src/cli/compact.mjs +108 -0
- package/src/cli/connect.mjs +56 -1
- package/src/cli/context.mjs +55 -23
- package/src/cli/doctor.mjs +5 -2
- package/src/cli/forget.mjs +2 -0
- package/src/cli/harness.mjs +62 -50
- package/src/cli/memory-entry.mjs +2 -2
- package/src/cli/preflight.mjs +152 -16
- package/src/cli/release.mjs +386 -0
- package/src/cli/remember.mjs +19 -1
- package/src/cli/rules.mjs +54 -12
- package/src/cli/startup.mjs +1 -1
- package/src/cli/status.mjs +12 -2
- package/src/core/claude-hooks.mjs +41 -3
- package/src/core/cli-commands.mjs +2 -0
- package/src/core/cli-semantic-index.mjs +3 -2
- package/src/core/conflict-detector.mjs +23 -12
- package/src/core/context-compactor.mjs +145 -0
- package/src/core/context-policy.mjs +20 -0
- package/src/core/duplicate-guard.mjs +350 -0
- package/src/core/meta-harness.mjs +31 -11
- package/src/core/preflight-gate.mjs +2 -2
- package/src/core/preflight-receipt.mjs +29 -1
- package/src/core/scaffold-plugins.mjs +7 -0
- package/src/core/stdio-flush.mjs +23 -0
- package/src/core/surface.mjs +33 -10
- package/src/server/invoke-durability.mjs +39 -0
- package/src/server/invoke-write-child.mjs +25 -0
- package/src/server/routes/invoke.mjs +7 -0
- package/src/server/routes/plugins.mjs +2 -2
- package/frontend/dist/assets/index-BIQmqDKP.css +0 -1
- package/frontend/dist/assets/index-CRzjQLu7.js +0 -5631
- package/frontend/src/components/DaemonLogsTab.tsx +0 -54
- package/frontend/src/components/ResearchAgendaTab.tsx +0 -712
- package/frontend/src/components/TaskQueueTab.tsx +0 -193
- package/frontend/src/components/VoiceInput.tsx +0 -112
- package/frontend/src/pages/ChatPage.tsx +0 -1059
- package/frontend/src/pages/CollabPage.tsx +0 -470
- package/frontend/src/pages/DesignDocsPage.tsx +0 -621
- package/frontend/src/pages/FilesPage.tsx +0 -393
- package/frontend/src/pages/HealthPage.tsx +0 -359
- package/frontend/src/pages/InboxPage.tsx +0 -83
- package/frontend/src/pages/InstructionsPage.tsx +0 -583
- package/frontend/src/pages/IntegrationsPage.tsx +0 -761
- package/frontend/src/pages/MeshPage.css +0 -58
- package/frontend/src/pages/MeshPage.tsx +0 -1219
- package/frontend/src/pages/OkfPage.tsx +0 -535
- package/frontend/src/pages/SandboxPage.tsx +0 -113
- package/frontend/src/pages/SkillsPage.tsx +0 -1994
- package/frontend/src/pages/TasksPage.tsx +0 -427
- package/frontend/src/pages/UsagePage.tsx +0 -702
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/README.md +0 -65
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/cli.mjs +0 -76
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/package.json +0 -19
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/plugin.json +0 -266
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/src/adapters/dsh.mjs +0 -446
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/src/documentation.mjs +0 -152
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/src/executor.mjs +0 -71
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/src/runtime.mjs +0 -36
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/src/setup.mjs +0 -35
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/src/worker.mjs +0 -175
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/ui/DESIGN.md +0 -32
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/ui/card.js +0 -575
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback } from "react"
|
|
2
2
|
import { useSearchParams } from "react-router-dom"
|
|
3
|
-
import { listMemory, searchMemory, readMemory, fetchConflicts, resolveConflict, saveMemory, createMemory, deleteMemory, fetchSessions, deleteSession } from "../api"
|
|
3
|
+
import { listMemory, searchMemory, readMemory, fetchConflicts, resolveConflict, saveMemory, createMemory, deleteMemory, fetchSessions, deleteSession, getApiBase } from "../api"
|
|
4
4
|
import type { MemoryNode, Conflict } from "../types"
|
|
5
5
|
import type { SessionSummary } from "../api"
|
|
6
6
|
|
|
@@ -297,9 +297,10 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
297
297
|
}
|
|
298
298
|
}, [urlSlug, activeBrainId, nodes])
|
|
299
299
|
|
|
300
|
-
// Wire SSE Live Agent Monitor Streaming
|
|
300
|
+
// Wire SSE Live Agent Monitor Streaming
|
|
301
301
|
useEffect(() => {
|
|
302
|
-
const
|
|
302
|
+
const base = getApiBase() || window.location.origin
|
|
303
|
+
const sseUrl = `${base.replace(/\/+$/, '')}/stream`
|
|
303
304
|
const eventSource = new EventSource(sseUrl)
|
|
304
305
|
|
|
305
306
|
eventSource.onmessage = (event) => {
|
|
@@ -529,9 +530,9 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
529
530
|
|
|
530
531
|
{/* Action Buttons */}
|
|
531
532
|
<div style={{ display: "flex", justifyContent: "flex-end", gap: 12, marginTop: 12 }}>
|
|
532
|
-
<button className="btn btn-ghost" type="button" onClick={onCancel} style={{ fontSize: 13 }}>Cancel</button>
|
|
533
|
-
<button className="btn btn-purple" type="button" onClick={onSubmit} style={{ fontSize: 13 }}>
|
|
534
|
-
{isNew ? "
|
|
533
|
+
<button className="btn btn-ghost" type="button" onClick={onCancel} style={{ fontSize: 13, minHeight: 44, padding: "0 18px", borderRadius: "var(--radius-md, 10px)" }}>Cancel</button>
|
|
534
|
+
<button className="btn btn-purple" type="button" onClick={onSubmit} style={{ fontSize: 13, minHeight: 44, padding: "0 18px", borderRadius: "var(--radius-md, 10px)" }}>
|
|
535
|
+
{isNew ? "Create Memory Node" : "Save Changes"}
|
|
535
536
|
</button>
|
|
536
537
|
</div>
|
|
537
538
|
</div>
|
|
@@ -552,20 +553,20 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
552
553
|
</div>
|
|
553
554
|
|
|
554
555
|
{/* Tab Selection */}
|
|
555
|
-
<div style={{ display: "flex", background: "rgba(
|
|
556
|
+
<div style={{ display: "flex", background: "rgba(12, 18, 32, 0.72)", backdropFilter: "blur(16px)", padding: 4, borderRadius: "var(--radius-md, 10px)", border: "1px solid var(--border)" }}>
|
|
556
557
|
<button
|
|
557
558
|
className={`btn btn-sm ${activeTab === "vault" ? "btn-purple" : "btn-ghost"}`}
|
|
558
559
|
onClick={() => { setActiveTab("vault"); setSelected(null); setSearchParams({}); }}
|
|
559
|
-
style={{ borderRadius: 6, fontSize: 12, padding: "6px
|
|
560
|
+
style={{ borderRadius: 6, fontSize: 12, minHeight: 36, padding: "6px 14px", fontWeight: 600 }}
|
|
560
561
|
>
|
|
561
|
-
|
|
562
|
+
Active Nodes
|
|
562
563
|
</button>
|
|
563
564
|
<button
|
|
564
565
|
className={`btn btn-sm ${activeTab === "conflicts" ? "btn-cyan" : "btn-ghost"}`}
|
|
565
566
|
onClick={() => { setActiveTab("conflicts"); setSelected(null); setSearchParams({}); }}
|
|
566
|
-
style={{ borderRadius: 6, fontSize: 12, padding: "6px
|
|
567
|
+
style={{ borderRadius: 6, fontSize: 12, minHeight: 36, padding: "6px 14px", fontWeight: 600, display: "flex", alignItems: "center", gap: 6 }}
|
|
567
568
|
>
|
|
568
|
-
|
|
569
|
+
Quarantined Conflicts
|
|
569
570
|
{conflicts.length > 0 && (
|
|
570
571
|
<span style={{ background: "#ef4444", color: "#fff", fontSize: 9, padding: "1px 5px", borderRadius: 10, fontWeight: 700 }}>
|
|
571
572
|
{conflicts.length}
|
|
@@ -575,9 +576,9 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
575
576
|
<button
|
|
576
577
|
className={`btn btn-sm ${activeTab === "sessions" ? "btn-purple" : "btn-ghost"}`}
|
|
577
578
|
onClick={() => { setActiveTab("sessions"); setSelected(null); setSearchParams({}); }}
|
|
578
|
-
style={{ borderRadius: 6, fontSize: 12, padding: "6px
|
|
579
|
+
style={{ borderRadius: 6, fontSize: 12, minHeight: 36, padding: "6px 14px", fontWeight: 600 }}
|
|
579
580
|
>
|
|
580
|
-
|
|
581
|
+
Sessions
|
|
581
582
|
{sessionsTotal > 0 && (
|
|
582
583
|
<span style={{ background: "rgba(139,92,246,0.3)", color: "#a78bfa", fontSize: 9, padding: "1px 5px", borderRadius: 10, fontWeight: 700, marginLeft: 4 }}>
|
|
583
584
|
{sessionsTotal}
|
|
@@ -587,7 +588,7 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
587
588
|
</div>
|
|
588
589
|
</div>
|
|
589
590
|
|
|
590
|
-
{error && <div className="badge badge-error" style={{ alignSelf: "flex-start", marginBottom: 15 }}
|
|
591
|
+
{error && <div className="badge badge-error" style={{ alignSelf: "flex-start", marginBottom: 15 }}>{error}</div>}
|
|
591
592
|
|
|
592
593
|
{activeTab === "vault" ? (
|
|
593
594
|
<div className="memory-layout">
|
|
@@ -599,7 +600,7 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
599
600
|
className={`category-btn ${category === c ? "active" : ""}`}
|
|
600
601
|
onClick={() => { setCategory(c); setSearchParams({}); setIsCreating(false); setIsEditing(false); }}
|
|
601
602
|
>
|
|
602
|
-
<span>{c === "all" ? "
|
|
603
|
+
<span>{c === "all" ? "All Nodes" : c}</span>
|
|
603
604
|
{c === "all"
|
|
604
605
|
? <span className="category-count">{nodes.length}</span>
|
|
605
606
|
: categoryCounts[c]
|
|
@@ -611,7 +612,7 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
611
612
|
|
|
612
613
|
<button
|
|
613
614
|
className="btn btn-purple"
|
|
614
|
-
style={{ width: "100%", marginTop: 20, display: "flex", alignItems: "center", justifyContent: "center", gap: 8, fontSize: 13 }}
|
|
615
|
+
style={{ width: "100%", marginTop: 20, display: "flex", alignItems: "center", justifyContent: "center", gap: 8, fontSize: 13, minHeight: 44, borderRadius: "var(--radius-md, 10px)", fontWeight: 600 }}
|
|
615
616
|
onClick={() => {
|
|
616
617
|
setSelected(null);
|
|
617
618
|
setSearchParams({});
|
|
@@ -632,7 +633,7 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
632
633
|
setEditSupersedes("");
|
|
633
634
|
}}
|
|
634
635
|
>
|
|
635
|
-
|
|
636
|
+
Create New Node
|
|
636
637
|
</button>
|
|
637
638
|
</div>
|
|
638
639
|
<div className="memory-main">
|
|
@@ -710,14 +711,14 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
710
711
|
}}
|
|
711
712
|
style={{ fontSize: 12, border: "1px solid var(--border)" }}
|
|
712
713
|
>
|
|
713
|
-
|
|
714
|
+
Edit Node
|
|
714
715
|
</button>
|
|
715
716
|
<button
|
|
716
717
|
className="btn btn-ghost btn-sm"
|
|
717
718
|
onClick={() => handleDelete(selected.slug)}
|
|
718
|
-
style={{ fontSize: 12, borderColor: "rgba(239,68,68,0.2)", color: "#fca5a5" }}
|
|
719
|
+
style={{ fontSize: 12, minHeight: 36, padding: "0 12px", borderColor: "rgba(239,68,68,0.2)", color: "#fca5a5" }}
|
|
719
720
|
>
|
|
720
|
-
|
|
721
|
+
Delete
|
|
721
722
|
</button>
|
|
722
723
|
</div>
|
|
723
724
|
</div>
|
|
@@ -900,13 +901,13 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
900
901
|
)}
|
|
901
902
|
</div>
|
|
902
903
|
<div style={{ display: "flex", flexWrap: "wrap", gap: 16, fontSize: 11, color: "var(--text-tertiary)", marginTop: 8 }}>
|
|
903
|
-
<span
|
|
904
|
+
<span>{n.category}</span>
|
|
904
905
|
{n.importance !== undefined && (
|
|
905
906
|
<span style={{ color: "#fbbf24" }}>★ {n.importance}/5</span>
|
|
906
907
|
)}
|
|
907
908
|
{n.confidence !== undefined && (
|
|
908
909
|
<span style={{ display: "flex", alignItems: "center", gap: 4 }}>
|
|
909
|
-
|
|
910
|
+
{Math.round(n.confidence * 100)}%
|
|
910
911
|
</span>
|
|
911
912
|
)}
|
|
912
913
|
</div>
|
|
@@ -929,8 +930,7 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
929
930
|
|
|
930
931
|
{conflicts.length === 0 ? (
|
|
931
932
|
<div style={{ textAlign: "center", padding: 60, background: "rgba(255,255,255,0.02)", borderRadius: 12, border: "1px dashed var(--border)", color: "var(--text-tertiary)" }}>
|
|
932
|
-
<
|
|
933
|
-
<h4 style={{ color: "#fff", marginBottom: 6 }}>All Clear!</h4>
|
|
933
|
+
<h4 style={{ color: "#fff", marginBottom: 6 }}>All Clear</h4>
|
|
934
934
|
No memory conflicts enqueued or quarantined in `.agent/memory-inbox/conflicts/`.
|
|
935
935
|
</div>
|
|
936
936
|
) : (
|
|
@@ -1040,8 +1040,8 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
1040
1040
|
{activeTab === "sessions" && (
|
|
1041
1041
|
<div className="health-log" style={{ background: "rgba(15,23,42,0.45)", backdropFilter: "blur(12px)", border: "1px solid var(--border)", borderRadius: 12, padding: 24 }}>
|
|
1042
1042
|
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 16 }}>
|
|
1043
|
-
<h2 style={{ margin: 0, color: "#fff", fontSize: 16 }}
|
|
1044
|
-
<button className="btn btn-ghost btn-sm" onClick={loadSessions} style={{ fontSize: 12 }}
|
|
1043
|
+
<h2 style={{ margin: 0, color: "#fff", fontSize: 16 }}>IDE Sessions ({sessionsTotal})</h2>
|
|
1044
|
+
<button className="btn btn-ghost btn-sm" onClick={loadSessions} style={{ fontSize: 12, minHeight: 36, padding: "0 12px" }}>Refresh</button>
|
|
1045
1045
|
</div>
|
|
1046
1046
|
|
|
1047
1047
|
{sessionsLoading ? (
|
|
@@ -1050,7 +1050,6 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
1050
1050
|
</div>
|
|
1051
1051
|
) : sessionsList.length === 0 ? (
|
|
1052
1052
|
<div style={{ textAlign: "center", padding: 40, color: "var(--text-tertiary)" }}>
|
|
1053
|
-
<span style={{ fontSize: 32, display: "block", marginBottom: 8 }}>📝</span>
|
|
1054
1053
|
No sessions ingested yet. Sessions appear here when the relay ships IDE conversation data.
|
|
1055
1054
|
</div>
|
|
1056
1055
|
) : (
|
|
@@ -1072,7 +1071,6 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
1072
1071
|
codex: "#10b981",
|
|
1073
1072
|
vscode: "#3b82f6",
|
|
1074
1073
|
cursor: "#06b6d4",
|
|
1075
|
-
"gemini-cli": "#ec4899",
|
|
1076
1074
|
}
|
|
1077
1075
|
const color = sourceColors[s.source || ""] || "var(--text-secondary)"
|
|
1078
1076
|
return (
|
|
@@ -1106,9 +1104,9 @@ export default function MemoryPage({ activeBrainId }: { activeBrainId?: string }
|
|
|
1106
1104
|
<button
|
|
1107
1105
|
className="btn btn-ghost btn-sm"
|
|
1108
1106
|
onClick={() => handleDeleteSession(s.id)}
|
|
1109
|
-
style={{ fontSize:
|
|
1107
|
+
style={{ fontSize: 11, padding: "4px 8px", color: "#fca5a5", borderColor: "rgba(239,68,68,0.2)" }}
|
|
1110
1108
|
>
|
|
1111
|
-
|
|
1109
|
+
Delete
|
|
1112
1110
|
</button>
|
|
1113
1111
|
</td>
|
|
1114
1112
|
</tr>
|
|
@@ -199,7 +199,7 @@ export default function NetworkPage() {
|
|
|
199
199
|
{/* Firewall Blocklist */}
|
|
200
200
|
<div className="card">
|
|
201
201
|
<div className="section-title">
|
|
202
|
-
|
|
202
|
+
Firewall Blocklist
|
|
203
203
|
<span className="badge badge-warning">{policy?.blocked_domains?.length ?? 0}</span>
|
|
204
204
|
</div>
|
|
205
205
|
|
|
@@ -247,7 +247,7 @@ export default function NetworkPage() {
|
|
|
247
247
|
|
|
248
248
|
{/* Global Limits Editor */}
|
|
249
249
|
<div className="card">
|
|
250
|
-
<div className="section-title"
|
|
250
|
+
<div className="section-title">Global Limits</div>
|
|
251
251
|
<div className="limits-form">
|
|
252
252
|
<div className="limits-row">
|
|
253
253
|
<span className="limits-label">Max Global Concurrency</span>
|
|
@@ -302,7 +302,7 @@ export default function NetworkPage() {
|
|
|
302
302
|
|
|
303
303
|
{/* Audit Log */}
|
|
304
304
|
<div className="card network-section-full">
|
|
305
|
-
<div className="section-title"
|
|
305
|
+
<div className="section-title">Audit Log</div>
|
|
306
306
|
|
|
307
307
|
<div className="audit-filters">
|
|
308
308
|
<input
|
|
@@ -632,17 +632,18 @@ export default function PluginsPage({ activeBrainId }: PluginsPageProps) {
|
|
|
632
632
|
|
|
633
633
|
const closeDetail = () => {
|
|
634
634
|
setDetail(null)
|
|
635
|
-
if (searchParams.has("id")) {
|
|
635
|
+
if (searchParams.has("id") || searchParams.has("plugin")) {
|
|
636
636
|
const next = new URLSearchParams(searchParams)
|
|
637
637
|
next.delete("id")
|
|
638
|
+
next.delete("plugin")
|
|
638
639
|
setSearchParams(next)
|
|
639
640
|
}
|
|
640
641
|
}
|
|
641
642
|
|
|
642
643
|
useEffect(() => {
|
|
643
|
-
const id = searchParams.get("id")
|
|
644
|
+
const id = searchParams.get("id") || searchParams.get("plugin")
|
|
644
645
|
if (!id || detail?.id === id) return
|
|
645
|
-
const match = installed.find((p) => p.id === id)
|
|
646
|
+
const match = installed.find((p) => p.id === id || p.id === `tr-plugin-${id}` || p.name === id)
|
|
646
647
|
if (match) openDetail(match)
|
|
647
648
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
648
649
|
}, [searchParams, installed])
|
|
@@ -1331,14 +1332,14 @@ export default function PluginsPage({ activeBrainId }: PluginsPageProps) {
|
|
|
1331
1332
|
|
|
1332
1333
|
<div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: "12px" }}>
|
|
1333
1334
|
<div style={{ background: "var(--bg-tertiary)", padding: "12px", borderRadius: "8px", border: "1px solid var(--border)" }}>
|
|
1334
|
-
<div style={{ fontWeight: 600, color: "#38bdf8", marginBottom: "4px" }}
|
|
1335
|
+
<div style={{ fontWeight: 600, color: "#38bdf8", marginBottom: "4px" }}>Private Plugins</div>
|
|
1335
1336
|
<div style={{ ...muted, fontSize: "12px", lineHeight: 1.4 }}>
|
|
1336
1337
|
Store directly inside <code style={mono}>.agent/skills/total-recall/plugins/<id></code> or link locally. Never shared outside this machine or project. Zero cloud exposure.
|
|
1337
1338
|
</div>
|
|
1338
1339
|
</div>
|
|
1339
1340
|
|
|
1340
1341
|
<div style={{ background: "var(--bg-tertiary)", padding: "12px", borderRadius: "8px", border: "1px solid var(--border)" }}>
|
|
1341
|
-
<div style={{ fontWeight: 600, color: "#a855f7", marginBottom: "4px" }}
|
|
1342
|
+
<div style={{ fontWeight: 600, color: "#a855f7", marginBottom: "4px" }}>Plugin Store Distribution</div>
|
|
1342
1343
|
<div style={{ ...muted, fontSize: "12px", lineHeight: 1.4 }}>
|
|
1343
1344
|
Deploy to the store via <code style={mono}>total-recall deploy-store <id></code>. Cryptographically signed and distributed across the mesh for team consumption.
|
|
1344
1345
|
</div>
|
|
@@ -81,21 +81,25 @@ export default function RulesPage({ activeBrainId }: { activeBrainId: string })
|
|
|
81
81
|
key={`${rule.scope}:${rule.slug}`}
|
|
82
82
|
data-testid="rule-card"
|
|
83
83
|
style={{
|
|
84
|
-
border: `1px solid ${isArchived ? '
|
|
84
|
+
border: `1px solid ${isArchived ? 'rgba(148, 163, 184, 0.12)' : colorCode}`,
|
|
85
85
|
opacity: isArchived ? 0.6 : 1,
|
|
86
|
-
borderRadius:
|
|
87
|
-
padding:
|
|
88
|
-
marginBottom:
|
|
89
|
-
background: '
|
|
86
|
+
borderRadius: 12,
|
|
87
|
+
padding: 18,
|
|
88
|
+
marginBottom: 14,
|
|
89
|
+
background: 'rgba(12, 18, 32, 0.72)',
|
|
90
|
+
backdropFilter: 'blur(16px)',
|
|
91
|
+
WebkitBackdropFilter: 'blur(16px)',
|
|
92
|
+
boxShadow: '0 4px 16px rgba(0, 0, 0, 0.25)',
|
|
90
93
|
display: 'flex',
|
|
91
94
|
flexDirection: 'column',
|
|
92
|
-
gap:
|
|
95
|
+
gap: 10,
|
|
96
|
+
transition: 'all var(--transition-fast)',
|
|
93
97
|
}}
|
|
94
98
|
>
|
|
95
99
|
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
|
|
96
|
-
<h4 style={{ margin: 0, fontSize: 16, color: 'var(--text-primary)' }}>{rule.title}</h4>
|
|
100
|
+
<h4 style={{ margin: 0, fontSize: 16, fontWeight: 600, color: 'var(--text-primary)' }}>{rule.title}</h4>
|
|
97
101
|
<div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>
|
|
98
|
-
<span style={{ fontSize:
|
|
102
|
+
<span style={{ fontSize: 11, fontWeight: 500, color: 'var(--text-secondary)', background: 'rgba(148, 163, 184, 0.12)', border: '1px solid rgba(148, 163, 184, 0.15)', padding: '2px 8px', borderRadius: 6 }}>
|
|
99
103
|
{rule.scope} brain
|
|
100
104
|
</span>
|
|
101
105
|
<span style={{ fontSize: 12, color: 'gold' }} aria-label={`Importance ${stars} of 5`}>
|
|
@@ -103,21 +107,21 @@ export default function RulesPage({ activeBrainId }: { activeBrainId: string })
|
|
|
103
107
|
</span>
|
|
104
108
|
</div>
|
|
105
109
|
</div>
|
|
106
|
-
<div style={{ fontSize:
|
|
110
|
+
<div style={{ fontSize: 13.5, lineHeight: 1.6, color: 'var(--text-secondary)', whiteSpace: 'pre-wrap' }}>
|
|
107
111
|
{rule.body || '(no body)'}
|
|
108
112
|
</div>
|
|
109
|
-
<div style={{ display: 'flex', justifyContent: 'flex-end', marginTop:
|
|
113
|
+
<div style={{ display: 'flex', justifyContent: 'flex-end', marginTop: 6 }}>
|
|
110
114
|
{isArchived ? (
|
|
111
115
|
<button
|
|
112
116
|
onClick={() => handleRestore(rule)}
|
|
113
|
-
style={{ padding: '
|
|
117
|
+
style={{ padding: '6px 12px', borderRadius: 6, background: 'rgba(148, 163, 184, 0.1)', border: '1px solid var(--border)', cursor: 'pointer', color: 'var(--text-primary)', fontSize: 12, fontWeight: 500 }}
|
|
114
118
|
>
|
|
115
119
|
Restore
|
|
116
120
|
</button>
|
|
117
121
|
) : (
|
|
118
122
|
<button
|
|
119
123
|
onClick={() => handleArchive(rule)}
|
|
120
|
-
style={{ padding: '
|
|
124
|
+
style={{ padding: '6px 12px', borderRadius: 6, background: 'rgba(148, 163, 184, 0.1)', border: '1px solid var(--border)', cursor: 'pointer', color: 'var(--text-primary)', fontSize: 12, fontWeight: 500 }}
|
|
121
125
|
>
|
|
122
126
|
Archive
|
|
123
127
|
</button>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "total-recall-brain",
|
|
3
|
-
"version": "3.41.
|
|
3
|
+
"version": "3.41.6",
|
|
4
4
|
"description": "The Vibe Coding Brain & Autonomous Software Factory: memory, rules, secrets, and 33 visual plugins automatically managed across all your devices.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"homepage": "https://github.com/gregiteen/total-recall#readme",
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"@simplewebauthn/server": "^13.3.2",
|
|
80
|
-
"@ssss/cli": "npm:@gregiteen/ssss-cli@0.14.
|
|
80
|
+
"@ssss/cli": "npm:@gregiteen/ssss-cli@0.14.4",
|
|
81
81
|
"bcrypt": "^6.0.0",
|
|
82
82
|
"better-sqlite3": "^12.11.1",
|
|
83
83
|
"cookie-parser": "^1.4.7",
|
|
@@ -121,6 +121,7 @@
|
|
|
121
121
|
},
|
|
122
122
|
"overrides": {
|
|
123
123
|
"proxy-addr": "2.0.8",
|
|
124
|
-
"argparse": "2.0.1"
|
|
124
|
+
"argparse": "2.0.1",
|
|
125
|
+
"minimatch": "^11.0.4"
|
|
125
126
|
}
|
|
126
127
|
}
|