@nocoo/pew 1.8.0 → 1.10.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 (46) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +53 -22
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/login.d.ts +14 -4
  5. package/dist/commands/login.d.ts.map +1 -1
  6. package/dist/commands/login.js +50 -15
  7. package/dist/commands/login.js.map +1 -1
  8. package/dist/commands/session-sync.d.ts +3 -0
  9. package/dist/commands/session-sync.d.ts.map +1 -1
  10. package/dist/commands/session-sync.js +16 -7
  11. package/dist/commands/session-sync.js.map +1 -1
  12. package/dist/commands/session-upload.d.ts +3 -0
  13. package/dist/commands/session-upload.d.ts.map +1 -1
  14. package/dist/commands/session-upload.js +1 -1
  15. package/dist/commands/session-upload.js.map +1 -1
  16. package/dist/commands/status.d.ts +2 -0
  17. package/dist/commands/status.d.ts.map +1 -1
  18. package/dist/commands/status.js +1 -1
  19. package/dist/commands/status.js.map +1 -1
  20. package/dist/commands/sync.d.ts +3 -0
  21. package/dist/commands/sync.d.ts.map +1 -1
  22. package/dist/commands/sync.js +22 -3
  23. package/dist/commands/sync.js.map +1 -1
  24. package/dist/commands/upload-engine.d.ts +8 -0
  25. package/dist/commands/upload-engine.d.ts.map +1 -1
  26. package/dist/commands/upload-engine.js +43 -5
  27. package/dist/commands/upload-engine.js.map +1 -1
  28. package/dist/commands/upload.d.ts +3 -0
  29. package/dist/commands/upload.d.ts.map +1 -1
  30. package/dist/commands/upload.js +2 -1
  31. package/dist/commands/upload.js.map +1 -1
  32. package/dist/notifier/codex-notifier.js +81 -0
  33. package/dist/notifier/codex-notifier.js.map +1 -1
  34. package/dist/storage/base-queue.d.ts +41 -3
  35. package/dist/storage/base-queue.d.ts.map +1 -1
  36. package/dist/storage/base-queue.js +60 -14
  37. package/dist/storage/base-queue.js.map +1 -1
  38. package/dist/storage/local-queue.d.ts +2 -2
  39. package/dist/storage/local-queue.d.ts.map +1 -1
  40. package/dist/storage/local-queue.js +2 -2
  41. package/dist/storage/local-queue.js.map +1 -1
  42. package/dist/storage/session-queue.d.ts +2 -2
  43. package/dist/storage/session-queue.d.ts.map +1 -1
  44. package/dist/storage/session-queue.js +2 -2
  45. package/dist/storage/session-queue.js.map +1 -1
  46. package/package.json +1 -1
@@ -16,10 +16,12 @@ export class BaseQueue {
16
16
  queuePath;
17
17
  statePath;
18
18
  dir;
19
- constructor(storeDir, queueFile, stateFile) {
19
+ onCorruptLine;
20
+ constructor(storeDir, queueFile, stateFile, onCorruptLine) {
20
21
  this.dir = storeDir;
21
22
  this.queuePath = join(storeDir, queueFile);
22
23
  this.statePath = join(storeDir, stateFile);
24
+ this.onCorruptLine = onCorruptLine;
23
25
  }
24
26
  /** Ensure the directory exists */
25
27
  async ensureDir() {
@@ -59,7 +61,10 @@ export class BaseQueue {
59
61
  * Returns parsed records and the new offset (end of file in bytes).
60
62
  *
61
63
  * - Uses Buffer for slicing to correctly handle multi-byte UTF-8 characters.
62
- * - Skips lines that fail JSON.parse instead of throwing.
64
+ * - Skips lines that fail JSON.parse and invokes the optional onCorruptLine
65
+ * callback so callers can surface a warning. The offset still advances
66
+ * past corrupted data to prevent infinite re-reading. Source data can
67
+ * always be rebuilt via `pew reset`.
63
68
  */
64
69
  async readFromOffset(offset) {
65
70
  let buf;
@@ -77,29 +82,70 @@ export class BaseQueue {
77
82
  try {
78
83
  records.push(JSON.parse(line));
79
84
  }
80
- catch {
81
- // Skip corrupted lines log would be nice but we keep it silent
82
- // to avoid coupling to a logger. The line is simply lost.
85
+ catch (err) {
86
+ // Corrupted lines are skipped to avoid blocking all subsequent records.
87
+ // The onCorruptLine callback lets callers surface a user-visible warning.
88
+ // Data is recoverable via `pew reset` which rebuilds from source files.
89
+ this.onCorruptLine?.(line, err);
83
90
  }
84
91
  }
85
92
  const newOffset = buf.byteLength;
86
93
  return { records, newOffset };
87
94
  }
88
- /** Save the upload byte offset to the state file */
89
- async saveOffset(offset) {
90
- await this.ensureDir();
91
- await writeFile(this.statePath, JSON.stringify({ offset }) + "\n");
92
- }
93
- /** Load the upload byte offset. Returns 0 if not found or corrupted. */
94
- async loadOffset() {
95
+ // -------------------------------------------------------------------------
96
+ // State persistence — unified { offset, dirtyKeys } object
97
+ // -------------------------------------------------------------------------
98
+ /** Load the full persisted state. Returns defaults on missing/corrupt file. */
99
+ async loadState() {
95
100
  try {
96
101
  const raw = await readFile(this.statePath, "utf-8");
97
102
  const state = JSON.parse(raw);
98
- return state.offset ?? 0;
103
+ return {
104
+ offset: state.offset ?? 0,
105
+ // Preserve undefined vs [] distinction for legacy detection
106
+ dirtyKeys: state.dirtyKeys,
107
+ };
99
108
  }
100
109
  catch {
101
- return 0;
110
+ return { offset: 0 };
102
111
  }
103
112
  }
113
+ /** Atomically persist the full state object. */
114
+ async saveState(state) {
115
+ await this.ensureDir();
116
+ await writeFile(this.statePath, JSON.stringify(state) + "\n");
117
+ }
118
+ /** Save the upload byte offset (preserves dirtyKeys). */
119
+ async saveOffset(offset) {
120
+ const state = await this.loadState();
121
+ state.offset = offset;
122
+ await this.saveState(state);
123
+ }
124
+ /** Load the upload byte offset. Returns 0 if not found or corrupted. */
125
+ async loadOffset() {
126
+ const state = await this.loadState();
127
+ return state.offset;
128
+ }
129
+ /**
130
+ * Save dirty bucket keys (preserves offset).
131
+ *
132
+ * Pass `undefined` to remove the dirtyKeys field entirely (revert to
133
+ * legacy state). Pass `[]` to indicate nothing is dirty.
134
+ */
135
+ async saveDirtyKeys(keys) {
136
+ const state = await this.loadState();
137
+ state.dirtyKeys = keys;
138
+ await this.saveState(state);
139
+ }
140
+ /**
141
+ * Load dirty bucket keys.
142
+ *
143
+ * Returns `undefined` for legacy state files (no dirtyKeys field),
144
+ * or the array (possibly empty) if the field exists.
145
+ */
146
+ async loadDirtyKeys() {
147
+ const state = await this.loadState();
148
+ return state.dirtyKeys;
149
+ }
104
150
  }
105
151
  //# sourceMappingURL=base-queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-queue.js","sourceRoot":"","sources":["../../src/storage/base-queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-queue.js","sourceRoot":"","sources":["../../src/storage/base-queue.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { BaseQueue } from "./base-queue.js";
1
+ import { BaseQueue, type OnCorruptLine } from "./base-queue.js";
2
2
  import type { QueueRecord } from "@pew/core";
3
3
  /**
4
4
  * Append-only local queue for token usage records.
5
5
  * Thin wrapper around BaseQueue with token-specific file names.
6
6
  */
7
7
  export declare class LocalQueue extends BaseQueue<QueueRecord> {
8
- constructor(storeDir: string);
8
+ constructor(storeDir: string, onCorruptLine?: OnCorruptLine);
9
9
  }
10
10
  //# sourceMappingURL=local-queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-queue.d.ts","sourceRoot":"","sources":["../../src/storage/local-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;;GAGG;AACH,qBAAa,UAAW,SAAQ,SAAS,CAAC,WAAW,CAAC;gBACxC,QAAQ,EAAE,MAAM;CAG7B"}
1
+ {"version":3,"file":"local-queue.d.ts","sourceRoot":"","sources":["../../src/storage/local-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;;GAGG;AACH,qBAAa,UAAW,SAAQ,SAAS,CAAC,WAAW,CAAC;gBACxC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa;CAG5D"}
@@ -4,8 +4,8 @@ import { BaseQueue } from "./base-queue.js";
4
4
  * Thin wrapper around BaseQueue with token-specific file names.
5
5
  */
6
6
  export class LocalQueue extends BaseQueue {
7
- constructor(storeDir) {
8
- super(storeDir, "queue.jsonl", "queue.state.json");
7
+ constructor(storeDir, onCorruptLine) {
8
+ super(storeDir, "queue.jsonl", "queue.state.json", onCorruptLine);
9
9
  }
10
10
  }
11
11
  //# sourceMappingURL=local-queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-queue.js","sourceRoot":"","sources":["../../src/storage/local-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,SAAsB;IACpD,YAAY,QAAgB;QAC1B,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;IACrD,CAAC;CACF"}
1
+ {"version":3,"file":"local-queue.js","sourceRoot":"","sources":["../../src/storage/local-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,iBAAiB,CAAC;AAGhE;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,SAAsB;IACpD,YAAY,QAAgB,EAAE,aAA6B;QACzD,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;CACF"}
@@ -1,10 +1,10 @@
1
- import { BaseQueue } from "./base-queue.js";
1
+ import { BaseQueue, type OnCorruptLine } from "./base-queue.js";
2
2
  import type { SessionQueueRecord } from "@pew/core";
3
3
  /**
4
4
  * Append-only local queue for session records.
5
5
  * Thin wrapper around BaseQueue with session-specific file names.
6
6
  */
7
7
  export declare class SessionQueue extends BaseQueue<SessionQueueRecord> {
8
- constructor(storeDir: string);
8
+ constructor(storeDir: string, onCorruptLine?: OnCorruptLine);
9
9
  }
10
10
  //# sourceMappingURL=session-queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-queue.d.ts","sourceRoot":"","sources":["../../src/storage/session-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;GAGG;AACH,qBAAa,YAAa,SAAQ,SAAS,CAAC,kBAAkB,CAAC;gBACjD,QAAQ,EAAE,MAAM;CAG7B"}
1
+ {"version":3,"file":"session-queue.d.ts","sourceRoot":"","sources":["../../src/storage/session-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD;;;GAGG;AACH,qBAAa,YAAa,SAAQ,SAAS,CAAC,kBAAkB,CAAC;gBACjD,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa;CAG5D"}
@@ -4,8 +4,8 @@ import { BaseQueue } from "./base-queue.js";
4
4
  * Thin wrapper around BaseQueue with session-specific file names.
5
5
  */
6
6
  export class SessionQueue extends BaseQueue {
7
- constructor(storeDir) {
8
- super(storeDir, "session-queue.jsonl", "session-queue.state.json");
7
+ constructor(storeDir, onCorruptLine) {
8
+ super(storeDir, "session-queue.jsonl", "session-queue.state.json", onCorruptLine);
9
9
  }
10
10
  }
11
11
  //# sourceMappingURL=session-queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-queue.js","sourceRoot":"","sources":["../../src/storage/session-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,SAA6B;IAC7D,YAAY,QAAgB;QAC1B,KAAK,CAAC,QAAQ,EAAE,qBAAqB,EAAE,0BAA0B,CAAC,CAAC;IACrE,CAAC;CACF"}
1
+ {"version":3,"file":"session-queue.js","sourceRoot":"","sources":["../../src/storage/session-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsB,MAAM,iBAAiB,CAAC;AAGhE;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,SAA6B;IAC7D,YAAY,QAAgB,EAAE,aAA6B;QACzD,KAAK,CAAC,QAAQ,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,aAAa,CAAC,CAAC;IACpF,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocoo/pew",
3
- "version": "1.8.0",
3
+ "version": "1.10.0",
4
4
  "description": "The contribution graph for AI-native developers",
5
5
  "type": "module",
6
6
  "bin": {