@theokit/sdk 4.39.0 → 4.39.1

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 (38) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/{agent-KKZYLY5D.js → agent-6ULDAQT7.js} +5 -5
  3. package/dist/{agent-KKZYLY5D.js.map → agent-6ULDAQT7.js.map} +1 -1
  4. package/dist/{agent-I3EZZR6S.cjs → agent-PVUKI3BB.cjs} +6 -6
  5. package/dist/{agent-I3EZZR6S.cjs.map → agent-PVUKI3BB.cjs.map} +1 -1
  6. package/dist/{chunk-E2FFG33C.js → chunk-7YSRCQDE.js} +3 -3
  7. package/dist/{chunk-E2FFG33C.js.map → chunk-7YSRCQDE.js.map} +1 -1
  8. package/dist/{chunk-INSFS5GT.cjs → chunk-CAFV7WPQ.cjs} +43 -43
  9. package/dist/{chunk-INSFS5GT.cjs.map → chunk-CAFV7WPQ.cjs.map} +1 -1
  10. package/dist/{chunk-BPN5ONSW.cjs → chunk-DAXEQELR.cjs} +8 -4
  11. package/dist/chunk-DAXEQELR.cjs.map +1 -0
  12. package/dist/{chunk-FRUBE44B.cjs → chunk-FOZC5H7V.cjs} +5 -5
  13. package/dist/{chunk-FRUBE44B.cjs.map → chunk-FOZC5H7V.cjs.map} +1 -1
  14. package/dist/{chunk-KWUNN5J2.js → chunk-GTVJIGAH.js} +3 -3
  15. package/dist/{chunk-KWUNN5J2.js.map → chunk-GTVJIGAH.js.map} +1 -1
  16. package/dist/{chunk-GIRD3RWH.js → chunk-H3BOKK42.js} +6 -6
  17. package/dist/{chunk-GIRD3RWH.js.map → chunk-H3BOKK42.js.map} +1 -1
  18. package/dist/{chunk-ZYB6B7QJ.js → chunk-HSPVMV6T.js} +6 -2
  19. package/dist/chunk-HSPVMV6T.js.map +1 -0
  20. package/dist/{chunk-DCXRHCZJ.cjs → chunk-VWI3CDEW.cjs} +3 -3
  21. package/dist/{chunk-DCXRHCZJ.cjs.map → chunk-VWI3CDEW.cjs.map} +1 -1
  22. package/dist/{compact-session-PYEC3NZV.js → compact-session-GKA7GFVT.js} +3 -3
  23. package/dist/{compact-session-PYEC3NZV.js.map → compact-session-GKA7GFVT.js.map} +1 -1
  24. package/dist/{compact-session-VVT6IBJG.cjs → compact-session-XMP6OGY3.cjs} +11 -11
  25. package/dist/{compact-session-VVT6IBJG.cjs.map → compact-session-XMP6OGY3.cjs.map} +1 -1
  26. package/dist/cron.cjs +5 -5
  27. package/dist/cron.js +4 -4
  28. package/dist/eval.cjs +4 -4
  29. package/dist/eval.js +3 -3
  30. package/dist/index.cjs +27 -27
  31. package/dist/index.js +6 -6
  32. package/dist/{inject-session-GQMTDZUN.js → inject-session-7P4CZGDT.js} +3 -3
  33. package/dist/{inject-session-GQMTDZUN.js.map → inject-session-7P4CZGDT.js.map} +1 -1
  34. package/dist/{inject-session-LFCYVSLJ.cjs → inject-session-CC4KBYF6.cjs} +4 -4
  35. package/dist/{inject-session-LFCYVSLJ.cjs.map → inject-session-CC4KBYF6.cjs.map} +1 -1
  36. package/package.json +1 -1
  37. package/dist/chunk-BPN5ONSW.cjs.map +0 -1
  38. package/dist/chunk-ZYB6B7QJ.js.map +0 -1
@@ -48,7 +48,7 @@ function persistTurnToTranscript(store, loc, sessionId, turn, onCompact) {
48
48
  const count = (recordCounts.get(key) ?? 0) + 1;
49
49
  recordCounts.set(key, count);
50
50
  if (turn.autoCompact !== void 0) {
51
- const { autoCompactIfNeeded } = await import('./compact-session-VVT6IBJG.cjs');
51
+ const { autoCompactIfNeeded } = await import('./compact-session-XMP6OGY3.cjs');
52
52
  const fired = await autoCompactIfNeeded({
53
53
  store,
54
54
  loc,
@@ -114,5 +114,5 @@ exports.flushSessionWrites = flushSessionWrites;
114
114
  exports.getSessionMessages = getSessionMessages;
115
115
  exports.hydrateSession = hydrateSession;
116
116
  exports.persistTurnToTranscript = persistTurnToTranscript;
117
- //# sourceMappingURL=chunk-DCXRHCZJ.cjs.map
118
- //# sourceMappingURL=chunk-DCXRHCZJ.cjs.map
117
+ //# sourceMappingURL=chunk-VWI3CDEW.cjs.map
118
+ //# sourceMappingURL=chunk-VWI3CDEW.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal/session/agent-session.ts"],"names":["sessions","transcriptKey","hydratedKeys","persistTurn","diag","readSessionMessages"],"mappings":"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","file":"chunk-DCXRHCZJ.cjs","sourcesContent":["import type { SessionStore } from \"../../types/session-store.js\";\nimport {\n type PersistTurnInput,\n persistTurn,\n readSessionMessages,\n type TranscriptLocation,\n} from \"./agent-session-store.js\";\n\n/**\n * Per-agent conversation history kept across runs (and across `Agent.resume()`\n * within the same process). Lets the fixture responder recall prior facts when\n * the user asks a follow-up question.\n *\n * SE40 — disk persistence IS the native Claude-shaped `.jsonl` transcript. The\n * in-memory cache holds the narrowed `SessionMessage[]` (user/assistant text) so\n * a send can read `priorMessages` synchronously; the whole rich turn (user +\n * assistant + tool blocks) lands on disk once per send via {@link persistTurnToTranscript}\n * (fed by `run.conversation()`). Hydration on resume reconstructs the session by\n * walking the transcript DAG (`readSessionMessages`).\n *\n * @internal\n */\n\n// `SessionMessage` lives in `./session-types.ts` (leaf types file). Re-exported\n// for back-compat with downstream importers that pulled it from here.\nexport type { SessionMessage } from \"./session-types.js\";\n\nimport type { SessionMessage } from \"./session-types.js\";\n\n// M75 — the cache lives in a leaf; see session-cache.ts for the reason (cycle broken by extraction).\nexport {\n hydratedKeys,\n invalidateSessionCache,\n sessions,\n transcriptKey,\n} from \"./session-cache.js\";\n\nimport { diag } from \"../diagnostics.js\";\nimport { hydratedKeys, sessions, transcriptKey } from \"./session-cache.js\";\n\nconst pendingWrites = new Map<string, Promise<void>>();\nconst recordCounts = new Map<string, number>();\n\n/**\n * Append a session message to the in-memory cache only. Disk persistence for the\n * whole turn happens once per send via {@link persistTurnToTranscript}; the cache\n * feeds `priorMessages` / `onBeforeSend.previousMessageCount` synchronously.\n *\n * @internal\n */\nexport function appendSessionMessage(agentId: string, message: SessionMessage): void {\n const existing = sessions.get(agentId) ?? [];\n existing.push(message);\n // `delete` + `set` reinserts at the END: a JS `Map` preserves insertion order, so the first key\n // is always the least recently touched. That is the entire LRU, with no new structure (parsimony\n // rungs 2/5 — the ordering we need is already a language guarantee).\n sessions.delete(agentId);\n sessions.set(agentId, existing);\n enforceCeiling();\n}\n\n/**\n * Ceiling on sessions kept in memory.\n *\n * The runtime only reads the **active** session; the rest is pure cache, rebuildable from the\n * on-disk transcript. 32 is deliberately generous — the primary removal path is the explicit\n * `discardSession()` at the end of the agent's life, and this ceiling is a safety net against a\n * long-lived process running hundreds of sessions (plan risk #2: a tight ceiling could evict a\n * session still referenced by an in-flight async path).\n */\nexport const MAX_CACHED_SESSIONS = 32;\n\nfunction enforceCeiling(): void {\n while (sessions.size > MAX_CACHED_SESSIONS) {\n const maisAntiga = sessions.keys().next().value;\n if (maisAntiga === undefined) return;\n sessions.delete(maisAntiga);\n esquecerEscrituracao(maisAntiga);\n }\n}\n\n/**\n * Erases the bookkeeping for an `agentId` across EVERY `cwd` it appears in.\n *\n * The three maps are keyed by `transcriptKey(cwd, agentId)`; `sessions` is the only one keyed by the\n * raw `agentId`. The ceiling's first version deleted from all three using `sessions`' key — that is,\n * deleted nothing — and left `hydratedKeys` **orphaned**. Since `hydrateSession` returns early when\n * the marker is present, an evicted session came back **empty** instead of rehydrating from disk:\n * silent amnesia, and a regression new to M95, because before it nothing evicted.\n *\n * The ceiling only knows the `agentId`, not the `cwd`, so it scans by suffix — which is the format\n * `transcriptKey` produces. A scan rather than an index because these maps hold tens of entries, not\n * thousands: a reverse index here would be new structure for a problem that does not exist.\n */\nfunction esquecerEscrituracao(agentId: string): void {\n const sufixo = transcriptKey(\"\", agentId).slice(0 - agentId.length - 2);\n for (const k of [...hydratedKeys]) if (k.endsWith(sufixo)) hydratedKeys.delete(k);\n for (const k of [...pendingWrites.keys()]) if (k.endsWith(sufixo)) pendingWrites.delete(k);\n for (const k of [...recordCounts.keys()]) if (k.endsWith(sufixo)) recordCounts.delete(k);\n}\n\n/**\n * Erases the agent's module bookkeeping and returns how many entries were removed.\n *\n * M95 — `invalidateSessionCache` limpava **dois** dos quatro mapas (`sessions`, `hydratedKeys`);\n * `pendingWrites` and `recordCounts` were never touched by id, so they grew for the life of the\n * process. Neither is large per entry — the leak is in count, not volume — but a cache with no owner\n * for removal is a cache that only grows.\n *\n * Returns the count so the caller can prove the removal; a second discard returns 0, which is what\n * makes the idempotency test possible without exposing the maps.\n */\nexport function discardSession(cwd: string, agentId: string): number {\n const key = transcriptKey(cwd, agentId);\n let removed = 0;\n // `sessions` is NOT erased here — and the distinction is measured, not aesthetic. It holds the\n // readable conversation, and there is a legitimate reader AFTER dispose: the golden\n // `two-concurrent-sends-serialize` calls `getSessionMessages(agentId)` after `agent.dispose()`.\n // Erasing it here returned an empty list and broke two goldens. What bounds it is the LRU ceiling\n // above; the three below are pure bookkeeping, with no post-dispose reader.\n //\n // The key is `transcriptKey(cwd, agentId)` in ALL THREE — not the raw `agentId`. The first version\n // erased two of them by `agentId` and therefore **never erased anything**; the test did not catch\n // it because it only asserted that the SECOND call returns 0, which is true either way.\n if (hydratedKeys.delete(key)) removed++;\n if (pendingWrites.delete(key)) removed++;\n if (recordCounts.delete(key)) removed++;\n return removed;\n}\n\nexport function getSessionMessages(agentId: string): SessionMessage[] {\n return sessions.get(agentId) ?? [];\n}\n\n/**\n * Persist a full conversation turn (user + assistant + tool blocks) to the native\n * transcript. Chained per-(agent, transcript) so on-disk order matches send order,\n * and fire-and-forget so `send()` is not blocked by disk I/O. Every\n * M50 — when the caller supplies `turn.autoCompact`, size-driven auto-compaction (usage real vs\n * the model's context window) runs in this same chain, surfaced via the optional `onCompact` observer.\n *\n * @internal\n */\nexport function persistTurnToTranscript(\n store: SessionStore,\n loc: TranscriptLocation,\n sessionId: string,\n turn: PersistTurnInput,\n onCompact?: () => void,\n): void {\n const key = transcriptKey(loc.cwd, loc.agentId);\n // PRE-EXISTING debt, exposed when M75 fixed the Biome config that used to abort before\n // sweeping these files (a nested root under refactor/). It is not new code and was not touched\n // by M75; refactoring SDK internals without review would trade a visible problem for a diff\n // arriscado. Rastreado em usetheodev/theokit-sdk#151.\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: see the reason just above\n const chained = (pendingWrites.get(key) ?? Promise.resolve()).then(async () => {\n try {\n await persistTurn(store, loc, sessionId, turn);\n const count = (recordCounts.get(key) ?? 0) + 1;\n recordCounts.set(key, count);\n // M50 — the 50-turn no-summary boundary stub is GONE (it silently amnesia'd the session).\n // Auto-compaction is now size-driven with a real summary: see `maybeAutoCompact` below,\n // invoked in this same write chain by the post-run lifecycle when usage is known.\n if (turn.autoCompact !== undefined) {\n const { autoCompactIfNeeded } = await import(\"./compact-session.js\");\n const fired = await autoCompactIfNeeded({\n store,\n loc,\n sessionId,\n usageTotal: turn.autoCompact.usageTotal,\n contextWindow: turn.autoCompact.contextWindow,\n turnCount: count,\n summarize: turn.autoCompact.summarize,\n });\n if (fired) onCompact?.();\n }\n } catch (cause) {\n const msg = cause instanceof Error ? cause.message : String(cause);\n diag(`[theokit-sdk] session transcript write failed (${loc.agentId}): ${msg}\\n`);\n }\n });\n pendingWrites.set(\n key,\n chained.then(\n () => undefined,\n () => undefined,\n ),\n );\n}\n\n/**\n * Load the persisted transcript into the in-memory cache. Idempotent per\n * (baseDir, cwd, agentId). Call once per agent lifecycle before the first read.\n *\n * @internal\n */\nexport async function hydrateSession(\n agentId: string,\n loc: { store: SessionStore; cwd: string },\n): Promise<void> {\n const key = transcriptKey(loc.cwd, agentId);\n if (hydratedKeys.has(key)) return;\n hydratedKeys.add(key);\n\n const persisted = await readSessionMessages(loc.store, agentId);\n if (persisted.length === 0) return;\n // M51 review F4 — the DISK is the source of truth at hydration time: after an invalidation\n // (compact/inject), an in-flight turn may have repopulated the cache with a SINGLE message before\n // this hydrate ran; the old \"skip when non-empty\" guard then pinned the parent to a 1-message\n // context (history + injected pair lost until restart). The persist chain serializes writes, so\n // the disk already contains that in-flight turn — replacing is always correct.\n sessions.set(agentId, persisted);\n}\n\n/**\n * Wait for all pending transcript writes to settle. Used by tests and by the\n * agent dispose path so on-disk state matches in-memory before the caller proceeds.\n *\n * @internal\n */\nexport async function flushSessionWrites(): Promise<void> {\n while (pendingWrites.size > 0) {\n const all = Array.from(pendingWrites.values());\n pendingWrites.clear();\n await Promise.all(all);\n }\n}\n\nexport function clearSession(agentId: string): void {\n sessions.delete(agentId);\n}\n\n/**\n * M50 review F1 — drop BOTH the message cache and the hydration marker so the NEXT send re-hydrates\n * from disk. Without this, a compaction only helps after a process restart: the live process keeps\n * sending the full pre-compact history (the cache is read synchronously by every send).\n */\n/**\n * M50 review F5 — run `fn` serialized on the SAME per-(cwd,agentId) write chain the per-turn\n * persistence uses, so a manual `Agent.compact` can never interleave with an in-flight turn's\n * writes (boundary landing mid-turn would orphan the turn from the replay).\n */\nexport function enqueueSessionWrite<T>(\n cwd: string,\n agentId: string,\n fn: () => Promise<T>,\n): Promise<T> {\n const key = transcriptKey(cwd, agentId);\n const prior = pendingWrites.get(key) ?? Promise.resolve();\n const result = prior.then(fn);\n pendingWrites.set(\n key,\n result.then(\n () => undefined,\n () => undefined,\n ),\n );\n return result;\n}\n\n/** Test-only: drop every cached session and hydration marker. @internal */\nexport function clearAllSessions(): void {\n sessions.clear();\n hydratedKeys.clear();\n recordCounts.clear();\n // M50 review F11 — the auto-compact attempt marks live on globalThis; tests reset them here.\n const g = globalThis as unknown as Record<symbol, Map<string, number>>;\n const sym = Symbol.for(\"theokit-sdk.session.auto-compact-attempts\");\n g[sym]?.clear();\n}\n"]}
1
+ {"version":3,"sources":["../src/internal/session/agent-session.ts"],"names":["sessions","transcriptKey","hydratedKeys","persistTurn","diag","readSessionMessages"],"mappings":"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","file":"chunk-VWI3CDEW.cjs","sourcesContent":["import type { SessionStore } from \"../../types/session-store.js\";\nimport {\n type PersistTurnInput,\n persistTurn,\n readSessionMessages,\n type TranscriptLocation,\n} from \"./agent-session-store.js\";\n\n/**\n * Per-agent conversation history kept across runs (and across `Agent.resume()`\n * within the same process). Lets the fixture responder recall prior facts when\n * the user asks a follow-up question.\n *\n * SE40 — disk persistence IS the native Claude-shaped `.jsonl` transcript. The\n * in-memory cache holds the narrowed `SessionMessage[]` (user/assistant text) so\n * a send can read `priorMessages` synchronously; the whole rich turn (user +\n * assistant + tool blocks) lands on disk once per send via {@link persistTurnToTranscript}\n * (fed by `run.conversation()`). Hydration on resume reconstructs the session by\n * walking the transcript DAG (`readSessionMessages`).\n *\n * @internal\n */\n\n// `SessionMessage` lives in `./session-types.ts` (leaf types file). Re-exported\n// for back-compat with downstream importers that pulled it from here.\nexport type { SessionMessage } from \"./session-types.js\";\n\nimport type { SessionMessage } from \"./session-types.js\";\n\n// M75 — the cache lives in a leaf; see session-cache.ts for the reason (cycle broken by extraction).\nexport {\n hydratedKeys,\n invalidateSessionCache,\n sessions,\n transcriptKey,\n} from \"./session-cache.js\";\n\nimport { diag } from \"../diagnostics.js\";\nimport { hydratedKeys, sessions, transcriptKey } from \"./session-cache.js\";\n\nconst pendingWrites = new Map<string, Promise<void>>();\nconst recordCounts = new Map<string, number>();\n\n/**\n * Append a session message to the in-memory cache only. Disk persistence for the\n * whole turn happens once per send via {@link persistTurnToTranscript}; the cache\n * feeds `priorMessages` / `onBeforeSend.previousMessageCount` synchronously.\n *\n * @internal\n */\nexport function appendSessionMessage(agentId: string, message: SessionMessage): void {\n const existing = sessions.get(agentId) ?? [];\n existing.push(message);\n // `delete` + `set` reinserts at the END: a JS `Map` preserves insertion order, so the first key\n // is always the least recently touched. That is the entire LRU, with no new structure (parsimony\n // rungs 2/5 — the ordering we need is already a language guarantee).\n sessions.delete(agentId);\n sessions.set(agentId, existing);\n enforceCeiling();\n}\n\n/**\n * Ceiling on sessions kept in memory.\n *\n * The runtime only reads the **active** session; the rest is pure cache, rebuildable from the\n * on-disk transcript. 32 is deliberately generous — the primary removal path is the explicit\n * `discardSession()` at the end of the agent's life, and this ceiling is a safety net against a\n * long-lived process running hundreds of sessions (plan risk #2: a tight ceiling could evict a\n * session still referenced by an in-flight async path).\n */\nexport const MAX_CACHED_SESSIONS = 32;\n\nfunction enforceCeiling(): void {\n while (sessions.size > MAX_CACHED_SESSIONS) {\n const maisAntiga = sessions.keys().next().value;\n if (maisAntiga === undefined) return;\n sessions.delete(maisAntiga);\n esquecerEscrituracao(maisAntiga);\n }\n}\n\n/**\n * Erases the bookkeeping for an `agentId` across EVERY `cwd` it appears in.\n *\n * The three maps are keyed by `transcriptKey(cwd, agentId)`; `sessions` is the only one keyed by the\n * raw `agentId`. The ceiling's first version deleted from all three using `sessions`' key — that is,\n * deleted nothing — and left `hydratedKeys` **orphaned**. Since `hydrateSession` returns early when\n * the marker is present, an evicted session came back **empty** instead of rehydrating from disk:\n * silent amnesia, and a regression new to M95, because before it nothing evicted.\n *\n * The ceiling only knows the `agentId`, not the `cwd`, so it scans by suffix — which is the format\n * `transcriptKey` produces. A scan rather than an index because these maps hold tens of entries, not\n * thousands: a reverse index here would be new structure for a problem that does not exist.\n */\nfunction esquecerEscrituracao(agentId: string): void {\n const sufixo = transcriptKey(\"\", agentId).slice(0 - agentId.length - 2);\n for (const k of [...hydratedKeys]) if (k.endsWith(sufixo)) hydratedKeys.delete(k);\n for (const k of [...pendingWrites.keys()]) if (k.endsWith(sufixo)) pendingWrites.delete(k);\n for (const k of [...recordCounts.keys()]) if (k.endsWith(sufixo)) recordCounts.delete(k);\n}\n\n/**\n * Erases the agent's module bookkeeping and returns how many entries were removed.\n *\n * M95 — `invalidateSessionCache` limpava **dois** dos quatro mapas (`sessions`, `hydratedKeys`);\n * `pendingWrites` and `recordCounts` were never touched by id, so they grew for the life of the\n * process. Neither is large per entry — the leak is in count, not volume — but a cache with no owner\n * for removal is a cache that only grows.\n *\n * Returns the count so the caller can prove the removal; a second discard returns 0, which is what\n * makes the idempotency test possible without exposing the maps.\n */\nexport function discardSession(cwd: string, agentId: string): number {\n const key = transcriptKey(cwd, agentId);\n let removed = 0;\n // `sessions` is NOT erased here — and the distinction is measured, not aesthetic. It holds the\n // readable conversation, and there is a legitimate reader AFTER dispose: the golden\n // `two-concurrent-sends-serialize` calls `getSessionMessages(agentId)` after `agent.dispose()`.\n // Erasing it here returned an empty list and broke two goldens. What bounds it is the LRU ceiling\n // above; the three below are pure bookkeeping, with no post-dispose reader.\n //\n // The key is `transcriptKey(cwd, agentId)` in ALL THREE — not the raw `agentId`. The first version\n // erased two of them by `agentId` and therefore **never erased anything**; the test did not catch\n // it because it only asserted that the SECOND call returns 0, which is true either way.\n if (hydratedKeys.delete(key)) removed++;\n if (pendingWrites.delete(key)) removed++;\n if (recordCounts.delete(key)) removed++;\n return removed;\n}\n\nexport function getSessionMessages(agentId: string): SessionMessage[] {\n return sessions.get(agentId) ?? [];\n}\n\n/**\n * Persist a full conversation turn (user + assistant + tool blocks) to the native\n * transcript. Chained per-(agent, transcript) so on-disk order matches send order,\n * and fire-and-forget so `send()` is not blocked by disk I/O. Every\n * M50 — when the caller supplies `turn.autoCompact`, size-driven auto-compaction (usage real vs\n * the model's context window) runs in this same chain, surfaced via the optional `onCompact` observer.\n *\n * @internal\n */\nexport function persistTurnToTranscript(\n store: SessionStore,\n loc: TranscriptLocation,\n sessionId: string,\n turn: PersistTurnInput,\n onCompact?: () => void,\n): void {\n const key = transcriptKey(loc.cwd, loc.agentId);\n // PRE-EXISTING debt, exposed when M75 fixed the Biome config that used to abort before\n // sweeping these files (a nested root under refactor/). It is not new code and was not touched\n // by M75; refactoring SDK internals without review would trade a visible problem for a diff\n // arriscado. Rastreado em usetheodev/theokit-sdk#151.\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: see the reason just above\n const chained = (pendingWrites.get(key) ?? Promise.resolve()).then(async () => {\n try {\n await persistTurn(store, loc, sessionId, turn);\n const count = (recordCounts.get(key) ?? 0) + 1;\n recordCounts.set(key, count);\n // M50 — the 50-turn no-summary boundary stub is GONE (it silently amnesia'd the session).\n // Auto-compaction is now size-driven with a real summary: see `maybeAutoCompact` below,\n // invoked in this same write chain by the post-run lifecycle when usage is known.\n if (turn.autoCompact !== undefined) {\n const { autoCompactIfNeeded } = await import(\"./compact-session.js\");\n const fired = await autoCompactIfNeeded({\n store,\n loc,\n sessionId,\n usageTotal: turn.autoCompact.usageTotal,\n contextWindow: turn.autoCompact.contextWindow,\n turnCount: count,\n summarize: turn.autoCompact.summarize,\n });\n if (fired) onCompact?.();\n }\n } catch (cause) {\n const msg = cause instanceof Error ? cause.message : String(cause);\n diag(`[theokit-sdk] session transcript write failed (${loc.agentId}): ${msg}\\n`);\n }\n });\n pendingWrites.set(\n key,\n chained.then(\n () => undefined,\n () => undefined,\n ),\n );\n}\n\n/**\n * Load the persisted transcript into the in-memory cache. Idempotent per\n * (baseDir, cwd, agentId). Call once per agent lifecycle before the first read.\n *\n * @internal\n */\nexport async function hydrateSession(\n agentId: string,\n loc: { store: SessionStore; cwd: string },\n): Promise<void> {\n const key = transcriptKey(loc.cwd, agentId);\n if (hydratedKeys.has(key)) return;\n hydratedKeys.add(key);\n\n const persisted = await readSessionMessages(loc.store, agentId);\n if (persisted.length === 0) return;\n // M51 review F4 — the DISK is the source of truth at hydration time: after an invalidation\n // (compact/inject), an in-flight turn may have repopulated the cache with a SINGLE message before\n // this hydrate ran; the old \"skip when non-empty\" guard then pinned the parent to a 1-message\n // context (history + injected pair lost until restart). The persist chain serializes writes, so\n // the disk already contains that in-flight turn — replacing is always correct.\n sessions.set(agentId, persisted);\n}\n\n/**\n * Wait for all pending transcript writes to settle. Used by tests and by the\n * agent dispose path so on-disk state matches in-memory before the caller proceeds.\n *\n * @internal\n */\nexport async function flushSessionWrites(): Promise<void> {\n while (pendingWrites.size > 0) {\n const all = Array.from(pendingWrites.values());\n pendingWrites.clear();\n await Promise.all(all);\n }\n}\n\nexport function clearSession(agentId: string): void {\n sessions.delete(agentId);\n}\n\n/**\n * M50 review F1 — drop BOTH the message cache and the hydration marker so the NEXT send re-hydrates\n * from disk. Without this, a compaction only helps after a process restart: the live process keeps\n * sending the full pre-compact history (the cache is read synchronously by every send).\n */\n/**\n * M50 review F5 — run `fn` serialized on the SAME per-(cwd,agentId) write chain the per-turn\n * persistence uses, so a manual `Agent.compact` can never interleave with an in-flight turn's\n * writes (boundary landing mid-turn would orphan the turn from the replay).\n */\nexport function enqueueSessionWrite<T>(\n cwd: string,\n agentId: string,\n fn: () => Promise<T>,\n): Promise<T> {\n const key = transcriptKey(cwd, agentId);\n const prior = pendingWrites.get(key) ?? Promise.resolve();\n const result = prior.then(fn);\n pendingWrites.set(\n key,\n result.then(\n () => undefined,\n () => undefined,\n ),\n );\n return result;\n}\n\n/** Test-only: drop every cached session and hydration marker. @internal */\nexport function clearAllSessions(): void {\n sessions.clear();\n hydratedKeys.clear();\n recordCounts.clear();\n // M50 review F11 — the auto-compact attempt marks live on globalThis; tests reset them here.\n const g = globalThis as unknown as Record<symbol, Map<string, number>>;\n const sym = Symbol.for(\"theokit-sdk.session.auto-compact-attempts\");\n g[sym]?.clear();\n}\n"]}
@@ -1,4 +1,4 @@
1
- export { COMPACT_SUMMARY_MARKER, COMPACT_USER_MESSAGE_MAX_TOKENS, autoCompactIfNeeded, buildDefaultSummarizer, compactSessionTranscript, isCompactSummary, resolveSummarizerRoute, shouldAutoCompact } from './chunk-ZYB6B7QJ.js';
1
+ export { COMPACT_SUMMARY_MARKER, COMPACT_USER_MESSAGE_MAX_TOKENS, autoCompactIfNeeded, buildDefaultSummarizer, compactSessionTranscript, isCompactSummary, resolveSummarizerRoute, shouldAutoCompact } from './chunk-HSPVMV6T.js';
2
2
  import './chunk-HWNVAUK4.js';
3
3
  import './chunk-5KOW3GLE.js';
4
4
  import './chunk-SCFW5MJZ.js';
@@ -14,5 +14,5 @@ import './chunk-5NBUH3NO.js';
14
14
  import './chunk-J3UK2GMN.js';
15
15
  import './chunk-SG5ZWT6C.js';
16
16
  import './chunk-IVSD7L22.js';
17
- //# sourceMappingURL=compact-session-PYEC3NZV.js.map
18
- //# sourceMappingURL=compact-session-PYEC3NZV.js.map
17
+ //# sourceMappingURL=compact-session-GKA7GFVT.js.map
18
+ //# sourceMappingURL=compact-session-GKA7GFVT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"compact-session-PYEC3NZV.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"compact-session-GKA7GFVT.js"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkBPN5ONSW_cjs = require('./chunk-BPN5ONSW.cjs');
3
+ var chunkDAXEQELR_cjs = require('./chunk-DAXEQELR.cjs');
4
4
  require('./chunk-ECW2MLEW.cjs');
5
5
  require('./chunk-BURYFNOM.cjs');
6
6
  require('./chunk-6YNYA7GD.cjs');
@@ -21,35 +21,35 @@ require('./chunk-BCQ3E2ZG.cjs');
21
21
 
22
22
  Object.defineProperty(exports, "COMPACT_SUMMARY_MARKER", {
23
23
  enumerable: true,
24
- get: function () { return chunkBPN5ONSW_cjs.COMPACT_SUMMARY_MARKER; }
24
+ get: function () { return chunkDAXEQELR_cjs.COMPACT_SUMMARY_MARKER; }
25
25
  });
26
26
  Object.defineProperty(exports, "COMPACT_USER_MESSAGE_MAX_TOKENS", {
27
27
  enumerable: true,
28
- get: function () { return chunkBPN5ONSW_cjs.COMPACT_USER_MESSAGE_MAX_TOKENS; }
28
+ get: function () { return chunkDAXEQELR_cjs.COMPACT_USER_MESSAGE_MAX_TOKENS; }
29
29
  });
30
30
  Object.defineProperty(exports, "autoCompactIfNeeded", {
31
31
  enumerable: true,
32
- get: function () { return chunkBPN5ONSW_cjs.autoCompactIfNeeded; }
32
+ get: function () { return chunkDAXEQELR_cjs.autoCompactIfNeeded; }
33
33
  });
34
34
  Object.defineProperty(exports, "buildDefaultSummarizer", {
35
35
  enumerable: true,
36
- get: function () { return chunkBPN5ONSW_cjs.buildDefaultSummarizer; }
36
+ get: function () { return chunkDAXEQELR_cjs.buildDefaultSummarizer; }
37
37
  });
38
38
  Object.defineProperty(exports, "compactSessionTranscript", {
39
39
  enumerable: true,
40
- get: function () { return chunkBPN5ONSW_cjs.compactSessionTranscript; }
40
+ get: function () { return chunkDAXEQELR_cjs.compactSessionTranscript; }
41
41
  });
42
42
  Object.defineProperty(exports, "isCompactSummary", {
43
43
  enumerable: true,
44
- get: function () { return chunkBPN5ONSW_cjs.isCompactSummary; }
44
+ get: function () { return chunkDAXEQELR_cjs.isCompactSummary; }
45
45
  });
46
46
  Object.defineProperty(exports, "resolveSummarizerRoute", {
47
47
  enumerable: true,
48
- get: function () { return chunkBPN5ONSW_cjs.resolveSummarizerRoute; }
48
+ get: function () { return chunkDAXEQELR_cjs.resolveSummarizerRoute; }
49
49
  });
50
50
  Object.defineProperty(exports, "shouldAutoCompact", {
51
51
  enumerable: true,
52
- get: function () { return chunkBPN5ONSW_cjs.shouldAutoCompact; }
52
+ get: function () { return chunkDAXEQELR_cjs.shouldAutoCompact; }
53
53
  });
54
- //# sourceMappingURL=compact-session-VVT6IBJG.cjs.map
55
- //# sourceMappingURL=compact-session-VVT6IBJG.cjs.map
54
+ //# sourceMappingURL=compact-session-XMP6OGY3.cjs.map
55
+ //# sourceMappingURL=compact-session-XMP6OGY3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"compact-session-VVT6IBJG.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"compact-session-XMP6OGY3.cjs"}
package/dist/cron.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkFRUBE44B_cjs = require('./chunk-FRUBE44B.cjs');
4
- require('./chunk-INSFS5GT.cjs');
3
+ var chunkFOZC5H7V_cjs = require('./chunk-FOZC5H7V.cjs');
4
+ require('./chunk-CAFV7WPQ.cjs');
5
5
  require('./chunk-BV2MWEMV.cjs');
6
6
  require('./chunk-N475ETD6.cjs');
7
7
  require('./chunk-BUUUWQMB.cjs');
8
- require('./chunk-DCXRHCZJ.cjs');
8
+ require('./chunk-VWI3CDEW.cjs');
9
9
  require('./chunk-74D7KSBP.cjs');
10
- require('./chunk-BPN5ONSW.cjs');
10
+ require('./chunk-DAXEQELR.cjs');
11
11
  require('./chunk-ECW2MLEW.cjs');
12
12
  require('./chunk-BURYFNOM.cjs');
13
13
  require('./chunk-XYOHKCYG.cjs');
@@ -50,7 +50,7 @@ require('./chunk-BCQ3E2ZG.cjs');
50
50
 
51
51
  Object.defineProperty(exports, "Cron", {
52
52
  enumerable: true,
53
- get: function () { return chunkFRUBE44B_cjs.Cron; }
53
+ get: function () { return chunkFOZC5H7V_cjs.Cron; }
54
54
  });
55
55
  //# sourceMappingURL=cron.cjs.map
56
56
  //# sourceMappingURL=cron.cjs.map
package/dist/cron.js CHANGED
@@ -1,11 +1,11 @@
1
- export { Cron } from './chunk-KWUNN5J2.js';
2
- import './chunk-GIRD3RWH.js';
1
+ export { Cron } from './chunk-GTVJIGAH.js';
2
+ import './chunk-H3BOKK42.js';
3
3
  import './chunk-2SFBB54R.js';
4
4
  import './chunk-LJX2SQV2.js';
5
5
  import './chunk-K2BQQ445.js';
6
- import './chunk-E2FFG33C.js';
6
+ import './chunk-7YSRCQDE.js';
7
7
  import './chunk-KGRIHEDT.js';
8
- import './chunk-ZYB6B7QJ.js';
8
+ import './chunk-HSPVMV6T.js';
9
9
  import './chunk-HWNVAUK4.js';
10
10
  import './chunk-5KOW3GLE.js';
11
11
  import './chunk-3I4B3OIX.js';
package/dist/eval.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkS7OEXQMI_cjs = require('./chunk-S7OEXQMI.cjs');
4
- var chunkINSFS5GT_cjs = require('./chunk-INSFS5GT.cjs');
4
+ var chunkCAFV7WPQ_cjs = require('./chunk-CAFV7WPQ.cjs');
5
5
  require('./chunk-BV2MWEMV.cjs');
6
6
  require('./chunk-N475ETD6.cjs');
7
7
  var chunkBUUUWQMB_cjs = require('./chunk-BUUUWQMB.cjs');
8
- require('./chunk-DCXRHCZJ.cjs');
8
+ require('./chunk-VWI3CDEW.cjs');
9
9
  require('./chunk-74D7KSBP.cjs');
10
- require('./chunk-BPN5ONSW.cjs');
10
+ require('./chunk-DAXEQELR.cjs');
11
11
  require('./chunk-ECW2MLEW.cjs');
12
12
  require('./chunk-BURYFNOM.cjs');
13
13
  require('./chunk-XYOHKCYG.cjs');
@@ -773,7 +773,7 @@ function makeDefaultEmbedder(opts) {
773
773
  let runtime;
774
774
  return (texts) => {
775
775
  if (runtime === void 0) {
776
- runtime = chunkINSFS5GT_cjs.openRouterMemoryEmbeddingProviderAdapter.create(embedderCreateOptions(opts));
776
+ runtime = chunkCAFV7WPQ_cjs.openRouterMemoryEmbeddingProviderAdapter.create(embedderCreateOptions(opts));
777
777
  }
778
778
  return runtime.then((rt) => rt.embed(texts));
779
779
  };
package/dist/eval.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { shellEscapePosix, LocalSandbox } from './chunk-SKWVAQAY.js';
2
- import { openRouterMemoryEmbeddingProviderAdapter } from './chunk-GIRD3RWH.js';
2
+ import { openRouterMemoryEmbeddingProviderAdapter } from './chunk-H3BOKK42.js';
3
3
  import './chunk-2SFBB54R.js';
4
4
  import './chunk-LJX2SQV2.js';
5
5
  import { getTracer } from './chunk-K2BQQ445.js';
6
- import './chunk-E2FFG33C.js';
6
+ import './chunk-7YSRCQDE.js';
7
7
  import './chunk-KGRIHEDT.js';
8
- import './chunk-ZYB6B7QJ.js';
8
+ import './chunk-HSPVMV6T.js';
9
9
  import './chunk-HWNVAUK4.js';
10
10
  import './chunk-5KOW3GLE.js';
11
11
  import './chunk-3I4B3OIX.js';
package/dist/index.cjs CHANGED
@@ -8,14 +8,14 @@ require('./chunk-FWBSDQZ7.cjs');
8
8
  var chunkC7OP3FAK_cjs = require('./chunk-C7OP3FAK.cjs');
9
9
  require('./chunk-CEIHCKTO.cjs');
10
10
  require('./chunk-PNVDQL5Y.cjs');
11
- var chunkFRUBE44B_cjs = require('./chunk-FRUBE44B.cjs');
12
- var chunkINSFS5GT_cjs = require('./chunk-INSFS5GT.cjs');
11
+ var chunkFOZC5H7V_cjs = require('./chunk-FOZC5H7V.cjs');
12
+ var chunkCAFV7WPQ_cjs = require('./chunk-CAFV7WPQ.cjs');
13
13
  require('./chunk-BV2MWEMV.cjs');
14
14
  var chunkN475ETD6_cjs = require('./chunk-N475ETD6.cjs');
15
15
  require('./chunk-BUUUWQMB.cjs');
16
- require('./chunk-DCXRHCZJ.cjs');
16
+ require('./chunk-VWI3CDEW.cjs');
17
17
  require('./chunk-74D7KSBP.cjs');
18
- var chunkBPN5ONSW_cjs = require('./chunk-BPN5ONSW.cjs');
18
+ var chunkDAXEQELR_cjs = require('./chunk-DAXEQELR.cjs');
19
19
  require('./chunk-ECW2MLEW.cjs');
20
20
  require('./chunk-BURYFNOM.cjs');
21
21
  require('./chunk-XYOHKCYG.cjs');
@@ -62,8 +62,8 @@ var fs = require('fs');
62
62
  // src/agent-factory.ts
63
63
  function createAgentFactory(common) {
64
64
  return {
65
- forSession: (agentId, overrides) => chunkINSFS5GT_cjs.Agent.create(mergeAgentOptions(common, overrides, agentId)),
66
- getOrCreate: (agentId, overrides) => chunkINSFS5GT_cjs.Agent.getOrCreate(agentId, mergeAgentOptions(common, overrides, agentId))
65
+ forSession: (agentId, overrides) => chunkCAFV7WPQ_cjs.Agent.create(mergeAgentOptions(common, overrides, agentId)),
66
+ getOrCreate: (agentId, overrides) => chunkCAFV7WPQ_cjs.Agent.getOrCreate(agentId, mergeAgentOptions(common, overrides, agentId))
67
67
  };
68
68
  }
69
69
  function mergeAgentOptions(common, overrides, agentId) {
@@ -1167,7 +1167,7 @@ var Memory = {
1167
1167
  return await peer.IndexManager.open(openArgs);
1168
1168
  }
1169
1169
  const { IndexManager } = await import('./index-manager-N7RQYUKT.cjs');
1170
- openArgs.embedding = await resolveEmbedding(opts.embedding, chunkINSFS5GT_cjs.MEMORY_EMBEDDING_ADAPTERS);
1170
+ openArgs.embedding = await resolveEmbedding(opts.embedding, chunkCAFV7WPQ_cjs.MEMORY_EMBEDDING_ADAPTERS);
1171
1171
  return await IndexManager.open(openArgs);
1172
1172
  },
1173
1173
  /**
@@ -1178,7 +1178,7 @@ var Memory = {
1178
1178
  */
1179
1179
  async runDreamingSweep(opts) {
1180
1180
  const peer = await tryLoadSdkMemoryPeer();
1181
- const catalog = peer !== null ? peer.MEMORY_EMBEDDING_ADAPTERS : chunkINSFS5GT_cjs.MEMORY_EMBEDDING_ADAPTERS;
1181
+ const catalog = peer !== null ? peer.MEMORY_EMBEDDING_ADAPTERS : chunkCAFV7WPQ_cjs.MEMORY_EMBEDDING_ADAPTERS;
1182
1182
  const sweepArgs = await buildDreamingSweepArgs(opts, catalog);
1183
1183
  const result = peer !== null ? (
1184
1184
  // biome-ignore lint/suspicious/noExplicitAny: peer is dynamically loaded — structural compat ensured by sdk-memory
@@ -1600,7 +1600,7 @@ function ehAgenteConstruido(m) {
1600
1600
  return typeof m.send === "function";
1601
1601
  }
1602
1602
  async function materializar(def, indice) {
1603
- const { Agent: Agent2 } = await import('./agent-I3EZZR6S.cjs');
1603
+ const { Agent: Agent2 } = await import('./agent-PVUKI3BB.cjs');
1604
1604
  return Agent2.create({
1605
1605
  // `AgentDefinition.model` admits the sentinel `'inherit'`, which is not a model id. Inheriting
1606
1606
  // here means "declare nothing and let the default apply" — forwarding the literal would create
@@ -1742,7 +1742,7 @@ var FIXTURE_USER = {
1742
1742
  };
1743
1743
  var FIXTURE_MODELS = [
1744
1744
  {
1745
- id: chunkINSFS5GT_cjs.DEFAULT_AGENTIC_MODEL_ID,
1745
+ id: chunkCAFV7WPQ_cjs.DEFAULT_AGENTIC_MODEL_ID,
1746
1746
  name: "Gemini 2.0 Flash",
1747
1747
  displayName: "Gemini 2.0 Flash",
1748
1748
  parameters: [
@@ -1818,7 +1818,7 @@ async function listLocalModelsViaOpenAiCompat(baseUrl) {
1818
1818
  try {
1819
1819
  response = await fetch(url, { method: "GET" });
1820
1820
  } catch (fetchErr) {
1821
- const mapped = chunkBPN5ONSW_cjs.mapOllamaTransportError({
1821
+ const mapped = chunkDAXEQELR_cjs.mapOllamaTransportError({
1822
1822
  providerId: "ollama",
1823
1823
  cause: fetchErr,
1824
1824
  endpoint: "/v1/models"
@@ -1830,8 +1830,8 @@ async function listLocalModelsViaOpenAiCompat(baseUrl) {
1830
1830
  );
1831
1831
  }
1832
1832
  if (!response.ok) {
1833
- const body = await chunkBPN5ONSW_cjs.readErrorResponseBody(response);
1834
- const mapped = chunkBPN5ONSW_cjs.mapOllamaHttpError({
1833
+ const body = await chunkDAXEQELR_cjs.readErrorResponseBody(response);
1834
+ const mapped = chunkDAXEQELR_cjs.mapOllamaHttpError({
1835
1835
  providerId: "ollama",
1836
1836
  status: response.status,
1837
1837
  body,
@@ -1945,7 +1945,7 @@ var Theokit = class {
1945
1945
  envVars: p.envVars
1946
1946
  }));
1947
1947
  },
1948
- embeddingAdapters: () => Object.entries(chunkINSFS5GT_cjs.MEMORY_EMBEDDING_ADAPTERS).map(([id, adapter]) => ({
1948
+ embeddingAdapters: () => Object.entries(chunkCAFV7WPQ_cjs.MEMORY_EMBEDDING_ADAPTERS).map(([id, adapter]) => ({
1949
1949
  id,
1950
1950
  transport: adapter.transport,
1951
1951
  defaultModel: adapter.defaultModel
@@ -1963,7 +1963,7 @@ var Theokit = class {
1963
1963
  };
1964
1964
  async function maybeListLocalModels(providerName) {
1965
1965
  chunkG4XUXSRN_cjs.registerBuiltins();
1966
- await chunkBPN5ONSW_cjs.discoverProviderPlugins();
1966
+ await chunkDAXEQELR_cjs.discoverProviderPlugins();
1967
1967
  const profile = chunkG4XUXSRN_cjs.getProviderProfile(providerName);
1968
1968
  if (profile === void 0) return void 0;
1969
1969
  if (profile.authType !== "none") return void 0;
@@ -1977,17 +1977,17 @@ function resolveLocalProviderBaseUrl(providerName, fallback) {
1977
1977
  return fallback;
1978
1978
  }
1979
1979
  async function executeCatalogRequest(request) {
1980
- const apiKey = chunkINSFS5GT_cjs.resolveApiKey(request.apiKey);
1980
+ const apiKey = chunkCAFV7WPQ_cjs.resolveApiKey(request.apiKey);
1981
1981
  if (apiKey === void 0) {
1982
1982
  throw new chunkIHFNRNTJ_cjs.AuthenticationError("Missing API key", { code: "missing_api_key" });
1983
1983
  }
1984
- if (chunkBPN5ONSW_cjs.shouldUseFixtureMode(apiKey)) {
1984
+ if (chunkDAXEQELR_cjs.shouldUseFixtureMode(apiKey)) {
1985
1985
  return request.fixture;
1986
1986
  }
1987
- if (!chunkBPN5ONSW_cjs.isFixtureApiKey(apiKey) && process.env.THEOKIT_API_BASE_URL === void 0) {
1987
+ if (!chunkDAXEQELR_cjs.isFixtureApiKey(apiKey) && process.env.THEOKIT_API_BASE_URL === void 0) {
1988
1988
  throw new chunkIHFNRNTJ_cjs.AuthenticationError("Invalid API key", { code: "authentication_error" });
1989
1989
  }
1990
- return chunkBPN5ONSW_cjs.httpRequest(request.path, { apiKey });
1990
+ return chunkDAXEQELR_cjs.httpRequest(request.path, { apiKey });
1991
1991
  }
1992
1992
 
1993
1993
  // src/trajectory-helpers.ts
@@ -2103,35 +2103,35 @@ Object.defineProperty(exports, "GenerateObjectError", {
2103
2103
  });
2104
2104
  Object.defineProperty(exports, "Cron", {
2105
2105
  enumerable: true,
2106
- get: function () { return chunkFRUBE44B_cjs.Cron; }
2106
+ get: function () { return chunkFOZC5H7V_cjs.Cron; }
2107
2107
  });
2108
2108
  Object.defineProperty(exports, "Agent", {
2109
2109
  enumerable: true,
2110
- get: function () { return chunkINSFS5GT_cjs.Agent; }
2110
+ get: function () { return chunkCAFV7WPQ_cjs.Agent; }
2111
2111
  });
2112
2112
  Object.defineProperty(exports, "AgentBuilder", {
2113
2113
  enumerable: true,
2114
- get: function () { return chunkINSFS5GT_cjs.AgentBuilder; }
2114
+ get: function () { return chunkCAFV7WPQ_cjs.AgentBuilder; }
2115
2115
  });
2116
2116
  Object.defineProperty(exports, "Tool", {
2117
2117
  enumerable: true,
2118
- get: function () { return chunkINSFS5GT_cjs.Tool; }
2118
+ get: function () { return chunkCAFV7WPQ_cjs.Tool; }
2119
2119
  });
2120
2120
  Object.defineProperty(exports, "ToolError", {
2121
2121
  enumerable: true,
2122
- get: function () { return chunkINSFS5GT_cjs.ToolError; }
2122
+ get: function () { return chunkCAFV7WPQ_cjs.ToolError; }
2123
2123
  });
2124
2124
  Object.defineProperty(exports, "UsageAccumulator", {
2125
2125
  enumerable: true,
2126
- get: function () { return chunkINSFS5GT_cjs.UsageAccumulator; }
2126
+ get: function () { return chunkCAFV7WPQ_cjs.UsageAccumulator; }
2127
2127
  });
2128
2128
  Object.defineProperty(exports, "computeCost", {
2129
2129
  enumerable: true,
2130
- get: function () { return chunkINSFS5GT_cjs.computeCost; }
2130
+ get: function () { return chunkCAFV7WPQ_cjs.computeCost; }
2131
2131
  });
2132
2132
  Object.defineProperty(exports, "getPricingEntry", {
2133
2133
  enumerable: true,
2134
- get: function () { return chunkINSFS5GT_cjs.getPricingEntry; }
2134
+ get: function () { return chunkCAFV7WPQ_cjs.getPricingEntry; }
2135
2135
  });
2136
2136
  Object.defineProperty(exports, "emitRunEvent", {
2137
2137
  enumerable: true,
package/dist/index.js CHANGED
@@ -6,16 +6,16 @@ import './chunk-JZUPMTJY.js';
6
6
  import { Workflow, agentStep } from './chunk-MC5EINBV.js';
7
7
  import './chunk-V2RBCCN5.js';
8
8
  import './chunk-CAH3G4IS.js';
9
- export { Cron } from './chunk-KWUNN5J2.js';
10
- import { MEMORY_EMBEDDING_ADAPTERS, resolveApiKey, DEFAULT_AGENTIC_MODEL_ID, Agent } from './chunk-GIRD3RWH.js';
11
- export { Agent, AgentBuilder, Tool, ToolError, UsageAccumulator, computeCost, getPricingEntry } from './chunk-GIRD3RWH.js';
9
+ export { Cron } from './chunk-GTVJIGAH.js';
10
+ import { MEMORY_EMBEDDING_ADAPTERS, resolveApiKey, DEFAULT_AGENTIC_MODEL_ID, Agent } from './chunk-H3BOKK42.js';
11
+ export { Agent, AgentBuilder, Tool, ToolError, UsageAccumulator, computeCost, getPricingEntry } from './chunk-H3BOKK42.js';
12
12
  import './chunk-2SFBB54R.js';
13
13
  import { configure, submit, list, get, cancel, subscribe } from './chunk-LJX2SQV2.js';
14
14
  export { emitRunEvent } from './chunk-LJX2SQV2.js';
15
15
  import './chunk-K2BQQ445.js';
16
- import './chunk-E2FFG33C.js';
16
+ import './chunk-7YSRCQDE.js';
17
17
  import './chunk-KGRIHEDT.js';
18
- import { discoverProviderPlugins, shouldUseFixtureMode, isFixtureApiKey, httpRequest, mapOllamaTransportError, readErrorResponseBody, mapOllamaHttpError } from './chunk-ZYB6B7QJ.js';
18
+ import { discoverProviderPlugins, shouldUseFixtureMode, isFixtureApiKey, httpRequest, mapOllamaTransportError, readErrorResponseBody, mapOllamaHttpError } from './chunk-HSPVMV6T.js';
19
19
  import './chunk-HWNVAUK4.js';
20
20
  import './chunk-5KOW3GLE.js';
21
21
  import './chunk-3I4B3OIX.js';
@@ -1603,7 +1603,7 @@ function ehAgenteConstruido(m) {
1603
1603
  return typeof m.send === "function";
1604
1604
  }
1605
1605
  async function materializar(def, indice) {
1606
- const { Agent: Agent2 } = await import('./agent-KKZYLY5D.js');
1606
+ const { Agent: Agent2 } = await import('./agent-6ULDAQT7.js');
1607
1607
  return Agent2.create({
1608
1608
  // `AgentDefinition.model` admits the sentinel `'inherit'`, which is not a model id. Inheriting
1609
1609
  // here means "declare nothing and let the default apply" — forwarding the literal would create
@@ -1,4 +1,4 @@
1
- import { enqueueSessionWrite } from './chunk-E2FFG33C.js';
1
+ import { enqueueSessionWrite } from './chunk-7YSRCQDE.js';
2
2
  import { invalidateSessionCache } from './chunk-5KOW3GLE.js';
3
3
  import './chunk-3I4B3OIX.js';
4
4
  import { SessionTranscript } from './chunk-JRLXEYR4.js';
@@ -22,5 +22,5 @@ async function injectSessionTurn(opts) {
22
22
  }
23
23
 
24
24
  export { injectSessionTurn };
25
- //# sourceMappingURL=inject-session-GQMTDZUN.js.map
26
- //# sourceMappingURL=inject-session-GQMTDZUN.js.map
25
+ //# sourceMappingURL=inject-session-7P4CZGDT.js.map
26
+ //# sourceMappingURL=inject-session-7P4CZGDT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal/session/inject-session.ts"],"names":[],"mappings":";;;;;;;;AAWA,eAAsB,kBAAkB,IAAA,EAMtB;AAChB,EAAA,MAAM,oBAAoB,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,CAAK,GAAA,CAAI,SAAS,YAAY;AACpE,IAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,MAAM,WAAA,CAAY,IAAA,CAAK,IAAI,OAAO,CAAA;AAC3D,IAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,WAAA,CAAY,KAAA,EAAO;AAAA,MACtD,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,KAAA,IAAS;AAAA,KAC1B,CAAA;AACD,IAAA,UAAA,CAAW,cAAA,CAAe,KAAK,QAAQ,CAAA;AACvC,IAAA,UAAA,CAAW,mBAAA,CAAoB,EAAE,IAAA,EAAM,IAAA,CAAK,eAAe,CAAA;AAC3D,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,UAAA,CAAW,OAAA,EAAQ,CAAE,KAAA,CAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AACzF,IAAA,sBAAA,CAAuB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,EACvD,CAAC,CAAA;AACH","file":"inject-session-GQMTDZUN.js","sourcesContent":["/**\n * M51 (agent-builder) — inject a SYNTHETIC user+assistant pair into a session's persisted transcript\n * WITHOUT running an LLM turn. This is the Codex review-exit mechanism (`exit_success.xml` appended to\n * the parent thread history so follow-ups like \"fix finding 2\" work): the pair chains onto the DAG\n * leaf (M50 pattern) and the in-memory cache is invalidated so the NEXT send re-hydrates with it.\n */\nimport type { SessionStore } from \"../../types/session-store.js\";\nimport { SessionTranscript } from \"../persistence/session-transcript.js\";\nimport { enqueueSessionWrite, invalidateSessionCache } from \"./agent-session.js\";\nimport type { CompactLocation } from \"./compact-session.js\";\n\nexport async function injectSessionTurn(opts: {\n store: SessionStore;\n loc: CompactLocation;\n sessionId: string;\n userText: string;\n assistantText: string;\n}): Promise<void> {\n await enqueueSessionWrite(opts.loc.cwd, opts.loc.agentId, async () => {\n const prior = await opts.store.readRecords(opts.loc.agentId);\n const transcript = SessionTranscript.fromRecords(prior, {\n cwd: opts.loc.cwd,\n sessionId: opts.sessionId,\n model: opts.loc.model ?? \"unknown\",\n });\n transcript.appendUserTurn(opts.userText);\n transcript.appendAssistantTurn({ text: opts.assistantText });\n await opts.store.appendRecords(opts.loc.agentId, transcript.records().slice(prior.length));\n invalidateSessionCache(opts.loc.cwd, opts.loc.agentId);\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/internal/session/inject-session.ts"],"names":[],"mappings":";;;;;;;;AAWA,eAAsB,kBAAkB,IAAA,EAMtB;AAChB,EAAA,MAAM,oBAAoB,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,CAAK,GAAA,CAAI,SAAS,YAAY;AACpE,IAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,MAAM,WAAA,CAAY,IAAA,CAAK,IAAI,OAAO,CAAA;AAC3D,IAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,WAAA,CAAY,KAAA,EAAO;AAAA,MACtD,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,KAAA,IAAS;AAAA,KAC1B,CAAA;AACD,IAAA,UAAA,CAAW,cAAA,CAAe,KAAK,QAAQ,CAAA;AACvC,IAAA,UAAA,CAAW,mBAAA,CAAoB,EAAE,IAAA,EAAM,IAAA,CAAK,eAAe,CAAA;AAC3D,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,UAAA,CAAW,OAAA,EAAQ,CAAE,KAAA,CAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AACzF,IAAA,sBAAA,CAAuB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,EACvD,CAAC,CAAA;AACH","file":"inject-session-7P4CZGDT.js","sourcesContent":["/**\n * M51 (agent-builder) — inject a SYNTHETIC user+assistant pair into a session's persisted transcript\n * WITHOUT running an LLM turn. This is the Codex review-exit mechanism (`exit_success.xml` appended to\n * the parent thread history so follow-ups like \"fix finding 2\" work): the pair chains onto the DAG\n * leaf (M50 pattern) and the in-memory cache is invalidated so the NEXT send re-hydrates with it.\n */\nimport type { SessionStore } from \"../../types/session-store.js\";\nimport { SessionTranscript } from \"../persistence/session-transcript.js\";\nimport { enqueueSessionWrite, invalidateSessionCache } from \"./agent-session.js\";\nimport type { CompactLocation } from \"./compact-session.js\";\n\nexport async function injectSessionTurn(opts: {\n store: SessionStore;\n loc: CompactLocation;\n sessionId: string;\n userText: string;\n assistantText: string;\n}): Promise<void> {\n await enqueueSessionWrite(opts.loc.cwd, opts.loc.agentId, async () => {\n const prior = await opts.store.readRecords(opts.loc.agentId);\n const transcript = SessionTranscript.fromRecords(prior, {\n cwd: opts.loc.cwd,\n sessionId: opts.sessionId,\n model: opts.loc.model ?? \"unknown\",\n });\n transcript.appendUserTurn(opts.userText);\n transcript.appendAssistantTurn({ text: opts.assistantText });\n await opts.store.appendRecords(opts.loc.agentId, transcript.records().slice(prior.length));\n invalidateSessionCache(opts.loc.cwd, opts.loc.agentId);\n });\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkDCXRHCZJ_cjs = require('./chunk-DCXRHCZJ.cjs');
3
+ var chunkVWI3CDEW_cjs = require('./chunk-VWI3CDEW.cjs');
4
4
  var chunkBURYFNOM_cjs = require('./chunk-BURYFNOM.cjs');
5
5
  require('./chunk-XYOHKCYG.cjs');
6
6
  var chunkZ2CUEBXV_cjs = require('./chunk-Z2CUEBXV.cjs');
@@ -9,7 +9,7 @@ require('./chunk-BCQ3E2ZG.cjs');
9
9
 
10
10
  // src/internal/session/inject-session.ts
11
11
  async function injectSessionTurn(opts) {
12
- await chunkDCXRHCZJ_cjs.enqueueSessionWrite(opts.loc.cwd, opts.loc.agentId, async () => {
12
+ await chunkVWI3CDEW_cjs.enqueueSessionWrite(opts.loc.cwd, opts.loc.agentId, async () => {
13
13
  const prior = await opts.store.readRecords(opts.loc.agentId);
14
14
  const transcript = chunkZ2CUEBXV_cjs.SessionTranscript.fromRecords(prior, {
15
15
  cwd: opts.loc.cwd,
@@ -24,5 +24,5 @@ async function injectSessionTurn(opts) {
24
24
  }
25
25
 
26
26
  exports.injectSessionTurn = injectSessionTurn;
27
- //# sourceMappingURL=inject-session-LFCYVSLJ.cjs.map
28
- //# sourceMappingURL=inject-session-LFCYVSLJ.cjs.map
27
+ //# sourceMappingURL=inject-session-CC4KBYF6.cjs.map
28
+ //# sourceMappingURL=inject-session-CC4KBYF6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal/session/inject-session.ts"],"names":["enqueueSessionWrite","SessionTranscript","invalidateSessionCache"],"mappings":";;;;;;;;;;AAWA,eAAsB,kBAAkB,IAAA,EAMtB;AAChB,EAAA,MAAMA,sCAAoB,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,CAAK,GAAA,CAAI,SAAS,YAAY;AACpE,IAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,MAAM,WAAA,CAAY,IAAA,CAAK,IAAI,OAAO,CAAA;AAC3D,IAAA,MAAM,UAAA,GAAaC,mCAAA,CAAkB,WAAA,CAAY,KAAA,EAAO;AAAA,MACtD,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,KAAA,IAAS;AAAA,KAC1B,CAAA;AACD,IAAA,UAAA,CAAW,cAAA,CAAe,KAAK,QAAQ,CAAA;AACvC,IAAA,UAAA,CAAW,mBAAA,CAAoB,EAAE,IAAA,EAAM,IAAA,CAAK,eAAe,CAAA;AAC3D,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,UAAA,CAAW,OAAA,EAAQ,CAAE,KAAA,CAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AACzF,IAAAC,wCAAA,CAAuB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,EACvD,CAAC,CAAA;AACH","file":"inject-session-LFCYVSLJ.cjs","sourcesContent":["/**\n * M51 (agent-builder) — inject a SYNTHETIC user+assistant pair into a session's persisted transcript\n * WITHOUT running an LLM turn. This is the Codex review-exit mechanism (`exit_success.xml` appended to\n * the parent thread history so follow-ups like \"fix finding 2\" work): the pair chains onto the DAG\n * leaf (M50 pattern) and the in-memory cache is invalidated so the NEXT send re-hydrates with it.\n */\nimport type { SessionStore } from \"../../types/session-store.js\";\nimport { SessionTranscript } from \"../persistence/session-transcript.js\";\nimport { enqueueSessionWrite, invalidateSessionCache } from \"./agent-session.js\";\nimport type { CompactLocation } from \"./compact-session.js\";\n\nexport async function injectSessionTurn(opts: {\n store: SessionStore;\n loc: CompactLocation;\n sessionId: string;\n userText: string;\n assistantText: string;\n}): Promise<void> {\n await enqueueSessionWrite(opts.loc.cwd, opts.loc.agentId, async () => {\n const prior = await opts.store.readRecords(opts.loc.agentId);\n const transcript = SessionTranscript.fromRecords(prior, {\n cwd: opts.loc.cwd,\n sessionId: opts.sessionId,\n model: opts.loc.model ?? \"unknown\",\n });\n transcript.appendUserTurn(opts.userText);\n transcript.appendAssistantTurn({ text: opts.assistantText });\n await opts.store.appendRecords(opts.loc.agentId, transcript.records().slice(prior.length));\n invalidateSessionCache(opts.loc.cwd, opts.loc.agentId);\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/internal/session/inject-session.ts"],"names":["enqueueSessionWrite","SessionTranscript","invalidateSessionCache"],"mappings":";;;;;;;;;;AAWA,eAAsB,kBAAkB,IAAA,EAMtB;AAChB,EAAA,MAAMA,sCAAoB,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,CAAK,GAAA,CAAI,SAAS,YAAY;AACpE,IAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,MAAM,WAAA,CAAY,IAAA,CAAK,IAAI,OAAO,CAAA;AAC3D,IAAA,MAAM,UAAA,GAAaC,mCAAA,CAAkB,WAAA,CAAY,KAAA,EAAO;AAAA,MACtD,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,KAAA,IAAS;AAAA,KAC1B,CAAA;AACD,IAAA,UAAA,CAAW,cAAA,CAAe,KAAK,QAAQ,CAAA;AACvC,IAAA,UAAA,CAAW,mBAAA,CAAoB,EAAE,IAAA,EAAM,IAAA,CAAK,eAAe,CAAA;AAC3D,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,aAAA,CAAc,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,UAAA,CAAW,OAAA,EAAQ,CAAE,KAAA,CAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AACzF,IAAAC,wCAAA,CAAuB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,EACvD,CAAC,CAAA;AACH","file":"inject-session-CC4KBYF6.cjs","sourcesContent":["/**\n * M51 (agent-builder) — inject a SYNTHETIC user+assistant pair into a session's persisted transcript\n * WITHOUT running an LLM turn. This is the Codex review-exit mechanism (`exit_success.xml` appended to\n * the parent thread history so follow-ups like \"fix finding 2\" work): the pair chains onto the DAG\n * leaf (M50 pattern) and the in-memory cache is invalidated so the NEXT send re-hydrates with it.\n */\nimport type { SessionStore } from \"../../types/session-store.js\";\nimport { SessionTranscript } from \"../persistence/session-transcript.js\";\nimport { enqueueSessionWrite, invalidateSessionCache } from \"./agent-session.js\";\nimport type { CompactLocation } from \"./compact-session.js\";\n\nexport async function injectSessionTurn(opts: {\n store: SessionStore;\n loc: CompactLocation;\n sessionId: string;\n userText: string;\n assistantText: string;\n}): Promise<void> {\n await enqueueSessionWrite(opts.loc.cwd, opts.loc.agentId, async () => {\n const prior = await opts.store.readRecords(opts.loc.agentId);\n const transcript = SessionTranscript.fromRecords(prior, {\n cwd: opts.loc.cwd,\n sessionId: opts.sessionId,\n model: opts.loc.model ?? \"unknown\",\n });\n transcript.appendUserTurn(opts.userText);\n transcript.appendAssistantTurn({ text: opts.assistantText });\n await opts.store.appendRecords(opts.loc.agentId, transcript.records().slice(prior.length));\n invalidateSessionCache(opts.loc.cwd, opts.loc.agentId);\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theokit/sdk",
3
- "version": "4.39.0",
3
+ "version": "4.39.1",
4
4
  "description": "TypeScript SDK for the Theo agent harness — same surface, local or cloud.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/usetheodev/theokit-sdk#readme",