vektor-slipstream 1.1.3 → 1.1.5

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vektor-slipstream",
3
- "version": "1.1.3",
3
+ "version": "1.1.5",
4
4
  "description": "Hardware-accelerated persistent memory for AI agents. Local-first, zero cloud dependency, $0 embedding cost.",
5
5
  "main": "slipstream-core.js",
6
6
  "bin": {
@@ -13,7 +13,7 @@ console.log(' \u255a\u2588\u2588\u2557 \u2588\u2588\u2554\u255d\u2588\u2588\u25
13
13
  console.log(' \u255a\u2588\u2588\u2588\u2588\u2554\u255d \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2557 \u2588\u2588\u2551 \u255a\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2551 ');
14
14
  console.log(' \u255a\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d ');
15
15
  console.log('');
16
- console.log(' SLIPSTREAM v1.0.8 \u00b7 Sovereign Agent Memory');
16
+ console.log(' SLIPSTREAM v' + require('./package.json').version + ' \u00b7 Sovereign Agent Memory');
17
17
  console.log(' \u2514\u2500 Loading... (first run downloads ~25MB model \u2014 one time only)');
18
18
  console.log('');
19
19
 
package/vektor-tui.js CHANGED
@@ -14,20 +14,20 @@ try { PKG = require('./package.json'); } catch(_) { PKG = { version: '1.1.1' };
14
14
 
15
15
  // ── PALETTE (SBB-inspired warm dark) ─────────────────────────────────────────
16
16
  const P = {
17
- bg: '#151510',
18
- bg2: '#1e1e18',
19
- card: '#1a1a14',
17
+ bg: 'black',
18
+ bg2: 'black',
19
+ card: 'black',
20
20
  border: '#2a2a20',
21
- orange: '#e8742a',
22
- amber: '#d4a017',
23
- cream: '#c8b896',
24
- dim: '#5a5040',
21
+ orange: 'yellow',
22
+ amber: 'yellow',
23
+ cream: 'white',
24
+ dim: 'grey',
25
25
  white: '#e8e0d0',
26
- green: '#7ab87a',
27
- red: '#c45050',
28
- cyan: '#7ab8c8',
29
- sel: '#2a2418',
30
- selbrd: '#e8742a',
26
+ green: 'green',
27
+ red: 'red',
28
+ cyan: 'cyan',
29
+ sel: 'black',
30
+ selbrd: 'yellow',
31
31
  };
32
32
 
33
33
  // ── SCREEN ────────────────────────────────────────────────────────────────────
@@ -36,7 +36,7 @@ const screen = blessed.screen({ smartCSR: true, fullUnicode: true, title: 'VEKTO
36
36
  // ── TOP SEARCH BAR ────────────────────────────────────────────────────────────
37
37
  const searchBar = blessed.box({
38
38
  top: 0, left: 0, width: '100%', height: 3,
39
- style: { bg: P.bg2, fg: P.cream },
39
+ style: { bg: 'black', fg: 'white' },
40
40
  content: '',
41
41
  });
42
42
 
@@ -44,7 +44,7 @@ const searchLeft = blessed.textbox({
44
44
  parent: searchBar,
45
45
  top: 0, left: 0, width: '45%', height: 3,
46
46
  border: { type: 'line' },
47
- style: { fg: P.cream, bg: P.bg2, border: { fg: P.border }, focus: { border: { fg: P.orange } } },
47
+ style: { fg: 'white', bg: 'black', border: { fg: 'grey' }, focus: { border: { fg: 'yellow' } } },
48
48
  inputOnFocus: true,
49
49
  value: 'search memories...',
50
50
  });
@@ -53,7 +53,7 @@ const searchRight = blessed.textbox({
53
53
  parent: searchBar,
54
54
  top: 0, left: '45%', width: '35%', height: 3,
55
55
  border: { type: 'line' },
56
- style: { fg: P.cream, bg: P.bg2, border: { fg: P.border }, focus: { border: { fg: P.orange } } },
56
+ style: { fg: 'white', bg: 'black', border: { fg: 'grey' }, focus: { border: { fg: 'yellow' } } },
57
57
  inputOnFocus: true,
58
58
  value: 'type: all',
59
59
  });
@@ -63,7 +63,7 @@ const searchBtn = blessed.box({
63
63
  top: 0, right: 0, width: '20%', height: 3,
64
64
  border: { type: 'line' },
65
65
  tags: true,
66
- style: { fg: P.cream, bg: P.bg2, border: { fg: P.border } },
66
+ style: { fg: 'white', bg: 'black', border: { fg: 'grey' } },
67
67
  content: ` {bold}{#e8742a-fg}▶{/#e8742a-fg}{/bold} VEKTOR SLIPSTREAM v${PKG.version}`,
68
68
  });
69
69
 
@@ -73,14 +73,14 @@ screen.append(searchBar);
73
73
  const mainLeft = blessed.box({
74
74
  top: 3, left: 0, width: '48%', height: '100%-6',
75
75
  scrollable: true, alwaysScroll: true, keys: true, mouse: true,
76
- style: { bg: P.bg },
76
+ style: { bg: 'black' },
77
77
  tags: true,
78
78
  });
79
79
 
80
80
  const mainRight = blessed.box({
81
81
  top: 3, left: '48%', width: '52%', height: '100%-6',
82
82
  border: { type: 'line' },
83
- style: { bg: P.bg, border: { fg: P.border } },
83
+ style: { bg: 'black', border: { fg: 'grey' } },
84
84
  tags: true, scrollable: true, keys: true, mouse: true,
85
85
  });
86
86
 
@@ -92,7 +92,7 @@ const statusBar = blessed.box({
92
92
  bottom: 0, left: 0, width: '100%', height: 3,
93
93
  border: { type: 'line' },
94
94
  tags: true,
95
- style: { bg: P.bg2, border: { fg: P.border } },
95
+ style: { bg: 'black', border: { fg: 'grey' } },
96
96
  content: '',
97
97
  });
98
98
  screen.append(statusBar);
@@ -123,7 +123,7 @@ let memory = null, memories = [], selected = 0, filterType = 'all';
123
123
 
124
124
  // ── CARD RENDERER ─────────────────────────────────────────────────────────────
125
125
  function typeColor(type) {
126
- return { semantic: P.cyan, causal: P.amber, temporal: P.green, entity: P.red }[type] || P.dim;
126
+ return { semantic: 'cyan', causal: 'yellow', temporal: 'green', entity: 'red' }[type] || 'grey';
127
127
  }
128
128
 
129
129
  function typeBg(type) {
@@ -155,36 +155,36 @@ function renderCards() {
155
155
  const color = typeColor(m.type);
156
156
  const age = m.created_at ? Math.round((Date.now() - m.created_at) / 3600000) + 'h ago' : '—';
157
157
  const typeTag = (m.type || 'mem').slice(0, 3).toUpperCase();
158
- const bColor = isSelected ? P.selbrd : P.border;
158
+ const bColor = isSelected ? 'yellow' : 'grey';
159
159
  const preview = m.content.slice(0, W - 4);
160
160
 
161
161
  content += isSelected
162
- ? `{${P.orange}-fg}┌${'─'.repeat(W - 2)}┐{/${P.orange}-fg}\n`
163
- : `{${P.border}-fg}┌${'─'.repeat(W - 2)}┐{/${P.border}-fg}\n`;
162
+ ? `{${'yellow'}-fg}┌${'─'.repeat(W - 2)}┐{/${'yellow'}-fg}\n`
163
+ : `{${'grey'}-fg}┌${'─'.repeat(W - 2)}┐{/${'grey'}-fg}\n`;
164
164
 
165
165
  // Title row
166
- content += isSelected ? `{${P.orange}-fg}│{/${P.orange}-fg}` : `{${P.border}-fg}│{/${P.border}-fg}`;
166
+ content += isSelected ? `{${'yellow'}-fg}│{/${'yellow'}-fg}` : `{${'grey'}-fg}│{/${'grey'}-fg}`;
167
167
  content += ` {bold}{${color}-fg}${typeTag}{/${color}-fg}{/bold}`;
168
- content += ` {${isSelected ? P.white : P.cream}-fg}${preview}{/${isSelected ? P.white : P.cream}-fg}`;
168
+ content += ` {${isSelected ? 'white' : 'white'}-fg}${preview}{/${isSelected ? 'white' : 'white'}-fg}`;
169
169
  content += ' '.repeat(Math.max(0, W - 6 - typeTag.length - preview.length));
170
- content += isSelected ? `{${P.orange}-fg}│{/${P.orange}-fg}\n` : `{${P.border}-fg}│{/${P.border}-fg}\n`;
170
+ content += isSelected ? `{${'yellow'}-fg}│{/${'yellow'}-fg}\n` : `{${'grey'}-fg}│{/${'grey'}-fg}\n`;
171
171
 
172
172
  // Timeline row
173
- content += isSelected ? `{${P.orange}-fg}│{/${P.orange}-fg}` : `{${P.border}-fg}│{/${P.border}-fg}`;
173
+ content += isSelected ? `{${'yellow'}-fg}│{/${'yellow'}-fg}` : `{${'grey'}-fg}│{/${'grey'}-fg}`;
174
174
  content += ` ${renderTimeline(m.importance)}`;
175
- content += ` {${P.dim}-fg}${age}{/${P.dim}-fg}`;
175
+ content += ` {${'grey'}-fg}${age}{/${'grey'}-fg}`;
176
176
  content += ' '.repeat(Math.max(0, W - 4 - (m.importance || 1) * 4 - age.length - 2));
177
- content += isSelected ? `{${P.orange}-fg}│{/${P.orange}-fg}\n` : `{${P.border}-fg}│{/${P.border}-fg}\n`;
177
+ content += isSelected ? `{${'yellow'}-fg}│{/${'yellow'}-fg}\n` : `{${'grey'}-fg}│{/${'grey'}-fg}\n`;
178
178
 
179
179
  content += isSelected
180
- ? `{${P.orange}-fg}└${'─'.repeat(W - 2)}┘{/${P.orange}-fg}\n`
181
- : `{${P.border}-fg}└${'─'.repeat(W - 2)}┘{/${P.border}-fg}\n`;
180
+ ? `{${'yellow'}-fg}└${'─'.repeat(W - 2)}┘{/${'yellow'}-fg}\n`
181
+ : `{${'grey'}-fg}└${'─'.repeat(W - 2)}┘{/${'grey'}-fg}\n`;
182
182
  content += '\n';
183
183
  });
184
184
 
185
185
  if (memories.length === 0) {
186
- content += `\n {${P.dim}-fg}No memories found.{/${P.dim}-fg}\n\n`;
187
- content += ` {${P.amber}-fg}Press A to add your first memory.{/${P.amber}-fg}\n`;
186
+ content += `\n {${'grey'}-fg}No memories found.{/${'grey'}-fg}\n\n`;
187
+ content += ` {${'yellow'}-fg}Press A to add your first memory.{/${'yellow'}-fg}\n`;
188
188
  }
189
189
 
190
190
  mainLeft.setContent(content);
@@ -201,7 +201,7 @@ function renderCards() {
201
201
  function renderDetail() {
202
202
  const m = memories[selected];
203
203
  if (!m) {
204
- mainRight.setContent(`\n\n {${P.dim}-fg}Select a memory to inspect{/${P.dim}-fg}`);
204
+ mainRight.setContent(`\n\n {${'grey'}-fg}Select a memory to inspect{/${'grey'}-fg}`);
205
205
  screen.render();
206
206
  return;
207
207
  }
@@ -211,19 +211,19 @@ function renderDetail() {
211
211
  const typeTag = (m.type || 'memory').toUpperCase();
212
212
 
213
213
  let content = '\n';
214
- content += ` {bold}{${color}-fg}${typeTag}{/${color}-fg}{/bold} {${P.dim}-fg}#${m.id}{/${P.dim}-fg}\n\n`;
215
- content += ` {bold}{${P.white}-fg}${m.content}{/${P.white}-fg}{/bold}\n\n`;
216
- content += ` {${P.border}-fg}${'─'.repeat(40)}{/${P.border}-fg}\n\n`;
217
- content += ` {${P.dim}-fg}IMPORTANCE {/${P.dim}-fg} ${renderTimeline(m.importance)}\n\n`;
218
- content += ` {${P.dim}-fg}CREATED {/${P.dim}-fg} {${P.cream}-fg}${age}{/${P.cream}-fg}\n\n`;
219
- content += ` {${P.border}-fg}${'─'.repeat(40)}{/${P.border}-fg}\n\n`;
220
- content += ` {${P.dim}-fg}[D]{/${P.dim}-fg} delete {${P.dim}-fg}[E]{/${P.dim}-fg} edit importance\n\n`;
214
+ content += ` {bold}{${color}-fg}${typeTag}{/${color}-fg}{/bold} {${'grey'}-fg}#${m.id}{/${'grey'}-fg}\n\n`;
215
+ content += ` {bold}{${'white'}-fg}${m.content}{/${'white'}-fg}{/bold}\n\n`;
216
+ content += ` {${'grey'}-fg}${'─'.repeat(40)}{/${'grey'}-fg}\n\n`;
217
+ content += ` {${'grey'}-fg}IMPORTANCE {/${'grey'}-fg} ${renderTimeline(m.importance)}\n\n`;
218
+ content += ` {${'grey'}-fg}CREATED {/${'grey'}-fg} {${'white'}-fg}${age}{/${'white'}-fg}\n\n`;
219
+ content += ` {${'grey'}-fg}${'─'.repeat(40)}{/${'grey'}-fg}\n\n`;
220
+ content += ` {${'grey'}-fg}[D]{/${'grey'}-fg} delete {${'grey'}-fg}[E]{/${'grey'}-fg} edit importance\n\n`;
221
221
 
222
222
  // Show connected memories count if available
223
223
  const total = memories.length;
224
224
  const sameType = memories.filter(x => x.type === m.type).length;
225
- content += ` {${P.border}-fg}${'─'.repeat(40)}{/${P.border}-fg}\n\n`;
226
- content += ` {${P.dim}-fg}TYPE POOL {/${P.dim}-fg} {${color}-fg}${sameType}{/${color}-fg} {${P.dim}-fg}of ${total} memories{/${P.dim}-fg}\n`;
225
+ content += ` {${'grey'}-fg}${'─'.repeat(40)}{/${'grey'}-fg}\n\n`;
226
+ content += ` {${'grey'}-fg}TYPE POOL {/${'grey'}-fg} {${color}-fg}${sameType}{/${color}-fg} {${'grey'}-fg}of ${total} memories{/${'grey'}-fg}\n`;
227
227
 
228
228
  mainRight.setContent(content);
229
229
  screen.render();
@@ -234,14 +234,14 @@ const inputOverlay = blessed.box({
234
234
  top: 'center', left: 'center', width: '60%', height: 5,
235
235
  hidden: true,
236
236
  border: { type: 'line' },
237
- style: { bg: P.bg2, border: { fg: P.orange } },
237
+ style: { bg: 'black', border: { fg: 'yellow' } },
238
238
  tags: true,
239
239
  });
240
240
 
241
241
  const inputField = blessed.textbox({
242
242
  parent: inputOverlay,
243
243
  top: 1, left: 2, width: '100%-6', height: 1,
244
- style: { fg: P.orange, bg: P.bg2 },
244
+ style: { fg: 'yellow', bg: 'black' },
245
245
  inputOnFocus: true,
246
246
  });
247
247