@gobing-ai/ts-llm-jsonl-importer 0.4.20 → 0.4.21

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.
@@ -1 +1 @@
1
- {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../src/mappers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AA2FtD,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,UAAU,EAAE,CA4G/E;AAMD,gEAAgE;AAChE,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,UAAU,EAAE,CAsE3D;AAMD,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,UAAU,EAAE,CA4F5E;AAMD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,UAAU,EAAE,CAiG9E;AAMD,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,UAAU,EAAE,CAgH5E;AAyJD,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,UAAU,EAAE,CAoR7E;AAmDD,wGAAwG;AACxG,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAKxD;AAMD,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,wBAAsE,CAAC;AACpG,4CAA4C;AAC5C,eAAO,MAAM,YAAY,wBAAsE,CAAC;AAChG,6CAA6C;AAC7C,eAAO,MAAM,aAAa,wBAAsE,CAAC;AACjG,+CAA+C;AAC/C,eAAO,MAAM,eAAe,wBAAsE,CAAC;AACnG,6CAA6C;AAC7C,eAAO,MAAM,aAAa,wBAAsE,CAAC;AACjG,8CAA8C;AAC9C,eAAO,MAAM,cAAc,wBAAsE,CAAC;AAQlG,oDAAoD;AACpD,eAAO,MAAM,aAAa,gCAAoB,CAAC;AAC/C,gDAAgD;AAChD,eAAO,MAAM,SAAS,gCAAoB,CAAC;AAC3C,iDAAiD;AACjD,eAAO,MAAM,UAAU,gCAAoB,CAAC;AAC5C,mDAAmD;AACnD,eAAO,MAAM,YAAY,gCAAoB,CAAC;AAC9C,iDAAiD;AACjD,eAAO,MAAM,UAAU,gCAAoB,CAAC;AAC5C,kDAAkD;AAClD,eAAO,MAAM,WAAW,gCAAoB,CAAC"}
1
+ {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../src/mappers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AA2FtD,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,UAAU,EAAE,CA4G/E;AAMD,gEAAgE;AAChE,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,UAAU,EAAE,CAsE3D;AAMD,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,UAAU,EAAE,CA4F5E;AAMD,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,UAAU,EAAE,CAiG9E;AAMD,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,UAAU,EAAE,CAgH5E;AAyJD,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,UAAU,EAAE,CAoR7E;AAwDD,wGAAwG;AACxG,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAKxD;AAMD,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,wBAAsE,CAAC;AACpG,4CAA4C;AAC5C,eAAO,MAAM,YAAY,wBAAsE,CAAC;AAChG,6CAA6C;AAC7C,eAAO,MAAM,aAAa,wBAAsE,CAAC;AACjG,+CAA+C;AAC/C,eAAO,MAAM,eAAe,wBAAsE,CAAC;AACnG,6CAA6C;AAC7C,eAAO,MAAM,aAAa,wBAAsE,CAAC;AACjG,8CAA8C;AAC9C,eAAO,MAAM,cAAc,wBAAsE,CAAC;AAQlG,oDAAoD;AACpD,eAAO,MAAM,aAAa,gCAAoB,CAAC;AAC/C,gDAAgD;AAChD,eAAO,MAAM,SAAS,gCAAoB,CAAC;AAC3C,iDAAiD;AACjD,eAAO,MAAM,UAAU,gCAAoB,CAAC;AAC5C,mDAAmD;AACnD,eAAO,MAAM,YAAY,gCAAoB,CAAC;AAC9C,iDAAiD;AACjD,eAAO,MAAM,UAAU,gCAAoB,CAAC;AAC5C,kDAAkD;AAClD,eAAO,MAAM,WAAW,gCAAoB,CAAC"}
package/dist/mappers.js CHANGED
@@ -1,4 +1,3 @@
1
- // @ts-nocheck — dynamic JSON property access not compatible with noUncheckedIndexedAccess
2
1
  import { z } from 'zod';
3
2
  import { sha256 } from './hash.js';
4
3
  // ---------------------------------------------------------------------------
@@ -196,12 +195,12 @@ export function claudeSplit(raw) {
196
195
  export function piSplit(raw) {
197
196
  const entries = [];
198
197
  const r = raw;
199
- const sessionId = s(r.id, r.session?.id) ?? 'unknown';
198
+ const sessionId = s(r.id, o(r.session).id) ?? 'unknown';
200
199
  const seq = typeof r.seq === 'number' ? r.seq : 0;
201
200
  const ts = s(r.ts, r.timestamp, r.createdAt) ?? new Date(0).toISOString();
202
201
  const role = mapRole(r.type ?? r.role);
203
202
  const recordType = String(r.type ?? '');
204
- const model = s(r.model, r.message?.model);
203
+ const model = s(r.model, o(r.message).model);
205
204
  const cwd = s(r.cwd, r.dir);
206
205
  const msg = r.message;
207
206
  const usage = msg?.usage;
@@ -275,7 +274,7 @@ export function ompSplit(raw) {
275
274
  {
276
275
  targetTable: 'history_message',
277
276
  record: {
278
- session_id: s(raw.id, raw.session?.id) ?? 'unknown',
277
+ session_id: s(raw.id, o(raw.session).id) ?? 'unknown',
279
278
  seq: typeof raw.seq === 'number' ? raw.seq : 0,
280
279
  role: 'meta',
281
280
  record_type: recordType,
@@ -287,11 +286,11 @@ export function ompSplit(raw) {
287
286
  ];
288
287
  }
289
288
  const entries = [];
290
- const sessionId = s(raw.id, raw.session?.id) ?? 'unknown';
289
+ const sessionId = s(raw.id, o(raw.session).id) ?? 'unknown';
291
290
  const seq = typeof raw.seq === 'number' ? raw.seq : 0;
292
291
  const ts = s(raw.ts, raw.timestamp, raw.createdAt) ?? new Date(0).toISOString();
293
292
  const role = mapRole(raw.type ?? raw.role);
294
- const model = s(raw.model, raw.message?.model);
293
+ const model = s(raw.model, o(raw.message).model);
295
294
  const cwd = s(raw.cwd, raw.dir);
296
295
  const msg = raw.message;
297
296
  const usage = msg?.usage;
@@ -355,7 +354,7 @@ export function ompSplit(raw) {
355
354
  export function codexSplit(raw) {
356
355
  const entries = [];
357
356
  const payload = (raw.payload ?? raw);
358
- const sessionId = s(raw.session_id, raw.session_meta?.id, raw.id) ?? 'unknown';
357
+ const sessionId = s(raw.session_id, o(raw.session_meta).id, raw.id) ?? 'unknown';
359
358
  const seq = typeof raw.seq === 'number' ? raw.seq : 0;
360
359
  const ts = s(raw.timestamp, raw.ts, payload.ts) ?? new Date(0).toISOString();
361
360
  const recordType = String(raw.type ?? '');
@@ -377,7 +376,7 @@ export function codexSplit(raw) {
377
376
  ];
378
377
  }
379
378
  const role = mapRole(recordType);
380
- const model = s(raw.model, payload.model, raw.turn_context?.payload?.model);
379
+ const model = s(raw.model, payload.model, o(o(raw.turn_context).payload).model);
381
380
  const cwd = s(raw.cwd, raw.dir);
382
381
  const tokenCount = payload.token_count;
383
382
  const inputTokens = (tokenCount?.input ?? tokenCount?.input_tokens ?? undefined);
@@ -945,6 +944,10 @@ export function grokSplit(raw) {
945
944
  // ---------------------------------------------------------------------------
946
945
  // Shared utilities
947
946
  // ---------------------------------------------------------------------------
947
+ /** Narrow an unknown JSON value to an object bag so nested lookups type-check. */
948
+ function o(value) {
949
+ return typeof value === 'object' && value !== null ? value : {};
950
+ }
948
951
  /** Safe string accessor: returns the first non-empty string value. */
949
952
  function s(...values) {
950
953
  for (const value of values) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gobing-ai/ts-llm-jsonl-importer",
3
- "version": "0.4.20",
3
+ "version": "0.4.21",
4
4
  "description": "@gobing-ai/ts-llm-jsonl-importer — Generic JSONL importer for LLM agent history files.",
5
5
  "keywords": [
6
6
  "typescript",
@@ -47,9 +47,9 @@
47
47
  "release": "echo 'Manual publish is disabled. Releases go through GitHub Actions via Trusted Publishing — push a tag: git tag @gobing-ai/ts-llm-jsonl-importer-v<version> && git push --tags' && exit 1"
48
48
  },
49
49
  "dependencies": {
50
- "@gobing-ai/ts-db": "^0.4.20",
51
- "@gobing-ai/ts-runtime": "^0.4.20",
52
- "@gobing-ai/ts-utils": "^0.4.20",
50
+ "@gobing-ai/ts-db": "^0.4.21",
51
+ "@gobing-ai/ts-runtime": "^0.4.21",
52
+ "@gobing-ai/ts-utils": "^0.4.21",
53
53
  "zod": "^4.1.0"
54
54
  },
55
55
  "devDependencies": {
package/src/mappers.ts CHANGED
@@ -1,4 +1,3 @@
1
- // @ts-nocheck — dynamic JSON property access not compatible with noUncheckedIndexedAccess
2
1
  import { z } from 'zod';
3
2
  import { sha256 } from './hash';
4
3
  import type { JsonObject, SplitEntry } from './types';
@@ -211,12 +210,12 @@ export function claudeSplit(raw: Record<string, unknown>): readonly SplitEntry[]
211
210
  export function piSplit(raw: unknown): readonly SplitEntry[] {
212
211
  const entries: SplitEntry[] = [];
213
212
  const r = raw as Record<string, unknown>;
214
- const sessionId = s(r.id, r.session?.id) ?? 'unknown';
213
+ const sessionId = s(r.id, o(r.session).id) ?? 'unknown';
215
214
  const seq = typeof r.seq === 'number' ? r.seq : 0;
216
215
  const ts = s(r.ts, r.timestamp, r.createdAt) ?? new Date(0).toISOString();
217
216
  const role = mapRole(r.type ?? r.role);
218
217
  const recordType = String(r.type ?? '');
219
- const model = s(r.model, r.message?.model);
218
+ const model = s(r.model, o(r.message).model);
220
219
  const cwd = s(r.cwd, r.dir);
221
220
 
222
221
  const msg = r.message as Record<string, unknown> | undefined;
@@ -299,7 +298,7 @@ export function ompSplit(raw: Record<string, unknown>): readonly SplitEntry[] {
299
298
  {
300
299
  targetTable: 'history_message',
301
300
  record: {
302
- session_id: s(raw.id, raw.session?.id) ?? 'unknown',
301
+ session_id: s(raw.id, o(raw.session).id) ?? 'unknown',
303
302
  seq: typeof raw.seq === 'number' ? raw.seq : 0,
304
303
  role: 'meta',
305
304
  record_type: recordType,
@@ -312,11 +311,11 @@ export function ompSplit(raw: Record<string, unknown>): readonly SplitEntry[] {
312
311
  }
313
312
 
314
313
  const entries: SplitEntry[] = [];
315
- const sessionId = s(raw.id, raw.session?.id) ?? 'unknown';
314
+ const sessionId = s(raw.id, o(raw.session).id) ?? 'unknown';
316
315
  const seq = typeof raw.seq === 'number' ? raw.seq : 0;
317
316
  const ts = s(raw.ts, raw.timestamp, raw.createdAt) ?? new Date(0).toISOString();
318
317
  const role = mapRole(raw.type ?? raw.role);
319
- const model = s(raw.model, raw.message?.model);
318
+ const model = s(raw.model, o(raw.message).model);
320
319
  const cwd = s(raw.cwd, raw.dir);
321
320
 
322
321
  const msg = raw.message as Record<string, unknown> | undefined;
@@ -388,7 +387,7 @@ export function codexSplit(raw: Record<string, unknown>): readonly SplitEntry[]
388
387
  const entries: SplitEntry[] = [];
389
388
 
390
389
  const payload = (raw.payload ?? raw) as Record<string, unknown>;
391
- const sessionId = s(raw.session_id, raw.session_meta?.id, raw.id) ?? 'unknown';
390
+ const sessionId = s(raw.session_id, o(raw.session_meta).id, raw.id) ?? 'unknown';
392
391
  const seq = typeof raw.seq === 'number' ? raw.seq : 0;
393
392
  const ts = s(raw.timestamp, raw.ts, payload.ts) ?? new Date(0).toISOString();
394
393
  const recordType = String(raw.type ?? '');
@@ -412,7 +411,7 @@ export function codexSplit(raw: Record<string, unknown>): readonly SplitEntry[]
412
411
  }
413
412
 
414
413
  const role = mapRole(recordType);
415
- const model = s(raw.model, payload.model, raw.turn_context?.payload?.model);
414
+ const model = s(raw.model, payload.model, o(o(raw.turn_context).payload).model);
416
415
  const cwd = s(raw.cwd, raw.dir);
417
416
 
418
417
  const tokenCount = payload.token_count as Record<string, unknown> | undefined;
@@ -1036,6 +1035,11 @@ export function grokSplit(raw: Record<string, unknown>): readonly SplitEntry[] {
1036
1035
  // Shared utilities
1037
1036
  // ---------------------------------------------------------------------------
1038
1037
 
1038
+ /** Narrow an unknown JSON value to an object bag so nested lookups type-check. */
1039
+ function o(value: unknown): Record<string, unknown> {
1040
+ return typeof value === 'object' && value !== null ? (value as Record<string, unknown>) : {};
1041
+ }
1042
+
1039
1043
  /** Safe string accessor: returns the first non-empty string value. */
1040
1044
  function s(...values: readonly unknown[]): string | undefined {
1041
1045
  for (const value of values) {