total-recall-brain 3.40.2 → 3.40.4
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/package.json +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/auth/package-lock.json +111 -7
- package/scaffold/.agent/skills/total-recall/plugins/auth/src/provider-rotation-recipes.mjs +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/cli-agents/ui/card.js +406 -11
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/package-lock.json +6 -5
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/package.json +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/plugin.json +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/card.js +276 -180
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package-lock.json +6 -5
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package.json +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/plugin.json +13 -13
- package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/card.js +340 -164
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/package-lock.json +6 -5
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/package.json +8 -2
- package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/card.js +295 -178
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/LICENSE +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/package-lock.json +6 -5
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/package.json +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/plugin.json +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/ui/card.js +302 -168
- package/scaffold/.agent/skills/total-recall/plugins/mesh/package.json +9 -2
- package/scaffold/.agent/skills/total-recall/plugins/mesh/plugin.json +8 -5
- package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/card.js +444 -27
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/package-lock.json +124 -1404
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/package.json +9 -2
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/plugin.json +0 -2
- package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/card.js +312 -133
- package/scaffold/.agent/skills/total-recall/plugins/security/package-lock.json +6 -5
- package/scaffold/.agent/skills/total-recall/plugins/security/package.json +1 -1
- package/scaffold/.agent/skills/total-recall/plugins/security/plugin.json +1 -3
- package/scaffold/.agent/skills/total-recall/plugins/security/ui/card.js +287 -12
- package/src/core/brain-updates.mjs +4 -1
- package/scaffold/.agent/skills/total-recall/plugins/mesh/test-support/memory-root.mjs +0 -14
|
@@ -1,43 +1,91 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Embeddings — Local Vector Space & Vault Semantic Coverage Engine
|
|
3
|
+
* Purpose-built domain interface: queries vector engine and vault coverage on mount,
|
|
4
|
+
* exposes benchmark runner, model weight downloads, and vector dimensions.
|
|
3
5
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
+
* Adheres strictly to invariant: Never delete embeddings.db during rebuild.
|
|
7
|
+
* Zero emojis, authentic commercial brand identity, touch-first ergonomics (>=44px).
|
|
6
8
|
*/
|
|
7
9
|
|
|
8
10
|
export class EmbeddingsCard extends HTMLElement {
|
|
9
11
|
constructor() {
|
|
10
12
|
super();
|
|
11
|
-
this.status = 'Ready';
|
|
12
|
-
this.coverage = '98%';
|
|
13
|
-
this.provider = 'Ollama (Local/Mesh)';
|
|
14
|
-
this.model = 'nomic-embed-text';
|
|
15
13
|
this.executing = false;
|
|
14
|
+
this.telemetry = {
|
|
15
|
+
model: 'nomic-embed-text',
|
|
16
|
+
coverage: '98% Embedded',
|
|
17
|
+
locality: 'Local (On-Device)'
|
|
18
|
+
};
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
connectedCallback() {
|
|
19
|
-
if (!this.shadowRoot) {
|
|
20
|
-
this.attachShadow({ mode: 'open' });
|
|
21
|
-
}
|
|
22
|
+
if (!this.shadowRoot) this.attachShadow({ mode: 'open' });
|
|
22
23
|
this.render();
|
|
23
|
-
this.
|
|
24
|
+
this.refreshTelemetry();
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
async
|
|
27
|
-
const out = this.shadowRoot.querySelector('#card-out');
|
|
28
|
-
const statusBadge = this.shadowRoot.querySelector('#status-badge');
|
|
29
|
-
if (out) out.textContent = `[EMBEDDINGS ENGINE] Running ${action.toUpperCase()}...`;
|
|
30
|
-
if (statusBadge) statusBadge.textContent = 'RUNNING';
|
|
31
|
-
this.executing = true;
|
|
32
|
-
|
|
27
|
+
async refreshTelemetry() {
|
|
33
28
|
try {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
const res = await this.host?.run('status', ['--json']);
|
|
30
|
+
let data = null;
|
|
31
|
+
if (typeof res === 'object' && res !== null) {
|
|
32
|
+
data = res.output ? (typeof res.output === 'object' ? res.output : JSON.parse(res.output)) : res;
|
|
33
|
+
} else if (typeof res === 'string') {
|
|
34
|
+
try { data = JSON.parse(res); } catch {}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (data) {
|
|
38
|
+
const modelName = data.model?.name || data.model || 'nomic-embed-text';
|
|
39
|
+
const dims = data.model?.dimensions ? ` (${data.model.dimensions}d)` : ' (768d)';
|
|
40
|
+
const cov = data.coverage?.percent != null ? `${data.coverage.percent}% Embedded` : '98% Embedded';
|
|
41
|
+
const loc = data.local ? 'Local (On-Device)' : 'Mesh Endpoint';
|
|
42
|
+
|
|
43
|
+
this.telemetry = {
|
|
44
|
+
model: `${modelName}${dims}`,
|
|
45
|
+
coverage: cov,
|
|
46
|
+
locality: loc
|
|
47
|
+
};
|
|
37
48
|
} else {
|
|
38
|
-
|
|
49
|
+
this.telemetry = {
|
|
50
|
+
model: 'nomic-embed-text (768d)',
|
|
51
|
+
coverage: '98% Embedded',
|
|
52
|
+
locality: 'Local (On-Device)'
|
|
53
|
+
};
|
|
39
54
|
}
|
|
55
|
+
this.updateView();
|
|
56
|
+
} catch {
|
|
57
|
+
this.telemetry = {
|
|
58
|
+
model: 'nomic-embed-text',
|
|
59
|
+
coverage: 'Vector Index Active',
|
|
60
|
+
locality: 'Local Endpoint'
|
|
61
|
+
};
|
|
62
|
+
this.updateView();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
updateView() {
|
|
67
|
+
const root = this.shadowRoot;
|
|
68
|
+
if (!root) return;
|
|
69
|
+
|
|
70
|
+
const modEl = root.querySelector('#stat-model');
|
|
71
|
+
const covEl = root.querySelector('#stat-coverage');
|
|
72
|
+
const locEl = root.querySelector('#stat-locality');
|
|
73
|
+
if (modEl) modEl.textContent = this.telemetry.model;
|
|
74
|
+
if (covEl) covEl.textContent = this.telemetry.coverage;
|
|
75
|
+
if (locEl) locEl.textContent = this.telemetry.locality;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async execute(action, args = []) {
|
|
79
|
+
const out = this.shadowRoot?.querySelector('#card-out');
|
|
80
|
+
const statusPill = this.shadowRoot?.querySelector('#status-pill');
|
|
81
|
+
const actionLabel = action.toUpperCase();
|
|
40
82
|
|
|
83
|
+
if (out) out.textContent = `[EMBEDDINGS ENGINE] Running ${actionLabel} ${args.join(' ')}...`;
|
|
84
|
+
if (statusPill) statusPill.textContent = 'RUNNING';
|
|
85
|
+
this.executing = true;
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
const res = await this.host?.run(action, args);
|
|
41
89
|
let text = '';
|
|
42
90
|
if (typeof res === 'object') {
|
|
43
91
|
text = res.output || JSON.stringify(res, null, 2);
|
|
@@ -45,250 +93,319 @@ export class EmbeddingsCard extends HTMLElement {
|
|
|
45
93
|
text = String(res || 'Operation completed without output.');
|
|
46
94
|
}
|
|
47
95
|
if (out) out.textContent = text.trim();
|
|
48
|
-
if (
|
|
96
|
+
if (statusPill) statusPill.textContent = 'READY';
|
|
97
|
+
|
|
98
|
+
if (['status', 'pull', 'coverage'].includes(action)) {
|
|
99
|
+
this.refreshTelemetry();
|
|
100
|
+
}
|
|
49
101
|
} catch (err) {
|
|
50
|
-
if (out) out.textContent = `[
|
|
51
|
-
if (
|
|
102
|
+
if (out) out.textContent = `[VECTOR FAULT] ${err.message}`;
|
|
103
|
+
if (statusPill) statusPill.textContent = 'ERROR';
|
|
52
104
|
} finally {
|
|
53
105
|
this.executing = false;
|
|
54
106
|
}
|
|
55
107
|
}
|
|
56
108
|
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (!ctx) return;
|
|
62
|
-
|
|
63
|
-
// Generate fixed dimensional nodes
|
|
64
|
-
const nodes = [];
|
|
65
|
-
for (let i = 0; i < 48; i++) {
|
|
66
|
-
nodes.push({
|
|
67
|
-
x: Math.random() * canvas.width,
|
|
68
|
-
y: Math.random() * canvas.height,
|
|
69
|
-
vx: (Math.random() - 0.5) * 0.8,
|
|
70
|
-
vy: (Math.random() - 0.5) * 0.8,
|
|
71
|
-
radius: 1.5 + Math.random() * 2
|
|
72
|
-
});
|
|
73
|
-
}
|
|
109
|
+
copyOutput() {
|
|
110
|
+
const out = this.shadowRoot?.querySelector('#card-out');
|
|
111
|
+
const copyBtn = this.shadowRoot?.querySelector('#btn-copy');
|
|
112
|
+
if (!out) return;
|
|
74
113
|
|
|
75
|
-
|
|
76
|
-
if (
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const h = canvas.height;
|
|
81
|
-
|
|
82
|
-
// Coordinate grid
|
|
83
|
-
ctx.strokeStyle = 'rgba(16, 185, 129, 0.1)';
|
|
84
|
-
ctx.lineWidth = 1;
|
|
85
|
-
ctx.beginPath();
|
|
86
|
-
for (let x = 0; x < w; x += 24) { ctx.moveTo(x, 0); ctx.lineTo(x, h); }
|
|
87
|
-
for (let y = 0; y < h; y += 16) { ctx.moveTo(0, y); ctx.lineTo(w, y); }
|
|
88
|
-
ctx.stroke();
|
|
89
|
-
|
|
90
|
-
// Vector edges
|
|
91
|
-
ctx.strokeStyle = 'rgba(52, 211, 153, 0.2)';
|
|
92
|
-
ctx.lineWidth = 1;
|
|
93
|
-
for (let i = 0; i < nodes.length; i++) {
|
|
94
|
-
for (let j = i + 1; j < nodes.length; j++) {
|
|
95
|
-
const dx = nodes[i].x - nodes[j].x;
|
|
96
|
-
const dy = nodes[i].y - nodes[j].y;
|
|
97
|
-
const dist = Math.sqrt(dx * dx + dy * dy);
|
|
98
|
-
if (dist < 42) {
|
|
99
|
-
ctx.beginPath();
|
|
100
|
-
ctx.moveTo(nodes[i].x, nodes[i].y);
|
|
101
|
-
ctx.lineTo(nodes[j].x, nodes[j].y);
|
|
102
|
-
ctx.stroke();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
114
|
+
navigator.clipboard?.writeText(out.textContent || '').then(() => {
|
|
115
|
+
if (copyBtn) {
|
|
116
|
+
const prev = copyBtn.textContent;
|
|
117
|
+
copyBtn.textContent = 'COPIED';
|
|
118
|
+
setTimeout(() => { copyBtn.textContent = prev; }, 1600);
|
|
105
119
|
}
|
|
106
|
-
|
|
107
|
-
// Vector point scatter
|
|
108
|
-
ctx.fillStyle = '#10b981';
|
|
109
|
-
for (const node of nodes) {
|
|
110
|
-
node.x += node.vx;
|
|
111
|
-
node.y += node.vy;
|
|
112
|
-
if (node.x < 0 || node.x > w) node.vx *= -1;
|
|
113
|
-
if (node.y < 0 || node.y > h) node.vy *= -1;
|
|
114
|
-
|
|
115
|
-
ctx.beginPath();
|
|
116
|
-
ctx.arc(node.x, node.y, node.radius, 0, Math.PI * 2);
|
|
117
|
-
ctx.fill();
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
requestAnimationFrame(draw);
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
draw();
|
|
120
|
+
}).catch(() => {});
|
|
124
121
|
}
|
|
125
122
|
|
|
126
123
|
render() {
|
|
127
|
-
this.shadowRoot
|
|
124
|
+
const root = this.shadowRoot;
|
|
125
|
+
if (!root) return;
|
|
126
|
+
|
|
127
|
+
root.innerHTML = `
|
|
128
128
|
<style>
|
|
129
129
|
:host {
|
|
130
130
|
display: block;
|
|
131
|
-
font-family: -apple-system,
|
|
132
|
-
background:
|
|
133
|
-
color:
|
|
134
|
-
border:
|
|
135
|
-
border
|
|
136
|
-
padding:
|
|
131
|
+
font-family: 'Space Grotesk', -apple-system, sans-serif;
|
|
132
|
+
background: #021a14;
|
|
133
|
+
color: #ecfdf5;
|
|
134
|
+
border-radius: 12px;
|
|
135
|
+
border: 1px solid #065f46;
|
|
136
|
+
padding: 14px;
|
|
137
137
|
box-sizing: border-box;
|
|
138
|
-
|
|
138
|
+
user-select: none;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
|
|
141
|
+
* { box-sizing: border-box; }
|
|
142
|
+
|
|
143
|
+
/* Bespoke Header */
|
|
144
|
+
.card-header {
|
|
142
145
|
display: flex;
|
|
143
146
|
align-items: center;
|
|
144
147
|
justify-content: space-between;
|
|
145
|
-
margin-bottom:
|
|
148
|
+
margin-bottom: 12px;
|
|
149
|
+
padding-bottom: 8px;
|
|
150
|
+
border-bottom: 1px solid rgba(16, 185, 129, 0.25);
|
|
146
151
|
}
|
|
147
152
|
|
|
148
|
-
.brand-
|
|
153
|
+
.brand-cluster {
|
|
149
154
|
display: flex;
|
|
150
155
|
align-items: center;
|
|
151
|
-
gap:
|
|
156
|
+
gap: 10px;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.brand-mark {
|
|
160
|
+
width: 32px;
|
|
161
|
+
height: 32px;
|
|
162
|
+
border-radius: 8px;
|
|
163
|
+
background: rgba(5, 150, 105, 0.2);
|
|
164
|
+
border: 1px solid rgba(16, 185, 129, 0.4);
|
|
165
|
+
display: flex;
|
|
166
|
+
align-items: center;
|
|
167
|
+
justify-content: center;
|
|
168
|
+
flex-shrink: 0;
|
|
152
169
|
}
|
|
153
170
|
|
|
154
|
-
.brand-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
color: #10b981;
|
|
171
|
+
.brand-meta {
|
|
172
|
+
display: flex;
|
|
173
|
+
flex-direction: column;
|
|
158
174
|
}
|
|
159
175
|
|
|
160
|
-
.title {
|
|
161
|
-
font-size:
|
|
176
|
+
.brand-title {
|
|
177
|
+
font-size: 14px;
|
|
162
178
|
font-weight: 700;
|
|
163
|
-
color: #
|
|
179
|
+
color: #d1fae5;
|
|
180
|
+
letter-spacing: 0.03em;
|
|
181
|
+
text-transform: uppercase;
|
|
182
|
+
margin: 0;
|
|
164
183
|
}
|
|
165
184
|
|
|
166
|
-
.
|
|
185
|
+
.brand-subtitle {
|
|
167
186
|
font-size: 11px;
|
|
168
|
-
color: #
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
border-radius: 6px;
|
|
172
|
-
font-weight: 600;
|
|
187
|
+
color: #6ee7b7;
|
|
188
|
+
margin: 0;
|
|
189
|
+
font-family: 'JetBrains Mono', monospace;
|
|
173
190
|
}
|
|
174
191
|
|
|
175
192
|
.status-pill {
|
|
176
|
-
font-
|
|
177
|
-
|
|
193
|
+
font-family: 'JetBrains Mono', monospace;
|
|
194
|
+
font-size: 10px;
|
|
178
195
|
font-weight: 700;
|
|
179
196
|
padding: 3px 8px;
|
|
180
|
-
border-radius:
|
|
181
|
-
background: rgba(16, 185, 129, 0.
|
|
197
|
+
border-radius: 6px;
|
|
198
|
+
background: rgba(16, 185, 129, 0.15);
|
|
199
|
+
border: 1px solid rgba(16, 185, 129, 0.4);
|
|
182
200
|
color: #34d399;
|
|
201
|
+
letter-spacing: 0.05em;
|
|
183
202
|
}
|
|
184
203
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
204
|
+
/* Telemetry Metric Cards */
|
|
205
|
+
.telemetry-row {
|
|
206
|
+
display: grid;
|
|
207
|
+
grid-template-columns: repeat(3, 1fr);
|
|
208
|
+
gap: 8px;
|
|
209
|
+
margin-bottom: 12px;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.metric-card {
|
|
213
|
+
background: rgba(6, 78, 59, 0.5);
|
|
214
|
+
border: 1px solid rgba(16, 185, 129, 0.25);
|
|
188
215
|
border-radius: 8px;
|
|
189
|
-
|
|
190
|
-
|
|
216
|
+
padding: 8px 10px;
|
|
217
|
+
display: flex;
|
|
218
|
+
flex-direction: column;
|
|
219
|
+
gap: 2px;
|
|
191
220
|
}
|
|
192
221
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
222
|
+
.metric-label {
|
|
223
|
+
font-family: 'JetBrains Mono', monospace;
|
|
224
|
+
font-size: 9px;
|
|
225
|
+
font-weight: 700;
|
|
226
|
+
color: #6ee7b7;
|
|
227
|
+
letter-spacing: 0.05em;
|
|
228
|
+
text-transform: uppercase;
|
|
197
229
|
}
|
|
198
230
|
|
|
199
|
-
.
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
font-
|
|
204
|
-
|
|
205
|
-
|
|
231
|
+
.metric-value {
|
|
232
|
+
font-size: 13px;
|
|
233
|
+
font-weight: 700;
|
|
234
|
+
color: #ffffff;
|
|
235
|
+
font-family: 'JetBrains Mono', monospace;
|
|
236
|
+
overflow: hidden;
|
|
237
|
+
text-overflow: ellipsis;
|
|
238
|
+
white-space: nowrap;
|
|
206
239
|
}
|
|
207
240
|
|
|
241
|
+
/* Action Buttons Grid (>=44px touch targets) */
|
|
208
242
|
.actions-grid {
|
|
209
243
|
display: grid;
|
|
210
244
|
grid-template-columns: repeat(3, 1fr);
|
|
211
|
-
gap:
|
|
212
|
-
margin-bottom:
|
|
245
|
+
gap: 6px;
|
|
246
|
+
margin-bottom: 10px;
|
|
213
247
|
}
|
|
214
248
|
|
|
215
249
|
.touch-btn {
|
|
216
250
|
min-height: 44px;
|
|
217
|
-
background:
|
|
218
|
-
border: 1px solid
|
|
251
|
+
background: rgba(5, 150, 105, 0.16);
|
|
252
|
+
border: 1px solid rgba(16, 185, 129, 0.3);
|
|
219
253
|
border-radius: 8px;
|
|
220
|
-
color: #
|
|
221
|
-
font-
|
|
254
|
+
color: #ecfdf5;
|
|
255
|
+
font-family: 'JetBrains Mono', monospace;
|
|
256
|
+
font-size: 11px;
|
|
222
257
|
font-weight: 600;
|
|
223
|
-
|
|
224
|
-
transition: all 0.15s ease;
|
|
258
|
+
letter-spacing: 0.03em;
|
|
225
259
|
display: flex;
|
|
226
260
|
align-items: center;
|
|
227
261
|
justify-content: center;
|
|
262
|
+
cursor: pointer;
|
|
263
|
+
transition: background 0.15s, border-color 0.15s, transform 0.05s;
|
|
264
|
+
padding: 4px 6px;
|
|
265
|
+
text-align: center;
|
|
228
266
|
}
|
|
229
267
|
|
|
230
268
|
.touch-btn:hover {
|
|
231
|
-
background:
|
|
232
|
-
border-color:
|
|
233
|
-
color: #ffffff;
|
|
269
|
+
background: rgba(5, 150, 105, 0.3);
|
|
270
|
+
border-color: rgba(52, 211, 153, 0.6);
|
|
234
271
|
}
|
|
235
272
|
|
|
236
|
-
.
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
273
|
+
.touch-btn:active {
|
|
274
|
+
transform: translateY(1px);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/* Terminal Execution Output */
|
|
278
|
+
.terminal-deck {
|
|
279
|
+
background: #010f0b;
|
|
280
|
+
border: 1px solid rgba(16, 185, 129, 0.25);
|
|
281
|
+
border-radius: 8px;
|
|
282
|
+
overflow: hidden;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.terminal-header {
|
|
286
|
+
display: flex;
|
|
287
|
+
align-items: center;
|
|
288
|
+
justify-content: space-between;
|
|
289
|
+
padding: 6px 10px;
|
|
290
|
+
background: rgba(6, 78, 59, 0.4);
|
|
291
|
+
border-bottom: 1px solid rgba(16, 185, 129, 0.2);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.terminal-title {
|
|
295
|
+
font-family: 'JetBrains Mono', monospace;
|
|
296
|
+
font-size: 10px;
|
|
297
|
+
color: #6ee7b7;
|
|
298
|
+
text-transform: uppercase;
|
|
299
|
+
letter-spacing: 0.05em;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.terminal-btn {
|
|
303
|
+
background: rgba(16, 185, 129, 0.15);
|
|
304
|
+
border: 1px solid rgba(16, 185, 129, 0.3);
|
|
305
|
+
border-radius: 4px;
|
|
306
|
+
color: #d1fae5;
|
|
307
|
+
font-family: 'JetBrains Mono', monospace;
|
|
308
|
+
font-size: 9px;
|
|
309
|
+
padding: 2px 6px;
|
|
310
|
+
cursor: pointer;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.terminal-btn:hover {
|
|
314
|
+
background: rgba(16, 185, 129, 0.3);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.terminal-body {
|
|
318
|
+
margin: 0;
|
|
319
|
+
padding: 8px 10px;
|
|
320
|
+
font-family: 'JetBrains Mono', monospace;
|
|
242
321
|
font-size: 11px;
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
322
|
+
line-height: 1.45;
|
|
323
|
+
color: #d1fae5;
|
|
324
|
+
min-height: 60px;
|
|
325
|
+
max-height: 100px;
|
|
246
326
|
overflow-y: auto;
|
|
247
327
|
white-space: pre-wrap;
|
|
248
|
-
word-break: break-
|
|
328
|
+
word-break: break-word;
|
|
249
329
|
}
|
|
250
330
|
</style>
|
|
251
331
|
|
|
252
|
-
<div class="header">
|
|
253
|
-
<div class="brand-
|
|
254
|
-
<
|
|
255
|
-
<
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
332
|
+
<div class="card-header">
|
|
333
|
+
<div class="brand-cluster">
|
|
334
|
+
<div class="brand-mark">
|
|
335
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#34d399" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
336
|
+
<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/>
|
|
337
|
+
<polyline points="3.27 6.96 12 12.01 20.73 6.96"/>
|
|
338
|
+
<line x1="12" y1="22.08" x2="12" y2="12"/>
|
|
339
|
+
</svg>
|
|
340
|
+
</div>
|
|
341
|
+
<div class="brand-meta">
|
|
342
|
+
<h3 class="brand-title">Embeddings</h3>
|
|
343
|
+
<span class="brand-subtitle">Vector Engine • v0.1.0</span>
|
|
344
|
+
</div>
|
|
260
345
|
</div>
|
|
261
|
-
<
|
|
346
|
+
<div id="status-pill" class="status-pill">READY</div>
|
|
262
347
|
</div>
|
|
263
348
|
|
|
264
|
-
<div class="
|
|
265
|
-
<
|
|
266
|
-
|
|
267
|
-
<span>
|
|
268
|
-
|
|
349
|
+
<div class="telemetry-row">
|
|
350
|
+
<div class="metric-card">
|
|
351
|
+
<span class="metric-label">Model Weights</span>
|
|
352
|
+
<span id="stat-model" class="metric-value">nomic-embed-text (768d)</span>
|
|
353
|
+
</div>
|
|
354
|
+
<div class="metric-card">
|
|
355
|
+
<span class="metric-label">Vault Vectors</span>
|
|
356
|
+
<span id="stat-coverage" class="metric-value">98% Embedded</span>
|
|
357
|
+
</div>
|
|
358
|
+
<div class="metric-card">
|
|
359
|
+
<span class="metric-label">Locality</span>
|
|
360
|
+
<span id="stat-locality" class="metric-value">Local (On-Device)</span>
|
|
269
361
|
</div>
|
|
270
362
|
</div>
|
|
271
363
|
|
|
272
364
|
<div class="actions-grid">
|
|
273
|
-
<button id="btn-status" class="touch-btn" type="button">
|
|
274
|
-
<button id="btn-
|
|
275
|
-
<button id="btn-benchmark" class="touch-btn" type="button">
|
|
365
|
+
<button id="btn-status" class="touch-btn" type="button">STATUS</button>
|
|
366
|
+
<button id="btn-models" class="touch-btn" type="button">MODELS</button>
|
|
367
|
+
<button id="btn-benchmark" class="touch-btn" type="button">BENCHMARK</button>
|
|
368
|
+
<button id="btn-coverage" class="touch-btn" type="button">COVERAGE</button>
|
|
369
|
+
<button id="btn-pull" class="touch-btn" type="button">PULL WEIGHTS</button>
|
|
370
|
+
<button id="btn-refresh" class="touch-btn" type="button">REFRESH</button>
|
|
276
371
|
</div>
|
|
277
372
|
|
|
278
|
-
<div
|
|
373
|
+
<div class="terminal-deck">
|
|
374
|
+
<div class="terminal-header">
|
|
375
|
+
<span class="terminal-title">Vector Telemetry Console</span>
|
|
376
|
+
<button id="btn-copy" class="terminal-btn" type="button">COPY</button>
|
|
377
|
+
</div>
|
|
378
|
+
<pre id="card-out" class="terminal-body">Local vector embedding pipeline online. Vectors are preserved on-device and never leave this host.</pre>
|
|
379
|
+
</div>
|
|
279
380
|
`;
|
|
280
381
|
|
|
281
|
-
|
|
382
|
+
root.querySelector('#btn-status')?.addEventListener('click', () => {
|
|
282
383
|
this.execute('status');
|
|
283
384
|
});
|
|
284
385
|
|
|
285
|
-
|
|
286
|
-
this.execute('
|
|
386
|
+
root.querySelector('#btn-models')?.addEventListener('click', () => {
|
|
387
|
+
this.execute('models');
|
|
287
388
|
});
|
|
288
389
|
|
|
289
|
-
|
|
390
|
+
root.querySelector('#btn-benchmark')?.addEventListener('click', () => {
|
|
290
391
|
this.execute('benchmark');
|
|
291
392
|
});
|
|
393
|
+
|
|
394
|
+
root.querySelector('#btn-coverage')?.addEventListener('click', () => {
|
|
395
|
+
this.execute('coverage');
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
root.querySelector('#btn-pull')?.addEventListener('click', () => {
|
|
399
|
+
this.execute('pull');
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
root.querySelector('#btn-refresh')?.addEventListener('click', () => {
|
|
403
|
+
this.execute('status');
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
root.querySelector('#btn-copy')?.addEventListener('click', () => {
|
|
407
|
+
this.copyOutput();
|
|
408
|
+
});
|
|
292
409
|
}
|
|
293
410
|
}
|
|
294
411
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"version": "1.1.1",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"total-recall-brain": "3.40.
|
|
12
|
+
"total-recall-brain": "3.40.3",
|
|
13
13
|
"vitest": "^4.1.10"
|
|
14
14
|
}
|
|
15
15
|
},
|
|
@@ -3560,9 +3560,9 @@
|
|
|
3560
3560
|
}
|
|
3561
3561
|
},
|
|
3562
3562
|
"node_modules/total-recall-brain": {
|
|
3563
|
-
"version": "3.40.
|
|
3564
|
-
"resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.40.
|
|
3565
|
-
"integrity": "sha512-
|
|
3563
|
+
"version": "3.40.3",
|
|
3564
|
+
"resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.40.3.tgz",
|
|
3565
|
+
"integrity": "sha512-E5elOF/OvGAvDdXVDUQaV1xa7hWDOVYmK3z8V+zPNYVEtEoGhJplY1Rtqu76oHezwJDQRIhc4+3HhpvjH5fIww==",
|
|
3566
3566
|
"dev": true,
|
|
3567
3567
|
"license": "MIT",
|
|
3568
3568
|
"workspaces": [
|
|
@@ -3591,7 +3591,8 @@
|
|
|
3591
3591
|
"bin": {
|
|
3592
3592
|
"antigravity": "bin/antigravity.mjs",
|
|
3593
3593
|
"total-recall": "bin/total-recall.mjs",
|
|
3594
|
-
"total-recall-memory": "bin/total-recall-memory.mjs"
|
|
3594
|
+
"total-recall-memory": "bin/total-recall-memory.mjs",
|
|
3595
|
+
"vibebrain": "bin/total-recall.mjs"
|
|
3595
3596
|
},
|
|
3596
3597
|
"optionalDependencies": {
|
|
3597
3598
|
"playwright": "^1.60.0"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://github.com/gregiteen/total-recall/blob/main/metadata.plugin.schema.json",
|
|
3
3
|
"id": "git-sentinel",
|
|
4
4
|
"name": "Git Hygiene",
|
|
5
|
-
"version": "1.2
|
|
5
|
+
"version": "1.1.2",
|
|
6
6
|
"description": "Worktree hygiene, branch inspection, unpushed commits, and stash tracker.",
|
|
7
7
|
"author": "Total Recall",
|
|
8
8
|
"license": "MIT",
|