truememory-mirror 1.0.5 → 1.0.7
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/bin/mirror.js +54 -13
- package/package.json +1 -1
package/bin/mirror.js
CHANGED
|
@@ -99,6 +99,39 @@ function clearLine() {
|
|
|
99
99
|
if (!_jsonMode) process.stderr.write('\r\x1b[K');
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
+
const STATUS_PHRASES = [
|
|
103
|
+
'scanning cognitive patterns',
|
|
104
|
+
'indexing conversation fragments',
|
|
105
|
+
'parsing behavioral signals',
|
|
106
|
+
'extracting reasoning signatures',
|
|
107
|
+
'profiling communication style',
|
|
108
|
+
'detecting stress responses',
|
|
109
|
+
'measuring risk tolerance curves',
|
|
110
|
+
'mapping decision architecture',
|
|
111
|
+
'isolating personality markers',
|
|
112
|
+
'tracing collaboration fingerprint',
|
|
113
|
+
'decoding problem-solving heuristics',
|
|
114
|
+
'analyzing delegation patterns',
|
|
115
|
+
'triangulating identity vectors',
|
|
116
|
+
'calibrating behavioral model',
|
|
117
|
+
'resolving cognitive tensions',
|
|
118
|
+
'consolidating trait matrix',
|
|
119
|
+
'building predictive scaffolding',
|
|
120
|
+
'running scenario simulations',
|
|
121
|
+
'stress-testing edge cases',
|
|
122
|
+
'computing confidence intervals',
|
|
123
|
+
'rendering identity surface',
|
|
124
|
+
'locking archetype match',
|
|
125
|
+
'sealing behavioral predictions',
|
|
126
|
+
'finalizing your mirror',
|
|
127
|
+
];
|
|
128
|
+
|
|
129
|
+
let _phraseIndex = 0;
|
|
130
|
+
|
|
131
|
+
function nextPhrase() {
|
|
132
|
+
return STATUS_PHRASES[_phraseIndex++ % STATUS_PHRASES.length];
|
|
133
|
+
}
|
|
134
|
+
|
|
102
135
|
function progressBar(pct, width = 30) {
|
|
103
136
|
const filled = Math.round(pct * width);
|
|
104
137
|
const empty = width - filled;
|
|
@@ -132,8 +165,13 @@ async function main() {
|
|
|
132
165
|
return;
|
|
133
166
|
}
|
|
134
167
|
|
|
135
|
-
// --- Scan & parse
|
|
136
|
-
|
|
168
|
+
// --- Scan & parse with rotating status ---
|
|
169
|
+
const spinTimer = setInterval(() => {
|
|
170
|
+
clearLine();
|
|
171
|
+
write(` ${DIM}${nextPhrase()}...${R}`);
|
|
172
|
+
}, 3750);
|
|
173
|
+
|
|
174
|
+
write(` ${DIM}${nextPhrase()}...${R}`);
|
|
137
175
|
const sources = await scan(args.source);
|
|
138
176
|
|
|
139
177
|
let claudeSessions = [];
|
|
@@ -161,8 +199,11 @@ async function main() {
|
|
|
161
199
|
}
|
|
162
200
|
}
|
|
163
201
|
|
|
202
|
+
clearInterval(spinTimer);
|
|
203
|
+
|
|
164
204
|
const totalSessions = claudeSessions.length + codexSessions.length;
|
|
165
205
|
if (totalSessions === 0) {
|
|
206
|
+
clearLine();
|
|
166
207
|
write(` no AI conversations found.\n make sure you have Claude Code or Codex CLI installed.\n\n`);
|
|
167
208
|
process.exit(1);
|
|
168
209
|
}
|
|
@@ -183,7 +224,7 @@ async function main() {
|
|
|
183
224
|
}
|
|
184
225
|
|
|
185
226
|
// --- Extract ---
|
|
186
|
-
|
|
227
|
+
clearLine();
|
|
187
228
|
let result;
|
|
188
229
|
try {
|
|
189
230
|
result = await submitForExtraction(payload, args.apiUrl);
|
|
@@ -192,23 +233,23 @@ async function main() {
|
|
|
192
233
|
process.exit(1);
|
|
193
234
|
}
|
|
194
235
|
|
|
195
|
-
// --- Poll ---
|
|
236
|
+
// --- Poll with rotating status ---
|
|
237
|
+
let lastPhraseTick = 0;
|
|
238
|
+
let currentPhrase = nextPhrase();
|
|
239
|
+
|
|
196
240
|
try {
|
|
197
241
|
await pollStatus(result.profile_id, args.apiUrl, (status) => {
|
|
198
242
|
const pct = status.progress || 0;
|
|
199
243
|
const bar = progressBar(pct);
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
if (
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
detail = `${DIM}building profile${R}`;
|
|
206
|
-
} else if (status.status === 'predicting') {
|
|
207
|
-
detail = `${DIM}running predictions${R}`;
|
|
244
|
+
const now = Date.now();
|
|
245
|
+
|
|
246
|
+
if (now - lastPhraseTick > 3750) {
|
|
247
|
+
currentPhrase = nextPhrase();
|
|
248
|
+
lastPhraseTick = now;
|
|
208
249
|
}
|
|
209
250
|
|
|
210
251
|
clearLine();
|
|
211
|
-
write(` ${bar} ${WHITE}${Math.round(pct * 100)}%${R} ${
|
|
252
|
+
write(` ${bar} ${WHITE}${Math.round(pct * 100)}%${R} ${DIM}${currentPhrase}...${R}`);
|
|
212
253
|
});
|
|
213
254
|
} catch (err) {
|
|
214
255
|
write(`\n\n ✗ extraction failed: ${err.message}\n\n`);
|