@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.
- package/dist/agent-session/Sessions.d.ts +7 -3
- package/dist/agent-session/Sessions.d.ts.map +1 -1
- package/dist/agent-session/Sessions.js +2 -1
- package/dist/agent-session/Sessions.js.map +1 -1
- package/dist/agent-session/Sessions.mjs +2 -1
- package/dist/agent-session/Sessions.mjs.map +1 -1
- package/dist/agent-session/TurnResourceResolver.d.ts +13 -10
- package/dist/agent-session/TurnResourceResolver.d.ts.map +1 -1
- package/dist/agent-session/TurnResourceResolver.js +15 -1
- package/dist/agent-session/TurnResourceResolver.js.map +1 -1
- package/dist/agent-session/TurnResourceResolver.mjs +15 -1
- package/dist/agent-session/TurnResourceResolver.mjs.map +1 -1
- package/dist/agent-session/index.d.ts +3 -3
- package/dist/agent-session/index.d.ts.map +1 -1
- package/dist/agent-session/index.js +6 -0
- package/dist/agent-session/index.js.map +1 -1
- package/dist/agent-session/index.mjs +11 -1
- package/dist/agent-session/index.mjs.map +1 -1
- package/dist/agent-session/models/SessionRecord.d.ts +5 -1
- package/dist/agent-session/models/SessionRecord.d.ts.map +1 -1
- package/dist/agent-session/models/SessionRecord.js.map +1 -1
- package/dist/agent-session/schemas/agentSpec.d.ts +4 -2
- package/dist/agent-session/schemas/agentSpec.d.ts.map +1 -1
- package/dist/agent-session/schemas/agentSpec.js +5 -3
- package/dist/agent-session/schemas/agentSpec.js.map +1 -1
- package/dist/agent-session/schemas/agentSpec.mjs +5 -3
- package/dist/agent-session/schemas/agentSpec.mjs.map +1 -1
- package/dist/agent-session/schemas/session.d.ts +29 -2
- package/dist/agent-session/schemas/session.d.ts.map +1 -1
- package/dist/agent-session/schemas/session.js +23 -5
- package/dist/agent-session/schemas/session.js.map +1 -1
- package/dist/agent-session/schemas/session.mjs +19 -4
- package/dist/agent-session/schemas/session.mjs.map +1 -1
- package/dist/agent-session/store/ISessionStore.d.ts +28 -3
- package/dist/agent-session/store/ISessionStore.d.ts.map +1 -1
- package/dist/agent-session/store/ISessionStore.js.map +1 -1
- package/dist/agent-session/store/InMemorySessionStore.d.ts +3 -2
- package/dist/agent-session/store/InMemorySessionStore.d.ts.map +1 -1
- package/dist/agent-session/store/InMemorySessionStore.js +36 -3
- package/dist/agent-session/store/InMemorySessionStore.js.map +1 -1
- package/dist/agent-session/store/InMemorySessionStore.mjs +36 -3
- package/dist/agent-session/store/InMemorySessionStore.mjs.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +3 -0
- package/dist/core/index.mjs.map +1 -1
- package/dist/core/llm/VercelAILLM.d.ts.map +1 -1
- package/dist/core/llm/VercelAILLM.js +4 -0
- package/dist/core/llm/VercelAILLM.js.map +1 -1
- package/dist/core/llm/VercelAILLM.mjs +4 -0
- package/dist/core/llm/VercelAILLM.mjs.map +1 -1
- package/dist/core/redisKeys.d.ts +7 -0
- package/dist/core/redisKeys.d.ts.map +1 -0
- package/dist/core/redisKeys.js +36 -0
- package/dist/core/redisKeys.js.map +1 -0
- package/dist/core/redisKeys.mjs +10 -0
- package/dist/core/redisKeys.mjs.map +1 -0
- package/dist/core/sandbox/Sandbox.d.ts.map +1 -1
- package/dist/core/sandbox/Sandbox.js +13 -6
- package/dist/core/sandbox/Sandbox.js.map +1 -1
- package/dist/core/sandbox/Sandbox.mjs +9 -2
- package/dist/core/sandbox/Sandbox.mjs.map +1 -1
- package/dist/core/sandbox/provider/DaytonaProvider.d.ts +1 -1
- package/dist/core/sandbox/provider/DaytonaProvider.d.ts.map +1 -1
- package/dist/core/sandbox/provider/DaytonaProvider.js +3 -3
- package/dist/core/sandbox/provider/DaytonaProvider.js.map +1 -1
- package/dist/core/sandbox/provider/DaytonaProvider.mjs +3 -3
- package/dist/core/sandbox/provider/DaytonaProvider.mjs.map +1 -1
- package/dist/core/sandbox/provider/Provider.d.ts +20 -4
- package/dist/core/sandbox/provider/Provider.d.ts.map +1 -1
- package/dist/core/sandbox/provider/Provider.js.map +1 -1
- package/dist/core/sandbox/provider/Provider.mjs.map +1 -1
- package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts +2 -2
- package/dist/core/sandbox/provider/TFYSandboxProvider.d.ts.map +1 -1
- package/dist/core/sandbox/provider/TFYSandboxProvider.js +4 -4
- package/dist/core/sandbox/provider/TFYSandboxProvider.js.map +1 -1
- package/dist/core/sandbox/provider/TFYSandboxProvider.mjs +4 -4
- package/dist/core/sandbox/provider/TFYSandboxProvider.mjs.map +1 -1
- package/dist/core/sandbox/sandboxScripts.gen.d.ts +1 -1
- package/dist/core/sandbox/sandboxScripts.gen.d.ts.map +1 -1
- package/dist/core/sandbox/sandboxScripts.gen.js +1 -1
- package/dist/core/sandbox/sandboxScripts.gen.js.map +1 -1
- package/dist/core/sandbox/sandboxScripts.gen.mjs +1 -1
- package/dist/core/sandbox/sandboxScripts.gen.mjs.map +1 -1
- package/dist/core/sandbox/skills/ISkillMounter.d.ts +1 -1
- package/dist/core/sandbox/skills/ISkillMounter.d.ts.map +1 -1
- package/dist/core/sandbox/skills/ISkillMounter.js.map +1 -1
- package/dist/core/sandbox/skills/SkillMounter.d.ts +20 -2
- package/dist/core/sandbox/skills/SkillMounter.d.ts.map +1 -1
- package/dist/core/sandbox/skills/SkillMounter.js +59 -23
- package/dist/core/sandbox/skills/SkillMounter.js.map +1 -1
- package/dist/core/sandbox/skills/SkillMounter.mjs +58 -23
- package/dist/core/sandbox/skills/SkillMounter.mjs.map +1 -1
- package/dist/core/sandbox/skills/index.d.ts +1 -1
- package/dist/core/sandbox/skills/index.d.ts.map +1 -1
- package/dist/core/sandbox/skills/index.js.map +1 -1
- package/dist/core/sandbox/skills/index.mjs.map +1 -1
- package/dist/request-reply/executor.d.ts +1 -1
- package/dist/request-reply/executor.d.ts.map +1 -1
- package/dist/request-reply/executor.js +1 -1
- package/dist/request-reply/executor.js.map +1 -1
- package/dist/request-reply/executor.mjs +1 -1
- package/dist/request-reply/executor.mjs.map +1 -1
- package/dist/request-reply/utils.d.ts +0 -1
- package/dist/request-reply/utils.d.ts.map +1 -1
- package/dist/request-reply/utils.js +4 -6
- package/dist/request-reply/utils.js.map +1 -1
- package/dist/request-reply/utils.mjs +4 -5
- package/dist/request-reply/utils.mjs.map +1 -1
- 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).
|
|
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("
|
|
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).
|
|
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("
|
|
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":"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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":[]}
|
|
@@ -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;
|
|
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
|
|
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
|
|
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
|
|
216
|
-
*
|
|
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,
|
|
1
|
+
{"version":3,"file":"ISessionStore.d.ts","sourceRoot":"","sources":["../../../src/agent-session/store/ISessionStore.ts"],"names":[],"mappings":"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"}
|