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.
Files changed (33) hide show
  1. package/package.json +1 -1
  2. package/scaffold/.agent/skills/total-recall/plugins/auth/package-lock.json +111 -7
  3. package/scaffold/.agent/skills/total-recall/plugins/auth/src/provider-rotation-recipes.mjs +1 -1
  4. package/scaffold/.agent/skills/total-recall/plugins/cli-agents/ui/card.js +406 -11
  5. package/scaffold/.agent/skills/total-recall/plugins/code-quality/package-lock.json +6 -5
  6. package/scaffold/.agent/skills/total-recall/plugins/code-quality/package.json +1 -1
  7. package/scaffold/.agent/skills/total-recall/plugins/code-quality/plugin.json +1 -1
  8. package/scaffold/.agent/skills/total-recall/plugins/code-quality/ui/card.js +276 -180
  9. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package-lock.json +6 -5
  10. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/package.json +1 -1
  11. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/plugin.json +13 -13
  12. package/scaffold/.agent/skills/total-recall/plugins/composable-cli/ui/card.js +340 -164
  13. package/scaffold/.agent/skills/total-recall/plugins/embeddings/package-lock.json +6 -5
  14. package/scaffold/.agent/skills/total-recall/plugins/embeddings/package.json +8 -2
  15. package/scaffold/.agent/skills/total-recall/plugins/embeddings/ui/card.js +295 -178
  16. package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/LICENSE +1 -1
  17. package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/package-lock.json +6 -5
  18. package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/package.json +1 -1
  19. package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/plugin.json +1 -1
  20. package/scaffold/.agent/skills/total-recall/plugins/git-sentinel/ui/card.js +302 -168
  21. package/scaffold/.agent/skills/total-recall/plugins/mesh/package.json +9 -2
  22. package/scaffold/.agent/skills/total-recall/plugins/mesh/plugin.json +8 -5
  23. package/scaffold/.agent/skills/total-recall/plugins/mesh/ui/card.js +444 -27
  24. package/scaffold/.agent/skills/total-recall/plugins/openwiki/package-lock.json +124 -1404
  25. package/scaffold/.agent/skills/total-recall/plugins/openwiki/package.json +9 -2
  26. package/scaffold/.agent/skills/total-recall/plugins/openwiki/plugin.json +0 -2
  27. package/scaffold/.agent/skills/total-recall/plugins/openwiki/ui/card.js +312 -133
  28. package/scaffold/.agent/skills/total-recall/plugins/security/package-lock.json +6 -5
  29. package/scaffold/.agent/skills/total-recall/plugins/security/package.json +1 -1
  30. package/scaffold/.agent/skills/total-recall/plugins/security/plugin.json +1 -3
  31. package/scaffold/.agent/skills/total-recall/plugins/security/ui/card.js +287 -12
  32. package/src/core/brain-updates.mjs +4 -1
  33. package/scaffold/.agent/skills/total-recall/plugins/mesh/test-support/memory-root.mjs +0 -14
@@ -1,6 +1,7 @@
1
1
  /**
2
- * Code Quality Gates — Deterministic Quality Gate Engine
3
- * Bespoke Animated Web Component Card Face with Live Gate Waveform Visualizer.
2
+ * Code Quality Gates — Deterministic Code Verification & Fail-Closed Gates
3
+ * Purpose-built domain interface: queries latest gate report on mount, displays real
4
+ * deterministic gate findings and stale file tracking, and exposes authentic execution verbs.
4
5
  *
5
6
  * Zero emojis, authentic commercial brand identity, touch-first ergonomics (>=44px).
6
7
  */
@@ -8,23 +9,65 @@
8
9
  export class CodeQualityCard extends HTMLElement {
9
10
  constructor() {
10
11
  super();
11
- this.status = 'Idle';
12
- this.passRate = '100%';
13
- this.activeGate = 'Lint & Typecheck';
14
12
  this.executing = false;
13
+ this.telemetry = {
14
+ findings: '0 Findings',
15
+ tier: 'Fast',
16
+ status: 'Clean'
17
+ };
15
18
  }
16
19
 
17
20
  connectedCallback() {
18
- this.attachShadow({ mode: 'open' });
21
+ if (!this.shadowRoot) this.attachShadow({ mode: 'open' });
19
22
  this.render();
20
- this.initWaveformAnimation();
23
+ this.refreshStatus();
24
+ }
25
+
26
+ async refreshStatus() {
27
+ try {
28
+ const res = await this.host?.run('report', []);
29
+ let text = '';
30
+ if (typeof res === 'object') {
31
+ text = res.output || JSON.stringify(res, null, 2);
32
+ } else {
33
+ text = String(res || '');
34
+ }
35
+
36
+ const isClean = text.includes('0 finding') || text.includes('No findings');
37
+ const isStale = text.includes('STALE');
38
+
39
+ this.telemetry = {
40
+ findings: isClean ? '0 Findings' : 'Findings Detected',
41
+ tier: text.includes('tier=full') ? 'Full Tier' : 'Fast Tier',
42
+ status: isClean ? (isStale ? 'Stale' : 'Pass') : 'Needs Review'
43
+ };
44
+ this.updateView();
45
+ } catch {
46
+ this.telemetry = {
47
+ findings: '0 Findings',
48
+ tier: 'Gate Deck',
49
+ status: 'Ready'
50
+ };
51
+ this.updateView();
52
+ }
53
+ }
54
+
55
+ updateView() {
56
+ const root = this.shadowRoot;
57
+ if (!root) return;
58
+
59
+ const findingsEl = root.querySelector('#stat-findings');
60
+ const tierEl = root.querySelector('#stat-tier');
61
+ const statusEl = root.querySelector('#stat-status');
62
+ if (findingsEl) findingsEl.textContent = this.telemetry.findings;
63
+ if (tierEl) tierEl.textContent = this.telemetry.tier;
64
+ if (statusEl) statusEl.textContent = this.telemetry.status;
21
65
  }
22
66
 
23
67
  async execute(action, args = []) {
24
- const out = this.shadowRoot.querySelector('#card-out');
25
- const statusBadge = this.shadowRoot.querySelector('#status-badge');
26
- if (out) out.textContent = `[GATE CONTROLLER] Executing ${action.toUpperCase()}...`;
27
- if (statusBadge) statusBadge.textContent = 'RUNNING';
68
+ const out = this.shadowRoot?.querySelector('#card-out');
69
+ const actionLabel = action.toUpperCase();
70
+ if (out) out.textContent = `[CODE QUALITY] Running ${actionLabel}...`;
28
71
  this.executing = true;
29
72
 
30
73
  try {
@@ -36,234 +79,287 @@ export class CodeQualityCard extends HTMLElement {
36
79
  text = String(res || 'Execution completed without output.');
37
80
  }
38
81
  if (out) out.textContent = text.trim();
39
- if (statusBadge) statusBadge.textContent = 'PASS';
82
+ if (['gate', 'snapshot', 'report'].includes(action)) {
83
+ this.refreshStatus();
84
+ }
40
85
  } catch (err) {
41
- if (out) out.textContent = `[GATE FAILURE] ${err.message}`;
42
- if (statusBadge) statusBadge.textContent = 'FAIL';
86
+ if (out) out.textContent = `[QUALITY FAILURE] ${err.message}`;
43
87
  } finally {
44
88
  this.executing = false;
45
89
  }
46
90
  }
47
91
 
48
- initWaveformAnimation() {
49
- const canvas = this.shadowRoot.querySelector('#qa-canvas');
50
- if (!canvas) return;
51
- const ctx = canvas.getContext('2d');
52
- if (!ctx) return;
53
-
54
- let offset = 0;
55
- const draw = () => {
56
- if (!this.isConnected) return;
57
- ctx.clearRect(0, 0, canvas.width, canvas.height);
58
-
59
- const w = canvas.width;
60
- const h = canvas.height;
61
- const mid = h / 2;
62
-
63
- // Coordinate grid lines
64
- ctx.strokeStyle = 'rgba(234, 179, 8, 0.12)';
65
- ctx.lineWidth = 1;
66
- ctx.beginPath();
67
- for (let x = 0; x < w; x += 20) {
68
- ctx.moveTo(x, 0);
69
- ctx.lineTo(x, h);
70
- }
71
- for (let y = 0; y < h; y += 15) {
72
- ctx.moveTo(0, y);
73
- ctx.lineTo(w, y);
74
- }
75
- ctx.stroke();
76
-
77
- // Quality signal waveform
78
- ctx.beginPath();
79
- ctx.moveTo(0, mid);
80
- for (let x = 0; x < w; x++) {
81
- const freq = this.executing ? 0.08 : 0.04;
82
- const amp = this.executing ? 18 : 10;
83
- const y = mid + Math.sin((x + offset) * freq) * Math.cos((x + offset) * 0.02) * amp;
84
- ctx.lineTo(x, y);
85
- }
86
- ctx.strokeStyle = this.executing ? '#38bdf8' : '#eab308';
87
- ctx.lineWidth = 2;
88
- ctx.shadowColor = ctx.strokeStyle;
89
- ctx.shadowBlur = 8;
90
- ctx.stroke();
91
- ctx.shadowBlur = 0;
92
-
93
- // Pulse scan head
94
- const scanX = (offset * 1.5) % w;
95
- ctx.fillStyle = '#fef08a';
96
- ctx.beginPath();
97
- ctx.arc(scanX, mid, 3, 0, Math.PI * 2);
98
- ctx.fill();
99
-
100
- offset += this.executing ? 3 : 1;
101
- requestAnimationFrame(draw);
102
- };
103
-
104
- requestAnimationFrame(draw);
105
- }
106
-
107
92
  render() {
108
- this.shadowRoot.innerHTML = `
93
+ const root = this.shadowRoot;
94
+ if (!root) return;
95
+
96
+ root.innerHTML = `
109
97
  <style>
110
98
  :host {
111
99
  display: block;
112
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
113
- background: #090d16;
114
- color: #fef9c3;
115
- border-radius: 8px;
116
- border: 1px solid rgba(234, 179, 8, 0.35);
117
- box-shadow: 0 10px 28px rgba(0, 0, 0, 0.45);
118
- padding: 18px;
100
+ font-family: 'Space Grotesk', -apple-system, sans-serif;
101
+ background: #03171e;
102
+ color: #ecfeff;
103
+ border-radius: 12px;
104
+ border: 1px solid #0e4a5e;
105
+ padding: 14px;
119
106
  box-sizing: border-box;
120
- overflow: hidden;
107
+ user-select: none;
121
108
  }
122
- .header {
123
- display: flex;
124
- justify-content: space-between;
125
- align-items: flex-start;
126
- margin-bottom: 14px;
109
+
110
+ * { box-sizing: border-box; }
111
+
112
+ /* Telemetry Metric Cards */
113
+ .telemetry-row {
114
+ display: grid;
115
+ grid-template-columns: repeat(3, 1fr);
116
+ gap: 8px;
117
+ margin-bottom: 12px;
127
118
  }
128
- .brand-meta {
119
+
120
+ .metric-card {
121
+ background: rgba(8, 47, 61, 0.6);
122
+ border: 1px solid rgba(6, 182, 212, 0.25);
123
+ border-radius: 8px;
124
+ padding: 8px 10px;
129
125
  display: flex;
130
126
  flex-direction: column;
131
127
  gap: 2px;
132
128
  }
133
- .title {
134
- font-size: 16px;
129
+
130
+ .metric-label {
131
+ font-family: 'JetBrains Mono', monospace;
132
+ font-size: 9px;
135
133
  font-weight: 700;
136
- letter-spacing: 0.04em;
134
+ color: #67e8f9;
135
+ letter-spacing: 0.05em;
137
136
  text-transform: uppercase;
138
- color: #fef08a;
139
- margin: 0;
140
- }
141
- .subtitle {
142
- font-size: 11px;
143
- color: #a1a1aa;
144
- letter-spacing: 0.02em;
145
- margin: 0;
146
137
  }
147
- .badge {
148
- display: inline-flex;
149
- align-items: center;
150
- justify-content: center;
151
- font-size: 10px;
138
+
139
+ .metric-value {
140
+ font-size: 13px;
152
141
  font-weight: 700;
153
- letter-spacing: 0.08em;
154
- text-transform: uppercase;
155
- color: #eab308;
156
- background: rgba(234, 179, 8, 0.12);
157
- border: 1px solid rgba(234, 179, 8, 0.3);
158
- border-radius: 4px;
159
- padding: 4px 8px;
160
- }
161
- .visual-display {
162
- position: relative;
163
- background: #030712;
164
- border: 1px solid rgba(234, 179, 8, 0.2);
165
- border-radius: 6px;
166
- margin-bottom: 14px;
142
+ color: #ffffff;
143
+ font-family: 'JetBrains Mono', monospace;
167
144
  overflow: hidden;
145
+ text-overflow: ellipsis;
146
+ white-space: nowrap;
168
147
  }
169
- canvas {
170
- display: block;
171
- width: 100%;
172
- height: 64px;
148
+
149
+ /* Gate Status Deck */
150
+ .gate-deck {
151
+ background: rgba(0, 0, 0, 0.35);
152
+ border: 1px solid rgba(6, 182, 212, 0.2);
153
+ border-radius: 8px;
154
+ padding: 8px 10px;
155
+ margin-bottom: 10px;
173
156
  }
174
- .telemetry-row {
157
+
158
+ .gate-header {
159
+ font-family: 'JetBrains Mono', monospace;
160
+ font-size: 9px;
161
+ color: #67e8f9;
162
+ text-transform: uppercase;
163
+ letter-spacing: 0.05em;
164
+ margin-bottom: 6px;
165
+ }
166
+
167
+ .gate-chips {
175
168
  display: flex;
176
- justify-content: space-between;
177
- padding: 6px 10px;
178
- background: rgba(255, 255, 255, 0.03);
179
- border-top: 1px solid rgba(234, 179, 8, 0.15);
180
- font-family: monospace;
169
+ flex-wrap: wrap;
170
+ gap: 6px;
171
+ }
172
+
173
+ .gate-chip {
174
+ display: flex;
175
+ align-items: center;
176
+ gap: 6px;
177
+ padding: 3px 8px;
178
+ border-radius: 6px;
181
179
  font-size: 11px;
182
- color: #d4d4d8;
180
+ font-family: 'JetBrains Mono', monospace;
181
+ background: rgba(6, 182, 212, 0.12);
182
+ border: 1px solid rgba(6, 182, 212, 0.3);
183
+ color: #cffafe;
184
+ }
185
+
186
+ .gate-dot {
187
+ width: 6px;
188
+ height: 6px;
189
+ border-radius: 50%;
190
+ background: #06b6d4;
191
+ box-shadow: 0 0 6px rgba(6, 182, 212, 0.8);
183
192
  }
193
+
194
+ /* Action Buttons Grid (>=44px touch targets) */
184
195
  .actions-grid {
185
196
  display: grid;
186
197
  grid-template-columns: repeat(3, 1fr);
187
- gap: 8px;
188
- margin-bottom: 12px;
198
+ gap: 6px;
199
+ margin-bottom: 10px;
189
200
  }
190
- .touch-btn {
201
+
202
+ .btn-action {
191
203
  min-height: 44px;
192
204
  min-width: 44px;
193
- display: inline-flex;
194
- align-items: center;
195
- justify-content: center;
196
- background: rgba(234, 179, 8, 0.08);
197
- border: 1px solid rgba(234, 179, 8, 0.25);
198
- color: #fef08a;
205
+ background: rgba(255, 255, 255, 0.04);
206
+ border: 1px solid rgba(6, 182, 212, 0.25);
207
+ border-radius: 8px;
208
+ color: #ecfeff;
209
+ font-family: 'Space Grotesk', sans-serif;
199
210
  font-size: 11px;
200
- font-weight: 600;
201
- letter-spacing: 0.04em;
202
- text-transform: uppercase;
203
- border-radius: 6px;
211
+ font-weight: 700;
212
+ letter-spacing: 0.02em;
204
213
  cursor: pointer;
205
- transition: background 0.15s ease, border-color 0.15s ease;
206
- padding: 6px 8px;
214
+ touch-action: manipulation;
215
+ display: flex;
216
+ align-items: center;
217
+ justify-content: center;
207
218
  text-align: center;
219
+ padding: 6px;
220
+ transition: all 0.15s ease;
208
221
  }
209
- .touch-btn:hover {
210
- background: rgba(234, 179, 8, 0.18);
211
- border-color: rgba(234, 179, 8, 0.5);
222
+
223
+ .btn-action:hover {
224
+ background: #0e7490;
225
+ border-color: #06b6d4;
226
+ color: #ffffff;
212
227
  }
213
- .touch-btn:active {
214
- transform: translateY(1px);
228
+
229
+ .btn-action:active {
230
+ transform: scale(0.98);
215
231
  }
216
- .output-box {
217
- background: #020617;
218
- border: 1px solid rgba(234, 179, 8, 0.2);
219
- border-radius: 6px;
232
+
233
+ .btn-action.btn-primary {
234
+ background: rgba(6, 182, 212, 0.2);
235
+ border-color: #06b6d4;
236
+ color: #22d3ee;
237
+ }
238
+
239
+ .btn-action.btn-primary:hover {
240
+ background: #06b6d4;
241
+ color: #082f49;
242
+ }
243
+
244
+ /* Terminal Console */
245
+ .terminal-container {
246
+ background: #010b0e;
247
+ border: 1px solid rgba(6, 182, 212, 0.2);
248
+ border-radius: 8px;
220
249
  padding: 8px 10px;
221
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
250
+ }
251
+
252
+ .terminal-header {
253
+ display: flex;
254
+ justify-content: space-between;
255
+ align-items: center;
256
+ margin-bottom: 4px;
257
+ padding-bottom: 4px;
258
+ border-bottom: 1px solid rgba(6, 182, 212, 0.1);
259
+ }
260
+
261
+ .terminal-label {
262
+ font-family: 'JetBrains Mono', monospace;
263
+ font-size: 9px;
264
+ color: #67e8f9;
265
+ text-transform: uppercase;
266
+ letter-spacing: 0.05em;
267
+ }
268
+
269
+ .terminal-copy {
270
+ background: none;
271
+ border: none;
272
+ color: #22d3ee;
273
+ font-family: 'JetBrains Mono', monospace;
274
+ font-size: 10px;
275
+ cursor: pointer;
276
+ padding: 2px 4px;
277
+ border-radius: 4px;
278
+ }
279
+
280
+ .terminal-copy:hover {
281
+ background: rgba(6, 182, 212, 0.2);
282
+ }
283
+
284
+ .terminal-readout {
285
+ font-family: 'JetBrains Mono', monospace;
222
286
  font-size: 11px;
223
- line-height: 1.45;
224
- color: #94a3b8;
287
+ line-height: 1.4;
288
+ color: #22d3ee;
225
289
  min-height: 48px;
226
- max-height: 85px;
290
+ max-height: 120px;
227
291
  overflow-y: auto;
228
292
  white-space: pre-wrap;
229
- word-break: break-word;
293
+ word-break: break-all;
230
294
  }
231
295
  </style>
232
296
 
233
- <div class="header">
234
- <div class="brand-meta">
235
- <h2 class="title">Code Quality Gates</h2>
236
- <p class="subtitle">Deterministic Gate Enforcement Engine</p>
297
+ <!-- Live Telemetry -->
298
+ <div class="telemetry-row">
299
+ <div class="metric-card">
300
+ <span class="metric-label">Gate Findings</span>
301
+ <span class="metric-value" id="stat-findings">${this.telemetry.findings}</span>
302
+ </div>
303
+ <div class="metric-card">
304
+ <span class="metric-label">Execution Tier</span>
305
+ <span class="metric-value" id="stat-tier">${this.telemetry.tier}</span>
306
+ </div>
307
+ <div class="metric-card">
308
+ <span class="metric-label">Gate State</span>
309
+ <span class="metric-value" id="stat-status">${this.telemetry.status}</span>
237
310
  </div>
238
- <div id="status-badge" class="badge">READY</div>
239
311
  </div>
240
312
 
241
- <div class="visual-display">
242
- <canvas id="qa-canvas" width="340" height="64"></canvas>
243
- <div class="telemetry-row">
244
- <span>Gate: Strict Pass/Fail</span>
245
- <span>Coverage: 100%</span>
313
+ <!-- Configured Gate Deck -->
314
+ <div class="gate-deck">
315
+ <div class="gate-header">Deterministic Verification Gates</div>
316
+ <div class="gate-chips">
317
+ <div class="gate-chip"><span class="gate-dot"></span>Syntax &amp; Types</div>
318
+ <div class="gate-chip"><span class="gate-dot"></span>Git Hygiene</div>
319
+ <div class="gate-chip"><span class="gate-dot"></span>Security Deps</div>
320
+ <div class="gate-chip"><span class="gate-dot"></span>SSSS Registry</div>
246
321
  </div>
247
322
  </div>
248
323
 
324
+ <!-- Action Buttons Grid (>=44px touch targets) -->
249
325
  <div class="actions-grid">
250
- <button id="btn-status" class="touch-btn" type="button">Audit</button>
251
- <button id="btn-lint" class="touch-btn" type="button">Lint</button>
252
- <button id="btn-test" class="touch-btn" type="button">Gates</button>
326
+ <button class="btn-action btn-primary" data-cmd="report">REPORT</button>
327
+ <button class="btn-action" data-cmd="snapshot">SNAPSHOT</button>
328
+ <button class="btn-action" data-cmd="gate">RUN GATES</button>
329
+ <button class="btn-action" data-cmd="detect">DETECT GATES</button>
330
+ <button class="btn-action" data-cmd="config">CONFIG</button>
331
+ <button class="btn-action" data-cmd="init">INIT</button>
253
332
  </div>
254
333
 
255
- <div id="card-out" class="output-box">Quality monitoring telemetry active. All gates operational.</div>
334
+ <!-- Live Terminal Output -->
335
+ <div class="terminal-container">
336
+ <div class="terminal-header">
337
+ <span class="terminal-label">Verification Console</span>
338
+ <button class="terminal-copy" id="btn-copy" title="Copy console output">Copy</button>
339
+ </div>
340
+ <div class="terminal-readout" id="card-out">Gatekeeper initialized. Ready for code verification.</div>
341
+ </div>
256
342
  `;
257
343
 
258
- this.shadowRoot.querySelector('#btn-status')?.addEventListener('click', () => {
259
- this.execute('status');
260
- });
261
- this.shadowRoot.querySelector('#btn-lint')?.addEventListener('click', () => {
262
- this.execute('check');
263
- });
264
- this.shadowRoot.querySelector('#btn-test')?.addEventListener('click', () => {
265
- this.execute('run');
344
+ const buttons = root.querySelectorAll('.btn-action');
345
+ buttons.forEach(btn => {
346
+ btn.addEventListener('click', () => {
347
+ const cmd = btn.getAttribute('data-cmd');
348
+ if (cmd) this.execute(cmd, []);
349
+ });
266
350
  });
351
+
352
+ const copyBtn = root.querySelector('#btn-copy');
353
+ if (copyBtn) {
354
+ copyBtn.addEventListener('click', () => {
355
+ const out = root.querySelector('#card-out');
356
+ if (out && out.textContent) {
357
+ navigator.clipboard?.writeText(out.textContent);
358
+ copyBtn.textContent = 'Copied!';
359
+ setTimeout(() => { copyBtn.textContent = 'Copy'; }, 1500);
360
+ }
361
+ });
362
+ }
267
363
  }
268
364
  }
269
365
 
@@ -12,7 +12,7 @@
12
12
  "@gregiteen/ssss-cli": "0.11.2"
13
13
  },
14
14
  "devDependencies": {
15
- "total-recall-brain": "3.40.1"
15
+ "total-recall-brain": "3.40.3"
16
16
  }
17
17
  },
18
18
  "node_modules/@gregiteen/ssss-cli": {
@@ -2595,9 +2595,9 @@
2595
2595
  }
2596
2596
  },
2597
2597
  "node_modules/total-recall-brain": {
2598
- "version": "3.40.1",
2599
- "resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.40.1.tgz",
2600
- "integrity": "sha512-tZMnDHXsMT1sa698oF26Np/G4k+Cn4ZXpTdo+BTNOvUMYEhxWR+7Tl+upHLMhcEEPuEM0EiAObL53a9JELzGag==",
2598
+ "version": "3.40.3",
2599
+ "resolved": "https://registry.npmjs.org/total-recall-brain/-/total-recall-brain-3.40.3.tgz",
2600
+ "integrity": "sha512-E5elOF/OvGAvDdXVDUQaV1xa7hWDOVYmK3z8V+zPNYVEtEoGhJplY1Rtqu76oHezwJDQRIhc4+3HhpvjH5fIww==",
2601
2601
  "dev": true,
2602
2602
  "license": "MIT",
2603
2603
  "workspaces": [
@@ -2626,7 +2626,8 @@
2626
2626
  "bin": {
2627
2627
  "antigravity": "bin/antigravity.mjs",
2628
2628
  "total-recall": "bin/total-recall.mjs",
2629
- "total-recall-memory": "bin/total-recall-memory.mjs"
2629
+ "total-recall-memory": "bin/total-recall-memory.mjs",
2630
+ "vibebrain": "bin/total-recall.mjs"
2630
2631
  },
2631
2632
  "optionalDependencies": {
2632
2633
  "playwright": "^1.60.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tr-plugin-composable-cli",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "description": "Total Recall composable CLI plugin: create, compose, register, test and safely run custom verbs; every command listed in the instruction surfaces.",
6
6
  "scripts": {
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://github.com/gregiteen/total-recall/blob/main/metadata.plugin.schema.json",
3
3
  "id": "composable-cli",
4
4
  "name": "Composable CLI",
5
- "version": "0.2.1",
5
+ "version": "0.2.2",
6
6
  "description": "Dynamic agent command composition engine with pipeline registration, versioning, and execution.",
7
7
  "author": "Total Recall contributors",
8
8
  "license": "MIT",
@@ -118,30 +118,30 @@
118
118
  }
119
119
  ],
120
120
  "card_face": {
121
- "skin": "studio-rack",
121
+ "skin": "cyber-forge",
122
122
  "theme": "vibrant",
123
123
  "headline": "Dynamic Agent Command Composition",
124
- "primary_color": "#14b8a6",
125
- "secondary_color": "#134e4a",
126
- "accent_color": "#2dd4bf",
124
+ "primary_color": "#0891b2",
125
+ "secondary_color": "#083344",
126
+ "accent_color": "#06b6d4",
127
127
  "touch_layout": "comfortable",
128
128
  "interactive": true,
129
129
  "quick_actions": [
130
130
  {
131
- "subcommand": "status",
132
- "label": "STATUS"
131
+ "subcommand": "library",
132
+ "label": "LIBRARY"
133
133
  },
134
134
  {
135
- "subcommand": "create",
136
- "label": "CREATE"
135
+ "subcommand": "list",
136
+ "label": "LIST"
137
137
  },
138
138
  {
139
- "subcommand": "read",
140
- "label": "READ"
139
+ "subcommand": "show",
140
+ "label": "SHOW"
141
141
  },
142
142
  {
143
- "subcommand": "update",
144
- "label": "UPDATE"
143
+ "subcommand": "history",
144
+ "label": "HISTORY"
145
145
  }
146
146
  ]
147
147
  },