@testany/hephos 0.3.9 → 0.3.10

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.
@@ -0,0 +1,514 @@
1
+ /**
2
+ * useHistory - Command history management hook
3
+ *
4
+ * Features:
5
+ * - In-memory storage (no persistence across sessions)
6
+ * - Max 500 entries with FIFO eviction
7
+ * - Adjacent deduplication
8
+ * - Sensitive command filtering (keys, tokens, passwords)
9
+ * - Safe exit with savedInput restoration
10
+ */
11
+ import { useState, useCallback } from 'react';
12
+ // Patterns that indicate sensitive content - don't add to history
13
+ const SENSITIVE_PATTERNS = [
14
+ // API keys and tokens
15
+ /api[_-]?key\s*[=:]\s*\S+/i,
16
+ /token\s*[=:]\s*\S+/i,
17
+ /secret\s*[=:]\s*\S+/i,
18
+ /password\s*[=:]\s*\S+/i,
19
+ /bearer\s+\S{20,}/i,
20
+ // Common key formats
21
+ /sk-[a-zA-Z0-9]{20,}/, // OpenAI style
22
+ /AIza[a-zA-Z0-9_-]{35}/, // Google API key
23
+ /ghp_[a-zA-Z0-9]{36}/, // GitHub PAT
24
+ /gho_[a-zA-Z0-9]{36}/, // GitHub OAuth
25
+ /xox[baprs]-[a-zA-Z0-9-]+/, // Slack tokens
26
+ // Environment variable exports with sensitive names
27
+ /export\s+(GEMINI_API_KEY|OPENAI_API_KEY|ANTHROPIC_API_KEY|API_KEY|SECRET|TOKEN|PASSWORD)\s*=/i,
28
+ ];
29
+ /**
30
+ * Check if a command contains sensitive information
31
+ */
32
+ function isSensitiveCommand(command) {
33
+ return SENSITIVE_PATTERNS.some(pattern => pattern.test(command));
34
+ }
35
+ /**
36
+ * Check if entry should be added to history
37
+ */
38
+ function shouldAddToHistory(entry, lastEntry) {
39
+ // Empty or whitespace-only
40
+ if (!entry.trim()) {
41
+ return false;
42
+ }
43
+ // Adjacent duplicate
44
+ if (lastEntry === entry) {
45
+ return false;
46
+ }
47
+ // Sensitive content
48
+ if (isSensitiveCommand(entry)) {
49
+ return false;
50
+ }
51
+ return true;
52
+ }
53
+ const DEFAULT_MAX_ENTRIES = 500;
54
+ export function useHistory(options = {}) {
55
+ const maxEntries = options.maxEntries ?? DEFAULT_MAX_ENTRIES;
56
+ const [state, setState] = useState({
57
+ entries: [],
58
+ isActive: false,
59
+ currentIndex: -1,
60
+ savedInput: '',
61
+ searchMode: false,
62
+ searchQuery: '',
63
+ searchResults: [],
64
+ searchResultIndex: -1,
65
+ });
66
+ /**
67
+ * Add a new entry to history
68
+ */
69
+ const addEntry = useCallback((entry) => {
70
+ setState(prev => {
71
+ const lastEntry = prev.entries[prev.entries.length - 1];
72
+ if (!shouldAddToHistory(entry, lastEntry)) {
73
+ return prev;
74
+ }
75
+ const newEntries = [...prev.entries, entry];
76
+ // Enforce max limit (FIFO)
77
+ if (newEntries.length > maxEntries) {
78
+ newEntries.shift();
79
+ }
80
+ return {
81
+ ...prev,
82
+ entries: newEntries,
83
+ };
84
+ });
85
+ }, [maxEntries]);
86
+ /**
87
+ * Navigate to previous (older) history entry
88
+ * Returns the entry to display, or null if at end
89
+ */
90
+ const navigateUp = useCallback((currentInput) => {
91
+ let result = null;
92
+ setState(prev => {
93
+ if (prev.entries.length === 0) {
94
+ return prev;
95
+ }
96
+ // First time entering history mode
97
+ if (!prev.isActive) {
98
+ const newIndex = prev.entries.length - 1;
99
+ result = prev.entries[newIndex];
100
+ return {
101
+ ...prev,
102
+ isActive: true,
103
+ currentIndex: newIndex,
104
+ savedInput: currentInput,
105
+ };
106
+ }
107
+ // Already in history mode, go to older entry
108
+ if (prev.currentIndex > 0) {
109
+ const newIndex = prev.currentIndex - 1;
110
+ result = prev.entries[newIndex];
111
+ return {
112
+ ...prev,
113
+ currentIndex: newIndex,
114
+ };
115
+ }
116
+ // At oldest entry, return current
117
+ result = prev.entries[prev.currentIndex];
118
+ return prev;
119
+ });
120
+ return result;
121
+ }, []);
122
+ /**
123
+ * Navigate to next (newer) history entry
124
+ * Returns the entry to display, or null if back to current input
125
+ */
126
+ const navigateDown = useCallback(() => {
127
+ let result = null;
128
+ setState(prev => {
129
+ if (!prev.isActive) {
130
+ return prev;
131
+ }
132
+ // Move to newer entry
133
+ if (prev.currentIndex < prev.entries.length - 1) {
134
+ const newIndex = prev.currentIndex + 1;
135
+ result = prev.entries[newIndex];
136
+ return {
137
+ ...prev,
138
+ currentIndex: newIndex,
139
+ };
140
+ }
141
+ // At newest entry, exit history mode and restore saved input
142
+ result = prev.savedInput;
143
+ return {
144
+ ...prev,
145
+ isActive: false,
146
+ currentIndex: -1,
147
+ savedInput: '',
148
+ };
149
+ });
150
+ return result;
151
+ }, []);
152
+ /**
153
+ * Exit history mode without accepting
154
+ * Returns savedInput to restore
155
+ */
156
+ const exitHistory = useCallback(() => {
157
+ let savedInput = '';
158
+ setState(prev => {
159
+ savedInput = prev.savedInput;
160
+ return {
161
+ ...prev,
162
+ isActive: false,
163
+ currentIndex: -1,
164
+ savedInput: '',
165
+ };
166
+ });
167
+ return savedInput;
168
+ }, []);
169
+ /**
170
+ * Accept currently selected history entry
171
+ * Returns the entry, or null if not in history mode
172
+ */
173
+ const acceptHistory = useCallback(() => {
174
+ let result = null;
175
+ setState(prev => {
176
+ if (!prev.isActive || prev.currentIndex < 0) {
177
+ return prev;
178
+ }
179
+ result = prev.entries[prev.currentIndex];
180
+ return {
181
+ ...prev,
182
+ isActive: false,
183
+ currentIndex: -1,
184
+ savedInput: '',
185
+ };
186
+ });
187
+ return result;
188
+ }, []);
189
+ /**
190
+ * Navigate up with prefix filtering
191
+ */
192
+ const navigateUpFiltered = useCallback((currentInput, prefix) => {
193
+ let result = null;
194
+ setState(prev => {
195
+ // Find entries matching prefix
196
+ const matchingIndices = [];
197
+ for (let i = 0; i < prev.entries.length; i++) {
198
+ if (prev.entries[i].startsWith(prefix)) {
199
+ matchingIndices.push(i);
200
+ }
201
+ }
202
+ if (matchingIndices.length === 0) {
203
+ return prev;
204
+ }
205
+ // First time entering history mode with filter
206
+ if (!prev.isActive) {
207
+ const newIndex = matchingIndices[matchingIndices.length - 1];
208
+ result = prev.entries[newIndex];
209
+ return {
210
+ ...prev,
211
+ isActive: true,
212
+ currentIndex: newIndex,
213
+ savedInput: currentInput,
214
+ };
215
+ }
216
+ // Find previous matching entry
217
+ const currentMatchIdx = matchingIndices.findIndex(idx => idx === prev.currentIndex);
218
+ if (currentMatchIdx > 0) {
219
+ const newIndex = matchingIndices[currentMatchIdx - 1];
220
+ result = prev.entries[newIndex];
221
+ return {
222
+ ...prev,
223
+ currentIndex: newIndex,
224
+ };
225
+ }
226
+ // At oldest matching entry
227
+ result = prev.entries[prev.currentIndex];
228
+ return prev;
229
+ });
230
+ return result;
231
+ }, []);
232
+ /**
233
+ * Navigate down with prefix filtering
234
+ */
235
+ const navigateDownFiltered = useCallback((prefix) => {
236
+ let result = null;
237
+ setState(prev => {
238
+ if (!prev.isActive) {
239
+ return prev;
240
+ }
241
+ // Find entries matching prefix
242
+ const matchingIndices = [];
243
+ for (let i = 0; i < prev.entries.length; i++) {
244
+ if (prev.entries[i].startsWith(prefix)) {
245
+ matchingIndices.push(i);
246
+ }
247
+ }
248
+ // Find next matching entry
249
+ const currentMatchIdx = matchingIndices.findIndex(idx => idx === prev.currentIndex);
250
+ if (currentMatchIdx >= 0 && currentMatchIdx < matchingIndices.length - 1) {
251
+ const newIndex = matchingIndices[currentMatchIdx + 1];
252
+ result = prev.entries[newIndex];
253
+ return {
254
+ ...prev,
255
+ currentIndex: newIndex,
256
+ };
257
+ }
258
+ // At newest matching entry, exit history mode
259
+ result = prev.savedInput;
260
+ return {
261
+ ...prev,
262
+ isActive: false,
263
+ currentIndex: -1,
264
+ savedInput: '',
265
+ };
266
+ });
267
+ return result;
268
+ }, []);
269
+ /**
270
+ * Helper function to find matching entries for a search query
271
+ */
272
+ const findSearchMatches = (entries, query) => {
273
+ if (!query)
274
+ return [];
275
+ const lowerQuery = query.toLowerCase();
276
+ const matches = [];
277
+ for (let i = 0; i < entries.length; i++) {
278
+ if (entries[i].toLowerCase().includes(lowerQuery)) {
279
+ matches.push(i);
280
+ }
281
+ }
282
+ return matches;
283
+ };
284
+ /**
285
+ * Enter search mode (Ctrl+R)
286
+ */
287
+ const enterSearchMode = useCallback((currentInput) => {
288
+ setState(prev => {
289
+ // Use current input as initial search query
290
+ const searchResults = findSearchMatches(prev.entries, currentInput);
291
+ const searchResultIndex = searchResults.length > 0 ? searchResults.length - 1 : -1;
292
+ const currentIndex = searchResultIndex >= 0 ? searchResults[searchResultIndex] : -1;
293
+ return {
294
+ ...prev,
295
+ isActive: true,
296
+ searchMode: true,
297
+ searchQuery: currentInput,
298
+ searchResults,
299
+ searchResultIndex,
300
+ currentIndex,
301
+ savedInput: currentInput,
302
+ };
303
+ });
304
+ }, []);
305
+ /**
306
+ * Update search query and find matches
307
+ * Returns the first matching entry or null
308
+ */
309
+ const updateSearchQuery = useCallback((query) => {
310
+ let result = null;
311
+ setState(prev => {
312
+ if (!prev.searchMode)
313
+ return prev;
314
+ const searchResults = findSearchMatches(prev.entries, query);
315
+ const searchResultIndex = searchResults.length > 0 ? searchResults.length - 1 : -1;
316
+ const currentIndex = searchResultIndex >= 0 ? searchResults[searchResultIndex] : -1;
317
+ if (currentIndex >= 0) {
318
+ result = prev.entries[currentIndex];
319
+ }
320
+ return {
321
+ ...prev,
322
+ searchQuery: query,
323
+ searchResults,
324
+ searchResultIndex,
325
+ currentIndex,
326
+ };
327
+ });
328
+ return result;
329
+ }, []);
330
+ /**
331
+ * Search backward (Ctrl+R or ↑ in search mode)
332
+ * Finds the previous matching entry
333
+ */
334
+ const searchBackward = useCallback(() => {
335
+ let result = null;
336
+ setState(prev => {
337
+ if (!prev.searchMode || prev.searchResults.length === 0) {
338
+ return prev;
339
+ }
340
+ // Move to previous match
341
+ if (prev.searchResultIndex > 0) {
342
+ const newSearchResultIndex = prev.searchResultIndex - 1;
343
+ const newIndex = prev.searchResults[newSearchResultIndex];
344
+ result = prev.entries[newIndex];
345
+ return {
346
+ ...prev,
347
+ searchResultIndex: newSearchResultIndex,
348
+ currentIndex: newIndex,
349
+ };
350
+ }
351
+ // At oldest match, stay there
352
+ result = prev.entries[prev.currentIndex];
353
+ return prev;
354
+ });
355
+ return result;
356
+ }, []);
357
+ /**
358
+ * Search forward (Ctrl+S or ↓ in search mode)
359
+ * Finds the next matching entry
360
+ */
361
+ const searchForward = useCallback(() => {
362
+ let result = null;
363
+ setState(prev => {
364
+ if (!prev.searchMode || prev.searchResults.length === 0) {
365
+ return prev;
366
+ }
367
+ // Move to next match
368
+ if (prev.searchResultIndex < prev.searchResults.length - 1) {
369
+ const newSearchResultIndex = prev.searchResultIndex + 1;
370
+ const newIndex = prev.searchResults[newSearchResultIndex];
371
+ result = prev.entries[newIndex];
372
+ return {
373
+ ...prev,
374
+ searchResultIndex: newSearchResultIndex,
375
+ currentIndex: newIndex,
376
+ };
377
+ }
378
+ // At newest match, stay there
379
+ result = prev.entries[prev.currentIndex];
380
+ return prev;
381
+ });
382
+ return result;
383
+ }, []);
384
+ /**
385
+ * Exit search mode without accepting
386
+ * Returns savedInput to restore
387
+ */
388
+ const exitSearchMode = useCallback(() => {
389
+ let savedInput = '';
390
+ setState(prev => {
391
+ savedInput = prev.savedInput;
392
+ return {
393
+ ...prev,
394
+ isActive: false,
395
+ searchMode: false,
396
+ searchQuery: '',
397
+ searchResults: [],
398
+ searchResultIndex: -1,
399
+ currentIndex: -1,
400
+ savedInput: '',
401
+ };
402
+ });
403
+ return savedInput;
404
+ }, []);
405
+ /**
406
+ * Accept current search result
407
+ * Returns the selected entry
408
+ */
409
+ const acceptSearch = useCallback(() => {
410
+ let result = null;
411
+ setState(prev => {
412
+ if (!prev.searchMode || prev.currentIndex < 0) {
413
+ return prev;
414
+ }
415
+ result = prev.entries[prev.currentIndex];
416
+ return {
417
+ ...prev,
418
+ isActive: false,
419
+ searchMode: false,
420
+ searchQuery: '',
421
+ searchResults: [],
422
+ searchResultIndex: -1,
423
+ currentIndex: -1,
424
+ savedInput: '',
425
+ };
426
+ });
427
+ return result;
428
+ }, []);
429
+ const DEFAULT_JUMP_STEP = 5;
430
+ /**
431
+ * Jump up multiple entries (Alt+↑ / PgUp)
432
+ */
433
+ const jumpUp = useCallback((currentInput, step = DEFAULT_JUMP_STEP) => {
434
+ let result = null;
435
+ setState(prev => {
436
+ if (prev.entries.length === 0) {
437
+ return prev;
438
+ }
439
+ // First time entering history mode
440
+ if (!prev.isActive) {
441
+ const newIndex = Math.max(0, prev.entries.length - step);
442
+ result = prev.entries[newIndex];
443
+ return {
444
+ ...prev,
445
+ isActive: true,
446
+ currentIndex: newIndex,
447
+ savedInput: currentInput,
448
+ };
449
+ }
450
+ // Already in history mode, jump back
451
+ const newIndex = Math.max(0, prev.currentIndex - step);
452
+ result = prev.entries[newIndex];
453
+ return {
454
+ ...prev,
455
+ currentIndex: newIndex,
456
+ };
457
+ });
458
+ return result;
459
+ }, []);
460
+ /**
461
+ * Jump down multiple entries (Alt+↓ / PgDn)
462
+ */
463
+ const jumpDown = useCallback((step = DEFAULT_JUMP_STEP) => {
464
+ let result = null;
465
+ setState(prev => {
466
+ if (!prev.isActive) {
467
+ return prev;
468
+ }
469
+ // Jump forward
470
+ const newIndex = prev.currentIndex + step;
471
+ if (newIndex >= prev.entries.length) {
472
+ // Exit history mode and restore saved input
473
+ result = prev.savedInput;
474
+ return {
475
+ ...prev,
476
+ isActive: false,
477
+ currentIndex: -1,
478
+ savedInput: '',
479
+ };
480
+ }
481
+ result = prev.entries[newIndex];
482
+ return {
483
+ ...prev,
484
+ currentIndex: newIndex,
485
+ };
486
+ });
487
+ return result;
488
+ }, []);
489
+ return {
490
+ entries: state.entries,
491
+ isActive: state.isActive,
492
+ currentIndex: state.currentIndex,
493
+ searchMode: state.searchMode,
494
+ searchQuery: state.searchQuery,
495
+ addEntry,
496
+ navigateUp,
497
+ navigateDown,
498
+ exitHistory,
499
+ acceptHistory,
500
+ navigateUpFiltered,
501
+ navigateDownFiltered,
502
+ enterSearchMode,
503
+ updateSearchQuery,
504
+ searchBackward,
505
+ searchForward,
506
+ exitSearchMode,
507
+ acceptSearch,
508
+ jumpUp,
509
+ jumpDown,
510
+ };
511
+ }
512
+ // Export for testing
513
+ export { isSensitiveCommand, shouldAddToHistory };
514
+ //# sourceMappingURL=useHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHistory.js","sourceRoot":"","sources":["../../../src/repl/hooks/useHistory.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testany/hephos",
3
- "version": "0.3.9",
3
+ "version": "0.3.10",
4
4
  "description": "Hephos - full CLI+REPL bundle for multi-agent conversation orchestration (depends on agent-chatter core)",
5
5
  "type": "module",
6
6
  "main": "./out/cli.js",