@theokit/sdk 4.30.0 → 4.31.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 (77) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/{agent-LD76RI74.cjs → agent-6GQBOHHA.cjs} +8 -8
  3. package/dist/{agent-LD76RI74.cjs.map → agent-6GQBOHHA.cjs.map} +1 -1
  4. package/dist/{agent-7YUGJJTU.js → agent-DY5LGZ5E.js} +7 -7
  5. package/dist/{agent-7YUGJJTU.js.map → agent-DY5LGZ5E.js.map} +1 -1
  6. package/dist/agent.d.ts +15 -2
  7. package/dist/{chunk-5YCAR23S.js → chunk-4JWZRASX.js} +3 -3
  8. package/dist/{chunk-5YCAR23S.js.map → chunk-4JWZRASX.js.map} +1 -1
  9. package/dist/{chunk-GWMQ5CS3.cjs → chunk-CYTAM3E6.cjs} +70 -40
  10. package/dist/chunk-CYTAM3E6.cjs.map +1 -0
  11. package/dist/{chunk-NG6B2PMA.cjs → chunk-FDGRQQWX.cjs} +5 -5
  12. package/dist/{chunk-NG6B2PMA.cjs.map → chunk-FDGRQQWX.cjs.map} +1 -1
  13. package/dist/{chunk-ISZ3MBUD.js → chunk-FZ75EZR5.js} +41 -11
  14. package/dist/chunk-FZ75EZR5.js.map +1 -0
  15. package/dist/chunk-ICSCKB3N.js +140 -0
  16. package/dist/chunk-ICSCKB3N.js.map +1 -0
  17. package/dist/{chunk-U6QGZHPN.js → chunk-PORDVVJS.js} +5 -6
  18. package/dist/chunk-PORDVVJS.js.map +1 -0
  19. package/dist/{chunk-NRSH7RJY.js → chunk-TLG444A6.js} +61 -13
  20. package/dist/chunk-TLG444A6.js.map +1 -0
  21. package/dist/{chunk-2HRYBRD7.cjs → chunk-U447MTG4.cjs} +5 -6
  22. package/dist/chunk-U447MTG4.cjs.map +1 -0
  23. package/dist/{chunk-2MF3IE2D.cjs → chunk-UKNMWCPZ.cjs} +63 -15
  24. package/dist/chunk-UKNMWCPZ.cjs.map +1 -0
  25. package/dist/{chunk-SQLZ7ONU.js → chunk-VUXLNVX7.js} +3 -3
  26. package/dist/{chunk-SQLZ7ONU.js.map → chunk-VUXLNVX7.js.map} +1 -1
  27. package/dist/{chunk-HK7ZHSAX.cjs → chunk-WQEQCJTZ.cjs} +64 -3
  28. package/dist/chunk-WQEQCJTZ.cjs.map +1 -0
  29. package/dist/{chunk-YU6KON2I.cjs → chunk-XJT5VACT.cjs} +3 -3
  30. package/dist/{chunk-YU6KON2I.cjs.map → chunk-XJT5VACT.cjs.map} +1 -1
  31. package/dist/{compact-session-OO7NVWPB.cjs → compact-session-2BFNMENR.cjs} +11 -11
  32. package/dist/{compact-session-OO7NVWPB.cjs.map → compact-session-2BFNMENR.cjs.map} +1 -1
  33. package/dist/{compact-session-OO2GD76G.js → compact-session-2JONXHLR.js} +3 -3
  34. package/dist/{compact-session-OO2GD76G.js.map → compact-session-2JONXHLR.js.map} +1 -1
  35. package/dist/cron.cjs +7 -7
  36. package/dist/cron.js +6 -6
  37. package/dist/eval.cjs +10 -11
  38. package/dist/eval.cjs.map +1 -1
  39. package/dist/eval.js +6 -7
  40. package/dist/eval.js.map +1 -1
  41. package/dist/fs-session-store-26WVVMC4.cjs +17 -0
  42. package/dist/{fs-session-store-KAUQYSGI.cjs.map → fs-session-store-26WVVMC4.cjs.map} +1 -1
  43. package/dist/fs-session-store-7AEI4STY.js +8 -0
  44. package/dist/{fs-session-store-ZKB5NN37.js.map → fs-session-store-7AEI4STY.js.map} +1 -1
  45. package/dist/index.cjs +28 -28
  46. package/dist/index.d.cts +15 -2
  47. package/dist/index.d.ts +15 -2
  48. package/dist/index.js +8 -8
  49. package/dist/{inject-session-6MJUSGZP.cjs → inject-session-MIFEKATN.cjs} +4 -4
  50. package/dist/{inject-session-6MJUSGZP.cjs.map → inject-session-MIFEKATN.cjs.map} +1 -1
  51. package/dist/{inject-session-KOFHS5K3.js → inject-session-NNSCCIVP.js} +3 -3
  52. package/dist/{inject-session-KOFHS5K3.js.map → inject-session-NNSCCIVP.js.map} +1 -1
  53. package/dist/internal/llm/retrying-client.d.ts +29 -0
  54. package/dist/internal/persistence/index.cjs +18 -19
  55. package/dist/internal/persistence/index.cjs.map +1 -1
  56. package/dist/internal/persistence/index.js +1 -2
  57. package/dist/internal/persistence/index.js.map +1 -1
  58. package/dist/persistence.cjs +10 -11
  59. package/dist/persistence.cjs.map +1 -1
  60. package/dist/persistence.js +1 -2
  61. package/dist/persistence.js.map +1 -1
  62. package/package.json +1 -1
  63. package/dist/chunk-2HRYBRD7.cjs.map +0 -1
  64. package/dist/chunk-2MF3IE2D.cjs.map +0 -1
  65. package/dist/chunk-C7PICHRF.cjs +0 -68
  66. package/dist/chunk-C7PICHRF.cjs.map +0 -1
  67. package/dist/chunk-GWMQ5CS3.cjs.map +0 -1
  68. package/dist/chunk-HK7ZHSAX.cjs.map +0 -1
  69. package/dist/chunk-HZQEDNF6.js +0 -66
  70. package/dist/chunk-HZQEDNF6.js.map +0 -1
  71. package/dist/chunk-ISZ3MBUD.js.map +0 -1
  72. package/dist/chunk-NRSH7RJY.js.map +0 -1
  73. package/dist/chunk-R6ZP6KNB.js +0 -80
  74. package/dist/chunk-R6ZP6KNB.js.map +0 -1
  75. package/dist/chunk-U6QGZHPN.js.map +0 -1
  76. package/dist/fs-session-store-KAUQYSGI.cjs +0 -17
  77. package/dist/fs-session-store-ZKB5NN37.js +0 -8
@@ -1,80 +0,0 @@
1
- import { readFileSync, mkdirSync, appendFileSync } from 'fs';
2
- import { dirname } from 'path';
3
-
4
- // src/internal/persistence/jsonl.ts
5
- var JsonlParseError = class extends Error {
6
- constructor(message, line) {
7
- super(message);
8
- this.line = line;
9
- this.name = "JsonlParseError";
10
- }
11
- line;
12
- };
13
- function isPlainObject(value) {
14
- return typeof value === "object" && value !== null && !Array.isArray(value);
15
- }
16
- function tryParseObjectLine(line) {
17
- if (line.length === 0) return void 0;
18
- let parsed;
19
- try {
20
- parsed = JSON.parse(line);
21
- } catch {
22
- return void 0;
23
- }
24
- return isPlainObject(parsed) ? parsed : void 0;
25
- }
26
- function loadJsonl(path, opts = {}) {
27
- const linhas = readFileSync(path, "utf8").split("\n");
28
- const out = [];
29
- for (let i = 0; i < linhas.length; i += 1) {
30
- const lineNumber = i + 1;
31
- const line = (linhas[i] ?? "").trim();
32
- if (line.length === 0) continue;
33
- const parsed = parsearLinha(
34
- line,
35
- lineNumber,
36
- opts.tolerateTrailingPartialLine === true && lineNumber === linhas.length
37
- );
38
- if (parsed === void 0) break;
39
- out.push(opts.map ? opts.map(parsed, lineNumber) : parsed);
40
- }
41
- return out;
42
- }
43
- function parsearLinha(line, lineNumber, tolerar) {
44
- let parsed;
45
- try {
46
- parsed = JSON.parse(line);
47
- } catch {
48
- if (tolerar) return void 0;
49
- throw new JsonlParseError(`line ${lineNumber}: invalid JSON`, lineNumber);
50
- }
51
- if (!isPlainObject(parsed)) {
52
- throw new JsonlParseError(`line ${lineNumber}: not a JSON object`, lineNumber);
53
- }
54
- return parsed;
55
- }
56
- function appendJsonl(path, record) {
57
- mkdirSync(dirname(path), { recursive: true });
58
- appendFileSync(path, `${JSON.stringify(record)}
59
- `);
60
- }
61
- function readJsonlIds(path, keyFn) {
62
- const done = /* @__PURE__ */ new Set();
63
- let text;
64
- try {
65
- text = readFileSync(path, "utf8");
66
- } catch {
67
- return done;
68
- }
69
- for (const rawLine of text.split("\n")) {
70
- const parsed = tryParseObjectLine(rawLine.trim());
71
- if (parsed === void 0) continue;
72
- const key = keyFn(parsed);
73
- if (typeof key === "string" && key.length > 0) done.add(key);
74
- }
75
- return done;
76
- }
77
-
78
- export { JsonlParseError, appendJsonl, loadJsonl, readJsonlIds };
79
- //# sourceMappingURL=chunk-R6ZP6KNB.js.map
80
- //# sourceMappingURL=chunk-R6ZP6KNB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/persistence/jsonl.ts"],"names":[],"mappings":"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","file":"chunk-R6ZP6KNB.js","sourcesContent":["/**\n * Durable JSONL primitives shared by the eval harness (M6).\n *\n * - `loadJsonl` — generic dataset reader (split/trim/skip-blank/parse) with a\n * line-numbered {@link JsonlParseError}. The dataset SCHEMA is the caller's\n * concern via `map` (M6 ADR D3) — this module owns only the parse.\n * - `appendJsonl` / `readJsonlIds` — crash-durable, resumable batch persistence\n * (M6 ADR D1): each record is appended as one whole `\\n`-terminated line the\n * instant it is produced, and a re-run resumes by skipping already-keyed rows.\n *\n * referencia: knowledge-base/references/theocode-eval/lib/swebench-dataset.ts:82\n * (parseJsonl + line-N error) and swebench-batch.ts:113,205 (resume + per-line\n * flush).\n *\n * @internal\n */\nimport { appendFileSync, mkdirSync, readFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\n/** Raised when a JSONL line is not valid JSON or is not a JSON object. Carries the 1-based line number. */\nexport class JsonlParseError extends Error {\n constructor(\n message: string,\n readonly line: number,\n ) {\n super(message);\n this.name = \"JsonlParseError\";\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/** Parse a single trimmed line to a plain object, or `undefined` if blank / invalid / non-object. */\nfunction tryParseObjectLine(line: string): Record<string, unknown> | undefined {\n if (line.length === 0) return undefined;\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n return undefined;\n }\n return isPlainObject(parsed) ? parsed : undefined;\n}\n\n/**\n * Parse a JSONL file into rows. Blank lines are skipped. A malformed or\n * non-object line throws {@link JsonlParseError} naming the 1-based line. When\n * `map` is provided, each raw object is mapped to the typed row (the SWE-bench\n * schema lives in the caller's `map`, per M6 ADR D3).\n */\nexport function loadJsonl<T = Record<string, unknown>>(\n path: string,\n opts: {\n map?: (raw: Record<string, unknown>, lineNumber: number) => T;\n /**\n * M81 — tolerate a truncated LAST line (a crash artifact: the process died mid-write).\n *\n * Opt-in on purpose. As a default it would also swallow corruption in the MIDDLE of the file,\n * turning loud data loss into silent data loss — the wrong trade for a session store.\n */\n tolerateTrailingPartialLine?: boolean;\n } = {},\n): T[] {\n const linhas = readFileSync(path, \"utf8\").split(\"\\n\");\n const out: T[] = [];\n for (let i = 0; i < linhas.length; i += 1) {\n const lineNumber = i + 1;\n const line = (linhas[i] ?? \"\").trim();\n if (line.length === 0) continue;\n // M81 — `undefined` = linha inválida tolerada (última, truncada por crash). Qualquer outra\n // linha inválida já lançou dentro de `parsearLinha`.\n const parsed = parsearLinha(\n line,\n lineNumber,\n opts.tolerateTrailingPartialLine === true && lineNumber === linhas.length,\n );\n if (parsed === undefined) break;\n out.push(opts.map ? opts.map(parsed, lineNumber) : (parsed as unknown as T));\n }\n return out;\n}\n\n/**\n * Parse de UMA linha, devolvendo `undefined` quando ela é uma última-linha-truncada tolerada.\n *\n * Extraído porque `loadJsonl` passou do teto de complexidade cognitiva quando ganhou a tolerância —\n * e porque parse-de-linha e iteração-do-arquivo são duas responsabilidades que só estavam juntas\n * por hábito.\n */\nfunction parsearLinha(\n line: string,\n lineNumber: number,\n tolerar: boolean,\n): Record<string, unknown> | undefined {\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n if (tolerar) return undefined;\n throw new JsonlParseError(`line ${lineNumber}: invalid JSON`, lineNumber);\n }\n if (!isPlainObject(parsed)) {\n throw new JsonlParseError(`line ${lineNumber}: not a JSON object`, lineNumber);\n }\n return parsed;\n}\n\n/**\n * Append one record as a whole `\\n`-terminated JSON line. Creates the parent dir\n * if missing. `appendFileSync` is synchronous, so within a single Node process\n * the event loop serializes writes and each call writes its line atomically —\n * interleave-safe for the bounded-concurrency batch runner.\n *\n * referencia: swebench-batch.ts:192 (mkdir-before-append), :205 (per-line flush).\n */\nexport function appendJsonl(path: string, record: unknown): void {\n mkdirSync(dirname(path), { recursive: true });\n appendFileSync(path, `${JSON.stringify(record)}\\n`);\n}\n\n/**\n * Read the set of keys from an existing JSONL file for which `keyFn(parsed)`\n * returns a non-empty string. Used to resume a crashed batch by skipping rows\n * already persisted with a successful result. A trailing partial line from an\n * interrupted append is tolerated (skipped, not thrown), and a missing file\n * yields an empty set.\n *\n * referencia: swebench-batch.ts:113 (readDoneIds), :129 (success-only),\n * :131 (tolerate partial line).\n */\nexport function readJsonlIds(\n path: string,\n keyFn: (parsed: Record<string, unknown>) => string | undefined,\n): Set<string> {\n const done = new Set<string>();\n let text: string;\n try {\n text = readFileSync(path, \"utf8\");\n } catch {\n return done; // no file yet → nothing done\n }\n for (const rawLine of text.split(\"\\n\")) {\n // A trailing partial line from an interrupted run parses to undefined → skipped.\n const parsed = tryParseObjectLine(rawLine.trim());\n if (parsed === undefined) continue;\n const key = keyFn(parsed);\n if (typeof key === \"string\" && key.length > 0) done.add(key);\n }\n return done;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/internal/persistence/fs-session-store.ts"],"names":[],"mappings":";;;;;AA6CO,IAAM,iBAAN,MAA6C;AAAA,EACzC,QAAA;AAAA,EACA,IAAA;AAAA,EAET,YAAY,OAAA,EAAgC;AAC1C,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,OAAA;AACxB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,GAAA;AAAA,EACtB;AAAA,EAEA,MAAM,YAAY,OAAA,EAA2C;AAC3D,IAAA,OAAO,eAAe,cAAA,CAAe,IAAA,CAAK,UAAU,IAAA,CAAK,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,EACzE;AAAA,EAEA,MAAM,aAAA,CAAc,OAAA,EAAiB,OAAA,EAAkD;AAErF,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,OAAO,cAAA,CAAe,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,MAAM,OAAO,CAAA;AAE7D,IAAA,MAAM,MAAM,OAAA,CAAQ,IAAI,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC9C,IAAA,MAAM,YAAA,CAAa,MAAM,YAAY;AACnC,MAAA,MAAM,KAAA,GAAQ,MAAM,cAAA,CAAe,IAAI,CAAA;AACvC,MAAA,MAAM,gBAAgB,IAAA,EAAM,CAAC,GAAG,KAAA,EAAO,GAAG,OAAO,CAAC,CAAA;AAAA,IACpD,CAAC,CAAA;AAAA,EACH;AACF","file":"chunk-U6QGZHPN.js","sourcesContent":["/**\n * SE41 — `FsSessionStore`, the DEFAULT reference implementation of the pluggable\n * {@link SessionStore} seam. It reads and append-writes the native Claude-shaped\n * `.jsonl` transcript at `<baseDir>/projects/<encoded-cwd>/<agentId>.jsonl` — the\n * exact on-disk format SE40 introduced (the file the Claude Code CLI can\n * `--continue`). Omitting `local.sessionStore` resolves to this store, so the\n * default persistence path is byte-identical to SE40 behavior.\n *\n * `readRecords` is `readTranscript(transcriptPath(...))` (a missing session →\n * `[]`, not an error — a fresh agent has no history). `appendRecords` is a TRUE\n * append: it reads the prior records, concatenates the new-turn delta, and\n * rewrites the whole line set atomically under the SE40 cross-process file lock\n * (`writeTranscript` never shrinks — the native format is an append-only\n * `parentUuid` DAG). The parent dir is created BEFORE acquiring the lock because\n * the lock's companion `<path>.lock` file needs an existing parent dir (the SE40\n * `mkdir(dirname)`-before-lock fix).\n *\n * @internal\n */\n\nimport { mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nimport type { SessionStore } from \"../../types/session-store.js\";\nimport { withFileLock } from \"./file-lock.js\";\nimport {\n readTranscript,\n type SessionRecord,\n transcriptPath,\n writeTranscript,\n} from \"./session-transcript.js\";\n\n/** Options identifying the on-disk transcript location for the FS default store. */\nexport interface FsSessionStoreOptions {\n /** Transcript base dir (`~/.theokit` default, `~/.claude` for CLI interop) — already `~`-expanded. */\n baseDir: string;\n /** The workspace cwd whose encoded form is the transcript project dir. */\n cwd: string;\n}\n\n/**\n * The default `SessionStore` — reads/append-writes the native `.jsonl` transcript.\n *\n * @internal\n */\nexport class FsSessionStore implements SessionStore {\n readonly #baseDir: string;\n readonly #cwd: string;\n\n constructor(options: FsSessionStoreOptions) {\n this.#baseDir = options.baseDir;\n this.#cwd = options.cwd;\n }\n\n async readRecords(agentId: string): Promise<SessionRecord[]> {\n return readTranscript(transcriptPath(this.#baseDir, this.#cwd, agentId));\n }\n\n async appendRecords(agentId: string, records: readonly SessionRecord[]): Promise<void> {\n // Empty delta → nothing to persist (avoids an unnecessary lock + rewrite).\n if (records.length === 0) return;\n const path = transcriptPath(this.#baseDir, this.#cwd, agentId);\n // mkdir BEFORE the lock: withFileLock's companion `<path>.lock` needs the parent dir.\n await mkdir(dirname(path), { recursive: true });\n await withFileLock(path, async () => {\n const prior = await readTranscript(path);\n await writeTranscript(path, [...prior, ...records]);\n });\n }\n}\n"]}
@@ -1,17 +0,0 @@
1
- 'use strict';
2
-
3
- var chunk2HRYBRD7_cjs = require('./chunk-2HRYBRD7.cjs');
4
- require('./chunk-C7PICHRF.cjs');
5
- require('./chunk-YLQQX5W2.cjs');
6
- require('./chunk-4SXHEZIV.cjs');
7
- require('./chunk-TIZ4TS5V.cjs');
8
- require('./chunk-BEURCLDV.cjs');
9
-
10
-
11
-
12
- Object.defineProperty(exports, "FsSessionStore", {
13
- enumerable: true,
14
- get: function () { return chunk2HRYBRD7_cjs.FsSessionStore; }
15
- });
16
- //# sourceMappingURL=fs-session-store-KAUQYSGI.cjs.map
17
- //# sourceMappingURL=fs-session-store-KAUQYSGI.cjs.map
@@ -1,8 +0,0 @@
1
- export { FsSessionStore } from './chunk-U6QGZHPN.js';
2
- import './chunk-HZQEDNF6.js';
3
- import './chunk-2XLKLVVR.js';
4
- import './chunk-ZZWTY3RX.js';
5
- import './chunk-S2BBRVQX.js';
6
- import './chunk-JTFYYKDT.js';
7
- //# sourceMappingURL=fs-session-store-ZKB5NN37.js.map
8
- //# sourceMappingURL=fs-session-store-ZKB5NN37.js.map