@truefoundry/trueforge-core 0.2.0-rc.1 → 0.2.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/agent-session/Sessions.d.ts +7 -3
  2. package/dist/agent-session/Sessions.d.ts.map +1 -1
  3. package/dist/agent-session/Sessions.js +2 -1
  4. package/dist/agent-session/Sessions.js.map +1 -1
  5. package/dist/agent-session/Sessions.mjs +2 -1
  6. package/dist/agent-session/Sessions.mjs.map +1 -1
  7. package/dist/agent-session/TurnResourceResolver.d.ts +13 -10
  8. package/dist/agent-session/TurnResourceResolver.d.ts.map +1 -1
  9. package/dist/agent-session/TurnResourceResolver.js +15 -1
  10. package/dist/agent-session/TurnResourceResolver.js.map +1 -1
  11. package/dist/agent-session/TurnResourceResolver.mjs +15 -1
  12. package/dist/agent-session/TurnResourceResolver.mjs.map +1 -1
  13. package/dist/agent-session/index.d.ts +3 -3
  14. package/dist/agent-session/index.d.ts.map +1 -1
  15. package/dist/agent-session/index.js +6 -0
  16. package/dist/agent-session/index.js.map +1 -1
  17. package/dist/agent-session/index.mjs +11 -1
  18. package/dist/agent-session/index.mjs.map +1 -1
  19. package/dist/agent-session/models/SessionRecord.d.ts +5 -1
  20. package/dist/agent-session/models/SessionRecord.d.ts.map +1 -1
  21. package/dist/agent-session/models/SessionRecord.js.map +1 -1
  22. package/dist/agent-session/schemas/agentSpec.d.ts +4 -2
  23. package/dist/agent-session/schemas/agentSpec.d.ts.map +1 -1
  24. package/dist/agent-session/schemas/agentSpec.js +5 -3
  25. package/dist/agent-session/schemas/agentSpec.js.map +1 -1
  26. package/dist/agent-session/schemas/agentSpec.mjs +5 -3
  27. package/dist/agent-session/schemas/agentSpec.mjs.map +1 -1
  28. package/dist/agent-session/schemas/session.d.ts +29 -2
  29. package/dist/agent-session/schemas/session.d.ts.map +1 -1
  30. package/dist/agent-session/schemas/session.js +23 -5
  31. package/dist/agent-session/schemas/session.js.map +1 -1
  32. package/dist/agent-session/schemas/session.mjs +19 -4
  33. package/dist/agent-session/schemas/session.mjs.map +1 -1
  34. package/dist/agent-session/store/ISessionStore.d.ts +28 -3
  35. package/dist/agent-session/store/ISessionStore.d.ts.map +1 -1
  36. package/dist/agent-session/store/ISessionStore.js.map +1 -1
  37. package/dist/agent-session/store/InMemorySessionStore.d.ts +3 -2
  38. package/dist/agent-session/store/InMemorySessionStore.d.ts.map +1 -1
  39. package/dist/agent-session/store/InMemorySessionStore.js +36 -3
  40. package/dist/agent-session/store/InMemorySessionStore.js.map +1 -1
  41. package/dist/agent-session/store/InMemorySessionStore.mjs +36 -3
  42. package/dist/agent-session/store/InMemorySessionStore.mjs.map +1 -1
  43. package/dist/core/index.d.ts +2 -1
  44. package/dist/core/index.d.ts.map +1 -1
  45. package/dist/core/index.js +5 -0
  46. package/dist/core/index.js.map +1 -1
  47. package/dist/core/index.mjs +3 -0
  48. package/dist/core/index.mjs.map +1 -1
  49. package/dist/core/llm/VercelAILLM.d.ts.map +1 -1
  50. package/dist/core/llm/VercelAILLM.js +4 -0
  51. package/dist/core/llm/VercelAILLM.js.map +1 -1
  52. package/dist/core/llm/VercelAILLM.mjs +4 -0
  53. package/dist/core/llm/VercelAILLM.mjs.map +1 -1
  54. package/dist/core/redisKeys.d.ts +7 -0
  55. package/dist/core/redisKeys.d.ts.map +1 -0
  56. package/dist/core/redisKeys.js +36 -0
  57. package/dist/core/redisKeys.js.map +1 -0
  58. package/dist/core/redisKeys.mjs +10 -0
  59. package/dist/core/redisKeys.mjs.map +1 -0
  60. package/dist/core/sandbox/Sandbox.d.ts.map +1 -1
  61. package/dist/core/sandbox/Sandbox.js +13 -6
  62. package/dist/core/sandbox/Sandbox.js.map +1 -1
  63. package/dist/core/sandbox/Sandbox.mjs +9 -2
  64. package/dist/core/sandbox/Sandbox.mjs.map +1 -1
  65. package/dist/core/sandbox/provider/DaytonaProvider.d.ts +1 -1
  66. package/dist/core/sandbox/provider/DaytonaProvider.d.ts.map +1 -1
  67. package/dist/core/sandbox/provider/DaytonaProvider.js +3 -3
  68. package/dist/core/sandbox/provider/DaytonaProvider.js.map +1 -1
  69. package/dist/core/sandbox/provider/DaytonaProvider.mjs +3 -3
  70. package/dist/core/sandbox/provider/DaytonaProvider.mjs.map +1 -1
  71. package/dist/core/sandbox/provider/Provider.d.ts +20 -4
  72. package/dist/core/sandbox/provider/Provider.d.ts.map +1 -1
  73. package/dist/core/sandbox/provider/Provider.js.map +1 -1
  74. package/dist/core/sandbox/provider/Provider.mjs.map +1 -1
  75. package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts +2 -2
  76. package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts.map +1 -1
  77. package/dist/core/sandbox/provider/TFYSandboxProvider.js +4 -4
  78. package/dist/core/sandbox/provider/TFYSandboxProvider.js.map +1 -1
  79. package/dist/core/sandbox/provider/TFYSandboxProvider.mjs +4 -4
  80. package/dist/core/sandbox/provider/TFYSandboxProvider.mjs.map +1 -1
  81. package/dist/core/sandbox/sandboxScripts.gen.d.ts +1 -1
  82. package/dist/core/sandbox/sandboxScripts.gen.d.ts.map +1 -1
  83. package/dist/core/sandbox/sandboxScripts.gen.js +1 -1
  84. package/dist/core/sandbox/sandboxScripts.gen.js.map +1 -1
  85. package/dist/core/sandbox/sandboxScripts.gen.mjs +1 -1
  86. package/dist/core/sandbox/sandboxScripts.gen.mjs.map +1 -1
  87. package/dist/core/sandbox/skills/ISkillMounter.d.ts +1 -1
  88. package/dist/core/sandbox/skills/ISkillMounter.d.ts.map +1 -1
  89. package/dist/core/sandbox/skills/ISkillMounter.js.map +1 -1
  90. package/dist/core/sandbox/skills/SkillMounter.d.ts +20 -2
  91. package/dist/core/sandbox/skills/SkillMounter.d.ts.map +1 -1
  92. package/dist/core/sandbox/skills/SkillMounter.js +59 -23
  93. package/dist/core/sandbox/skills/SkillMounter.js.map +1 -1
  94. package/dist/core/sandbox/skills/SkillMounter.mjs +58 -23
  95. package/dist/core/sandbox/skills/SkillMounter.mjs.map +1 -1
  96. package/dist/core/sandbox/skills/index.d.ts +1 -1
  97. package/dist/core/sandbox/skills/index.d.ts.map +1 -1
  98. package/dist/core/sandbox/skills/index.js.map +1 -1
  99. package/dist/core/sandbox/skills/index.mjs.map +1 -1
  100. package/dist/request-reply/executor.d.ts +1 -1
  101. package/dist/request-reply/executor.d.ts.map +1 -1
  102. package/dist/request-reply/executor.js +1 -1
  103. package/dist/request-reply/executor.js.map +1 -1
  104. package/dist/request-reply/executor.mjs +1 -1
  105. package/dist/request-reply/executor.mjs.map +1 -1
  106. package/dist/request-reply/utils.d.ts +0 -1
  107. package/dist/request-reply/utils.d.ts.map +1 -1
  108. package/dist/request-reply/utils.js +4 -6
  109. package/dist/request-reply/utils.js.map +1 -1
  110. package/dist/request-reply/utils.mjs +4 -5
  111. package/dist/request-reply/utils.mjs.map +1 -1
  112. package/package.json +1 -1
@@ -119,9 +119,11 @@ var RuntimeConfigSchema = import_zod_openapi.z.object({
119
119
  generative_ui: GenerativeUIConfigSchema.default(() => ({ enabled: true })),
120
120
  ask_user_questions: AskUserQuestionsConfigSchema.default(() => ({ enabled: true }))
121
121
  }).openapi("RuntimeConfig");
122
- var SKILL_NAME_REGEX = /^[A-Za-z0-9._-]+$/;
122
+ var SKILL_NAME_REGEX = /^[A-Za-z0-9._\-/:]+$/;
123
+ var MAX_AGENT_SKILLS = 50;
123
124
  var SkillSchema = import_zod_openapi.z.object({
124
- name: import_zod_openapi.z.string().trim().min(1).max(64).regex(SKILL_NAME_REGEX, 'Name may only contain letters, numbers, ".", "_", and "-"').refine((v) => v !== "." && v !== "..", 'Name must not be "." or ".."').refine((v) => !v.startsWith(".tfy-"), 'Name must not use the reserved ".tfy-" prefix').describe("Name of a configured skill (also used as the skill directory name in the sandbox).")
125
+ name: import_zod_openapi.z.string().trim().min(1).regex(SKILL_NAME_REGEX, 'Name may only contain letters, numbers, ".", "_", "-", "/", and ":"').refine((v) => v !== "." && v !== "..", 'Name must not be "." or ".."').refine((v) => !v.startsWith(".tfy-"), 'Name must not use the reserved ".tfy-" prefix').describe("Skill name."),
126
+ preload: import_zod_openapi.z.boolean().optional().default(false).describe("Inline SKILL.md into the prompt.")
125
127
  }).strict().openapi("Skill");
126
128
  var InitialUserMessageSchema = import_zod_openapi.z.object({
127
129
  type: import_zod_openapi.z.literal("user.message").describe("Initial message type."),
@@ -133,7 +135,7 @@ var AgentSpecSchema = import_zod_openapi.z.object({
133
135
  messages: import_zod_openapi.z.array(InitialUserMessageSchema).optional().describe("Optional initial user messages injected at the start of every session."),
134
136
  mcp_servers: import_zod_openapi.z.array(MCPServerRequestSchema).optional().describe("Optional MCP servers attached by configured name."),
135
137
  response_format: import_responseFormat.ResponseFormatSchema.optional(),
136
- skills: import_zod_openapi.z.array(SkillSchema).optional().describe("Optional name-only skill references. Requires `config.sandbox.enabled: true`."),
138
+ skills: import_zod_openapi.z.array(SkillSchema).max(MAX_AGENT_SKILLS).optional().describe("Skills used in this agent."),
137
139
  // Factory must parse so nested RuntimeConfig field defaults materialize.
138
140
  config: RuntimeConfigSchema.default(() => RuntimeConfigSchema.parse({}))
139
141
  }).describe("Complete agent definition used inline on a session or saved as a named agent.").openapi("AgentSpec");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/agent-session/schemas/agentSpec.ts"],"sourcesContent":["/** DB AgentSpec wire schema — FQN model names and name-only skill refs. */\nimport { z } from '@hono/zod-openapi';\nimport {\n DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,\n DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,\n DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,\n} from '../../core/capabilities/builtins/LargeToolResponse';\nimport { ResponseFormatSchema } from '../../core/llm/responseFormat';\nimport {\n DEFAULT_DISABLE_TOOLS,\n DEFAULT_ENABLE_TOOLS,\n DEFAULT_PRELOAD_TOOLS,\n DEFAULT_REQUIRE_APPROVAL_FOR_TOOLS,\n REQUIRE_APPROVAL_TOOLS_SELECTOR_TAGS,\n TOOLS_SELECTOR_TAGS,\n} from '../../core/mcp/toolSelectors';\n\nexport const DEFAULT_AGENT_CONFIG_ITERATION_LIMIT = 100;\n\n// --- Model ---\n\nconst ModelParamsSchema = z\n .object({\n max_tokens: z.number().optional().describe('Maximum tokens to generate in the model response.'),\n temperature: z.number().optional().describe('Sampling temperature; higher values increase randomness.'),\n top_p: z.number().optional().describe('Nucleus sampling probability mass.'),\n top_k: z.number().optional().describe('Top-k sampling; keep only the k highest-probability tokens.'),\n parallel_tool_calls: z\n .boolean()\n .optional()\n .describe('Whether the model may emit multiple tool calls in one response.'),\n reasoning_effort: z.string().optional().describe('Provider-specific reasoning effort (e.g. low/medium/high).'),\n })\n .loose() // this ensures extra model params are allowed\n .describe(\n 'Model call parameters passed through to the provider. Known keys are documented; extra keys are allowed and forwarded as-is.',\n )\n .openapi('ModelParams');\n\n// Opaque runtime identifier; the hosting server owns naming conventions (e.g. provider/model).\nconst ModelSchema = z\n .object({\n name: z\n .string()\n .min(1, 'model.name must not be empty')\n .describe('Model FQN: `provider/model`, e.g. `openai/gpt-5.2`.'),\n params: ModelParamsSchema.optional(),\n })\n .openapi('Model');\n\n// --- MCP servers ---\n\n// Literal tool name (not a tag).\nconst LiteralToolSelectorSchema = z\n .string()\n .min(1)\n .refine(s => !s.startsWith('@'), { message: 'Invalid tool selector tag' });\n\n// enable_tools / disable_tools / preload_tools: @all, @read-only, or a literal name.\nconst EnableToolSelectorSchema = z\n .union([z.enum(TOOLS_SELECTOR_TAGS), LiteralToolSelectorSchema])\n .openapi('MCPServerToolSelector');\n\n// require_approval_for_tools: @all, @write, @destructive, or a literal name.\nconst RequireApprovalToolSelectorSchema = z\n .union([z.enum(REQUIRE_APPROVAL_TOOLS_SELECTOR_TAGS), LiteralToolSelectorSchema])\n .openapi('MCPServerApprovalToolSelector');\n\n// `preload` defaults to false; use `preload_tools` to eagerly load specific tools when not fully preloading.\n// Auth headers are not part of the spec — they come from the configured MCP server store.\nconst MCPServerRequestSchema = z\n .object({\n name: z\n .string()\n .min(1, 'mcp_servers[].name must not be empty')\n .describe('Name of a configured MCP server (Settings → Connectors).'),\n // Which tools to enable. Default: all tools.\n enable_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_ENABLE_TOOLS)\n .describe('Tools exposed to the agent: `@all`, `@read-only`, or literal tool names. Default: `[\"@all\"]`.'),\n // Which tools to disable (subtracted from enable_tools). Default: none.\n disable_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_DISABLE_TOOLS)\n .describe('Tools subtracted from the enabled set. Default: none.'),\n // When the server is not fully preloaded (`preload: false`), which tools to\n // still preload into context. A non-empty list implies `preload: false`.\n preload_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_PRELOAD_TOOLS)\n .describe(\n 'Tools loaded eagerly into context while the rest stay deferred. A non-empty list implies `preload: false`.',\n ),\n // Tools that require human approval before execution. Default: @write + @destructive.\n require_approval_for_tools: z\n .array(RequireApprovalToolSelectorSchema)\n .default(DEFAULT_REQUIRE_APPROVAL_FOR_TOOLS)\n .describe(\n 'Tools that pause for human approval: `@all`, `@write`, `@destructive`, or literal names. Default: `[\"@write\", \"@destructive\"]`.',\n ),\n // Whether this server's tools are preloaded into context. Default: false.\n // When false, tools are discovered lazily and only `preload_tools` stay eager.\n preload: z\n .boolean()\n .optional()\n .default(false)\n .describe('When true, load all tool schemas upfront. Default: false (deferred discovery).'),\n })\n .openapi('MCPServer');\n\n// --- Runtime config ---\n\nconst InputTokensCompactionTriggerSchema = z\n .object({\n type: z.literal('input_tokens').describe('Trigger compaction when the estimated input reaches a token limit.'),\n value: z.number().int().positive().describe('Estimated input-token count that triggers compaction.'),\n })\n .strict()\n .openapi('InputTokensCompactionTrigger');\n\nconst CompactionSettingsSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Summarize older history when context grows too large. Default: true.'),\n trigger: InputTokensCompactionTriggerSchema.optional(),\n })\n .strict()\n .describe('Uses 80% of the model context length when the explicit trigger is omitted, or 50000 tokens if unknown.')\n .openapi('CompactionConfig');\n\nconst LargeToolResponseSettingsSchema = z.object({\n enabled: z.boolean().default(true).describe('Offload oversized tool responses to a sandbox file. Default: true.'),\n individual_tool_response_token_threshold: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD)\n .describe(\n `Token threshold for a single tool response before offloading. Default: ${String(DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD)}.`,\n ),\n total_tool_response_token_threshold: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD)\n .describe(\n `Combined tool-response token threshold before offloading. Default: ${String(DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD)}.`,\n ),\n preview_number_of_characters: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS)\n .describe(\n `Characters of preview kept in context after offloading. Default: ${String(DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS)}.`,\n ),\n});\n\nconst SandboxConfigSchema = z\n .object({\n enabled: z.boolean().describe('Give the agent a sandbox. Required for skills and Code Mode.'),\n file_downloads: z\n .boolean()\n .default(true)\n .describe('Allow downloading agent-produced files via the turn download endpoint. Default: true.'),\n })\n .openapi('SandboxConfig');\n\nconst DynamicSubAgentsConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Allow the agent to spawn dynamic subagents. Default: true.'),\n })\n .openapi('DynamicSubAgentsConfig');\n\nconst LargeToolResponseConfigSchema = LargeToolResponseSettingsSchema.pick({\n enabled: true,\n}).openapi('LargeToolResponseConfig');\n\nconst ContextManagementConfigSchema = z\n .object({\n compaction: CompactionSettingsSchema.default(() => ({ enabled: true })),\n large_tool_response: LargeToolResponseConfigSchema.default(() => ({ enabled: true })),\n })\n .openapi('ContextManagementConfig');\n\nconst GenerativeUIConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Enable Generative UI (OpenUI blocks). Default: true.'),\n })\n .openapi('GenerativeUIConfig');\n\nconst AskUserQuestionsConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Enable the `ask_user_question` tool. Default: true.'),\n })\n .openapi('AskUserQuestionsConfig');\n\nexport const RuntimeConfigSchema = z\n .object({\n iteration_limit: z\n .number()\n .int()\n .positive()\n .max(1024)\n .default(DEFAULT_AGENT_CONFIG_ITERATION_LIMIT)\n .describe(\n `Max agent-loop iterations per turn (1–1024). Default: ${String(DEFAULT_AGENT_CONFIG_ITERATION_LIMIT)}.`,\n ),\n sandbox: SandboxConfigSchema.default(() => ({ enabled: false, file_downloads: true })),\n dynamic_sub_agents: DynamicSubAgentsConfigSchema.default(() => ({ enabled: true })),\n context_management: ContextManagementConfigSchema.default(() => ({\n compaction: { enabled: true },\n large_tool_response: { enabled: true },\n })),\n generative_ui: GenerativeUIConfigSchema.default(() => ({ enabled: true })),\n ask_user_questions: AskUserQuestionsConfigSchema.default(() => ({ enabled: true })),\n })\n .openapi('RuntimeConfig');\n\n// --- Skills ---\n// Name-only refs; DB sessions expand mount fields from ISkillStore at turn time.\n\nconst SKILL_NAME_REGEX = /^[A-Za-z0-9._-]+$/;\n\n/** Name-only skill selection; mount fields come from the skill store. */\nconst SkillSchema = z\n .object({\n name: z\n .string()\n .trim()\n .min(1)\n .max(64)\n .regex(SKILL_NAME_REGEX, 'Name may only contain letters, numbers, \".\", \"_\", and \"-\"')\n .refine(v => v !== '.' && v !== '..', 'Name must not be \".\" or \"..\"')\n .refine(v => !v.startsWith('.tfy-'), 'Name must not use the reserved \".tfy-\" prefix')\n .describe('Name of a configured skill (also used as the skill directory name in the sandbox).'),\n })\n .strict()\n .openapi('Skill');\n\n// --- Initial messages (string-only; turn UserMessage also allows file parts) ---\n\nconst InitialUserMessageSchema = z\n .object({\n type: z.literal('user.message').describe('Initial message type.'),\n content: z\n .string()\n .min(1, 'User message content must not be empty')\n .refine(content => content.trim().length > 0, 'User message content must not be empty')\n .describe('Initial user message content injected at the start of every session.'),\n })\n .openapi('InitialUserMessage');\n\n// --- Agent spec ---\n\nexport const AgentSpecSchema = z\n .object({\n model: ModelSchema,\n instructions: z\n .string()\n .optional()\n .describe(\"Optional system prompt — the agent's role, behavior, and constraints.\"),\n messages: z\n .array(InitialUserMessageSchema)\n .optional()\n .describe('Optional initial user messages injected at the start of every session.'),\n mcp_servers: z\n .array(MCPServerRequestSchema)\n .optional()\n .describe('Optional MCP servers attached by configured name.'),\n response_format: ResponseFormatSchema.optional(),\n skills: z\n .array(SkillSchema)\n .optional()\n .describe('Optional name-only skill references. Requires `config.sandbox.enabled: true`.'),\n // Factory must parse so nested RuntimeConfig field defaults materialize.\n config: RuntimeConfigSchema.default(() => RuntimeConfigSchema.parse({})),\n })\n .describe('Complete agent definition used inline on a session or saved as a named agent.')\n .openapi('AgentSpec');\n\nexport type AgentSpec = z.infer<typeof AgentSpecSchema>;\nexport type Skill = z.infer<typeof SkillSchema>;\nexport type InitialUserMessage = z.infer<typeof InitialUserMessageSchema>;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/agent-session/schemas/agentSpec.ts"],"sourcesContent":["/** DB AgentSpec wire schema — FQN model names and skill refs (name + optional preload). */\nimport { z } from '@hono/zod-openapi';\nimport {\n DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,\n DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,\n DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,\n} from '../../core/capabilities/builtins/LargeToolResponse';\nimport { ResponseFormatSchema } from '../../core/llm/responseFormat';\nimport {\n DEFAULT_DISABLE_TOOLS,\n DEFAULT_ENABLE_TOOLS,\n DEFAULT_PRELOAD_TOOLS,\n DEFAULT_REQUIRE_APPROVAL_FOR_TOOLS,\n REQUIRE_APPROVAL_TOOLS_SELECTOR_TAGS,\n TOOLS_SELECTOR_TAGS,\n} from '../../core/mcp/toolSelectors';\n\nexport const DEFAULT_AGENT_CONFIG_ITERATION_LIMIT = 100;\n\n// --- Model ---\n\nconst ModelParamsSchema = z\n .object({\n max_tokens: z.number().optional().describe('Maximum tokens to generate in the model response.'),\n temperature: z.number().optional().describe('Sampling temperature; higher values increase randomness.'),\n top_p: z.number().optional().describe('Nucleus sampling probability mass.'),\n top_k: z.number().optional().describe('Top-k sampling; keep only the k highest-probability tokens.'),\n parallel_tool_calls: z\n .boolean()\n .optional()\n .describe('Whether the model may emit multiple tool calls in one response.'),\n reasoning_effort: z.string().optional().describe('Provider-specific reasoning effort (e.g. low/medium/high).'),\n })\n .loose() // this ensures extra model params are allowed\n .describe(\n 'Model call parameters passed through to the provider. Known keys are documented; extra keys are allowed and forwarded as-is.',\n )\n .openapi('ModelParams');\n\n// Opaque runtime identifier; the hosting server owns naming conventions (e.g. provider/model).\nconst ModelSchema = z\n .object({\n name: z\n .string()\n .min(1, 'model.name must not be empty')\n .describe('Model FQN: `provider/model`, e.g. `openai/gpt-5.2`.'),\n params: ModelParamsSchema.optional(),\n })\n .openapi('Model');\n\n// --- MCP servers ---\n\n// Literal tool name (not a tag).\nconst LiteralToolSelectorSchema = z\n .string()\n .min(1)\n .refine(s => !s.startsWith('@'), { message: 'Invalid tool selector tag' });\n\n// enable_tools / disable_tools / preload_tools: @all, @read-only, or a literal name.\nconst EnableToolSelectorSchema = z\n .union([z.enum(TOOLS_SELECTOR_TAGS), LiteralToolSelectorSchema])\n .openapi('MCPServerToolSelector');\n\n// require_approval_for_tools: @all, @write, @destructive, or a literal name.\nconst RequireApprovalToolSelectorSchema = z\n .union([z.enum(REQUIRE_APPROVAL_TOOLS_SELECTOR_TAGS), LiteralToolSelectorSchema])\n .openapi('MCPServerApprovalToolSelector');\n\n// `preload` defaults to false; use `preload_tools` to eagerly load specific tools when not fully preloading.\n// Auth headers are not part of the spec — they come from the configured MCP server store.\nconst MCPServerRequestSchema = z\n .object({\n name: z\n .string()\n .min(1, 'mcp_servers[].name must not be empty')\n .describe('Name of a configured MCP server (Settings → Connectors).'),\n // Which tools to enable. Default: all tools.\n enable_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_ENABLE_TOOLS)\n .describe('Tools exposed to the agent: `@all`, `@read-only`, or literal tool names. Default: `[\"@all\"]`.'),\n // Which tools to disable (subtracted from enable_tools). Default: none.\n disable_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_DISABLE_TOOLS)\n .describe('Tools subtracted from the enabled set. Default: none.'),\n // When the server is not fully preloaded (`preload: false`), which tools to\n // still preload into context. A non-empty list implies `preload: false`.\n preload_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_PRELOAD_TOOLS)\n .describe(\n 'Tools loaded eagerly into context while the rest stay deferred. A non-empty list implies `preload: false`.',\n ),\n // Tools that require human approval before execution. Default: @write + @destructive.\n require_approval_for_tools: z\n .array(RequireApprovalToolSelectorSchema)\n .default(DEFAULT_REQUIRE_APPROVAL_FOR_TOOLS)\n .describe(\n 'Tools that pause for human approval: `@all`, `@write`, `@destructive`, or literal names. Default: `[\"@write\", \"@destructive\"]`.',\n ),\n // Whether this server's tools are preloaded into context. Default: false.\n // When false, tools are discovered lazily and only `preload_tools` stay eager.\n preload: z\n .boolean()\n .optional()\n .default(false)\n .describe('When true, load all tool schemas upfront. Default: false (deferred discovery).'),\n })\n .openapi('MCPServer');\n\n// --- Runtime config ---\n\nconst InputTokensCompactionTriggerSchema = z\n .object({\n type: z.literal('input_tokens').describe('Trigger compaction when the estimated input reaches a token limit.'),\n value: z.number().int().positive().describe('Estimated input-token count that triggers compaction.'),\n })\n .strict()\n .openapi('InputTokensCompactionTrigger');\n\nconst CompactionSettingsSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Summarize older history when context grows too large. Default: true.'),\n trigger: InputTokensCompactionTriggerSchema.optional(),\n })\n .strict()\n .describe('Uses 80% of the model context length when the explicit trigger is omitted, or 50000 tokens if unknown.')\n .openapi('CompactionConfig');\n\nconst LargeToolResponseSettingsSchema = z.object({\n enabled: z.boolean().default(true).describe('Offload oversized tool responses to a sandbox file. Default: true.'),\n individual_tool_response_token_threshold: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD)\n .describe(\n `Token threshold for a single tool response before offloading. Default: ${String(DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD)}.`,\n ),\n total_tool_response_token_threshold: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD)\n .describe(\n `Combined tool-response token threshold before offloading. Default: ${String(DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD)}.`,\n ),\n preview_number_of_characters: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS)\n .describe(\n `Characters of preview kept in context after offloading. Default: ${String(DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS)}.`,\n ),\n});\n\nconst SandboxConfigSchema = z\n .object({\n enabled: z.boolean().describe('Give the agent a sandbox. Required for skills and Code Mode.'),\n file_downloads: z\n .boolean()\n .default(true)\n .describe('Allow downloading agent-produced files via the turn download endpoint. Default: true.'),\n })\n .openapi('SandboxConfig');\n\nconst DynamicSubAgentsConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Allow the agent to spawn dynamic subagents. Default: true.'),\n })\n .openapi('DynamicSubAgentsConfig');\n\nconst LargeToolResponseConfigSchema = LargeToolResponseSettingsSchema.pick({\n enabled: true,\n}).openapi('LargeToolResponseConfig');\n\nconst ContextManagementConfigSchema = z\n .object({\n compaction: CompactionSettingsSchema.default(() => ({ enabled: true })),\n large_tool_response: LargeToolResponseConfigSchema.default(() => ({ enabled: true })),\n })\n .openapi('ContextManagementConfig');\n\nconst GenerativeUIConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Enable Generative UI (OpenUI blocks). Default: true.'),\n })\n .openapi('GenerativeUIConfig');\n\nconst AskUserQuestionsConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Enable the `ask_user_question` tool. Default: true.'),\n })\n .openapi('AskUserQuestionsConfig');\n\nexport const RuntimeConfigSchema = z\n .object({\n iteration_limit: z\n .number()\n .int()\n .positive()\n .max(1024)\n .default(DEFAULT_AGENT_CONFIG_ITERATION_LIMIT)\n .describe(\n `Max agent-loop iterations per turn (1–1024). Default: ${String(DEFAULT_AGENT_CONFIG_ITERATION_LIMIT)}.`,\n ),\n sandbox: SandboxConfigSchema.default(() => ({ enabled: false, file_downloads: true })),\n dynamic_sub_agents: DynamicSubAgentsConfigSchema.default(() => ({ enabled: true })),\n context_management: ContextManagementConfigSchema.default(() => ({\n compaction: { enabled: true },\n large_tool_response: { enabled: true },\n })),\n generative_ui: GenerativeUIConfigSchema.default(() => ({ enabled: true })),\n ask_user_questions: AskUserQuestionsConfigSchema.default(() => ({ enabled: true })),\n })\n .openapi('RuntimeConfig');\n\n// --- Skills ---\n// Name (+ optional preload) refs; the skill store expands mounts at turn time.\n\nconst SKILL_NAME_REGEX = /^[A-Za-z0-9._\\-/:]+$/;\n\nconst MAX_AGENT_SKILLS = 50;\n\n/** Skill selection; mount fields come from the skill store. */\nconst SkillSchema = z\n .object({\n name: z\n .string()\n .trim()\n .min(1)\n .regex(SKILL_NAME_REGEX, 'Name may only contain letters, numbers, \".\", \"_\", \"-\", \"/\", and \":\"')\n .refine(v => v !== '.' && v !== '..', 'Name must not be \".\" or \"..\"')\n .refine(v => !v.startsWith('.tfy-'), 'Name must not use the reserved \".tfy-\" prefix')\n .describe('Skill name.'),\n preload: z.boolean().optional().default(false).describe('Inline SKILL.md into the prompt.'),\n })\n .strict()\n .openapi('Skill');\n\n// --- Initial messages (string-only; turn UserMessage also allows file parts) ---\n\nconst InitialUserMessageSchema = z\n .object({\n type: z.literal('user.message').describe('Initial message type.'),\n content: z\n .string()\n .min(1, 'User message content must not be empty')\n .refine(content => content.trim().length > 0, 'User message content must not be empty')\n .describe('Initial user message content injected at the start of every session.'),\n })\n .openapi('InitialUserMessage');\n\n// --- Agent spec ---\n\nexport const AgentSpecSchema = z\n .object({\n model: ModelSchema,\n instructions: z\n .string()\n .optional()\n .describe(\"Optional system prompt — the agent's role, behavior, and constraints.\"),\n messages: z\n .array(InitialUserMessageSchema)\n .optional()\n .describe('Optional initial user messages injected at the start of every session.'),\n mcp_servers: z\n .array(MCPServerRequestSchema)\n .optional()\n .describe('Optional MCP servers attached by configured name.'),\n response_format: ResponseFormatSchema.optional(),\n skills: z.array(SkillSchema).max(MAX_AGENT_SKILLS).optional().describe('Skills used in this agent.'),\n // Factory must parse so nested RuntimeConfig field defaults materialize.\n config: RuntimeConfigSchema.default(() => RuntimeConfigSchema.parse({})),\n })\n .describe('Complete agent definition used inline on a session or saved as a named agent.')\n .openapi('AgentSpec');\n\nexport type AgentSpec = z.infer<typeof AgentSpecSchema>;\nexport type Skill = z.infer<typeof SkillSchema>;\nexport type InitialUserMessage = z.infer<typeof InitialUserMessageSchema>;\n"],"mappings":"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","names":[]}
@@ -104,9 +104,11 @@ var RuntimeConfigSchema = z.object({
104
104
  generative_ui: GenerativeUIConfigSchema.default(() => ({ enabled: true })),
105
105
  ask_user_questions: AskUserQuestionsConfigSchema.default(() => ({ enabled: true }))
106
106
  }).openapi("RuntimeConfig");
107
- var SKILL_NAME_REGEX = /^[A-Za-z0-9._-]+$/;
107
+ var SKILL_NAME_REGEX = /^[A-Za-z0-9._\-/:]+$/;
108
+ var MAX_AGENT_SKILLS = 50;
108
109
  var SkillSchema = z.object({
109
- name: z.string().trim().min(1).max(64).regex(SKILL_NAME_REGEX, 'Name may only contain letters, numbers, ".", "_", and "-"').refine((v) => v !== "." && v !== "..", 'Name must not be "." or ".."').refine((v) => !v.startsWith(".tfy-"), 'Name must not use the reserved ".tfy-" prefix').describe("Name of a configured skill (also used as the skill directory name in the sandbox).")
110
+ name: z.string().trim().min(1).regex(SKILL_NAME_REGEX, 'Name may only contain letters, numbers, ".", "_", "-", "/", and ":"').refine((v) => v !== "." && v !== "..", 'Name must not be "." or ".."').refine((v) => !v.startsWith(".tfy-"), 'Name must not use the reserved ".tfy-" prefix').describe("Skill name."),
111
+ preload: z.boolean().optional().default(false).describe("Inline SKILL.md into the prompt.")
110
112
  }).strict().openapi("Skill");
111
113
  var InitialUserMessageSchema = z.object({
112
114
  type: z.literal("user.message").describe("Initial message type."),
@@ -118,7 +120,7 @@ var AgentSpecSchema = z.object({
118
120
  messages: z.array(InitialUserMessageSchema).optional().describe("Optional initial user messages injected at the start of every session."),
119
121
  mcp_servers: z.array(MCPServerRequestSchema).optional().describe("Optional MCP servers attached by configured name."),
120
122
  response_format: ResponseFormatSchema.optional(),
121
- skills: z.array(SkillSchema).optional().describe("Optional name-only skill references. Requires `config.sandbox.enabled: true`."),
123
+ skills: z.array(SkillSchema).max(MAX_AGENT_SKILLS).optional().describe("Skills used in this agent."),
122
124
  // Factory must parse so nested RuntimeConfig field defaults materialize.
123
125
  config: RuntimeConfigSchema.default(() => RuntimeConfigSchema.parse({}))
124
126
  }).describe("Complete agent definition used inline on a session or saved as a named agent.").openapi("AgentSpec");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/agent-session/schemas/agentSpec.ts"],"sourcesContent":["/** DB AgentSpec wire schema — FQN model names and name-only skill refs. */\nimport { z } from '@hono/zod-openapi';\nimport {\n DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,\n DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,\n DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,\n} from '../../core/capabilities/builtins/LargeToolResponse';\nimport { ResponseFormatSchema } from '../../core/llm/responseFormat';\nimport {\n DEFAULT_DISABLE_TOOLS,\n DEFAULT_ENABLE_TOOLS,\n DEFAULT_PRELOAD_TOOLS,\n DEFAULT_REQUIRE_APPROVAL_FOR_TOOLS,\n REQUIRE_APPROVAL_TOOLS_SELECTOR_TAGS,\n TOOLS_SELECTOR_TAGS,\n} from '../../core/mcp/toolSelectors';\n\nexport const DEFAULT_AGENT_CONFIG_ITERATION_LIMIT = 100;\n\n// --- Model ---\n\nconst ModelParamsSchema = z\n .object({\n max_tokens: z.number().optional().describe('Maximum tokens to generate in the model response.'),\n temperature: z.number().optional().describe('Sampling temperature; higher values increase randomness.'),\n top_p: z.number().optional().describe('Nucleus sampling probability mass.'),\n top_k: z.number().optional().describe('Top-k sampling; keep only the k highest-probability tokens.'),\n parallel_tool_calls: z\n .boolean()\n .optional()\n .describe('Whether the model may emit multiple tool calls in one response.'),\n reasoning_effort: z.string().optional().describe('Provider-specific reasoning effort (e.g. low/medium/high).'),\n })\n .loose() // this ensures extra model params are allowed\n .describe(\n 'Model call parameters passed through to the provider. Known keys are documented; extra keys are allowed and forwarded as-is.',\n )\n .openapi('ModelParams');\n\n// Opaque runtime identifier; the hosting server owns naming conventions (e.g. provider/model).\nconst ModelSchema = z\n .object({\n name: z\n .string()\n .min(1, 'model.name must not be empty')\n .describe('Model FQN: `provider/model`, e.g. `openai/gpt-5.2`.'),\n params: ModelParamsSchema.optional(),\n })\n .openapi('Model');\n\n// --- MCP servers ---\n\n// Literal tool name (not a tag).\nconst LiteralToolSelectorSchema = z\n .string()\n .min(1)\n .refine(s => !s.startsWith('@'), { message: 'Invalid tool selector tag' });\n\n// enable_tools / disable_tools / preload_tools: @all, @read-only, or a literal name.\nconst EnableToolSelectorSchema = z\n .union([z.enum(TOOLS_SELECTOR_TAGS), LiteralToolSelectorSchema])\n .openapi('MCPServerToolSelector');\n\n// require_approval_for_tools: @all, @write, @destructive, or a literal name.\nconst RequireApprovalToolSelectorSchema = z\n .union([z.enum(REQUIRE_APPROVAL_TOOLS_SELECTOR_TAGS), LiteralToolSelectorSchema])\n .openapi('MCPServerApprovalToolSelector');\n\n// `preload` defaults to false; use `preload_tools` to eagerly load specific tools when not fully preloading.\n// Auth headers are not part of the spec — they come from the configured MCP server store.\nconst MCPServerRequestSchema = z\n .object({\n name: z\n .string()\n .min(1, 'mcp_servers[].name must not be empty')\n .describe('Name of a configured MCP server (Settings → Connectors).'),\n // Which tools to enable. Default: all tools.\n enable_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_ENABLE_TOOLS)\n .describe('Tools exposed to the agent: `@all`, `@read-only`, or literal tool names. Default: `[\"@all\"]`.'),\n // Which tools to disable (subtracted from enable_tools). Default: none.\n disable_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_DISABLE_TOOLS)\n .describe('Tools subtracted from the enabled set. Default: none.'),\n // When the server is not fully preloaded (`preload: false`), which tools to\n // still preload into context. A non-empty list implies `preload: false`.\n preload_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_PRELOAD_TOOLS)\n .describe(\n 'Tools loaded eagerly into context while the rest stay deferred. A non-empty list implies `preload: false`.',\n ),\n // Tools that require human approval before execution. Default: @write + @destructive.\n require_approval_for_tools: z\n .array(RequireApprovalToolSelectorSchema)\n .default(DEFAULT_REQUIRE_APPROVAL_FOR_TOOLS)\n .describe(\n 'Tools that pause for human approval: `@all`, `@write`, `@destructive`, or literal names. Default: `[\"@write\", \"@destructive\"]`.',\n ),\n // Whether this server's tools are preloaded into context. Default: false.\n // When false, tools are discovered lazily and only `preload_tools` stay eager.\n preload: z\n .boolean()\n .optional()\n .default(false)\n .describe('When true, load all tool schemas upfront. Default: false (deferred discovery).'),\n })\n .openapi('MCPServer');\n\n// --- Runtime config ---\n\nconst InputTokensCompactionTriggerSchema = z\n .object({\n type: z.literal('input_tokens').describe('Trigger compaction when the estimated input reaches a token limit.'),\n value: z.number().int().positive().describe('Estimated input-token count that triggers compaction.'),\n })\n .strict()\n .openapi('InputTokensCompactionTrigger');\n\nconst CompactionSettingsSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Summarize older history when context grows too large. Default: true.'),\n trigger: InputTokensCompactionTriggerSchema.optional(),\n })\n .strict()\n .describe('Uses 80% of the model context length when the explicit trigger is omitted, or 50000 tokens if unknown.')\n .openapi('CompactionConfig');\n\nconst LargeToolResponseSettingsSchema = z.object({\n enabled: z.boolean().default(true).describe('Offload oversized tool responses to a sandbox file. Default: true.'),\n individual_tool_response_token_threshold: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD)\n .describe(\n `Token threshold for a single tool response before offloading. Default: ${String(DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD)}.`,\n ),\n total_tool_response_token_threshold: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD)\n .describe(\n `Combined tool-response token threshold before offloading. Default: ${String(DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD)}.`,\n ),\n preview_number_of_characters: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS)\n .describe(\n `Characters of preview kept in context after offloading. Default: ${String(DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS)}.`,\n ),\n});\n\nconst SandboxConfigSchema = z\n .object({\n enabled: z.boolean().describe('Give the agent a sandbox. Required for skills and Code Mode.'),\n file_downloads: z\n .boolean()\n .default(true)\n .describe('Allow downloading agent-produced files via the turn download endpoint. Default: true.'),\n })\n .openapi('SandboxConfig');\n\nconst DynamicSubAgentsConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Allow the agent to spawn dynamic subagents. Default: true.'),\n })\n .openapi('DynamicSubAgentsConfig');\n\nconst LargeToolResponseConfigSchema = LargeToolResponseSettingsSchema.pick({\n enabled: true,\n}).openapi('LargeToolResponseConfig');\n\nconst ContextManagementConfigSchema = z\n .object({\n compaction: CompactionSettingsSchema.default(() => ({ enabled: true })),\n large_tool_response: LargeToolResponseConfigSchema.default(() => ({ enabled: true })),\n })\n .openapi('ContextManagementConfig');\n\nconst GenerativeUIConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Enable Generative UI (OpenUI blocks). Default: true.'),\n })\n .openapi('GenerativeUIConfig');\n\nconst AskUserQuestionsConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Enable the `ask_user_question` tool. Default: true.'),\n })\n .openapi('AskUserQuestionsConfig');\n\nexport const RuntimeConfigSchema = z\n .object({\n iteration_limit: z\n .number()\n .int()\n .positive()\n .max(1024)\n .default(DEFAULT_AGENT_CONFIG_ITERATION_LIMIT)\n .describe(\n `Max agent-loop iterations per turn (1–1024). Default: ${String(DEFAULT_AGENT_CONFIG_ITERATION_LIMIT)}.`,\n ),\n sandbox: SandboxConfigSchema.default(() => ({ enabled: false, file_downloads: true })),\n dynamic_sub_agents: DynamicSubAgentsConfigSchema.default(() => ({ enabled: true })),\n context_management: ContextManagementConfigSchema.default(() => ({\n compaction: { enabled: true },\n large_tool_response: { enabled: true },\n })),\n generative_ui: GenerativeUIConfigSchema.default(() => ({ enabled: true })),\n ask_user_questions: AskUserQuestionsConfigSchema.default(() => ({ enabled: true })),\n })\n .openapi('RuntimeConfig');\n\n// --- Skills ---\n// Name-only refs; DB sessions expand mount fields from ISkillStore at turn time.\n\nconst SKILL_NAME_REGEX = /^[A-Za-z0-9._-]+$/;\n\n/** Name-only skill selection; mount fields come from the skill store. */\nconst SkillSchema = z\n .object({\n name: z\n .string()\n .trim()\n .min(1)\n .max(64)\n .regex(SKILL_NAME_REGEX, 'Name may only contain letters, numbers, \".\", \"_\", and \"-\"')\n .refine(v => v !== '.' && v !== '..', 'Name must not be \".\" or \"..\"')\n .refine(v => !v.startsWith('.tfy-'), 'Name must not use the reserved \".tfy-\" prefix')\n .describe('Name of a configured skill (also used as the skill directory name in the sandbox).'),\n })\n .strict()\n .openapi('Skill');\n\n// --- Initial messages (string-only; turn UserMessage also allows file parts) ---\n\nconst InitialUserMessageSchema = z\n .object({\n type: z.literal('user.message').describe('Initial message type.'),\n content: z\n .string()\n .min(1, 'User message content must not be empty')\n .refine(content => content.trim().length > 0, 'User message content must not be empty')\n .describe('Initial user message content injected at the start of every session.'),\n })\n .openapi('InitialUserMessage');\n\n// --- Agent spec ---\n\nexport const AgentSpecSchema = z\n .object({\n model: ModelSchema,\n instructions: z\n .string()\n .optional()\n .describe(\"Optional system prompt — the agent's role, behavior, and constraints.\"),\n messages: z\n .array(InitialUserMessageSchema)\n .optional()\n .describe('Optional initial user messages injected at the start of every session.'),\n mcp_servers: z\n .array(MCPServerRequestSchema)\n .optional()\n .describe('Optional MCP servers attached by configured name.'),\n response_format: ResponseFormatSchema.optional(),\n skills: z\n .array(SkillSchema)\n .optional()\n .describe('Optional name-only skill references. Requires `config.sandbox.enabled: true`.'),\n // Factory must parse so nested RuntimeConfig field defaults materialize.\n config: RuntimeConfigSchema.default(() => RuntimeConfigSchema.parse({})),\n })\n .describe('Complete agent definition used inline on a session or saved as a named agent.')\n .openapi('AgentSpec');\n\nexport type AgentSpec = z.infer<typeof AgentSpecSchema>;\nexport type Skill = z.infer<typeof SkillSchema>;\nexport type InitialUserMessage = z.infer<typeof InitialUserMessageSchema>;\n"],"mappings":";AACA,SAAS,SAAS;AAClB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,IAAM,uCAAuC;AAIpD,IAAM,oBAAoB,EACvB,OAAO;AAAA,EACN,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mDAAmD;AAAA,EAC9F,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0DAA0D;AAAA,EACtG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,oCAAoC;AAAA,EAC1E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,6DAA6D;AAAA,EACnG,qBAAqB,EAClB,QAAQ,EACR,SAAS,EACT,SAAS,iEAAiE;AAAA,EAC7E,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4DAA4D;AAC/G,CAAC,EACA,MAAM,EACN;AAAA,EACC;AACF,EACC,QAAQ,aAAa;AAGxB,IAAM,cAAc,EACjB,OAAO;AAAA,EACN,MAAM,EACH,OAAO,EACP,IAAI,GAAG,8BAA8B,EACrC,SAAS,qDAAqD;AAAA,EACjE,QAAQ,kBAAkB,SAAS;AACrC,CAAC,EACA,QAAQ,OAAO;AAKlB,IAAM,4BAA4B,EAC/B,OAAO,EACP,IAAI,CAAC,EACL,OAAO,OAAK,CAAC,EAAE,WAAW,GAAG,GAAG,EAAE,SAAS,4BAA4B,CAAC;AAG3E,IAAM,2BAA2B,EAC9B,MAAM,CAAC,EAAE,KAAK,mBAAmB,GAAG,yBAAyB,CAAC,EAC9D,QAAQ,uBAAuB;AAGlC,IAAM,oCAAoC,EACvC,MAAM,CAAC,EAAE,KAAK,oCAAoC,GAAG,yBAAyB,CAAC,EAC/E,QAAQ,+BAA+B;AAI1C,IAAM,yBAAyB,EAC5B,OAAO;AAAA,EACN,MAAM,EACH,OAAO,EACP,IAAI,GAAG,sCAAsC,EAC7C,SAAS,+DAA0D;AAAA;AAAA,EAEtE,cAAc,EACX,MAAM,wBAAwB,EAC9B,QAAQ,oBAAoB,EAC5B,SAAS,+FAA+F;AAAA;AAAA,EAE3G,eAAe,EACZ,MAAM,wBAAwB,EAC9B,QAAQ,qBAAqB,EAC7B,SAAS,uDAAuD;AAAA;AAAA;AAAA,EAGnE,eAAe,EACZ,MAAM,wBAAwB,EAC9B,QAAQ,qBAAqB,EAC7B;AAAA,IACC;AAAA,EACF;AAAA;AAAA,EAEF,4BAA4B,EACzB,MAAM,iCAAiC,EACvC,QAAQ,kCAAkC,EAC1C;AAAA,IACC;AAAA,EACF;AAAA;AAAA;AAAA,EAGF,SAAS,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,KAAK,EACb,SAAS,gFAAgF;AAC9F,CAAC,EACA,QAAQ,WAAW;AAItB,IAAM,qCAAqC,EACxC,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,cAAc,EAAE,SAAS,oEAAoE;AAAA,EAC7G,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,uDAAuD;AACrG,CAAC,EACA,OAAO,EACP,QAAQ,8BAA8B;AAEzC,IAAM,2BAA2B,EAC9B,OAAO;AAAA,EACN,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS,sEAAsE;AAAA,EAClH,SAAS,mCAAmC,SAAS;AACvD,CAAC,EACA,OAAO,EACP,SAAS,wGAAwG,EACjH,QAAQ,kBAAkB;AAE7B,IAAM,kCAAkC,EAAE,OAAO;AAAA,EAC/C,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS,oEAAoE;AAAA,EAChH,0CAA0C,EACvC,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,uCAAuC,EAC/C;AAAA,IACC,0EAA0E,OAAO,uCAAuC,CAAC;AAAA,EAC3H;AAAA,EACF,qCAAqC,EAClC,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,kCAAkC,EAC1C;AAAA,IACC,sEAAsE,OAAO,kCAAkC,CAAC;AAAA,EAClH;AAAA,EACF,8BAA8B,EAC3B,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,oCAAoC,EAC5C;AAAA,IACC,oEAAoE,OAAO,oCAAoC,CAAC;AAAA,EAClH;AACJ,CAAC;AAED,IAAM,sBAAsB,EACzB,OAAO;AAAA,EACN,SAAS,EAAE,QAAQ,EAAE,SAAS,8DAA8D;AAAA,EAC5F,gBAAgB,EACb,QAAQ,EACR,QAAQ,IAAI,EACZ,SAAS,uFAAuF;AACrG,CAAC,EACA,QAAQ,eAAe;AAE1B,IAAM,+BAA+B,EAClC,OAAO;AAAA,EACN,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS,4DAA4D;AAC1G,CAAC,EACA,QAAQ,wBAAwB;AAEnC,IAAM,gCAAgC,gCAAgC,KAAK;AAAA,EACzE,SAAS;AACX,CAAC,EAAE,QAAQ,yBAAyB;AAEpC,IAAM,gCAAgC,EACnC,OAAO;AAAA,EACN,YAAY,yBAAyB,QAAQ,OAAO,EAAE,SAAS,KAAK,EAAE;AAAA,EACtE,qBAAqB,8BAA8B,QAAQ,OAAO,EAAE,SAAS,KAAK,EAAE;AACtF,CAAC,EACA,QAAQ,yBAAyB;AAEpC,IAAM,2BAA2B,EAC9B,OAAO;AAAA,EACN,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS,sDAAsD;AACpG,CAAC,EACA,QAAQ,oBAAoB;AAE/B,IAAM,+BAA+B,EAClC,OAAO;AAAA,EACN,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,SAAS,qDAAqD;AACnG,CAAC,EACA,QAAQ,wBAAwB;AAE5B,IAAM,sBAAsB,EAChC,OAAO;AAAA,EACN,iBAAiB,EACd,OAAO,EACP,IAAI,EACJ,SAAS,EACT,IAAI,IAAI,EACR,QAAQ,oCAAoC,EAC5C;AAAA,IACC,8DAAyD,OAAO,oCAAoC,CAAC;AAAA,EACvG;AAAA,EACF,SAAS,oBAAoB,QAAQ,OAAO,EAAE,SAAS,OAAO,gBAAgB,KAAK,EAAE;AAAA,EACrF,oBAAoB,6BAA6B,QAAQ,OAAO,EAAE,SAAS,KAAK,EAAE;AAAA,EAClF,oBAAoB,8BAA8B,QAAQ,OAAO;AAAA,IAC/D,YAAY,EAAE,SAAS,KAAK;AAAA,IAC5B,qBAAqB,EAAE,SAAS,KAAK;AAAA,EACvC,EAAE;AAAA,EACF,eAAe,yBAAyB,QAAQ,OAAO,EAAE,SAAS,KAAK,EAAE;AAAA,EACzE,oBAAoB,6BAA6B,QAAQ,OAAO,EAAE,SAAS,KAAK,EAAE;AACpF,CAAC,EACA,QAAQ,eAAe;AAK1B,IAAM,mBAAmB;AAGzB,IAAM,cAAc,EACjB,OAAO;AAAA,EACN,MAAM,EACH,OAAO,EACP,KAAK,EACL,IAAI,CAAC,EACL,IAAI,EAAE,EACN,MAAM,kBAAkB,2DAA2D,EACnF,OAAO,OAAK,MAAM,OAAO,MAAM,MAAM,8BAA8B,EACnE,OAAO,OAAK,CAAC,EAAE,WAAW,OAAO,GAAG,+CAA+C,EACnF,SAAS,oFAAoF;AAClG,CAAC,EACA,OAAO,EACP,QAAQ,OAAO;AAIlB,IAAM,2BAA2B,EAC9B,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,cAAc,EAAE,SAAS,uBAAuB;AAAA,EAChE,SAAS,EACN,OAAO,EACP,IAAI,GAAG,wCAAwC,EAC/C,OAAO,aAAW,QAAQ,KAAK,EAAE,SAAS,GAAG,wCAAwC,EACrF,SAAS,sEAAsE;AACpF,CAAC,EACA,QAAQ,oBAAoB;AAIxB,IAAM,kBAAkB,EAC5B,OAAO;AAAA,EACN,OAAO;AAAA,EACP,cAAc,EACX,OAAO,EACP,SAAS,EACT,SAAS,4EAAuE;AAAA,EACnF,UAAU,EACP,MAAM,wBAAwB,EAC9B,SAAS,EACT,SAAS,wEAAwE;AAAA,EACpF,aAAa,EACV,MAAM,sBAAsB,EAC5B,SAAS,EACT,SAAS,mDAAmD;AAAA,EAC/D,iBAAiB,qBAAqB,SAAS;AAAA,EAC/C,QAAQ,EACL,MAAM,WAAW,EACjB,SAAS,EACT,SAAS,+EAA+E;AAAA;AAAA,EAE3F,QAAQ,oBAAoB,QAAQ,MAAM,oBAAoB,MAAM,CAAC,CAAC,CAAC;AACzE,CAAC,EACA,SAAS,+EAA+E,EACxF,QAAQ,WAAW;","names":[]}
1
+ {"version":3,"sources":["../../../src/agent-session/schemas/agentSpec.ts"],"sourcesContent":["/** DB AgentSpec wire schema — FQN model names and skill refs (name + optional preload). */\nimport { z } from '@hono/zod-openapi';\nimport {\n DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD,\n DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS,\n DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD,\n} from '../../core/capabilities/builtins/LargeToolResponse';\nimport { ResponseFormatSchema } from '../../core/llm/responseFormat';\nimport {\n DEFAULT_DISABLE_TOOLS,\n DEFAULT_ENABLE_TOOLS,\n DEFAULT_PRELOAD_TOOLS,\n DEFAULT_REQUIRE_APPROVAL_FOR_TOOLS,\n REQUIRE_APPROVAL_TOOLS_SELECTOR_TAGS,\n TOOLS_SELECTOR_TAGS,\n} from '../../core/mcp/toolSelectors';\n\nexport const DEFAULT_AGENT_CONFIG_ITERATION_LIMIT = 100;\n\n// --- Model ---\n\nconst ModelParamsSchema = z\n .object({\n max_tokens: z.number().optional().describe('Maximum tokens to generate in the model response.'),\n temperature: z.number().optional().describe('Sampling temperature; higher values increase randomness.'),\n top_p: z.number().optional().describe('Nucleus sampling probability mass.'),\n top_k: z.number().optional().describe('Top-k sampling; keep only the k highest-probability tokens.'),\n parallel_tool_calls: z\n .boolean()\n .optional()\n .describe('Whether the model may emit multiple tool calls in one response.'),\n reasoning_effort: z.string().optional().describe('Provider-specific reasoning effort (e.g. low/medium/high).'),\n })\n .loose() // this ensures extra model params are allowed\n .describe(\n 'Model call parameters passed through to the provider. Known keys are documented; extra keys are allowed and forwarded as-is.',\n )\n .openapi('ModelParams');\n\n// Opaque runtime identifier; the hosting server owns naming conventions (e.g. provider/model).\nconst ModelSchema = z\n .object({\n name: z\n .string()\n .min(1, 'model.name must not be empty')\n .describe('Model FQN: `provider/model`, e.g. `openai/gpt-5.2`.'),\n params: ModelParamsSchema.optional(),\n })\n .openapi('Model');\n\n// --- MCP servers ---\n\n// Literal tool name (not a tag).\nconst LiteralToolSelectorSchema = z\n .string()\n .min(1)\n .refine(s => !s.startsWith('@'), { message: 'Invalid tool selector tag' });\n\n// enable_tools / disable_tools / preload_tools: @all, @read-only, or a literal name.\nconst EnableToolSelectorSchema = z\n .union([z.enum(TOOLS_SELECTOR_TAGS), LiteralToolSelectorSchema])\n .openapi('MCPServerToolSelector');\n\n// require_approval_for_tools: @all, @write, @destructive, or a literal name.\nconst RequireApprovalToolSelectorSchema = z\n .union([z.enum(REQUIRE_APPROVAL_TOOLS_SELECTOR_TAGS), LiteralToolSelectorSchema])\n .openapi('MCPServerApprovalToolSelector');\n\n// `preload` defaults to false; use `preload_tools` to eagerly load specific tools when not fully preloading.\n// Auth headers are not part of the spec — they come from the configured MCP server store.\nconst MCPServerRequestSchema = z\n .object({\n name: z\n .string()\n .min(1, 'mcp_servers[].name must not be empty')\n .describe('Name of a configured MCP server (Settings → Connectors).'),\n // Which tools to enable. Default: all tools.\n enable_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_ENABLE_TOOLS)\n .describe('Tools exposed to the agent: `@all`, `@read-only`, or literal tool names. Default: `[\"@all\"]`.'),\n // Which tools to disable (subtracted from enable_tools). Default: none.\n disable_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_DISABLE_TOOLS)\n .describe('Tools subtracted from the enabled set. Default: none.'),\n // When the server is not fully preloaded (`preload: false`), which tools to\n // still preload into context. A non-empty list implies `preload: false`.\n preload_tools: z\n .array(EnableToolSelectorSchema)\n .default(DEFAULT_PRELOAD_TOOLS)\n .describe(\n 'Tools loaded eagerly into context while the rest stay deferred. A non-empty list implies `preload: false`.',\n ),\n // Tools that require human approval before execution. Default: @write + @destructive.\n require_approval_for_tools: z\n .array(RequireApprovalToolSelectorSchema)\n .default(DEFAULT_REQUIRE_APPROVAL_FOR_TOOLS)\n .describe(\n 'Tools that pause for human approval: `@all`, `@write`, `@destructive`, or literal names. Default: `[\"@write\", \"@destructive\"]`.',\n ),\n // Whether this server's tools are preloaded into context. Default: false.\n // When false, tools are discovered lazily and only `preload_tools` stay eager.\n preload: z\n .boolean()\n .optional()\n .default(false)\n .describe('When true, load all tool schemas upfront. Default: false (deferred discovery).'),\n })\n .openapi('MCPServer');\n\n// --- Runtime config ---\n\nconst InputTokensCompactionTriggerSchema = z\n .object({\n type: z.literal('input_tokens').describe('Trigger compaction when the estimated input reaches a token limit.'),\n value: z.number().int().positive().describe('Estimated input-token count that triggers compaction.'),\n })\n .strict()\n .openapi('InputTokensCompactionTrigger');\n\nconst CompactionSettingsSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Summarize older history when context grows too large. Default: true.'),\n trigger: InputTokensCompactionTriggerSchema.optional(),\n })\n .strict()\n .describe('Uses 80% of the model context length when the explicit trigger is omitted, or 50000 tokens if unknown.')\n .openapi('CompactionConfig');\n\nconst LargeToolResponseSettingsSchema = z.object({\n enabled: z.boolean().default(true).describe('Offload oversized tool responses to a sandbox file. Default: true.'),\n individual_tool_response_token_threshold: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD)\n .describe(\n `Token threshold for a single tool response before offloading. Default: ${String(DEFAULT_INDIVIDUAL_TOOL_TOKEN_THRESHOLD)}.`,\n ),\n total_tool_response_token_threshold: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD)\n .describe(\n `Combined tool-response token threshold before offloading. Default: ${String(DEFAULT_TOTAL_TOOL_TOKEN_THRESHOLD)}.`,\n ),\n preview_number_of_characters: z\n .number()\n .int()\n .positive()\n .optional()\n .default(DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS)\n .describe(\n `Characters of preview kept in context after offloading. Default: ${String(DEFAULT_PREVIEW_NUMBER_OF_CHARACTERS)}.`,\n ),\n});\n\nconst SandboxConfigSchema = z\n .object({\n enabled: z.boolean().describe('Give the agent a sandbox. Required for skills and Code Mode.'),\n file_downloads: z\n .boolean()\n .default(true)\n .describe('Allow downloading agent-produced files via the turn download endpoint. Default: true.'),\n })\n .openapi('SandboxConfig');\n\nconst DynamicSubAgentsConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Allow the agent to spawn dynamic subagents. Default: true.'),\n })\n .openapi('DynamicSubAgentsConfig');\n\nconst LargeToolResponseConfigSchema = LargeToolResponseSettingsSchema.pick({\n enabled: true,\n}).openapi('LargeToolResponseConfig');\n\nconst ContextManagementConfigSchema = z\n .object({\n compaction: CompactionSettingsSchema.default(() => ({ enabled: true })),\n large_tool_response: LargeToolResponseConfigSchema.default(() => ({ enabled: true })),\n })\n .openapi('ContextManagementConfig');\n\nconst GenerativeUIConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Enable Generative UI (OpenUI blocks). Default: true.'),\n })\n .openapi('GenerativeUIConfig');\n\nconst AskUserQuestionsConfigSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Enable the `ask_user_question` tool. Default: true.'),\n })\n .openapi('AskUserQuestionsConfig');\n\nexport const RuntimeConfigSchema = z\n .object({\n iteration_limit: z\n .number()\n .int()\n .positive()\n .max(1024)\n .default(DEFAULT_AGENT_CONFIG_ITERATION_LIMIT)\n .describe(\n `Max agent-loop iterations per turn (1–1024). Default: ${String(DEFAULT_AGENT_CONFIG_ITERATION_LIMIT)}.`,\n ),\n sandbox: SandboxConfigSchema.default(() => ({ enabled: false, file_downloads: true })),\n dynamic_sub_agents: DynamicSubAgentsConfigSchema.default(() => ({ enabled: true })),\n context_management: ContextManagementConfigSchema.default(() => ({\n compaction: { enabled: true },\n large_tool_response: { enabled: true },\n })),\n generative_ui: GenerativeUIConfigSchema.default(() => ({ enabled: true })),\n ask_user_questions: AskUserQuestionsConfigSchema.default(() => ({ enabled: true })),\n })\n .openapi('RuntimeConfig');\n\n// --- Skills ---\n// Name (+ optional preload) refs; the skill store expands mounts at turn time.\n\nconst SKILL_NAME_REGEX = /^[A-Za-z0-9._\\-/:]+$/;\n\nconst MAX_AGENT_SKILLS = 50;\n\n/** Skill selection; mount fields come from the skill store. */\nconst SkillSchema = z\n .object({\n name: z\n .string()\n .trim()\n .min(1)\n .regex(SKILL_NAME_REGEX, 'Name may only contain letters, numbers, \".\", \"_\", \"-\", \"/\", and \":\"')\n .refine(v => v !== '.' && v !== '..', 'Name must not be \".\" or \"..\"')\n .refine(v => !v.startsWith('.tfy-'), 'Name must not use the reserved \".tfy-\" prefix')\n .describe('Skill name.'),\n preload: z.boolean().optional().default(false).describe('Inline SKILL.md into the prompt.'),\n })\n .strict()\n .openapi('Skill');\n\n// --- Initial messages (string-only; turn UserMessage also allows file parts) ---\n\nconst InitialUserMessageSchema = z\n .object({\n type: z.literal('user.message').describe('Initial message type.'),\n content: z\n .string()\n .min(1, 'User message content must not be empty')\n .refine(content => content.trim().length > 0, 'User message content must not be empty')\n .describe('Initial user message content injected at the start of every session.'),\n })\n .openapi('InitialUserMessage');\n\n// --- Agent spec ---\n\nexport const AgentSpecSchema = z\n .object({\n model: ModelSchema,\n instructions: z\n .string()\n .optional()\n .describe(\"Optional system prompt — the agent's role, behavior, and constraints.\"),\n messages: z\n .array(InitialUserMessageSchema)\n .optional()\n .describe('Optional initial user messages injected at the start of every session.'),\n mcp_servers: z\n .array(MCPServerRequestSchema)\n .optional()\n .describe('Optional MCP servers attached by configured name.'),\n response_format: ResponseFormatSchema.optional(),\n skills: z.array(SkillSchema).max(MAX_AGENT_SKILLS).optional().describe('Skills used in this agent.'),\n // Factory must parse so nested RuntimeConfig field defaults materialize.\n config: RuntimeConfigSchema.default(() => RuntimeConfigSchema.parse({})),\n })\n .describe('Complete agent definition used inline on a session or saved as a named agent.')\n .openapi('AgentSpec');\n\nexport type AgentSpec = z.infer<typeof AgentSpecSchema>;\nexport type Skill = z.infer<typeof SkillSchema>;\nexport type InitialUserMessage = z.infer<typeof InitialUserMessageSchema>;\n"],"mappings":"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","names":[]}
@@ -6,7 +6,7 @@ import { z } from '@hono/zod-openapi';
6
6
  export declare const SessionMetadataSchema: z.ZodRecord<z.ZodString, z.ZodString>;
7
7
  export type SessionMetadata = z.infer<typeof SessionMetadataSchema>;
8
8
  export declare const SessionMetricsSchema: z.ZodObject<{
9
- total_cost_in_usd: z.ZodNumber;
9
+ total_cost_in_usd: z.ZodOptional<z.ZodNumber>;
10
10
  total_duration_ms: z.ZodNumber;
11
11
  total_turns: z.ZodNumber;
12
12
  }, z.core.$strict>;
@@ -70,6 +70,7 @@ export declare const SessionAgentInlineSchema: z.ZodObject<{
70
70
  }, z.core.$loose>], "type">>;
71
71
  skills: z.ZodOptional<z.ZodArray<z.ZodObject<{
72
72
  name: z.ZodString;
73
+ preload: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
73
74
  }, z.core.$strict>>>;
74
75
  config: z.ZodDefault<z.ZodObject<{
75
76
  iteration_limit: z.ZodDefault<z.ZodNumber>;
@@ -161,6 +162,7 @@ export declare const SessionAgentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
161
162
  }, z.core.$loose>], "type">>;
162
163
  skills: z.ZodOptional<z.ZodArray<z.ZodObject<{
163
164
  name: z.ZodString;
165
+ preload: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
164
166
  }, z.core.$strict>>>;
165
167
  config: z.ZodDefault<z.ZodObject<{
166
168
  iteration_limit: z.ZodDefault<z.ZodNumber>;
@@ -192,6 +194,25 @@ export declare const SessionAgentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
192
194
  }, z.core.$strip>>;
193
195
  }, z.core.$strip>;
194
196
  }, z.core.$strict>], "type">;
197
+ export declare const SessionSourceTypeSchema: z.ZodEnum<{
198
+ schedule: "schedule";
199
+ }>;
200
+ export type SessionSourceType = z.infer<typeof SessionSourceTypeSchema>;
201
+ export declare const SessionSourceScheduleSchema: z.ZodObject<{
202
+ type: z.ZodLiteral<"schedule">;
203
+ id: z.ZodString;
204
+ run_id: z.ZodString;
205
+ }, z.core.$strict>;
206
+ /**
207
+ * How a session was created. Same shape as {@link SessionSourceScheduleSchema} today;
208
+ * switch to `discriminatedUnion('type', …)` when a second source arm lands.
209
+ */
210
+ export declare const SessionSourceSchema: z.ZodObject<{
211
+ type: z.ZodLiteral<"schedule">;
212
+ id: z.ZodString;
213
+ run_id: z.ZodString;
214
+ }, z.core.$strict>;
215
+ export type SessionSource = z.infer<typeof SessionSourceSchema>;
195
216
  export declare const SessionSchema: z.ZodObject<{
196
217
  id: z.ZodString;
197
218
  agent: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -253,6 +274,7 @@ export declare const SessionSchema: z.ZodObject<{
253
274
  }, z.core.$loose>], "type">>;
254
275
  skills: z.ZodOptional<z.ZodArray<z.ZodObject<{
255
276
  name: z.ZodString;
277
+ preload: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
256
278
  }, z.core.$strict>>>;
257
279
  config: z.ZodDefault<z.ZodObject<{
258
280
  iteration_limit: z.ZodDefault<z.ZodNumber>;
@@ -293,11 +315,16 @@ export declare const SessionSchema: z.ZodObject<{
293
315
  created_at: z.ZodString;
294
316
  updated_at: z.ZodString;
295
317
  metrics: z.ZodObject<{
296
- total_cost_in_usd: z.ZodNumber;
318
+ total_cost_in_usd: z.ZodOptional<z.ZodNumber>;
297
319
  total_duration_ms: z.ZodNumber;
298
320
  total_turns: z.ZodNumber;
299
321
  }, z.core.$strict>;
300
322
  metadata: z.ZodRecord<z.ZodString, z.ZodString>;
323
+ source: z.ZodNullable<z.ZodObject<{
324
+ type: z.ZodLiteral<"schedule">;
325
+ id: z.ZodString;
326
+ run_id: z.ZodString;
327
+ }, z.core.$strict>>;
301
328
  }, z.core.$strip>;
302
329
  export type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;
303
330
  export type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/agent-session/schemas/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAWtC,eAAO,MAAM,qBAAqB,uCAgBL,CAAC;AAE9B,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,oBAAoB;;;;kBAQL,CAAC;AAE7B,eAAO,MAAM,2BAA2B;;;;kBAWL,CAAC;AAEpC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAML,CAAC;AAEjC,oEAAoE;AACpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAEL,CAAC;AAE3B,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWL,CAAC;AAEtB,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/agent-session/schemas/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAetC,eAAO,MAAM,qBAAqB,uCAiBL,CAAC;AAE9B,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,oBAAoB;;;;kBAQL,CAAC;AAE7B,eAAO,MAAM,2BAA2B;;;;kBAWL,CAAC;AAEpC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAML,CAAC;AAEjC,oEAAoE;AACpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAEL,CAAC;AAE3B,eAAO,MAAM,uBAAuB;;EAAoD,CAAC;AAEzF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAYxE,eAAO,MAAM,2BAA2B;;;;kBAAiE,CAAC;AAE1G;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;kBAEL,CAAC;AAE5B,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYL,CAAC;AAEtB,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -25,23 +25,27 @@ __export(session_exports, {
25
25
  SessionAgentSchema: () => SessionAgentSchema,
26
26
  SessionMetadataSchema: () => SessionMetadataSchema,
27
27
  SessionMetricsSchema: () => SessionMetricsSchema,
28
- SessionSchema: () => SessionSchema
28
+ SessionSchema: () => SessionSchema,
29
+ SessionSourceScheduleSchema: () => SessionSourceScheduleSchema,
30
+ SessionSourceSchema: () => SessionSourceSchema,
31
+ SessionSourceTypeSchema: () => SessionSourceTypeSchema
29
32
  });
30
33
  module.exports = __toCommonJS(session_exports);
31
34
  var import_zod_openapi = require("@hono/zod-openapi");
32
35
  var import_agentSpec = require("./agentSpec.js");
33
36
  var import_subject = require("./subject.js");
34
37
  var SESSION_METADATA_MAX_KEY_LENGTH = 32;
38
+ var SESSION_METADATA_KEY_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,31}$/;
35
39
  var SESSION_METADATA_MAX_VALUE_LENGTH = 128;
36
40
  var SESSION_METADATA_MAX_KEYS = 50;
37
41
  var SessionMetadataSchema = import_zod_openapi.z.record(
38
- import_zod_openapi.z.string().min(1).max(SESSION_METADATA_MAX_KEY_LENGTH).describe(`Metadata key; 1\u2013${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),
42
+ import_zod_openapi.z.string().min(1).max(SESSION_METADATA_MAX_KEY_LENGTH).regex(SESSION_METADATA_KEY_PATTERN).describe(`Metadata key; 1\u2013${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),
39
43
  import_zod_openapi.z.string().max(SESSION_METADATA_MAX_VALUE_LENGTH).describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`)
40
44
  ).refine((m) => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {
41
45
  message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`
42
46
  }).describe("Caller-owned session metadata").openapi("SessionMetadata");
43
47
  var SessionMetricsSchema = import_zod_openapi.z.object({
44
- total_cost_in_usd: import_zod_openapi.z.number().nonnegative(),
48
+ total_cost_in_usd: import_zod_openapi.z.number().nonnegative().optional().describe("Estimated total cost in USD for this session"),
45
49
  total_duration_ms: import_zod_openapi.z.number().int().nonnegative(),
46
50
  total_turns: import_zod_openapi.z.number().int().nonnegative()
47
51
  }).strict().describe("Rolled-up cost, duration, and turn counters for a session.").openapi("SessionMetrics");
@@ -56,6 +60,16 @@ var SessionAgentInlineSchema = import_zod_openapi.z.object({
56
60
  spec: import_agentSpec.AgentSpecSchema
57
61
  }).strict().openapi("SessionAgentInline");
58
62
  var SessionAgentSchema = import_zod_openapi.z.discriminatedUnion("type", [SessionAgentReferenceSchema, SessionAgentInlineSchema]).openapi("SessionAgent");
63
+ var SessionSourceTypeSchema = import_zod_openapi.z.enum(["schedule"]).openapi("SessionSourceType");
64
+ function sessionSourceScheduleObject() {
65
+ return import_zod_openapi.z.object({
66
+ type: import_zod_openapi.z.literal(SessionSourceTypeSchema.enum.schedule).describe("Session was created by a schedule run."),
67
+ id: import_zod_openapi.z.string().min(1).describe("Schedule id."),
68
+ run_id: import_zod_openapi.z.string().min(1).describe("Schedule run id.")
69
+ }).strict();
70
+ }
71
+ var SessionSourceScheduleSchema = sessionSourceScheduleObject().openapi("SessionSourceSchedule");
72
+ var SessionSourceSchema = sessionSourceScheduleObject().describe("How this session was created (e.g. a schedule run). Null for interactive sessions.").openapi("SessionSource");
59
73
  var SessionSchema = import_zod_openapi.z.object({
60
74
  id: import_zod_openapi.z.string().describe("Unique session id."),
61
75
  agent: SessionAgentSchema,
@@ -64,7 +78,8 @@ var SessionSchema = import_zod_openapi.z.object({
64
78
  created_at: import_zod_openapi.z.string().describe("ISO 8601 creation timestamp."),
65
79
  updated_at: import_zod_openapi.z.string().describe("ISO 8601 last-update timestamp."),
66
80
  metrics: SessionMetricsSchema,
67
- metadata: SessionMetadataSchema
81
+ metadata: SessionMetadataSchema,
82
+ source: SessionSourceSchema.nullable()
68
83
  }).openapi("Session");
69
84
  // Annotate the CommonJS export names for ESM import in node:
70
85
  0 && (module.exports = {
@@ -73,6 +88,9 @@ var SessionSchema = import_zod_openapi.z.object({
73
88
  SessionAgentSchema,
74
89
  SessionMetadataSchema,
75
90
  SessionMetricsSchema,
76
- SessionSchema
91
+ SessionSchema,
92
+ SessionSourceScheduleSchema,
93
+ SessionSourceSchema,
94
+ SessionSourceTypeSchema
77
95
  });
78
96
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/agent-session/schemas/session.ts"],"sourcesContent":["/**\n * Session product schemas. Agent binding is a single discriminated `agent`\n * field (`reference` | `inline`). DB stores agent_id / agent_name / agent_spec columns.\n */\nimport { z } from '@hono/zod-openapi';\nimport { AgentSpecSchema } from './agentSpec';\nimport { CreatedBySubjectSchema } from './subject';\n\n/** Max key length for session metadata (aligned with LLM gateway HeaderMetadata). */\nconst SESSION_METADATA_MAX_KEY_LENGTH = 32;\n/** Max value length for session metadata (aligned with LLM gateway HeaderMetadata). */\nconst SESSION_METADATA_MAX_VALUE_LENGTH = 128;\n/** Max number of keys in session metadata. */\nconst SESSION_METADATA_MAX_KEYS = 50;\n\nexport const SessionMetadataSchema = z\n .record(\n z\n .string()\n .min(1)\n .max(SESSION_METADATA_MAX_KEY_LENGTH)\n .describe(`Metadata key; 1–${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),\n z\n .string()\n .max(SESSION_METADATA_MAX_VALUE_LENGTH)\n .describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`),\n )\n .refine(m => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {\n message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`,\n })\n .describe('Caller-owned session metadata')\n .openapi('SessionMetadata');\n\nexport type SessionMetadata = z.infer<typeof SessionMetadataSchema>;\n\nexport const SessionMetricsSchema = z\n .object({\n total_cost_in_usd: z.number().nonnegative(),\n total_duration_ms: z.number().int().nonnegative(),\n total_turns: z.number().int().nonnegative(),\n })\n .strict()\n .describe('Rolled-up cost, duration, and turn counters for a session.')\n .openapi('SessionMetrics');\n\nexport const SessionAgentReferenceSchema = z\n .object({\n type: z.literal('reference').describe('Bind the session to a named registry agent.'),\n id: z.string().min(1).describe('Registry agent id.'),\n /** Create-time snapshot of the registry agent name; null for legacy/orphan rows. */\n name: z\n .string()\n .nullable()\n .describe('Create-time snapshot of the registry agent name; null for legacy or orphan rows.'),\n })\n .strict()\n .openapi('SessionAgentReference');\n\nexport const SessionAgentInlineSchema = z\n .object({\n type: z.literal('inline').describe('Bind the session to an inline AgentSpec (not a registry id).'),\n spec: AgentSpecSchema,\n })\n .strict()\n .openapi('SessionAgentInline');\n\n/** Named registry binding or inline AgentSpec — exactly one arm. */\nexport const SessionAgentSchema = z\n .discriminatedUnion('type', [SessionAgentReferenceSchema, SessionAgentInlineSchema])\n .openapi('SessionAgent');\n\nexport const SessionSchema = z\n .object({\n id: z.string().describe('Unique session id.'),\n agent: SessionAgentSchema,\n title: z.string().nullable().describe('Optional human-readable title; null until set.'),\n created_by_subject: CreatedBySubjectSchema,\n created_at: z.string().describe('ISO 8601 creation timestamp.'),\n updated_at: z.string().describe('ISO 8601 last-update timestamp.'),\n metrics: SessionMetricsSchema,\n metadata: SessionMetadataSchema,\n })\n .openapi('Session');\n\nexport type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;\nexport type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;\nexport type SessionAgent = z.infer<typeof SessionAgentSchema>;\nexport type SessionMetrics = z.infer<typeof SessionMetricsSchema>;\nexport type Session = z.infer<typeof SessionSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,yBAAkB;AAClB,uBAAgC;AAChC,qBAAuC;AAGvC,IAAM,kCAAkC;AAExC,IAAM,oCAAoC;AAE1C,IAAM,4BAA4B;AAE3B,IAAM,wBAAwB,qBAClC;AAAA,EACC,qBACG,OAAO,EACP,IAAI,CAAC,EACL,IAAI,+BAA+B,EACnC,SAAS,wBAAmB,OAAO,+BAA+B,CAAC,cAAc;AAAA,EACpF,qBACG,OAAO,EACP,IAAI,iCAAiC,EACrC,SAAS,2BAA2B,OAAO,iCAAiC,CAAC,cAAc;AAChG,EACC,OAAO,OAAK,OAAO,KAAK,CAAC,EAAE,UAAU,2BAA2B;AAAA,EAC/D,SAAS,WAAW,OAAO,yBAAyB,CAAC;AACvD,CAAC,EACA,SAAS,+BAA+B,EACxC,QAAQ,iBAAiB;AAIrB,IAAM,uBAAuB,qBACjC,OAAO;AAAA,EACN,mBAAmB,qBAAE,OAAO,EAAE,YAAY;AAAA,EAC1C,mBAAmB,qBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAChD,aAAa,qBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAC5C,CAAC,EACA,OAAO,EACP,SAAS,4DAA4D,EACrE,QAAQ,gBAAgB;AAEpB,IAAM,8BAA8B,qBACxC,OAAO;AAAA,EACN,MAAM,qBAAE,QAAQ,WAAW,EAAE,SAAS,6CAA6C;AAAA,EACnF,IAAI,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,oBAAoB;AAAA;AAAA,EAEnD,MAAM,qBACH,OAAO,EACP,SAAS,EACT,SAAS,kFAAkF;AAChG,CAAC,EACA,OAAO,EACP,QAAQ,uBAAuB;AAE3B,IAAM,2BAA2B,qBACrC,OAAO;AAAA,EACN,MAAM,qBAAE,QAAQ,QAAQ,EAAE,SAAS,8DAA8D;AAAA,EACjG,MAAM;AACR,CAAC,EACA,OAAO,EACP,QAAQ,oBAAoB;AAGxB,IAAM,qBAAqB,qBAC/B,mBAAmB,QAAQ,CAAC,6BAA6B,wBAAwB,CAAC,EAClF,QAAQ,cAAc;AAElB,IAAM,gBAAgB,qBAC1B,OAAO;AAAA,EACN,IAAI,qBAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO,qBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,EACtF,oBAAoB;AAAA,EACpB,YAAY,qBAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAC9D,YAAY,qBAAE,OAAO,EAAE,SAAS,iCAAiC;AAAA,EACjE,SAAS;AAAA,EACT,UAAU;AACZ,CAAC,EACA,QAAQ,SAAS;","names":[]}
1
+ {"version":3,"sources":["../../../src/agent-session/schemas/session.ts"],"sourcesContent":["/**\n * Session product schemas. Agent binding is a single discriminated `agent`\n * field (`reference` | `inline`). DB stores agent_id / agent_name / agent_spec columns.\n */\nimport { z } from '@hono/zod-openapi';\nimport { AgentSpecSchema } from './agentSpec';\nimport { CreatedBySubjectSchema } from './subject';\n\nconst SESSION_METADATA_MAX_KEY_LENGTH = 32;\n/**\n * Metadata keys: alphanumeric start; then alphanumeric, `.`, `_`, `:`, `-`.\n * Bans `[]` (collide with deepObject / reserved `metadata[key][op]`) and whitespace.\n */\nconst SESSION_METADATA_KEY_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,31}$/;\n/** Max value length for session metadata */\nconst SESSION_METADATA_MAX_VALUE_LENGTH = 128;\n/** Max number of keys in session metadata. */\nconst SESSION_METADATA_MAX_KEYS = 50;\n\nexport const SessionMetadataSchema = z\n .record(\n z\n .string()\n .min(1)\n .max(SESSION_METADATA_MAX_KEY_LENGTH)\n .regex(SESSION_METADATA_KEY_PATTERN)\n .describe(`Metadata key; 1–${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),\n z\n .string()\n .max(SESSION_METADATA_MAX_VALUE_LENGTH)\n .describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`),\n )\n .refine(m => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {\n message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`,\n })\n .describe('Caller-owned session metadata')\n .openapi('SessionMetadata');\n\nexport type SessionMetadata = z.infer<typeof SessionMetadataSchema>;\n\nexport const SessionMetricsSchema = z\n .object({\n total_cost_in_usd: z.number().nonnegative().optional().describe('Estimated total cost in USD for this session'),\n total_duration_ms: z.number().int().nonnegative(),\n total_turns: z.number().int().nonnegative(),\n })\n .strict()\n .describe('Rolled-up cost, duration, and turn counters for a session.')\n .openapi('SessionMetrics');\n\nexport const SessionAgentReferenceSchema = z\n .object({\n type: z.literal('reference').describe('Bind the session to a named registry agent.'),\n id: z.string().min(1).describe('Registry agent id.'),\n /** Create-time snapshot of the registry agent name; null for legacy/orphan rows. */\n name: z\n .string()\n .nullable()\n .describe('Create-time snapshot of the registry agent name; null for legacy or orphan rows.'),\n })\n .strict()\n .openapi('SessionAgentReference');\n\nexport const SessionAgentInlineSchema = z\n .object({\n type: z.literal('inline').describe('Bind the session to an inline AgentSpec (not a registry id).'),\n spec: AgentSpecSchema,\n })\n .strict()\n .openapi('SessionAgentInline');\n\n/** Named registry binding or inline AgentSpec — exactly one arm. */\nexport const SessionAgentSchema = z\n .discriminatedUnion('type', [SessionAgentReferenceSchema, SessionAgentInlineSchema])\n .openapi('SessionAgent');\n\nexport const SessionSourceTypeSchema = z.enum(['schedule']).openapi('SessionSourceType');\n\nexport type SessionSourceType = z.infer<typeof SessionSourceTypeSchema>;\n\nfunction sessionSourceScheduleObject() {\n return z\n .object({\n type: z.literal(SessionSourceTypeSchema.enum.schedule).describe('Session was created by a schedule run.'),\n id: z.string().min(1).describe('Schedule id.'),\n run_id: z.string().min(1).describe('Schedule run id.'),\n })\n .strict();\n}\n\nexport const SessionSourceScheduleSchema = sessionSourceScheduleObject().openapi('SessionSourceSchedule');\n\n/**\n * How a session was created. Same shape as {@link SessionSourceScheduleSchema} today;\n * switch to `discriminatedUnion('type', …)` when a second source arm lands.\n */\nexport const SessionSourceSchema = sessionSourceScheduleObject()\n .describe('How this session was created (e.g. a schedule run). Null for interactive sessions.')\n .openapi('SessionSource');\n\nexport type SessionSource = z.infer<typeof SessionSourceSchema>;\n\nexport const SessionSchema = z\n .object({\n id: z.string().describe('Unique session id.'),\n agent: SessionAgentSchema,\n title: z.string().nullable().describe('Optional human-readable title; null until set.'),\n created_by_subject: CreatedBySubjectSchema,\n created_at: z.string().describe('ISO 8601 creation timestamp.'),\n updated_at: z.string().describe('ISO 8601 last-update timestamp.'),\n metrics: SessionMetricsSchema,\n metadata: SessionMetadataSchema,\n source: SessionSourceSchema.nullable(),\n })\n .openapi('Session');\n\nexport type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;\nexport type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;\nexport type SessionAgent = z.infer<typeof SessionAgentSchema>;\nexport type SessionMetrics = z.infer<typeof SessionMetricsSchema>;\nexport type Session = z.infer<typeof SessionSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,yBAAkB;AAClB,uBAAgC;AAChC,qBAAuC;AAEvC,IAAM,kCAAkC;AAKxC,IAAM,+BAA+B;AAErC,IAAM,oCAAoC;AAE1C,IAAM,4BAA4B;AAE3B,IAAM,wBAAwB,qBAClC;AAAA,EACC,qBACG,OAAO,EACP,IAAI,CAAC,EACL,IAAI,+BAA+B,EACnC,MAAM,4BAA4B,EAClC,SAAS,wBAAmB,OAAO,+BAA+B,CAAC,cAAc;AAAA,EACpF,qBACG,OAAO,EACP,IAAI,iCAAiC,EACrC,SAAS,2BAA2B,OAAO,iCAAiC,CAAC,cAAc;AAChG,EACC,OAAO,OAAK,OAAO,KAAK,CAAC,EAAE,UAAU,2BAA2B;AAAA,EAC/D,SAAS,WAAW,OAAO,yBAAyB,CAAC;AACvD,CAAC,EACA,SAAS,+BAA+B,EACxC,QAAQ,iBAAiB;AAIrB,IAAM,uBAAuB,qBACjC,OAAO;AAAA,EACN,mBAAmB,qBAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,8CAA8C;AAAA,EAC9G,mBAAmB,qBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAChD,aAAa,qBAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAC5C,CAAC,EACA,OAAO,EACP,SAAS,4DAA4D,EACrE,QAAQ,gBAAgB;AAEpB,IAAM,8BAA8B,qBACxC,OAAO;AAAA,EACN,MAAM,qBAAE,QAAQ,WAAW,EAAE,SAAS,6CAA6C;AAAA,EACnF,IAAI,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,oBAAoB;AAAA;AAAA,EAEnD,MAAM,qBACH,OAAO,EACP,SAAS,EACT,SAAS,kFAAkF;AAChG,CAAC,EACA,OAAO,EACP,QAAQ,uBAAuB;AAE3B,IAAM,2BAA2B,qBACrC,OAAO;AAAA,EACN,MAAM,qBAAE,QAAQ,QAAQ,EAAE,SAAS,8DAA8D;AAAA,EACjG,MAAM;AACR,CAAC,EACA,OAAO,EACP,QAAQ,oBAAoB;AAGxB,IAAM,qBAAqB,qBAC/B,mBAAmB,QAAQ,CAAC,6BAA6B,wBAAwB,CAAC,EAClF,QAAQ,cAAc;AAElB,IAAM,0BAA0B,qBAAE,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,mBAAmB;AAIvF,SAAS,8BAA8B;AACrC,SAAO,qBACJ,OAAO;AAAA,IACN,MAAM,qBAAE,QAAQ,wBAAwB,KAAK,QAAQ,EAAE,SAAS,wCAAwC;AAAA,IACxG,IAAI,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,cAAc;AAAA,IAC7C,QAAQ,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,kBAAkB;AAAA,EACvD,CAAC,EACA,OAAO;AACZ;AAEO,IAAM,8BAA8B,4BAA4B,EAAE,QAAQ,uBAAuB;AAMjG,IAAM,sBAAsB,4BAA4B,EAC5D,SAAS,oFAAoF,EAC7F,QAAQ,eAAe;AAInB,IAAM,gBAAgB,qBAC1B,OAAO;AAAA,EACN,IAAI,qBAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO,qBAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,EACtF,oBAAoB;AAAA,EACpB,YAAY,qBAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAC9D,YAAY,qBAAE,OAAO,EAAE,SAAS,iCAAiC;AAAA,EACjE,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ,oBAAoB,SAAS;AACvC,CAAC,EACA,QAAQ,SAAS;","names":[]}
@@ -3,16 +3,17 @@ import { z } from "@hono/zod-openapi";
3
3
  import { AgentSpecSchema } from "./agentSpec.mjs";
4
4
  import { CreatedBySubjectSchema } from "./subject.mjs";
5
5
  var SESSION_METADATA_MAX_KEY_LENGTH = 32;
6
+ var SESSION_METADATA_KEY_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,31}$/;
6
7
  var SESSION_METADATA_MAX_VALUE_LENGTH = 128;
7
8
  var SESSION_METADATA_MAX_KEYS = 50;
8
9
  var SessionMetadataSchema = z.record(
9
- z.string().min(1).max(SESSION_METADATA_MAX_KEY_LENGTH).describe(`Metadata key; 1\u2013${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),
10
+ z.string().min(1).max(SESSION_METADATA_MAX_KEY_LENGTH).regex(SESSION_METADATA_KEY_PATTERN).describe(`Metadata key; 1\u2013${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),
10
11
  z.string().max(SESSION_METADATA_MAX_VALUE_LENGTH).describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`)
11
12
  ).refine((m) => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {
12
13
  message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`
13
14
  }).describe("Caller-owned session metadata").openapi("SessionMetadata");
14
15
  var SessionMetricsSchema = z.object({
15
- total_cost_in_usd: z.number().nonnegative(),
16
+ total_cost_in_usd: z.number().nonnegative().optional().describe("Estimated total cost in USD for this session"),
16
17
  total_duration_ms: z.number().int().nonnegative(),
17
18
  total_turns: z.number().int().nonnegative()
18
19
  }).strict().describe("Rolled-up cost, duration, and turn counters for a session.").openapi("SessionMetrics");
@@ -27,6 +28,16 @@ var SessionAgentInlineSchema = z.object({
27
28
  spec: AgentSpecSchema
28
29
  }).strict().openapi("SessionAgentInline");
29
30
  var SessionAgentSchema = z.discriminatedUnion("type", [SessionAgentReferenceSchema, SessionAgentInlineSchema]).openapi("SessionAgent");
31
+ var SessionSourceTypeSchema = z.enum(["schedule"]).openapi("SessionSourceType");
32
+ function sessionSourceScheduleObject() {
33
+ return z.object({
34
+ type: z.literal(SessionSourceTypeSchema.enum.schedule).describe("Session was created by a schedule run."),
35
+ id: z.string().min(1).describe("Schedule id."),
36
+ run_id: z.string().min(1).describe("Schedule run id.")
37
+ }).strict();
38
+ }
39
+ var SessionSourceScheduleSchema = sessionSourceScheduleObject().openapi("SessionSourceSchedule");
40
+ var SessionSourceSchema = sessionSourceScheduleObject().describe("How this session was created (e.g. a schedule run). Null for interactive sessions.").openapi("SessionSource");
30
41
  var SessionSchema = z.object({
31
42
  id: z.string().describe("Unique session id."),
32
43
  agent: SessionAgentSchema,
@@ -35,7 +46,8 @@ var SessionSchema = z.object({
35
46
  created_at: z.string().describe("ISO 8601 creation timestamp."),
36
47
  updated_at: z.string().describe("ISO 8601 last-update timestamp."),
37
48
  metrics: SessionMetricsSchema,
38
- metadata: SessionMetadataSchema
49
+ metadata: SessionMetadataSchema,
50
+ source: SessionSourceSchema.nullable()
39
51
  }).openapi("Session");
40
52
  export {
41
53
  SessionAgentInlineSchema,
@@ -43,6 +55,9 @@ export {
43
55
  SessionAgentSchema,
44
56
  SessionMetadataSchema,
45
57
  SessionMetricsSchema,
46
- SessionSchema
58
+ SessionSchema,
59
+ SessionSourceScheduleSchema,
60
+ SessionSourceSchema,
61
+ SessionSourceTypeSchema
47
62
  };
48
63
  //# sourceMappingURL=session.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/agent-session/schemas/session.ts"],"sourcesContent":["/**\n * Session product schemas. Agent binding is a single discriminated `agent`\n * field (`reference` | `inline`). DB stores agent_id / agent_name / agent_spec columns.\n */\nimport { z } from '@hono/zod-openapi';\nimport { AgentSpecSchema } from './agentSpec';\nimport { CreatedBySubjectSchema } from './subject';\n\n/** Max key length for session metadata (aligned with LLM gateway HeaderMetadata). */\nconst SESSION_METADATA_MAX_KEY_LENGTH = 32;\n/** Max value length for session metadata (aligned with LLM gateway HeaderMetadata). */\nconst SESSION_METADATA_MAX_VALUE_LENGTH = 128;\n/** Max number of keys in session metadata. */\nconst SESSION_METADATA_MAX_KEYS = 50;\n\nexport const SessionMetadataSchema = z\n .record(\n z\n .string()\n .min(1)\n .max(SESSION_METADATA_MAX_KEY_LENGTH)\n .describe(`Metadata key; 1–${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),\n z\n .string()\n .max(SESSION_METADATA_MAX_VALUE_LENGTH)\n .describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`),\n )\n .refine(m => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {\n message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`,\n })\n .describe('Caller-owned session metadata')\n .openapi('SessionMetadata');\n\nexport type SessionMetadata = z.infer<typeof SessionMetadataSchema>;\n\nexport const SessionMetricsSchema = z\n .object({\n total_cost_in_usd: z.number().nonnegative(),\n total_duration_ms: z.number().int().nonnegative(),\n total_turns: z.number().int().nonnegative(),\n })\n .strict()\n .describe('Rolled-up cost, duration, and turn counters for a session.')\n .openapi('SessionMetrics');\n\nexport const SessionAgentReferenceSchema = z\n .object({\n type: z.literal('reference').describe('Bind the session to a named registry agent.'),\n id: z.string().min(1).describe('Registry agent id.'),\n /** Create-time snapshot of the registry agent name; null for legacy/orphan rows. */\n name: z\n .string()\n .nullable()\n .describe('Create-time snapshot of the registry agent name; null for legacy or orphan rows.'),\n })\n .strict()\n .openapi('SessionAgentReference');\n\nexport const SessionAgentInlineSchema = z\n .object({\n type: z.literal('inline').describe('Bind the session to an inline AgentSpec (not a registry id).'),\n spec: AgentSpecSchema,\n })\n .strict()\n .openapi('SessionAgentInline');\n\n/** Named registry binding or inline AgentSpec — exactly one arm. */\nexport const SessionAgentSchema = z\n .discriminatedUnion('type', [SessionAgentReferenceSchema, SessionAgentInlineSchema])\n .openapi('SessionAgent');\n\nexport const SessionSchema = z\n .object({\n id: z.string().describe('Unique session id.'),\n agent: SessionAgentSchema,\n title: z.string().nullable().describe('Optional human-readable title; null until set.'),\n created_by_subject: CreatedBySubjectSchema,\n created_at: z.string().describe('ISO 8601 creation timestamp.'),\n updated_at: z.string().describe('ISO 8601 last-update timestamp.'),\n metrics: SessionMetricsSchema,\n metadata: SessionMetadataSchema,\n })\n .openapi('Session');\n\nexport type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;\nexport type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;\nexport type SessionAgent = z.infer<typeof SessionAgentSchema>;\nexport type SessionMetrics = z.infer<typeof SessionMetricsSchema>;\nexport type Session = z.infer<typeof SessionSchema>;\n"],"mappings":";AAIA,SAAS,SAAS;AAClB,SAAS,uBAAuB;AAChC,SAAS,8BAA8B;AAGvC,IAAM,kCAAkC;AAExC,IAAM,oCAAoC;AAE1C,IAAM,4BAA4B;AAE3B,IAAM,wBAAwB,EAClC;AAAA,EACC,EACG,OAAO,EACP,IAAI,CAAC,EACL,IAAI,+BAA+B,EACnC,SAAS,wBAAmB,OAAO,+BAA+B,CAAC,cAAc;AAAA,EACpF,EACG,OAAO,EACP,IAAI,iCAAiC,EACrC,SAAS,2BAA2B,OAAO,iCAAiC,CAAC,cAAc;AAChG,EACC,OAAO,OAAK,OAAO,KAAK,CAAC,EAAE,UAAU,2BAA2B;AAAA,EAC/D,SAAS,WAAW,OAAO,yBAAyB,CAAC;AACvD,CAAC,EACA,SAAS,+BAA+B,EACxC,QAAQ,iBAAiB;AAIrB,IAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,mBAAmB,EAAE,OAAO,EAAE,YAAY;AAAA,EAC1C,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAChD,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAC5C,CAAC,EACA,OAAO,EACP,SAAS,4DAA4D,EACrE,QAAQ,gBAAgB;AAEpB,IAAM,8BAA8B,EACxC,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,WAAW,EAAE,SAAS,6CAA6C;AAAA,EACnF,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,oBAAoB;AAAA;AAAA,EAEnD,MAAM,EACH,OAAO,EACP,SAAS,EACT,SAAS,kFAAkF;AAChG,CAAC,EACA,OAAO,EACP,QAAQ,uBAAuB;AAE3B,IAAM,2BAA2B,EACrC,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,QAAQ,EAAE,SAAS,8DAA8D;AAAA,EACjG,MAAM;AACR,CAAC,EACA,OAAO,EACP,QAAQ,oBAAoB;AAGxB,IAAM,qBAAqB,EAC/B,mBAAmB,QAAQ,CAAC,6BAA6B,wBAAwB,CAAC,EAClF,QAAQ,cAAc;AAElB,IAAM,gBAAgB,EAC1B,OAAO;AAAA,EACN,IAAI,EAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,EACtF,oBAAoB;AAAA,EACpB,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAC9D,YAAY,EAAE,OAAO,EAAE,SAAS,iCAAiC;AAAA,EACjE,SAAS;AAAA,EACT,UAAU;AACZ,CAAC,EACA,QAAQ,SAAS;","names":[]}
1
+ {"version":3,"sources":["../../../src/agent-session/schemas/session.ts"],"sourcesContent":["/**\n * Session product schemas. Agent binding is a single discriminated `agent`\n * field (`reference` | `inline`). DB stores agent_id / agent_name / agent_spec columns.\n */\nimport { z } from '@hono/zod-openapi';\nimport { AgentSpecSchema } from './agentSpec';\nimport { CreatedBySubjectSchema } from './subject';\n\nconst SESSION_METADATA_MAX_KEY_LENGTH = 32;\n/**\n * Metadata keys: alphanumeric start; then alphanumeric, `.`, `_`, `:`, `-`.\n * Bans `[]` (collide with deepObject / reserved `metadata[key][op]`) and whitespace.\n */\nconst SESSION_METADATA_KEY_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,31}$/;\n/** Max value length for session metadata */\nconst SESSION_METADATA_MAX_VALUE_LENGTH = 128;\n/** Max number of keys in session metadata. */\nconst SESSION_METADATA_MAX_KEYS = 50;\n\nexport const SessionMetadataSchema = z\n .record(\n z\n .string()\n .min(1)\n .max(SESSION_METADATA_MAX_KEY_LENGTH)\n .regex(SESSION_METADATA_KEY_PATTERN)\n .describe(`Metadata key; 1–${String(SESSION_METADATA_MAX_KEY_LENGTH)} characters.`),\n z\n .string()\n .max(SESSION_METADATA_MAX_VALUE_LENGTH)\n .describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`),\n )\n .refine(m => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {\n message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`,\n })\n .describe('Caller-owned session metadata')\n .openapi('SessionMetadata');\n\nexport type SessionMetadata = z.infer<typeof SessionMetadataSchema>;\n\nexport const SessionMetricsSchema = z\n .object({\n total_cost_in_usd: z.number().nonnegative().optional().describe('Estimated total cost in USD for this session'),\n total_duration_ms: z.number().int().nonnegative(),\n total_turns: z.number().int().nonnegative(),\n })\n .strict()\n .describe('Rolled-up cost, duration, and turn counters for a session.')\n .openapi('SessionMetrics');\n\nexport const SessionAgentReferenceSchema = z\n .object({\n type: z.literal('reference').describe('Bind the session to a named registry agent.'),\n id: z.string().min(1).describe('Registry agent id.'),\n /** Create-time snapshot of the registry agent name; null for legacy/orphan rows. */\n name: z\n .string()\n .nullable()\n .describe('Create-time snapshot of the registry agent name; null for legacy or orphan rows.'),\n })\n .strict()\n .openapi('SessionAgentReference');\n\nexport const SessionAgentInlineSchema = z\n .object({\n type: z.literal('inline').describe('Bind the session to an inline AgentSpec (not a registry id).'),\n spec: AgentSpecSchema,\n })\n .strict()\n .openapi('SessionAgentInline');\n\n/** Named registry binding or inline AgentSpec — exactly one arm. */\nexport const SessionAgentSchema = z\n .discriminatedUnion('type', [SessionAgentReferenceSchema, SessionAgentInlineSchema])\n .openapi('SessionAgent');\n\nexport const SessionSourceTypeSchema = z.enum(['schedule']).openapi('SessionSourceType');\n\nexport type SessionSourceType = z.infer<typeof SessionSourceTypeSchema>;\n\nfunction sessionSourceScheduleObject() {\n return z\n .object({\n type: z.literal(SessionSourceTypeSchema.enum.schedule).describe('Session was created by a schedule run.'),\n id: z.string().min(1).describe('Schedule id.'),\n run_id: z.string().min(1).describe('Schedule run id.'),\n })\n .strict();\n}\n\nexport const SessionSourceScheduleSchema = sessionSourceScheduleObject().openapi('SessionSourceSchedule');\n\n/**\n * How a session was created. Same shape as {@link SessionSourceScheduleSchema} today;\n * switch to `discriminatedUnion('type', …)` when a second source arm lands.\n */\nexport const SessionSourceSchema = sessionSourceScheduleObject()\n .describe('How this session was created (e.g. a schedule run). Null for interactive sessions.')\n .openapi('SessionSource');\n\nexport type SessionSource = z.infer<typeof SessionSourceSchema>;\n\nexport const SessionSchema = z\n .object({\n id: z.string().describe('Unique session id.'),\n agent: SessionAgentSchema,\n title: z.string().nullable().describe('Optional human-readable title; null until set.'),\n created_by_subject: CreatedBySubjectSchema,\n created_at: z.string().describe('ISO 8601 creation timestamp.'),\n updated_at: z.string().describe('ISO 8601 last-update timestamp.'),\n metrics: SessionMetricsSchema,\n metadata: SessionMetadataSchema,\n source: SessionSourceSchema.nullable(),\n })\n .openapi('Session');\n\nexport type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;\nexport type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;\nexport type SessionAgent = z.infer<typeof SessionAgentSchema>;\nexport type SessionMetrics = z.infer<typeof SessionMetricsSchema>;\nexport type Session = z.infer<typeof SessionSchema>;\n"],"mappings":";AAIA,SAAS,SAAS;AAClB,SAAS,uBAAuB;AAChC,SAAS,8BAA8B;AAEvC,IAAM,kCAAkC;AAKxC,IAAM,+BAA+B;AAErC,IAAM,oCAAoC;AAE1C,IAAM,4BAA4B;AAE3B,IAAM,wBAAwB,EAClC;AAAA,EACC,EACG,OAAO,EACP,IAAI,CAAC,EACL,IAAI,+BAA+B,EACnC,MAAM,4BAA4B,EAClC,SAAS,wBAAmB,OAAO,+BAA+B,CAAC,cAAc;AAAA,EACpF,EACG,OAAO,EACP,IAAI,iCAAiC,EACrC,SAAS,2BAA2B,OAAO,iCAAiC,CAAC,cAAc;AAChG,EACC,OAAO,OAAK,OAAO,KAAK,CAAC,EAAE,UAAU,2BAA2B;AAAA,EAC/D,SAAS,WAAW,OAAO,yBAAyB,CAAC;AACvD,CAAC,EACA,SAAS,+BAA+B,EACxC,QAAQ,iBAAiB;AAIrB,IAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,8CAA8C;AAAA,EAC9G,mBAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EAChD,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAC5C,CAAC,EACA,OAAO,EACP,SAAS,4DAA4D,EACrE,QAAQ,gBAAgB;AAEpB,IAAM,8BAA8B,EACxC,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,WAAW,EAAE,SAAS,6CAA6C;AAAA,EACnF,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,oBAAoB;AAAA;AAAA,EAEnD,MAAM,EACH,OAAO,EACP,SAAS,EACT,SAAS,kFAAkF;AAChG,CAAC,EACA,OAAO,EACP,QAAQ,uBAAuB;AAE3B,IAAM,2BAA2B,EACrC,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,QAAQ,EAAE,SAAS,8DAA8D;AAAA,EACjG,MAAM;AACR,CAAC,EACA,OAAO,EACP,QAAQ,oBAAoB;AAGxB,IAAM,qBAAqB,EAC/B,mBAAmB,QAAQ,CAAC,6BAA6B,wBAAwB,CAAC,EAClF,QAAQ,cAAc;AAElB,IAAM,0BAA0B,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,mBAAmB;AAIvF,SAAS,8BAA8B;AACrC,SAAO,EACJ,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,wBAAwB,KAAK,QAAQ,EAAE,SAAS,wCAAwC;AAAA,IACxG,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,cAAc;AAAA,IAC7C,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,kBAAkB;AAAA,EACvD,CAAC,EACA,OAAO;AACZ;AAEO,IAAM,8BAA8B,4BAA4B,EAAE,QAAQ,uBAAuB;AAMjG,IAAM,sBAAsB,4BAA4B,EAC5D,SAAS,oFAAoF,EAC7F,QAAQ,eAAe;AAInB,IAAM,gBAAgB,EAC1B,OAAO;AAAA,EACN,IAAI,EAAE,OAAO,EAAE,SAAS,oBAAoB;AAAA,EAC5C,OAAO;AAAA,EACP,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gDAAgD;AAAA,EACtF,oBAAoB;AAAA,EACpB,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAC9D,YAAY,EAAE,OAAO,EAAE,SAAS,iCAAiC;AAAA,EACjE,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ,oBAAoB,SAAS;AACvC,CAAC,EACA,QAAQ,SAAS;","names":[]}
@@ -7,12 +7,13 @@ import type { SessionRecord } from '../models/SessionRecord';
7
7
  import type { TurnRecord } from '../models/TurnRecord';
8
8
  import type { PersistedTurnEvent, SessionEventItem } from '../schemas/events';
9
9
  import type { TokenPagination } from '../schemas/pagination';
10
+ import type { SessionMetadata } from '../schemas/session';
10
11
  import type { CancellationReason, TerminalTurnState } from '../schemas/turn';
11
12
  /**
12
13
  * Caller-supplied fields for creating a session; the store owns timestamps and tip state.
13
14
  * `agent` is a discriminated reference | inline binding.
14
15
  */
15
- export type CreateSessionInput<TSessionCustom extends object = Record<string, never>> = Pick<SessionRecord<TSessionCustom>, 'tenant_id' | 'session_id' | 'agent' | 'created_by_subject' | 'external_id' | 'metadata'> & {
16
+ export type CreateSessionInput<TSessionCustom extends object = Record<string, never>> = Pick<SessionRecord<TSessionCustom>, 'tenant_id' | 'session_id' | 'agent' | 'created_by_subject' | 'external_id' | 'metadata' | 'source'> & {
16
17
  custom: TSessionCustom | null;
17
18
  };
18
19
  /**
@@ -31,6 +32,11 @@ export interface GetSessionInput {
31
32
  tenant_id: string;
32
33
  session_id: string;
33
34
  }
35
+ export interface GetOwnedIdsInput {
36
+ tenant_id: string;
37
+ ids: readonly string[];
38
+ subject_id: string;
39
+ }
34
40
  export interface GetSessionByExternalIdInput {
35
41
  tenant_id: string;
36
42
  external_id: string;
@@ -55,6 +61,19 @@ export interface ListSessionsInput {
55
61
  created_by_subject_id: string;
56
62
  agent_ids: readonly string[];
57
63
  } | undefined;
64
+ /**
65
+ * When set, only sessions whose metadata contains all key/value pairs
66
+ * (exact string equality; extra session keys are allowed).
67
+ * `undefined` means no metadata filter; `{}` matches only sessions with empty metadata.
68
+ */
69
+ metadata: SessionMetadata | undefined;
70
+ /** When set, only sessions whose `source.type` matches. */
71
+ source_type: string | undefined;
72
+ /**
73
+ * When set, only sessions whose `source.id` matches.
74
+ * Requires `source_type`.
75
+ */
76
+ source_id: string | undefined;
58
77
  }
59
78
  /** Turn row fields without assembled snapshot (create input / listTurns). */
60
79
  export type TurnRecordWithoutSnapshot<TTurnCustom extends object = Record<string, never>> = Omit<TurnRecord<TTurnCustom>, 'snapshot'>;
@@ -193,6 +212,11 @@ export interface ISessionStore<TSessionCustom extends object = Record<string, ne
193
212
  * Does **not** bump `last_activity_timestamp_ms` (read path).
194
213
  */
195
214
  getSession(input: GetSessionInput): Promise<SessionRecord<TSessionCustom> | undefined>;
215
+ /**
216
+ * Session ids among `ids` owned by `subject_id`. Empty `ids` → `[]`.
217
+ * Does **not** bump `last_activity_timestamp_ms`.
218
+ */
219
+ getOwnedIds(input: GetOwnedIdsInput): Promise<readonly string[]>;
196
220
  /**
197
221
  * Lookup by tenant-scoped `external_id`. Missing or null external ids are not found.
198
222
  * Does **not** bump `last_activity_timestamp_ms` (read path).
@@ -212,8 +236,9 @@ export interface ISessionStore<TSessionCustom extends object = Record<string, ne
212
236
  * keyset cursor on `(updated_at, session_id)`. `start_timestamp` /
213
237
  * `end_timestamp` are inclusive instant bounds on `created_at`. Optional
214
238
  * `agent_id` filters ref-bound sessions. `created_by_or_agent_ids` matches
215
- * rows created by its subject OR bound to one of its agent ids. Does **not**
216
- * bump `last_activity_timestamp_ms` (read path).
239
+ * rows created by its subject OR bound to one of its agent ids; optional
240
+ * `source_type` / `source_id` filter by JSON `source` (expression-indexed,
241
+ * no scalar columns). Does **not** bump `last_activity_timestamp_ms` (read path).
217
242
  */
218
243
  listSessions(input: ListSessionsInput): Promise<{
219
244
  data: SessionRecord<TSessionCustom>[];
@@ -1 +1 @@
1
- {"version":3,"file":"ISessionStore.d.ts","sourceRoot":"","sources":["../../../src/agent-session/store/ISessionStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,wBAAwB,EACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE7E;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAAC,cAAc,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAC1F,aAAa,CAAC,cAAc,CAAC,EAC7B,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,oBAAoB,GAAG,aAAa,GAAG,UAAU,CACzF,GAAG;IACF,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,CAAC,cAAc,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAC1F,aAAa,CAAC,cAAc,CAAC,EAC7B,WAAW,GAAG,YAAY,CAC3B,GAAG;IACF,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;IACvF,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAC1D,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;CACjE,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IAClC,uDAAuD;IACvD,eAAe,EAAE,IAAI,GAAG,SAAS,CAAC;IAClC,uDAAuD;IACvD,aAAa,EAAE,IAAI,GAAG,SAAS,CAAC;IAChC,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,4FAA4F;IAC5F,uBAAuB,EACnB;QACE,qBAAqB,EAAE,MAAM,CAAC;QAC9B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;KAC9B,GACD,SAAS,CAAC;CACf;AAED,6EAA6E;AAC7E,MAAM,MAAM,yBAAyB,CAAC,WAAW,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAC9F,UAAU,CAAC,WAAW,CAAC,EACvB,UAAU,CACX,CAAC;AAEF,8FAA8F;AAC9F,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,mBAAmB,EACnB,SAAS,GAAG,uBAAuB,GAAG,YAAY,GAAG,kBAAkB,CACxE,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,kBAAkB,CAAC,CAAC;AAEpG,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,qBAAqB,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,eAAe,CAAC,WAAW,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IACjF,IAAI,EAAE,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAC7C,iFAAiF;IACjF,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B;;;;;;OAMG;IACH,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;IACzC;;;OAGG;IACH,iBAAiB,EAAE,yBAAyB,EAAE,CAAC;IAC/C,4DAA4D;IAC5D,iCAAiC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,yGAAyG;IACzG,eAAe,EAAE,kBAAkB,CAAC;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,iBAAiB,CAAC;IACzB,qFAAqF;IACrF,eAAe,EAAE,kBAAkB,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,qBAAqB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClD,UAAU,EAAE,wBAAwB,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,2BAA2B,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa,CAC5B,cAAc,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrD,WAAW,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAElD;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,kBAAkB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE,wFAAwF;IACxF,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC,CAAC;IAEvF;;;OAGG;IACH,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC,CAAC;IAE/G;;;;;;OAMG;IACH,aAAa,CAAC,KAAK,EAAE,kBAAkB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;;;;;;;OAQG;IACH,YAAY,CACV,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC;QAAE,IAAI,EAAE,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;QAAC,UAAU,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAEnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/D;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAEjF,0EAA0E;IAC1E,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,CAAC;IAE3E,qFAAqF;IACrF,SAAS,CACP,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;QAAE,IAAI,EAAE,yBAAyB,CAAC,WAAW,CAAC,EAAE,CAAC;QAAC,UAAU,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAE5F;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;;;;;;;OAQG;IACH,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D,4DAA4D;IAC5D,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,2CAA2C;IAC3C,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,4FAA4F;IAC5F,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE,uEAAuE;IACvE,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E,uEAAuE;IACvE,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D,6EAA6E;IAC7E,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D,qEAAqE;IACrE,0BAA0B,CAAC,KAAK,EAAE,+BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElF,8EAA8E;IAC9E,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAClD,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAC3B,UAAU,EAAE,eAAe,CAAC;KAC7B,CAAC,CAAC;IAEH;;;;;;;;;;;;;;OAcG;IACH,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC;QACxD,IAAI,EAAE,gBAAgB,EAAE,CAAC;QACzB,UAAU,EAAE,eAAe,CAAC;KAC7B,CAAC,CAAC;CACJ"}
1
+ {"version":3,"file":"ISessionStore.d.ts","sourceRoot":"","sources":["../../../src/agent-session/store/ISessionStore.ts"],"names":[],"mappings":"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"}