@nocoo/pew 1.3.0 → 1.5.0
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/bin.js +0 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -20
- package/dist/cli.js.map +1 -1
- package/dist/commands/login.d.ts +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/session-sync.d.ts.map +1 -1
- package/dist/commands/session-sync.js +17 -5
- package/dist/commands/session-sync.js.map +1 -1
- package/dist/commands/session-upload.d.ts +2 -2
- package/dist/commands/session-upload.d.ts.map +1 -1
- package/dist/commands/session-upload.js +1 -1
- package/dist/commands/session-upload.js.map +1 -1
- package/dist/commands/sync.js +3 -3
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/upload-engine.d.ts +2 -2
- package/dist/commands/upload-engine.js +1 -1
- package/dist/commands/upload.d.ts +2 -2
- package/dist/commands/upload.d.ts.map +1 -1
- package/dist/commands/upload.js +1 -1
- package/dist/commands/upload.js.map +1 -1
- package/dist/drivers/registry.d.ts.map +1 -1
- package/dist/drivers/registry.js +6 -6
- package/dist/drivers/registry.js.map +1 -1
- package/dist/drivers/token/opencode-json-token-driver.d.ts.map +1 -1
- package/dist/drivers/token/opencode-json-token-driver.js +0 -3
- package/dist/drivers/token/opencode-json-token-driver.js.map +1 -1
- package/dist/drivers/token/opencode-sqlite-token-driver.d.ts +2 -2
- package/dist/drivers/token/opencode-sqlite-token-driver.d.ts.map +1 -1
- package/dist/drivers/token/opencode-sqlite-token-driver.js +1 -1
- package/dist/notifier/coordinator.js +3 -1
- package/dist/notifier/coordinator.js.map +1 -1
- package/dist/notifier/openclaw-hook.js +1 -1
- package/dist/notifier/registry.js +19 -19
- package/dist/notifier/registry.js.map +1 -1
- package/dist/parsers/claude-session.d.ts.map +1 -1
- package/dist/parsers/claude-session.js +5 -6
- package/dist/parsers/claude-session.js.map +1 -1
- package/dist/parsers/claude.d.ts.map +1 -1
- package/dist/parsers/claude.js +1 -14
- package/dist/parsers/claude.js.map +1 -1
- package/dist/parsers/codex-session.d.ts.map +1 -1
- package/dist/parsers/codex-session.js +2 -4
- package/dist/parsers/codex-session.js.map +1 -1
- package/dist/parsers/codex.d.ts.map +1 -1
- package/dist/parsers/codex.js +1 -14
- package/dist/parsers/codex.js.map +1 -1
- package/dist/parsers/gemini-session.d.ts.map +1 -1
- package/dist/parsers/gemini-session.js +5 -2
- package/dist/parsers/gemini-session.js.map +1 -1
- package/dist/parsers/gemini.d.ts.map +1 -1
- package/dist/parsers/gemini.js +2 -15
- package/dist/parsers/gemini.js.map +1 -1
- package/dist/parsers/openclaw-session.d.ts.map +1 -1
- package/dist/parsers/openclaw-session.js +3 -2
- package/dist/parsers/openclaw-session.js.map +1 -1
- package/dist/parsers/openclaw.d.ts.map +1 -1
- package/dist/parsers/openclaw.js +4 -10
- package/dist/parsers/openclaw.js.map +1 -1
- package/dist/parsers/opencode-session.d.ts.map +1 -1
- package/dist/parsers/opencode-session.js +1 -12
- package/dist/parsers/opencode-session.js.map +1 -1
- package/dist/parsers/opencode-sqlite-db.d.ts +2 -1
- package/dist/parsers/opencode-sqlite-db.d.ts.map +1 -1
- package/dist/parsers/opencode-sqlite-db.js +52 -7
- package/dist/parsers/opencode-sqlite-db.js.map +1 -1
- package/dist/parsers/opencode-sqlite-session.d.ts +1 -1
- package/dist/parsers/opencode-sqlite-session.d.ts.map +1 -1
- package/dist/parsers/opencode-sqlite-session.js +4 -14
- package/dist/parsers/opencode-sqlite-session.js.map +1 -1
- package/dist/parsers/opencode-sqlite.d.ts +1 -1
- package/dist/parsers/opencode-sqlite.d.ts.map +1 -1
- package/dist/parsers/opencode-sqlite.js +4 -9
- package/dist/parsers/opencode-sqlite.js.map +1 -1
- package/dist/parsers/opencode.d.ts +0 -5
- package/dist/parsers/opencode.d.ts.map +1 -1
- package/dist/parsers/opencode.js +2 -26
- package/dist/parsers/opencode.js.map +1 -1
- package/dist/parsers/vscode-copilot.d.ts.map +1 -1
- package/dist/parsers/vscode-copilot.js +1 -7
- package/dist/parsers/vscode-copilot.js.map +1 -1
- package/dist/utils/hash-project-ref.d.ts +23 -0
- package/dist/utils/hash-project-ref.d.ts.map +1 -0
- package/dist/utils/hash-project-ref.js +31 -0
- package/dist/utils/hash-project-ref.js.map +1 -0
- package/dist/utils/paths.d.ts +3 -3
- package/dist/utils/paths.js +3 -3
- package/dist/utils/time.d.ts +6 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +13 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/token-delta.d.ts +6 -0
- package/dist/utils/token-delta.d.ts.map +1 -0
- package/dist/utils/token-delta.js +15 -0
- package/dist/utils/token-delta.js.map +1 -0
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-session.js","sourceRoot":"","sources":["../../src/parsers/openclaw-session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw-session.js","sourceRoot":"","sources":["../../src/parsers/openclaw-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/parsers/openclaw.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/parsers/openclaw.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkE9B"}
|
package/dist/parsers/openclaw.js
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { createReadStream } from "node:fs";
|
|
2
2
|
import { stat } from "node:fs/promises";
|
|
3
3
|
import { createInterface } from "node:readline";
|
|
4
|
-
|
|
5
|
-
function isAllZero(d) {
|
|
6
|
-
return (d.inputTokens === 0 &&
|
|
7
|
-
d.cachedInputTokens === 0 &&
|
|
8
|
-
d.outputTokens === 0 &&
|
|
9
|
-
d.reasoningOutputTokens === 0);
|
|
10
|
-
}
|
|
4
|
+
import { isAllZero, toNonNegInt } from "../utils/token-delta.js";
|
|
11
5
|
/**
|
|
12
6
|
* Parse an OpenClaw session JSONL file incrementally from a byte offset.
|
|
13
7
|
*
|
|
@@ -61,9 +55,9 @@ export async function parseOpenClawFile(opts) {
|
|
|
61
55
|
continue;
|
|
62
56
|
const model = typeof msg.model === "string" ? msg.model.trim() : "unknown";
|
|
63
57
|
const tokens = {
|
|
64
|
-
inputTokens:
|
|
65
|
-
cachedInputTokens:
|
|
66
|
-
outputTokens:
|
|
58
|
+
inputTokens: toNonNegInt(usage.input),
|
|
59
|
+
cachedInputTokens: toNonNegInt(usage.cacheRead) + toNonNegInt(usage.cacheWrite),
|
|
60
|
+
outputTokens: toNonNegInt(usage.output),
|
|
67
61
|
reasoningOutputTokens: 0,
|
|
68
62
|
};
|
|
69
63
|
if (isAllZero(tokens))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/parsers/openclaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/parsers/openclaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-session.d.ts","sourceRoot":"","sources":["../../src/parsers/opencode-session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode-session.d.ts","sourceRoot":"","sources":["../../src/parsers/opencode-session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,WAAW,CAAC;AAGzD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,EAAE,CAAC,CAmH5B"}
|
|
@@ -6,18 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { readdir, readFile } from "node:fs/promises";
|
|
8
8
|
import { join, basename } from "node:path";
|
|
9
|
-
|
|
10
|
-
* Coerce an epoch value to milliseconds.
|
|
11
|
-
* Values < 1e12 are treated as seconds and multiplied by 1000.
|
|
12
|
-
*/
|
|
13
|
-
function coerceEpochMs(v) {
|
|
14
|
-
const n = Number(v);
|
|
15
|
-
if (!Number.isFinite(n) || n <= 0)
|
|
16
|
-
return 0;
|
|
17
|
-
if (n < 1e12)
|
|
18
|
-
return Math.floor(n * 1000);
|
|
19
|
-
return Math.floor(n);
|
|
20
|
-
}
|
|
9
|
+
import { coerceEpochMs } from "../utils/time.js";
|
|
21
10
|
/**
|
|
22
11
|
* Collect session snapshots from an OpenCode session directory.
|
|
23
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-session.js","sourceRoot":"","sources":["../../src/parsers/opencode-session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode-session.js","sourceRoot":"","sources":["../../src/parsers/opencode-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@ import type { SessionRow, SessionMessageRow } from "./opencode-sqlite-session.js
|
|
|
4
4
|
* Open an OpenCode SQLite database in read-only mode
|
|
5
5
|
* and return a queryMessages function for use with parseOpenCodeSqlite().
|
|
6
6
|
*
|
|
7
|
-
* Uses bun:sqlite
|
|
7
|
+
* Uses bun:sqlite under Bun runtime and better-sqlite3 under Node.js
|
|
8
|
+
* for cross-runtime SQLite access.
|
|
8
9
|
* Returns null if the database cannot be opened.
|
|
9
10
|
*/
|
|
10
11
|
export declare function openMessageDb(dbPath: string): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-sqlite-db.d.ts","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite-db.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opencode-sqlite-db.d.ts","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAwDlF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GACb;IAAE,aAAa,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,GAAG,IAAI,CAsB9D;AAED,0EAA0E;AAC1E,MAAM,MAAM,eAAe,GAAG,CAAC,eAAe,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;AAExE,yEAAyE;AACzE,MAAM,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,iBAAiB,EAAE,CAAC;AAEnF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GACb;IACD,aAAa,EAAE,eAAe,CAAC;IAC/B,oBAAoB,EAAE,sBAAsB,CAAC;IAC7C,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,GAAG,IAAI,CAgDP"}
|
|
@@ -1,20 +1,62 @@
|
|
|
1
|
-
|
|
1
|
+
// Cache the resolved SQLite implementation
|
|
2
|
+
let cachedSqliteImpl = null;
|
|
3
|
+
let sqliteLoadAttempted = false;
|
|
4
|
+
/**
|
|
5
|
+
* Synchronously get a SQLite database opener.
|
|
6
|
+
* Uses bun:sqlite under Bun, better-sqlite3 under Node.js.
|
|
7
|
+
* Returns null if neither is available.
|
|
8
|
+
*/
|
|
9
|
+
function getSqliteOpener() {
|
|
10
|
+
if (sqliteLoadAttempted)
|
|
11
|
+
return cachedSqliteImpl;
|
|
12
|
+
sqliteLoadAttempted = true;
|
|
13
|
+
const isBun = typeof globalThis.Bun !== "undefined";
|
|
14
|
+
if (isBun) {
|
|
15
|
+
// Bun: use bun:sqlite (synchronous require works in Bun)
|
|
16
|
+
try {
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
18
|
+
const { Database } = require("bun:sqlite");
|
|
19
|
+
cachedSqliteImpl = (dbPath) => new Database(dbPath, { readonly: true });
|
|
20
|
+
return cachedSqliteImpl;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// bun:sqlite not available (shouldn't happen in Bun)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Node.js: use better-sqlite3
|
|
28
|
+
try {
|
|
29
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
30
|
+
const BetterSqlite3 = require("better-sqlite3");
|
|
31
|
+
cachedSqliteImpl = (dbPath) => new BetterSqlite3(dbPath, { readonly: true });
|
|
32
|
+
return cachedSqliteImpl;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// better-sqlite3 not available (native module issues)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
2
40
|
/**
|
|
3
41
|
* Open an OpenCode SQLite database in read-only mode
|
|
4
42
|
* and return a queryMessages function for use with parseOpenCodeSqlite().
|
|
5
43
|
*
|
|
6
|
-
* Uses bun:sqlite
|
|
44
|
+
* Uses bun:sqlite under Bun runtime and better-sqlite3 under Node.js
|
|
45
|
+
* for cross-runtime SQLite access.
|
|
7
46
|
* Returns null if the database cannot be opened.
|
|
8
47
|
*/
|
|
9
48
|
export function openMessageDb(dbPath) {
|
|
49
|
+
const opener = getSqliteOpener();
|
|
50
|
+
if (!opener)
|
|
51
|
+
return null;
|
|
10
52
|
let db;
|
|
11
53
|
try {
|
|
12
|
-
db =
|
|
54
|
+
db = opener(dbPath);
|
|
13
55
|
}
|
|
14
56
|
catch {
|
|
15
57
|
return null;
|
|
16
58
|
}
|
|
17
|
-
const stmt = db.
|
|
59
|
+
const stmt = db.prepare(`SELECT id, session_id, time_created, json_extract(data, '$.role') as role, data
|
|
18
60
|
FROM message
|
|
19
61
|
WHERE time_created >= ?
|
|
20
62
|
ORDER BY time_created ASC`);
|
|
@@ -30,14 +72,17 @@ export function openMessageDb(dbPath) {
|
|
|
30
72
|
* Returns null if the database cannot be opened.
|
|
31
73
|
*/
|
|
32
74
|
export function openSessionDb(dbPath) {
|
|
75
|
+
const opener = getSqliteOpener();
|
|
76
|
+
if (!opener)
|
|
77
|
+
return null;
|
|
33
78
|
let db;
|
|
34
79
|
try {
|
|
35
|
-
db =
|
|
80
|
+
db = opener(dbPath);
|
|
36
81
|
}
|
|
37
82
|
catch {
|
|
38
83
|
return null;
|
|
39
84
|
}
|
|
40
|
-
const sessionStmt = db.
|
|
85
|
+
const sessionStmt = db.prepare(`SELECT id, project_id, title, time_created, time_updated
|
|
41
86
|
FROM session
|
|
42
87
|
WHERE time_updated >= ?
|
|
43
88
|
ORDER BY time_updated ASC`);
|
|
@@ -53,7 +98,7 @@ export function openSessionDb(dbPath) {
|
|
|
53
98
|
for (let i = 0; i < sessionIds.length; i += CHUNK_SIZE) {
|
|
54
99
|
const chunk = sessionIds.slice(i, i + CHUNK_SIZE);
|
|
55
100
|
const placeholders = chunk.map(() => "?").join(",");
|
|
56
|
-
const stmt = db.
|
|
101
|
+
const stmt = db.prepare(`SELECT session_id, json_extract(data, '$.role') as role, time_created, data
|
|
57
102
|
FROM message
|
|
58
103
|
WHERE session_id IN (${placeholders})
|
|
59
104
|
ORDER BY time_created ASC`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-sqlite-db.js","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite-db.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"opencode-sqlite-db.js","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Queries the `session` and `message` tables from opencode.db
|
|
5
5
|
* to produce SessionSnapshot records. Uses dependency injection
|
|
6
|
-
* (pre-fetched rows) for testability without
|
|
6
|
+
* (pre-fetched rows) for testability without native SQLite.
|
|
7
7
|
*/
|
|
8
8
|
import type { SessionSnapshot } from "@pew/core";
|
|
9
9
|
/** Row shape from the session table */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-sqlite-session.d.ts","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite-session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode-sqlite-session.d.ts","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite-session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,WAAW,CAAC;AAIzD,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,eAAe,EAAE,CAuGnB"}
|
|
@@ -3,20 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Queries the `session` and `message` tables from opencode.db
|
|
5
5
|
* to produce SessionSnapshot records. Uses dependency injection
|
|
6
|
-
* (pre-fetched rows) for testability without
|
|
6
|
+
* (pre-fetched rows) for testability without native SQLite.
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* Values < 1e12 are treated as seconds and multiplied by 1000.
|
|
11
|
-
*/
|
|
12
|
-
function coerceEpochMs(v) {
|
|
13
|
-
const n = Number(v);
|
|
14
|
-
if (!Number.isFinite(n) || n <= 0)
|
|
15
|
-
return 0;
|
|
16
|
-
if (n < 1e12)
|
|
17
|
-
return Math.floor(n * 1000);
|
|
18
|
-
return Math.floor(n);
|
|
19
|
-
}
|
|
8
|
+
import { hashProjectRef } from "../utils/hash-project-ref.js";
|
|
9
|
+
import { coerceEpochMs } from "../utils/time.js";
|
|
20
10
|
/**
|
|
21
11
|
* Collect session snapshots from pre-fetched SQLite rows.
|
|
22
12
|
*
|
|
@@ -111,7 +101,7 @@ export function collectOpenCodeSqliteSessions(sessions, messages) {
|
|
|
111
101
|
userMessages,
|
|
112
102
|
assistantMessages,
|
|
113
103
|
totalMessages,
|
|
114
|
-
projectRef: session.project_id ?? null,
|
|
104
|
+
projectRef: hashProjectRef(session.project_id ?? null),
|
|
115
105
|
model: lastModel,
|
|
116
106
|
snapshotAt: new Date().toISOString(),
|
|
117
107
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-sqlite-session.js","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite-session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"opencode-sqlite-session.js","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ export type QueryMessagesFn = (lastTimeCreated: number) => MessageRow[];
|
|
|
34
34
|
* Unlike the JSON file parser, no diffTotals is needed — each SQLite row
|
|
35
35
|
* is an independent message with absolute token values.
|
|
36
36
|
*
|
|
37
|
-
* The `queryMessages` function is injected to decouple from
|
|
37
|
+
* The `queryMessages` function is injected to decouple from the native SQLite module
|
|
38
38
|
* for testability. Use `openMessageDb()` from `opencode-sqlite-db.ts` to
|
|
39
39
|
* create the real adapter at runtime.
|
|
40
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-sqlite.d.ts","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode-sqlite.d.ts","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,oDAAoD;IACpD,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,eAAe,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;AAExE;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAAE,GACjB,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAsDrC;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAgChC"}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { stat } from "node:fs/promises";
|
|
2
|
-
import { normalizeOpenCodeTokens
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return (d.inputTokens === 0 &&
|
|
6
|
-
d.cachedInputTokens === 0 &&
|
|
7
|
-
d.outputTokens === 0 &&
|
|
8
|
-
d.reasoningOutputTokens === 0);
|
|
9
|
-
}
|
|
2
|
+
import { normalizeOpenCodeTokens } from "./opencode.js";
|
|
3
|
+
import { isAllZero } from "../utils/token-delta.js";
|
|
4
|
+
import { coerceEpochMs } from "../utils/time.js";
|
|
10
5
|
/**
|
|
11
6
|
* Parse message rows from OpenCode's SQLite database for token usage records.
|
|
12
7
|
*
|
|
@@ -15,7 +10,7 @@ function isAllZero(d) {
|
|
|
15
10
|
* Unlike the JSON file parser, no diffTotals is needed — each SQLite row
|
|
16
11
|
* is an independent message with absolute token values.
|
|
17
12
|
*
|
|
18
|
-
* The `queryMessages` function is injected to decouple from
|
|
13
|
+
* The `queryMessages` function is injected to decouple from the native SQLite module
|
|
19
14
|
* for testability. Use `openMessageDb()` from `opencode-sqlite-db.ts` to
|
|
20
15
|
* create the real adapter at runtime.
|
|
21
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-sqlite.js","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,EAAE,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"opencode-sqlite.js","sourceRoot":"","sources":["../../src/parsers/opencode-sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,6 @@ export interface OpenCodeFileResult {
|
|
|
6
6
|
messageKey: string | null;
|
|
7
7
|
lastTotals: TokenDelta | null;
|
|
8
8
|
}
|
|
9
|
-
/**
|
|
10
|
-
* Coerce an epoch value to milliseconds.
|
|
11
|
-
* Values < 1e12 are treated as seconds and multiplied by 1000.
|
|
12
|
-
*/
|
|
13
|
-
export declare function coerceEpochMs(v: unknown): number;
|
|
14
9
|
/**
|
|
15
10
|
* Normalize OpenCode's token object to our TokenDelta format.
|
|
16
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/parsers/opencode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/parsers/opencode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACjD,UAAU,GAAG,IAAI,CAanB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;CAC/B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAwE9B"}
|
package/dist/parsers/opencode.js
CHANGED
|
@@ -1,24 +1,7 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { diffTotals } from "./gemini.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const n = Number(v);
|
|
6
|
-
if (!Number.isFinite(n) || n < 0)
|
|
7
|
-
return 0;
|
|
8
|
-
return Math.floor(n);
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Coerce an epoch value to milliseconds.
|
|
12
|
-
* Values < 1e12 are treated as seconds and multiplied by 1000.
|
|
13
|
-
*/
|
|
14
|
-
export function coerceEpochMs(v) {
|
|
15
|
-
const n = Number(v);
|
|
16
|
-
if (!Number.isFinite(n) || n <= 0)
|
|
17
|
-
return 0;
|
|
18
|
-
if (n < 1e12)
|
|
19
|
-
return Math.floor(n * 1000);
|
|
20
|
-
return Math.floor(n);
|
|
21
|
-
}
|
|
3
|
+
import { isAllZero, toNonNegInt } from "../utils/token-delta.js";
|
|
4
|
+
import { coerceEpochMs } from "../utils/time.js";
|
|
22
5
|
/**
|
|
23
6
|
* Normalize OpenCode's token object to our TokenDelta format.
|
|
24
7
|
*
|
|
@@ -41,13 +24,6 @@ export function normalizeOpenCodeTokens(tokens) {
|
|
|
41
24
|
reasoningOutputTokens: toNonNegInt(tokens.reasoning),
|
|
42
25
|
};
|
|
43
26
|
}
|
|
44
|
-
/** Check if a TokenDelta is all zeros */
|
|
45
|
-
function isAllZero(d) {
|
|
46
|
-
return (d.inputTokens === 0 &&
|
|
47
|
-
d.cachedInputTokens === 0 &&
|
|
48
|
-
d.outputTokens === 0 &&
|
|
49
|
-
d.reasoningOutputTokens === 0);
|
|
50
|
-
}
|
|
51
27
|
/**
|
|
52
28
|
* Parse a single OpenCode message JSON file.
|
|
53
29
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/parsers/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/parsers/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjD;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAkD;IAElD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAA4C,CAAC;IAClE,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE3C,OAAO;QACL,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU;QACnD,iBAAiB,EAAE,SAAS;QAC5B,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;QACxC,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;KACrD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAGvC;IACC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAEtC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACvD,CAAC;IAED,kCAAkC;IAClC,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACvD,CAAC;IAED,qBAAqB;IACrB,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,MAAM,UAAU,GACd,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtD,mBAAmB;IACnB,MAAM,aAAa,GAAG,uBAAuB,CAC3C,GAAG,CAAC,MAAwC,CAC7C,CAAC;IACF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IACjD,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;IAChE,CAAC;IAED,wDAAwD;IACxD,MAAM,IAAI,GAAG,GAAG,CAAC,IAA2C,CAAC;IAC7D,MAAM,WAAW,GACf,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IACjD,CAAC;IAED,gBAAgB;IAChB,MAAM,KAAK,GACT,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAC7B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;QACpB,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;YAC7B,CAAC,CAAE,GAAG,CAAC,KAAgB,CAAC,IAAI,EAAE;YAC9B,CAAC,CAAC,SAAS,CAAC;IAElB,OAAO;QACL,KAAK,EAAE;YACL,MAAM,EAAE,UAAoB;YAC5B,KAAK;YACL,SAAS,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE;YAC9C,MAAM,EAAE,UAAU;SACnB;QACD,UAAU;QACV,UAAU,EAAE,aAAa;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vscode-copilot.d.ts","sourceRoot":"","sources":["../../src/parsers/vscode-copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"vscode-copilot.d.ts","sourceRoot":"","sources":["../../src/parsers/vscode-copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,gEAAgE;IAChE,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CACnC;AAED,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,4EAA4E;IAC5E,uBAAuB,EAAE,MAAM,EAAE,CAAC;CACnC;AA6BD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,uBAAuB,CAAC,CAgNlC"}
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
import { createReadStream } from "node:fs";
|
|
23
23
|
import { stat } from "node:fs/promises";
|
|
24
24
|
import { createInterface } from "node:readline";
|
|
25
|
+
import { toNonNegInt } from "../utils/token-delta.js";
|
|
25
26
|
// ---------------------------------------------------------------------------
|
|
26
27
|
// Helpers
|
|
27
28
|
// ---------------------------------------------------------------------------
|
|
@@ -29,13 +30,6 @@ import { createInterface } from "node:readline";
|
|
|
29
30
|
function normalizeModelId(raw) {
|
|
30
31
|
return raw.startsWith("copilot/") ? raw.slice(8) : raw;
|
|
31
32
|
}
|
|
32
|
-
/** Coerce to non-negative integer, returning 0 for invalid values */
|
|
33
|
-
function toNonNegInt(v) {
|
|
34
|
-
const n = Number(v);
|
|
35
|
-
if (!Number.isFinite(n) || n < 0)
|
|
36
|
-
return 0;
|
|
37
|
-
return Math.floor(n);
|
|
38
|
-
}
|
|
39
33
|
/** Extract modelId and timestamp from a request object */
|
|
40
34
|
function extractRequestMeta(req) {
|
|
41
35
|
const rawModelId = req.modelId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vscode-copilot.js","sourceRoot":"","sources":["../../src/parsers/vscode-copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"vscode-copilot.js","sourceRoot":"","sources":["../../src/parsers/vscode-copilot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Privacy-safe project reference hashing.
|
|
3
|
+
*
|
|
4
|
+
* All project references are SHA-256 hashed before upload to ensure
|
|
5
|
+
* pew never transmits plaintext project names, paths, or other
|
|
6
|
+
* identifying information. The hash is truncated to 16 hex chars
|
|
7
|
+
* (64 bits) — enough for uniqueness, short enough for display.
|
|
8
|
+
*
|
|
9
|
+
* This module is the single source of truth for project_ref hashing.
|
|
10
|
+
* Parsers should use it directly, and toQueueRecord() applies it as
|
|
11
|
+
* a defense-in-depth gateway before any data leaves the device.
|
|
12
|
+
*/
|
|
13
|
+
/** Length of the hex prefix used for project_ref hashes */
|
|
14
|
+
export declare const PROJECT_REF_HASH_LENGTH = 16;
|
|
15
|
+
/**
|
|
16
|
+
* Hash a project reference string.
|
|
17
|
+
*
|
|
18
|
+
* Returns a 16-char hex prefix of SHA-256(input), or null if input is null/empty.
|
|
19
|
+
* Idempotent in practice: re-hashing a hash produces a different but equally
|
|
20
|
+
* opaque value. The defense-in-depth layer in toQueueRecord() relies on this.
|
|
21
|
+
*/
|
|
22
|
+
export declare function hashProjectRef(raw: string | null): string | null;
|
|
23
|
+
//# sourceMappingURL=hash-project-ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-project-ref.d.ts","sourceRoot":"","sources":["../../src/utils/hash-project-ref.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,2DAA2D;AAC3D,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAMhE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Privacy-safe project reference hashing.
|
|
3
|
+
*
|
|
4
|
+
* All project references are SHA-256 hashed before upload to ensure
|
|
5
|
+
* pew never transmits plaintext project names, paths, or other
|
|
6
|
+
* identifying information. The hash is truncated to 16 hex chars
|
|
7
|
+
* (64 bits) — enough for uniqueness, short enough for display.
|
|
8
|
+
*
|
|
9
|
+
* This module is the single source of truth for project_ref hashing.
|
|
10
|
+
* Parsers should use it directly, and toQueueRecord() applies it as
|
|
11
|
+
* a defense-in-depth gateway before any data leaves the device.
|
|
12
|
+
*/
|
|
13
|
+
import { createHash } from "node:crypto";
|
|
14
|
+
/** Length of the hex prefix used for project_ref hashes */
|
|
15
|
+
export const PROJECT_REF_HASH_LENGTH = 16;
|
|
16
|
+
/**
|
|
17
|
+
* Hash a project reference string.
|
|
18
|
+
*
|
|
19
|
+
* Returns a 16-char hex prefix of SHA-256(input), or null if input is null/empty.
|
|
20
|
+
* Idempotent in practice: re-hashing a hash produces a different but equally
|
|
21
|
+
* opaque value. The defense-in-depth layer in toQueueRecord() relies on this.
|
|
22
|
+
*/
|
|
23
|
+
export function hashProjectRef(raw) {
|
|
24
|
+
if (!raw)
|
|
25
|
+
return null;
|
|
26
|
+
return createHash("sha256")
|
|
27
|
+
.update(raw)
|
|
28
|
+
.digest("hex")
|
|
29
|
+
.slice(0, PROJECT_REF_HASH_LENGTH);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=hash-project-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-project-ref.js","sourceRoot":"","sources":["../../src/utils/hash-project-ref.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAkB;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/utils/paths.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Resolve default paths for
|
|
2
|
+
* Resolve default paths for pew state and AI tool data.
|
|
3
3
|
* All paths can be overridden for testing.
|
|
4
4
|
*/
|
|
5
5
|
export declare function resolveDefaultPaths(home?: string): {
|
|
6
|
-
/**
|
|
6
|
+
/** pew state directory: ~/.config/pew/ */
|
|
7
7
|
stateDir: string;
|
|
8
|
-
/**
|
|
8
|
+
/** pew bin directory: ~/.config/pew/bin/ */
|
|
9
9
|
binDir: string;
|
|
10
10
|
/** notify.cjs path: ~/.config/pew/bin/notify.cjs */
|
|
11
11
|
notifyPath: string;
|