@providerprotocol/agents 0.0.3 → 0.0.4

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025, 2026 ProviderProtocol
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,5 +1,5 @@
1
- import { F as FileCheckpointOptions, C as CheckpointStore } from '../types-BhX9uD_d.js';
2
- export { b as CheckpointData, a as CheckpointMetadata } from '../types-BhX9uD_d.js';
1
+ import { F as FileCheckpointOptions, C as CheckpointStore } from '../types-DChRdQoX.js';
2
+ export { b as CheckpointData, a as CheckpointMetadata } from '../types-DChRdQoX.js';
3
3
  import '../types-2Vsthzyu.js';
4
4
  import '@providerprotocol/ai';
5
5
 
@@ -40,6 +40,15 @@ function fileCheckpoints(options = {}) {
40
40
  return null;
41
41
  }
42
42
  },
43
+ async loadMetadata(sessionId) {
44
+ const { metadataPath } = getPaths(sessionId);
45
+ try {
46
+ const content = await readFile(metadataPath, "utf-8");
47
+ return JSON.parse(content);
48
+ } catch {
49
+ return null;
50
+ }
51
+ },
43
52
  async delete(sessionId) {
44
53
  const sessionDir = join(dir, sessionId);
45
54
  try {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/checkpoint/file.ts"],"names":[],"mappings":";;;;AAcA,IAAM,WAAA,GAAc,cAAA;AA6Bb,SAAS,eAAA,CAAgB,OAAA,GAAiC,EAAC,EAAoB;AACpF,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,IAAO,WAAA;AAK3B,EAAA,eAAe,iBAAiB,SAAA,EAAoC;AAClE,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAK,SAAS,CAAA;AACtC,IAAA,MAAM,KAAA,CAAM,UAAA,EAAY,EAAE,SAAA,EAAW,MAAM,CAAA;AAC3C,IAAA,OAAO,UAAA;AAAA,EACT;AAKA,EAAA,SAAS,SAAS,SAAA,EAAqE;AACrF,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAK,SAAS,CAAA;AACtC,IAAA,OAAO;AAAA,MACL,cAAA,EAAgB,IAAA,CAAK,UAAA,EAAY,iBAAiB,CAAA;AAAA,MAClD,YAAA,EAAc,IAAA,CAAK,UAAA,EAAY,eAAe;AAAA,KAChD;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,CAAK,SAAA,EAAmB,KAAA,EAAsC;AAClE,MAAA,MAAM,iBAAiB,SAAS,CAAA;AAChC,MAAA,MAAM,EAAE,cAAA,EAAgB,YAAA,EAAa,GAAI,SAAS,SAAS,CAAA;AAG3D,MAAA,MAAM,QAAA,GAA+B;AAAA,QACnC,SAAA;AAAA,QACA,cAAc,YAAA,EAAa;AAAA,QAC3B,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,OAAA,EAAS,KAAA,CAAM,QAAA,CAAS,OAAA,IAAqB;AAAA,OAC/C;AAGA,MAAA,MAAM,SAAA,CAAU,gBAAgB,IAAA,CAAK,SAAA,CAAU,OAAO,IAAA,EAAM,CAAC,GAAG,OAAO,CAAA;AACvE,MAAA,MAAM,SAAA,CAAU,cAAc,IAAA,CAAK,SAAA,CAAU,UAAU,IAAA,EAAM,CAAC,GAAG,OAAO,CAAA;AAAA,IAC1E,CAAA;AAAA,IAEA,MAAM,KAAK,SAAA,EAAmD;AAC5D,MAAA,MAAM,EAAE,cAAA,EAAe,GAAI,QAAA,CAAS,SAAS,CAAA;AAE7C,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,cAAA,EAAgB,OAAO,CAAA;AACtD,QAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MAC3B,CAAA,CAAA,MAAQ;AAEN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,OAAO,SAAA,EAAkC;AAC7C,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,EAAK,SAAS,CAAA;AACtC,MAAA,IAAI;AACF,QAAA,MAAM,GAAG,UAAA,EAAY,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,MACvD,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,IAAA,GAA0B;AAC9B,MAAA,IAAI;AAEF,QAAA,MAAM,KAAA,CAAM,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AAEpC,QAAA,MAAM,UAAU,MAAM,OAAA,CAAQ,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC1D,QAAA,OAAO,OAAA,CACJ,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,WAAA,EAAa,CAAA,CACrC,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,IAAI,CAAA;AAAA,MAC9B,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF;AAAA,GACF;AACF","file":"index.js","sourcesContent":["/**\n * File-based Checkpoint Store\n *\n * Reference implementation of CheckpointStore using the filesystem.\n *\n * @see UAP-1.0 Spec Section 12.4.3\n */\n\nimport { mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { AgentStateJSON } from '../state/types.ts';\nimport type { CheckpointStore, FileCheckpointOptions, CheckpointMetadata } from './types.ts';\nimport { generateUUID } from '../utils/uuid.ts';\n\nconst DEFAULT_DIR = '.checkpoints';\n\n/**\n * Create a file-based checkpoint store.\n *\n * Stores checkpoints as JSON files in a directory structure:\n * ```\n * {dir}/\n * {sessionId}/\n * checkpoint.json # Latest state\n * metadata.json # Session metadata\n * ```\n *\n * @param options - Configuration options\n * @returns CheckpointStore implementation\n *\n * @example\n * ```typescript\n * import { fileCheckpoints } from '@providerprotocol/agents/checkpoint';\n *\n * const store = fileCheckpoints({ dir: './my-checkpoints' });\n *\n * // Save a checkpoint\n * await store.save('session-123', state.toJSON());\n *\n * // Load a checkpoint\n * const saved = await store.load('session-123');\n * ```\n */\nexport function fileCheckpoints(options: FileCheckpointOptions = {}): CheckpointStore {\n const dir = options.dir ?? DEFAULT_DIR;\n\n /**\n * Ensure session directory exists.\n */\n async function ensureSessionDir(sessionId: string): Promise<string> {\n const sessionDir = join(dir, sessionId);\n await mkdir(sessionDir, { recursive: true });\n return sessionDir;\n }\n\n /**\n * Get paths for checkpoint files.\n */\n function getPaths(sessionId: string): { checkpointPath: string; metadataPath: string } {\n const sessionDir = join(dir, sessionId);\n return {\n checkpointPath: join(sessionDir, 'checkpoint.json'),\n metadataPath: join(sessionDir, 'metadata.json'),\n };\n }\n\n return {\n async save(sessionId: string, state: AgentStateJSON): Promise<void> {\n await ensureSessionDir(sessionId);\n const { checkpointPath, metadataPath } = getPaths(sessionId);\n\n // Build metadata\n const metadata: CheckpointMetadata = {\n sessionId,\n checkpointId: generateUUID(),\n timestamp: new Date().toISOString(),\n step: state.step,\n agentId: state.metadata.agentId as string ?? 'unknown',\n };\n\n // Write checkpoint first, then metadata (sequential to avoid race conditions)\n await writeFile(checkpointPath, JSON.stringify(state, null, 2), 'utf-8');\n await writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8');\n },\n\n async load(sessionId: string): Promise<AgentStateJSON | null> {\n const { checkpointPath } = getPaths(sessionId);\n\n try {\n const content = await readFile(checkpointPath, 'utf-8');\n return JSON.parse(content) as AgentStateJSON;\n } catch {\n // File doesn't exist or is invalid\n return null;\n }\n },\n\n async delete(sessionId: string): Promise<void> {\n const sessionDir = join(dir, sessionId);\n try {\n await rm(sessionDir, { recursive: true, force: true });\n } catch {\n // Directory might not exist, ignore\n }\n },\n\n async list(): Promise<string[]> {\n try {\n // Ensure base directory exists\n await mkdir(dir, { recursive: true });\n\n const entries = await readdir(dir, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name);\n } catch {\n return [];\n }\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/checkpoint/file.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * File-based Checkpoint Store\n *\n * Reference implementation of CheckpointStore using the filesystem.\n *\n * @see UAP-1.0 Spec Section 12.4.3\n */\n\nimport { mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { AgentStateJSON } from '../state/types.ts';\nimport type { CheckpointStore, FileCheckpointOptions, CheckpointMetadata } from './types.ts';\nimport { generateUUID } from '../utils/uuid.ts';\n\nconst DEFAULT_DIR = '.checkpoints';\n\n/**\n * Create a file-based checkpoint store.\n *\n * Stores checkpoints as JSON files in a directory structure:\n * ```\n * {dir}/\n * {sessionId}/\n * checkpoint.json # Latest state\n * metadata.json # Session metadata\n * ```\n *\n * @param options - Configuration options\n * @returns CheckpointStore implementation\n *\n * @example\n * ```typescript\n * import { fileCheckpoints } from '@providerprotocol/agents/checkpoint';\n *\n * const store = fileCheckpoints({ dir: './my-checkpoints' });\n *\n * // Save a checkpoint\n * await store.save('session-123', state.toJSON());\n *\n * // Load a checkpoint\n * const saved = await store.load('session-123');\n * ```\n */\nexport function fileCheckpoints(options: FileCheckpointOptions = {}): CheckpointStore {\n const dir = options.dir ?? DEFAULT_DIR;\n\n /**\n * Ensure session directory exists.\n */\n async function ensureSessionDir(sessionId: string): Promise<string> {\n const sessionDir = join(dir, sessionId);\n await mkdir(sessionDir, { recursive: true });\n return sessionDir;\n }\n\n /**\n * Get paths for checkpoint files.\n */\n function getPaths(sessionId: string): { checkpointPath: string; metadataPath: string } {\n const sessionDir = join(dir, sessionId);\n return {\n checkpointPath: join(sessionDir, 'checkpoint.json'),\n metadataPath: join(sessionDir, 'metadata.json'),\n };\n }\n\n return {\n async save(sessionId: string, state: AgentStateJSON): Promise<void> {\n await ensureSessionDir(sessionId);\n const { checkpointPath, metadataPath } = getPaths(sessionId);\n\n // Build metadata\n const metadata: CheckpointMetadata = {\n sessionId,\n checkpointId: generateUUID(),\n timestamp: new Date().toISOString(),\n step: state.step,\n agentId: state.metadata.agentId as string ?? 'unknown',\n };\n\n // Write checkpoint first, then metadata (sequential to avoid race conditions)\n await writeFile(checkpointPath, JSON.stringify(state, null, 2), 'utf-8');\n await writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8');\n },\n\n async load(sessionId: string): Promise<AgentStateJSON | null> {\n const { checkpointPath } = getPaths(sessionId);\n\n try {\n const content = await readFile(checkpointPath, 'utf-8');\n return JSON.parse(content) as AgentStateJSON;\n } catch {\n // File doesn't exist or is invalid\n return null;\n }\n },\n\n async loadMetadata(sessionId: string): Promise<CheckpointMetadata | null> {\n const { metadataPath } = getPaths(sessionId);\n\n try {\n const content = await readFile(metadataPath, 'utf-8');\n return JSON.parse(content) as CheckpointMetadata;\n } catch {\n // File doesn't exist or is invalid\n return null;\n }\n },\n\n async delete(sessionId: string): Promise<void> {\n const sessionDir = join(dir, sessionId);\n try {\n await rm(sessionDir, { recursive: true, force: true });\n } catch {\n // Directory might not exist, ignore\n }\n },\n\n async list(): Promise<string[]> {\n try {\n // Ensure base directory exists\n await mkdir(dir, { recursive: true });\n\n const entries = await readdir(dir, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name);\n } catch {\n return [];\n }\n },\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { generateUUID } from './chunk-EKRXMSDX.js';
2
- import { UserMessage, AssistantMessage, ToolResultMessage } from '@providerprotocol/ai';
2
+ import { isUserMessage, isAssistantMessage, isToolResultMessage, ToolResultMessage, AssistantMessage, UserMessage } from '@providerprotocol/ai';
3
3
 
4
4
  // src/state/types.ts
5
5
  var UAP_VERSION = "1.0.0";
@@ -184,14 +184,14 @@ var AgentState = class _AgentState {
184
184
  }
185
185
  };
186
186
  function serializeMessage(message) {
187
- if (message instanceof UserMessage) {
187
+ if (isUserMessage(message)) {
188
188
  return {
189
189
  role: "user",
190
190
  content: message.content,
191
191
  metadata: message.metadata
192
192
  };
193
193
  }
194
- if (message instanceof AssistantMessage) {
194
+ if (isAssistantMessage(message)) {
195
195
  return {
196
196
  role: "assistant",
197
197
  content: {
@@ -201,7 +201,7 @@ function serializeMessage(message) {
201
201
  metadata: message.metadata
202
202
  };
203
203
  }
204
- if (message instanceof ToolResultMessage) {
204
+ if (isToolResultMessage(message)) {
205
205
  return {
206
206
  role: "tool_result",
207
207
  content: message.results,
@@ -423,5 +423,5 @@ var ThreadTree = class _ThreadTree {
423
423
  };
424
424
 
425
425
  export { AgentState, ThreadNode, ThreadTree };
426
- //# sourceMappingURL=chunk-PHI5ULBV.js.map
427
- //# sourceMappingURL=chunk-PHI5ULBV.js.map
426
+ //# sourceMappingURL=chunk-T47B3VAF.js.map
427
+ //# sourceMappingURL=chunk-T47B3VAF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/state/types.ts","../src/state/index.ts","../src/thread-tree/index.ts"],"names":[],"mappings":";;;;AA4KO,IAAM,WAAA,GAAc,OAAA;;;AC/IpB,IAAM,UAAA,GAAN,MAAM,WAAA,CAA0C;AAAA,EAC5C,EAAA;AAAA,EAEA,QAAA;AAAA,EAEA,IAAA;AAAA,EAEA,QAAA;AAAA,EAEA,SAAA;AAAA,EAEA,IAAA;AAAA,EAEA,cAAA;AAAA,EAED,YACN,EAAA,EACA,QAAA,EACA,MACA,QAAA,EACA,SAAA,EACA,MACA,cAAA,EACA;AACA,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAA,GAAsB;AAC3B,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,YAAA,EAAa;AAAA,MACb,EAAC;AAAA,MACD,CAAA;AAAA,MACA,EAAC;AAAA,MACD,EAAC;AAAA,MACD,MAAA;AAAA,MACA;AAAC,KACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,OAAA,EAA8B;AACxC,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,YAAA,EAAa;AAAA,MACb,CAAC,GAAG,IAAA,CAAK,QAAA,EAAU,OAAO,CAAA;AAAA,MAC1B,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,QAAA,EAAiC;AAC5C,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,YAAA,EAAa;AAAA,MACb,CAAC,GAAG,IAAA,CAAK,QAAA,EAAU,GAAG,QAAQ,CAAA;AAAA,MAC9B,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,QAAA,EAAiC;AAC3C,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,YAAA,EAAa;AAAA,MACb,CAAC,GAAG,QAAQ,CAAA;AAAA,MACZ,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,IAAA,EAA0B;AACjC,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,YAAA,EAAa;AAAA,MACb,IAAA,CAAK,QAAA;AAAA,MACL,IAAA;AAAA,MACA,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,CAAa,KAAa,KAAA,EAA4B;AACpD,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,YAAA,EAAa;AAAA,MACb,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,EAAE,GAAG,IAAA,CAAK,UAAU,CAAC,GAAG,GAAG,KAAA,EAAM;AAAA,MACjC,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,SAAA,EAA+B;AAC3C,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,YAAA,EAAa;AAAA,MACb,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,CAAC,GAAG,IAAA,CAAK,SAAA,EAAW,SAAS,CAAA;AAAA,MAC7B,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,IAAA,EAA8B;AACrC,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,YAAA,EAAa;AAAA,MACb,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,CAAC,GAAG,IAAI,CAAA;AAAA,MACR,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,KAAA,EAA2C;AAC3D,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,YAAA,EAAa;AAAA,MACb,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,CAAC,GAAG,IAAA,CAAK,cAAA,EAAgB,KAAK;AAAA,KAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAAyB;AACvB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,WAAA;AAAA,MACT,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,QAAA,EAAU,KAAK,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,KAAQ,gBAAA,CAAiB,GAAG,CAAC,CAAA;AAAA,MAC1D,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAA,EAAU,EAAE,GAAG,IAAA,CAAK,QAAA,EAAS;AAAA,MAC7B,SAAA,EAAW,CAAC,GAAG,IAAA,CAAK,SAAS,CAAA;AAAA,MAC7B,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAE,CAAE,CAAA,GAAI,MAAA;AAAA,MACrD,cAAA,EAAgB,IAAA,CAAK,cAAA,CAAe,MAAA,GAAS,IACzC,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,GAAI,CAAA,GACzC;AAAA,KACN;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,IAAA,EAAkC;AAChD,IAAA,IAAI,IAAA,CAAK,YAAY,WAAA,EAAa;AAChC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,KAAK,OAAO,CAAA,YAAA,EAAe,WAAW,CAAA,CAAE,CAAA;AAAA,IACtF;AAEA,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,IAAA,CAAK,EAAA;AAAA,MACL,KAAK,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,KAAQ,kBAAA,CAAmB,GAAG,CAAC,CAAA;AAAA,MAClD,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAE,CAAE,CAAA,GAAI,MAAA;AAAA,MAC/C,IAAA,CAAK,cAAA,GAAiB,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAE,CAAE,CAAA,GAAI;AAAC,KACtE;AAAA,EACF;AACF;AAKA,SAAS,iBAAiB,OAAA,EAA+B;AACvD,EAAA,IAAI,aAAA,CAAc,OAAO,CAAA,EAAG;AAC1B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,UAAU,OAAA,CAAQ;AAAA,KACpB;AAAA,EACF;AACA,EAAA,IAAI,kBAAA,CAAmB,OAAO,CAAA,EAAG;AAC/B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACP,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,WAAW,OAAA,CAAQ;AAAA,OACrB;AAAA,MACA,UAAU,OAAA,CAAQ;AAAA,KACpB;AAAA,EACF;AACA,EAAA,IAAI,mBAAA,CAAoB,OAAO,CAAA,EAAG;AAChC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,aAAA;AAAA,MACN,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,UAAU,OAAA,CAAQ;AAAA,KACpB;AAAA,EACF;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,OAAO,OAAO,CAAA,CAAE,CAAA;AAC3D;AAKA,SAAS,mBAAmB,IAAA,EAA4B;AACtD,EAAA,QAAQ,KAAK,IAAA;AAAM,IACjB,KAAK,MAAA;AACH,MAAA,OAAO,IAAI,WAAA;AAAA,QACT,IAAA,CAAK,OAAA;AAAA,QACL,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA;AAAS,OAC5B;AAAA,IACF,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,mBAAmB,IAAA,CAAK,OAAA;AAI9B,MAAA,OAAO,IAAI,gBAAA;AAAA,QACT,gBAAA,CAAiB,OAAA;AAAA,QACjB,gBAAA,CAAiB,SAAA;AAAA,QACjB,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA;AAAS,OAC5B;AAAA,IACF;AAAA,IACA,KAAK,aAAA;AACH,MAAA,OAAO,IAAI,iBAAA;AAAA,QACT,IAAA,CAAK,OAAA;AAAA,QACL,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA;AAAS,OAC5B;AAAA,IACF;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA;AAE1D;;;AClSO,IAAM,UAAA,GAAN,MAAM,WAAA,CAAW;AAAA;AAAA,EAEb,EAAA;AAAA;AAAA,EAGA,QAAA;AAAA;AAAA,EAGT,KAAA;AAAA;AAAA,EAGA,IAAA;AAAA;AAAA,EAGS,QAAA;AAAA,EAET,YACE,EAAA,EACA,QAAA,EACA,OACA,IAAA,EACA,QAAA,GAAqB,EAAC,EACtB;AACA,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAAyB;AACvB,IAAA,OAAO;AAAA,MACL,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO;AAAA,MACzB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,QAAA,EAAU,CAAC,GAAG,IAAA,CAAK,QAAQ;AAAA,KAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,IAAA,EAAkC;AAChD,IAAA,OAAO,IAAI,WAAA;AAAA,MACT,IAAA,CAAK,EAAA;AAAA,MACL,IAAA,CAAK,QAAA;AAAA,MACL,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAAA,MAC9B,IAAA,CAAK,IAAA;AAAA,MACL,CAAC,GAAG,IAAA,CAAK,QAAQ;AAAA,KACnB;AAAA,EACF;AACF;AAMO,IAAM,UAAA,GAAN,MAAM,WAAA,CAAW;AAAA;AAAA,EAEb,IAAA;AAAA;AAAA,EAGD,WAAA;AAAA;AAAA,EAGC,KAAA;AAAA,EAET,YAAY,IAAA,EAAmB;AAC7B,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,MAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,MAAA,IAAA,CAAK,KAAA,uBAAY,GAAA,CAAI,CAAC,CAAC,IAAA,CAAK,EAAA,EAAI,IAAI,CAAC,CAAC,CAAA;AAAA,IACxC,CAAA,MAAO;AACL,MAAA,MAAM,WAAW,IAAI,UAAA;AAAA,QACnB,YAAA,EAAa;AAAA,QACb,IAAA;AAAA,QACA,WAAW,OAAA,EAAQ;AAAA,QACnB;AAAA,OACF;AACA,MAAA,IAAA,CAAK,IAAA,GAAO,QAAA;AACZ,MAAA,IAAA,CAAK,WAAA,GAAc,QAAA;AACnB,MAAA,IAAA,CAAK,KAAA,uBAAY,GAAA,CAAI,CAAC,CAAC,QAAA,CAAS,EAAA,EAAI,QAAQ,CAAC,CAAC,CAAA;AAAA,IAChD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAA,GAAsB;AACxB,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAA,CAAO,QAAgB,IAAA,EAAuB;AAC5C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,UAAU,IAAI,UAAA;AAAA,MAClB,YAAA,EAAa;AAAA,MACb,MAAA;AAAA,MACA,MAAA,CAAO,KAAA;AAAA;AAAA,MACP;AAAA,KACF;AAGA,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,EAAE,CAAA;AAG/B,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAA;AAElC,IAAA,OAAO,OAAA,CAAQ,EAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,MAAA,EAAsB;AAC7B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAClC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAA,GAAsB;AACpB,IAAA,OAAO,KAAK,WAAA,CAAY,KAAA,CACrB,aAAa,mBAAA,EAAqB,IAAA,CAAK,YAAY,EAAE,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAA,GAAsB;AACpB,IAAA,MAAM,SAAmB,EAAC;AAE1B,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,IAAI,CAAA,IAAK,KAAK,KAAA,EAAO;AACnC,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAC9B,QAAA,MAAA,CAAO,KAAK,EAAE,CAAA;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAA,GAA+C;AAC7C,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAgC;AAErD,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,IAAI,CAAA,IAAK,KAAK,KAAA,EAAO;AACnC,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,QAAA,CAAS,GAAA,CAAI,EAAA,EAAI,IAAA,CAAK,IAAI,CAAA;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAAyB;AACvB,IAAA,MAAM,QAA0B,EAAC;AAEjC,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO,EAAG;AACtC,MAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,CAAA;AAAA,IAC1B;AAEA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,KAAK,IAAA,CAAK,EAAA;AAAA,MAClB,SAAA,EAAW,KAAK,WAAA,CAAY,EAAA;AAAA,MAC5B;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAS,IAAA,EAAkC;AAEhD,IAAA,MAAM,QAAA,uBAAe,GAAA,EAAwB;AAE7C,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,KAAA,EAAO;AACjC,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,QAAA,CAAS,QAAQ,CAAA;AACzC,MAAA,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,IAC5B;AAGA,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA;AACrC,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA;AAE3C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,IAAA,CAAK,SAAS,CAAA,CAAE,CAAA;AAAA,IAC7D;AAGA,IAAA,MAAM,IAAA,GAAO,IAAI,WAAA,CAAW,IAAI,CAAA;AAGhC,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AACjB,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,IAAI,CAAA,IAAK,QAAA,EAAU;AACjC,MAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,EAAA,EAAI,IAAI,CAAA;AAAA,IACzB;AAGA,IAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,EAAE,CAAA;AAExB,IAAA,OAAO,IAAA;AAAA,EACT;AACF","file":"chunk-T47B3VAF.js","sourcesContent":["import type { Message, MessageMetadata, TokenUsage } from '@providerprotocol/ai';\n\n/**\n * Status of a plan step during execution.\n */\nexport type PlanStepStatus = 'pending' | 'in_progress' | 'completed' | 'failed';\n\n/**\n * A single tool execution trace from a sub-agent.\n * Per UAP spec Section 8.8.\n */\nexport interface ToolExecutionTrace {\n /** Name of the tool */\n toolName: string;\n /** Tool call ID */\n toolCallId?: string;\n /** Arguments passed to the tool */\n arguments: Record<string, unknown>;\n /** Tool result */\n result: string;\n /** Whether the tool errored */\n isError?: boolean;\n /** Execution time in milliseconds */\n duration?: number;\n}\n\n/**\n * Sub-agent execution trace for checkpoint persistence.\n * Per UAP spec Section 8.8.\n */\nexport interface SubagentExecutionTrace {\n /** Unique ID of the sub-agent instance */\n subagentId: string;\n /** Type/name of the sub-agent */\n subagentType: string;\n /** Tool call ID that spawned this sub-agent */\n parentToolCallId: string;\n /** The task given to the sub-agent */\n prompt: string;\n /** Start timestamp (ms since epoch) */\n startTime: number;\n /** End timestamp (ms since epoch) */\n endTime: number;\n /** Whether execution succeeded */\n success: boolean;\n /** Sub-agent's response (if successful) */\n result?: string;\n /** Error message (if failed) */\n error?: string;\n /** Tools used by sub-agent */\n toolExecutions?: ToolExecutionTrace[];\n /** Token usage for sub-agent */\n usage?: TokenUsage;\n}\n\n/**\n * Serialized form of SubagentExecutionTrace.\n */\nexport interface SubagentExecutionTraceJSON {\n subagentId: string;\n subagentType: string;\n parentToolCallId: string;\n prompt: string;\n startTime: number;\n endTime: number;\n success: boolean;\n result?: string;\n error?: string;\n toolExecutions?: ToolExecutionTrace[];\n usage?: TokenUsage;\n}\n\n/**\n * A single step in an execution plan.\n */\nexport interface PlanStep {\n /** Unique step identifier */\n id: string;\n /** Description of what this step does */\n description: string;\n /** Tool to use (if applicable) */\n tool?: string;\n /** IDs of steps this depends on */\n dependsOn: string[];\n /** Current status */\n status: PlanStepStatus;\n}\n\n/**\n * Serialized form of a PlanStep.\n */\nexport interface PlanStepJSON {\n id: string;\n description: string;\n tool?: string;\n dependsOn: string[];\n status: PlanStepStatus;\n}\n\n/**\n * Serialized form of AgentState for persistence.\n */\nexport interface AgentStateJSON {\n /** UAP version */\n version: string;\n /** State snapshot ID */\n id: string;\n /** Serialized messages */\n messages: MessageJSON[];\n /** Current step number */\n step: number;\n /** User-defined metadata */\n metadata: Record<string, unknown>;\n /** Reasoning traces (for ReAct) */\n reasoning: string[];\n /** Execution plan (for Plan strategy) */\n plan?: PlanStepJSON[];\n /** Sub-agent execution traces (per UAP spec Section 8.8) */\n subagentTraces?: SubagentExecutionTraceJSON[];\n}\n\n/**\n * Serialized form of a Message.\n * This preserves the UPP Message structure for serialization.\n */\nexport interface MessageJSON {\n role: 'user' | 'assistant' | 'tool_result';\n content: unknown;\n metadata?: MessageMetadata;\n}\n\n/**\n * Interface for AgentState operations.\n * All operations return new instances (immutable).\n */\nexport interface AgentStateInterface {\n /** State snapshot ID (UUIDv4) */\n readonly id: string;\n /** Conversation history (UPP Messages) */\n readonly messages: readonly Message[];\n /** Current step number */\n readonly step: number;\n /** User-defined metadata */\n readonly metadata: Readonly<Record<string, unknown>>;\n /** Reasoning traces (for ReAct) */\n readonly reasoning: readonly string[];\n /** Execution plan (for Plan strategy) */\n readonly plan: readonly PlanStep[] | undefined;\n /** Sub-agent execution traces (per UAP spec Section 8.8) */\n readonly subagentTraces: readonly SubagentExecutionTrace[];\n\n /** Return new state with message added */\n withMessage(message: Message): AgentStateInterface;\n /** Return new state with messages added */\n withMessages(messages: Message[]): AgentStateInterface;\n /** Return new state with context replaced (all messages) */\n withContext(messages: Message[]): AgentStateInterface;\n /** Return new state with updated step */\n withStep(step: number): AgentStateInterface;\n /** Return new state with metadata entry */\n withMetadata(key: string, value: unknown): AgentStateInterface;\n /** Return new state with reasoning added */\n withReasoning(reasoning: string): AgentStateInterface;\n /** Return new state with plan set */\n withPlan(plan: PlanStep[]): AgentStateInterface;\n /** Return new state with sub-agent trace added */\n withSubagentTrace(trace: SubagentExecutionTrace): AgentStateInterface;\n /** Serialize to JSON */\n toJSON(): AgentStateJSON;\n}\n\n/** UAP version for serialization */\nexport const UAP_VERSION = '1.0.0';\n","import type {\n Message,\n UserContent,\n AssistantContent,\n ToolCall,\n ToolResult,\n} from '@providerprotocol/ai';\nimport {\n UserMessage,\n AssistantMessage,\n ToolResultMessage,\n isUserMessage,\n isAssistantMessage,\n isToolResultMessage,\n} from '@providerprotocol/ai';\nimport { generateUUID } from '../utils/uuid.ts';\nimport type {\n AgentStateInterface,\n AgentStateJSON,\n PlanStep,\n MessageJSON,\n SubagentExecutionTrace,\n} from './types.ts';\nimport { UAP_VERSION } from './types.ts';\n\n/**\n * Immutable agent state snapshot.\n * All operations return new instances - the original state is never mutated.\n */\nexport class AgentState implements AgentStateInterface {\n readonly id: string;\n\n readonly messages: readonly Message[];\n\n readonly step: number;\n\n readonly metadata: Readonly<Record<string, unknown>>;\n\n readonly reasoning: readonly string[];\n\n readonly plan: readonly PlanStep[] | undefined;\n\n readonly subagentTraces: readonly SubagentExecutionTrace[];\n\n private constructor(\n id: string,\n messages: readonly Message[],\n step: number,\n metadata: Readonly<Record<string, unknown>>,\n reasoning: readonly string[],\n plan: readonly PlanStep[] | undefined,\n subagentTraces: readonly SubagentExecutionTrace[],\n ) {\n this.id = id;\n this.messages = messages;\n this.step = step;\n this.metadata = metadata;\n this.reasoning = reasoning;\n this.plan = plan;\n this.subagentTraces = subagentTraces;\n }\n\n /**\n * Create an initial empty state.\n */\n static initial(): AgentState {\n return new AgentState(\n generateUUID(),\n [],\n 0,\n {},\n [],\n undefined,\n [],\n );\n }\n\n /**\n * Return new state with a message added.\n */\n withMessage(message: Message): AgentState {\n return new AgentState(\n generateUUID(),\n [...this.messages, message],\n this.step,\n this.metadata,\n this.reasoning,\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with messages added.\n */\n withMessages(messages: Message[]): AgentState {\n return new AgentState(\n generateUUID(),\n [...this.messages, ...messages],\n this.step,\n this.metadata,\n this.reasoning,\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with context replaced (all messages).\n * Use for context window management (pruning, summarization).\n */\n withContext(messages: Message[]): AgentState {\n return new AgentState(\n generateUUID(),\n [...messages],\n this.step,\n this.metadata,\n this.reasoning,\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with updated step number.\n */\n withStep(step: number): AgentState {\n return new AgentState(\n generateUUID(),\n this.messages,\n step,\n this.metadata,\n this.reasoning,\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with metadata entry added/updated.\n */\n withMetadata(key: string, value: unknown): AgentState {\n return new AgentState(\n generateUUID(),\n this.messages,\n this.step,\n { ...this.metadata, [key]: value },\n this.reasoning,\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with reasoning trace added.\n */\n withReasoning(reasoning: string): AgentState {\n return new AgentState(\n generateUUID(),\n this.messages,\n this.step,\n this.metadata,\n [...this.reasoning, reasoning],\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with plan set.\n */\n withPlan(plan: PlanStep[]): AgentState {\n return new AgentState(\n generateUUID(),\n this.messages,\n this.step,\n this.metadata,\n this.reasoning,\n [...plan],\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with sub-agent trace added.\n * Per UAP spec Section 8.8.\n */\n withSubagentTrace(trace: SubagentExecutionTrace): AgentState {\n return new AgentState(\n generateUUID(),\n this.messages,\n this.step,\n this.metadata,\n this.reasoning,\n this.plan,\n [...this.subagentTraces, trace],\n );\n }\n\n /**\n * Serialize state to JSON for persistence.\n */\n toJSON(): AgentStateJSON {\n return {\n version: UAP_VERSION,\n id: this.id,\n messages: this.messages.map((msg) => serializeMessage(msg)),\n step: this.step,\n metadata: { ...this.metadata },\n reasoning: [...this.reasoning],\n plan: this.plan ? this.plan.map((s) => ({ ...s })) : undefined,\n subagentTraces: this.subagentTraces.length > 0\n ? this.subagentTraces.map((t) => ({ ...t }))\n : undefined,\n };\n }\n\n /**\n * Deserialize state from JSON.\n */\n static fromJSON(json: AgentStateJSON): AgentState {\n if (json.version !== UAP_VERSION) {\n throw new Error(`Unsupported UAP version: ${json.version}. Expected: ${UAP_VERSION}`);\n }\n\n return new AgentState(\n json.id,\n json.messages.map((msg) => deserializeMessage(msg)),\n json.step,\n json.metadata,\n json.reasoning,\n json.plan ? json.plan.map((s) => ({ ...s })) : undefined,\n json.subagentTraces ? json.subagentTraces.map((t) => ({ ...t })) : [],\n );\n }\n}\n\n/**\n * Serialize a UPP Message to JSON.\n */\nfunction serializeMessage(message: Message): MessageJSON {\n if (isUserMessage(message)) {\n return {\n role: 'user',\n content: message.content,\n metadata: message.metadata,\n };\n }\n if (isAssistantMessage(message)) {\n return {\n role: 'assistant',\n content: {\n content: message.content,\n toolCalls: message.toolCalls,\n },\n metadata: message.metadata,\n };\n }\n if (isToolResultMessage(message)) {\n return {\n role: 'tool_result',\n content: message.results,\n metadata: message.metadata,\n };\n }\n throw new Error(`Unknown message type: ${typeof message}`);\n}\n\n/**\n * Deserialize a JSON message to UPP Message.\n */\nfunction deserializeMessage(json: MessageJSON): Message {\n switch (json.role) {\n case 'user':\n return new UserMessage(\n json.content as string | UserContent[],\n { metadata: json.metadata },\n );\n case 'assistant': {\n const assistantContent = json.content as {\n content: string | AssistantContent[];\n toolCalls?: ToolCall[];\n };\n return new AssistantMessage(\n assistantContent.content,\n assistantContent.toolCalls,\n { metadata: json.metadata },\n );\n }\n case 'tool_result':\n return new ToolResultMessage(\n json.content as ToolResult[],\n { metadata: json.metadata },\n );\n default:\n throw new Error(`Unknown message role: ${json.role}`);\n }\n}\n\nexport type {\n AgentStateInterface,\n AgentStateJSON,\n PlanStep,\n PlanStepStatus,\n SubagentExecutionTrace,\n SubagentExecutionTraceJSON,\n ToolExecutionTrace,\n} from './types.ts';\n","import { generateUUID } from '../utils/uuid.ts';\nimport { AgentState } from '../state/index.ts';\nimport type { ThreadNodeJSON, ThreadTreeJSON } from './types.ts';\n\n/**\n * A node in the thread tree representing a conversation state snapshot.\n */\nexport class ThreadNode {\n /** Node ID (UUIDv4) */\n readonly id: string;\n\n /** Parent node ID (null for root) */\n readonly parentId: string | null;\n\n /** State snapshot at this node */\n state: AgentState;\n\n /** Optional branch name */\n name?: string;\n\n /** Child node IDs */\n readonly children: string[];\n\n constructor(\n id: string,\n parentId: string | null,\n state: AgentState,\n name?: string,\n children: string[] = [],\n ) {\n this.id = id;\n this.parentId = parentId;\n this.state = state;\n this.name = name;\n this.children = children;\n }\n\n /**\n * Serialize to JSON.\n */\n toJSON(): ThreadNodeJSON {\n return {\n id: this.id,\n parentId: this.parentId,\n state: this.state.toJSON(),\n name: this.name,\n children: [...this.children],\n };\n }\n\n /**\n * Deserialize from JSON.\n */\n static fromJSON(json: ThreadNodeJSON): ThreadNode {\n return new ThreadNode(\n json.id,\n json.parentId,\n AgentState.fromJSON(json.state),\n json.name,\n [...json.children],\n );\n }\n}\n\n/**\n * A tree-structured collection of conversation threads with parent-child relationships.\n * Enables branching conversations and easy switching between alternative paths.\n */\nexport class ThreadTree {\n /** Root node */\n readonly root: ThreadNode;\n\n /** Currently active node */\n private currentNode: ThreadNode;\n\n /** All nodes by ID */\n readonly nodes: Map<string, ThreadNode>;\n\n constructor(root?: ThreadNode) {\n if (root) {\n this.root = root;\n this.currentNode = root;\n this.nodes = new Map([[root.id, root]]);\n } else {\n const rootNode = new ThreadNode(\n generateUUID(),\n null,\n AgentState.initial(),\n 'root',\n );\n this.root = rootNode;\n this.currentNode = rootNode;\n this.nodes = new Map([[rootNode.id, rootNode]]);\n }\n }\n\n /**\n * Get the currently active node.\n */\n get current(): ThreadNode {\n return this.currentNode;\n }\n\n /**\n * Create a branch from a node.\n *\n * @param fromId - ID of the node to branch from\n * @param name - Optional name for the branch\n * @returns ID of the new node\n */\n branch(fromId: string, name?: string): string {\n const parent = this.nodes.get(fromId);\n if (!parent) {\n throw new Error(`Node not found: ${fromId}`);\n }\n\n const newNode = new ThreadNode(\n generateUUID(),\n fromId,\n parent.state, // Copy parent's state\n name,\n );\n\n // Add to parent's children\n parent.children.push(newNode.id);\n\n // Add to nodes map\n this.nodes.set(newNode.id, newNode);\n\n return newNode.id;\n }\n\n /**\n * Switch to a different node.\n *\n * @param nodeId - ID of the node to switch to\n */\n checkout(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) {\n throw new Error(`Node not found: ${nodeId}`);\n }\n\n this.currentNode = node;\n }\n\n /**\n * Get the AgentState representing the full history from root to current node.\n * Since nodes store full state snapshots, this returns the current node's state.\n *\n * @returns AgentState with combined history\n */\n history(): AgentState {\n return this.currentNode.state\n .withMetadata('_threadTreeNodeId', this.currentNode.id);\n }\n\n /**\n * Get all leaf nodes (nodes with no children).\n *\n * @returns Array of leaf node IDs\n */\n getLeaves(): string[] {\n const leaves: string[] = [];\n\n for (const [id, node] of this.nodes) {\n if (node.children.length === 0) {\n leaves.push(id);\n }\n }\n\n return leaves;\n }\n\n /**\n * Get all branch names.\n *\n * @returns Map of node IDs to branch names\n */\n getBranches(): Map<string, string | undefined> {\n const branches = new Map<string, string | undefined>();\n\n for (const [id, node] of this.nodes) {\n if (node.name) {\n branches.set(id, node.name);\n }\n }\n\n return branches;\n }\n\n /**\n * Serialize to JSON.\n */\n toJSON(): ThreadTreeJSON {\n const nodes: ThreadNodeJSON[] = [];\n\n for (const node of this.nodes.values()) {\n nodes.push(node.toJSON());\n }\n\n return {\n rootId: this.root.id,\n currentId: this.currentNode.id,\n nodes,\n };\n }\n\n /**\n * Deserialize from JSON.\n */\n static fromJSON(json: ThreadTreeJSON): ThreadTree {\n // First, create all nodes\n const nodesMap = new Map<string, ThreadNode>();\n\n for (const nodeJson of json.nodes) {\n const node = ThreadNode.fromJSON(nodeJson);\n nodesMap.set(node.id, node);\n }\n\n // Find root and current nodes\n const root = nodesMap.get(json.rootId);\n const current = nodesMap.get(json.currentId);\n\n if (!root) {\n throw new Error(`Root node not found: ${json.rootId}`);\n }\n\n if (!current) {\n throw new Error(`Current node not found: ${json.currentId}`);\n }\n\n // Create tree with root\n const tree = new ThreadTree(root);\n\n // Replace the nodes map\n tree.nodes.clear();\n for (const [id, node] of nodesMap) {\n tree.nodes.set(id, node);\n }\n\n // Set current node\n tree.checkout(current.id);\n\n return tree;\n }\n}\n\nexport type { ThreadNodeJSON, ThreadTreeJSON } from './types.ts';\n"]}
@@ -1,9 +1,9 @@
1
- import { L as LoopOptions, E as ExecutionStrategy, R as ReactOptions, P as PlanOptions } from '../types-DR02gtFv.js';
2
- export { A as AgentStrategy, b as AgentStreamEvent, a as AgentStreamResult, h as ExecutionContext, i as ExecutionResult, G as GenerateResult, O as OnSubagentEvent, k as OrderedToolCall, f as SubagentEndEvent, g as SubagentEvent, c as SubagentEventBase, S as SubagentEventType, e as SubagentInnerEvent, d as SubagentStartEvent, T as ToolDependencyOptions, j as ToolWithDependencies, U as UAPEventType } from '../types-DR02gtFv.js';
1
+ import { L as LoopOptions, E as ExecutionStrategy, R as ReactOptions, P as PlanOptions } from '../types-D1egxttz.js';
2
+ export { A as AgentStrategy, b as AgentStreamEvent, a as AgentStreamResult, h as ExecutionContext, i as ExecutionResult, G as GenerateResult, O as OnSubagentEvent, k as OrderedToolCall, f as SubagentEndEvent, g as SubagentEvent, c as SubagentEventBase, S as SubagentEventType, e as SubagentInnerEvent, d as SubagentStartEvent, T as ToolDependencyOptions, j as ToolWithDependencies, U as UAPEventType } from '../types-D1egxttz.js';
3
3
  import { ToolCall, Tool } from '@providerprotocol/ai';
4
4
  import '../index-qsPwbY86.js';
5
5
  import '../types-2Vsthzyu.js';
6
- import '../types-BhX9uD_d.js';
6
+ import '../types-DChRdQoX.js';
7
7
 
8
8
  /**
9
9
  * Create a loop execution strategy.
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { LLMOptions, ModelReference, LLMInstance, Tool, Message, Turn } from '@providerprotocol/ai';
2
2
  import { A as AgentState } from './index-qsPwbY86.js';
3
- import { E as ExecutionStrategy, A as AgentStrategy, G as GenerateResult, a as AgentStreamResult } from './types-DR02gtFv.js';
4
- export { b as AgentStreamEvent, O as OnSubagentEvent, f as SubagentEndEvent, g as SubagentEvent, c as SubagentEventBase, S as SubagentEventType, e as SubagentInnerEvent, d as SubagentStartEvent, U as UAPEventType } from './types-DR02gtFv.js';
5
- import { M as Middleware } from './types-NGQMdnaD.js';
6
- import { C as CheckpointStore } from './types-BhX9uD_d.js';
7
- export { b as CheckpointData, a as CheckpointMetadata, F as FileCheckpointOptions } from './types-BhX9uD_d.js';
3
+ import { E as ExecutionStrategy, A as AgentStrategy, G as GenerateResult, a as AgentStreamResult } from './types-D1egxttz.js';
4
+ export { b as AgentStreamEvent, O as OnSubagentEvent, f as SubagentEndEvent, g as SubagentEvent, c as SubagentEventBase, S as SubagentEventType, e as SubagentInnerEvent, d as SubagentStartEvent, U as UAPEventType } from './types-D1egxttz.js';
5
+ import { M as Middleware } from './types-BiyEVOnf.js';
6
+ import { C as CheckpointStore } from './types-DChRdQoX.js';
7
+ export { b as CheckpointData, a as CheckpointMetadata, F as FileCheckpointOptions } from './types-DChRdQoX.js';
8
8
  export { ThreadNode, ThreadNodeJSON, ThreadTree, ThreadTreeJSON } from './thread-tree/index.js';
9
9
  export { A as AgentStateInterface, a as AgentStateJSON, P as PlanStep, b as PlanStepStatus, S as SubagentExecutionTrace, c as SubagentExecutionTraceJSON, T as ToolExecutionTrace } from './types-2Vsthzyu.js';
10
10
 
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { loop } from './chunk-4ESYN66B.js';
2
- import { AgentState } from './chunk-PHI5ULBV.js';
3
- export { AgentState, ThreadNode, ThreadTree } from './chunk-PHI5ULBV.js';
2
+ import { AgentState } from './chunk-T47B3VAF.js';
3
+ export { AgentState, ThreadNode, ThreadTree } from './chunk-T47B3VAF.js';
4
4
  import { generateUUID } from './chunk-EKRXMSDX.js';
5
5
  import { llm, UserMessage } from '@providerprotocol/ai';
6
6
 
@@ -1,10 +1,10 @@
1
- import { L as LoggingOptions, M as Middleware } from '../types-NGQMdnaD.js';
2
- export { a as MiddlewareContext } from '../types-NGQMdnaD.js';
1
+ import { L as LoggingOptions, M as Middleware } from '../types-BiyEVOnf.js';
2
+ export { a as MiddlewareContext } from '../types-BiyEVOnf.js';
3
3
  import '@providerprotocol/ai';
4
4
  import '../index-qsPwbY86.js';
5
5
  import '../types-2Vsthzyu.js';
6
- import '../types-DR02gtFv.js';
7
- import '../types-BhX9uD_d.js';
6
+ import '../types-D1egxttz.js';
7
+ import '../types-DChRdQoX.js';
8
8
 
9
9
  /**
10
10
  * Create a logging middleware.
@@ -1,4 +1,4 @@
1
- export { ThreadNode, ThreadTree } from '../chunk-PHI5ULBV.js';
1
+ export { ThreadNode, ThreadTree } from '../chunk-T47B3VAF.js';
2
2
  import '../chunk-EKRXMSDX.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  import { Message } from '@providerprotocol/ai';
2
2
  import { A as AgentState } from './index-qsPwbY86.js';
3
- import { G as GenerateResult } from './types-DR02gtFv.js';
3
+ import { G as GenerateResult } from './types-D1egxttz.js';
4
4
 
5
5
  /**
6
6
  * Forward declaration of Agent for use in MiddlewareContext.
@@ -1,6 +1,6 @@
1
1
  import { LLMInstance, Message, Tool, ToolCall, ToolExecution, Turn, StreamEvent, TokenUsage } from '@providerprotocol/ai';
2
2
  import { A as AgentState } from './index-qsPwbY86.js';
3
- import { C as CheckpointStore } from './types-BhX9uD_d.js';
3
+ import { C as CheckpointStore } from './types-DChRdQoX.js';
4
4
 
5
5
  /**
6
6
  * Result of agent generation.
@@ -43,6 +43,13 @@ interface CheckpointStore {
43
43
  * @returns Serialized state or null if not found
44
44
  */
45
45
  load(sessionId: string): Promise<AgentStateJSON | null>;
46
+ /**
47
+ * Load metadata for a session without loading full state.
48
+ *
49
+ * @param sessionId - Session identifier
50
+ * @returns Checkpoint metadata or null if not found
51
+ */
52
+ loadMetadata(sessionId: string): Promise<CheckpointMetadata | null>;
46
53
  /**
47
54
  * Delete all checkpoints for a session.
48
55
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@providerprotocol/agents",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "Unified Agent Protocol (UAP) 1.0 implementation for @providerprotocol/ai",
5
5
  "type": "module",
6
6
  "author": {
@@ -57,13 +57,13 @@
57
57
  "@providerprotocol/ai": ">=0.0.11"
58
58
  },
59
59
  "devDependencies": {
60
- "@providerprotocol/ai": "^0.0.11",
60
+ "@providerprotocol/ai": "^0.0.12",
61
61
  "@types/bun": "^1.3.5",
62
62
  "@typescript-eslint/eslint-plugin": "^8.52.0",
63
63
  "@typescript-eslint/parser": "^8.52.0",
64
64
  "eslint": "^9.39.2",
65
65
  "eslint-plugin-import": "^2.32.0",
66
66
  "tsup": "^8.5.1",
67
- "typescript": "^5.7.3"
67
+ "typescript": "^5.9.3"
68
68
  }
69
69
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/state/types.ts","../src/state/index.ts","../src/thread-tree/index.ts"],"names":[],"mappings":"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","file":"chunk-PHI5ULBV.js","sourcesContent":["import type { Message, MessageMetadata, TokenUsage } from '@providerprotocol/ai';\n\n/**\n * Status of a plan step during execution.\n */\nexport type PlanStepStatus = 'pending' | 'in_progress' | 'completed' | 'failed';\n\n/**\n * A single tool execution trace from a sub-agent.\n * Per UAP spec Section 8.8.\n */\nexport interface ToolExecutionTrace {\n /** Name of the tool */\n toolName: string;\n /** Tool call ID */\n toolCallId?: string;\n /** Arguments passed to the tool */\n arguments: Record<string, unknown>;\n /** Tool result */\n result: string;\n /** Whether the tool errored */\n isError?: boolean;\n /** Execution time in milliseconds */\n duration?: number;\n}\n\n/**\n * Sub-agent execution trace for checkpoint persistence.\n * Per UAP spec Section 8.8.\n */\nexport interface SubagentExecutionTrace {\n /** Unique ID of the sub-agent instance */\n subagentId: string;\n /** Type/name of the sub-agent */\n subagentType: string;\n /** Tool call ID that spawned this sub-agent */\n parentToolCallId: string;\n /** The task given to the sub-agent */\n prompt: string;\n /** Start timestamp (ms since epoch) */\n startTime: number;\n /** End timestamp (ms since epoch) */\n endTime: number;\n /** Whether execution succeeded */\n success: boolean;\n /** Sub-agent's response (if successful) */\n result?: string;\n /** Error message (if failed) */\n error?: string;\n /** Tools used by sub-agent */\n toolExecutions?: ToolExecutionTrace[];\n /** Token usage for sub-agent */\n usage?: TokenUsage;\n}\n\n/**\n * Serialized form of SubagentExecutionTrace.\n */\nexport interface SubagentExecutionTraceJSON {\n subagentId: string;\n subagentType: string;\n parentToolCallId: string;\n prompt: string;\n startTime: number;\n endTime: number;\n success: boolean;\n result?: string;\n error?: string;\n toolExecutions?: ToolExecutionTrace[];\n usage?: TokenUsage;\n}\n\n/**\n * A single step in an execution plan.\n */\nexport interface PlanStep {\n /** Unique step identifier */\n id: string;\n /** Description of what this step does */\n description: string;\n /** Tool to use (if applicable) */\n tool?: string;\n /** IDs of steps this depends on */\n dependsOn: string[];\n /** Current status */\n status: PlanStepStatus;\n}\n\n/**\n * Serialized form of a PlanStep.\n */\nexport interface PlanStepJSON {\n id: string;\n description: string;\n tool?: string;\n dependsOn: string[];\n status: PlanStepStatus;\n}\n\n/**\n * Serialized form of AgentState for persistence.\n */\nexport interface AgentStateJSON {\n /** UAP version */\n version: string;\n /** State snapshot ID */\n id: string;\n /** Serialized messages */\n messages: MessageJSON[];\n /** Current step number */\n step: number;\n /** User-defined metadata */\n metadata: Record<string, unknown>;\n /** Reasoning traces (for ReAct) */\n reasoning: string[];\n /** Execution plan (for Plan strategy) */\n plan?: PlanStepJSON[];\n /** Sub-agent execution traces (per UAP spec Section 8.8) */\n subagentTraces?: SubagentExecutionTraceJSON[];\n}\n\n/**\n * Serialized form of a Message.\n * This preserves the UPP Message structure for serialization.\n */\nexport interface MessageJSON {\n role: 'user' | 'assistant' | 'tool_result';\n content: unknown;\n metadata?: MessageMetadata;\n}\n\n/**\n * Interface for AgentState operations.\n * All operations return new instances (immutable).\n */\nexport interface AgentStateInterface {\n /** State snapshot ID (UUIDv4) */\n readonly id: string;\n /** Conversation history (UPP Messages) */\n readonly messages: readonly Message[];\n /** Current step number */\n readonly step: number;\n /** User-defined metadata */\n readonly metadata: Readonly<Record<string, unknown>>;\n /** Reasoning traces (for ReAct) */\n readonly reasoning: readonly string[];\n /** Execution plan (for Plan strategy) */\n readonly plan: readonly PlanStep[] | undefined;\n /** Sub-agent execution traces (per UAP spec Section 8.8) */\n readonly subagentTraces: readonly SubagentExecutionTrace[];\n\n /** Return new state with message added */\n withMessage(message: Message): AgentStateInterface;\n /** Return new state with messages added */\n withMessages(messages: Message[]): AgentStateInterface;\n /** Return new state with context replaced (all messages) */\n withContext(messages: Message[]): AgentStateInterface;\n /** Return new state with updated step */\n withStep(step: number): AgentStateInterface;\n /** Return new state with metadata entry */\n withMetadata(key: string, value: unknown): AgentStateInterface;\n /** Return new state with reasoning added */\n withReasoning(reasoning: string): AgentStateInterface;\n /** Return new state with plan set */\n withPlan(plan: PlanStep[]): AgentStateInterface;\n /** Return new state with sub-agent trace added */\n withSubagentTrace(trace: SubagentExecutionTrace): AgentStateInterface;\n /** Serialize to JSON */\n toJSON(): AgentStateJSON;\n}\n\n/** UAP version for serialization */\nexport const UAP_VERSION = '1.0.0';\n","import type {\n Message,\n UserContent,\n AssistantContent,\n ToolCall,\n ToolResult,\n} from '@providerprotocol/ai';\nimport { UserMessage, AssistantMessage, ToolResultMessage } from '@providerprotocol/ai';\nimport { generateUUID } from '../utils/uuid.ts';\nimport type {\n AgentStateInterface,\n AgentStateJSON,\n PlanStep,\n MessageJSON,\n SubagentExecutionTrace,\n} from './types.ts';\nimport { UAP_VERSION } from './types.ts';\n\n/**\n * Immutable agent state snapshot.\n * All operations return new instances - the original state is never mutated.\n */\nexport class AgentState implements AgentStateInterface {\n readonly id: string;\n\n readonly messages: readonly Message[];\n\n readonly step: number;\n\n readonly metadata: Readonly<Record<string, unknown>>;\n\n readonly reasoning: readonly string[];\n\n readonly plan: readonly PlanStep[] | undefined;\n\n readonly subagentTraces: readonly SubagentExecutionTrace[];\n\n private constructor(\n id: string,\n messages: readonly Message[],\n step: number,\n metadata: Readonly<Record<string, unknown>>,\n reasoning: readonly string[],\n plan: readonly PlanStep[] | undefined,\n subagentTraces: readonly SubagentExecutionTrace[],\n ) {\n this.id = id;\n this.messages = messages;\n this.step = step;\n this.metadata = metadata;\n this.reasoning = reasoning;\n this.plan = plan;\n this.subagentTraces = subagentTraces;\n }\n\n /**\n * Create an initial empty state.\n */\n static initial(): AgentState {\n return new AgentState(\n generateUUID(),\n [],\n 0,\n {},\n [],\n undefined,\n [],\n );\n }\n\n /**\n * Return new state with a message added.\n */\n withMessage(message: Message): AgentState {\n return new AgentState(\n generateUUID(),\n [...this.messages, message],\n this.step,\n this.metadata,\n this.reasoning,\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with messages added.\n */\n withMessages(messages: Message[]): AgentState {\n return new AgentState(\n generateUUID(),\n [...this.messages, ...messages],\n this.step,\n this.metadata,\n this.reasoning,\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with context replaced (all messages).\n * Use for context window management (pruning, summarization).\n */\n withContext(messages: Message[]): AgentState {\n return new AgentState(\n generateUUID(),\n [...messages],\n this.step,\n this.metadata,\n this.reasoning,\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with updated step number.\n */\n withStep(step: number): AgentState {\n return new AgentState(\n generateUUID(),\n this.messages,\n step,\n this.metadata,\n this.reasoning,\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with metadata entry added/updated.\n */\n withMetadata(key: string, value: unknown): AgentState {\n return new AgentState(\n generateUUID(),\n this.messages,\n this.step,\n { ...this.metadata, [key]: value },\n this.reasoning,\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with reasoning trace added.\n */\n withReasoning(reasoning: string): AgentState {\n return new AgentState(\n generateUUID(),\n this.messages,\n this.step,\n this.metadata,\n [...this.reasoning, reasoning],\n this.plan,\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with plan set.\n */\n withPlan(plan: PlanStep[]): AgentState {\n return new AgentState(\n generateUUID(),\n this.messages,\n this.step,\n this.metadata,\n this.reasoning,\n [...plan],\n this.subagentTraces,\n );\n }\n\n /**\n * Return new state with sub-agent trace added.\n * Per UAP spec Section 8.8.\n */\n withSubagentTrace(trace: SubagentExecutionTrace): AgentState {\n return new AgentState(\n generateUUID(),\n this.messages,\n this.step,\n this.metadata,\n this.reasoning,\n this.plan,\n [...this.subagentTraces, trace],\n );\n }\n\n /**\n * Serialize state to JSON for persistence.\n */\n toJSON(): AgentStateJSON {\n return {\n version: UAP_VERSION,\n id: this.id,\n messages: this.messages.map((msg) => serializeMessage(msg)),\n step: this.step,\n metadata: { ...this.metadata },\n reasoning: [...this.reasoning],\n plan: this.plan ? this.plan.map((s) => ({ ...s })) : undefined,\n subagentTraces: this.subagentTraces.length > 0\n ? this.subagentTraces.map((t) => ({ ...t }))\n : undefined,\n };\n }\n\n /**\n * Deserialize state from JSON.\n */\n static fromJSON(json: AgentStateJSON): AgentState {\n if (json.version !== UAP_VERSION) {\n throw new Error(`Unsupported UAP version: ${json.version}. Expected: ${UAP_VERSION}`);\n }\n\n return new AgentState(\n json.id,\n json.messages.map((msg) => deserializeMessage(msg)),\n json.step,\n json.metadata,\n json.reasoning,\n json.plan ? json.plan.map((s) => ({ ...s })) : undefined,\n json.subagentTraces ? json.subagentTraces.map((t) => ({ ...t })) : [],\n );\n }\n}\n\n/**\n * Serialize a UPP Message to JSON.\n */\nfunction serializeMessage(message: Message): MessageJSON {\n if (message instanceof UserMessage) {\n return {\n role: 'user',\n content: message.content,\n metadata: message.metadata,\n };\n }\n if (message instanceof AssistantMessage) {\n return {\n role: 'assistant',\n content: {\n content: message.content,\n toolCalls: message.toolCalls,\n },\n metadata: message.metadata,\n };\n }\n if (message instanceof ToolResultMessage) {\n return {\n role: 'tool_result',\n content: message.results,\n metadata: message.metadata,\n };\n }\n throw new Error(`Unknown message type: ${typeof message}`);\n}\n\n/**\n * Deserialize a JSON message to UPP Message.\n */\nfunction deserializeMessage(json: MessageJSON): Message {\n switch (json.role) {\n case 'user':\n return new UserMessage(\n json.content as string | UserContent[],\n { metadata: json.metadata },\n );\n case 'assistant': {\n const assistantContent = json.content as {\n content: string | AssistantContent[];\n toolCalls?: ToolCall[];\n };\n return new AssistantMessage(\n assistantContent.content,\n assistantContent.toolCalls,\n { metadata: json.metadata },\n );\n }\n case 'tool_result':\n return new ToolResultMessage(\n json.content as ToolResult[],\n { metadata: json.metadata },\n );\n default:\n throw new Error(`Unknown message role: ${json.role}`);\n }\n}\n\nexport type {\n AgentStateInterface,\n AgentStateJSON,\n PlanStep,\n PlanStepStatus,\n SubagentExecutionTrace,\n SubagentExecutionTraceJSON,\n ToolExecutionTrace,\n} from './types.ts';\n","import { generateUUID } from '../utils/uuid.ts';\nimport { AgentState } from '../state/index.ts';\nimport type { ThreadNodeJSON, ThreadTreeJSON } from './types.ts';\n\n/**\n * A node in the thread tree representing a conversation state snapshot.\n */\nexport class ThreadNode {\n /** Node ID (UUIDv4) */\n readonly id: string;\n\n /** Parent node ID (null for root) */\n readonly parentId: string | null;\n\n /** State snapshot at this node */\n state: AgentState;\n\n /** Optional branch name */\n name?: string;\n\n /** Child node IDs */\n readonly children: string[];\n\n constructor(\n id: string,\n parentId: string | null,\n state: AgentState,\n name?: string,\n children: string[] = [],\n ) {\n this.id = id;\n this.parentId = parentId;\n this.state = state;\n this.name = name;\n this.children = children;\n }\n\n /**\n * Serialize to JSON.\n */\n toJSON(): ThreadNodeJSON {\n return {\n id: this.id,\n parentId: this.parentId,\n state: this.state.toJSON(),\n name: this.name,\n children: [...this.children],\n };\n }\n\n /**\n * Deserialize from JSON.\n */\n static fromJSON(json: ThreadNodeJSON): ThreadNode {\n return new ThreadNode(\n json.id,\n json.parentId,\n AgentState.fromJSON(json.state),\n json.name,\n [...json.children],\n );\n }\n}\n\n/**\n * A tree-structured collection of conversation threads with parent-child relationships.\n * Enables branching conversations and easy switching between alternative paths.\n */\nexport class ThreadTree {\n /** Root node */\n readonly root: ThreadNode;\n\n /** Currently active node */\n private currentNode: ThreadNode;\n\n /** All nodes by ID */\n readonly nodes: Map<string, ThreadNode>;\n\n constructor(root?: ThreadNode) {\n if (root) {\n this.root = root;\n this.currentNode = root;\n this.nodes = new Map([[root.id, root]]);\n } else {\n const rootNode = new ThreadNode(\n generateUUID(),\n null,\n AgentState.initial(),\n 'root',\n );\n this.root = rootNode;\n this.currentNode = rootNode;\n this.nodes = new Map([[rootNode.id, rootNode]]);\n }\n }\n\n /**\n * Get the currently active node.\n */\n get current(): ThreadNode {\n return this.currentNode;\n }\n\n /**\n * Create a branch from a node.\n *\n * @param fromId - ID of the node to branch from\n * @param name - Optional name for the branch\n * @returns ID of the new node\n */\n branch(fromId: string, name?: string): string {\n const parent = this.nodes.get(fromId);\n if (!parent) {\n throw new Error(`Node not found: ${fromId}`);\n }\n\n const newNode = new ThreadNode(\n generateUUID(),\n fromId,\n parent.state, // Copy parent's state\n name,\n );\n\n // Add to parent's children\n parent.children.push(newNode.id);\n\n // Add to nodes map\n this.nodes.set(newNode.id, newNode);\n\n return newNode.id;\n }\n\n /**\n * Switch to a different node.\n *\n * @param nodeId - ID of the node to switch to\n */\n checkout(nodeId: string): void {\n const node = this.nodes.get(nodeId);\n if (!node) {\n throw new Error(`Node not found: ${nodeId}`);\n }\n\n this.currentNode = node;\n }\n\n /**\n * Get the AgentState representing the full history from root to current node.\n * Since nodes store full state snapshots, this returns the current node's state.\n *\n * @returns AgentState with combined history\n */\n history(): AgentState {\n return this.currentNode.state\n .withMetadata('_threadTreeNodeId', this.currentNode.id);\n }\n\n /**\n * Get all leaf nodes (nodes with no children).\n *\n * @returns Array of leaf node IDs\n */\n getLeaves(): string[] {\n const leaves: string[] = [];\n\n for (const [id, node] of this.nodes) {\n if (node.children.length === 0) {\n leaves.push(id);\n }\n }\n\n return leaves;\n }\n\n /**\n * Get all branch names.\n *\n * @returns Map of node IDs to branch names\n */\n getBranches(): Map<string, string | undefined> {\n const branches = new Map<string, string | undefined>();\n\n for (const [id, node] of this.nodes) {\n if (node.name) {\n branches.set(id, node.name);\n }\n }\n\n return branches;\n }\n\n /**\n * Serialize to JSON.\n */\n toJSON(): ThreadTreeJSON {\n const nodes: ThreadNodeJSON[] = [];\n\n for (const node of this.nodes.values()) {\n nodes.push(node.toJSON());\n }\n\n return {\n rootId: this.root.id,\n currentId: this.currentNode.id,\n nodes,\n };\n }\n\n /**\n * Deserialize from JSON.\n */\n static fromJSON(json: ThreadTreeJSON): ThreadTree {\n // First, create all nodes\n const nodesMap = new Map<string, ThreadNode>();\n\n for (const nodeJson of json.nodes) {\n const node = ThreadNode.fromJSON(nodeJson);\n nodesMap.set(node.id, node);\n }\n\n // Find root and current nodes\n const root = nodesMap.get(json.rootId);\n const current = nodesMap.get(json.currentId);\n\n if (!root) {\n throw new Error(`Root node not found: ${json.rootId}`);\n }\n\n if (!current) {\n throw new Error(`Current node not found: ${json.currentId}`);\n }\n\n // Create tree with root\n const tree = new ThreadTree(root);\n\n // Replace the nodes map\n tree.nodes.clear();\n for (const [id, node] of nodesMap) {\n tree.nodes.set(id, node);\n }\n\n // Set current node\n tree.checkout(current.id);\n\n return tree;\n }\n}\n\nexport type { ThreadNodeJSON, ThreadTreeJSON } from './types.ts';\n"]}