@letta-ai/letta-code-sdk 0.1.8 → 0.1.9

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.
package/dist/index.js CHANGED
@@ -165,6 +165,7 @@ class SubprocessTransport {
165
165
  agentId;
166
166
  wireMessageCount = 0;
167
167
  lastMessageAt = 0;
168
+ stderrLines = [];
168
169
  constructor(options = {}) {
169
170
  this.options = options;
170
171
  }
@@ -204,6 +205,7 @@ class SubprocessTransport {
204
205
  const msg = data.toString().trim();
205
206
  if (msg) {
206
207
  console.error("[letta-code-sdk] CLI stderr:", msg);
208
+ this.stderrLines.push(msg);
207
209
  }
208
210
  });
209
211
  }
@@ -273,6 +275,10 @@ class SubprocessTransport {
273
275
  get isClosed() {
274
276
  return this.closed;
275
277
  }
278
+ getStderr() {
279
+ return this.stderrLines.join(`
280
+ `);
281
+ }
276
282
  handleMessage(msg) {
277
283
  this.wireMessageCount++;
278
284
  this.lastMessageAt = Date.now();
@@ -367,6 +373,8 @@ class Session {
367
373
  pumpPromise = null;
368
374
  pumpClosed = false;
369
375
  droppedStreamMessages = 0;
376
+ sendGeneration = 0;
377
+ lastCompletedRunIds = new Set;
370
378
  controlResponseWaiters = new Map;
371
379
  constructor(options = {}) {
372
380
  this.options = options;
@@ -433,8 +441,12 @@ class Session {
433
441
  };
434
442
  }
435
443
  }
436
- sessionLog("init", "ERROR: transport closed before init message received");
437
- throw new Error("Failed to initialize session - no init message received");
444
+ const stderr = this.transport.getStderr();
445
+ const detail = stderr ? `
446
+ CLI stderr:
447
+ ${stderr}` : "";
448
+ sessionLog("init", `ERROR: transport closed before init message received${detail}`);
449
+ throw new Error(`Failed to initialize session - no init message received${detail}`);
438
450
  }
439
451
  async send(message) {
440
452
  if (!this.initialized) {
@@ -451,29 +463,50 @@ class Session {
451
463
  type: "user",
452
464
  message: { role: "user", content: message }
453
465
  });
454
- sessionLog("send", "message written to transport");
466
+ this.sendGeneration++;
467
+ sessionLog("send", `message written to transport (generation=${this.sendGeneration})`);
455
468
  }
456
469
  async* stream() {
457
470
  const streamStart = Date.now();
471
+ const minGeneration = this.sendGeneration;
458
472
  let yieldCount = 0;
473
+ let staleCount = 0;
474
+ let staleRunIdCount = 0;
459
475
  let gotResult = false;
476
+ const currentStreamRunIds = new Set;
477
+ const staleRunIds = new Set(this.lastCompletedRunIds);
460
478
  this.startBackgroundPump();
461
- sessionLog("stream", `starting stream (agent=${this._agentId}, conversation=${this._conversationId})`);
479
+ sessionLog("stream", `starting stream (agent=${this._agentId}, conversation=${this._conversationId}, generation=${minGeneration})`);
462
480
  while (true) {
463
- const sdkMsg = await this.nextBufferedMessage();
464
- if (!sdkMsg) {
481
+ const bufferedMsg = await this.nextBufferedMessage();
482
+ if (!bufferedMsg) {
465
483
  break;
466
484
  }
485
+ if (bufferedMsg.generation < minGeneration) {
486
+ staleCount++;
487
+ sessionLog("stream", `discarding stale message: type=${bufferedMsg.message.type} generation=${bufferedMsg.generation} (current=${minGeneration})`);
488
+ continue;
489
+ }
490
+ if (bufferedMsg.runId && staleRunIds.has(bufferedMsg.runId)) {
491
+ staleRunIdCount++;
492
+ sessionLog("stream", `discarding stale message: type=${bufferedMsg.message.type} runId=${bufferedMsg.runId}`);
493
+ continue;
494
+ }
495
+ if (bufferedMsg.runId) {
496
+ currentStreamRunIds.add(bufferedMsg.runId);
497
+ }
498
+ const sdkMsg = bufferedMsg.message;
467
499
  yieldCount++;
468
500
  sessionLog("stream", `yield #${yieldCount}: type=${sdkMsg.type}${sdkMsg.type === "result" ? ` success=${sdkMsg.success} error=${sdkMsg.error || "none"}` : ""}`);
469
501
  yield sdkMsg;
470
502
  if (sdkMsg.type === "result") {
471
503
  gotResult = true;
504
+ this.updateCompletedRunIds(sdkMsg.runIds, currentStreamRunIds);
472
505
  break;
473
506
  }
474
507
  }
475
508
  const elapsed = Date.now() - streamStart;
476
- sessionLog("stream", `stream ended: duration=${elapsed}ms yielded=${yieldCount} dropped=${this.droppedStreamMessages} gotResult=${gotResult}`);
509
+ sessionLog("stream", `stream ended: duration=${elapsed}ms yielded=${yieldCount} staleFiltered=${staleCount} staleRunIdFiltered=${staleRunIdCount} dropped=${this.droppedStreamMessages} gotResult=${gotResult}`);
477
510
  if (!gotResult) {
478
511
  sessionLog("stream", "WARNING: stream ended WITHOUT a result message -- transport may have closed unexpectedly");
479
512
  }
@@ -566,9 +599,14 @@ class Session {
566
599
  return false;
567
600
  }
568
601
  enqueueStreamMessage(msg) {
602
+ const bufferedMsg = {
603
+ message: msg,
604
+ generation: this.sendGeneration,
605
+ runId: this.getMessageRunId(msg)
606
+ };
569
607
  if (this.streamResolvers.length > 0) {
570
608
  const resolve = this.streamResolvers.shift();
571
- resolve(msg);
609
+ resolve(bufferedMsg);
572
610
  return;
573
611
  }
574
612
  if (this.streamQueue.length >= MAX_BUFFERED_STREAM_MESSAGES) {
@@ -576,7 +614,7 @@ class Session {
576
614
  this.droppedStreamMessages++;
577
615
  sessionLog("pump", `stream queue overflow: dropped oldest message (total_dropped=${this.droppedStreamMessages}, max=${MAX_BUFFERED_STREAM_MESSAGES})`);
578
616
  }
579
- this.streamQueue.push(msg);
617
+ this.streamQueue.push(bufferedMsg);
580
618
  }
581
619
  async nextBufferedMessage() {
582
620
  if (this.streamQueue.length > 0) {
@@ -599,6 +637,35 @@ class Session {
599
637
  }
600
638
  this.controlResponseWaiters.clear();
601
639
  }
640
+ getMessageRunId(msg) {
641
+ switch (msg.type) {
642
+ case "assistant":
643
+ case "tool_call":
644
+ case "tool_result":
645
+ case "reasoning":
646
+ case "error":
647
+ case "retry":
648
+ return msg.runId;
649
+ default:
650
+ return;
651
+ }
652
+ }
653
+ updateCompletedRunIds(resultRunIds, streamedRunIds) {
654
+ const nextRunIds = new Set;
655
+ if (Array.isArray(resultRunIds)) {
656
+ for (const runId of resultRunIds) {
657
+ if (runId) {
658
+ nextRunIds.add(runId);
659
+ }
660
+ }
661
+ }
662
+ for (const runId of streamedRunIds) {
663
+ if (runId) {
664
+ nextRunIds.add(runId);
665
+ }
666
+ }
667
+ this.lastCompletedRunIds = nextRunIds;
668
+ }
602
669
  async registerExternalTools() {
603
670
  const toolDefs = Array.from(this.externalTools.values()).map((tool) => ({
604
671
  name: tool.name,
@@ -863,11 +930,13 @@ class Session {
863
930
  }
864
931
  if (wireMsg.type === "message" && "message_type" in wireMsg) {
865
932
  const msg = wireMsg;
933
+ const runId = msg.run_id || undefined;
866
934
  if (msg.message_type === "assistant_message" && msg.content) {
867
935
  return {
868
936
  type: "assistant",
869
937
  content: msg.content,
870
- uuid: msg.uuid
938
+ uuid: msg.uuid,
939
+ runId
871
940
  };
872
941
  }
873
942
  if (msg.message_type === "tool_call_message" || msg.message_type === "approval_request_message") {
@@ -892,7 +961,8 @@ class Session {
892
961
  toolName,
893
962
  toolInput,
894
963
  rawArguments: toolArgs || undefined,
895
- uuid: msg.uuid
964
+ uuid: msg.uuid,
965
+ runId
896
966
  };
897
967
  }
898
968
  }
@@ -902,14 +972,16 @@ class Session {
902
972
  toolCallId: msg.tool_call_id,
903
973
  content: msg.tool_return || "",
904
974
  isError: msg.status === "error",
905
- uuid: msg.uuid
975
+ uuid: msg.uuid,
976
+ runId
906
977
  };
907
978
  }
908
979
  if (msg.message_type === "reasoning_message" && msg.reasoning) {
909
980
  return {
910
981
  type: "reasoning",
911
982
  content: msg.reasoning,
912
- uuid: msg.uuid
983
+ uuid: msg.uuid,
984
+ runId
913
985
  };
914
986
  }
915
987
  }
@@ -924,6 +996,7 @@ class Session {
924
996
  }
925
997
  if (wireMsg.type === "result") {
926
998
  const msg = wireMsg;
999
+ const runIds = Array.isArray(msg.run_ids) ? msg.run_ids.filter((id) => typeof id === "string") : undefined;
927
1000
  return {
928
1001
  type: "result",
929
1002
  success: msg.subtype === "success",
@@ -932,7 +1005,8 @@ class Session {
932
1005
  stopReason: msg.stop_reason,
933
1006
  durationMs: msg.duration_ms,
934
1007
  totalCostUsd: msg.total_cost_usd,
935
- conversationId: msg.conversation_id
1008
+ conversationId: msg.conversation_id,
1009
+ runIds
936
1010
  };
937
1011
  }
938
1012
  if (wireMsg.type === "error") {
@@ -1318,4 +1392,4 @@ export {
1318
1392
  Session
1319
1393
  };
1320
1394
 
1321
- //# debugId=965FE4FB5FC3709464756E2164756E21
1395
+ //# debugId=52CE2385155AE64C64756E2164756E21
package/dist/index.js.map CHANGED
@@ -2,15 +2,15 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/transport.ts", "../src/interactiveToolPolicy.ts", "../src/session.ts", "../src/validation.ts", "../src/stream-events.ts", "../src/tool-helpers.ts", "../src/index.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * SubprocessTransport\n *\n * Spawns the Letta Code CLI and communicates via stdin/stdout JSON streams.\n */\n\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { createInterface, type Interface } from \"node:readline\";\nimport type { InternalSessionOptions, WireMessage } from \"./types.js\";\n\n// All logging gated behind DEBUG_SDK env var\nfunction sdkLog(tag: string, ...args: unknown[]) {\n if (process.env.DEBUG_SDK) console.error(`[SDK-Transport] [${tag}]`, ...args);\n}\n\n/**\n * Build the CLI argument array for a given set of session options.\n *\n * Exported as a pure function for testing — this IS the real production code\n * path. SubprocessTransport.buildArgs() delegates here.\n */\nexport function buildCliArgs(options: InternalSessionOptions): string[] {\n const args: string[] = [\n \"--output-format\",\n \"stream-json\",\n \"--input-format\",\n \"stream-json\",\n ];\n\n // Conversation and agent handling\n if (options.conversationId) {\n args.push(\"--conversation\", options.conversationId);\n } else if (options.agentId) {\n args.push(\"--agent\", options.agentId);\n if (options.newConversation) {\n args.push(\"--new\");\n } else if (options.defaultConversation) {\n args.push(\"--default\");\n }\n } else if (options.createOnly) {\n args.push(\"--new-agent\");\n } else if (options.newConversation) {\n args.push(\"--new\");\n }\n\n // Model\n if (options.model) {\n args.push(\"-m\", options.model);\n }\n\n // Partial message streaming\n if (options.includePartialMessages) {\n args.push(\"--include-partial-messages\");\n }\n\n // Embedding model\n if (options.embedding) {\n args.push(\"--embedding\", options.embedding);\n }\n\n // System prompt configuration\n if (options.systemPrompt !== undefined) {\n if (typeof options.systemPrompt === \"string\") {\n const validPresets = [\n \"default\",\n \"letta-claude\",\n \"letta-codex\",\n \"letta-gemini\",\n \"claude\",\n \"codex\",\n \"gemini\",\n ];\n if (validPresets.includes(options.systemPrompt)) {\n args.push(\"--system\", options.systemPrompt);\n } else {\n args.push(\"--system-custom\", options.systemPrompt);\n }\n } else {\n args.push(\"--system\", options.systemPrompt.preset);\n if (options.systemPrompt.append) {\n args.push(\"--system-append\", options.systemPrompt.append);\n }\n }\n }\n\n // Memory blocks (only for new agents)\n if (options.memory !== undefined && !options.agentId) {\n if (options.memory.length === 0) {\n args.push(\"--init-blocks\", \"\");\n } else {\n const presetNames: string[] = [];\n const memoryBlocksJson: Array<\n | { label: string; value: string }\n | { blockId: string }\n > = [];\n\n for (const item of options.memory) {\n if (typeof item === \"string\") {\n presetNames.push(item);\n } else if (\"blockId\" in item) {\n memoryBlocksJson.push(item as { blockId: string });\n } else {\n memoryBlocksJson.push(item as { label: string; value: string });\n }\n }\n\n if (memoryBlocksJson.length > 0) {\n args.push(\"--memory-blocks\", JSON.stringify(memoryBlocksJson));\n if (presetNames.length > 0) {\n console.warn(\n \"[letta-code-sdk] Using custom memory blocks. \" +\n `Preset blocks are ignored when custom blocks are provided: ${presetNames.join(\", \")}`\n );\n }\n } else if (presetNames.length > 0) {\n args.push(\"--init-blocks\", presetNames.join(\",\"));\n }\n }\n }\n\n // Convenience props for block values (only for new agents)\n if (!options.agentId) {\n if (options.persona !== undefined) {\n args.push(\"--block-value\", `persona=${options.persona}`);\n }\n if (options.human !== undefined) {\n args.push(\"--block-value\", `human=${options.human}`);\n }\n }\n\n // Permission mode\n if (options.permissionMode === \"bypassPermissions\") {\n args.push(\"--yolo\");\n } else if (options.permissionMode && options.permissionMode !== \"default\") {\n args.push(\"--permission-mode\", options.permissionMode);\n }\n\n // Allowed / disallowed tools\n if (options.allowedTools) {\n args.push(\"--allowedTools\", options.allowedTools.join(\",\"));\n }\n if (options.disallowedTools) {\n args.push(\"--disallowedTools\", options.disallowedTools.join(\",\"));\n }\n\n // Tags\n if (options.tags && options.tags.length > 0) {\n args.push(\"--tags\", options.tags.join(\",\"));\n }\n\n // Memory filesystem enable/disable\n if (options.memfs === true) {\n args.push(\"--memfs\");\n } else if (options.memfs === false) {\n args.push(\"--no-memfs\");\n }\n\n // Memory filesystem startup policy\n if (options.memfsStartup !== undefined) {\n args.push(\"--memfs-startup\", options.memfsStartup);\n }\n\n // Skills sources\n if (options.skillSources !== undefined) {\n const sources = [...new Set(options.skillSources)];\n if (sources.length === 0) {\n args.push(\"--no-skills\");\n } else {\n args.push(\"--skill-sources\", sources.join(\",\"));\n }\n }\n\n // Session context reminder toggle\n if (options.systemInfoReminder === false) {\n args.push(\"--no-system-info-reminder\");\n }\n\n // Sleeptime / reflection settings\n if (options.sleeptime?.trigger !== undefined) {\n args.push(\"--reflection-trigger\", options.sleeptime.trigger);\n }\n if (options.sleeptime?.behavior !== undefined) {\n args.push(\"--reflection-behavior\", options.sleeptime.behavior);\n }\n if (options.sleeptime?.stepCount !== undefined) {\n args.push(\"--reflection-step-count\", String(options.sleeptime.stepCount));\n }\n\n return args;\n}\n\nexport class SubprocessTransport {\n private process: ChildProcess | null = null;\n private stdout: Interface | null = null;\n private messageQueue: WireMessage[] = [];\n private messageResolvers: Array<(msg: WireMessage | null) => void> = [];\n private closed = false;\n private agentId?: string;\n private wireMessageCount = 0;\n private lastMessageAt = 0;\n\n constructor(\n private options: InternalSessionOptions = {}\n ) {}\n\n /**\n * Start the CLI subprocess\n */\n async connect(): Promise<void> {\n const args = this.buildArgs();\n\n // Find the CLI - use the installed letta-code package\n const cliPath = await this.findCli();\n sdkLog(\"connect\", `CLI: ${cliPath}`);\n sdkLog(\"connect\", `args: ${args.join(\" \")}`);\n sdkLog(\"connect\", `cwd: ${this.options.cwd || process.cwd()}`);\n sdkLog(\"connect\", `permissionMode: ${this.options.permissionMode || \"default\"}`);\n\n this.process = spawn(\"node\", [cliPath, ...args], {\n cwd: this.options.cwd || process.cwd(),\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n env: { ...process.env },\n });\n\n const pid = this.process.pid;\n sdkLog(\"connect\", `CLI process spawned, pid=${pid}`);\n\n if (!this.process.stdout || !this.process.stdin) {\n throw new Error(\"Failed to create subprocess pipes\");\n }\n\n // Set up stdout reading\n this.stdout = createInterface({\n input: this.process.stdout,\n crlfDelay: Infinity,\n });\n\n this.stdout.on(\"line\", (line) => {\n if (!line.trim()) return;\n try {\n const msg = JSON.parse(line) as WireMessage;\n this.handleMessage(msg);\n } catch {\n // Non-JSON line from CLI stdout - could be important debug info\n sdkLog(\"stdout\", `[non-JSON] ${line.slice(0, 500)}`);\n }\n });\n\n // Log stderr for debugging (CLI errors, auth failures, etc.)\n if (this.process.stderr) {\n this.process.stderr.on(\"data\", (data: Buffer) => {\n const msg = data.toString().trim();\n if (msg) {\n console.error(\"[letta-code-sdk] CLI stderr:\", msg);\n }\n });\n }\n\n // Handle process exit\n //\n // BUG FIX: When the CLI subprocess exits while read() has a pending\n // resolver waiting for the next message, that resolver would never fire.\n // The messages() async generator would be stuck in `await this.read()`\n // forever, causing session.stream() to hang, which deadlocks the\n // caller's processing mutex. Resolving pending readers with null on\n // process exit lets messages() break out of its loop cleanly.\n this.process.on(\"close\", (code, signal) => {\n if (code !== 0 && code !== null) {\n console.error(`[letta-code-sdk] CLI process exited with code ${code}`);\n }\n sdkLog(\"close\", `CLI process exited: pid=${pid} code=${code} signal=${signal} wireMessages=${this.wireMessageCount} msSinceLastMsg=${this.lastMessageAt ? Date.now() - this.lastMessageAt : 0} pendingResolvers=${this.messageResolvers.length} queueLen=${this.messageQueue.length}`);\n this.closed = true;\n // Flush pending readers so they don't hang forever (see comment above)\n for (const resolve of this.messageResolvers) {\n resolve(null);\n }\n this.messageResolvers = [];\n });\n\n this.process.on(\"error\", (err) => {\n console.error(\"[letta-code-sdk] CLI process error:\", err);\n this.closed = true;\n });\n }\n\n /**\n * Send a message to the CLI via stdin\n */\n async write(data: object): Promise<void> {\n if (!this.process?.stdin || this.closed) {\n const err = new Error(`Transport not connected (closed=${this.closed}, pid=${this.process?.pid}, stdin=${!!this.process?.stdin})`);\n sdkLog(\"write\", err.message);\n throw err;\n }\n const payload = data as Record<string, unknown>;\n sdkLog(\"write\", `type=${payload.type} subtype=${(payload.request as Record<string, unknown>)?.subtype || (payload.response as Record<string, unknown>)?.subtype || \"N/A\"}`);\n this.process.stdin.write(JSON.stringify(data) + \"\\n\");\n }\n\n /**\n * Read the next message from the CLI\n */\n async read(): Promise<WireMessage | null> {\n // Return queued message if available\n if (this.messageQueue.length > 0) {\n return this.messageQueue.shift()!;\n }\n\n // If closed, no more messages\n if (this.closed) {\n sdkLog(\"read\", `returning null (closed), total wireMessages=${this.wireMessageCount}`);\n return null;\n }\n\n // Wait for next message\n sdkLog(\"read\", `waiting for next message (resolvers=${this.messageResolvers.length + 1}, queue=${this.messageQueue.length})`);\n return new Promise((resolve) => {\n this.messageResolvers.push(resolve);\n });\n }\n\n /**\n * Async iterator for messages\n */\n async *messages(): AsyncGenerator<WireMessage> {\n while (true) {\n const msg = await this.read();\n if (msg === null) {\n sdkLog(\"messages\", `iterator ending (closed=${this.closed}, wireMessages=${this.wireMessageCount})`);\n break;\n }\n yield msg;\n }\n }\n\n /**\n * Close the transport\n */\n close(): void {\n sdkLog(\"close\", `explicit close called (wireMessages=${this.wireMessageCount}, pendingResolvers=${this.messageResolvers.length}, pid=${this.process?.pid})`);\n if (this.process) {\n this.process.stdin?.end();\n this.process.kill();\n this.process = null;\n }\n this.closed = true;\n\n // Resolve any pending readers with null\n for (const resolve of this.messageResolvers) {\n resolve(null);\n }\n this.messageResolvers = [];\n }\n\n get isClosed(): boolean {\n return this.closed;\n }\n\n private handleMessage(msg: WireMessage): void {\n this.wireMessageCount++;\n this.lastMessageAt = Date.now();\n\n // Compact log of every wire message for traceability\n const wirePayload = msg as unknown as Record<string, unknown>;\n const msgType = wirePayload.message_type || wirePayload.subtype || \"\";\n sdkLog(\"wire\", `#${this.wireMessageCount} type=${msg.type} ${msgType ? `msg_type=${msgType}` : \"\"} resolvers=${this.messageResolvers.length} queue=${this.messageQueue.length}`);\n\n // Always log critical message types (result, errors, approval)\n if (msg.type === \"result\") {\n const result = wirePayload as unknown as { subtype?: string; result?: string; duration_ms?: number; stop_reason?: string };\n sdkLog(\"wire\", `RESULT: subtype=${result.subtype} stop_reason=${result.stop_reason || \"N/A\"} duration=${result.duration_ms}ms resultLen=${result.result?.length || 0}`);\n }\n\n // Track agent_id from init message\n if (msg.type === \"system\" && \"subtype\" in msg && msg.subtype === \"init\") {\n this.agentId = (msg as unknown as { agent_id: string }).agent_id;\n sdkLog(\"wire\", `INIT: agent_id=${this.agentId}`);\n }\n\n // Log control requests (approval flow)\n if (msg.type === \"control_request\") {\n const req = wirePayload as unknown as { request_id?: string; request?: { subtype?: string; tool_name?: string } };\n sdkLog(\"wire\", `CONTROL_REQUEST: id=${req.request_id} subtype=${req.request?.subtype} tool=${req.request?.tool_name || \"N/A\"}`);\n }\n\n // If someone is waiting for a message, give it to them\n if (this.messageResolvers.length > 0) {\n const resolve = this.messageResolvers.shift()!;\n resolve(msg);\n } else {\n // Otherwise queue it\n this.messageQueue.push(msg);\n }\n }\n\n private buildArgs(): string[] {\n return buildCliArgs(this.options);\n }\n\n\n\n private async findCli(): Promise<string> {\n // Try multiple resolution strategies\n const { existsSync } = await import(\"node:fs\");\n const { dirname, join } = await import(\"node:path\");\n const { fileURLToPath } = await import(\"node:url\");\n\n // Strategy 1: Check LETTA_CLI_PATH env var\n if (process.env.LETTA_CLI_PATH && existsSync(process.env.LETTA_CLI_PATH)) {\n return process.env.LETTA_CLI_PATH;\n }\n\n // Strategy 2: Try to resolve from node_modules\n // Note: resolve the package main export (not /letta.js subpath) because\n // the package.json \"exports\" field doesn't expose the subpath directly.\n try {\n const { createRequire } = await import(\"node:module\");\n const require = createRequire(import.meta.url);\n const resolved = require.resolve(\"@letta-ai/letta-code\");\n if (existsSync(resolved)) {\n return resolved;\n }\n } catch {\n // Continue to next strategy\n }\n\n // Strategy 3: Check relative to this file (for local file: deps)\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const localPaths = [\n join(__dirname, \"../../@letta-ai/letta-code/letta.js\"),\n join(__dirname, \"../../../letta-code-prod/letta.js\"),\n join(__dirname, \"../../../letta-code/letta.js\"),\n ];\n\n for (const p of localPaths) {\n if (existsSync(p)) {\n return p;\n }\n }\n\n throw new Error(\n \"Letta Code CLI not found. Set LETTA_CLI_PATH or install @letta-ai/letta-code.\"\n );\n }\n}\n",
5
+ "/**\n * SubprocessTransport\n *\n * Spawns the Letta Code CLI and communicates via stdin/stdout JSON streams.\n */\n\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { createInterface, type Interface } from \"node:readline\";\nimport type { InternalSessionOptions, WireMessage } from \"./types.js\";\n\n// All logging gated behind DEBUG_SDK env var\nfunction sdkLog(tag: string, ...args: unknown[]) {\n if (process.env.DEBUG_SDK) console.error(`[SDK-Transport] [${tag}]`, ...args);\n}\n\n/**\n * Build the CLI argument array for a given set of session options.\n *\n * Exported as a pure function for testing — this IS the real production code\n * path. SubprocessTransport.buildArgs() delegates here.\n */\nexport function buildCliArgs(options: InternalSessionOptions): string[] {\n const args: string[] = [\n \"--output-format\",\n \"stream-json\",\n \"--input-format\",\n \"stream-json\",\n ];\n\n // Conversation and agent handling\n if (options.conversationId) {\n args.push(\"--conversation\", options.conversationId);\n } else if (options.agentId) {\n args.push(\"--agent\", options.agentId);\n if (options.newConversation) {\n args.push(\"--new\");\n } else if (options.defaultConversation) {\n args.push(\"--default\");\n }\n } else if (options.createOnly) {\n args.push(\"--new-agent\");\n } else if (options.newConversation) {\n args.push(\"--new\");\n }\n\n // Model\n if (options.model) {\n args.push(\"-m\", options.model);\n }\n\n // Partial message streaming\n if (options.includePartialMessages) {\n args.push(\"--include-partial-messages\");\n }\n\n // Embedding model\n if (options.embedding) {\n args.push(\"--embedding\", options.embedding);\n }\n\n // System prompt configuration\n if (options.systemPrompt !== undefined) {\n if (typeof options.systemPrompt === \"string\") {\n const validPresets = [\n \"default\",\n \"letta-claude\",\n \"letta-codex\",\n \"letta-gemini\",\n \"claude\",\n \"codex\",\n \"gemini\",\n ];\n if (validPresets.includes(options.systemPrompt)) {\n args.push(\"--system\", options.systemPrompt);\n } else {\n args.push(\"--system-custom\", options.systemPrompt);\n }\n } else {\n args.push(\"--system\", options.systemPrompt.preset);\n if (options.systemPrompt.append) {\n args.push(\"--system-append\", options.systemPrompt.append);\n }\n }\n }\n\n // Memory blocks (only for new agents)\n if (options.memory !== undefined && !options.agentId) {\n if (options.memory.length === 0) {\n args.push(\"--init-blocks\", \"\");\n } else {\n const presetNames: string[] = [];\n const memoryBlocksJson: Array<\n | { label: string; value: string }\n | { blockId: string }\n > = [];\n\n for (const item of options.memory) {\n if (typeof item === \"string\") {\n presetNames.push(item);\n } else if (\"blockId\" in item) {\n memoryBlocksJson.push(item as { blockId: string });\n } else {\n memoryBlocksJson.push(item as { label: string; value: string });\n }\n }\n\n if (memoryBlocksJson.length > 0) {\n args.push(\"--memory-blocks\", JSON.stringify(memoryBlocksJson));\n if (presetNames.length > 0) {\n console.warn(\n \"[letta-code-sdk] Using custom memory blocks. \" +\n `Preset blocks are ignored when custom blocks are provided: ${presetNames.join(\", \")}`\n );\n }\n } else if (presetNames.length > 0) {\n args.push(\"--init-blocks\", presetNames.join(\",\"));\n }\n }\n }\n\n // Convenience props for block values (only for new agents)\n if (!options.agentId) {\n if (options.persona !== undefined) {\n args.push(\"--block-value\", `persona=${options.persona}`);\n }\n if (options.human !== undefined) {\n args.push(\"--block-value\", `human=${options.human}`);\n }\n }\n\n // Permission mode\n if (options.permissionMode === \"bypassPermissions\") {\n args.push(\"--yolo\");\n } else if (options.permissionMode && options.permissionMode !== \"default\") {\n args.push(\"--permission-mode\", options.permissionMode);\n }\n\n // Allowed / disallowed tools\n if (options.allowedTools) {\n args.push(\"--allowedTools\", options.allowedTools.join(\",\"));\n }\n if (options.disallowedTools) {\n args.push(\"--disallowedTools\", options.disallowedTools.join(\",\"));\n }\n\n // Tags\n if (options.tags && options.tags.length > 0) {\n args.push(\"--tags\", options.tags.join(\",\"));\n }\n\n // Memory filesystem enable/disable\n if (options.memfs === true) {\n args.push(\"--memfs\");\n } else if (options.memfs === false) {\n args.push(\"--no-memfs\");\n }\n\n // Memory filesystem startup policy\n if (options.memfsStartup !== undefined) {\n args.push(\"--memfs-startup\", options.memfsStartup);\n }\n\n // Skills sources\n if (options.skillSources !== undefined) {\n const sources = [...new Set(options.skillSources)];\n if (sources.length === 0) {\n args.push(\"--no-skills\");\n } else {\n args.push(\"--skill-sources\", sources.join(\",\"));\n }\n }\n\n // Session context reminder toggle\n if (options.systemInfoReminder === false) {\n args.push(\"--no-system-info-reminder\");\n }\n\n // Sleeptime / reflection settings\n if (options.sleeptime?.trigger !== undefined) {\n args.push(\"--reflection-trigger\", options.sleeptime.trigger);\n }\n if (options.sleeptime?.behavior !== undefined) {\n args.push(\"--reflection-behavior\", options.sleeptime.behavior);\n }\n if (options.sleeptime?.stepCount !== undefined) {\n args.push(\"--reflection-step-count\", String(options.sleeptime.stepCount));\n }\n\n return args;\n}\n\nexport class SubprocessTransport {\n private process: ChildProcess | null = null;\n private stdout: Interface | null = null;\n private messageQueue: WireMessage[] = [];\n private messageResolvers: Array<(msg: WireMessage | null) => void> = [];\n private closed = false;\n private agentId?: string;\n private wireMessageCount = 0;\n private lastMessageAt = 0;\n private stderrLines: string[] = [];\n\n constructor(\n private options: InternalSessionOptions = {}\n ) {}\n\n /**\n * Start the CLI subprocess\n */\n async connect(): Promise<void> {\n const args = this.buildArgs();\n\n // Find the CLI - use the installed letta-code package\n const cliPath = await this.findCli();\n sdkLog(\"connect\", `CLI: ${cliPath}`);\n sdkLog(\"connect\", `args: ${args.join(\" \")}`);\n sdkLog(\"connect\", `cwd: ${this.options.cwd || process.cwd()}`);\n sdkLog(\"connect\", `permissionMode: ${this.options.permissionMode || \"default\"}`);\n\n this.process = spawn(\"node\", [cliPath, ...args], {\n cwd: this.options.cwd || process.cwd(),\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n env: { ...process.env },\n });\n\n const pid = this.process.pid;\n sdkLog(\"connect\", `CLI process spawned, pid=${pid}`);\n\n if (!this.process.stdout || !this.process.stdin) {\n throw new Error(\"Failed to create subprocess pipes\");\n }\n\n // Set up stdout reading\n this.stdout = createInterface({\n input: this.process.stdout,\n crlfDelay: Infinity,\n });\n\n this.stdout.on(\"line\", (line) => {\n if (!line.trim()) return;\n try {\n const msg = JSON.parse(line) as WireMessage;\n this.handleMessage(msg);\n } catch {\n // Non-JSON line from CLI stdout - could be important debug info\n sdkLog(\"stdout\", `[non-JSON] ${line.slice(0, 500)}`);\n }\n });\n\n // Log stderr for debugging (CLI errors, auth failures, etc.)\n // Also buffer lines so session.initialize() can include them in errors.\n if (this.process.stderr) {\n this.process.stderr.on(\"data\", (data: Buffer) => {\n const msg = data.toString().trim();\n if (msg) {\n console.error(\"[letta-code-sdk] CLI stderr:\", msg);\n this.stderrLines.push(msg);\n }\n });\n }\n\n // Handle process exit\n //\n // BUG FIX: When the CLI subprocess exits while read() has a pending\n // resolver waiting for the next message, that resolver would never fire.\n // The messages() async generator would be stuck in `await this.read()`\n // forever, causing session.stream() to hang, which deadlocks the\n // caller's processing mutex. Resolving pending readers with null on\n // process exit lets messages() break out of its loop cleanly.\n this.process.on(\"close\", (code, signal) => {\n if (code !== 0 && code !== null) {\n console.error(`[letta-code-sdk] CLI process exited with code ${code}`);\n }\n sdkLog(\"close\", `CLI process exited: pid=${pid} code=${code} signal=${signal} wireMessages=${this.wireMessageCount} msSinceLastMsg=${this.lastMessageAt ? Date.now() - this.lastMessageAt : 0} pendingResolvers=${this.messageResolvers.length} queueLen=${this.messageQueue.length}`);\n this.closed = true;\n // Flush pending readers so they don't hang forever (see comment above)\n for (const resolve of this.messageResolvers) {\n resolve(null);\n }\n this.messageResolvers = [];\n });\n\n this.process.on(\"error\", (err) => {\n console.error(\"[letta-code-sdk] CLI process error:\", err);\n this.closed = true;\n });\n }\n\n /**\n * Send a message to the CLI via stdin\n */\n async write(data: object): Promise<void> {\n if (!this.process?.stdin || this.closed) {\n const err = new Error(`Transport not connected (closed=${this.closed}, pid=${this.process?.pid}, stdin=${!!this.process?.stdin})`);\n sdkLog(\"write\", err.message);\n throw err;\n }\n const payload = data as Record<string, unknown>;\n sdkLog(\"write\", `type=${payload.type} subtype=${(payload.request as Record<string, unknown>)?.subtype || (payload.response as Record<string, unknown>)?.subtype || \"N/A\"}`);\n this.process.stdin.write(JSON.stringify(data) + \"\\n\");\n }\n\n /**\n * Read the next message from the CLI\n */\n async read(): Promise<WireMessage | null> {\n // Return queued message if available\n if (this.messageQueue.length > 0) {\n return this.messageQueue.shift()!;\n }\n\n // If closed, no more messages\n if (this.closed) {\n sdkLog(\"read\", `returning null (closed), total wireMessages=${this.wireMessageCount}`);\n return null;\n }\n\n // Wait for next message\n sdkLog(\"read\", `waiting for next message (resolvers=${this.messageResolvers.length + 1}, queue=${this.messageQueue.length})`);\n return new Promise((resolve) => {\n this.messageResolvers.push(resolve);\n });\n }\n\n /**\n * Async iterator for messages\n */\n async *messages(): AsyncGenerator<WireMessage> {\n while (true) {\n const msg = await this.read();\n if (msg === null) {\n sdkLog(\"messages\", `iterator ending (closed=${this.closed}, wireMessages=${this.wireMessageCount})`);\n break;\n }\n yield msg;\n }\n }\n\n /**\n * Close the transport\n */\n close(): void {\n sdkLog(\"close\", `explicit close called (wireMessages=${this.wireMessageCount}, pendingResolvers=${this.messageResolvers.length}, pid=${this.process?.pid})`);\n if (this.process) {\n this.process.stdin?.end();\n this.process.kill();\n this.process = null;\n }\n this.closed = true;\n\n // Resolve any pending readers with null\n for (const resolve of this.messageResolvers) {\n resolve(null);\n }\n this.messageResolvers = [];\n }\n\n get isClosed(): boolean {\n return this.closed;\n }\n\n /** Return buffered stderr output from the CLI subprocess. */\n getStderr(): string {\n return this.stderrLines.join(\"\\n\");\n }\n\n private handleMessage(msg: WireMessage): void {\n this.wireMessageCount++;\n this.lastMessageAt = Date.now();\n\n // Compact log of every wire message for traceability\n const wirePayload = msg as unknown as Record<string, unknown>;\n const msgType = wirePayload.message_type || wirePayload.subtype || \"\";\n sdkLog(\"wire\", `#${this.wireMessageCount} type=${msg.type} ${msgType ? `msg_type=${msgType}` : \"\"} resolvers=${this.messageResolvers.length} queue=${this.messageQueue.length}`);\n\n // Always log critical message types (result, errors, approval)\n if (msg.type === \"result\") {\n const result = wirePayload as unknown as { subtype?: string; result?: string; duration_ms?: number; stop_reason?: string };\n sdkLog(\"wire\", `RESULT: subtype=${result.subtype} stop_reason=${result.stop_reason || \"N/A\"} duration=${result.duration_ms}ms resultLen=${result.result?.length || 0}`);\n }\n\n // Track agent_id from init message\n if (msg.type === \"system\" && \"subtype\" in msg && msg.subtype === \"init\") {\n this.agentId = (msg as unknown as { agent_id: string }).agent_id;\n sdkLog(\"wire\", `INIT: agent_id=${this.agentId}`);\n }\n\n // Log control requests (approval flow)\n if (msg.type === \"control_request\") {\n const req = wirePayload as unknown as { request_id?: string; request?: { subtype?: string; tool_name?: string } };\n sdkLog(\"wire\", `CONTROL_REQUEST: id=${req.request_id} subtype=${req.request?.subtype} tool=${req.request?.tool_name || \"N/A\"}`);\n }\n\n // If someone is waiting for a message, give it to them\n if (this.messageResolvers.length > 0) {\n const resolve = this.messageResolvers.shift()!;\n resolve(msg);\n } else {\n // Otherwise queue it\n this.messageQueue.push(msg);\n }\n }\n\n private buildArgs(): string[] {\n return buildCliArgs(this.options);\n }\n\n\n\n private async findCli(): Promise<string> {\n // Try multiple resolution strategies\n const { existsSync } = await import(\"node:fs\");\n const { dirname, join } = await import(\"node:path\");\n const { fileURLToPath } = await import(\"node:url\");\n\n // Strategy 1: Check LETTA_CLI_PATH env var\n if (process.env.LETTA_CLI_PATH && existsSync(process.env.LETTA_CLI_PATH)) {\n return process.env.LETTA_CLI_PATH;\n }\n\n // Strategy 2: Try to resolve from node_modules\n // Note: resolve the package main export (not /letta.js subpath) because\n // the package.json \"exports\" field doesn't expose the subpath directly.\n try {\n const { createRequire } = await import(\"node:module\");\n const require = createRequire(import.meta.url);\n const resolved = require.resolve(\"@letta-ai/letta-code\");\n if (existsSync(resolved)) {\n return resolved;\n }\n } catch {\n // Continue to next strategy\n }\n\n // Strategy 3: Check relative to this file (for local file: deps)\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n const localPaths = [\n join(__dirname, \"../../@letta-ai/letta-code/letta.js\"),\n join(__dirname, \"../../../letta-code-prod/letta.js\"),\n join(__dirname, \"../../../letta-code/letta.js\"),\n ];\n\n for (const p of localPaths) {\n if (existsSync(p)) {\n return p;\n }\n }\n\n throw new Error(\n \"Letta Code CLI not found. Set LETTA_CLI_PATH or install @letta-ai/letta-code.\"\n );\n }\n}\n",
6
6
  "// Interactive tool policy for SDK permission callbacks.\n// Centralizes behavior so transport/session logic doesn't hardcode names inline.\n\nconst INTERACTIVE_APPROVAL_TOOLS = new Set([\n \"AskUserQuestion\",\n \"EnterPlanMode\",\n \"ExitPlanMode\",\n]);\n\nconst RUNTIME_USER_INPUT_TOOLS = new Set([\"AskUserQuestion\", \"ExitPlanMode\"]);\n\nconst HEADLESS_AUTO_ALLOW_TOOLS = new Set([\"EnterPlanMode\"]);\n\nexport function isInteractiveApprovalTool(toolName: string): boolean {\n return INTERACTIVE_APPROVAL_TOOLS.has(toolName);\n}\n\nexport function requiresRuntimeUserInput(toolName: string): boolean {\n return RUNTIME_USER_INPUT_TOOLS.has(toolName);\n}\n\nexport function isHeadlessAutoAllowTool(toolName: string): boolean {\n return HEADLESS_AUTO_ALLOW_TOOLS.has(toolName);\n}\n",
7
- "/**\n * Session\n *\n * Represents a conversation session with a Letta agent.\n * Implements the V2 API pattern: send() / receive()\n */\n\nimport { SubprocessTransport } from \"./transport.js\";\nimport type {\n InternalSessionOptions,\n SDKMessage,\n SDKInitMessage,\n SDKAssistantMessage,\n SDKResultMessage,\n MessageWire,\n WireMessage,\n ControlRequest,\n CanUseToolControlRequest,\n CanUseToolResponse,\n CanUseToolResponseAllow,\n CanUseToolResponseDeny,\n SendMessage,\n AnyAgentTool,\n ExecuteExternalToolRequest,\n ListMessagesOptions,\n ListMessagesResult,\n BootstrapStateOptions,\n BootstrapStateResult,\n SDKStreamEventPayload,\n} from \"./types.js\";\nimport {\n isHeadlessAutoAllowTool,\n requiresRuntimeUserInput,\n} from \"./interactiveToolPolicy.js\";\n\n\n// All logging gated behind DEBUG_SDK env var\nfunction sessionLog(tag: string, ...args: unknown[]) {\n if (process.env.DEBUG_SDK) console.error(`[SDK-Session] [${tag}]`, ...args);\n}\n\nconst MAX_BUFFERED_STREAM_MESSAGES = 100;\n\nexport class Session implements AsyncDisposable {\n private transport: SubprocessTransport;\n private _agentId: string | null = null;\n private _sessionId: string | null = null;\n private _conversationId: string | null = null;\n private initialized = false;\n private externalTools: Map<string, AnyAgentTool> = new Map();\n private streamQueue: SDKMessage[] = [];\n private streamResolvers: Array<(msg: SDKMessage | null) => void> = [];\n private pumpPromise: Promise<void> | null = null;\n private pumpClosed = false;\n private droppedStreamMessages = 0;\n // Waiters for SDK-initiated control requests (e.g., listMessages).\n // Keyed by request_id; pump resolves the matching waiter when it sees\n // a control_response with that request_id instead of queuing it as a stream msg.\n private controlResponseWaiters = new Map<\n string,\n (response: { subtype: string; response?: unknown; error?: string }) => void\n >();\n\n constructor(\n private options: InternalSessionOptions = {}\n ) {\n // Note: Validation happens in public API functions (createSession, createAgent, etc.)\n this.transport = new SubprocessTransport(options);\n\n // Store external tools in a map for quick lookup\n if (options.tools) {\n for (const tool of options.tools) {\n this.externalTools.set(tool.name, tool);\n }\n }\n }\n\n /**\n * Initialize the session (called automatically on first send)\n */\n async initialize(): Promise<SDKInitMessage> {\n if (this.initialized) {\n throw new Error(\"Session already initialized\");\n }\n\n sessionLog(\"init\", \"connecting transport...\");\n await this.transport.connect();\n sessionLog(\"init\", \"transport connected, sending initialize request\");\n\n // Send initialize control request\n await this.transport.write({\n type: \"control_request\",\n request_id: \"init_1\",\n request: { subtype: \"initialize\" },\n });\n\n // Wait for init message\n sessionLog(\"init\", \"waiting for init message from CLI...\");\n for await (const msg of this.transport.messages()) {\n sessionLog(\"init\", `received wire message: type=${msg.type}`);\n\n if (msg.type === \"control_request\") {\n const handled = await this.handleControlRequest(msg as ControlRequest);\n if (!handled) {\n const wireMsgAny = msg as unknown as Record<string, unknown>;\n sessionLog(\"init\", `DROPPED unsupported control_request: subtype=${(wireMsgAny.request as Record<string, unknown>)?.subtype || \"N/A\"}`);\n }\n continue;\n }\n\n if (msg.type === \"system\" && \"subtype\" in msg && msg.subtype === \"init\") {\n const initMsg = msg as WireMessage & {\n agent_id: string;\n session_id: string;\n conversation_id: string;\n model: string;\n tools: string[];\n memfs_enabled?: boolean;\n skill_sources?: Array<\"bundled\" | \"global\" | \"agent\" | \"project\">;\n system_info_reminder_enabled?: boolean;\n reflection_trigger?: \"off\" | \"step-count\" | \"compaction-event\";\n reflection_behavior?: \"reminder\" | \"auto-launch\";\n reflection_step_count?: number;\n };\n this._agentId = initMsg.agent_id;\n this._sessionId = initMsg.session_id;\n this._conversationId = initMsg.conversation_id;\n this.initialized = true;\n this.startBackgroundPump();\n\n // Register external tools with CLI\n if (this.externalTools.size > 0) {\n await this.registerExternalTools();\n }\n\n // Include external tool names in the tools list\n const allTools = [\n ...initMsg.tools,\n ...Array.from(this.externalTools.keys()),\n ];\n\n sessionLog(\"init\", `initialized: agent=${initMsg.agent_id} conversation=${initMsg.conversation_id} model=${initMsg.model} tools=${allTools.length} (${this.externalTools.size} external)`);\n\n return {\n type: \"init\",\n agentId: initMsg.agent_id,\n sessionId: initMsg.session_id,\n conversationId: initMsg.conversation_id,\n model: initMsg.model,\n tools: allTools,\n memfsEnabled: initMsg.memfs_enabled,\n skillSources: initMsg.skill_sources,\n systemInfoReminderEnabled: initMsg.system_info_reminder_enabled,\n sleeptime:\n initMsg.reflection_trigger &&\n initMsg.reflection_behavior &&\n typeof initMsg.reflection_step_count === \"number\"\n ? {\n trigger: initMsg.reflection_trigger,\n behavior: initMsg.reflection_behavior,\n stepCount: initMsg.reflection_step_count,\n }\n : undefined,\n };\n }\n }\n\n sessionLog(\"init\", \"ERROR: transport closed before init message received\");\n throw new Error(\"Failed to initialize session - no init message received\");\n }\n\n /**\n * Send a message to the agent\n * \n * @param message - Text string or multimodal content array\n * \n * @example\n * // Simple text\n * await session.send(\"Hello!\");\n * \n * @example\n * // With image\n * await session.send([\n * { type: \"text\", text: \"What's in this image?\" },\n * { type: \"image\", source: { type: \"base64\", mediaType: \"image/png\", data: \"...\" } }\n * ]);\n */\n async send(message: SendMessage): Promise<void> {\n if (!this.initialized) {\n sessionLog(\"send\", \"auto-initializing (not yet initialized)\");\n await this.initialize();\n }\n\n const preview = typeof message === \"string\"\n ? message.slice(0, 100)\n : Array.isArray(message) ? `[multimodal: ${message.length} parts]` : String(message).slice(0, 100);\n sessionLog(\"send\", `sending message: ${preview}${typeof message === \"string\" && message.length > 100 ? \"...\" : \"\"}`);\n\n // Clear stale messages from previous turn to prevent desync\n if (this.streamQueue.length > 0) {\n sessionLog(\"send\", `clearing ${this.streamQueue.length} stale messages from previous turn`);\n this.streamQueue.length = 0;\n }\n\n await this.transport.write({\n type: \"user\",\n message: { role: \"user\", content: message },\n });\n sessionLog(\"send\", \"message written to transport\");\n }\n\n /**\n * Stream messages from the agent\n */\n async *stream(): AsyncGenerator<SDKMessage> {\n const streamStart = Date.now();\n let yieldCount = 0;\n let gotResult = false;\n\n this.startBackgroundPump();\n sessionLog(\"stream\", `starting stream (agent=${this._agentId}, conversation=${this._conversationId})`);\n\n while (true) {\n const sdkMsg = await this.nextBufferedMessage();\n if (!sdkMsg) {\n break;\n }\n\n yieldCount++;\n sessionLog(\"stream\", `yield #${yieldCount}: type=${sdkMsg.type}${sdkMsg.type === \"result\" ? ` success=${(sdkMsg as SDKResultMessage).success} error=${(sdkMsg as SDKResultMessage).error || \"none\"}` : \"\"}`);\n yield sdkMsg;\n\n // Stop on result message\n if (sdkMsg.type === \"result\") {\n gotResult = true;\n break;\n }\n }\n\n const elapsed = Date.now() - streamStart;\n sessionLog(\"stream\", `stream ended: duration=${elapsed}ms yielded=${yieldCount} dropped=${this.droppedStreamMessages} gotResult=${gotResult}`);\n if (!gotResult) {\n sessionLog(\"stream\", \"WARNING: stream ended WITHOUT a result message -- transport may have closed unexpectedly\");\n }\n }\n\n private startBackgroundPump(): void {\n if (this.pumpPromise) {\n return;\n }\n\n this.pumpClosed = false;\n this.pumpPromise = this.runBackgroundPump()\n .catch((err) => {\n sessionLog(\"pump\", `ERROR: ${err instanceof Error ? err.message : String(err)}`);\n })\n .finally(() => {\n this.pumpClosed = true;\n this.resolveAllStreamWaiters(null);\n });\n }\n\n private async runBackgroundPump(): Promise<void> {\n sessionLog(\"pump\", \"background pump started\");\n\n // Tool call chunks are emitted immediately (no buffering).\n // Consumers that need complete arguments should accumulate rawArguments\n // across chunks sharing the same toolCallId on their side.\n //\n // Index-to-ID mapping: The Letta API follows the OpenAI streaming format\n // for parallel tool calls -- only the first chunk per tool call includes\n // tool_call_id, subsequent chunks identify themselves via index only.\n // We maintain a lightweight index->id map so transformMessage() can\n // resolve the ID for every chunk without buffering.\n const indexToToolCallId = new Map<number, string>();\n\n for await (const wireMsg of this.transport.messages()) {\n const wireMsgAny = wireMsg as unknown as Record<string, unknown>;\n\n if (wireMsg.type === \"control_request\") {\n const handled = await this.handleControlRequest(wireMsg as ControlRequest);\n if (!handled) {\n sessionLog(\"pump\", `DROPPED unsupported control_request: subtype=${(wireMsgAny.request as Record<string, unknown>)?.subtype || \"N/A\"}`);\n }\n continue;\n }\n\n // Route control_response to a registered waiter (e.g., from listMessages).\n // Unmatched control_responses are logged and dropped — they never reach the stream.\n if (wireMsg.type === \"control_response\") {\n const respMsg = wireMsg as unknown as {\n response: { subtype: string; request_id?: string; response?: unknown; error?: string };\n };\n const requestId = respMsg.response?.request_id;\n if (requestId && this.controlResponseWaiters.has(requestId)) {\n const resolve = this.controlResponseWaiters.get(requestId)!;\n this.controlResponseWaiters.delete(requestId);\n resolve(respMsg.response);\n } else {\n sessionLog(\"pump\", `DROPPED unmatched control_response: request_id=${requestId ?? \"N/A\"}`);\n }\n continue;\n }\n\n // For tool_call_message chunks, resolve index-based IDs before transform.\n // The first chunk has both tool_call_id and index; subsequent chunks have\n // only index. Patch the wire message so transformMessage() always sees an ID.\n const messageType = wireMsgAny.message_type as string | undefined;\n if (wireMsg.type === \"message\" && (messageType === \"tool_call_message\" || messageType === \"approval_request_message\")) {\n const toolCalls = wireMsgAny.tool_calls as Array<Record<string, unknown>> | undefined;\n const toolCall = wireMsgAny.tool_call as Record<string, unknown> | undefined;\n const tc = toolCalls?.[0] || toolCall;\n if (tc) {\n const fnObj = tc.function as Record<string, unknown> | undefined;\n const tcId = (tc.tool_call_id as string | undefined) ?? (tc.id as string | undefined);\n const tcIndex = tc.index as number | undefined;\n\n if (tcId && tcIndex !== undefined) {\n indexToToolCallId.set(tcIndex, tcId);\n } else if (!tcId && tcIndex !== undefined) {\n const resolvedId = indexToToolCallId.get(tcIndex);\n if (resolvedId) {\n // Patch the resolved ID into the wire message for transformMessage\n if (fnObj) {\n tc.id = resolvedId;\n } else {\n tc.tool_call_id = resolvedId;\n }\n }\n }\n }\n }\n\n const sdkMsg = this.transformMessage(wireMsg);\n if (sdkMsg) {\n this.enqueueStreamMessage(sdkMsg);\n } else {\n sessionLog(\"pump\", `DROPPED wire message: type=${wireMsg.type} message_type=${wireMsgAny.message_type || \"N/A\"} subtype=${wireMsgAny.subtype || \"N/A\"}`);\n }\n }\n\n sessionLog(\"pump\", \"background pump ended\");\n }\n\n private async handleControlRequest(controlReq: ControlRequest): Promise<boolean> {\n // Widen to string to allow SDK-extension subtypes not in the protocol union\n const subtype: string = controlReq.request.subtype;\n sessionLog(\"pump\", `control_request: subtype=${subtype} tool=${(controlReq.request as CanUseToolControlRequest).tool_name || \"N/A\"}`);\n\n if (subtype === \"can_use_tool\") {\n await this.handleCanUseTool(\n controlReq.request_id,\n controlReq.request as CanUseToolControlRequest\n );\n return true;\n }\n\n if (subtype === \"execute_external_tool\") {\n // SDK extension: not in protocol ControlRequestBody union, extract fields via Record\n const rawReq = controlReq.request as Record<string, unknown>;\n await this.handleExecuteExternalTool(\n controlReq.request_id,\n {\n subtype: \"execute_external_tool\",\n tool_call_id: rawReq.tool_call_id as string,\n tool_name: rawReq.tool_name as string,\n input: rawReq.input as Record<string, unknown>,\n }\n );\n return true;\n }\n\n return false;\n }\n\n private enqueueStreamMessage(msg: SDKMessage): void {\n if (this.streamResolvers.length > 0) {\n const resolve = this.streamResolvers.shift()!;\n resolve(msg);\n return;\n }\n\n if (this.streamQueue.length >= MAX_BUFFERED_STREAM_MESSAGES) {\n this.streamQueue.shift();\n this.droppedStreamMessages++;\n sessionLog(\"pump\", `stream queue overflow: dropped oldest message (total_dropped=${this.droppedStreamMessages}, max=${MAX_BUFFERED_STREAM_MESSAGES})`);\n }\n\n this.streamQueue.push(msg);\n }\n\n private async nextBufferedMessage(): Promise<SDKMessage | null> {\n if (this.streamQueue.length > 0) {\n return this.streamQueue.shift()!;\n }\n\n if (this.pumpClosed) {\n return null;\n }\n\n return new Promise((resolve) => {\n this.streamResolvers.push(resolve);\n });\n }\n\n private resolveAllStreamWaiters(msg: SDKMessage | null): void {\n for (const resolve of this.streamResolvers) {\n resolve(msg);\n }\n this.streamResolvers = [];\n // Also cancel any in-flight control request waiters (e.g., listMessages)\n for (const resolve of this.controlResponseWaiters.values()) {\n resolve({ subtype: \"error\", error: \"session closed\" });\n }\n this.controlResponseWaiters.clear();\n }\n\n /**\n * Register external tools with the CLI\n */\n private async registerExternalTools(): Promise<void> {\n const toolDefs = Array.from(this.externalTools.values()).map((tool) => ({\n name: tool.name,\n label: tool.label,\n description: tool.description,\n // Convert TypeBox schema to plain JSON Schema\n parameters: this.schemaToJsonSchema(tool.parameters),\n }));\n\n sessionLog(\"registerTools\", `registering ${toolDefs.length} external tools: ${toolDefs.map(t => t.name).join(\", \")}`);\n\n await this.transport.write({\n type: \"control_request\",\n request_id: `register_tools_${Date.now()}`,\n request: {\n subtype: \"register_external_tools\",\n tools: toolDefs,\n },\n });\n }\n\n /**\n * Convert TypeBox schema to JSON Schema\n */\n private schemaToJsonSchema(schema: unknown): Record<string, unknown> {\n // TypeBox schemas are already JSON Schema compatible\n // Just need to extract the schema object\n if (schema && typeof schema === \"object\") {\n // TypeBox schemas have these JSON Schema properties\n const s = schema as Record<string, unknown>;\n return {\n type: s.type,\n properties: s.properties,\n required: s.required,\n additionalProperties: s.additionalProperties,\n description: s.description,\n };\n }\n return { type: \"object\" };\n }\n\n /**\n * Handle execute_external_tool control request from CLI\n */\n private async handleExecuteExternalTool(\n requestId: string,\n req: ExecuteExternalToolRequest\n ): Promise<void> {\n const tool = this.externalTools.get(req.tool_name);\n \n if (!tool) {\n // Tool not found - send error result\n sessionLog(\"executeExternalTool\", `ERROR: unknown tool ${req.tool_name}`);\n await this.transport.write({\n type: \"control_response\",\n response: {\n subtype: \"external_tool_result\",\n request_id: requestId,\n tool_call_id: req.tool_call_id,\n content: [{ type: \"text\", text: `Unknown external tool: ${req.tool_name}` }],\n is_error: true,\n },\n });\n return;\n }\n\n try {\n sessionLog(\"executeExternalTool\", `executing ${req.tool_name} (call_id=${req.tool_call_id})`);\n // Execute the tool\n const result = await tool.execute(req.tool_call_id, req.input);\n \n // Send success result\n await this.transport.write({\n type: \"control_response\",\n response: {\n subtype: \"external_tool_result\",\n request_id: requestId,\n tool_call_id: req.tool_call_id,\n content: result.content,\n is_error: false,\n },\n });\n sessionLog(\"executeExternalTool\", `${req.tool_name} completed successfully`);\n } catch (err) {\n // Send error result\n const errorMessage = err instanceof Error ? err.message : String(err);\n sessionLog(\"executeExternalTool\", `${req.tool_name} failed: ${errorMessage}`);\n await this.transport.write({\n type: \"control_response\",\n response: {\n subtype: \"external_tool_result\",\n request_id: requestId,\n tool_call_id: req.tool_call_id,\n content: [{ type: \"text\", text: `Tool execution error: ${errorMessage}` }],\n is_error: true,\n },\n });\n }\n }\n\n /**\n * Handle can_use_tool control request from CLI (Claude SDK compatible format)\n */\n private async handleCanUseTool(\n requestId: string,\n req: CanUseToolControlRequest\n ): Promise<void> {\n let response: CanUseToolResponse;\n const toolName = req.tool_name;\n const hasCallback = typeof this.options.canUseTool === \"function\";\n const toolNeedsRuntimeUserInput = requiresRuntimeUserInput(toolName);\n const autoAllowWithoutCallback =\n isHeadlessAutoAllowTool(toolName);\n\n sessionLog(\"canUseTool\", `tool=${toolName} mode=${this.options.permissionMode || \"default\"} requestId=${requestId}`);\n\n // Tools that require runtime user input cannot be auto-allowed without a callback.\n if (toolNeedsRuntimeUserInput && !hasCallback) {\n response = {\n behavior: \"deny\",\n message: \"No canUseTool callback registered\",\n interrupt: false,\n };\n } else if (\n this.options.permissionMode === \"bypassPermissions\" &&\n !toolNeedsRuntimeUserInput\n ) {\n // bypassPermissions auto-allows non-interactive tools.\n sessionLog(\"canUseTool\", `AUTO-ALLOW ${toolName} (bypassPermissions)`);\n response = {\n behavior: \"allow\",\n updatedInput: null,\n updatedPermissions: [],\n } satisfies CanUseToolResponseAllow;\n } else if (hasCallback) {\n try {\n const result = await this.options.canUseTool!(toolName, req.input);\n if (result.behavior === \"allow\") {\n response = {\n behavior: \"allow\",\n updatedInput: result.updatedInput ?? null,\n updatedPermissions: [], // TODO: not implemented\n } satisfies CanUseToolResponseAllow;\n } else {\n response = {\n behavior: \"deny\",\n message: result.message ?? \"Denied by canUseTool callback\",\n interrupt: false, // TODO: not wired up yet\n } satisfies CanUseToolResponseDeny;\n }\n } catch (err) {\n response = {\n behavior: \"deny\",\n message: err instanceof Error ? err.message : \"Callback error\",\n interrupt: false,\n };\n }\n } else if (autoAllowWithoutCallback) {\n // Default headless behavior matches Claude: EnterPlanMode can proceed\n // without requiring a callback in bidirectional mode.\n sessionLog(\"canUseTool\", `AUTO-ALLOW ${toolName} (default behavior)`);\n response = {\n behavior: \"allow\",\n updatedInput: null,\n updatedPermissions: [],\n } satisfies CanUseToolResponseAllow;\n } else {\n // No callback registered - deny by default\n response = {\n behavior: \"deny\",\n message: \"No canUseTool callback registered\",\n interrupt: false,\n };\n }\n\n // Send control_response (Claude SDK compatible format)\n const responseBehavior = \"behavior\" in response ? response.behavior : \"unknown\";\n sessionLog(\"canUseTool\", `responding: requestId=${requestId} behavior=${responseBehavior}`);\n await this.transport.write({\n type: \"control_response\",\n response: {\n subtype: \"success\",\n request_id: requestId,\n response,\n },\n });\n sessionLog(\"canUseTool\", `response sent for ${toolName}`);\n }\n\n /**\n * Abort the current operation (interrupt without closing the session)\n */\n async abort(): Promise<void> {\n sessionLog(\"abort\", `aborting session (agent=${this._agentId})`);\n await this.transport.write({\n type: \"control_request\",\n request_id: `interrupt-${Date.now()}`,\n request: { subtype: \"interrupt\" },\n });\n }\n\n /**\n * Fetch a page of conversation messages via the CLI control protocol.\n *\n * The session must be initialized before calling this method.\n * Safe to call concurrently with an active stream() — the pump routes\n * matching control_response messages to this waiter without touching the\n * stream queue.\n */\n async listMessages(options: ListMessagesOptions = {}): Promise<ListMessagesResult> {\n if (!this.initialized) {\n throw new Error(\"Session must be initialized before calling listMessages()\");\n }\n\n const requestId = `list-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n\n const responsePromise = new Promise<{\n subtype: string;\n response?: unknown;\n error?: string;\n }>((resolve) => {\n this.controlResponseWaiters.set(requestId, resolve);\n });\n\n await this.transport.write({\n type: \"control_request\",\n request_id: requestId,\n request: {\n subtype: \"list_messages\",\n ...(options.conversationId ? { conversation_id: options.conversationId } : {}),\n ...(options.before ? { before: options.before } : {}),\n ...(options.after ? { after: options.after } : {}),\n ...(options.order ? { order: options.order } : {}),\n ...(options.limit !== undefined ? { limit: options.limit } : {}),\n },\n });\n\n // Race against session close (pump sets pumpClosed and resolves all waiters with null)\n const resp = await responsePromise;\n\n if (!resp) {\n throw new Error(\"Session closed before listMessages response arrived\");\n }\n if (resp.subtype === \"error\") {\n throw new Error(resp.error ?? \"listMessages failed\");\n }\n\n const payload = resp.response as {\n messages?: unknown[];\n next_before?: string | null;\n has_more?: boolean;\n } | undefined;\n\n return {\n messages: payload?.messages ?? [],\n nextBefore: payload?.next_before ?? null,\n hasMore: payload?.has_more ?? false,\n };\n }\n\n /**\n * Fetch all data needed to render the initial conversation view in one round-trip.\n *\n * Returns resolved session metadata + initial history page + pending approval flag\n * + optional timing breakdown. This is faster than separate initialize() + listMessages()\n * calls because the CLI collects and returns everything in a single control response.\n *\n * The session must be initialized before calling this method.\n */\n async bootstrapState(\n options: BootstrapStateOptions = {},\n ): Promise<BootstrapStateResult> {\n if (!this.initialized) {\n throw new Error(\n \"Session must be initialized before calling bootstrapState()\",\n );\n }\n\n const requestId = `bootstrap-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n\n const responsePromise = new Promise<{\n subtype: string;\n response?: unknown;\n error?: string;\n }>((resolve) => {\n this.controlResponseWaiters.set(requestId, resolve);\n });\n\n await this.transport.write({\n type: \"control_request\",\n request_id: requestId,\n request: {\n subtype: \"bootstrap_session_state\",\n ...(options.limit !== undefined ? { limit: options.limit } : {}),\n ...(options.order ? { order: options.order } : {}),\n },\n });\n\n const resp = await responsePromise;\n\n if (!resp) {\n throw new Error(\"Session closed before bootstrapState response arrived\");\n }\n if (resp.subtype === \"error\") {\n throw new Error(\n (resp as { error?: string }).error ?? \"bootstrapState failed\",\n );\n }\n\n const payload = resp.response as {\n agent_id?: string;\n conversation_id?: string;\n model?: string;\n tools?: string[];\n memfs_enabled?: boolean;\n messages?: unknown[];\n next_before?: string | null;\n has_more?: boolean;\n has_pending_approval?: boolean;\n timings?: {\n resolve_ms: number;\n list_messages_ms: number;\n total_ms: number;\n };\n } | undefined;\n\n return {\n agentId: payload?.agent_id ?? this._agentId ?? \"\",\n conversationId: payload?.conversation_id ?? this._conversationId ?? \"\",\n model: payload?.model,\n tools: payload?.tools ?? [],\n memfsEnabled: payload?.memfs_enabled ?? false,\n messages: payload?.messages ?? [],\n nextBefore: payload?.next_before ?? null,\n hasMore: payload?.has_more ?? false,\n hasPendingApproval: payload?.has_pending_approval ?? false,\n timings: payload?.timings,\n };\n }\n\n /**\n * Close the session\n */\n close(): void {\n sessionLog(\"close\", `closing session (agent=${this._agentId}, conversation=${this._conversationId})`);\n this.transport.close();\n this.pumpClosed = true;\n this.resolveAllStreamWaiters(null);\n }\n\n /**\n * Get the agent ID (available after initialization)\n */\n get agentId(): string | null {\n return this._agentId;\n }\n\n /**\n * Get the session ID (available after initialization)\n */\n get sessionId(): string | null {\n return this._sessionId;\n }\n\n /**\n * Get the conversation ID (available after initialization)\n */\n get conversationId(): string | null {\n return this._conversationId;\n }\n\n /**\n * AsyncDisposable implementation for `await using`\n */\n async [Symbol.asyncDispose](): Promise<void> {\n this.close();\n }\n\n /**\n * Transform wire message to SDK message\n */\n private transformMessage(wireMsg: WireMessage | MessageWire): SDKMessage | null {\n // Init message\n if (wireMsg.type === \"system\" && \"subtype\" in wireMsg && wireMsg.subtype === \"init\") {\n const msg = wireMsg as WireMessage & {\n agent_id: string;\n session_id: string;\n conversation_id: string;\n model: string;\n tools: string[];\n memfs_enabled?: boolean;\n skill_sources?: Array<\"bundled\" | \"global\" | \"agent\" | \"project\">;\n system_info_reminder_enabled?: boolean;\n reflection_trigger?: \"off\" | \"step-count\" | \"compaction-event\";\n reflection_behavior?: \"reminder\" | \"auto-launch\";\n reflection_step_count?: number;\n };\n return {\n type: \"init\",\n agentId: msg.agent_id,\n sessionId: msg.session_id,\n conversationId: msg.conversation_id,\n model: msg.model,\n tools: msg.tools,\n memfsEnabled: msg.memfs_enabled,\n skillSources: msg.skill_sources,\n systemInfoReminderEnabled: msg.system_info_reminder_enabled,\n sleeptime:\n msg.reflection_trigger &&\n msg.reflection_behavior &&\n typeof msg.reflection_step_count === \"number\"\n ? {\n trigger: msg.reflection_trigger,\n behavior: msg.reflection_behavior,\n stepCount: msg.reflection_step_count,\n }\n : undefined,\n };\n }\n\n // Handle message types (all have type: \"message\" with message_type field)\n if (wireMsg.type === \"message\" && \"message_type\" in wireMsg) {\n const msg = wireMsg as WireMessage & {\n message_type: string;\n uuid: string;\n // assistant_message fields\n content?: string;\n // tool_call_message fields\n tool_call?: { name: string; arguments: string; tool_call_id: string };\n tool_calls?: Array<{ name: string; arguments: string; tool_call_id: string }>;\n // tool_return_message fields\n tool_call_id?: string;\n tool_return?: string;\n status?: \"success\" | \"error\";\n // reasoning_message fields\n reasoning?: string;\n };\n\n // Assistant message\n if (msg.message_type === \"assistant_message\" && msg.content) {\n return {\n type: \"assistant\",\n content: msg.content,\n uuid: msg.uuid,\n };\n }\n\n // Tool call message (tool_call_message = auto-executed, approval_request_message = needs approval)\n if (msg.message_type === \"tool_call_message\" || msg.message_type === \"approval_request_message\") {\n const toolCallRaw = (msg.tool_calls?.[0] || msg.tool_call) as Record<string, unknown> | undefined;\n if (toolCallRaw) {\n const fnObj = toolCallRaw.function as Record<string, unknown> | undefined;\n const toolCallId =\n (toolCallRaw.tool_call_id as string | undefined) ??\n (toolCallRaw.id as string | undefined);\n if (!toolCallId) {\n return null;\n }\n\n const toolName =\n (toolCallRaw.name as string | undefined) ??\n (fnObj?.name as string | undefined) ??\n \"?\";\n const toolArgs =\n (toolCallRaw.arguments as string | undefined) ??\n (fnObj?.arguments as string | undefined) ??\n \"\";\n\n let toolInput: Record<string, unknown> = {};\n try {\n toolInput = JSON.parse(toolArgs);\n } catch {\n toolInput = { raw: toolArgs };\n }\n return {\n type: \"tool_call\",\n toolCallId,\n toolName,\n toolInput,\n rawArguments: toolArgs || undefined,\n uuid: msg.uuid,\n };\n }\n }\n\n // Tool return message\n if (msg.message_type === \"tool_return_message\" && msg.tool_call_id) {\n return {\n type: \"tool_result\",\n toolCallId: msg.tool_call_id,\n content: msg.tool_return || \"\",\n isError: msg.status === \"error\",\n uuid: msg.uuid,\n };\n }\n\n // Reasoning message\n if (msg.message_type === \"reasoning_message\" && msg.reasoning) {\n return {\n type: \"reasoning\",\n content: msg.reasoning,\n uuid: msg.uuid,\n };\n }\n }\n\n // Stream event (partial message updates)\n if (wireMsg.type === \"stream_event\") {\n const msg = wireMsg as WireMessage & {\n event: unknown;\n uuid: string;\n };\n const eventPayload = (msg.event ?? {}) as SDKStreamEventPayload;\n return {\n type: \"stream_event\",\n event: eventPayload,\n uuid: msg.uuid,\n };\n }\n\n // Result message\n if (wireMsg.type === \"result\") {\n const msg = wireMsg as WireMessage & {\n subtype: string;\n result?: string;\n duration_ms: number;\n total_cost_usd?: number;\n conversation_id: string;\n stop_reason?: string;\n };\n return {\n type: \"result\",\n success: msg.subtype === \"success\",\n result: msg.result,\n error: msg.subtype !== \"success\" ? msg.subtype : undefined,\n stopReason: msg.stop_reason,\n durationMs: msg.duration_ms,\n totalCostUsd: msg.total_cost_usd,\n conversationId: msg.conversation_id,\n };\n }\n\n // Error message — carries the actual error detail from the CLI.\n // The subsequent type=result only has the opaque string \"error\";\n // this message has the human-readable description and API error.\n if (wireMsg.type === \"error\") {\n const msg = wireMsg as WireMessage & {\n message: string;\n stop_reason: string;\n run_id?: string;\n api_error?: Record<string, unknown>;\n };\n return {\n type: \"error\" as const,\n message: msg.message,\n stopReason: msg.stop_reason,\n runId: msg.run_id,\n apiError: msg.api_error,\n };\n }\n\n // Retry message — the CLI is retrying after a transient failure.\n if (wireMsg.type === \"retry\") {\n const msg = wireMsg as WireMessage & {\n reason: string;\n attempt: number;\n max_attempts: number;\n delay_ms: number;\n run_id?: string;\n };\n return {\n type: \"retry\" as const,\n reason: msg.reason,\n attempt: msg.attempt,\n maxAttempts: msg.max_attempts,\n delayMs: msg.delay_ms,\n runId: msg.run_id,\n };\n }\n\n // Skip other message types (system_message, user_message, etc.)\n return null;\n }\n}\n",
7
+ "/**\n * Session\n *\n * Represents a conversation session with a Letta agent.\n * Implements the V2 API pattern: send() / receive()\n */\n\nimport { SubprocessTransport } from \"./transport.js\";\nimport type {\n InternalSessionOptions,\n SDKMessage,\n SDKInitMessage,\n SDKAssistantMessage,\n SDKResultMessage,\n MessageWire,\n WireMessage,\n ControlRequest,\n CanUseToolControlRequest,\n CanUseToolResponse,\n CanUseToolResponseAllow,\n CanUseToolResponseDeny,\n SendMessage,\n AnyAgentTool,\n ExecuteExternalToolRequest,\n ListMessagesOptions,\n ListMessagesResult,\n BootstrapStateOptions,\n BootstrapStateResult,\n SDKStreamEventPayload,\n} from \"./types.js\";\nimport {\n isHeadlessAutoAllowTool,\n requiresRuntimeUserInput,\n} from \"./interactiveToolPolicy.js\";\n\n\n// All logging gated behind DEBUG_SDK env var\nfunction sessionLog(tag: string, ...args: unknown[]) {\n if (process.env.DEBUG_SDK) console.error(`[SDK-Session] [${tag}]`, ...args);\n}\n\nconst MAX_BUFFERED_STREAM_MESSAGES = 100;\n\ntype BufferedStreamMessage = {\n message: SDKMessage;\n generation: number;\n runId?: string;\n};\n\nexport class Session implements AsyncDisposable {\n private transport: SubprocessTransport;\n private _agentId: string | null = null;\n private _sessionId: string | null = null;\n private _conversationId: string | null = null;\n private initialized = false;\n private externalTools: Map<string, AnyAgentTool> = new Map();\n private streamQueue: BufferedStreamMessage[] = [];\n private streamResolvers: Array<(msg: BufferedStreamMessage | null) => void> = [];\n private pumpPromise: Promise<void> | null = null;\n private pumpClosed = false;\n private droppedStreamMessages = 0;\n // Monotonic counter incremented after each send(). Messages enqueued by the\n // pump are tagged with the current generation; stream() filters out messages\n // from earlier generations to prevent N-1 desync (stale events from a\n // previous run leaking into the current run's stream).\n private sendGeneration = 0;\n // Run IDs that completed in the previous streamed turn. Used to drop\n // late-arriving stale events from the old run if they arrive after send().\n private lastCompletedRunIds = new Set<string>();\n // Waiters for SDK-initiated control requests (e.g., listMessages).\n // Keyed by request_id; pump resolves the matching waiter when it sees\n // a control_response with that request_id instead of queuing it as a stream msg.\n private controlResponseWaiters = new Map<\n string,\n (response: { subtype: string; response?: unknown; error?: string }) => void\n >();\n\n constructor(\n private options: InternalSessionOptions = {}\n ) {\n // Note: Validation happens in public API functions (createSession, createAgent, etc.)\n this.transport = new SubprocessTransport(options);\n\n // Store external tools in a map for quick lookup\n if (options.tools) {\n for (const tool of options.tools) {\n this.externalTools.set(tool.name, tool);\n }\n }\n }\n\n /**\n * Initialize the session (called automatically on first send)\n */\n async initialize(): Promise<SDKInitMessage> {\n if (this.initialized) {\n throw new Error(\"Session already initialized\");\n }\n\n sessionLog(\"init\", \"connecting transport...\");\n await this.transport.connect();\n sessionLog(\"init\", \"transport connected, sending initialize request\");\n\n // Send initialize control request\n await this.transport.write({\n type: \"control_request\",\n request_id: \"init_1\",\n request: { subtype: \"initialize\" },\n });\n\n // Wait for init message\n sessionLog(\"init\", \"waiting for init message from CLI...\");\n for await (const msg of this.transport.messages()) {\n sessionLog(\"init\", `received wire message: type=${msg.type}`);\n\n if (msg.type === \"control_request\") {\n const handled = await this.handleControlRequest(msg as ControlRequest);\n if (!handled) {\n const wireMsgAny = msg as unknown as Record<string, unknown>;\n sessionLog(\"init\", `DROPPED unsupported control_request: subtype=${(wireMsgAny.request as Record<string, unknown>)?.subtype || \"N/A\"}`);\n }\n continue;\n }\n\n if (msg.type === \"system\" && \"subtype\" in msg && msg.subtype === \"init\") {\n const initMsg = msg as WireMessage & {\n agent_id: string;\n session_id: string;\n conversation_id: string;\n model: string;\n tools: string[];\n memfs_enabled?: boolean;\n skill_sources?: Array<\"bundled\" | \"global\" | \"agent\" | \"project\">;\n system_info_reminder_enabled?: boolean;\n reflection_trigger?: \"off\" | \"step-count\" | \"compaction-event\";\n reflection_behavior?: \"reminder\" | \"auto-launch\";\n reflection_step_count?: number;\n };\n this._agentId = initMsg.agent_id;\n this._sessionId = initMsg.session_id;\n this._conversationId = initMsg.conversation_id;\n this.initialized = true;\n this.startBackgroundPump();\n\n // Register external tools with CLI\n if (this.externalTools.size > 0) {\n await this.registerExternalTools();\n }\n\n // Include external tool names in the tools list\n const allTools = [\n ...initMsg.tools,\n ...Array.from(this.externalTools.keys()),\n ];\n\n sessionLog(\"init\", `initialized: agent=${initMsg.agent_id} conversation=${initMsg.conversation_id} model=${initMsg.model} tools=${allTools.length} (${this.externalTools.size} external)`);\n\n return {\n type: \"init\",\n agentId: initMsg.agent_id,\n sessionId: initMsg.session_id,\n conversationId: initMsg.conversation_id,\n model: initMsg.model,\n tools: allTools,\n memfsEnabled: initMsg.memfs_enabled,\n skillSources: initMsg.skill_sources,\n systemInfoReminderEnabled: initMsg.system_info_reminder_enabled,\n sleeptime:\n initMsg.reflection_trigger &&\n initMsg.reflection_behavior &&\n typeof initMsg.reflection_step_count === \"number\"\n ? {\n trigger: initMsg.reflection_trigger,\n behavior: initMsg.reflection_behavior,\n stepCount: initMsg.reflection_step_count,\n }\n : undefined,\n };\n }\n }\n\n const stderr = this.transport.getStderr();\n const detail = stderr ? `\\nCLI stderr:\\n${stderr}` : '';\n sessionLog(\"init\", `ERROR: transport closed before init message received${detail}`);\n throw new Error(`Failed to initialize session - no init message received${detail}`);\n }\n\n /**\n * Send a message to the agent\n * \n * @param message - Text string or multimodal content array\n * \n * @example\n * // Simple text\n * await session.send(\"Hello!\");\n * \n * @example\n * // With image\n * await session.send([\n * { type: \"text\", text: \"What's in this image?\" },\n * { type: \"image\", source: { type: \"base64\", mediaType: \"image/png\", data: \"...\" } }\n * ]);\n */\n async send(message: SendMessage): Promise<void> {\n if (!this.initialized) {\n sessionLog(\"send\", \"auto-initializing (not yet initialized)\");\n await this.initialize();\n }\n\n const preview = typeof message === \"string\"\n ? message.slice(0, 100)\n : Array.isArray(message) ? `[multimodal: ${message.length} parts]` : String(message).slice(0, 100);\n sessionLog(\"send\", `sending message: ${preview}${typeof message === \"string\" && message.length > 100 ? \"...\" : \"\"}`);\n\n // Clear stale messages from previous turn to prevent desync\n if (this.streamQueue.length > 0) {\n sessionLog(\"send\", `clearing ${this.streamQueue.length} stale messages from previous turn`);\n this.streamQueue.length = 0;\n }\n\n await this.transport.write({\n type: \"user\",\n message: { role: \"user\", content: message },\n });\n\n // Advance generation AFTER the write so any messages the pump enqueues\n // during the await (from the previous run's lingering events) are tagged\n // with the old generation and will be filtered by stream().\n this.sendGeneration++;\n sessionLog(\"send\", `message written to transport (generation=${this.sendGeneration})`);\n }\n\n /**\n * Stream messages from the agent\n */\n async *stream(): AsyncGenerator<SDKMessage> {\n const streamStart = Date.now();\n const minGeneration = this.sendGeneration;\n let yieldCount = 0;\n let staleCount = 0;\n let staleRunIdCount = 0;\n let gotResult = false;\n const currentStreamRunIds = new Set<string>();\n const staleRunIds = new Set(this.lastCompletedRunIds);\n\n this.startBackgroundPump();\n sessionLog(\"stream\", `starting stream (agent=${this._agentId}, conversation=${this._conversationId}, generation=${minGeneration})`);\n\n while (true) {\n const bufferedMsg = await this.nextBufferedMessage();\n if (!bufferedMsg) {\n break;\n }\n\n // Filter stale messages from previous runs. Messages enqueued before\n // the current send() carry an older generation tag.\n if (bufferedMsg.generation < minGeneration) {\n staleCount++;\n sessionLog(\"stream\", `discarding stale message: type=${bufferedMsg.message.type} generation=${bufferedMsg.generation} (current=${minGeneration})`);\n continue;\n }\n\n // Filter late old-run messages that arrive after send() has already\n // advanced generation and stream queue was cleared.\n if (bufferedMsg.runId && staleRunIds.has(bufferedMsg.runId)) {\n staleRunIdCount++;\n sessionLog(\"stream\", `discarding stale message: type=${bufferedMsg.message.type} runId=${bufferedMsg.runId}`);\n continue;\n }\n\n if (bufferedMsg.runId) {\n currentStreamRunIds.add(bufferedMsg.runId);\n }\n\n const sdkMsg = bufferedMsg.message;\n yieldCount++;\n sessionLog(\"stream\", `yield #${yieldCount}: type=${sdkMsg.type}${sdkMsg.type === \"result\" ? ` success=${(sdkMsg as SDKResultMessage).success} error=${(sdkMsg as SDKResultMessage).error || \"none\"}` : \"\"}`);\n yield sdkMsg;\n\n // Stop on result message\n if (sdkMsg.type === \"result\") {\n gotResult = true;\n this.updateCompletedRunIds((sdkMsg as SDKResultMessage).runIds, currentStreamRunIds);\n break;\n }\n }\n\n const elapsed = Date.now() - streamStart;\n sessionLog(\"stream\", `stream ended: duration=${elapsed}ms yielded=${yieldCount} staleFiltered=${staleCount} staleRunIdFiltered=${staleRunIdCount} dropped=${this.droppedStreamMessages} gotResult=${gotResult}`);\n if (!gotResult) {\n sessionLog(\"stream\", \"WARNING: stream ended WITHOUT a result message -- transport may have closed unexpectedly\");\n }\n }\n\n private startBackgroundPump(): void {\n if (this.pumpPromise) {\n return;\n }\n\n this.pumpClosed = false;\n this.pumpPromise = this.runBackgroundPump()\n .catch((err) => {\n sessionLog(\"pump\", `ERROR: ${err instanceof Error ? err.message : String(err)}`);\n })\n .finally(() => {\n this.pumpClosed = true;\n this.resolveAllStreamWaiters(null);\n });\n }\n\n private async runBackgroundPump(): Promise<void> {\n sessionLog(\"pump\", \"background pump started\");\n\n // Tool call chunks are emitted immediately (no buffering).\n // Consumers that need complete arguments should accumulate rawArguments\n // across chunks sharing the same toolCallId on their side.\n //\n // Index-to-ID mapping: The Letta API follows the OpenAI streaming format\n // for parallel tool calls -- only the first chunk per tool call includes\n // tool_call_id, subsequent chunks identify themselves via index only.\n // We maintain a lightweight index->id map so transformMessage() can\n // resolve the ID for every chunk without buffering.\n const indexToToolCallId = new Map<number, string>();\n\n for await (const wireMsg of this.transport.messages()) {\n const wireMsgAny = wireMsg as unknown as Record<string, unknown>;\n\n if (wireMsg.type === \"control_request\") {\n const handled = await this.handleControlRequest(wireMsg as ControlRequest);\n if (!handled) {\n sessionLog(\"pump\", `DROPPED unsupported control_request: subtype=${(wireMsgAny.request as Record<string, unknown>)?.subtype || \"N/A\"}`);\n }\n continue;\n }\n\n // Route control_response to a registered waiter (e.g., from listMessages).\n // Unmatched control_responses are logged and dropped — they never reach the stream.\n if (wireMsg.type === \"control_response\") {\n const respMsg = wireMsg as unknown as {\n response: { subtype: string; request_id?: string; response?: unknown; error?: string };\n };\n const requestId = respMsg.response?.request_id;\n if (requestId && this.controlResponseWaiters.has(requestId)) {\n const resolve = this.controlResponseWaiters.get(requestId)!;\n this.controlResponseWaiters.delete(requestId);\n resolve(respMsg.response);\n } else {\n sessionLog(\"pump\", `DROPPED unmatched control_response: request_id=${requestId ?? \"N/A\"}`);\n }\n continue;\n }\n\n // For tool_call_message chunks, resolve index-based IDs before transform.\n // The first chunk has both tool_call_id and index; subsequent chunks have\n // only index. Patch the wire message so transformMessage() always sees an ID.\n const messageType = wireMsgAny.message_type as string | undefined;\n if (wireMsg.type === \"message\" && (messageType === \"tool_call_message\" || messageType === \"approval_request_message\")) {\n const toolCalls = wireMsgAny.tool_calls as Array<Record<string, unknown>> | undefined;\n const toolCall = wireMsgAny.tool_call as Record<string, unknown> | undefined;\n const tc = toolCalls?.[0] || toolCall;\n if (tc) {\n const fnObj = tc.function as Record<string, unknown> | undefined;\n const tcId = (tc.tool_call_id as string | undefined) ?? (tc.id as string | undefined);\n const tcIndex = tc.index as number | undefined;\n\n if (tcId && tcIndex !== undefined) {\n indexToToolCallId.set(tcIndex, tcId);\n } else if (!tcId && tcIndex !== undefined) {\n const resolvedId = indexToToolCallId.get(tcIndex);\n if (resolvedId) {\n // Patch the resolved ID into the wire message for transformMessage\n if (fnObj) {\n tc.id = resolvedId;\n } else {\n tc.tool_call_id = resolvedId;\n }\n }\n }\n }\n }\n\n const sdkMsg = this.transformMessage(wireMsg);\n if (sdkMsg) {\n this.enqueueStreamMessage(sdkMsg);\n } else {\n sessionLog(\"pump\", `DROPPED wire message: type=${wireMsg.type} message_type=${wireMsgAny.message_type || \"N/A\"} subtype=${wireMsgAny.subtype || \"N/A\"}`);\n }\n }\n\n sessionLog(\"pump\", \"background pump ended\");\n }\n\n private async handleControlRequest(controlReq: ControlRequest): Promise<boolean> {\n // Widen to string to allow SDK-extension subtypes not in the protocol union\n const subtype: string = controlReq.request.subtype;\n sessionLog(\"pump\", `control_request: subtype=${subtype} tool=${(controlReq.request as CanUseToolControlRequest).tool_name || \"N/A\"}`);\n\n if (subtype === \"can_use_tool\") {\n await this.handleCanUseTool(\n controlReq.request_id,\n controlReq.request as CanUseToolControlRequest\n );\n return true;\n }\n\n if (subtype === \"execute_external_tool\") {\n // SDK extension: not in protocol ControlRequestBody union, extract fields via Record\n const rawReq = controlReq.request as Record<string, unknown>;\n await this.handleExecuteExternalTool(\n controlReq.request_id,\n {\n subtype: \"execute_external_tool\",\n tool_call_id: rawReq.tool_call_id as string,\n tool_name: rawReq.tool_name as string,\n input: rawReq.input as Record<string, unknown>,\n }\n );\n return true;\n }\n\n return false;\n }\n\n private enqueueStreamMessage(msg: SDKMessage): void {\n const bufferedMsg: BufferedStreamMessage = {\n message: msg,\n generation: this.sendGeneration,\n runId: this.getMessageRunId(msg),\n };\n\n if (this.streamResolvers.length > 0) {\n const resolve = this.streamResolvers.shift()!;\n resolve(bufferedMsg);\n return;\n }\n\n if (this.streamQueue.length >= MAX_BUFFERED_STREAM_MESSAGES) {\n this.streamQueue.shift();\n this.droppedStreamMessages++;\n sessionLog(\"pump\", `stream queue overflow: dropped oldest message (total_dropped=${this.droppedStreamMessages}, max=${MAX_BUFFERED_STREAM_MESSAGES})`);\n }\n\n this.streamQueue.push(bufferedMsg);\n }\n\n private async nextBufferedMessage(): Promise<BufferedStreamMessage | null> {\n if (this.streamQueue.length > 0) {\n return this.streamQueue.shift()!;\n }\n\n if (this.pumpClosed) {\n return null;\n }\n\n return new Promise((resolve) => {\n this.streamResolvers.push(resolve);\n });\n }\n\n private resolveAllStreamWaiters(msg: BufferedStreamMessage | null): void {\n for (const resolve of this.streamResolvers) {\n resolve(msg);\n }\n this.streamResolvers = [];\n // Also cancel any in-flight control request waiters (e.g., listMessages)\n for (const resolve of this.controlResponseWaiters.values()) {\n resolve({ subtype: \"error\", error: \"session closed\" });\n }\n this.controlResponseWaiters.clear();\n }\n\n private getMessageRunId(msg: SDKMessage): string | undefined {\n switch (msg.type) {\n case \"assistant\":\n case \"tool_call\":\n case \"tool_result\":\n case \"reasoning\":\n case \"error\":\n case \"retry\":\n return msg.runId;\n default:\n return undefined;\n }\n }\n\n private updateCompletedRunIds(\n resultRunIds: string[] | undefined,\n streamedRunIds: Set<string>,\n ): void {\n const nextRunIds = new Set<string>();\n\n if (Array.isArray(resultRunIds)) {\n for (const runId of resultRunIds) {\n if (runId) {\n nextRunIds.add(runId);\n }\n }\n }\n\n for (const runId of streamedRunIds) {\n if (runId) {\n nextRunIds.add(runId);\n }\n }\n\n this.lastCompletedRunIds = nextRunIds;\n }\n\n /**\n * Register external tools with the CLI\n */\n private async registerExternalTools(): Promise<void> {\n const toolDefs = Array.from(this.externalTools.values()).map((tool) => ({\n name: tool.name,\n label: tool.label,\n description: tool.description,\n // Convert TypeBox schema to plain JSON Schema\n parameters: this.schemaToJsonSchema(tool.parameters),\n }));\n\n sessionLog(\"registerTools\", `registering ${toolDefs.length} external tools: ${toolDefs.map(t => t.name).join(\", \")}`);\n\n await this.transport.write({\n type: \"control_request\",\n request_id: `register_tools_${Date.now()}`,\n request: {\n subtype: \"register_external_tools\",\n tools: toolDefs,\n },\n });\n }\n\n /**\n * Convert TypeBox schema to JSON Schema\n */\n private schemaToJsonSchema(schema: unknown): Record<string, unknown> {\n // TypeBox schemas are already JSON Schema compatible\n // Just need to extract the schema object\n if (schema && typeof schema === \"object\") {\n // TypeBox schemas have these JSON Schema properties\n const s = schema as Record<string, unknown>;\n return {\n type: s.type,\n properties: s.properties,\n required: s.required,\n additionalProperties: s.additionalProperties,\n description: s.description,\n };\n }\n return { type: \"object\" };\n }\n\n /**\n * Handle execute_external_tool control request from CLI\n */\n private async handleExecuteExternalTool(\n requestId: string,\n req: ExecuteExternalToolRequest\n ): Promise<void> {\n const tool = this.externalTools.get(req.tool_name);\n \n if (!tool) {\n // Tool not found - send error result\n sessionLog(\"executeExternalTool\", `ERROR: unknown tool ${req.tool_name}`);\n await this.transport.write({\n type: \"control_response\",\n response: {\n subtype: \"external_tool_result\",\n request_id: requestId,\n tool_call_id: req.tool_call_id,\n content: [{ type: \"text\", text: `Unknown external tool: ${req.tool_name}` }],\n is_error: true,\n },\n });\n return;\n }\n\n try {\n sessionLog(\"executeExternalTool\", `executing ${req.tool_name} (call_id=${req.tool_call_id})`);\n // Execute the tool\n const result = await tool.execute(req.tool_call_id, req.input);\n \n // Send success result\n await this.transport.write({\n type: \"control_response\",\n response: {\n subtype: \"external_tool_result\",\n request_id: requestId,\n tool_call_id: req.tool_call_id,\n content: result.content,\n is_error: false,\n },\n });\n sessionLog(\"executeExternalTool\", `${req.tool_name} completed successfully`);\n } catch (err) {\n // Send error result\n const errorMessage = err instanceof Error ? err.message : String(err);\n sessionLog(\"executeExternalTool\", `${req.tool_name} failed: ${errorMessage}`);\n await this.transport.write({\n type: \"control_response\",\n response: {\n subtype: \"external_tool_result\",\n request_id: requestId,\n tool_call_id: req.tool_call_id,\n content: [{ type: \"text\", text: `Tool execution error: ${errorMessage}` }],\n is_error: true,\n },\n });\n }\n }\n\n /**\n * Handle can_use_tool control request from CLI (Claude SDK compatible format)\n */\n private async handleCanUseTool(\n requestId: string,\n req: CanUseToolControlRequest\n ): Promise<void> {\n let response: CanUseToolResponse;\n const toolName = req.tool_name;\n const hasCallback = typeof this.options.canUseTool === \"function\";\n const toolNeedsRuntimeUserInput = requiresRuntimeUserInput(toolName);\n const autoAllowWithoutCallback =\n isHeadlessAutoAllowTool(toolName);\n\n sessionLog(\"canUseTool\", `tool=${toolName} mode=${this.options.permissionMode || \"default\"} requestId=${requestId}`);\n\n // Tools that require runtime user input cannot be auto-allowed without a callback.\n if (toolNeedsRuntimeUserInput && !hasCallback) {\n response = {\n behavior: \"deny\",\n message: \"No canUseTool callback registered\",\n interrupt: false,\n };\n } else if (\n this.options.permissionMode === \"bypassPermissions\" &&\n !toolNeedsRuntimeUserInput\n ) {\n // bypassPermissions auto-allows non-interactive tools.\n sessionLog(\"canUseTool\", `AUTO-ALLOW ${toolName} (bypassPermissions)`);\n response = {\n behavior: \"allow\",\n updatedInput: null,\n updatedPermissions: [],\n } satisfies CanUseToolResponseAllow;\n } else if (hasCallback) {\n try {\n const result = await this.options.canUseTool!(toolName, req.input);\n if (result.behavior === \"allow\") {\n response = {\n behavior: \"allow\",\n updatedInput: result.updatedInput ?? null,\n updatedPermissions: [], // TODO: not implemented\n } satisfies CanUseToolResponseAllow;\n } else {\n response = {\n behavior: \"deny\",\n message: result.message ?? \"Denied by canUseTool callback\",\n interrupt: false, // TODO: not wired up yet\n } satisfies CanUseToolResponseDeny;\n }\n } catch (err) {\n response = {\n behavior: \"deny\",\n message: err instanceof Error ? err.message : \"Callback error\",\n interrupt: false,\n };\n }\n } else if (autoAllowWithoutCallback) {\n // Default headless behavior matches Claude: EnterPlanMode can proceed\n // without requiring a callback in bidirectional mode.\n sessionLog(\"canUseTool\", `AUTO-ALLOW ${toolName} (default behavior)`);\n response = {\n behavior: \"allow\",\n updatedInput: null,\n updatedPermissions: [],\n } satisfies CanUseToolResponseAllow;\n } else {\n // No callback registered - deny by default\n response = {\n behavior: \"deny\",\n message: \"No canUseTool callback registered\",\n interrupt: false,\n };\n }\n\n // Send control_response (Claude SDK compatible format)\n const responseBehavior = \"behavior\" in response ? response.behavior : \"unknown\";\n sessionLog(\"canUseTool\", `responding: requestId=${requestId} behavior=${responseBehavior}`);\n await this.transport.write({\n type: \"control_response\",\n response: {\n subtype: \"success\",\n request_id: requestId,\n response,\n },\n });\n sessionLog(\"canUseTool\", `response sent for ${toolName}`);\n }\n\n /**\n * Abort the current operation (interrupt without closing the session)\n */\n async abort(): Promise<void> {\n sessionLog(\"abort\", `aborting session (agent=${this._agentId})`);\n await this.transport.write({\n type: \"control_request\",\n request_id: `interrupt-${Date.now()}`,\n request: { subtype: \"interrupt\" },\n });\n }\n\n /**\n * Fetch a page of conversation messages via the CLI control protocol.\n *\n * The session must be initialized before calling this method.\n * Safe to call concurrently with an active stream() — the pump routes\n * matching control_response messages to this waiter without touching the\n * stream queue.\n */\n async listMessages(options: ListMessagesOptions = {}): Promise<ListMessagesResult> {\n if (!this.initialized) {\n throw new Error(\"Session must be initialized before calling listMessages()\");\n }\n\n const requestId = `list-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n\n const responsePromise = new Promise<{\n subtype: string;\n response?: unknown;\n error?: string;\n }>((resolve) => {\n this.controlResponseWaiters.set(requestId, resolve);\n });\n\n await this.transport.write({\n type: \"control_request\",\n request_id: requestId,\n request: {\n subtype: \"list_messages\",\n ...(options.conversationId ? { conversation_id: options.conversationId } : {}),\n ...(options.before ? { before: options.before } : {}),\n ...(options.after ? { after: options.after } : {}),\n ...(options.order ? { order: options.order } : {}),\n ...(options.limit !== undefined ? { limit: options.limit } : {}),\n },\n });\n\n // Race against session close (pump sets pumpClosed and resolves all waiters with null)\n const resp = await responsePromise;\n\n if (!resp) {\n throw new Error(\"Session closed before listMessages response arrived\");\n }\n if (resp.subtype === \"error\") {\n throw new Error(resp.error ?? \"listMessages failed\");\n }\n\n const payload = resp.response as {\n messages?: unknown[];\n next_before?: string | null;\n has_more?: boolean;\n } | undefined;\n\n return {\n messages: payload?.messages ?? [],\n nextBefore: payload?.next_before ?? null,\n hasMore: payload?.has_more ?? false,\n };\n }\n\n /**\n * Fetch all data needed to render the initial conversation view in one round-trip.\n *\n * Returns resolved session metadata + initial history page + pending approval flag\n * + optional timing breakdown. This is faster than separate initialize() + listMessages()\n * calls because the CLI collects and returns everything in a single control response.\n *\n * The session must be initialized before calling this method.\n */\n async bootstrapState(\n options: BootstrapStateOptions = {},\n ): Promise<BootstrapStateResult> {\n if (!this.initialized) {\n throw new Error(\n \"Session must be initialized before calling bootstrapState()\",\n );\n }\n\n const requestId = `bootstrap-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n\n const responsePromise = new Promise<{\n subtype: string;\n response?: unknown;\n error?: string;\n }>((resolve) => {\n this.controlResponseWaiters.set(requestId, resolve);\n });\n\n await this.transport.write({\n type: \"control_request\",\n request_id: requestId,\n request: {\n subtype: \"bootstrap_session_state\",\n ...(options.limit !== undefined ? { limit: options.limit } : {}),\n ...(options.order ? { order: options.order } : {}),\n },\n });\n\n const resp = await responsePromise;\n\n if (!resp) {\n throw new Error(\"Session closed before bootstrapState response arrived\");\n }\n if (resp.subtype === \"error\") {\n throw new Error(\n (resp as { error?: string }).error ?? \"bootstrapState failed\",\n );\n }\n\n const payload = resp.response as {\n agent_id?: string;\n conversation_id?: string;\n model?: string;\n tools?: string[];\n memfs_enabled?: boolean;\n messages?: unknown[];\n next_before?: string | null;\n has_more?: boolean;\n has_pending_approval?: boolean;\n timings?: {\n resolve_ms: number;\n list_messages_ms: number;\n total_ms: number;\n };\n } | undefined;\n\n return {\n agentId: payload?.agent_id ?? this._agentId ?? \"\",\n conversationId: payload?.conversation_id ?? this._conversationId ?? \"\",\n model: payload?.model,\n tools: payload?.tools ?? [],\n memfsEnabled: payload?.memfs_enabled ?? false,\n messages: payload?.messages ?? [],\n nextBefore: payload?.next_before ?? null,\n hasMore: payload?.has_more ?? false,\n hasPendingApproval: payload?.has_pending_approval ?? false,\n timings: payload?.timings,\n };\n }\n\n /**\n * Close the session\n */\n close(): void {\n sessionLog(\"close\", `closing session (agent=${this._agentId}, conversation=${this._conversationId})`);\n this.transport.close();\n this.pumpClosed = true;\n this.resolveAllStreamWaiters(null);\n }\n\n /**\n * Get the agent ID (available after initialization)\n */\n get agentId(): string | null {\n return this._agentId;\n }\n\n /**\n * Get the session ID (available after initialization)\n */\n get sessionId(): string | null {\n return this._sessionId;\n }\n\n /**\n * Get the conversation ID (available after initialization)\n */\n get conversationId(): string | null {\n return this._conversationId;\n }\n\n /**\n * AsyncDisposable implementation for `await using`\n */\n async [Symbol.asyncDispose](): Promise<void> {\n this.close();\n }\n\n /**\n * Transform wire message to SDK message\n */\n private transformMessage(wireMsg: WireMessage | MessageWire): SDKMessage | null {\n // Init message\n if (wireMsg.type === \"system\" && \"subtype\" in wireMsg && wireMsg.subtype === \"init\") {\n const msg = wireMsg as WireMessage & {\n agent_id: string;\n session_id: string;\n conversation_id: string;\n model: string;\n tools: string[];\n memfs_enabled?: boolean;\n skill_sources?: Array<\"bundled\" | \"global\" | \"agent\" | \"project\">;\n system_info_reminder_enabled?: boolean;\n reflection_trigger?: \"off\" | \"step-count\" | \"compaction-event\";\n reflection_behavior?: \"reminder\" | \"auto-launch\";\n reflection_step_count?: number;\n };\n return {\n type: \"init\",\n agentId: msg.agent_id,\n sessionId: msg.session_id,\n conversationId: msg.conversation_id,\n model: msg.model,\n tools: msg.tools,\n memfsEnabled: msg.memfs_enabled,\n skillSources: msg.skill_sources,\n systemInfoReminderEnabled: msg.system_info_reminder_enabled,\n sleeptime:\n msg.reflection_trigger &&\n msg.reflection_behavior &&\n typeof msg.reflection_step_count === \"number\"\n ? {\n trigger: msg.reflection_trigger,\n behavior: msg.reflection_behavior,\n stepCount: msg.reflection_step_count,\n }\n : undefined,\n };\n }\n\n // Handle message types (all have type: \"message\" with message_type field)\n if (wireMsg.type === \"message\" && \"message_type\" in wireMsg) {\n const msg = wireMsg as WireMessage & {\n message_type: string;\n uuid: string;\n run_id?: string;\n // assistant_message fields\n content?: string;\n // tool_call_message fields\n tool_call?: { name: string; arguments: string; tool_call_id: string };\n tool_calls?: Array<{ name: string; arguments: string; tool_call_id: string }>;\n // tool_return_message fields\n tool_call_id?: string;\n tool_return?: string;\n status?: \"success\" | \"error\";\n // reasoning_message fields\n reasoning?: string;\n };\n\n const runId = msg.run_id || undefined;\n\n // Assistant message\n if (msg.message_type === \"assistant_message\" && msg.content) {\n return {\n type: \"assistant\",\n content: msg.content,\n uuid: msg.uuid,\n runId,\n };\n }\n\n // Tool call message (tool_call_message = auto-executed, approval_request_message = needs approval)\n if (msg.message_type === \"tool_call_message\" || msg.message_type === \"approval_request_message\") {\n const toolCallRaw = (msg.tool_calls?.[0] || msg.tool_call) as Record<string, unknown> | undefined;\n if (toolCallRaw) {\n const fnObj = toolCallRaw.function as Record<string, unknown> | undefined;\n const toolCallId =\n (toolCallRaw.tool_call_id as string | undefined) ??\n (toolCallRaw.id as string | undefined);\n if (!toolCallId) {\n return null;\n }\n\n const toolName =\n (toolCallRaw.name as string | undefined) ??\n (fnObj?.name as string | undefined) ??\n \"?\";\n const toolArgs =\n (toolCallRaw.arguments as string | undefined) ??\n (fnObj?.arguments as string | undefined) ??\n \"\";\n\n let toolInput: Record<string, unknown> = {};\n try {\n toolInput = JSON.parse(toolArgs);\n } catch {\n toolInput = { raw: toolArgs };\n }\n return {\n type: \"tool_call\",\n toolCallId,\n toolName,\n toolInput,\n rawArguments: toolArgs || undefined,\n uuid: msg.uuid,\n runId,\n };\n }\n }\n\n // Tool return message\n if (msg.message_type === \"tool_return_message\" && msg.tool_call_id) {\n return {\n type: \"tool_result\",\n toolCallId: msg.tool_call_id,\n content: msg.tool_return || \"\",\n isError: msg.status === \"error\",\n uuid: msg.uuid,\n runId,\n };\n }\n\n // Reasoning message\n if (msg.message_type === \"reasoning_message\" && msg.reasoning) {\n return {\n type: \"reasoning\",\n content: msg.reasoning,\n uuid: msg.uuid,\n runId,\n };\n }\n }\n\n // Stream event (partial message updates)\n if (wireMsg.type === \"stream_event\") {\n const msg = wireMsg as WireMessage & {\n event: unknown;\n uuid: string;\n };\n const eventPayload = (msg.event ?? {}) as SDKStreamEventPayload;\n return {\n type: \"stream_event\",\n event: eventPayload,\n uuid: msg.uuid,\n };\n }\n\n // Result message\n if (wireMsg.type === \"result\") {\n const msg = wireMsg as WireMessage & {\n subtype: string;\n result?: string;\n duration_ms: number;\n total_cost_usd?: number;\n conversation_id: string;\n stop_reason?: string;\n run_ids?: unknown[];\n };\n const runIds = Array.isArray(msg.run_ids)\n ? msg.run_ids.filter((id): id is string => typeof id === \"string\")\n : undefined;\n return {\n type: \"result\",\n success: msg.subtype === \"success\",\n result: msg.result,\n error: msg.subtype !== \"success\" ? msg.subtype : undefined,\n stopReason: msg.stop_reason,\n durationMs: msg.duration_ms,\n totalCostUsd: msg.total_cost_usd,\n conversationId: msg.conversation_id,\n runIds,\n };\n }\n\n // Error message — carries the actual error detail from the CLI.\n // The subsequent type=result only has the opaque string \"error\";\n // this message has the human-readable description and API error.\n if (wireMsg.type === \"error\") {\n const msg = wireMsg as WireMessage & {\n message: string;\n stop_reason: string;\n run_id?: string;\n api_error?: Record<string, unknown>;\n };\n return {\n type: \"error\" as const,\n message: msg.message,\n stopReason: msg.stop_reason,\n runId: msg.run_id,\n apiError: msg.api_error,\n };\n }\n\n // Retry message — the CLI is retrying after a transient failure.\n if (wireMsg.type === \"retry\") {\n const msg = wireMsg as WireMessage & {\n reason: string;\n attempt: number;\n max_attempts: number;\n delay_ms: number;\n run_id?: string;\n };\n return {\n type: \"retry\" as const,\n reason: msg.reason,\n attempt: msg.attempt,\n maxAttempts: msg.max_attempts,\n delayMs: msg.delay_ms,\n runId: msg.run_id,\n };\n }\n\n // Skip other message types (system_message, user_message, etc.)\n return null;\n }\n}\n",
8
8
  "/**\n * SDK Validation\n *\n * Validates user-provided options before spawning the CLI.\n */\n\nimport type { \n CreateSessionOptions,\n CreateAgentOptions,\n MemoryItem, \n CreateBlock,\n SystemPromptPreset,\n SkillSource,\n SleeptimeOptions,\n} from \"./types.js\";\n\nconst VALID_SKILL_SOURCES: SkillSource[] = [\n \"bundled\",\n \"global\",\n \"agent\",\n \"project\",\n];\n\n/**\n * Extract block labels from memory items.\n */\nfunction getBlockLabels(memory: MemoryItem[]): string[] {\n return memory\n .map((item) => {\n if (typeof item === \"string\") return item; // preset name\n if (\"label\" in item) return (item as CreateBlock).label; // CreateBlock\n return null; // blockId - no label to check\n })\n .filter((label): label is string => label !== null);\n}\n\n/**\n * Validate systemPrompt preset value.\n */\nfunction validateSystemPromptPreset(preset: string): void {\n const validPresets = [\n \"default\",\n \"letta-claude\",\n \"letta-codex\",\n \"letta-gemini\",\n \"claude\",\n \"codex\",\n \"gemini\",\n ];\n if (!validPresets.includes(preset)) {\n throw new Error(\n `Invalid system prompt preset '${preset}'. ` +\n `Valid presets: ${validPresets.join(\", \")}`\n );\n }\n}\n\nfunction validateSkillSources(sources: SkillSource[] | undefined): void {\n if (sources === undefined) {\n return;\n }\n\n for (const source of sources) {\n if (!VALID_SKILL_SOURCES.includes(source)) {\n throw new Error(\n `Invalid skill source '${source}'. Valid values: ${VALID_SKILL_SOURCES.join(\", \")}`\n );\n }\n }\n}\n\nfunction validateSleeptimeOptions(sleeptime: SleeptimeOptions | undefined): void {\n if (sleeptime === undefined) {\n return;\n }\n\n if (\n sleeptime.trigger !== undefined &&\n ![\"off\", \"step-count\", \"compaction-event\"].includes(sleeptime.trigger)\n ) {\n throw new Error(\n `Invalid sleeptime.trigger '${String(sleeptime.trigger)}'. Valid values: off, step-count, compaction-event`\n );\n }\n\n if (\n sleeptime.behavior !== undefined &&\n ![\"reminder\", \"auto-launch\"].includes(sleeptime.behavior)\n ) {\n throw new Error(\n `Invalid sleeptime.behavior '${String(sleeptime.behavior)}'. Valid values: reminder, auto-launch`\n );\n }\n\n if (\n sleeptime.stepCount !== undefined &&\n (!Number.isInteger(sleeptime.stepCount) || sleeptime.stepCount <= 0)\n ) {\n throw new Error(\n \"Invalid sleeptime.stepCount. Expected a positive integer.\"\n );\n }\n}\n\n/**\n * Validate CreateSessionOptions (used by createSession and resumeSession).\n */\nexport function validateCreateSessionOptions(options: CreateSessionOptions): void {\n // Validate systemPrompt preset if provided\n if (options.systemPrompt !== undefined) {\n validateSystemPromptPreset(options.systemPrompt);\n }\n\n validateSkillSources(options.skillSources);\n validateSleeptimeOptions(options.sleeptime);\n}\n\n/**\n * Validate CreateAgentOptions (used by createAgent).\n */\nexport function validateCreateAgentOptions(options: CreateAgentOptions): void {\n // Validate memory/persona consistency\n if (options.memory !== undefined) {\n const blockLabels = getBlockLabels(options.memory);\n\n if (options.persona !== undefined && !blockLabels.includes(\"persona\")) {\n throw new Error(\n \"Cannot set 'persona' value - block not included in 'memory'. \" +\n \"Either add 'persona' to memory array or remove the persona option.\"\n );\n }\n\n if (options.human !== undefined && !blockLabels.includes(\"human\")) {\n throw new Error(\n \"Cannot set 'human' value - block not included in 'memory'. \" +\n \"Either add 'human' to memory array or remove the human option.\"\n );\n }\n }\n\n // Validate systemPrompt preset if provided as preset object\n if (\n options.systemPrompt !== undefined &&\n typeof options.systemPrompt === \"object\"\n ) {\n validateSystemPromptPreset(options.systemPrompt.preset);\n } else if (\n options.systemPrompt !== undefined &&\n typeof options.systemPrompt === \"string\"\n ) {\n // Check if it's a preset name (if so, validate it)\n const validPresets = [\n \"default\",\n \"letta-claude\",\n \"letta-codex\",\n \"letta-gemini\",\n \"claude\",\n \"codex\",\n \"gemini\",\n ] as const;\n if (validPresets.includes(options.systemPrompt as SystemPromptPreset)) {\n validateSystemPromptPreset(options.systemPrompt);\n }\n // If not a preset, it's a custom string - no validation needed\n }\n\n validateSkillSources(options.skillSources);\n validateSleeptimeOptions(options.sleeptime);\n}\n",
9
9
  "import type { SDKStreamEventPayload } from \"./types.js\";\n\nexport type StreamTextKind = \"assistant\" | \"reasoning\";\n\nexport interface StreamTextDelta {\n kind: StreamTextKind;\n text: string;\n}\n\nfunction extractTextFromContent(content: unknown): string | null {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (Array.isArray(content)) {\n const pieces: string[] = [];\n for (const part of content) {\n if (typeof part === \"string\") {\n pieces.push(part);\n continue;\n }\n if (!part || typeof part !== \"object\") {\n continue;\n }\n const rec = part as Record<string, unknown>;\n if (typeof rec.text === \"string\") {\n pieces.push(rec.text);\n }\n }\n const joined = pieces.join(\"\");\n return joined.length > 0 ? joined : null;\n }\n\n if (content && typeof content === \"object\") {\n const rec = content as Record<string, unknown>;\n if (typeof rec.text === \"string\") {\n return rec.text;\n }\n }\n\n return null;\n}\n\n/**\n * Extract appendable assistant/reasoning text from a stream_event payload.\n *\n * Supports both shapes currently emitted by headless mode:\n * 1) content_block style: { type, delta: { text|reasoning } }\n * 2) message chunk style: { message_type: \"assistant_message\"|\"reasoning_message\", ... }\n */\nexport function extractStreamTextDelta(event: SDKStreamEventPayload): StreamTextDelta | null {\n if (!event || typeof event !== \"object\") {\n return null;\n }\n\n const rec = event as Record<string, unknown>;\n\n const maybeDelta = rec.delta;\n if (maybeDelta && typeof maybeDelta === \"object\") {\n const delta = maybeDelta as Record<string, unknown>;\n\n if (typeof delta.reasoning === \"string\" && delta.reasoning.length > 0) {\n return { kind: \"reasoning\", text: delta.reasoning };\n }\n\n if (typeof delta.text === \"string\" && delta.text.length > 0) {\n return { kind: \"assistant\", text: delta.text };\n }\n }\n\n const messageType = rec.message_type;\n if (messageType === \"reasoning_message\") {\n const reasoningText =\n typeof rec.reasoning === \"string\" ? rec.reasoning : extractTextFromContent(rec.content);\n if (reasoningText && reasoningText.length > 0) {\n return { kind: \"reasoning\", text: reasoningText };\n }\n }\n\n if (messageType === \"assistant_message\") {\n const assistantText = extractTextFromContent(rec.content);\n if (assistantText && assistantText.length > 0) {\n return { kind: \"assistant\", text: assistantText };\n }\n }\n\n return null;\n}\n",
10
10
  "/**\n * Tool Helpers\n * \n * Helper functions for creating tool results and parsing parameters.\n * Matches the API from pi-coding-agent.\n */\n\nimport type { AgentToolResult } from \"./types.js\";\n\n/**\n * Create a JSON tool result\n */\nexport function jsonResult(payload: unknown): AgentToolResult<unknown> {\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(payload, null, 2),\n },\n ],\n details: payload,\n };\n}\n\n/**\n * Options for reading string parameters\n */\nexport interface StringParamOptions {\n required?: boolean;\n trim?: boolean;\n label?: string;\n allowEmpty?: boolean;\n}\n\n/**\n * Read a string parameter from tool args\n */\nexport function readStringParam(\n params: Record<string, unknown>,\n key: string,\n options?: StringParamOptions & { required: true },\n): string;\nexport function readStringParam(\n params: Record<string, unknown>,\n key: string,\n options?: StringParamOptions,\n): string | undefined;\nexport function readStringParam(\n params: Record<string, unknown>,\n key: string,\n options: StringParamOptions = {},\n): string | undefined {\n const { required = false, trim = true, label = key, allowEmpty = false } = options;\n const raw = params[key];\n if (typeof raw !== \"string\") {\n if (required) throw new Error(`${label} required`);\n return undefined;\n }\n const value = trim ? raw.trim() : raw;\n if (!value && !allowEmpty) {\n if (required) throw new Error(`${label} required`);\n return undefined;\n }\n return value;\n}\n\n/**\n * Read a number parameter from tool args\n */\nexport function readNumberParam(\n params: Record<string, unknown>,\n key: string,\n options: { required?: boolean; label?: string; integer?: boolean } = {},\n): number | undefined {\n const { required = false, label = key, integer = false } = options;\n const raw = params[key];\n let value: number | undefined;\n if (typeof raw === \"number\" && Number.isFinite(raw)) {\n value = raw;\n } else if (typeof raw === \"string\") {\n const trimmed = raw.trim();\n if (trimmed) {\n const parsed = Number.parseFloat(trimmed);\n if (Number.isFinite(parsed)) value = parsed;\n }\n }\n if (value === undefined) {\n if (required) throw new Error(`${label} required`);\n return undefined;\n }\n return integer ? Math.trunc(value) : value;\n}\n\n/**\n * Read a boolean parameter from tool args\n */\nexport function readBooleanParam(\n params: Record<string, unknown>,\n key: string,\n options: { required?: boolean; label?: string } = {},\n): boolean | undefined {\n const { required = false, label = key } = options;\n const raw = params[key];\n if (typeof raw === \"boolean\") {\n return raw;\n }\n if (typeof raw === \"string\") {\n const lower = raw.toLowerCase().trim();\n if (lower === \"true\" || lower === \"1\" || lower === \"yes\") return true;\n if (lower === \"false\" || lower === \"0\" || lower === \"no\") return false;\n }\n if (required) throw new Error(`${label} required`);\n return undefined;\n}\n\n/**\n * Read a string array parameter from tool args\n */\nexport function readStringArrayParam(\n params: Record<string, unknown>,\n key: string,\n options: StringParamOptions = {},\n): string[] | undefined {\n const { required = false, label = key } = options;\n const raw = params[key];\n if (Array.isArray(raw)) {\n const values = raw\n .filter((entry): entry is string => typeof entry === \"string\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n if (values.length === 0) {\n if (required) throw new Error(`${label} required`);\n return undefined;\n }\n return values;\n }\n if (typeof raw === \"string\") {\n const value = raw.trim();\n if (!value) {\n if (required) throw new Error(`${label} required`);\n return undefined;\n }\n return [value];\n }\n if (required) throw new Error(`${label} required`);\n return undefined;\n}\n",
11
11
  "/**\n * Letta Code SDK\n *\n * Programmatic control of Letta Code CLI with persistent agent memory.\n *\n * @example\n * ```typescript\n * import { createAgent, createSession, resumeSession, prompt } from '@letta-ai/letta-code-sdk';\n *\n * // Start session with default agent + new conversation (like `letta`)\n * const session = createSession();\n *\n * // Create a new agent explicitly\n * const agentId = await createAgent();\n *\n * // Resume default conversation on an agent\n * const session = resumeSession(agentId);\n *\n * // Resume specific conversation\n * const session = resumeSession('conv-xxx');\n *\n * // Create new conversation on specific agent\n * const session = createSession(agentId);\n *\n * // One-shot prompt (uses default agent)\n * const result = await prompt('Hello');\n * const result = await prompt('Hello', agentId); // specific agent\n * ```\n */\n\nimport { Session } from \"./session.js\";\nimport type { CreateSessionOptions, CreateAgentOptions, SDKResultMessage } from \"./types.js\";\nimport { validateCreateSessionOptions, validateCreateAgentOptions } from \"./validation.js\";\n\n// Re-export types\nexport type {\n CreateSessionOptions,\n CreateAgentOptions,\n SDKMessage,\n SDKInitMessage,\n SDKAssistantMessage,\n SDKToolCallMessage,\n SDKToolResultMessage,\n SDKReasoningMessage,\n SDKResultMessage,\n SDKStreamEventMessage,\n SDKStreamEventPayload,\n SDKStreamEventDeltaPayload,\n SDKStreamEventMessagePayload,\n SDKUnknownStreamEventPayload,\n SDKErrorMessage,\n SDKRetryMessage,\n SkillSource,\n SleeptimeOptions,\n SleeptimeTrigger,\n SleeptimeBehavior,\n EffectiveSleeptimeSettings,\n PermissionMode,\n CanUseToolCallback,\n CanUseToolResponse,\n CanUseToolResponseAllow,\n CanUseToolResponseDeny,\n // Multimodal content types\n TextContent,\n ImageContent,\n MessageContentItem,\n SendMessage,\n // List messages API\n ListMessagesOptions,\n ListMessagesResult,\n // Bootstrap API\n BootstrapStateOptions,\n BootstrapStateResult,\n // Tool types\n AgentTool,\n AgentToolResult,\n AgentToolResultContent,\n AgentToolUpdateCallback,\n AnyAgentTool,\n} from \"./types.js\";\n\nexport { Session } from \"./session.js\";\n\nexport { extractStreamTextDelta } from \"./stream-events.js\";\n\n// Tool helpers\nexport {\n jsonResult,\n readStringParam,\n readNumberParam,\n readBooleanParam,\n readStringArrayParam,\n} from \"./tool-helpers.js\";\n\n/**\n * Create a new agent with a default conversation.\n * Returns the agentId which can be used with resumeSession or createSession.\n *\n * @example\n * ```typescript\n * // Create agent with default settings\n * const agentId = await createAgent();\n *\n * // Create agent with custom memory\n * const agentId = await createAgent({\n * memory: ['persona', 'project'],\n * persona: 'You are a helpful coding assistant',\n * model: 'claude-sonnet-4'\n * });\n *\n * // Then resume the default conversation:\n * const session = resumeSession(agentId);\n * ```\n */\nexport async function createAgent(options: CreateAgentOptions = {}): Promise<string> {\n validateCreateAgentOptions(options);\n const session = new Session({ ...options, createOnly: true });\n const initMsg = await session.initialize();\n session.close();\n return initMsg.agentId;\n}\n\n/**\n * Create a new conversation (session).\n *\n * - Without agentId: uses default/LRU agent with new conversation (like `letta`)\n * - With agentId: creates new conversation on specified agent\n *\n * @example\n * ```typescript\n * // New conversation on default agent (like `letta`)\n * await using session = createSession();\n *\n * // New conversation on specific agent\n * await using session = createSession(agentId);\n * ```\n */\nexport function createSession(agentId?: string, options: CreateSessionOptions = {}): Session {\n validateCreateSessionOptions(options);\n if (agentId) {\n return new Session({ ...options, agentId, newConversation: true });\n } else {\n return new Session({ ...options, newConversation: true });\n }\n}\n\n/**\n * Resume an existing session.\n *\n * - Pass an agent ID (agent-xxx) to resume the default conversation\n * - Pass a conversation ID (conv-xxx) to resume a specific conversation\n *\n * The default conversation always exists after createAgent, so you can:\n * `createAgent()` → `resumeSession(agentId)` without needing createSession first.\n *\n * @example\n * ```typescript\n * // Resume default conversation\n * await using session = resumeSession(agentId);\n *\n * // Resume specific conversation\n * await using session = resumeSession('conv-xxx');\n * ```\n */\nexport function resumeSession(\n id: string,\n options: CreateSessionOptions = {}\n): Session {\n validateCreateSessionOptions(options);\n if (id.startsWith(\"conv-\")) {\n return new Session({ ...options, conversationId: id });\n } else {\n return new Session({ ...options, agentId: id, defaultConversation: true });\n }\n}\n\n/**\n * One-shot prompt convenience function.\n *\n * - Without agentId: uses default agent (like `letta -p`), new conversation\n * - With agentId: uses specific agent, new conversation\n *\n * @example\n * ```typescript\n * const result = await prompt('What is 2+2?'); // default agent\n * const result = await prompt('What is the capital of France?', agentId); // specific agent\n * ```\n */\nexport async function prompt(\n message: string,\n agentId?: string\n): Promise<SDKResultMessage> {\n // Use default agent behavior (like letta -p) when no agentId specified\n const session = agentId\n ? createSession(agentId)\n : createSession();\n\n try {\n await session.send(message);\n\n let result: SDKResultMessage | null = null;\n for await (const msg of session.stream()) {\n if (msg.type === \"result\") {\n result = msg;\n break;\n }\n }\n\n if (!result) {\n return {\n type: \"result\",\n success: false,\n error: \"No result received\",\n durationMs: 0,\n conversationId: session.conversationId,\n };\n }\n\n return result;\n } finally {\n session.close();\n }\n}\n\n// ═══════════════════════════════════════════════════════════════\n// SESSIONLESS APIs\n// ═══════════════════════════════════════════════════════════════\n\nimport type { ListMessagesOptions, ListMessagesResult } from \"./types.js\";\n\n/**\n * Fetch conversation messages without requiring a pre-existing session.\n *\n * Creates a transient CLI subprocess, fetches the requested message page, and\n * closes the subprocess. Useful for prefetching conversation histories before\n * opening a full session (e.g. desktop sidebar warm-up).\n *\n * Routing follows the same semantics as session.listMessages():\n * - Pass a conv-xxx conversationId to read a specific conversation.\n * - Omit conversationId to read the agent's default conversation.\n *\n * @param agentId - Agent ID to fetch messages for.\n * @param options - Pagination / filtering options (same as ListMessagesOptions).\n *\n * @example\n * ```typescript\n * // Prefetch default conversation\n * const { messages } = await listMessagesDirect(agentId);\n *\n * // Prefetch a specific conversation\n * const { messages, hasMore, nextBefore } = await listMessagesDirect(agentId, {\n * conversationId: 'conv-abc',\n * limit: 20,\n * order: 'desc',\n * });\n * ```\n */\nexport async function listMessagesDirect(\n agentId: string,\n options: ListMessagesOptions = {},\n): Promise<ListMessagesResult> {\n // resumeSession uses --default which maps to the agent's default conversation.\n // The session is transient: we only need it long enough to list messages.\n const session = resumeSession(agentId, {\n permissionMode: \"bypassPermissions\",\n // Use skip policy so we don't wait on a git pull for a read-only prefetch.\n memfsStartup: \"skip\",\n // Disable skills/reminders to minimise startup overhead.\n skillSources: [],\n systemInfoReminder: false,\n });\n await session.initialize();\n try {\n return await session.listMessages(options);\n } finally {\n session.close();\n }\n}\n\n// ═══════════════════════════════════════════════════════════════\n// IMAGE HELPERS\n// ═══════════════════════════════════════════════════════════════\n\nimport { readFileSync } from \"node:fs\";\nimport type { ImageContent } from \"./types.js\";\n\n/**\n * Create image content from a file path.\n * \n * @example\n * ```typescript\n * await session.send([\n * { type: \"text\", text: \"What's in this image?\" },\n * imageFromFile(\"./screenshot.png\")\n * ]);\n * ```\n */\nexport function imageFromFile(filePath: string): ImageContent {\n const data = readFileSync(filePath).toString(\"base64\");\n const ext = filePath.toLowerCase();\n const media_type: ImageContent[\"source\"][\"media_type\"] = \n ext.endsWith(\".png\") ? \"image/png\"\n : ext.endsWith(\".gif\") ? \"image/gif\"\n : ext.endsWith(\".webp\") ? \"image/webp\"\n : \"image/jpeg\";\n \n return {\n type: \"image\",\n source: { type: \"base64\", media_type, data }\n };\n}\n\n/**\n * Create image content from base64 data.\n * \n * @example\n * ```typescript\n * const base64 = fs.readFileSync(\"image.png\").toString(\"base64\");\n * await session.send([\n * { type: \"text\", text: \"Describe this\" },\n * imageFromBase64(base64, \"image/png\")\n * ]);\n * ```\n */\nexport function imageFromBase64(\n data: string,\n media_type: ImageContent[\"source\"][\"media_type\"] = \"image/png\"\n): ImageContent {\n return {\n type: \"image\",\n source: { type: \"base64\", media_type, data }\n };\n}\n\n/**\n * Create image content from a URL.\n * Fetches the image and converts to base64.\n * \n * @example\n * ```typescript\n * const img = await imageFromURL(\"https://example.com/image.png\");\n * await session.send([\n * { type: \"text\", text: \"What's this?\" },\n * img\n * ]);\n * ```\n */\nexport async function imageFromURL(url: string): Promise<ImageContent> {\n const response = await fetch(url);\n const buffer = await response.arrayBuffer();\n const data = Buffer.from(buffer).toString(\"base64\");\n \n // Detect media type from content-type header or URL\n const contentType = response.headers.get(\"content-type\");\n let media_type: ImageContent[\"source\"][\"media_type\"] = \"image/png\";\n \n if (contentType?.includes(\"jpeg\") || contentType?.includes(\"jpg\") || url.match(/\\.jpe?g$/i)) {\n media_type = \"image/jpeg\";\n } else if (contentType?.includes(\"gif\") || url.endsWith(\".gif\")) {\n media_type = \"image/gif\";\n } else if (contentType?.includes(\"webp\") || url.endsWith(\".webp\")) {\n media_type = \"image/webp\";\n }\n \n return {\n type: \"image\",\n source: { type: \"base64\", media_type, data }\n };\n}\n"
12
12
  ],
13
- "mappings": "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",
14
- "debugId": "965FE4FB5FC3709464756E2164756E21",
13
+ "mappings": "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",
14
+ "debugId": "52CE2385155AE64C64756E2164756E21",
15
15
  "names": []
16
16
  }
package/dist/session.d.ts CHANGED
@@ -18,6 +18,8 @@ export declare class Session implements AsyncDisposable {
18
18
  private pumpPromise;
19
19
  private pumpClosed;
20
20
  private droppedStreamMessages;
21
+ private sendGeneration;
22
+ private lastCompletedRunIds;
21
23
  private controlResponseWaiters;
22
24
  constructor(options?: InternalSessionOptions);
23
25
  /**
@@ -51,6 +53,8 @@ export declare class Session implements AsyncDisposable {
51
53
  private enqueueStreamMessage;
52
54
  private nextBufferedMessage;
53
55
  private resolveAllStreamWaiters;
56
+ private getMessageRunId;
57
+ private updateCompletedRunIds;
54
58
  /**
55
59
  * Register external tools with the CLI
56
60
  */
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,sBAAsB,EACtB,UAAU,EACV,cAAc,EAUd,WAAW,EAGX,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,YAAY,CAAC;AAcpB,qBAAa,OAAQ,YAAW,eAAe;IAqB3C,OAAO,CAAC,OAAO;IApBjB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,qBAAqB,CAAK;IAIlC,OAAO,CAAC,sBAAsB,CAG1B;gBAGM,OAAO,GAAE,sBAA2B;IAa9C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IA2F3C;;;;;;;;;;;;;;;OAeG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB/C;;OAEG;IACI,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC;IAgC3C,OAAO,CAAC,mBAAmB;YAgBb,iBAAiB;YAkFjB,oBAAoB;IA+BlC,OAAO,CAAC,oBAAoB;YAgBd,mBAAmB;IAcjC,OAAO,CAAC,uBAAuB;IAY/B;;OAEG;YACW,qBAAqB;IAqBnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;YACW,yBAAyB;IAwDvC;;OAEG;YACW,gBAAgB;IAsF9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;;;;;OAOG;IACG,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmDlF;;;;;;;;OAQG;IACG,cAAc,CAClB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC;IAqEhC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,GAAG,IAAI,CAElC;IAED;;OAEG;IACG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C;;OAEG;IACH,OAAO,CAAC,gBAAgB;CA0MzB"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,sBAAsB,EACtB,UAAU,EACV,cAAc,EAUd,WAAW,EAGX,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,YAAY,CAAC;AAoBpB,qBAAa,OAAQ,YAAW,eAAe;IA6B3C,OAAO,CAAC,OAAO;IA5BjB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,eAAe,CAA0D;IACjF,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,qBAAqB,CAAK;IAKlC,OAAO,CAAC,cAAc,CAAK;IAG3B,OAAO,CAAC,mBAAmB,CAAqB;IAIhD,OAAO,CAAC,sBAAsB,CAG1B;gBAGM,OAAO,GAAE,sBAA2B;IAa9C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IA6F3C;;;;;;;;;;;;;;;OAeG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B/C;;OAEG;IACI,MAAM,IAAI,cAAc,CAAC,UAAU,CAAC;IA2D3C,OAAO,CAAC,mBAAmB;YAgBb,iBAAiB;YAkFjB,oBAAoB;IA+BlC,OAAO,CAAC,oBAAoB;YAsBd,mBAAmB;IAcjC,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;YACW,qBAAqB;IAqBnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;YACW,yBAAyB;IAwDvC;;OAEG;YACW,gBAAgB;IAsF9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;;;;;OAOG;IACG,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmDlF;;;;;;;;OAQG;IACG,cAAc,CAClB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC;IAqEhC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,GAAG,IAAI,CAElC;IAED;;OAEG;IACG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAsNzB"}
@@ -21,6 +21,7 @@ export declare class SubprocessTransport {
21
21
  private agentId?;
22
22
  private wireMessageCount;
23
23
  private lastMessageAt;
24
+ private stderrLines;
24
25
  constructor(options?: InternalSessionOptions);
25
26
  /**
26
27
  * Start the CLI subprocess
@@ -43,6 +44,8 @@ export declare class SubprocessTransport {
43
44
  */
44
45
  close(): void;
45
46
  get isClosed(): boolean;
47
+ /** Return buffered stderr output from the CLI subprocess. */
48
+ getStderr(): string;
46
49
  private handleMessage;
47
50
  private buildArgs;
48
51
  private findCli;
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAOtE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAwKtE;AAED,qBAAa,mBAAmB;IAW5B,OAAO,CAAC,OAAO;IAVjB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,gBAAgB,CAAgD;IACxE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,aAAa,CAAK;gBAGhB,OAAO,GAAE,sBAA2B;IAG9C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA6E9B;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAmBzC;;OAEG;IACI,QAAQ,IAAI,cAAc,CAAC,WAAW,CAAC;IAW9C;;OAEG;IACH,KAAK,IAAI,IAAI;IAgBb,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,SAAS;YAMH,OAAO;CA4CtB"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAOtE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAwKtE;AAED,qBAAa,mBAAmB;IAY5B,OAAO,CAAC,OAAO;IAXjB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,gBAAgB,CAAgD;IACxE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,WAAW,CAAgB;gBAGzB,OAAO,GAAE,sBAA2B;IAG9C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+E9B;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAmBzC;;OAEG;IACI,QAAQ,IAAI,cAAc,CAAC,WAAW,CAAC;IAW9C;;OAEG;IACH,KAAK,IAAI,IAAI;IAgBb,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,6DAA6D;IAC7D,SAAS,IAAI,MAAM;IAInB,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,SAAS;YAMH,OAAO;CA4CtB"}
package/dist/types.d.ts CHANGED
@@ -303,6 +303,8 @@ export interface SDKAssistantMessage {
303
303
  type: "assistant";
304
304
  content: string;
305
305
  uuid: string;
306
+ /** Run ID from the Letta API for this event (used for stale-run detection). */
307
+ runId?: string;
306
308
  }
307
309
  export interface SDKToolCallMessage {
308
310
  type: "tool_call";
@@ -312,6 +314,8 @@ export interface SDKToolCallMessage {
312
314
  /** Raw unparsed arguments string from the wire for consumer-side accumulation. */
313
315
  rawArguments?: string;
314
316
  uuid: string;
317
+ /** Run ID from the Letta API for this event (used for stale-run detection). */
318
+ runId?: string;
315
319
  }
316
320
  export interface SDKToolResultMessage {
317
321
  type: "tool_result";
@@ -319,11 +323,15 @@ export interface SDKToolResultMessage {
319
323
  content: string;
320
324
  isError: boolean;
321
325
  uuid: string;
326
+ /** Run ID from the Letta API for this event (used for stale-run detection). */
327
+ runId?: string;
322
328
  }
323
329
  export interface SDKReasoningMessage {
324
330
  type: "reasoning";
325
331
  content: string;
326
332
  uuid: string;
333
+ /** Run ID from the Letta API for this event (used for stale-run detection). */
334
+ runId?: string;
327
335
  }
328
336
  export interface SDKResultMessage {
329
337
  type: "result";
@@ -334,6 +342,8 @@ export interface SDKResultMessage {
334
342
  durationMs: number;
335
343
  totalCostUsd?: number;
336
344
  conversationId: string | null;
345
+ /** Run IDs associated with this turn (if provided by the CLI). */
346
+ runIds?: string[];
337
347
  }
338
348
  export interface SDKStreamEventDeltaPayload {
339
349
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letta-ai/letta-code-sdk",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "SDK for programmatic control of Letta Code CLI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -28,7 +28,7 @@
28
28
  "url": "https://github.com/letta-ai/letta-code-sdk"
29
29
  },
30
30
  "dependencies": {
31
- "@letta-ai/letta-code": "0.16.9"
31
+ "@letta-ai/letta-code": "0.17.1"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/bun": "latest",