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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/agent-session/SessionHandle.d.ts +1 -0
  2. package/dist/agent-session/SessionHandle.d.ts.map +1 -1
  3. package/dist/agent-session/SessionHandle.js +3 -0
  4. package/dist/agent-session/SessionHandle.js.map +1 -1
  5. package/dist/agent-session/SessionHandle.mjs +3 -0
  6. package/dist/agent-session/SessionHandle.mjs.map +1 -1
  7. package/dist/agent-session/Sessions.d.ts +17 -6
  8. package/dist/agent-session/Sessions.d.ts.map +1 -1
  9. package/dist/agent-session/Sessions.js +45 -1
  10. package/dist/agent-session/Sessions.js.map +1 -1
  11. package/dist/agent-session/Sessions.mjs +45 -1
  12. package/dist/agent-session/Sessions.mjs.map +1 -1
  13. package/dist/agent-session/TurnResourceResolver.d.ts +3 -1
  14. package/dist/agent-session/TurnResourceResolver.d.ts.map +1 -1
  15. package/dist/agent-session/TurnResourceResolver.js +1 -0
  16. package/dist/agent-session/TurnResourceResolver.js.map +1 -1
  17. package/dist/agent-session/TurnResourceResolver.mjs +1 -0
  18. package/dist/agent-session/TurnResourceResolver.mjs.map +1 -1
  19. package/dist/agent-session/builtinsFromSpec.js +1 -1
  20. package/dist/agent-session/builtinsFromSpec.js.map +1 -1
  21. package/dist/agent-session/builtinsFromSpec.mjs +1 -1
  22. package/dist/agent-session/builtinsFromSpec.mjs.map +1 -1
  23. package/dist/agent-session/index.d.ts +6 -4
  24. package/dist/agent-session/index.d.ts.map +1 -1
  25. package/dist/agent-session/index.js +9 -0
  26. package/dist/agent-session/index.js.map +1 -1
  27. package/dist/agent-session/index.mjs +7 -1
  28. package/dist/agent-session/index.mjs.map +1 -1
  29. package/dist/agent-session/models/SessionRecord.d.ts +10 -2
  30. package/dist/agent-session/models/SessionRecord.d.ts.map +1 -1
  31. package/dist/agent-session/models/SessionRecord.js.map +1 -1
  32. package/dist/agent-session/schemas/agentSpec.d.ts +10 -4
  33. package/dist/agent-session/schemas/agentSpec.d.ts.map +1 -1
  34. package/dist/agent-session/schemas/agentSpec.js +6 -2
  35. package/dist/agent-session/schemas/agentSpec.js.map +1 -1
  36. package/dist/agent-session/schemas/agentSpec.mjs +6 -2
  37. package/dist/agent-session/schemas/agentSpec.mjs.map +1 -1
  38. package/dist/agent-session/schemas/session.d.ts +34 -7
  39. package/dist/agent-session/schemas/session.d.ts.map +1 -1
  40. package/dist/agent-session/schemas/session.js +23 -3
  41. package/dist/agent-session/schemas/session.js.map +1 -1
  42. package/dist/agent-session/schemas/session.mjs +21 -3
  43. package/dist/agent-session/schemas/session.mjs.map +1 -1
  44. package/dist/agent-session/schemas/subject.d.ts +9 -0
  45. package/dist/agent-session/schemas/subject.d.ts.map +1 -0
  46. package/dist/agent-session/schemas/subject.js +36 -0
  47. package/dist/agent-session/schemas/subject.js.map +1 -0
  48. package/dist/agent-session/schemas/subject.mjs +11 -0
  49. package/dist/agent-session/schemas/subject.mjs.map +1 -0
  50. package/dist/agent-session/store/ISessionStore.d.ts +29 -20
  51. package/dist/agent-session/store/ISessionStore.d.ts.map +1 -1
  52. package/dist/agent-session/store/ISessionStore.js.map +1 -1
  53. package/dist/agent-session/store/InMemorySessionStore.d.ts +4 -1
  54. package/dist/agent-session/store/InMemorySessionStore.d.ts.map +1 -1
  55. package/dist/agent-session/store/InMemorySessionStore.js +47 -3
  56. package/dist/agent-session/store/InMemorySessionStore.js.map +1 -1
  57. package/dist/agent-session/store/InMemorySessionStore.mjs +48 -3
  58. package/dist/agent-session/store/InMemorySessionStore.mjs.map +1 -1
  59. package/dist/agent-session/store/SessionStoreErrors.d.ts +4 -0
  60. package/dist/agent-session/store/SessionStoreErrors.d.ts.map +1 -1
  61. package/dist/agent-session/store/SessionStoreErrors.js +10 -0
  62. package/dist/agent-session/store/SessionStoreErrors.js.map +1 -1
  63. package/dist/agent-session/store/SessionStoreErrors.mjs +9 -0
  64. package/dist/agent-session/store/SessionStoreErrors.mjs.map +1 -1
  65. package/dist/core/capabilities/builtins/ContextCompaction.d.ts +6 -0
  66. package/dist/core/capabilities/builtins/ContextCompaction.d.ts.map +1 -1
  67. package/dist/core/capabilities/builtins/ContextCompaction.js +29 -3
  68. package/dist/core/capabilities/builtins/ContextCompaction.js.map +1 -1
  69. package/dist/core/capabilities/builtins/ContextCompaction.mjs +26 -2
  70. package/dist/core/capabilities/builtins/ContextCompaction.mjs.map +1 -1
  71. package/dist/core/llm/VercelAILLM.d.ts +1 -1
  72. package/dist/core/llm/VercelAILLM.d.ts.map +1 -1
  73. package/dist/core/llm/VercelAILLM.js +4 -2
  74. package/dist/core/llm/VercelAILLM.js.map +1 -1
  75. package/dist/core/llm/VercelAILLM.mjs +4 -2
  76. package/dist/core/llm/VercelAILLM.mjs.map +1 -1
  77. package/dist/core/mcp/remoteMcpClient.js +1 -1
  78. package/dist/core/mcp/remoteMcpClient.js.map +1 -1
  79. package/dist/core/mcp/remoteMcpClient.mjs +1 -1
  80. package/dist/core/mcp/remoteMcpClient.mjs.map +1 -1
  81. package/dist/core/runtime/AgentDefinition.d.ts +4 -0
  82. package/dist/core/runtime/AgentDefinition.d.ts.map +1 -1
  83. package/dist/core/runtime/AgentDefinition.js.map +1 -1
  84. package/dist/core/sandbox/sandboxScripts.gen.d.ts +1 -1
  85. package/dist/core/sandbox/sandboxScripts.gen.d.ts.map +1 -1
  86. package/dist/core/sandbox/sandboxScripts.gen.js +8 -1
  87. package/dist/core/sandbox/sandboxScripts.gen.js.map +1 -1
  88. package/dist/core/sandbox/sandboxScripts.gen.mjs +8 -1
  89. package/dist/core/sandbox/sandboxScripts.gen.mjs.map +1 -1
  90. package/package.json +23 -23
@@ -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 CompactionSettingsSchema = z\n .object({\n enabled: z.boolean().default(true).describe('Summarize older history when context grows too large. Default: true.'),\n compaction_threshold_tokens: z\n .number()\n .int()\n .positive()\n .optional()\n .describe('Context size in tokens that triggers compaction. Default: 50000.'),\n })\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 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":[]}
@@ -3,6 +3,13 @@
3
3
  * field (`reference` | `inline`). DB stores agent_id / agent_name / agent_spec columns.
4
4
  */
5
5
  import { z } from '@hono/zod-openapi';
6
+ export declare const SessionMetadataSchema: z.ZodRecord<z.ZodString, z.ZodString>;
7
+ export type SessionMetadata = z.infer<typeof SessionMetadataSchema>;
8
+ export declare const SessionMetricsSchema: z.ZodObject<{
9
+ total_cost_in_usd: z.ZodNumber;
10
+ total_duration_ms: z.ZodNumber;
11
+ total_turns: z.ZodNumber;
12
+ }, z.core.$strict>;
6
13
  export declare const SessionAgentReferenceSchema: z.ZodObject<{
7
14
  type: z.ZodLiteral<"reference">;
8
15
  id: z.ZodString;
@@ -76,8 +83,11 @@ export declare const SessionAgentInlineSchema: z.ZodObject<{
76
83
  context_management: z.ZodDefault<z.ZodObject<{
77
84
  compaction: z.ZodDefault<z.ZodObject<{
78
85
  enabled: z.ZodDefault<z.ZodBoolean>;
79
- compaction_threshold_tokens: z.ZodOptional<z.ZodNumber>;
80
- }, z.core.$strip>>;
86
+ trigger: z.ZodOptional<z.ZodObject<{
87
+ type: z.ZodLiteral<"input_tokens">;
88
+ value: z.ZodNumber;
89
+ }, z.core.$strict>>;
90
+ }, z.core.$strict>>;
81
91
  large_tool_response: z.ZodDefault<z.ZodObject<{
82
92
  enabled: z.ZodDefault<z.ZodBoolean>;
83
93
  }, z.core.$strip>>;
@@ -164,8 +174,11 @@ export declare const SessionAgentSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
164
174
  context_management: z.ZodDefault<z.ZodObject<{
165
175
  compaction: z.ZodDefault<z.ZodObject<{
166
176
  enabled: z.ZodDefault<z.ZodBoolean>;
167
- compaction_threshold_tokens: z.ZodOptional<z.ZodNumber>;
168
- }, z.core.$strip>>;
177
+ trigger: z.ZodOptional<z.ZodObject<{
178
+ type: z.ZodLiteral<"input_tokens">;
179
+ value: z.ZodNumber;
180
+ }, z.core.$strict>>;
181
+ }, z.core.$strict>>;
169
182
  large_tool_response: z.ZodDefault<z.ZodObject<{
170
183
  enabled: z.ZodDefault<z.ZodBoolean>;
171
184
  }, z.core.$strip>>;
@@ -253,8 +266,11 @@ export declare const SessionSchema: z.ZodObject<{
253
266
  context_management: z.ZodDefault<z.ZodObject<{
254
267
  compaction: z.ZodDefault<z.ZodObject<{
255
268
  enabled: z.ZodDefault<z.ZodBoolean>;
256
- compaction_threshold_tokens: z.ZodOptional<z.ZodNumber>;
257
- }, z.core.$strip>>;
269
+ trigger: z.ZodOptional<z.ZodObject<{
270
+ type: z.ZodLiteral<"input_tokens">;
271
+ value: z.ZodNumber;
272
+ }, z.core.$strict>>;
273
+ }, z.core.$strict>>;
258
274
  large_tool_response: z.ZodDefault<z.ZodObject<{
259
275
  enabled: z.ZodDefault<z.ZodBoolean>;
260
276
  }, z.core.$strip>>;
@@ -269,12 +285,23 @@ export declare const SessionSchema: z.ZodObject<{
269
285
  }, z.core.$strip>;
270
286
  }, z.core.$strict>], "type">;
271
287
  title: z.ZodNullable<z.ZodString>;
272
- created_by: z.ZodString;
288
+ created_by_subject: z.ZodObject<{
289
+ subject_id: z.ZodString;
290
+ subject_type: z.ZodString;
291
+ subject_display_name: z.ZodString;
292
+ }, z.core.$strict>;
273
293
  created_at: z.ZodString;
274
294
  updated_at: z.ZodString;
295
+ metrics: z.ZodObject<{
296
+ total_cost_in_usd: z.ZodNumber;
297
+ total_duration_ms: z.ZodNumber;
298
+ total_turns: z.ZodNumber;
299
+ }, z.core.$strict>;
300
+ metadata: z.ZodRecord<z.ZodString, z.ZodString>;
275
301
  }, z.core.$strip>;
276
302
  export type SessionAgentReference = z.infer<typeof SessionAgentReferenceSchema>;
277
303
  export type SessionAgentInline = z.infer<typeof SessionAgentInlineSchema>;
278
304
  export type SessionAgent = z.infer<typeof SessionAgentSchema>;
305
+ export type SessionMetrics = z.infer<typeof SessionMetricsSchema>;
279
306
  export type Session = z.infer<typeof SessionSchema>;
280
307
  //# sourceMappingURL=session.d.ts.map
@@ -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;AAGtC,eAAO,MAAM,2BAA2B;;;;kBAWL,CAAC;AAEpC,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAML,CAAC;AAEjC,oEAAoE;AACpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAEL,CAAC;AAE3B,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUL,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,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;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"}
@@ -23,11 +23,28 @@ __export(session_exports, {
23
23
  SessionAgentInlineSchema: () => SessionAgentInlineSchema,
24
24
  SessionAgentReferenceSchema: () => SessionAgentReferenceSchema,
25
25
  SessionAgentSchema: () => SessionAgentSchema,
26
+ SessionMetadataSchema: () => SessionMetadataSchema,
27
+ SessionMetricsSchema: () => SessionMetricsSchema,
26
28
  SessionSchema: () => SessionSchema
27
29
  });
28
30
  module.exports = __toCommonJS(session_exports);
29
31
  var import_zod_openapi = require("@hono/zod-openapi");
30
32
  var import_agentSpec = require("./agentSpec.js");
33
+ var import_subject = require("./subject.js");
34
+ var SESSION_METADATA_MAX_KEY_LENGTH = 32;
35
+ var SESSION_METADATA_MAX_VALUE_LENGTH = 128;
36
+ var SESSION_METADATA_MAX_KEYS = 50;
37
+ 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.`),
39
+ import_zod_openapi.z.string().max(SESSION_METADATA_MAX_VALUE_LENGTH).describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`)
40
+ ).refine((m) => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {
41
+ message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`
42
+ }).describe("Caller-owned session metadata").openapi("SessionMetadata");
43
+ var SessionMetricsSchema = import_zod_openapi.z.object({
44
+ total_cost_in_usd: import_zod_openapi.z.number().nonnegative(),
45
+ total_duration_ms: import_zod_openapi.z.number().int().nonnegative(),
46
+ total_turns: import_zod_openapi.z.number().int().nonnegative()
47
+ }).strict().describe("Rolled-up cost, duration, and turn counters for a session.").openapi("SessionMetrics");
31
48
  var SessionAgentReferenceSchema = import_zod_openapi.z.object({
32
49
  type: import_zod_openapi.z.literal("reference").describe("Bind the session to a named registry agent."),
33
50
  id: import_zod_openapi.z.string().min(1).describe("Registry agent id."),
@@ -43,16 +60,19 @@ var SessionSchema = import_zod_openapi.z.object({
43
60
  id: import_zod_openapi.z.string().describe("Unique session id."),
44
61
  agent: SessionAgentSchema,
45
62
  title: import_zod_openapi.z.string().nullable().describe("Optional human-readable title; null until set."),
46
- /** Caller identity that created the session (immutable). */
47
- created_by: import_zod_openapi.z.string().describe("Caller identity that created the session (immutable)."),
63
+ created_by_subject: import_subject.CreatedBySubjectSchema,
48
64
  created_at: import_zod_openapi.z.string().describe("ISO 8601 creation timestamp."),
49
- updated_at: import_zod_openapi.z.string().describe("ISO 8601 last-update timestamp.")
65
+ updated_at: import_zod_openapi.z.string().describe("ISO 8601 last-update timestamp."),
66
+ metrics: SessionMetricsSchema,
67
+ metadata: SessionMetadataSchema
50
68
  }).openapi("Session");
51
69
  // Annotate the CommonJS export names for ESM import in node:
52
70
  0 && (module.exports = {
53
71
  SessionAgentInlineSchema,
54
72
  SessionAgentReferenceSchema,
55
73
  SessionAgentSchema,
74
+ SessionMetadataSchema,
75
+ SessionMetricsSchema,
56
76
  SessionSchema
57
77
  });
58
78
  //# 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';\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 /** Caller identity that created the session (immutable). */\n created_by: z.string().describe('Caller identity that created the session (immutable).'),\n created_at: z.string().describe('ISO 8601 creation timestamp.'),\n updated_at: z.string().describe('ISO 8601 last-update timestamp.'),\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 Session = z.infer<typeof SessionSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,yBAAkB;AAClB,uBAAgC;AAEzB,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;AAAA,EAEtF,YAAY,qBAAE,OAAO,EAAE,SAAS,uDAAuD;AAAA,EACvF,YAAY,qBAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAC9D,YAAY,qBAAE,OAAO,EAAE,SAAS,iCAAiC;AACnE,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\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,6 +1,21 @@
1
1
  // src/agent-session/schemas/session.ts
2
2
  import { z } from "@hono/zod-openapi";
3
3
  import { AgentSpecSchema } from "./agentSpec.mjs";
4
+ import { CreatedBySubjectSchema } from "./subject.mjs";
5
+ var SESSION_METADATA_MAX_KEY_LENGTH = 32;
6
+ var SESSION_METADATA_MAX_VALUE_LENGTH = 128;
7
+ var SESSION_METADATA_MAX_KEYS = 50;
8
+ 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().max(SESSION_METADATA_MAX_VALUE_LENGTH).describe(`Metadata value; at most ${String(SESSION_METADATA_MAX_VALUE_LENGTH)} characters.`)
11
+ ).refine((m) => Object.keys(m).length <= SESSION_METADATA_MAX_KEYS, {
12
+ message: `at most ${String(SESSION_METADATA_MAX_KEYS)} metadata keys`
13
+ }).describe("Caller-owned session metadata").openapi("SessionMetadata");
14
+ var SessionMetricsSchema = z.object({
15
+ total_cost_in_usd: z.number().nonnegative(),
16
+ total_duration_ms: z.number().int().nonnegative(),
17
+ total_turns: z.number().int().nonnegative()
18
+ }).strict().describe("Rolled-up cost, duration, and turn counters for a session.").openapi("SessionMetrics");
4
19
  var SessionAgentReferenceSchema = z.object({
5
20
  type: z.literal("reference").describe("Bind the session to a named registry agent."),
6
21
  id: z.string().min(1).describe("Registry agent id."),
@@ -16,15 +31,18 @@ var SessionSchema = z.object({
16
31
  id: z.string().describe("Unique session id."),
17
32
  agent: SessionAgentSchema,
18
33
  title: z.string().nullable().describe("Optional human-readable title; null until set."),
19
- /** Caller identity that created the session (immutable). */
20
- created_by: z.string().describe("Caller identity that created the session (immutable)."),
34
+ created_by_subject: CreatedBySubjectSchema,
21
35
  created_at: z.string().describe("ISO 8601 creation timestamp."),
22
- updated_at: z.string().describe("ISO 8601 last-update timestamp.")
36
+ updated_at: z.string().describe("ISO 8601 last-update timestamp."),
37
+ metrics: SessionMetricsSchema,
38
+ metadata: SessionMetadataSchema
23
39
  }).openapi("Session");
24
40
  export {
25
41
  SessionAgentInlineSchema,
26
42
  SessionAgentReferenceSchema,
27
43
  SessionAgentSchema,
44
+ SessionMetadataSchema,
45
+ SessionMetricsSchema,
28
46
  SessionSchema
29
47
  };
30
48
  //# 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';\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 /** Caller identity that created the session (immutable). */\n created_by: z.string().describe('Caller identity that created the session (immutable).'),\n created_at: z.string().describe('ISO 8601 creation timestamp.'),\n updated_at: z.string().describe('ISO 8601 last-update timestamp.'),\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 Session = z.infer<typeof SessionSchema>;\n"],"mappings":";AAIA,SAAS,SAAS;AAClB,SAAS,uBAAuB;AAEzB,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;AAAA,EAEtF,YAAY,EAAE,OAAO,EAAE,SAAS,uDAAuD;AAAA,EACvF,YAAY,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,EAC9D,YAAY,EAAE,OAAO,EAAE,SAAS,iCAAiC;AACnE,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\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":[]}
@@ -0,0 +1,9 @@
1
+ import { z } from '@hono/zod-openapi';
2
+ /** Persisted creator identity on agent, session, schedule, and schedule_run rows. */
3
+ export declare const CreatedBySubjectSchema: z.ZodObject<{
4
+ subject_id: z.ZodString;
5
+ subject_type: z.ZodString;
6
+ subject_display_name: z.ZodString;
7
+ }, z.core.$strict>;
8
+ export type CreatedBySubject = z.infer<typeof CreatedBySubjectSchema>;
9
+ //# sourceMappingURL=subject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../../src/agent-session/schemas/subject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAEtC,qFAAqF;AACrF,eAAO,MAAM,sBAAsB;;;;kBAQL,CAAC;AAE/B,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/agent-session/schemas/subject.ts
21
+ var subject_exports = {};
22
+ __export(subject_exports, {
23
+ CreatedBySubjectSchema: () => CreatedBySubjectSchema
24
+ });
25
+ module.exports = __toCommonJS(subject_exports);
26
+ var import_zod_openapi = require("@hono/zod-openapi");
27
+ var CreatedBySubjectSchema = import_zod_openapi.z.object({
28
+ subject_id: import_zod_openapi.z.string().min(1).describe("Subject id."),
29
+ subject_type: import_zod_openapi.z.string().min(1).describe("Subject type."),
30
+ subject_display_name: import_zod_openapi.z.string().min(1).describe("Display name.")
31
+ }).strict().describe("Who created this resource.").openapi("CreatedBySubject");
32
+ // Annotate the CommonJS export names for ESM import in node:
33
+ 0 && (module.exports = {
34
+ CreatedBySubjectSchema
35
+ });
36
+ //# sourceMappingURL=subject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/agent-session/schemas/subject.ts"],"sourcesContent":["import { z } from '@hono/zod-openapi';\n\n/** Persisted creator identity on agent, session, schedule, and schedule_run rows. */\nexport const CreatedBySubjectSchema = z\n .object({\n subject_id: z.string().min(1).describe('Subject id.'),\n subject_type: z.string().min(1).describe('Subject type.'),\n subject_display_name: z.string().min(1).describe('Display name.'),\n })\n .strict()\n .describe('Who created this resource.')\n .openapi('CreatedBySubject');\n\nexport type CreatedBySubject = z.infer<typeof CreatedBySubjectSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAkB;AAGX,IAAM,yBAAyB,qBACnC,OAAO;AAAA,EACN,YAAY,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,aAAa;AAAA,EACpD,cAAc,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,eAAe;AAAA,EACxD,sBAAsB,qBAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,eAAe;AAClE,CAAC,EACA,OAAO,EACP,SAAS,4BAA4B,EACrC,QAAQ,kBAAkB;","names":[]}
@@ -0,0 +1,11 @@
1
+ // src/agent-session/schemas/subject.ts
2
+ import { z } from "@hono/zod-openapi";
3
+ var CreatedBySubjectSchema = z.object({
4
+ subject_id: z.string().min(1).describe("Subject id."),
5
+ subject_type: z.string().min(1).describe("Subject type."),
6
+ subject_display_name: z.string().min(1).describe("Display name.")
7
+ }).strict().describe("Who created this resource.").openapi("CreatedBySubject");
8
+ export {
9
+ CreatedBySubjectSchema
10
+ };
11
+ //# sourceMappingURL=subject.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/agent-session/schemas/subject.ts"],"sourcesContent":["import { z } from '@hono/zod-openapi';\n\n/** Persisted creator identity on agent, session, schedule, and schedule_run rows. */\nexport const CreatedBySubjectSchema = z\n .object({\n subject_id: z.string().min(1).describe('Subject id.'),\n subject_type: z.string().min(1).describe('Subject type.'),\n subject_display_name: z.string().min(1).describe('Display name.'),\n })\n .strict()\n .describe('Who created this resource.')\n .openapi('CreatedBySubject');\n\nexport type CreatedBySubject = z.infer<typeof CreatedBySubjectSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAGX,IAAM,yBAAyB,EACnC,OAAO;AAAA,EACN,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,aAAa;AAAA,EACpD,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,eAAe;AAAA,EACxD,sBAAsB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,eAAe;AAClE,CAAC,EACA,OAAO,EACP,SAAS,4BAA4B,EACrC,QAAQ,kBAAkB;","names":[]}
@@ -12,23 +12,29 @@ import type { CancellationReason, TerminalTurnState } from '../schemas/turn';
12
12
  * Caller-supplied fields for creating a session; the store owns timestamps and tip state.
13
13
  * `agent` is a discriminated reference | inline binding.
14
14
  */
15
- export type CreateSessionInput<TSessionCustom extends object = Record<string, never>> = Pick<SessionRecord<TSessionCustom>, 'tenant_id' | 'session_id' | 'agent' | 'created_by'> & {
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
16
  custom: TSessionCustom | null;
17
17
  };
18
18
  /**
19
19
  * PATCH fields for an existing session; `undefined` fields are left unchanged.
20
20
  * `agent` may be set only on inline sessions, and only as an inline arm (`{ type: 'inline', spec }`).
21
+ * `metadata` when set fully replaces the stored map (`{}` clears).
21
22
  */
22
23
  export type UpdateSessionInput<TSessionCustom extends object = Record<string, never>> = Pick<SessionRecord<TSessionCustom>, 'tenant_id' | 'session_id'> & {
23
24
  agent: Extract<SessionRecord<TSessionCustom>['agent'], {
24
25
  type: 'inline';
25
26
  }> | undefined;
26
27
  title: SessionRecord<TSessionCustom>['title'] | undefined;
28
+ metadata: SessionRecord<TSessionCustom>['metadata'] | undefined;
27
29
  };
28
30
  export interface GetSessionInput {
29
31
  tenant_id: string;
30
32
  session_id: string;
31
33
  }
34
+ export interface GetSessionByExternalIdInput {
35
+ tenant_id: string;
36
+ external_id: string;
37
+ }
32
38
  export interface DeleteSessionInput {
33
39
  tenant_id: string;
34
40
  session_id: string;
@@ -44,8 +50,11 @@ export interface ListSessionsInput {
44
50
  end_timestamp: Date | undefined;
45
51
  /** When set, only sessions bound to this named agent id. */
46
52
  agent_id: string | undefined;
47
- /** When set, only sessions created by this identity. */
48
- created_by: string | undefined;
53
+ /** When set, match creator or named-agent binding. Empty `agent_ids` means creator-only. */
54
+ created_by_or_agent_ids: {
55
+ created_by_subject_id: string;
56
+ agent_ids: readonly string[];
57
+ } | undefined;
49
58
  }
50
59
  /** Turn row fields without assembled snapshot (create input / listTurns). */
51
60
  export type TurnRecordWithoutSnapshot<TTurnCustom extends object = Record<string, never>> = Omit<TurnRecord<TTurnCustom>, 'snapshot'>;
@@ -173,7 +182,7 @@ export interface ISessionStore<TSessionCustom extends object = Record<string, ne
173
182
  /**
174
183
  * Persists a discriminated `agent` (ref | value). SQL backends may flatten to columns.
175
184
  * `session_id` is globally unique across tenants.
176
- * Persists caller-supplied `created_by` (immutable after create).
185
+ * Persists caller-supplied `created_by_subject` (immutable after create).
177
186
  * Sets `last_activity_timestamp_ms` (= now) on create.
178
187
  */
179
188
  createSession(input: CreateSessionInput<TSessionCustom>): Promise<void>;
@@ -184,10 +193,16 @@ export interface ISessionStore<TSessionCustom extends object = Record<string, ne
184
193
  * Does **not** bump `last_activity_timestamp_ms` (read path).
185
194
  */
186
195
  getSession(input: GetSessionInput): Promise<SessionRecord<TSessionCustom> | undefined>;
196
+ /**
197
+ * Lookup by tenant-scoped `external_id`. Missing or null external ids are not found.
198
+ * Does **not** bump `last_activity_timestamp_ms` (read path).
199
+ */
200
+ getSessionByExternalId(input: GetSessionByExternalIdInput): Promise<SessionRecord<TSessionCustom> | undefined>;
187
201
  /**
188
202
  * PATCH semantics — update only the provided fields:
189
203
  * - agent: replace inline binding (inline sessions only; reference → invariant error).
190
204
  * - title: set/replace the session title.
205
+ * - metadata: full replace of the caller-owned string map when set.
191
206
  * Bumps `last_activity_timestamp_ms` (= now) in the same update.
192
207
  */
193
208
  updateSession(input: UpdateSessionInput<TSessionCustom>): Promise<void>;
@@ -196,8 +211,9 @@ export interface ISessionStore<TSessionCustom extends object = Record<string, ne
196
211
  * (`order` defaults to `desc`, `session_id` tie-break). `page_token` is a
197
212
  * keyset cursor on `(updated_at, session_id)`. `start_timestamp` /
198
213
  * `end_timestamp` are inclusive instant bounds on `created_at`. Optional
199
- * `agent_id` filters ref-bound sessions; optional `created_by` filters by
200
- * creator identity. Does **not** bump `last_activity_timestamp_ms` (read path).
214
+ * `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).
201
217
  */
202
218
  listSessions(input: ListSessionsInput): Promise<{
203
219
  data: SessionRecord<TSessionCustom>[];
@@ -216,7 +232,8 @@ export interface ISessionStore<TSessionCustom extends object = Record<string, ne
216
232
  * row or leave `last_turn_id` pointing at a turn that was never created.
217
233
  * The implementation supplies the mechanism (session lock, row lock/tx, …).
218
234
  *
219
- * Also bumps `session.last_activity_timestamp_ms` in that same atomic unit.
235
+ * Also bumps `session.last_activity_timestamp_ms` and increments
236
+ * `session.metrics.total_turns` in that same atomic unit.
220
237
  *
221
238
  * Fork semantics for `turn.previous_turn_id`:
222
239
  * - `null` — new root turn (no parent); always allowed.
@@ -234,10 +251,8 @@ export interface ISessionStore<TSessionCustom extends object = Record<string, ne
234
251
  */
235
252
  createTurn(input: CreateTurnInput<TTurnCustom>): Promise<void>;
236
253
  /**
237
- * One tx: (a) conditionally cancel a running turn with `reason`; (b) if it
238
- * did cancel, insert the caller-built `turn_done_event` already-terminal
239
- * turns skip the event insert; (c) return the now-immutable turn record.
240
- * Missing turn → {@link TurnNotFoundError}.
254
+ * Cancel if still running (persist `turn_done` and fold cost/duration into
255
+ * `session.metrics`); already-terminal turns are a read. Missing → {@link TurnNotFoundError}.
241
256
  */
242
257
  freezeAndGetTurn(input: FreezeAndGetTurnInput): Promise<TurnRecord<TTurnCustom>>;
243
258
  /** Returns the turn record, or undefined if not found in this session. */
@@ -248,15 +263,9 @@ export interface ISessionStore<TSessionCustom extends object = Record<string, ne
248
263
  pagination: TokenPagination;
249
264
  }>;
250
265
  /**
251
- * Writes the terminal state and `turn_done_event` atomically. Store contract
252
- * **first terminal write wins**:
253
- * - Allowed: `running` `done` | `cancelled` | `error`.
254
- * - Rejected with **409** (or equivalent conflict): any write when status is already
255
- * terminal — including done→cancelled, cancelled→done, error→*, terminal→running.
256
- * - Missing turn → 404 / not-found.
257
- *
258
- * Check under the same concurrency control as other turn mutations (lock/CAS) —
259
- * not a racy read-then-write outside the critical section.
266
+ * First terminal write wins (`running` done/cancelled/error); otherwise 409.
267
+ * Winning write also folds cost/duration into `session.metrics`. Missing → 404.
268
+ * Must use the same lock/CAS as other turn mutations.
260
269
  */
261
270
  updateTurnState(input: UpdateTurnStateInput): Promise<void>;
262
271
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ISessionStore.d.ts","sourceRoot":"","sources":["../../../src/agent-session/store/ISessionStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ISessionStore.d.ts","sourceRoot":"","sources":["../../../src/agent-session/store/ISessionStore.ts"],"names":[],"mappings":"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"}