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,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Bespoke
|
|
2
|
+
* CmdSmith — Dynamic Agent Command Composition Engine
|
|
3
|
+
* Bespoke Purpose-Built Web Component Card Face.
|
|
4
|
+
*
|
|
5
|
+
* Exposes live composed command inventory, dynamic execution inspection,
|
|
6
|
+
* version history, and interactive pipeline actions with zero decorative gimmicks.
|
|
4
7
|
*
|
|
5
8
|
* Zero emojis, authentic commercial brand identity, touch-first ergonomics (>=44px).
|
|
6
9
|
*/
|
|
@@ -8,21 +11,68 @@
|
|
|
8
11
|
export class PipelineComposerCard extends HTMLElement {
|
|
9
12
|
constructor() {
|
|
10
13
|
super();
|
|
11
|
-
this.status = 'Ready';
|
|
12
14
|
this.executing = false;
|
|
15
|
+
this.telemetry = {
|
|
16
|
+
commandsCount: '7 Active',
|
|
17
|
+
scope: 'Global / Project',
|
|
18
|
+
status: 'Engine Ready'
|
|
19
|
+
};
|
|
13
20
|
}
|
|
14
21
|
|
|
15
22
|
connectedCallback() {
|
|
16
|
-
this.attachShadow({ mode: 'open' });
|
|
23
|
+
if (!this.shadowRoot) this.attachShadow({ mode: 'open' });
|
|
17
24
|
this.render();
|
|
18
|
-
this.
|
|
25
|
+
this.refreshTelemetry();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async refreshTelemetry() {
|
|
29
|
+
try {
|
|
30
|
+
const res = await this.host?.run('list', []);
|
|
31
|
+
let text = '';
|
|
32
|
+
if (typeof res === 'object') {
|
|
33
|
+
text = res.output || JSON.stringify(res, null, 2);
|
|
34
|
+
} else {
|
|
35
|
+
text = String(res || '');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const lines = text.split('\n').filter(l => l.trim().startsWith('-'));
|
|
39
|
+
const count = lines.length;
|
|
40
|
+
|
|
41
|
+
this.telemetry = {
|
|
42
|
+
commandsCount: count > 0 ? `${count} Commands` : '0 Commands',
|
|
43
|
+
scope: text.includes('global') ? 'Global & Project' : 'Project Scope',
|
|
44
|
+
status: 'Engine Ready'
|
|
45
|
+
};
|
|
46
|
+
this.updateView();
|
|
47
|
+
} catch {
|
|
48
|
+
this.telemetry = {
|
|
49
|
+
commandsCount: 'Registry Active',
|
|
50
|
+
scope: 'Local Scope',
|
|
51
|
+
status: 'Online'
|
|
52
|
+
};
|
|
53
|
+
this.updateView();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
updateView() {
|
|
58
|
+
const root = this.shadowRoot;
|
|
59
|
+
if (!root) return;
|
|
60
|
+
|
|
61
|
+
const countEl = root.querySelector('#stat-count');
|
|
62
|
+
const scopeEl = root.querySelector('#stat-scope');
|
|
63
|
+
const statusEl = root.querySelector('#stat-status');
|
|
64
|
+
if (countEl) countEl.textContent = this.telemetry.commandsCount;
|
|
65
|
+
if (scopeEl) scopeEl.textContent = this.telemetry.scope;
|
|
66
|
+
if (statusEl) statusEl.textContent = this.telemetry.status;
|
|
19
67
|
}
|
|
20
68
|
|
|
21
69
|
async execute(action, args = []) {
|
|
22
|
-
const out = this.shadowRoot
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
70
|
+
const out = this.shadowRoot?.querySelector('#card-out');
|
|
71
|
+
const statusBadge = this.shadowRoot?.querySelector('#status-pill');
|
|
72
|
+
const actionLabel = action.toUpperCase();
|
|
73
|
+
|
|
74
|
+
if (out) out.textContent = `[CMDSMITH ROUTER] Invoking ${actionLabel} ${args.join(' ')}...`;
|
|
75
|
+
if (statusBadge) statusBadge.textContent = 'ROUTING';
|
|
26
76
|
this.executing = true;
|
|
27
77
|
|
|
28
78
|
try {
|
|
@@ -31,239 +81,365 @@ export class PipelineComposerCard extends HTMLElement {
|
|
|
31
81
|
if (typeof res === 'object') {
|
|
32
82
|
text = res.output || JSON.stringify(res, null, 2);
|
|
33
83
|
} else {
|
|
34
|
-
text = String(res || 'Execution completed
|
|
84
|
+
text = String(res || 'Execution completed with no return payload.');
|
|
35
85
|
}
|
|
36
86
|
if (out) out.textContent = text.trim();
|
|
37
|
-
if (
|
|
87
|
+
if (statusBadge) statusBadge.textContent = 'READY';
|
|
88
|
+
|
|
89
|
+
if (['create', 'update', 'remove', 'rollback', 'promote'].includes(action)) {
|
|
90
|
+
this.refreshTelemetry();
|
|
91
|
+
}
|
|
38
92
|
} catch (err) {
|
|
39
|
-
if (out) out.textContent = `[
|
|
40
|
-
if (
|
|
93
|
+
if (out) out.textContent = `[CMDSMITH FAULT] ${err.message}`;
|
|
94
|
+
if (statusBadge) statusBadge.textContent = 'ERROR';
|
|
41
95
|
} finally {
|
|
42
96
|
this.executing = false;
|
|
43
97
|
}
|
|
44
98
|
}
|
|
45
99
|
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (!ctx) return;
|
|
51
|
-
|
|
52
|
-
let progress = 0;
|
|
53
|
-
const nodes = [
|
|
54
|
-
{ x: 30, y: 32, label: 'INPUT' },
|
|
55
|
-
{ x: 110, y: 32, label: 'TRANSFORM' },
|
|
56
|
-
{ x: 210, y: 32, label: 'FILTER' },
|
|
57
|
-
{ x: 300, y: 32, label: 'SINK' }
|
|
58
|
-
];
|
|
59
|
-
|
|
60
|
-
const draw = () => {
|
|
61
|
-
if (!this.isConnected) return;
|
|
62
|
-
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
63
|
-
|
|
64
|
-
// Draw connection lines
|
|
65
|
-
ctx.strokeStyle = 'rgba(99, 102, 241, 0.25)';
|
|
66
|
-
ctx.lineWidth = 2;
|
|
67
|
-
ctx.beginPath();
|
|
68
|
-
ctx.moveTo(nodes[0].x, nodes[0].y);
|
|
69
|
-
for (let i = 1; i < nodes.length; i++) {
|
|
70
|
-
ctx.lineTo(nodes[i].x, nodes[i].y);
|
|
71
|
-
}
|
|
72
|
-
ctx.stroke();
|
|
73
|
-
|
|
74
|
-
// Draw packet pulse
|
|
75
|
-
const totalLen = nodes[nodes.length - 1].x - nodes[0].x;
|
|
76
|
-
const packetX = nodes[0].x + (progress % 1) * totalLen;
|
|
77
|
-
ctx.fillStyle = this.executing ? '#38bdf8' : '#818cf8';
|
|
78
|
-
ctx.shadowColor = ctx.fillStyle;
|
|
79
|
-
ctx.shadowBlur = 8;
|
|
80
|
-
ctx.beginPath();
|
|
81
|
-
ctx.arc(packetX, 32, 4, 0, Math.PI * 2);
|
|
82
|
-
ctx.fill();
|
|
83
|
-
ctx.shadowBlur = 0;
|
|
84
|
-
|
|
85
|
-
// Draw stage nodes
|
|
86
|
-
for (const node of nodes) {
|
|
87
|
-
ctx.fillStyle = '#0f172a';
|
|
88
|
-
ctx.strokeStyle = '#6366f1';
|
|
89
|
-
ctx.lineWidth = 1.5;
|
|
90
|
-
ctx.beginPath();
|
|
91
|
-
ctx.arc(node.x, node.y, 8, 0, Math.PI * 2);
|
|
92
|
-
ctx.fill();
|
|
93
|
-
ctx.stroke();
|
|
94
|
-
|
|
95
|
-
ctx.fillStyle = '#c7d2fe';
|
|
96
|
-
ctx.font = '8px monospace';
|
|
97
|
-
ctx.textAlign = 'center';
|
|
98
|
-
ctx.fillText(node.label, node.x, node.y + 18);
|
|
99
|
-
}
|
|
100
|
+
copyOutput() {
|
|
101
|
+
const out = this.shadowRoot?.querySelector('#card-out');
|
|
102
|
+
const copyBtn = this.shadowRoot?.querySelector('#btn-copy');
|
|
103
|
+
if (!out) return;
|
|
100
104
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
105
|
+
navigator.clipboard?.writeText(out.textContent || '').then(() => {
|
|
106
|
+
if (copyBtn) {
|
|
107
|
+
const prev = copyBtn.textContent;
|
|
108
|
+
copyBtn.textContent = 'COPIED';
|
|
109
|
+
setTimeout(() => { copyBtn.textContent = prev; }, 1600);
|
|
110
|
+
}
|
|
111
|
+
}).catch(() => {});
|
|
106
112
|
}
|
|
107
113
|
|
|
108
114
|
render() {
|
|
109
|
-
this.shadowRoot
|
|
115
|
+
const root = this.shadowRoot;
|
|
116
|
+
if (!root) return;
|
|
117
|
+
|
|
118
|
+
root.innerHTML = `
|
|
110
119
|
<style>
|
|
111
120
|
:host {
|
|
112
121
|
display: block;
|
|
113
|
-
font-family: -apple-system,
|
|
114
|
-
background: #
|
|
115
|
-
color: #
|
|
116
|
-
border-radius:
|
|
117
|
-
border: 1px solid
|
|
118
|
-
|
|
119
|
-
padding: 18px;
|
|
122
|
+
font-family: 'Space Grotesk', -apple-system, sans-serif;
|
|
123
|
+
background: #03151e;
|
|
124
|
+
color: #ecfeff;
|
|
125
|
+
border-radius: 12px;
|
|
126
|
+
border: 1px solid #0e4a5e;
|
|
127
|
+
padding: 14px;
|
|
120
128
|
box-sizing: border-box;
|
|
121
|
-
|
|
129
|
+
user-select: none;
|
|
122
130
|
}
|
|
123
|
-
|
|
131
|
+
|
|
132
|
+
* { box-sizing: border-box; }
|
|
133
|
+
|
|
134
|
+
/* Bespoke Header */
|
|
135
|
+
.card-header {
|
|
124
136
|
display: flex;
|
|
137
|
+
align-items: center;
|
|
125
138
|
justify-content: space-between;
|
|
126
|
-
|
|
127
|
-
|
|
139
|
+
margin-bottom: 12px;
|
|
140
|
+
padding-bottom: 8px;
|
|
141
|
+
border-bottom: 1px solid rgba(6, 182, 212, 0.2);
|
|
128
142
|
}
|
|
143
|
+
|
|
144
|
+
.brand-cluster {
|
|
145
|
+
display: flex;
|
|
146
|
+
align-items: center;
|
|
147
|
+
gap: 10px;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.brand-mark {
|
|
151
|
+
width: 32px;
|
|
152
|
+
height: 32px;
|
|
153
|
+
border-radius: 8px;
|
|
154
|
+
background: rgba(8, 145, 178, 0.2);
|
|
155
|
+
border: 1px solid rgba(6, 182, 212, 0.4);
|
|
156
|
+
display: flex;
|
|
157
|
+
align-items: center;
|
|
158
|
+
justify-content: center;
|
|
159
|
+
flex-shrink: 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
129
162
|
.brand-meta {
|
|
130
163
|
display: flex;
|
|
131
164
|
flex-direction: column;
|
|
132
|
-
gap: 2px;
|
|
133
165
|
}
|
|
134
|
-
|
|
135
|
-
|
|
166
|
+
|
|
167
|
+
.brand-title {
|
|
168
|
+
font-size: 14px;
|
|
136
169
|
font-weight: 700;
|
|
137
|
-
|
|
170
|
+
color: #cffafe;
|
|
171
|
+
letter-spacing: 0.03em;
|
|
138
172
|
text-transform: uppercase;
|
|
139
|
-
color: #c7d2fe;
|
|
140
173
|
margin: 0;
|
|
141
174
|
}
|
|
142
|
-
|
|
175
|
+
|
|
176
|
+
.brand-subtitle {
|
|
143
177
|
font-size: 11px;
|
|
144
|
-
color: #
|
|
145
|
-
letter-spacing: 0.02em;
|
|
178
|
+
color: #67e8f9;
|
|
146
179
|
margin: 0;
|
|
180
|
+
font-family: 'JetBrains Mono', monospace;
|
|
147
181
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
justify-content: center;
|
|
182
|
+
|
|
183
|
+
.status-pill {
|
|
184
|
+
font-family: 'JetBrains Mono', monospace;
|
|
152
185
|
font-size: 10px;
|
|
153
186
|
font-weight: 700;
|
|
154
|
-
|
|
187
|
+
padding: 3px 8px;
|
|
188
|
+
border-radius: 6px;
|
|
189
|
+
background: rgba(6, 182, 212, 0.15);
|
|
190
|
+
border: 1px solid rgba(6, 182, 212, 0.4);
|
|
191
|
+
color: #22d3ee;
|
|
192
|
+
letter-spacing: 0.05em;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/* Telemetry Metric Cards */
|
|
196
|
+
.telemetry-row {
|
|
197
|
+
display: grid;
|
|
198
|
+
grid-template-columns: repeat(3, 1fr);
|
|
199
|
+
gap: 8px;
|
|
200
|
+
margin-bottom: 12px;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.metric-card {
|
|
204
|
+
background: rgba(8, 47, 61, 0.6);
|
|
205
|
+
border: 1px solid rgba(6, 182, 212, 0.25);
|
|
206
|
+
border-radius: 8px;
|
|
207
|
+
padding: 8px 10px;
|
|
208
|
+
display: flex;
|
|
209
|
+
flex-direction: column;
|
|
210
|
+
gap: 2px;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.metric-label {
|
|
214
|
+
font-family: 'JetBrains Mono', monospace;
|
|
215
|
+
font-size: 9px;
|
|
216
|
+
font-weight: 700;
|
|
217
|
+
color: #67e8f9;
|
|
218
|
+
letter-spacing: 0.05em;
|
|
155
219
|
text-transform: uppercase;
|
|
156
|
-
color: #818cf8;
|
|
157
|
-
background: rgba(99, 102, 241, 0.12);
|
|
158
|
-
border: 1px solid rgba(99, 102, 241, 0.3);
|
|
159
|
-
border-radius: 4px;
|
|
160
|
-
padding: 4px 8px;
|
|
161
220
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
221
|
+
|
|
222
|
+
.metric-value {
|
|
223
|
+
font-size: 13px;
|
|
224
|
+
font-weight: 700;
|
|
225
|
+
color: #ffffff;
|
|
226
|
+
font-family: 'JetBrains Mono', monospace;
|
|
168
227
|
overflow: hidden;
|
|
228
|
+
text-overflow: ellipsis;
|
|
229
|
+
white-space: nowrap;
|
|
169
230
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
height: 64px;
|
|
174
|
-
}
|
|
175
|
-
.telemetry-row {
|
|
231
|
+
|
|
232
|
+
/* Target Command Input Selector */
|
|
233
|
+
.target-box {
|
|
176
234
|
display: flex;
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
235
|
+
align-items: center;
|
|
236
|
+
gap: 8px;
|
|
237
|
+
margin-bottom: 10px;
|
|
238
|
+
background: rgba(0, 0, 0, 0.35);
|
|
239
|
+
border: 1px solid rgba(6, 182, 212, 0.2);
|
|
240
|
+
border-radius: 8px;
|
|
241
|
+
padding: 4px 8px;
|
|
184
242
|
}
|
|
243
|
+
|
|
244
|
+
.target-label {
|
|
245
|
+
font-family: 'JetBrains Mono', monospace;
|
|
246
|
+
font-size: 10px;
|
|
247
|
+
color: #67e8f9;
|
|
248
|
+
text-transform: uppercase;
|
|
249
|
+
white-space: nowrap;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.target-input {
|
|
253
|
+
flex: 1;
|
|
254
|
+
background: transparent;
|
|
255
|
+
border: none;
|
|
256
|
+
color: #ecfeff;
|
|
257
|
+
font-family: 'JetBrains Mono', monospace;
|
|
258
|
+
font-size: 12px;
|
|
259
|
+
outline: none;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.target-input::placeholder {
|
|
263
|
+
color: rgba(103, 232, 249, 0.4);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/* Action Buttons Grid (>=44px touch targets) */
|
|
185
267
|
.actions-grid {
|
|
186
268
|
display: grid;
|
|
187
269
|
grid-template-columns: repeat(3, 1fr);
|
|
188
|
-
gap:
|
|
189
|
-
margin-bottom:
|
|
270
|
+
gap: 6px;
|
|
271
|
+
margin-bottom: 10px;
|
|
190
272
|
}
|
|
273
|
+
|
|
191
274
|
.touch-btn {
|
|
192
275
|
min-height: 44px;
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
border: 1px solid rgba(99, 102, 241, 0.25);
|
|
199
|
-
color: #c7d2fe;
|
|
276
|
+
background: rgba(8, 145, 178, 0.16);
|
|
277
|
+
border: 1px solid rgba(6, 182, 212, 0.3);
|
|
278
|
+
border-radius: 8px;
|
|
279
|
+
color: #ecfeff;
|
|
280
|
+
font-family: 'JetBrains Mono', monospace;
|
|
200
281
|
font-size: 11px;
|
|
201
282
|
font-weight: 600;
|
|
202
|
-
letter-spacing: 0.
|
|
203
|
-
|
|
204
|
-
|
|
283
|
+
letter-spacing: 0.03em;
|
|
284
|
+
display: flex;
|
|
285
|
+
align-items: center;
|
|
286
|
+
justify-content: center;
|
|
205
287
|
cursor: pointer;
|
|
206
|
-
transition: background 0.15s
|
|
207
|
-
padding: 6px
|
|
288
|
+
transition: background 0.15s, border-color 0.15s, transform 0.05s;
|
|
289
|
+
padding: 4px 6px;
|
|
208
290
|
text-align: center;
|
|
209
291
|
}
|
|
292
|
+
|
|
210
293
|
.touch-btn:hover {
|
|
211
|
-
background: rgba(
|
|
212
|
-
border-color: rgba(
|
|
294
|
+
background: rgba(8, 145, 178, 0.3);
|
|
295
|
+
border-color: rgba(6, 182, 212, 0.6);
|
|
213
296
|
}
|
|
297
|
+
|
|
214
298
|
.touch-btn:active {
|
|
215
299
|
transform: translateY(1px);
|
|
216
300
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
301
|
+
|
|
302
|
+
/* Terminal Execution Output */
|
|
303
|
+
.terminal-deck {
|
|
304
|
+
background: #010c12;
|
|
305
|
+
border: 1px solid rgba(6, 182, 212, 0.25);
|
|
306
|
+
border-radius: 8px;
|
|
307
|
+
overflow: hidden;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.terminal-header {
|
|
311
|
+
display: flex;
|
|
312
|
+
align-items: center;
|
|
313
|
+
justify-content: space-between;
|
|
314
|
+
padding: 6px 10px;
|
|
315
|
+
background: rgba(8, 47, 61, 0.4);
|
|
316
|
+
border-bottom: 1px solid rgba(6, 182, 212, 0.2);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
.terminal-title {
|
|
320
|
+
font-family: 'JetBrains Mono', monospace;
|
|
321
|
+
font-size: 10px;
|
|
322
|
+
color: #67e8f9;
|
|
323
|
+
text-transform: uppercase;
|
|
324
|
+
letter-spacing: 0.05em;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.terminal-btn {
|
|
328
|
+
background: rgba(6, 182, 212, 0.15);
|
|
329
|
+
border: 1px solid rgba(6, 182, 212, 0.3);
|
|
330
|
+
border-radius: 4px;
|
|
331
|
+
color: #cffafe;
|
|
332
|
+
font-family: 'JetBrains Mono', monospace;
|
|
333
|
+
font-size: 9px;
|
|
334
|
+
padding: 2px 6px;
|
|
335
|
+
cursor: pointer;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.terminal-btn:hover {
|
|
339
|
+
background: rgba(6, 182, 212, 0.3);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.terminal-body {
|
|
343
|
+
margin: 0;
|
|
221
344
|
padding: 8px 10px;
|
|
222
|
-
font-family:
|
|
345
|
+
font-family: 'JetBrains Mono', monospace;
|
|
223
346
|
font-size: 11px;
|
|
224
347
|
line-height: 1.45;
|
|
225
|
-
color: #
|
|
226
|
-
min-height:
|
|
227
|
-
max-height:
|
|
348
|
+
color: #cffafe;
|
|
349
|
+
min-height: 60px;
|
|
350
|
+
max-height: 100px;
|
|
228
351
|
overflow-y: auto;
|
|
229
352
|
white-space: pre-wrap;
|
|
230
353
|
word-break: break-word;
|
|
231
354
|
}
|
|
232
355
|
</style>
|
|
233
356
|
|
|
234
|
-
<div class="header">
|
|
235
|
-
<div class="brand-
|
|
236
|
-
<
|
|
237
|
-
|
|
357
|
+
<div class="card-header">
|
|
358
|
+
<div class="brand-cluster">
|
|
359
|
+
<div class="brand-mark">
|
|
360
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#22d3ee" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
361
|
+
<path d="M4 17l6-6-6-6"/>
|
|
362
|
+
<path d="M12 19h8"/>
|
|
363
|
+
<circle cx="16" cy="8" r="2"/>
|
|
364
|
+
</svg>
|
|
365
|
+
</div>
|
|
366
|
+
<div class="brand-meta">
|
|
367
|
+
<h3 class="brand-title">CmdSmith</h3>
|
|
368
|
+
<span class="brand-subtitle">Pipeline Forge • v0.2.1</span>
|
|
369
|
+
</div>
|
|
238
370
|
</div>
|
|
239
|
-
<div id="status-
|
|
371
|
+
<div id="status-pill" class="status-pill">READY</div>
|
|
240
372
|
</div>
|
|
241
373
|
|
|
242
|
-
<div class="
|
|
243
|
-
<
|
|
244
|
-
|
|
245
|
-
<span>
|
|
246
|
-
|
|
374
|
+
<div class="telemetry-row">
|
|
375
|
+
<div class="metric-card">
|
|
376
|
+
<span class="metric-label">Commands</span>
|
|
377
|
+
<span id="stat-count" class="metric-value">7 Active</span>
|
|
378
|
+
</div>
|
|
379
|
+
<div class="metric-card">
|
|
380
|
+
<span class="metric-label">Scope</span>
|
|
381
|
+
<span id="stat-scope" class="metric-value">Global / Project</span>
|
|
382
|
+
</div>
|
|
383
|
+
<div class="metric-card">
|
|
384
|
+
<span class="metric-label">Engine</span>
|
|
385
|
+
<span id="stat-status" class="metric-value">Engine Ready</span>
|
|
247
386
|
</div>
|
|
248
387
|
</div>
|
|
249
388
|
|
|
389
|
+
<div class="target-box">
|
|
390
|
+
<span class="target-label">Target Command:</span>
|
|
391
|
+
<input id="cmd-input" class="target-input" type="text" value="tr-first" placeholder="e.g. tr-first, brand-lint" />
|
|
392
|
+
</div>
|
|
393
|
+
|
|
250
394
|
<div class="actions-grid">
|
|
251
|
-
<button id="btn-
|
|
252
|
-
<button id="btn-
|
|
253
|
-
<button id="btn-
|
|
395
|
+
<button id="btn-library" class="touch-btn" type="button">LIBRARY</button>
|
|
396
|
+
<button id="btn-list" class="touch-btn" type="button">LIST</button>
|
|
397
|
+
<button id="btn-show" class="touch-btn" type="button">SHOW</button>
|
|
398
|
+
<button id="btn-history" class="touch-btn" type="button">HISTORY</button>
|
|
399
|
+
<button id="btn-test" class="touch-btn" type="button">TEST</button>
|
|
400
|
+
<button id="btn-status" class="touch-btn" type="button">STATUS</button>
|
|
254
401
|
</div>
|
|
255
402
|
|
|
256
|
-
<div
|
|
403
|
+
<div class="terminal-deck">
|
|
404
|
+
<div class="terminal-header">
|
|
405
|
+
<span class="terminal-title">Console Output</span>
|
|
406
|
+
<button id="btn-copy" class="terminal-btn" type="button">COPY</button>
|
|
407
|
+
</div>
|
|
408
|
+
<pre id="card-out" class="terminal-body">Dynamic agent command composition engine ready. Click any action above to inspect pipeline state.</pre>
|
|
409
|
+
</div>
|
|
257
410
|
`;
|
|
258
411
|
|
|
259
|
-
|
|
412
|
+
const getTarget = () => {
|
|
413
|
+
const input = root.querySelector('#cmd-input');
|
|
414
|
+
return (input?.value || 'tr-first').trim();
|
|
415
|
+
};
|
|
416
|
+
|
|
417
|
+
root.querySelector('#btn-library')?.addEventListener('click', () => {
|
|
418
|
+
this.execute('library');
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
root.querySelector('#btn-list')?.addEventListener('click', () => {
|
|
260
422
|
this.execute('list');
|
|
261
423
|
});
|
|
262
|
-
|
|
263
|
-
|
|
424
|
+
|
|
425
|
+
root.querySelector('#btn-show')?.addEventListener('click', () => {
|
|
426
|
+
this.execute('show', [getTarget()]);
|
|
264
427
|
});
|
|
265
|
-
|
|
266
|
-
|
|
428
|
+
|
|
429
|
+
root.querySelector('#btn-history')?.addEventListener('click', () => {
|
|
430
|
+
this.execute('history', [getTarget()]);
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
root.querySelector('#btn-test')?.addEventListener('click', () => {
|
|
434
|
+
this.execute('test', [getTarget()]);
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
root.querySelector('#btn-status')?.addEventListener('click', () => {
|
|
438
|
+
this.execute('status');
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
root.querySelector('#btn-copy')?.addEventListener('click', () => {
|
|
442
|
+
this.copyOutput();
|
|
267
443
|
});
|
|
268
444
|
}
|
|
269
445
|
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"version": "0.1.0",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"total-recall-brain": "3.40.
|
|
12
|
+
"total-recall-brain": "3.40.3"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"node_modules/@hexagon/base64": {
|
|
@@ -2566,9 +2566,9 @@
|
|
|
2566
2566
|
}
|
|
2567
2567
|
},
|
|
2568
2568
|
"node_modules/total-recall-brain": {
|
|
2569
|
-
"version": "3.40.
|
|
2570
|
-
"resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.40.
|
|
2571
|
-
"integrity": "sha512-
|
|
2569
|
+
"version": "3.40.3",
|
|
2570
|
+
"resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.40.3.tgz",
|
|
2571
|
+
"integrity": "sha512-E5elOF/OvGAvDdXVDUQaV1xa7hWDOVYmK3z8V+zPNYVEtEoGhJplY1Rtqu76oHezwJDQRIhc4+3HhpvjH5fIww==",
|
|
2572
2572
|
"dev": true,
|
|
2573
2573
|
"license": "MIT",
|
|
2574
2574
|
"workspaces": [
|
|
@@ -2597,7 +2597,8 @@
|
|
|
2597
2597
|
"bin": {
|
|
2598
2598
|
"antigravity": "bin/antigravity.mjs",
|
|
2599
2599
|
"total-recall": "bin/total-recall.mjs",
|
|
2600
|
-
"total-recall-memory": "bin/total-recall-memory.mjs"
|
|
2600
|
+
"total-recall-memory": "bin/total-recall-memory.mjs",
|
|
2601
|
+
"vibebrain": "bin/total-recall.mjs"
|
|
2601
2602
|
},
|
|
2602
2603
|
"optionalDependencies": {
|
|
2603
2604
|
"playwright": "^1.60.0"
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tr-plugin-embeddings",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"private": true,
|
|
5
4
|
"type": "module",
|
|
6
5
|
"description": "Local embedding model management: provider/model status, benchmark, index build and coverage",
|
|
7
6
|
"scripts": {
|
|
8
7
|
"test": "node --test test/*.test.mjs"
|
|
9
8
|
},
|
|
10
|
-
"license": "MIT"
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"files": [
|
|
11
|
+
"cli.mjs",
|
|
12
|
+
"plugin.json",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE",
|
|
15
|
+
"ui/"
|
|
16
|
+
]
|
|
11
17
|
}
|