oc2token 0.1.24 → 0.1.26
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/README.md +23 -14
- package/dist/src/application.d.ts +15 -1
- package/dist/src/application.js +73 -7
- package/dist/src/application.js.map +1 -1
- package/dist/src/cache/schema.js +3 -3
- package/dist/src/cache/schema.js.map +1 -1
- package/dist/src/cli.js +33 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/dashboard/render/ansi.d.ts +2 -0
- package/dist/src/dashboard/render/ansi.js +6 -0
- package/dist/src/dashboard/render/ansi.js.map +1 -1
- package/dist/src/dashboard/render/dashboard.js +38 -24
- package/dist/src/dashboard/render/dashboard.js.map +1 -1
- package/dist/src/dashboard/render/types.js +8 -4
- package/dist/src/dashboard/render/types.js.map +1 -1
- package/dist/src/dashboard/settings/index.d.ts +7 -7
- package/dist/src/dashboard/settings/index.js +25 -8
- package/dist/src/dashboard/settings/index.js.map +1 -1
- package/dist/src/deepseek/discovery.d.ts +21 -0
- package/dist/src/deepseek/discovery.js +83 -0
- package/dist/src/deepseek/discovery.js.map +1 -0
- package/dist/src/deepseek/doctor.d.ts +8 -0
- package/dist/src/deepseek/doctor.js +103 -0
- package/dist/src/deepseek/doctor.js.map +1 -0
- package/dist/src/deepseek/index.d.ts +4 -0
- package/dist/src/deepseek/index.js +4 -0
- package/dist/src/deepseek/index.js.map +1 -0
- package/dist/src/deepseek/scanner.d.ts +9 -0
- package/dist/src/deepseek/scanner.js +283 -0
- package/dist/src/deepseek/scanner.js.map +1 -0
- package/dist/src/deepseek/types.d.ts +38 -0
- package/dist/src/deepseek/types.js +3 -0
- package/dist/src/deepseek/types.js.map +1 -0
- package/dist/src/deepseek/zstd.d.ts +11 -0
- package/dist/src/deepseek/zstd.js +138 -0
- package/dist/src/deepseek/zstd.js.map +1 -0
- package/dist/src/domain/contracts.d.ts +2 -2
- package/dist/src/domain/contracts.js.map +1 -1
- package/dist/src/domain/records.d.ts +1 -1
- package/dist/src/domain/records.js +1 -1
- package/dist/src/domain/records.js.map +1 -1
- package/dist/src/opencode/doctor.d.ts +1 -1
- package/dist/src/opencode/doctor.js.map +1 -1
- package/dist/src/output/table.js +1 -1
- package/dist/src/output/table.js.map +1 -1
- package/dist/src/pi/discovery.d.ts +12 -0
- package/dist/src/pi/discovery.js +86 -0
- package/dist/src/pi/discovery.js.map +1 -0
- package/dist/src/pi/doctor.d.ts +8 -0
- package/dist/src/pi/doctor.js +55 -0
- package/dist/src/pi/doctor.js.map +1 -0
- package/dist/src/pi/index.d.ts +3 -0
- package/dist/src/pi/index.js +3 -0
- package/dist/src/pi/index.js.map +1 -0
- package/dist/src/pi/scanner.d.ts +9 -0
- package/dist/src/pi/scanner.js +255 -0
- package/dist/src/pi/scanner.js.map +1 -0
- package/dist/src/pi/types.d.ts +45 -0
- package/dist/src/pi/types.js +3 -0
- package/dist/src/pi/types.js.map +1 -0
- package/dist/src/usage/record-result.d.ts +19 -0
- package/dist/src/usage/record-result.js +91 -0
- package/dist/src/usage/record-result.js.map +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import * as zlib from "node:zlib";
|
|
3
|
+
const ZSTD_MAGIC = 0xfd2fb528;
|
|
4
|
+
const SKIPPABLE_MAGIC_MASK = 0xfffffff0;
|
|
5
|
+
const SKIPPABLE_MAGIC = 0x184d2a50;
|
|
6
|
+
const MAX_DECOMPRESSED_BYTES = 512 * 1024 * 1024;
|
|
7
|
+
function nodeZstdDecompress() {
|
|
8
|
+
const candidate = zlib.zstdDecompressSync;
|
|
9
|
+
return typeof candidate === "function" ? candidate : undefined;
|
|
10
|
+
}
|
|
11
|
+
export function isZstdDecompressionAvailable() {
|
|
12
|
+
return nodeZstdDecompress() !== undefined || zstdCliAvailable();
|
|
13
|
+
}
|
|
14
|
+
let cachedCliAvailability;
|
|
15
|
+
function zstdCliAvailable() {
|
|
16
|
+
if (cachedCliAvailability !== undefined)
|
|
17
|
+
return cachedCliAvailability;
|
|
18
|
+
try {
|
|
19
|
+
const result = spawnSync("zstd", ["--version"], { stdio: "ignore" });
|
|
20
|
+
cachedCliAvailability = result.status === 0;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
cachedCliAvailability = false;
|
|
24
|
+
}
|
|
25
|
+
return cachedCliAvailability;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Node's Zstandard API decodes exactly one frame. DeepSeek Harness writes one
|
|
29
|
+
* frame per append batch, so a log is a concatenation and must be split before
|
|
30
|
+
* decoding. Frame boundaries are derived from the zstd frame/block headers;
|
|
31
|
+
* skippable frames are ignored.
|
|
32
|
+
*/
|
|
33
|
+
export function splitZstdFrames(buffer) {
|
|
34
|
+
const frames = [];
|
|
35
|
+
let offset = 0;
|
|
36
|
+
const need = (count) => {
|
|
37
|
+
if (offset + count > buffer.length) {
|
|
38
|
+
throw new Error("corrupt Zstandard log: truncated frame");
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
while (offset < buffer.length) {
|
|
42
|
+
need(4);
|
|
43
|
+
const magic = buffer.readUInt32LE(offset);
|
|
44
|
+
if ((magic & SKIPPABLE_MAGIC_MASK) === SKIPPABLE_MAGIC) {
|
|
45
|
+
need(8);
|
|
46
|
+
const size = buffer.readUInt32LE(offset + 4);
|
|
47
|
+
offset += 8 + size;
|
|
48
|
+
if (offset > buffer.length) {
|
|
49
|
+
throw new Error("corrupt Zstandard log: truncated skippable frame");
|
|
50
|
+
}
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (magic !== ZSTD_MAGIC) {
|
|
54
|
+
throw new Error("corrupt Zstandard log: bad frame magic");
|
|
55
|
+
}
|
|
56
|
+
const start = offset;
|
|
57
|
+
offset += 4;
|
|
58
|
+
need(1);
|
|
59
|
+
const descriptor = buffer[offset];
|
|
60
|
+
offset += 1;
|
|
61
|
+
const contentSizeFlag = descriptor >> 6;
|
|
62
|
+
const singleSegment = ((descriptor >> 5) & 1) === 1;
|
|
63
|
+
const checksum = ((descriptor >> 2) & 1) === 1;
|
|
64
|
+
const dictionaryFlag = descriptor & 3;
|
|
65
|
+
if (!singleSegment) {
|
|
66
|
+
need(1);
|
|
67
|
+
offset += 1; // window descriptor
|
|
68
|
+
}
|
|
69
|
+
const dictionarySize = [0, 1, 2, 4][dictionaryFlag];
|
|
70
|
+
need(dictionarySize);
|
|
71
|
+
offset += dictionarySize;
|
|
72
|
+
const contentSizeBytes = contentSizeFlag === 0 ? (singleSegment ? 1 : 0) : contentSizeFlag === 1 ? 2 : contentSizeFlag === 2 ? 4 : 8;
|
|
73
|
+
need(contentSizeBytes);
|
|
74
|
+
offset += contentSizeBytes;
|
|
75
|
+
for (;;) {
|
|
76
|
+
need(3);
|
|
77
|
+
const blockHeader = buffer.readUIntLE(offset, 3);
|
|
78
|
+
offset += 3;
|
|
79
|
+
const lastBlock = (blockHeader & 1) === 1;
|
|
80
|
+
const blockType = (blockHeader >> 1) & 3;
|
|
81
|
+
const blockSize = blockHeader >>> 3;
|
|
82
|
+
if (blockType === 0 || blockType === 2) {
|
|
83
|
+
need(blockSize);
|
|
84
|
+
offset += blockSize;
|
|
85
|
+
}
|
|
86
|
+
else if (blockType === 1) {
|
|
87
|
+
need(1);
|
|
88
|
+
offset += 1;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
throw new Error("corrupt Zstandard log: reserved block type");
|
|
92
|
+
}
|
|
93
|
+
if (lastBlock)
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
if (checksum) {
|
|
97
|
+
need(4);
|
|
98
|
+
offset += 4;
|
|
99
|
+
}
|
|
100
|
+
frames.push(buffer.subarray(start, offset));
|
|
101
|
+
}
|
|
102
|
+
return frames;
|
|
103
|
+
}
|
|
104
|
+
export function decompressZstdBuffer(buffer) {
|
|
105
|
+
const decompress = nodeZstdDecompress();
|
|
106
|
+
if (decompress === undefined) {
|
|
107
|
+
throw new Error("Node Zstandard support is unavailable");
|
|
108
|
+
}
|
|
109
|
+
const frames = splitZstdFrames(buffer);
|
|
110
|
+
const chunks = [];
|
|
111
|
+
let total = 0;
|
|
112
|
+
for (const frame of frames) {
|
|
113
|
+
const chunk = decompress(frame);
|
|
114
|
+
total += chunk.length;
|
|
115
|
+
if (total > MAX_DECOMPRESSED_BYTES) {
|
|
116
|
+
throw new Error(`decompressed session log exceeds ${MAX_DECOMPRESSED_BYTES} bytes`);
|
|
117
|
+
}
|
|
118
|
+
chunks.push(chunk);
|
|
119
|
+
}
|
|
120
|
+
return Buffer.concat(chunks, total);
|
|
121
|
+
}
|
|
122
|
+
/** Decompress a concatenated-frame zstd log, falling back to the zstd CLI on older Node. */
|
|
123
|
+
export function readZstdFile(path, buffer) {
|
|
124
|
+
if (nodeZstdDecompress() !== undefined) {
|
|
125
|
+
return decompressZstdBuffer(buffer);
|
|
126
|
+
}
|
|
127
|
+
const result = spawnSync("zstd", ["-dc", "--", path], {
|
|
128
|
+
maxBuffer: MAX_DECOMPRESSED_BYTES,
|
|
129
|
+
});
|
|
130
|
+
if (result.error !== undefined)
|
|
131
|
+
throw result.error;
|
|
132
|
+
if (result.status !== 0) {
|
|
133
|
+
const message = result.stderr?.toString("utf8").trim();
|
|
134
|
+
throw new Error(message && message.length > 0 ? message : "zstd CLI decompression failed");
|
|
135
|
+
}
|
|
136
|
+
return result.stdout;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=zstd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zstd.js","sourceRoot":"","sources":["../../../src/deepseek/zstd.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ import type { CollectionError } from "./errors.js";
|
|
|
2
2
|
import type { TokenComponentsInput, UsageTotals } from "./tokens.js";
|
|
3
3
|
import type { UsageRecord, UsageRecordCompleteness } from "./records.js";
|
|
4
4
|
import type { UsageBucket, UsageWindow, UsageWindowKind } from "./windows.js";
|
|
5
|
-
export type CollectionSource = "stats" | "message-scan" | "codex" | "antigravity" | "unified";
|
|
6
|
-
export type ProviderKind = "opencode" | "codex" | "antigravity";
|
|
5
|
+
export type CollectionSource = "stats" | "message-scan" | "codex" | "antigravity" | "pi" | "deepseek" | "unified";
|
|
6
|
+
export type ProviderKind = "opencode" | "codex" | "antigravity" | "pi" | "deepseek";
|
|
7
7
|
/**
|
|
8
8
|
* Coverage describes what a collection actually observed. `complete` means
|
|
9
9
|
* traversal finished without a known gap; it does not turn provisional usage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/domain/contracts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/domain/contracts.ts"],"names":[],"mappings":"AAoJA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAU,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { type UsageWindow } from "./windows.js";
|
|
|
2
2
|
import { type TokenComponents, type UsageTotals } from "./tokens.js";
|
|
3
3
|
import type { ProviderKind } from "./contracts.js";
|
|
4
4
|
export type UsageRecordCompleteness = "final" | "provisional";
|
|
5
|
-
export declare const PROVIDER_KINDS: readonly ["opencode", "codex", "antigravity"];
|
|
5
|
+
export declare const PROVIDER_KINDS: readonly ["opencode", "codex", "antigravity", "pi", "deepseek"];
|
|
6
6
|
export declare function isProviderKind(value: unknown): value is ProviderKind;
|
|
7
7
|
export interface UsageRecordInput {
|
|
8
8
|
readonly sessionID: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DomainError } from "./errors.js";
|
|
2
2
|
import { containsInstant } from "./windows.js";
|
|
3
3
|
import { parseTokenComponents, recorded_total, toUsageTotals, } from "./tokens.js";
|
|
4
|
-
export const PROVIDER_KINDS = ["opencode", "codex", "antigravity"];
|
|
4
|
+
export const PROVIDER_KINDS = ["opencode", "codex", "antigravity", "pi", "deepseek"];
|
|
5
5
|
export function isProviderKind(value) {
|
|
6
6
|
return (typeof value === "string" &&
|
|
7
7
|
PROVIDER_KINDS.includes(value));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../../src/domain/records.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAC;AACjE,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,aAAa,GAGd,MAAM,aAAa,CAAC;AAKrB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../../src/domain/records.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type OpenCodeTransport, type UsageWindow } from "../domain/index.js";
|
|
2
2
|
import { type ConnectionOptions, type OpenCodeConnection } from "./client.js";
|
|
3
|
-
export type DoctorCheckName = "executable" | "service" | "health" | "stats-range" | "opencode" | "codex" | "antigravity";
|
|
3
|
+
export type DoctorCheckName = "executable" | "service" | "health" | "stats-range" | "opencode" | "codex" | "antigravity" | "pi" | "deepseek";
|
|
4
4
|
export interface DoctorCheck {
|
|
5
5
|
readonly name: DoctorCheckName;
|
|
6
6
|
readonly ok: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/opencode/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAGZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,sBAAsB,GAGvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAA4B,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/opencode/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/src/output/table.js
CHANGED
|
@@ -84,7 +84,7 @@ export function renderTable(input) {
|
|
|
84
84
|
...sortedProjects,
|
|
85
85
|
]);
|
|
86
86
|
const lines = [
|
|
87
|
-
"
|
|
87
|
+
"Coding Agent Token Usage",
|
|
88
88
|
`Source: ${safeIdentifier(displaySource)} Version: ${safeIdentifier(snapshot.version)}`,
|
|
89
89
|
`Status: ${status} Coverage: ${formatCoverage(snapshot.coverage, snapshot.stale)}`,
|
|
90
90
|
"",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/output/table.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/output/table.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,0BAA0B,GAG3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,aAAa,GACd,MAAM,+BAA+B,CAAC;AAEvC,SAAS,QAAQ,CAAC,OAA8B,EAAE,MAA6B;IAC7E,wEAAwE;IACxE,8DAA8D;IAC9D,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACrB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAC9G;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,MAAqC;IAC1D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO;YACL,OAAO;YACP,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YACjD,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACxC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACjE,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACrE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;SACtB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,MAAqC;IAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO;QACL,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,KAAa,EACb,MAAqC,EACrC,YAAoC;IAEpC,gEAAgE;IAChE,wEAAwE;IACxE,wEAAwE;IACxE,wEAAwE;IACxE,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,KAAK,EAAE,UAAU,CAAC,CAAC;IAEvD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,YAAY,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACjF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;IACtF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,KAA6B;IACvD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,IAAI,GAAe;QACvB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;KACrD,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY;YACvG,qBAAqB,CAAC,MAAM,CAAC,cAAc,CAAC;YAC5C,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC;YACnC,qBAAqB,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;YACvD,qBAAqB,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;YAC3D,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;SACrB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CACvC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CACnD,CAAC;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK;QAC3B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ;YAC1B,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,SAAS,CAAC;IAChB,uHAAuH;IACvH,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;IAClF,MAAM,eAAe,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAClD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAC5F,CAAC;IACF,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAChD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAC5F,CAAC;IACF,MAAM,qBAAqB,GAAG,eAAe,CAAC;QAC5C,GAAG,QAAQ,CAAC,MAAM;QAClB,GAAG,eAAe;QAClB,GAAG,cAAc;KAClB,CAAC,CAAC;IACH,MAAM,KAAK,GAAG;QACZ,0BAA0B;QAC1B,WAAW,cAAc,CAAC,aAAa,CAAC,cAAc,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACxF,WAAW,MAAM,eAAe,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE;QACnF,EAAE;QACF,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC;QACpE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpD,EAAE;QACF,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;QAClE,EAAE;QACF,GAAG,aAAa,CAAC,WAAW,EAAE,eAAe,EAAE,qBAAqB,CAAC;QACrE,EAAE;QACF,GAAG,aAAa,CAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,CAAC;KACpE,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pi's session root. `PI_CODING_AGENT_SESSION_DIR` overrides storage outright;
|
|
3
|
+
* otherwise sessions live under `<agent-dir>/sessions`, where the agent
|
|
4
|
+
* directory is `PI_CODING_AGENT_DIR` or `~/.pi/agent`.
|
|
5
|
+
*/
|
|
6
|
+
export declare function defaultPiSessionDirectory(): string;
|
|
7
|
+
/**
|
|
8
|
+
* Walk Pi's session store. Layout is
|
|
9
|
+
* `<root>/--<normalized-cwd>--/<timestamp>_<session-id>.jsonl`; a shallow
|
|
10
|
+
* second pass also accepts session files stored directly in the root.
|
|
11
|
+
*/
|
|
12
|
+
export declare function discoverPiSessionFiles(root?: string): string[];
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { readFileSync, readdirSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { isAbsolute, join } from "node:path";
|
|
4
|
+
/** Bounds so a huge agent directory can never hang discovery. */
|
|
5
|
+
const MAX_SESSION_FILES = 50_000;
|
|
6
|
+
const MAX_ENTRIES_PER_DIR = 10_000;
|
|
7
|
+
/**
|
|
8
|
+
* Pi's session root. `PI_CODING_AGENT_SESSION_DIR` overrides storage outright;
|
|
9
|
+
* otherwise sessions live under `<agent-dir>/sessions`, where the agent
|
|
10
|
+
* directory is `PI_CODING_AGENT_DIR` or `~/.pi/agent`.
|
|
11
|
+
*/
|
|
12
|
+
export function defaultPiSessionDirectory() {
|
|
13
|
+
const sessionDir = process.env.PI_CODING_AGENT_SESSION_DIR;
|
|
14
|
+
if (typeof sessionDir === "string" && sessionDir.trim().length > 0) {
|
|
15
|
+
return sessionDir;
|
|
16
|
+
}
|
|
17
|
+
const agentDirEnv = process.env.PI_CODING_AGENT_DIR;
|
|
18
|
+
const agentDir = typeof agentDirEnv === "string" && agentDirEnv.trim().length > 0 ? agentDirEnv : join(homedir(), ".pi", "agent");
|
|
19
|
+
// The `sessionDir` setting is read before project trust and may relocate
|
|
20
|
+
// storage without an environment variable being set.
|
|
21
|
+
try {
|
|
22
|
+
const settings = JSON.parse(readFileSync(join(agentDir, "settings.json"), "utf8"));
|
|
23
|
+
if (typeof settings.sessionDir === "string" && settings.sessionDir.trim().length > 0) {
|
|
24
|
+
const configured = settings.sessionDir.trim();
|
|
25
|
+
const expanded = configured === "~"
|
|
26
|
+
? homedir()
|
|
27
|
+
: configured.startsWith("~/")
|
|
28
|
+
? join(homedir(), configured.slice(2))
|
|
29
|
+
: configured;
|
|
30
|
+
return isAbsolute(expanded) ? expanded : join(agentDir, expanded);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Missing/corrupt settings are not a discovery failure.
|
|
35
|
+
}
|
|
36
|
+
return join(agentDir, "sessions");
|
|
37
|
+
}
|
|
38
|
+
function readDirEntries(directory) {
|
|
39
|
+
let entries;
|
|
40
|
+
try {
|
|
41
|
+
entries = readdirSync(directory, { withFileTypes: true });
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
const names = [];
|
|
47
|
+
for (const entry of entries) {
|
|
48
|
+
if (names.length >= MAX_ENTRIES_PER_DIR)
|
|
49
|
+
break;
|
|
50
|
+
// Never follow symlinks (files or dirs) during discovery.
|
|
51
|
+
if (entry.isSymbolicLink())
|
|
52
|
+
continue;
|
|
53
|
+
names.push(entry.name);
|
|
54
|
+
}
|
|
55
|
+
return names;
|
|
56
|
+
}
|
|
57
|
+
function isSessionFile(name) {
|
|
58
|
+
return name.endsWith(".jsonl") && !name.endsWith(".lock.jsonl");
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Walk Pi's session store. Layout is
|
|
62
|
+
* `<root>/--<normalized-cwd>--/<timestamp>_<session-id>.jsonl`; a shallow
|
|
63
|
+
* second pass also accepts session files stored directly in the root.
|
|
64
|
+
*/
|
|
65
|
+
export function discoverPiSessionFiles(root) {
|
|
66
|
+
const sessionRoot = root ?? defaultPiSessionDirectory();
|
|
67
|
+
const files = [];
|
|
68
|
+
for (const entry of readDirEntries(sessionRoot)) {
|
|
69
|
+
if (files.length >= MAX_SESSION_FILES)
|
|
70
|
+
break;
|
|
71
|
+
const path = join(sessionRoot, entry);
|
|
72
|
+
if (isSessionFile(entry)) {
|
|
73
|
+
files.push(path);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
for (const nested of readDirEntries(path)) {
|
|
77
|
+
if (files.length >= MAX_SESSION_FILES)
|
|
78
|
+
break;
|
|
79
|
+
if (!isSessionFile(nested))
|
|
80
|
+
continue;
|
|
81
|
+
files.push(join(path, nested));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return files.sort();
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/pi/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface PiDoctorCheck {
|
|
2
|
+
readonly name: "pi";
|
|
3
|
+
readonly ok: boolean;
|
|
4
|
+
/** No Pi store exists; default `doctor` treats this as optional. */
|
|
5
|
+
readonly missing?: boolean;
|
|
6
|
+
readonly message: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function runPiDoctor(): Promise<PiDoctorCheck>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { discoverPiSessionFiles } from "./discovery.js";
|
|
3
|
+
export async function runPiDoctor() {
|
|
4
|
+
let files;
|
|
5
|
+
try {
|
|
6
|
+
files = discoverPiSessionFiles();
|
|
7
|
+
}
|
|
8
|
+
catch (error) {
|
|
9
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
10
|
+
return { name: "pi", ok: false, message: `Pi discovery failed: ${message}` };
|
|
11
|
+
}
|
|
12
|
+
if (files.length === 0) {
|
|
13
|
+
return { name: "pi", ok: false, missing: true, message: "No Pi session files found" };
|
|
14
|
+
}
|
|
15
|
+
const file = files[0];
|
|
16
|
+
let content;
|
|
17
|
+
try {
|
|
18
|
+
content = readFileSync(file, "utf8");
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
22
|
+
return { name: "pi", ok: false, message: `Found ${files.length} Pi session file(s) but read failed: ${message}` };
|
|
23
|
+
}
|
|
24
|
+
let parsed = 0;
|
|
25
|
+
let hasUsage = false;
|
|
26
|
+
try {
|
|
27
|
+
for (const raw of content.split("\n")) {
|
|
28
|
+
const line = raw.trim();
|
|
29
|
+
if (line.length === 0)
|
|
30
|
+
continue;
|
|
31
|
+
const entry = JSON.parse(line);
|
|
32
|
+
parsed += 1;
|
|
33
|
+
if (entry.type === "message" && entry.message?.usage !== undefined)
|
|
34
|
+
hasUsage = true;
|
|
35
|
+
if (entry.type === "usage")
|
|
36
|
+
hasUsage = true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return {
|
|
41
|
+
name: "pi",
|
|
42
|
+
ok: false,
|
|
43
|
+
message: `Found ${files.length} Pi session file(s) but JSON parse failed in ${file}`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (parsed === 0) {
|
|
47
|
+
return { name: "pi", ok: false, message: `Found ${files.length} Pi session file(s) but first file is empty` };
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
name: "pi",
|
|
51
|
+
ok: true,
|
|
52
|
+
message: `Found ${files.length} Pi session file(s); ${hasUsage ? "usage found" : "JSON parse OK (no usage entries yet)"}`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/pi/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAWxD,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,sBAAsB,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,wBAAwB,OAAO,EAAE,EAAE,CAAC;IAC/E,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;IACvB,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,KAAK,CAAC,MAAM,wCAAwC,OAAO,EAAE,EAAE,CAAC;IACpH,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;YAC1C,MAAM,IAAI,CAAC,CAAC;YACZ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS;gBAAE,QAAQ,GAAG,IAAI,CAAC;YACpF,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,QAAQ,GAAG,IAAI,CAAC;QAC9C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,IAAI;YACV,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,SAAS,KAAK,CAAC,MAAM,gDAAgD,IAAI,EAAE;SACrF,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,KAAK,CAAC,MAAM,6CAA6C,EAAE,CAAC;IAChH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,SAAS,KAAK,CAAC,MAAM,wBAAwB,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,sCAAsC,EAAE;KAC1H,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pi/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type CollectionRequest, type CollectionResult } from "../domain/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Native Pi session scanner. Pi appends JSONL entries to
|
|
4
|
+
* `<agent-dir>/sessions/--<cwd>--/<timestamp>_<id>.jsonl`; assistant messages
|
|
5
|
+
* carry normalized usage and `usage` entries cover non-message model work
|
|
6
|
+
* (for example cache warming). Forked sessions repeat their parent's history,
|
|
7
|
+
* so a fork's pre-header entries are skipped to avoid double counting.
|
|
8
|
+
*/
|
|
9
|
+
export declare function collectPi(request: CollectionRequest, root?: string): Promise<CollectionResult>;
|