@nocoo/pew 1.11.0 → 1.12.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.
Files changed (49) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +9 -5
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/notify.d.ts.map +1 -1
  5. package/dist/commands/notify.js +135 -5
  6. package/dist/commands/notify.js.map +1 -1
  7. package/dist/commands/session-sync.d.ts +0 -2
  8. package/dist/commands/session-sync.d.ts.map +1 -1
  9. package/dist/commands/session-sync.js +9 -4
  10. package/dist/commands/session-sync.js.map +1 -1
  11. package/dist/commands/status.d.ts +1 -0
  12. package/dist/commands/status.d.ts.map +1 -1
  13. package/dist/commands/status.js +2 -0
  14. package/dist/commands/status.js.map +1 -1
  15. package/dist/commands/sync.d.ts +4 -0
  16. package/dist/commands/sync.d.ts.map +1 -1
  17. package/dist/commands/sync.js +4 -2
  18. package/dist/commands/sync.js.map +1 -1
  19. package/dist/discovery/sources.d.ts +5 -0
  20. package/dist/discovery/sources.d.ts.map +1 -1
  21. package/dist/discovery/sources.js +7 -0
  22. package/dist/discovery/sources.js.map +1 -1
  23. package/dist/drivers/registry.d.ts +1 -0
  24. package/dist/drivers/registry.d.ts.map +1 -1
  25. package/dist/drivers/registry.js +4 -0
  26. package/dist/drivers/registry.js.map +1 -1
  27. package/dist/drivers/token/copilot-cli-token-driver.d.ts +15 -0
  28. package/dist/drivers/token/copilot-cli-token-driver.d.ts.map +1 -0
  29. package/dist/drivers/token/copilot-cli-token-driver.js +46 -0
  30. package/dist/drivers/token/copilot-cli-token-driver.js.map +1 -0
  31. package/dist/drivers/types.d.ts +1 -0
  32. package/dist/drivers/types.d.ts.map +1 -1
  33. package/dist/notifier/coordinator.d.ts +14 -10
  34. package/dist/notifier/coordinator.d.ts.map +1 -1
  35. package/dist/notifier/coordinator.js +134 -78
  36. package/dist/notifier/coordinator.js.map +1 -1
  37. package/dist/notifier/lockfile.d.ts +81 -0
  38. package/dist/notifier/lockfile.d.ts.map +1 -0
  39. package/dist/notifier/lockfile.js +150 -0
  40. package/dist/notifier/lockfile.js.map +1 -0
  41. package/dist/parsers/copilot-cli.d.ts +23 -0
  42. package/dist/parsers/copilot-cli.d.ts.map +1 -0
  43. package/dist/parsers/copilot-cli.js +173 -0
  44. package/dist/parsers/copilot-cli.js.map +1 -0
  45. package/dist/utils/paths.d.ts +2 -0
  46. package/dist/utils/paths.d.ts.map +1 -1
  47. package/dist/utils/paths.js +2 -0
  48. package/dist/utils/paths.js.map +1 -1
  49. package/package.json +2 -2
@@ -0,0 +1,173 @@
1
+ import { createReadStream } from "node:fs";
2
+ import { open, stat } from "node:fs/promises";
3
+ import { createInterface } from "node:readline";
4
+ import { isAllZero, toNonNegInt } from "../utils/token-delta.js";
5
+ /**
6
+ * Parse a GitHub Copilot CLI process log file incrementally from a byte offset.
7
+ *
8
+ * Log format: Each telemetry block starts with a line containing
9
+ * `[Telemetry] cli.telemetry:` followed by a multi-line JSON object.
10
+ * We extract `assistant_usage` events which carry per-request token counts.
11
+ *
12
+ * Token fields:
13
+ * metrics.input_tokens → inputTokens (total, includes cached)
14
+ * metrics.cache_read_tokens → cachedInputTokens
15
+ * metrics.output_tokens → outputTokens
16
+ */
17
+ export async function parseCopilotCliFile(opts) {
18
+ const { filePath, startOffset } = opts;
19
+ const deltas = [];
20
+ const st = await stat(filePath).catch(() => null);
21
+ if (!st || !st.isFile())
22
+ return { deltas, endOffset: startOffset };
23
+ const fileSize = st.size;
24
+ if (startOffset >= fileSize)
25
+ return { deltas, endOffset: startOffset };
26
+ // Detect line ending width (LF=1, CRLF=2) from the first 4 KB.
27
+ // readline with crlfDelay:Infinity strips both \n and \r\n, but we
28
+ // must account for the actual on-disk bytes to keep offset tracking
29
+ // accurate. Windows-generated logs use \r\n.
30
+ const eolBytes = await detectEolSize(filePath);
31
+ const stream = createReadStream(filePath, {
32
+ start: startOffset,
33
+ encoding: "utf8",
34
+ });
35
+ const rl = createInterface({ input: stream, crlfDelay: Infinity });
36
+ // Timestamp pattern that starts a new log line
37
+ const LOG_LINE_RE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;
38
+ const TELEMETRY_MARKER = "[Telemetry] cli.telemetry:";
39
+ let collectingJson = false;
40
+ let jsonLines = [];
41
+ // Track byte position relative to startOffset for safe endOffset.
42
+ // If the file ends mid-JSON-block, we rewind to the last fully
43
+ // parsed position so the incomplete block gets re-parsed next sync.
44
+ let bytesConsumed = 0;
45
+ let lastCompletedOffset = startOffset;
46
+ /**
47
+ * Try to parse the accumulated JSON lines.
48
+ * Returns true if parse succeeded (or lines were empty), false if
49
+ * the buffer looks incomplete (JSON.parse threw SyntaxError).
50
+ */
51
+ function tryFlushJson() {
52
+ if (jsonLines.length === 0)
53
+ return true;
54
+ const raw = jsonLines.join("\n");
55
+ try {
56
+ const parsed = JSON.parse(raw);
57
+ if (parsed.kind === "assistant_usage") {
58
+ const delta = extractUsageDelta(parsed);
59
+ if (delta)
60
+ deltas.push(delta);
61
+ }
62
+ jsonLines = [];
63
+ return true;
64
+ }
65
+ catch {
66
+ // Could be incomplete JSON (still accumulating) or truly malformed
67
+ return false;
68
+ }
69
+ }
70
+ try {
71
+ for await (const line of rl) {
72
+ // Add line content bytes + EOL bytes that readline stripped
73
+ bytesConsumed += Buffer.byteLength(line, "utf8") + eolBytes;
74
+ if (LOG_LINE_RE.test(line)) {
75
+ // New log line — flush any in-progress JSON block first
76
+ if (collectingJson) {
77
+ // Force-flush: a new log line means the JSON block ended (or was malformed).
78
+ // tryFlushJson clears jsonLines on success; on failure the block was
79
+ // malformed and we discard it below.
80
+ tryFlushJson();
81
+ jsonLines = [];
82
+ collectingJson = false;
83
+ }
84
+ if (line.includes(TELEMETRY_MARKER)) {
85
+ collectingJson = true;
86
+ // Do NOT advance lastCompletedOffset past the marker line.
87
+ // If the JSON block that follows is incomplete (file truncated),
88
+ // we need to rewind to BEFORE this marker so the next sync
89
+ // re-reads it and re-enters collectingJson mode.
90
+ }
91
+ else {
92
+ // Non-telemetry log line — safe to advance past it
93
+ lastCompletedOffset = startOffset + bytesConsumed;
94
+ }
95
+ continue;
96
+ }
97
+ if (collectingJson) {
98
+ jsonLines.push(line);
99
+ // Attempt JSON.parse after each line containing "}" — this is
100
+ // more robust than brace-depth counting which breaks on braces
101
+ // inside JSON string values.
102
+ if (line.includes("}")) {
103
+ const parsed = tryFlushJson();
104
+ if (parsed) {
105
+ collectingJson = false;
106
+ lastCompletedOffset = startOffset + bytesConsumed;
107
+ }
108
+ // If parse failed, keep accumulating — might be nested object
109
+ }
110
+ }
111
+ }
112
+ }
113
+ finally {
114
+ rl.close();
115
+ stream.destroy();
116
+ }
117
+ // Do NOT flush trailing incomplete blocks — leave them for next sync.
118
+ // If the file was fully consumed and no block is pending, endOffset
119
+ // equals fileSize. Otherwise endOffset rewinds to the safe point.
120
+ const endOffset = collectingJson && jsonLines.length > 0
121
+ ? lastCompletedOffset
122
+ : startOffset + bytesConsumed;
123
+ return { deltas, endOffset };
124
+ }
125
+ /**
126
+ * Extract a ParsedDelta from an `assistant_usage` telemetry event.
127
+ * Returns null if the event has no usable token data.
128
+ */
129
+ function extractUsageDelta(event) {
130
+ const props = event.properties;
131
+ const metrics = event.metrics;
132
+ const model = typeof props?.model === "string" && props.model.length > 0
133
+ ? props.model
134
+ : "unknown";
135
+ // Prefer created_at from the event; fall back to current time
136
+ const timestamp = typeof event.created_at === "string" && event.created_at.length > 0
137
+ ? event.created_at
138
+ : new Date().toISOString();
139
+ const tokens = {
140
+ inputTokens: toNonNegInt(metrics?.input_tokens),
141
+ cachedInputTokens: toNonNegInt(metrics?.cache_read_tokens),
142
+ outputTokens: toNonNegInt(metrics?.output_tokens),
143
+ reasoningOutputTokens: 0,
144
+ };
145
+ if (isAllZero(tokens))
146
+ return null;
147
+ return { source: "copilot-cli", model, timestamp, tokens };
148
+ }
149
+ // ---------------------------------------------------------------------------
150
+ // EOL detection
151
+ // ---------------------------------------------------------------------------
152
+ /**
153
+ * Detect the line ending width of a file by scanning its first 4 KB.
154
+ * Returns 2 for CRLF (`\r\n`), 1 for LF (`\n`).
155
+ * Falls back to 1 (LF) if no newline is found in the probe window.
156
+ */
157
+ async function detectEolSize(filePath) {
158
+ const fh = await open(filePath, "r");
159
+ try {
160
+ const buf = Buffer.alloc(4096);
161
+ const { bytesRead } = await fh.read(buf, 0, 4096);
162
+ for (let i = 0; i < bytesRead; i++) {
163
+ if (buf[i] === 0x0a) {
164
+ return i > 0 && buf[i - 1] === 0x0d ? 2 : 1;
165
+ }
166
+ }
167
+ return 1;
168
+ }
169
+ finally {
170
+ await fh.close();
171
+ }
172
+ }
173
+ //# sourceMappingURL=copilot-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-cli.js","sourceRoot":"","sources":["../../src/parsers/copilot-cli.ts"],"names":[],"mappings":"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"}
@@ -23,5 +23,7 @@ export declare function resolveDefaultPaths(home?: string): {
23
23
  openclawDir: string;
24
24
  /** VSCode Copilot base dirs (stable + insiders, platform-aware) */
25
25
  vscodeCopilotDirs: string[];
26
+ /** GitHub Copilot CLI logs: ~/.copilot/logs */
27
+ copilotCliLogsDir: string;
26
28
  };
27
29
  //# sourceMappingURL=paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAwCA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAY;IAGhD,0CAA0C;;IAE1C,4CAA4C;;IAE5C,oDAAoD;;IAEpD,kCAAkC;;IAElC,sEAAsE;;IAEtE,iCAAiC;;IAEjC,wEAAwE;;IASxE,oEAAoE;;IAEpE,iCAAiC;;IAEjC,mEAAmE;;EAGtE"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAwCA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAY;IAGhD,0CAA0C;;IAE1C,4CAA4C;;IAE5C,oDAAoD;;IAEpD,kCAAkC;;IAElC,sEAAsE;;IAEtE,iCAAiC;;IAEjC,wEAAwE;;IASxE,oEAAoE;;IAEpE,iCAAiC;;IAEjC,mEAAmE;;IAEnE,+CAA+C;;EAGlD"}
@@ -60,6 +60,8 @@ export function resolveDefaultPaths(home = homedir()) {
60
60
  openclawDir: join(home, ".openclaw"),
61
61
  /** VSCode Copilot base dirs (stable + insiders, platform-aware) */
62
62
  vscodeCopilotDirs: resolveVscodeCopilotDirs(home),
63
+ /** GitHub Copilot CLI logs: ~/.copilot/logs */
64
+ copilotCliLogsDir: join(home, ".copilot", "logs"),
63
65
  };
64
66
  }
65
67
  //# sourceMappingURL=paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;;;;;GAUG;AACH,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAC1D,OAAO;YACL,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;YAC1B,IAAI,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,CAAC;SACtC,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACxE,OAAO;YACL,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,CAAC;SACzC,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,OAAO;QACL,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAI,GAAG,OAAO,EAAE;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO;QACL,0CAA0C;QAC1C,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;QACtC,4CAA4C;QAC5C,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;QAC3C,oDAAoD;QACpD,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC;QAC7D,kCAAkC;QAClC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAChC,sEAAsE;QACtE,gBAAgB,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;QAC7C,iCAAiC;QACjC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAChC,wEAAwE;QACxE,kBAAkB,EAAE,IAAI,CACtB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,CACV;QACD,oEAAoE;QACpE,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC;QACxE,iCAAiC;QACjC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QACpC,mEAAmE;QACnE,iBAAiB,EAAE,wBAAwB,CAAC,IAAI,CAAC;KAClD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;;;;;GAUG;AACH,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAC1D,OAAO;YACL,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;YAC1B,IAAI,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,CAAC;SACtC,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACxE,OAAO;YACL,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,CAAC;SACzC,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,OAAO;QACL,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAI,GAAG,OAAO,EAAE;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO;QACL,0CAA0C;QAC1C,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;QACtC,4CAA4C;QAC5C,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;QAC3C,oDAAoD;QACpD,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC;QAC7D,kCAAkC;QAClC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAChC,sEAAsE;QACtE,gBAAgB,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;QAC7C,iCAAiC;QACjC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAChC,wEAAwE;QACxE,kBAAkB,EAAE,IAAI,CACtB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,CACV;QACD,oEAAoE;QACpE,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC;QACxE,iCAAiC;QACjC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QACpC,mEAAmE;QACnE,iBAAiB,EAAE,wBAAwB,CAAC,IAAI,CAAC;QACjD,+CAA+C;QAC/C,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC;KAClD,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocoo/pew",
3
- "version": "1.11.0",
3
+ "version": "1.12.0",
4
4
  "description": "The contribution graph for AI-native developers",
5
5
  "type": "module",
6
6
  "bin": {
@@ -36,7 +36,7 @@
36
36
  ],
37
37
  "license": "MIT",
38
38
  "engines": {
39
- "node": ">=22.5.0"
39
+ "node": ">=18.0.0"
40
40
  },
41
41
  "dependencies": {
42
42
  "citty": "^0.1.0",