@nocoo/pew 0.4.0 → 0.6.1
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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +117 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/session-sync.d.ts +62 -0
- package/dist/commands/session-sync.d.ts.map +1 -0
- package/dist/commands/session-sync.js +443 -0
- package/dist/commands/session-sync.js.map +1 -0
- package/dist/commands/session-upload.d.ts +39 -0
- package/dist/commands/session-upload.d.ts.map +1 -0
- package/dist/commands/session-upload.js +45 -0
- package/dist/commands/session-upload.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +22 -11
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/sync.d.ts +12 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +159 -3
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/upload-engine.d.ts +63 -0
- package/dist/commands/upload-engine.d.ts.map +1 -0
- package/dist/commands/upload-engine.js +164 -0
- package/dist/commands/upload-engine.js.map +1 -0
- package/dist/commands/upload.d.ts +5 -21
- package/dist/commands/upload.d.ts.map +1 -1
- package/dist/commands/upload.js +11 -144
- package/dist/commands/upload.js.map +1 -1
- package/dist/discovery/sources.d.ts +5 -0
- package/dist/discovery/sources.d.ts.map +1 -1
- package/dist/discovery/sources.js +7 -0
- package/dist/discovery/sources.js.map +1 -1
- package/dist/parsers/claude-session.d.ts +19 -0
- package/dist/parsers/claude-session.d.ts.map +1 -0
- package/dist/parsers/claude-session.js +131 -0
- package/dist/parsers/claude-session.js.map +1 -0
- package/dist/parsers/codex-session.d.ts +24 -0
- package/dist/parsers/codex-session.d.ts.map +1 -0
- package/dist/parsers/codex-session.js +140 -0
- package/dist/parsers/codex-session.js.map +1 -0
- package/dist/parsers/codex.d.ts +37 -0
- package/dist/parsers/codex.d.ts.map +1 -0
- package/dist/parsers/codex.js +136 -0
- package/dist/parsers/codex.js.map +1 -0
- package/dist/parsers/gemini-session.d.ts +19 -0
- package/dist/parsers/gemini-session.d.ts.map +1 -0
- package/dist/parsers/gemini-session.js +103 -0
- package/dist/parsers/gemini-session.js.map +1 -0
- package/dist/parsers/openclaw-session.d.ts +20 -0
- package/dist/parsers/openclaw-session.d.ts.map +1 -0
- package/dist/parsers/openclaw-session.js +122 -0
- package/dist/parsers/openclaw-session.js.map +1 -0
- package/dist/parsers/opencode-session.d.ts +15 -0
- package/dist/parsers/opencode-session.d.ts.map +1 -0
- package/dist/parsers/opencode-session.js +131 -0
- package/dist/parsers/opencode-session.js.map +1 -0
- package/dist/parsers/opencode-sqlite-db.d.ts +29 -0
- package/dist/parsers/opencode-sqlite-db.d.ts.map +1 -0
- package/dist/parsers/opencode-sqlite-db.js +71 -0
- package/dist/parsers/opencode-sqlite-db.js.map +1 -0
- package/dist/parsers/opencode-sqlite-session.d.ts +32 -0
- package/dist/parsers/opencode-sqlite-session.d.ts.map +1 -0
- package/dist/parsers/opencode-sqlite-session.js +121 -0
- package/dist/parsers/opencode-sqlite-session.js.map +1 -0
- package/dist/parsers/opencode-sqlite.d.ts +53 -0
- package/dist/parsers/opencode-sqlite.d.ts.map +1 -0
- package/dist/parsers/opencode-sqlite.js +104 -0
- package/dist/parsers/opencode-sqlite.js.map +1 -0
- package/dist/storage/base-queue.d.ts +40 -0
- package/dist/storage/base-queue.d.ts.map +1 -0
- package/dist/storage/base-queue.js +89 -0
- package/dist/storage/base-queue.js.map +1 -0
- package/dist/storage/local-queue.d.ts +4 -24
- package/dist/storage/local-queue.d.ts.map +1 -1
- package/dist/storage/local-queue.js +5 -64
- package/dist/storage/local-queue.js.map +1 -1
- package/dist/storage/session-cursor-store.d.ts +14 -0
- package/dist/storage/session-cursor-store.d.ts.map +1 -0
- package/dist/storage/session-cursor-store.js +34 -0
- package/dist/storage/session-cursor-store.js.map +1 -0
- package/dist/storage/session-queue.d.ts +10 -0
- package/dist/storage/session-queue.d.ts.map +1 -0
- package/dist/storage/session-queue.js +11 -0
- package/dist/storage/session-queue.js.map +1 -0
- package/dist/utils/paths.d.ts +4 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +5 -0
- package/dist/utils/paths.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/sync.d.ts
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
+
import type { QueryMessagesFn } from "../parsers/opencode-sqlite.js";
|
|
1
2
|
/** Sync execution options */
|
|
2
3
|
export interface SyncOptions {
|
|
3
4
|
/** Directory for persisting state (cursors, queue) */
|
|
4
5
|
stateDir: string;
|
|
5
6
|
/** Override: Claude data directory (~/.claude) */
|
|
6
7
|
claudeDir?: string;
|
|
8
|
+
/** Override: Codex CLI sessions directory (~/.codex/sessions) */
|
|
9
|
+
codexSessionsDir?: string;
|
|
7
10
|
/** Override: Gemini data directory (~/.gemini) */
|
|
8
11
|
geminiDir?: string;
|
|
9
12
|
/** Override: OpenCode message directory (~/.local/share/opencode/storage/message) */
|
|
10
13
|
openCodeMessageDir?: string;
|
|
14
|
+
/** Override: OpenCode SQLite database path (~/.local/share/opencode/opencode.db) */
|
|
15
|
+
openCodeDbPath?: string;
|
|
16
|
+
/** Factory for opening the OpenCode SQLite DB (DI for testability) */
|
|
17
|
+
openMessageDb?: (dbPath: string) => {
|
|
18
|
+
queryMessages: QueryMessagesFn;
|
|
19
|
+
close: () => void;
|
|
20
|
+
} | null;
|
|
11
21
|
/** Override: OpenClaw data directory (~/.openclaw) */
|
|
12
22
|
openclawDir?: string;
|
|
13
23
|
/** Progress callback */
|
|
@@ -27,6 +37,7 @@ export interface SyncResult {
|
|
|
27
37
|
totalRecords: number;
|
|
28
38
|
sources: {
|
|
29
39
|
claude: number;
|
|
40
|
+
codex: number;
|
|
30
41
|
gemini: number;
|
|
31
42
|
opencode: number;
|
|
32
43
|
openclaw: number;
|
|
@@ -34,6 +45,7 @@ export interface SyncResult {
|
|
|
34
45
|
/** Total files scanned per source */
|
|
35
46
|
filesScanned: {
|
|
36
47
|
claude: number;
|
|
48
|
+
codex: number;
|
|
37
49
|
gemini: number;
|
|
38
50
|
opencode: number;
|
|
39
51
|
openclaw: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIrE,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK;QAAE,aAAa,EAAE,eAAe,CAAC;QAAC,KAAK,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IACjG,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC7C;AAED,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,qCAAqC;IACrC,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAUD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmgBxE"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { stat } from "node:fs/promises";
|
|
2
2
|
import { CursorStore } from "../storage/cursor-store.js";
|
|
3
3
|
import { LocalQueue } from "../storage/local-queue.js";
|
|
4
|
-
import { discoverClaudeFiles, discoverGeminiFiles, discoverOpenCodeFiles, discoverOpenClawFiles, } from "../discovery/sources.js";
|
|
4
|
+
import { discoverClaudeFiles, discoverCodexFiles, discoverGeminiFiles, discoverOpenCodeFiles, discoverOpenClawFiles, } from "../discovery/sources.js";
|
|
5
5
|
import { parseClaudeFile } from "../parsers/claude.js";
|
|
6
|
+
import { parseCodexFile } from "../parsers/codex.js";
|
|
6
7
|
import { parseGeminiFile } from "../parsers/gemini.js";
|
|
7
8
|
import { parseOpenCodeFile } from "../parsers/opencode.js";
|
|
8
9
|
import { parseOpenClawFile } from "../parsers/openclaw.js";
|
|
10
|
+
import { processOpenCodeMessages } from "../parsers/opencode-sqlite.js";
|
|
9
11
|
import { toUtcHalfHourStart, bucketKey, addTokens, emptyTokenDelta } from "../utils/buckets.js";
|
|
10
12
|
/**
|
|
11
13
|
* Execute the sync operation: discover files, parse incrementally,
|
|
@@ -19,8 +21,8 @@ export async function executeSync(opts) {
|
|
|
19
21
|
const queue = new LocalQueue(stateDir);
|
|
20
22
|
const cursors = await cursorStore.load();
|
|
21
23
|
const allDeltas = [];
|
|
22
|
-
const sourceCounts = { claude: 0, gemini: 0, opencode: 0, openclaw: 0 };
|
|
23
|
-
const filesScanned = { claude: 0, gemini: 0, opencode: 0, openclaw: 0 };
|
|
24
|
+
const sourceCounts = { claude: 0, codex: 0, gemini: 0, opencode: 0, openclaw: 0 };
|
|
25
|
+
const filesScanned = { claude: 0, codex: 0, gemini: 0, opencode: 0, openclaw: 0 };
|
|
24
26
|
// ---------- Claude Code ----------
|
|
25
27
|
if (opts.claudeDir) {
|
|
26
28
|
onProgress?.({
|
|
@@ -193,6 +195,103 @@ export async function executeSync(opts) {
|
|
|
193
195
|
// Persist directory mtimes for next run
|
|
194
196
|
cursors.dirMtimes = discovery.dirMtimes;
|
|
195
197
|
}
|
|
198
|
+
// ---------- OpenCode SQLite ----------
|
|
199
|
+
if (opts.openCodeDbPath) {
|
|
200
|
+
onProgress?.({
|
|
201
|
+
source: "opencode-sqlite",
|
|
202
|
+
phase: "discover",
|
|
203
|
+
message: "Checking OpenCode SQLite database...",
|
|
204
|
+
});
|
|
205
|
+
// Check if DB file exists
|
|
206
|
+
const dbStat = await stat(opts.openCodeDbPath).catch(() => null);
|
|
207
|
+
if (dbStat && !opts.openMessageDb) {
|
|
208
|
+
// DB file exists but adapter is missing (bun:sqlite not available)
|
|
209
|
+
onProgress?.({
|
|
210
|
+
source: "opencode-sqlite",
|
|
211
|
+
phase: "warn",
|
|
212
|
+
message: `OpenCode SQLite database found at ${opts.openCodeDbPath} but bun:sqlite is not available — SQLite token data will NOT be synced`,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
else if (dbStat && opts.openMessageDb) {
|
|
216
|
+
const dbInode = dbStat.ino;
|
|
217
|
+
const prevSqlite = cursors.openCodeSqlite;
|
|
218
|
+
// If inode changed (DB recreated), reset cursor
|
|
219
|
+
const lastTimeCreated = prevSqlite && prevSqlite.inode === dbInode
|
|
220
|
+
? prevSqlite.lastTimeCreated
|
|
221
|
+
: 0;
|
|
222
|
+
const prevProcessedIds = new Set(prevSqlite && prevSqlite.inode === dbInode
|
|
223
|
+
? (prevSqlite.lastProcessedIds ?? [])
|
|
224
|
+
: []);
|
|
225
|
+
const handle = opts.openMessageDb(opts.openCodeDbPath);
|
|
226
|
+
if (handle) {
|
|
227
|
+
try {
|
|
228
|
+
// Query uses >= to avoid missing same-millisecond rows.
|
|
229
|
+
// We dedup previously-processed IDs from the prior batch.
|
|
230
|
+
const rawRows = handle.queryMessages(lastTimeCreated);
|
|
231
|
+
const rows = prevProcessedIds.size > 0
|
|
232
|
+
? rawRows.filter((r) => !prevProcessedIds.has(r.id))
|
|
233
|
+
: rawRows;
|
|
234
|
+
// Collect JSON messageKeys from cursor store for dedup.
|
|
235
|
+
// During the overlap window (~Feb 15-17), both JSON and SQLite
|
|
236
|
+
// sources contain the same messages. We skip any SQLite row
|
|
237
|
+
// whose messageKey is already tracked by a JSON file cursor.
|
|
238
|
+
const jsonMessageKeys = new Set();
|
|
239
|
+
for (const cursor of Object.values(cursors.files)) {
|
|
240
|
+
const oc = cursor;
|
|
241
|
+
if (oc.messageKey) {
|
|
242
|
+
jsonMessageKeys.add(oc.messageKey);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// Filter rows: exclude assistant messages already tracked by JSON parser.
|
|
246
|
+
// row.role is extracted at the SQL level via json_extract — no need to
|
|
247
|
+
// parse the full data JSON here.
|
|
248
|
+
const filteredRows = rows.filter((row) => {
|
|
249
|
+
if (row.role !== "assistant")
|
|
250
|
+
return true; // non-assistant rows don't produce deltas
|
|
251
|
+
const key = `${row.session_id}|${row.id}`;
|
|
252
|
+
return !jsonMessageKeys.has(key);
|
|
253
|
+
});
|
|
254
|
+
const dedupSkipped = rows.length - filteredRows.length;
|
|
255
|
+
const result = processOpenCodeMessages(filteredRows);
|
|
256
|
+
onProgress?.({
|
|
257
|
+
source: "opencode-sqlite",
|
|
258
|
+
phase: "parse",
|
|
259
|
+
message: `Parsed ${result.deltas.length} deltas from ${rawRows.length} SQLite rows${dedupSkipped > 0 ? ` (${dedupSkipped} deduped)` : ""}`,
|
|
260
|
+
});
|
|
261
|
+
allDeltas.push(...result.deltas);
|
|
262
|
+
sourceCounts.opencode += result.deltas.length;
|
|
263
|
+
// Update SQLite cursor — advance past ALL rows (including deduped).
|
|
264
|
+
// Rows are ORDER BY time_created ASC, so the last row has the
|
|
265
|
+
// highest time_created. Track IDs at the max timestamp for
|
|
266
|
+
// same-millisecond dedup on the next query.
|
|
267
|
+
const maxTime = rawRows.length > 0
|
|
268
|
+
? rawRows[rawRows.length - 1].time_created
|
|
269
|
+
: lastTimeCreated;
|
|
270
|
+
const idsAtMax = rawRows
|
|
271
|
+
.filter((r) => r.time_created === maxTime)
|
|
272
|
+
.map((r) => r.id);
|
|
273
|
+
cursors.openCodeSqlite = {
|
|
274
|
+
lastTimeCreated: maxTime,
|
|
275
|
+
lastProcessedIds: idsAtMax,
|
|
276
|
+
lastSessionUpdated: prevSqlite?.lastSessionUpdated ?? 0,
|
|
277
|
+
inode: dbInode,
|
|
278
|
+
updatedAt: new Date().toISOString(),
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
finally {
|
|
282
|
+
handle.close();
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
// openMessageDb returned null — DB exists but couldn't be opened
|
|
287
|
+
onProgress?.({
|
|
288
|
+
source: "opencode-sqlite",
|
|
289
|
+
phase: "warn",
|
|
290
|
+
message: `Failed to open OpenCode SQLite database at ${opts.openCodeDbPath} — SQLite token data will NOT be synced`,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
196
295
|
// ---------- OpenClaw ----------
|
|
197
296
|
if (opts.openclawDir) {
|
|
198
297
|
onProgress?.({
|
|
@@ -241,6 +340,63 @@ export async function executeSync(opts) {
|
|
|
241
340
|
});
|
|
242
341
|
}
|
|
243
342
|
}
|
|
343
|
+
// ---------- Codex CLI ----------
|
|
344
|
+
if (opts.codexSessionsDir) {
|
|
345
|
+
onProgress?.({
|
|
346
|
+
source: "codex",
|
|
347
|
+
phase: "discover",
|
|
348
|
+
message: "Discovering Codex CLI files...",
|
|
349
|
+
});
|
|
350
|
+
const files = await discoverCodexFiles(opts.codexSessionsDir);
|
|
351
|
+
filesScanned.codex = files.length;
|
|
352
|
+
onProgress?.({
|
|
353
|
+
source: "codex",
|
|
354
|
+
phase: "parse",
|
|
355
|
+
total: files.length,
|
|
356
|
+
message: `Parsing ${files.length} Codex files...`,
|
|
357
|
+
});
|
|
358
|
+
for (let i = 0; i < files.length; i++) {
|
|
359
|
+
const filePath = files[i];
|
|
360
|
+
const prev = cursors.files[filePath];
|
|
361
|
+
const st = await stat(filePath).catch(() => null);
|
|
362
|
+
if (!st)
|
|
363
|
+
continue;
|
|
364
|
+
const inode = st.ino;
|
|
365
|
+
const startOffset = prev && prev.inode === inode ? (prev.offset ?? 0) : 0;
|
|
366
|
+
const lastTotals = prev && prev.inode === inode ? (prev.lastTotals ?? null) : null;
|
|
367
|
+
const lastModel = prev && prev.inode === inode ? (prev.lastModel ?? null) : null;
|
|
368
|
+
const result = await parseCodexFile({
|
|
369
|
+
filePath,
|
|
370
|
+
startOffset,
|
|
371
|
+
lastTotals,
|
|
372
|
+
lastModel,
|
|
373
|
+
}).catch((err) => {
|
|
374
|
+
onProgress?.({
|
|
375
|
+
source: "codex",
|
|
376
|
+
phase: "warn",
|
|
377
|
+
message: `Skipping ${filePath}: ${err instanceof Error ? err.message : String(err)}`,
|
|
378
|
+
});
|
|
379
|
+
return null;
|
|
380
|
+
});
|
|
381
|
+
if (!result)
|
|
382
|
+
continue;
|
|
383
|
+
cursors.files[filePath] = {
|
|
384
|
+
inode,
|
|
385
|
+
offset: result.endOffset,
|
|
386
|
+
lastTotals: result.lastTotals,
|
|
387
|
+
lastModel: result.lastModel,
|
|
388
|
+
updatedAt: new Date().toISOString(),
|
|
389
|
+
};
|
|
390
|
+
allDeltas.push(...result.deltas);
|
|
391
|
+
sourceCounts.codex += result.deltas.length;
|
|
392
|
+
onProgress?.({
|
|
393
|
+
source: "codex",
|
|
394
|
+
phase: "parse",
|
|
395
|
+
current: i + 1,
|
|
396
|
+
total: files.length,
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
}
|
|
244
400
|
// ---------- Aggregate into half-hour buckets ----------
|
|
245
401
|
onProgress?.({
|
|
246
402
|
source: "all",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic upload engine — sends queued records to a Pew SaaS endpoint.
|
|
3
|
+
*
|
|
4
|
+
* This is the shared pipeline used by both token and session upload commands.
|
|
5
|
+
* It handles:
|
|
6
|
+
* - Config/API-key loading
|
|
7
|
+
* - Queue offset management
|
|
8
|
+
* - Preprocessing (aggregation for tokens, dedup for sessions)
|
|
9
|
+
* - Batching (≤50 records per request, D1 free plan limit)
|
|
10
|
+
* - Retry with exponential backoff on 5xx
|
|
11
|
+
* - 429 rate-limit handling with Retry-After (no double-sleep)
|
|
12
|
+
* - Progress callbacks
|
|
13
|
+
*
|
|
14
|
+
* Bug fixes over the original upload/session-upload:
|
|
15
|
+
* - 429 handler no longer double-sleeps (Retry-After + exponential backoff).
|
|
16
|
+
* Now the Retry-After sleep replaces the exponential backoff for that attempt.
|
|
17
|
+
*/
|
|
18
|
+
import type { BaseQueue } from "../storage/base-queue.js";
|
|
19
|
+
export interface UploadEngineConfig<T> {
|
|
20
|
+
/** The queue to read records from */
|
|
21
|
+
queue: BaseQueue<T>;
|
|
22
|
+
/** API endpoint path (e.g. "/api/ingest" or "/api/ingest/sessions") */
|
|
23
|
+
endpoint: string;
|
|
24
|
+
/** Human-readable name for progress messages (e.g. "records", "session records") */
|
|
25
|
+
entityName: string;
|
|
26
|
+
/** Pre-processing step: aggregation for tokens, dedup for sessions */
|
|
27
|
+
preprocess: (records: T[]) => T[];
|
|
28
|
+
}
|
|
29
|
+
export interface UploadExecuteOptions {
|
|
30
|
+
/** Directory for config file and queue state */
|
|
31
|
+
stateDir: string;
|
|
32
|
+
/** Base URL of the Pew SaaS */
|
|
33
|
+
apiUrl: string;
|
|
34
|
+
/** Whether dev mode is active (uses config.dev.json) */
|
|
35
|
+
dev?: boolean;
|
|
36
|
+
/** Injected fetch (for testing) */
|
|
37
|
+
fetch: typeof globalThis.fetch;
|
|
38
|
+
/** Max records per API request (default: 50) */
|
|
39
|
+
batchSize?: number;
|
|
40
|
+
/** Max retries per batch on 5xx (default: 2) */
|
|
41
|
+
maxRetries?: number;
|
|
42
|
+
/** Base retry delay in ms (default: 1000, doubled each retry) */
|
|
43
|
+
retryDelayMs?: number;
|
|
44
|
+
/** Progress callback */
|
|
45
|
+
onProgress?: (event: UploadProgressEvent) => void;
|
|
46
|
+
}
|
|
47
|
+
export interface UploadProgressEvent {
|
|
48
|
+
phase: "uploading" | "done";
|
|
49
|
+
batch?: number;
|
|
50
|
+
totalBatches?: number;
|
|
51
|
+
total?: number;
|
|
52
|
+
message?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface UploadResult {
|
|
55
|
+
success: boolean;
|
|
56
|
+
uploaded: number;
|
|
57
|
+
batches: number;
|
|
58
|
+
error?: string;
|
|
59
|
+
}
|
|
60
|
+
export declare function createUploadEngine<T>(config: UploadEngineConfig<T>): {
|
|
61
|
+
execute: (opts: UploadExecuteOptions) => Promise<UploadResult>;
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=upload-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-engine.d.ts","sourceRoot":"","sources":["../../src/commands/upload-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAM1D,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,qCAAqC;IACrC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,UAAU,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;oBAGpC,oBAAoB,KAAG,OAAO,CAAC,YAAY,CAAC;EAkG1E"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic upload engine — sends queued records to a Pew SaaS endpoint.
|
|
3
|
+
*
|
|
4
|
+
* This is the shared pipeline used by both token and session upload commands.
|
|
5
|
+
* It handles:
|
|
6
|
+
* - Config/API-key loading
|
|
7
|
+
* - Queue offset management
|
|
8
|
+
* - Preprocessing (aggregation for tokens, dedup for sessions)
|
|
9
|
+
* - Batching (≤50 records per request, D1 free plan limit)
|
|
10
|
+
* - Retry with exponential backoff on 5xx
|
|
11
|
+
* - 429 rate-limit handling with Retry-After (no double-sleep)
|
|
12
|
+
* - Progress callbacks
|
|
13
|
+
*
|
|
14
|
+
* Bug fixes over the original upload/session-upload:
|
|
15
|
+
* - 429 handler no longer double-sleeps (Retry-After + exponential backoff).
|
|
16
|
+
* Now the Retry-After sleep replaces the exponential backoff for that attempt.
|
|
17
|
+
*/
|
|
18
|
+
import { ConfigManager } from "../config/manager.js";
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Constants
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
const DEFAULT_BATCH_SIZE = 50;
|
|
23
|
+
const DEFAULT_MAX_RETRIES = 2;
|
|
24
|
+
const DEFAULT_RETRY_DELAY_MS = 1000;
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Engine factory
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
export function createUploadEngine(config) {
|
|
29
|
+
const { queue, endpoint, entityName, preprocess } = config;
|
|
30
|
+
async function execute(opts) {
|
|
31
|
+
const { stateDir, apiUrl, dev = false, fetch: fetchFn, batchSize = DEFAULT_BATCH_SIZE, maxRetries = DEFAULT_MAX_RETRIES, retryDelayMs = DEFAULT_RETRY_DELAY_MS, onProgress, } = opts;
|
|
32
|
+
// 1. Load API key
|
|
33
|
+
const configManager = new ConfigManager(stateDir, dev);
|
|
34
|
+
const cfg = await configManager.load();
|
|
35
|
+
if (!cfg.token) {
|
|
36
|
+
return {
|
|
37
|
+
success: false,
|
|
38
|
+
uploaded: 0,
|
|
39
|
+
batches: 0,
|
|
40
|
+
error: "Not logged in. Run `pew login` first.",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// 2. Read un-uploaded records
|
|
44
|
+
const currentOffset = await queue.loadOffset();
|
|
45
|
+
const { records: rawRecords, newOffset } = await queue.readFromOffset(currentOffset);
|
|
46
|
+
if (rawRecords.length === 0) {
|
|
47
|
+
return { success: true, uploaded: 0, batches: 0 };
|
|
48
|
+
}
|
|
49
|
+
// 2b. Pre-process (aggregate for tokens, dedup for sessions)
|
|
50
|
+
const records = preprocess(rawRecords);
|
|
51
|
+
// 3. Split into batches
|
|
52
|
+
const batches = [];
|
|
53
|
+
for (let i = 0; i < records.length; i += batchSize) {
|
|
54
|
+
batches.push(records.slice(i, i + batchSize));
|
|
55
|
+
}
|
|
56
|
+
// 4. Upload each batch
|
|
57
|
+
const fullEndpoint = `${apiUrl}${endpoint}`;
|
|
58
|
+
let totalUploaded = 0;
|
|
59
|
+
let batchesCompleted = 0;
|
|
60
|
+
for (let batchIdx = 0; batchIdx < batches.length; batchIdx++) {
|
|
61
|
+
const batch = batches[batchIdx];
|
|
62
|
+
onProgress?.({
|
|
63
|
+
phase: "uploading",
|
|
64
|
+
batch: batchIdx + 1,
|
|
65
|
+
totalBatches: batches.length,
|
|
66
|
+
total: records.length,
|
|
67
|
+
message: `Uploading ${entityName} batch ${batchIdx + 1}/${batches.length} (${batch.length} records)...`,
|
|
68
|
+
});
|
|
69
|
+
const result = await sendBatchWithRetry({
|
|
70
|
+
endpoint: fullEndpoint,
|
|
71
|
+
token: cfg.token,
|
|
72
|
+
batch,
|
|
73
|
+
fetchFn,
|
|
74
|
+
maxRetries,
|
|
75
|
+
retryDelayMs,
|
|
76
|
+
});
|
|
77
|
+
if (!result.ok) {
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
uploaded: totalUploaded,
|
|
81
|
+
batches: batchesCompleted,
|
|
82
|
+
error: result.error,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
totalUploaded += batch.length;
|
|
86
|
+
batchesCompleted++;
|
|
87
|
+
}
|
|
88
|
+
// 5. All batches succeeded — save final offset
|
|
89
|
+
await queue.saveOffset(newOffset);
|
|
90
|
+
onProgress?.({
|
|
91
|
+
phase: "done",
|
|
92
|
+
total: totalUploaded,
|
|
93
|
+
message: `Uploaded ${totalUploaded} ${entityName} in ${batchesCompleted} batch(es).`,
|
|
94
|
+
});
|
|
95
|
+
return {
|
|
96
|
+
success: true,
|
|
97
|
+
uploaded: totalUploaded,
|
|
98
|
+
batches: batchesCompleted,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return { execute };
|
|
102
|
+
}
|
|
103
|
+
async function sendBatchWithRetry(opts) {
|
|
104
|
+
const { endpoint, token, batch, fetchFn, maxRetries, retryDelayMs } = opts;
|
|
105
|
+
let lastError = "";
|
|
106
|
+
let sleptFor429 = false;
|
|
107
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
108
|
+
// Exponential backoff — but skip if we already slept for a 429 Retry-After
|
|
109
|
+
if (attempt > 0 && !sleptFor429 && retryDelayMs > 0) {
|
|
110
|
+
await sleep(retryDelayMs * 2 ** (attempt - 1));
|
|
111
|
+
}
|
|
112
|
+
sleptFor429 = false; // Reset for next iteration
|
|
113
|
+
try {
|
|
114
|
+
const resp = await fetchFn(endpoint, {
|
|
115
|
+
method: "POST",
|
|
116
|
+
headers: {
|
|
117
|
+
"Content-Type": "application/json",
|
|
118
|
+
Authorization: `Bearer ${token}`,
|
|
119
|
+
},
|
|
120
|
+
body: JSON.stringify(batch),
|
|
121
|
+
});
|
|
122
|
+
if (resp.ok) {
|
|
123
|
+
return { ok: true };
|
|
124
|
+
}
|
|
125
|
+
// 429 — rate limited, retry with Retry-After if available
|
|
126
|
+
if (resp.status === 429) {
|
|
127
|
+
const retryAfter = resp.headers.get("Retry-After");
|
|
128
|
+
const retryMs = retryAfter
|
|
129
|
+
? Math.max(Number(retryAfter) * 1000, retryDelayMs)
|
|
130
|
+
: retryDelayMs * 2 ** attempt;
|
|
131
|
+
if (attempt < maxRetries && retryMs > 0) {
|
|
132
|
+
await sleep(retryMs);
|
|
133
|
+
sleptFor429 = true; // Skip the top-of-loop backoff on next iteration
|
|
134
|
+
}
|
|
135
|
+
const body = await resp.json().catch(() => ({}));
|
|
136
|
+
lastError = `429: ${body.error ?? "Too Many Requests"}`;
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
// 4xx — client error, don't retry
|
|
140
|
+
if (resp.status >= 400 && resp.status < 500) {
|
|
141
|
+
const body = await resp.json().catch(() => ({}));
|
|
142
|
+
const msg = body.error ?? `HTTP ${resp.status}`;
|
|
143
|
+
return { ok: false, error: `${resp.status}: ${msg}` };
|
|
144
|
+
}
|
|
145
|
+
// 5xx — server error, retry
|
|
146
|
+
const body = await resp.json().catch(() => ({}));
|
|
147
|
+
lastError = `${resp.status}: ${body.error ?? "Server Error"}`;
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
lastError = String(err.message ?? err);
|
|
151
|
+
if (attempt >= maxRetries) {
|
|
152
|
+
return { ok: false, error: lastError };
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
ok: false,
|
|
158
|
+
error: `Upload failed after ${maxRetries + 1} attempts: ${lastError}`,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function sleep(ms) {
|
|
162
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=upload-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-engine.js","sourceRoot":"","sources":["../../src/commands/upload-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CLI upload command — sends local queue records to the Pew SaaS.
|
|
2
|
+
* CLI upload command — sends local token queue records to the Pew SaaS.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* 2. Read un-uploaded records from queue (using saved offset)
|
|
7
|
-
* 3. Split into batches of ≤50 (D1 Free plan: 50 queries/Worker invocation)
|
|
8
|
-
* 4. POST each batch to /api/ingest with Bearer token
|
|
9
|
-
* 5. Persist offset after each successful batch (for resume on failure)
|
|
10
|
-
* 6. Retry on 5xx with exponential backoff
|
|
4
|
+
* Thin wrapper around the generic upload engine with token-specific
|
|
5
|
+
* preprocessing (aggregation by source/model/hour_start).
|
|
11
6
|
*/
|
|
7
|
+
import type { UploadResult, UploadProgressEvent } from "./upload-engine.js";
|
|
12
8
|
import type { QueueRecord } from "@pew/core";
|
|
13
9
|
export interface UploadOptions {
|
|
14
10
|
/** Directory for config file and queue state */
|
|
@@ -28,19 +24,7 @@ export interface UploadOptions {
|
|
|
28
24
|
/** Progress callback */
|
|
29
25
|
onProgress?: (event: UploadProgressEvent) => void;
|
|
30
26
|
}
|
|
31
|
-
export
|
|
32
|
-
phase: "uploading" | "done";
|
|
33
|
-
batch?: number;
|
|
34
|
-
totalBatches?: number;
|
|
35
|
-
total?: number;
|
|
36
|
-
message?: string;
|
|
37
|
-
}
|
|
38
|
-
export interface UploadResult {
|
|
39
|
-
success: boolean;
|
|
40
|
-
uploaded: number;
|
|
41
|
-
batches: number;
|
|
42
|
-
error?: string;
|
|
43
|
-
}
|
|
27
|
+
export type { UploadResult, UploadProgressEvent };
|
|
44
28
|
/**
|
|
45
29
|
* Aggregate QueueRecords by (source, model, hour_start), summing token fields.
|
|
46
30
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EAEpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAM7C,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wBAAwB;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACnD;AAED,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAMlD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAoBtE;AAMD,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAW9E"}
|