@runtypelabs/cli 2.16.4 → 2.16.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1382 -160
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -15732,6 +15732,865 @@ var productConfigurationSummarySchema = external_exports.object({
|
|
|
15732
15732
|
var ORGANIZATION_INTEGRATION_PROVIDERS = ["slack", "telegram", "discord", "linear", "github"];
|
|
15733
15733
|
var integrationProviderSchema = external_exports.enum(ORGANIZATION_INTEGRATION_PROVIDERS);
|
|
15734
15734
|
var integrationStatusSchema = external_exports.enum(["active", "revoked", "pending"]);
|
|
15735
|
+
var FILTER_OPERATORS = [
|
|
15736
|
+
"eq",
|
|
15737
|
+
"neq",
|
|
15738
|
+
"gt",
|
|
15739
|
+
"gte",
|
|
15740
|
+
"lt",
|
|
15741
|
+
"lte",
|
|
15742
|
+
"between",
|
|
15743
|
+
"contains",
|
|
15744
|
+
"startsWith",
|
|
15745
|
+
"endsWith",
|
|
15746
|
+
"in",
|
|
15747
|
+
"notIn",
|
|
15748
|
+
"isSet",
|
|
15749
|
+
"isNotSet",
|
|
15750
|
+
"isTrue",
|
|
15751
|
+
"isFalse",
|
|
15752
|
+
"withinLastDays",
|
|
15753
|
+
"olderThanDays"
|
|
15754
|
+
];
|
|
15755
|
+
var FIELD_NAME_RE = /^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$/;
|
|
15756
|
+
var filterFieldSchema = external_exports.string().regex(FIELD_NAME_RE, "Invalid field name");
|
|
15757
|
+
var recordFilterConditionSchema = external_exports.object({
|
|
15758
|
+
field: filterFieldSchema,
|
|
15759
|
+
op: external_exports.enum(FILTER_OPERATORS),
|
|
15760
|
+
value: external_exports.unknown().optional()
|
|
15761
|
+
});
|
|
15762
|
+
var recordFilterGroupSchema = external_exports.lazy(
|
|
15763
|
+
() => external_exports.object({
|
|
15764
|
+
op: external_exports.enum(["and", "or"]),
|
|
15765
|
+
conditions: external_exports.array(external_exports.union([recordFilterConditionSchema, recordFilterGroupSchema])).min(1).max(50)
|
|
15766
|
+
})
|
|
15767
|
+
);
|
|
15768
|
+
var recordFilterSchema = external_exports.object({
|
|
15769
|
+
type: external_exports.string().min(1).max(255),
|
|
15770
|
+
where: external_exports.union([recordFilterConditionSchema, recordFilterGroupSchema]).optional()
|
|
15771
|
+
});
|
|
15772
|
+
var MCPServerCategory = {
|
|
15773
|
+
COMMUNICATION: "communication",
|
|
15774
|
+
PRODUCTIVITY: "productivity",
|
|
15775
|
+
DEVELOPMENT: "development",
|
|
15776
|
+
PROJECT_MANAGEMENT: "project_management"
|
|
15777
|
+
};
|
|
15778
|
+
var agentSubagentConfigSchema = external_exports.object({
|
|
15779
|
+
/**
|
|
15780
|
+
* Pool of tool IDs the parent is permitted to grant to ad-hoc subagents.
|
|
15781
|
+
* Supports exact IDs, wildcards (`mcp:*`, `builtin:*`, `platform:*`), and
|
|
15782
|
+
* runtime-tool names. Must be a SUBSET of the parent's resolved tools —
|
|
15783
|
+
* validated at dispatch (no privilege escalation).
|
|
15784
|
+
*/
|
|
15785
|
+
toolPool: external_exports.array(external_exports.string()),
|
|
15786
|
+
/** Default for spawned subagent loops. Default 5. */
|
|
15787
|
+
defaultMaxTurns: external_exports.number().optional(),
|
|
15788
|
+
/** Hard cap a spawned subagent can request. Default 10. */
|
|
15789
|
+
maxTurnsLimit: external_exports.number().optional(),
|
|
15790
|
+
/** Hard ceiling on total spawns per top-level parent invocation. Default 5. */
|
|
15791
|
+
maxSpawnsPerRun: external_exports.number().optional(),
|
|
15792
|
+
/** Default model for spawned subagents. Defaults to parent's model. */
|
|
15793
|
+
defaultModel: external_exports.string().optional(),
|
|
15794
|
+
/**
|
|
15795
|
+
* Whether a spawned subagent can itself spawn subagents. Default `false`
|
|
15796
|
+
* (Anthropic-aligned). Even when `true`, MAX_NESTED_DEPTH still bounds the
|
|
15797
|
+
* recursion tree.
|
|
15798
|
+
*/
|
|
15799
|
+
allowNesting: external_exports.boolean().optional(),
|
|
15800
|
+
/** Default per-spawn timeout. Default 300_000 (5 min). */
|
|
15801
|
+
defaultTimeoutMs: external_exports.number().optional()
|
|
15802
|
+
});
|
|
15803
|
+
var codeModeConfigSchema = external_exports.object({
|
|
15804
|
+
/** Tool IDs available in the sandbox (subset of agent's tools, supports wildcards like `mcp:*`) */
|
|
15805
|
+
toolPool: external_exports.array(external_exports.string()),
|
|
15806
|
+
/** Optional custom description prefix for the synthesized tool */
|
|
15807
|
+
description: external_exports.string().optional(),
|
|
15808
|
+
/** Sandbox execution timeout in ms (default 60000) */
|
|
15809
|
+
timeoutMs: external_exports.number().optional()
|
|
15810
|
+
});
|
|
15811
|
+
var toolLimitSchema = external_exports.object({
|
|
15812
|
+
maxCalls: external_exports.number().optional(),
|
|
15813
|
+
required: external_exports.boolean().optional()
|
|
15814
|
+
});
|
|
15815
|
+
var approvalConfigSchema = external_exports.object({
|
|
15816
|
+
/** Tools that require user approval before execution.
|
|
15817
|
+
* string[]: tool names/patterns ("send_email", "mcp:*", "builtin:*")
|
|
15818
|
+
* true: all tools require approval
|
|
15819
|
+
* false/undefined: no approval required (default) */
|
|
15820
|
+
require: external_exports.union([external_exports.array(external_exports.string()), external_exports.boolean()]).optional(),
|
|
15821
|
+
/** Timeout in ms for approval response (default: 300000 = 5 min) */
|
|
15822
|
+
timeout: external_exports.number().optional()
|
|
15823
|
+
});
|
|
15824
|
+
var toolSearchConfigSchema = external_exports.object({
|
|
15825
|
+
/** Explicit opt-in/out. When omitted, auto-activates if tool count >= threshold. */
|
|
15826
|
+
enabled: external_exports.boolean().optional(),
|
|
15827
|
+
/** Tool count at which search activates (default: 20) */
|
|
15828
|
+
threshold: external_exports.number().optional(),
|
|
15829
|
+
/** Tool names or IDs that should always be in the hot set */
|
|
15830
|
+
alwaysLoaded: external_exports.array(external_exports.string()).optional()
|
|
15831
|
+
});
|
|
15832
|
+
var agentToolsConfigSchema = external_exports.object({
|
|
15833
|
+
/** IDs of tools to enable (builtin:*, mcp:*, platform:*, platform:orthogonal:*, custom tool IDs) */
|
|
15834
|
+
toolIds: external_exports.array(external_exports.string()).optional(),
|
|
15835
|
+
/** Per-tool parameter configurations, keyed by tool ID */
|
|
15836
|
+
toolConfigs: external_exports.record(external_exports.string(), external_exports.custom()).optional(),
|
|
15837
|
+
/** Inline tool definitions (no DB storage needed) */
|
|
15838
|
+
runtimeTools: external_exports.array(external_exports.custom()).optional(),
|
|
15839
|
+
/** Runtime MCP server connections */
|
|
15840
|
+
mcpServers: external_exports.array(external_exports.custom()).optional(),
|
|
15841
|
+
/** Maximum tool calls per execution (renamed from maxTurns in agents) */
|
|
15842
|
+
maxToolCalls: external_exports.number().optional(),
|
|
15843
|
+
/** Tool calling strategy */
|
|
15844
|
+
toolCallStrategy: external_exports.enum(["auto", "required", "none"]).optional(),
|
|
15845
|
+
/** Allow parallel tool execution */
|
|
15846
|
+
parallelCalls: external_exports.boolean().optional(),
|
|
15847
|
+
/** Per-tool call limits */
|
|
15848
|
+
perToolLimits: external_exports.record(external_exports.string(), toolLimitSchema).optional(),
|
|
15849
|
+
/** Human-in-the-loop approval configuration */
|
|
15850
|
+
approval: approvalConfigSchema.optional(),
|
|
15851
|
+
/**
|
|
15852
|
+
* Opt-in: enables agent-driven dynamic subagent spawning. When set, the
|
|
15853
|
+
* prompt-step tool-prep layer synthesizes a `spawn_subagent` tool into the
|
|
15854
|
+
* AI-SDK tool list with a dynamically-generated description listing the
|
|
15855
|
+
* tools the parent's LLM can grant. See `AgentSubagentConfig` for fields.
|
|
15856
|
+
*/
|
|
15857
|
+
subagentConfig: agentSubagentConfigSchema.optional(),
|
|
15858
|
+
/**
|
|
15859
|
+
* Opt-in: enables a synthesized `code_mode` tool that lets agents execute
|
|
15860
|
+
* JavaScript code in a sandboxed V8 isolate with access to a subset of
|
|
15861
|
+
* the agent's tools. The LLM writes code that calls tool functions
|
|
15862
|
+
* deterministically instead of making individual tool calls.
|
|
15863
|
+
*/
|
|
15864
|
+
codeModeConfig: codeModeConfigSchema.optional(),
|
|
15865
|
+
/**
|
|
15866
|
+
* Tool search configuration. When total tool count exceeds the threshold,
|
|
15867
|
+
* deferred loading activates: only a "hot set" of tools is sent to the model
|
|
15868
|
+
* each turn, and a synthetic `tool_search` meta-tool lets the model discover
|
|
15869
|
+
* and load additional tools on demand.
|
|
15870
|
+
*
|
|
15871
|
+
* Auto-activates when omitted and total tool count >= 20.
|
|
15872
|
+
* Set `enabled: false` to force all tools to be sent regardless of count.
|
|
15873
|
+
*/
|
|
15874
|
+
toolSearch: toolSearchConfigSchema.optional()
|
|
15875
|
+
});
|
|
15876
|
+
var CreateToolSchema = external_exports.object({
|
|
15877
|
+
name: external_exports.string().min(1).max(100),
|
|
15878
|
+
description: external_exports.string().min(1).max(500),
|
|
15879
|
+
toolType: external_exports.enum(["flow", "custom", "external", "graphql", "mcp", "local", "subagent"]),
|
|
15880
|
+
parametersSchema: external_exports.record(external_exports.string(), external_exports.any()),
|
|
15881
|
+
config: external_exports.record(external_exports.string(), external_exports.any())
|
|
15882
|
+
});
|
|
15883
|
+
var ExecuteToolSchema = external_exports.object({
|
|
15884
|
+
// toolId is redundant with the URL path param (/v1/tools/:id/execute) and optional
|
|
15885
|
+
// so MCP/SDK callers that only send { parameters } aren't rejected at validation.
|
|
15886
|
+
toolId: external_exports.string().optional(),
|
|
15887
|
+
parameters: external_exports.record(external_exports.string(), external_exports.any()),
|
|
15888
|
+
context: external_exports.object({
|
|
15889
|
+
flowExecutionId: external_exports.string().optional(),
|
|
15890
|
+
stepId: external_exports.string().optional(),
|
|
15891
|
+
userId: external_exports.string()
|
|
15892
|
+
}).optional()
|
|
15893
|
+
});
|
|
15894
|
+
var contextFallbackSchema = external_exports.union([
|
|
15895
|
+
external_exports.object({ type: external_exports.literal("retry"), delay: external_exports.number().optional() }),
|
|
15896
|
+
external_exports.object({
|
|
15897
|
+
type: external_exports.literal("step"),
|
|
15898
|
+
stepType: external_exports.string(),
|
|
15899
|
+
stepConfig: external_exports.record(external_exports.string(), external_exports.unknown()),
|
|
15900
|
+
delay: external_exports.number().optional()
|
|
15901
|
+
}),
|
|
15902
|
+
external_exports.object({
|
|
15903
|
+
type: external_exports.literal("flow"),
|
|
15904
|
+
flowId: external_exports.string(),
|
|
15905
|
+
inputs: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
|
|
15906
|
+
delay: external_exports.number().optional()
|
|
15907
|
+
})
|
|
15908
|
+
]);
|
|
15909
|
+
var contextErrorHandlingConfigSchema = external_exports.union([
|
|
15910
|
+
external_exports.enum(["fail", "continue", "default"]),
|
|
15911
|
+
external_exports.object({
|
|
15912
|
+
onError: external_exports.enum(["fail", "continue", "fallback", "default"]),
|
|
15913
|
+
fallbacks: external_exports.array(contextFallbackSchema).optional()
|
|
15914
|
+
})
|
|
15915
|
+
]);
|
|
15916
|
+
var httpConfigSchema = external_exports.object({
|
|
15917
|
+
url: external_exports.string().min(1, "URL is required"),
|
|
15918
|
+
method: external_exports.enum(["GET", "POST", "PUT", "DELETE", "PATCH"]).optional(),
|
|
15919
|
+
headers: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
15920
|
+
body: external_exports.string().optional(),
|
|
15921
|
+
timeout: external_exports.number().optional()
|
|
15922
|
+
});
|
|
15923
|
+
var authConfigSchema = external_exports.object({
|
|
15924
|
+
type: external_exports.enum(["none", "bearer", "basic", "api-key", "custom"]),
|
|
15925
|
+
token: external_exports.string().optional(),
|
|
15926
|
+
username: external_exports.string().optional(),
|
|
15927
|
+
password: external_exports.string().optional(),
|
|
15928
|
+
apiKey: external_exports.string().optional(),
|
|
15929
|
+
headerName: external_exports.string().optional(),
|
|
15930
|
+
customHeaders: external_exports.record(external_exports.string(), external_exports.string()).optional()
|
|
15931
|
+
});
|
|
15932
|
+
var pdfOptionsConfigSchema = external_exports.object({
|
|
15933
|
+
format: external_exports.enum(["A4", "Letter"]).optional(),
|
|
15934
|
+
landscape: external_exports.boolean().optional(),
|
|
15935
|
+
margin: external_exports.object({
|
|
15936
|
+
top: external_exports.string().optional(),
|
|
15937
|
+
bottom: external_exports.string().optional(),
|
|
15938
|
+
left: external_exports.string().optional(),
|
|
15939
|
+
right: external_exports.string().optional()
|
|
15940
|
+
}).optional()
|
|
15941
|
+
});
|
|
15942
|
+
var setVariableConfigSchema = external_exports.object({
|
|
15943
|
+
variableName: external_exports.string().min(1, "Variable name is required"),
|
|
15944
|
+
// The object branch is modeled as a record (rather than the historical
|
|
15945
|
+
// `z.object({})`) so the inferred union keeps its primitive members distinct:
|
|
15946
|
+
// a bare `{}` is a supertype of `string | number | boolean` and would absorb
|
|
15947
|
+
// them, degrading `value` to `{}`. A record accepts exactly the same inputs as
|
|
15948
|
+
// the prior `z.object({})` (any plain object, never an array or primitive).
|
|
15949
|
+
//
|
|
15950
|
+
// `null` is accepted: clearing a variable (`value: null`) is a legitimate
|
|
15951
|
+
// idiom (commonly the "else" branch of a conditional — `draft_email = null`,
|
|
15952
|
+
// `skip_label`, etc.). The runtime normalizer already permits it
|
|
15953
|
+
// (`context-steps-normalizer.ts` rejects only `undefined`), and the executor
|
|
15954
|
+
// sets the variable to `null` without issue; the schema was the only layer
|
|
15955
|
+
// rejecting it. Required so nested set-variable steps validate when the
|
|
15956
|
+
// recursive conditional union lands (see
|
|
15957
|
+
// `docs/features/planning/2026-06-04-conditional-nested-step-strict-validation.md`).
|
|
15958
|
+
value: external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean(), external_exports.null(), external_exports.record(external_exports.string(), external_exports.unknown())]),
|
|
15959
|
+
valueTemplate: external_exports.string().optional()
|
|
15960
|
+
});
|
|
15961
|
+
var sendStreamConfigSchema = external_exports.object({
|
|
15962
|
+
message: external_exports.string().min(1, "Message is required")
|
|
15963
|
+
});
|
|
15964
|
+
var fetchGithubConfigSchema = external_exports.object({
|
|
15965
|
+
repository: external_exports.string().min(1, "Repository is required"),
|
|
15966
|
+
path: external_exports.string().optional(),
|
|
15967
|
+
branch: external_exports.string().optional(),
|
|
15968
|
+
token: external_exports.string().optional(),
|
|
15969
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
15970
|
+
streamOutput: external_exports.boolean().optional(),
|
|
15971
|
+
contentType: external_exports.enum(["raw", "metadata", "both"]).optional(),
|
|
15972
|
+
// Ingestor service configuration
|
|
15973
|
+
includePatterns: external_exports.array(external_exports.string()).optional(),
|
|
15974
|
+
excludePatterns: external_exports.array(external_exports.string()).optional(),
|
|
15975
|
+
compress: external_exports.boolean().optional(),
|
|
15976
|
+
style: external_exports.enum(["xml", "json", "markdown"]).optional()
|
|
15977
|
+
});
|
|
15978
|
+
var apiCallConfigSchema = external_exports.object({
|
|
15979
|
+
http: httpConfigSchema,
|
|
15980
|
+
auth: authConfigSchema.optional(),
|
|
15981
|
+
requestTemplate: external_exports.string().optional(),
|
|
15982
|
+
responseMapping: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
15983
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
15984
|
+
streamOutput: external_exports.boolean().optional(),
|
|
15985
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
15986
|
+
defaultValue: external_exports.any().optional()
|
|
15987
|
+
});
|
|
15988
|
+
var executeAgentConfigSchema = external_exports.object({
|
|
15989
|
+
agentId: external_exports.string().min(1, "Agent ID is required"),
|
|
15990
|
+
message: external_exports.string().min(1, "Message is required"),
|
|
15991
|
+
outputVariable: external_exports.string().optional(),
|
|
15992
|
+
variables: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
15993
|
+
maxTurns: external_exports.number().int().positive().optional(),
|
|
15994
|
+
timeout: external_exports.number().int().positive().optional(),
|
|
15995
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
15996
|
+
defaultValue: external_exports.any().optional()
|
|
15997
|
+
});
|
|
15998
|
+
var firecrawlConfigSchema = external_exports.object({
|
|
15999
|
+
formats: external_exports.array(external_exports.enum(["markdown", "html", "rawHtml", "screenshot", "links", "json"])).optional(),
|
|
16000
|
+
actions: external_exports.array(
|
|
16001
|
+
external_exports.object({
|
|
16002
|
+
type: external_exports.enum(["click", "write", "press", "wait", "screenshot"]),
|
|
16003
|
+
selector: external_exports.string().optional(),
|
|
16004
|
+
text: external_exports.string().optional(),
|
|
16005
|
+
key: external_exports.string().optional(),
|
|
16006
|
+
milliseconds: external_exports.number().optional(),
|
|
16007
|
+
fullPage: external_exports.boolean().optional()
|
|
16008
|
+
})
|
|
16009
|
+
).optional(),
|
|
16010
|
+
location: external_exports.object({
|
|
16011
|
+
country: external_exports.string().optional(),
|
|
16012
|
+
languages: external_exports.array(external_exports.string()).optional()
|
|
16013
|
+
}).optional(),
|
|
16014
|
+
maxAge: external_exports.number().optional(),
|
|
16015
|
+
storeInCache: external_exports.boolean().optional(),
|
|
16016
|
+
onlyMainContent: external_exports.boolean().optional(),
|
|
16017
|
+
// The Firecrawl executor (`apps/api/src/lib/context-steps/firecrawl-fetch.ts`)
|
|
16018
|
+
// accepts EITHER a JSON-schema object OR a JSON string it `JSON.parse`s at
|
|
16019
|
+
// runtime — so the validator must accept both, or it would reject a
|
|
16020
|
+
// string-form `jsonSchema` that executes correctly.
|
|
16021
|
+
jsonSchema: external_exports.union([external_exports.string(), external_exports.record(external_exports.string(), external_exports.unknown())]).optional(),
|
|
16022
|
+
jsonPrompt: external_exports.string().optional()
|
|
16023
|
+
});
|
|
16024
|
+
var fetchUrlConfigSchema = external_exports.object({
|
|
16025
|
+
http: httpConfigSchema,
|
|
16026
|
+
auth: authConfigSchema.optional(),
|
|
16027
|
+
responseType: external_exports.enum(["json", "text", "xml"]).optional(),
|
|
16028
|
+
markdownIfAvailable: external_exports.boolean().optional(),
|
|
16029
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16030
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16031
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16032
|
+
defaultValue: external_exports.any().optional(),
|
|
16033
|
+
// Firecrawl integration
|
|
16034
|
+
fetchMethod: external_exports.enum(["standard", "firecrawl"]).optional(),
|
|
16035
|
+
firecrawl: firecrawlConfigSchema.optional()
|
|
16036
|
+
});
|
|
16037
|
+
var crawlOptionsConfigSchema = external_exports.object({
|
|
16038
|
+
includePatterns: external_exports.array(external_exports.string()).optional(),
|
|
16039
|
+
excludePatterns: external_exports.array(external_exports.string()).optional(),
|
|
16040
|
+
allowSubdomains: external_exports.boolean().optional(),
|
|
16041
|
+
allowExternalLinks: external_exports.boolean().optional(),
|
|
16042
|
+
ignoreSitemap: external_exports.boolean().optional(),
|
|
16043
|
+
sitemapOnly: external_exports.boolean().optional()
|
|
16044
|
+
}).catchall(external_exports.any());
|
|
16045
|
+
var crawlAuthenticateConfigSchema = external_exports.object({
|
|
16046
|
+
username: external_exports.string().optional(),
|
|
16047
|
+
password: external_exports.string().optional()
|
|
16048
|
+
}).catchall(external_exports.any());
|
|
16049
|
+
var crawlJsonOptionsConfigSchema = external_exports.object({
|
|
16050
|
+
schema: external_exports.record(external_exports.string(), external_exports.any()).optional(),
|
|
16051
|
+
prompt: external_exports.string().optional()
|
|
16052
|
+
}).catchall(external_exports.any());
|
|
16053
|
+
var crawlConfigSchema = external_exports.object({
|
|
16054
|
+
url: external_exports.string().min(1, "URL is required"),
|
|
16055
|
+
limit: external_exports.number().int().positive().optional(),
|
|
16056
|
+
depth: external_exports.number().int().nonnegative().optional(),
|
|
16057
|
+
source: external_exports.string().optional(),
|
|
16058
|
+
formats: external_exports.array(external_exports.string()).optional(),
|
|
16059
|
+
render: external_exports.boolean().optional(),
|
|
16060
|
+
maxAge: external_exports.number().int().nonnegative().optional(),
|
|
16061
|
+
modifiedSince: external_exports.string().optional(),
|
|
16062
|
+
options: crawlOptionsConfigSchema.optional(),
|
|
16063
|
+
authenticate: crawlAuthenticateConfigSchema.optional(),
|
|
16064
|
+
cookies: external_exports.array(external_exports.record(external_exports.string(), external_exports.any())).optional(),
|
|
16065
|
+
setExtraHTTPHeaders: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
16066
|
+
gotoOptions: external_exports.record(external_exports.string(), external_exports.any()).optional(),
|
|
16067
|
+
waitForSelector: external_exports.string().optional(),
|
|
16068
|
+
rejectResourceTypes: external_exports.array(external_exports.string()).optional(),
|
|
16069
|
+
rejectRequestPattern: external_exports.union([external_exports.string(), external_exports.array(external_exports.string())]).optional(),
|
|
16070
|
+
userAgent: external_exports.string().optional(),
|
|
16071
|
+
jsonOptions: crawlJsonOptionsConfigSchema.optional(),
|
|
16072
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16073
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16074
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16075
|
+
defaultValue: external_exports.any().optional(),
|
|
16076
|
+
pollIntervalMs: external_exports.number().int().min(1).optional(),
|
|
16077
|
+
completionTimeoutMs: external_exports.number().int().positive().optional(),
|
|
16078
|
+
// Executor-only flag the validator previously stripped on `.parse()`; the
|
|
16079
|
+
// normalizer already carries it through. When true (default), crawl submits
|
|
16080
|
+
// and pauses the flow for async DO polling; false = legacy synchronous polling.
|
|
16081
|
+
asyncCrawl: external_exports.boolean().optional()
|
|
16082
|
+
});
|
|
16083
|
+
var searchConfigSchema = external_exports.object({
|
|
16084
|
+
provider: external_exports.string().min(1, "Search provider is required"),
|
|
16085
|
+
query: external_exports.string().min(1, "Search query is required"),
|
|
16086
|
+
temperature: external_exports.number().min(0).max(2).optional(),
|
|
16087
|
+
maxTokens: external_exports.number().positive().optional(),
|
|
16088
|
+
maxResults: external_exports.number().positive().optional(),
|
|
16089
|
+
returnCitations: external_exports.boolean().optional(),
|
|
16090
|
+
dateRange: external_exports.object({
|
|
16091
|
+
from: external_exports.string().optional(),
|
|
16092
|
+
to: external_exports.string().optional()
|
|
16093
|
+
}).optional(),
|
|
16094
|
+
allowedDomains: external_exports.array(external_exports.string()).optional(),
|
|
16095
|
+
blockedDomains: external_exports.array(external_exports.string()).optional(),
|
|
16096
|
+
userLocation: external_exports.object({
|
|
16097
|
+
country: external_exports.string().optional(),
|
|
16098
|
+
region: external_exports.string().optional()
|
|
16099
|
+
}).optional(),
|
|
16100
|
+
sources: external_exports.array(
|
|
16101
|
+
external_exports.object({
|
|
16102
|
+
type: external_exports.string(),
|
|
16103
|
+
country: external_exports.string().optional(),
|
|
16104
|
+
safeSearch: external_exports.boolean().optional(),
|
|
16105
|
+
xHandles: external_exports.array(external_exports.string()).optional(),
|
|
16106
|
+
allowedWebsites: external_exports.array(external_exports.string()).optional(),
|
|
16107
|
+
excludedWebsites: external_exports.array(external_exports.string()).optional()
|
|
16108
|
+
})
|
|
16109
|
+
).optional(),
|
|
16110
|
+
// Exa-specific options (executor-only; previously stripped by the validator)
|
|
16111
|
+
exaSearchType: external_exports.enum(["auto", "neural", "keyword"]).optional(),
|
|
16112
|
+
exaContents: external_exports.object({
|
|
16113
|
+
text: external_exports.boolean().optional(),
|
|
16114
|
+
summary: external_exports.boolean().optional(),
|
|
16115
|
+
highlights: external_exports.boolean().optional()
|
|
16116
|
+
}).optional(),
|
|
16117
|
+
exaCategory: external_exports.string().optional(),
|
|
16118
|
+
exaNumResults: external_exports.number().optional(),
|
|
16119
|
+
exaIncludeDomains: external_exports.array(external_exports.string()).optional(),
|
|
16120
|
+
exaExcludeDomains: external_exports.array(external_exports.string()).optional(),
|
|
16121
|
+
exaStartCrawlDate: external_exports.string().optional(),
|
|
16122
|
+
exaEndCrawlDate: external_exports.string().optional(),
|
|
16123
|
+
exaStartPublishedDate: external_exports.string().optional(),
|
|
16124
|
+
exaEndPublishedDate: external_exports.string().optional(),
|
|
16125
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16126
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16127
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16128
|
+
defaultValue: external_exports.any().optional()
|
|
16129
|
+
});
|
|
16130
|
+
var sendTextConfigSchema = external_exports.object({
|
|
16131
|
+
from: external_exports.string().min(1, "From is required"),
|
|
16132
|
+
to: external_exports.string().min(1, "To is required"),
|
|
16133
|
+
message: external_exports.string().min(1, "Message is required"),
|
|
16134
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16135
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16136
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16137
|
+
defaultValue: external_exports.any().optional()
|
|
16138
|
+
});
|
|
16139
|
+
var sendEventConfigSchema = external_exports.object({
|
|
16140
|
+
provider: external_exports.enum(["posthog", "google-analytics", "amplitude", "segment"]),
|
|
16141
|
+
eventName: external_exports.string().min(1, "Event name is required"),
|
|
16142
|
+
properties: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
16143
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16144
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16145
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16146
|
+
defaultValue: external_exports.any().optional()
|
|
16147
|
+
});
|
|
16148
|
+
var storeAssetConfigSchema = external_exports.object({
|
|
16149
|
+
url: external_exports.string().min(1).optional(),
|
|
16150
|
+
content: external_exports.string().min(1).optional(),
|
|
16151
|
+
filename: external_exports.string().optional(),
|
|
16152
|
+
contentType: external_exports.string().optional(),
|
|
16153
|
+
visibility: external_exports.enum(["public", "private"]).optional(),
|
|
16154
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16155
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16156
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16157
|
+
defaultValue: external_exports.any().optional()
|
|
16158
|
+
});
|
|
16159
|
+
var generatePdfConfigSchema = external_exports.object({
|
|
16160
|
+
html: external_exports.string().min(1).optional(),
|
|
16161
|
+
markdown: external_exports.string().min(1).optional(),
|
|
16162
|
+
filename: external_exports.string().optional(),
|
|
16163
|
+
visibility: external_exports.enum(["public", "private"]).optional(),
|
|
16164
|
+
pdfOptions: pdfOptionsConfigSchema.optional(),
|
|
16165
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16166
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16167
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16168
|
+
defaultValue: external_exports.any().optional()
|
|
16169
|
+
});
|
|
16170
|
+
var templateConfigSchema = external_exports.object({
|
|
16171
|
+
template: external_exports.string().min(1, "Template body is required"),
|
|
16172
|
+
inputs: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
16173
|
+
outputFormat: external_exports.enum(["html", "email-html", "markdown", "pdf", "text"]),
|
|
16174
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16175
|
+
partials: external_exports.record(
|
|
16176
|
+
external_exports.string().regex(/^[a-zA-Z_][a-zA-Z0-9_-]*$/, "Partial keys must be simple identifiers"),
|
|
16177
|
+
external_exports.string()
|
|
16178
|
+
).optional(),
|
|
16179
|
+
pdfOptions: pdfOptionsConfigSchema.optional(),
|
|
16180
|
+
asArtifact: external_exports.boolean().optional(),
|
|
16181
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16182
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16183
|
+
defaultValue: external_exports.any().optional(),
|
|
16184
|
+
sampleData: external_exports.array(
|
|
16185
|
+
external_exports.object({
|
|
16186
|
+
name: external_exports.string().min(1),
|
|
16187
|
+
data: external_exports.record(external_exports.string(), external_exports.unknown())
|
|
16188
|
+
})
|
|
16189
|
+
).optional()
|
|
16190
|
+
});
|
|
16191
|
+
var comparisonOperatorSchema = external_exports.enum(["=", "!=", ">", "<", ">=", "<=", "exists", "not-exists"]);
|
|
16192
|
+
var waitUntilSuccessCriteriaSchema = external_exports.object({
|
|
16193
|
+
type: external_exports.enum(["status", "json_path", "body_contains", "expression"]).optional(),
|
|
16194
|
+
status: external_exports.number().optional(),
|
|
16195
|
+
statusCode: external_exports.number().optional(),
|
|
16196
|
+
jsonPath: external_exports.string().optional(),
|
|
16197
|
+
expectedValue: external_exports.any().optional(),
|
|
16198
|
+
operator: comparisonOperatorSchema.optional(),
|
|
16199
|
+
bodyContains: external_exports.string().optional(),
|
|
16200
|
+
expression: external_exports.string().optional()
|
|
16201
|
+
}).refine(
|
|
16202
|
+
(data) => {
|
|
16203
|
+
if (!data.type || data.type === "status") {
|
|
16204
|
+
return true;
|
|
16205
|
+
}
|
|
16206
|
+
if (data.type === "json_path") {
|
|
16207
|
+
return !!data.jsonPath;
|
|
16208
|
+
}
|
|
16209
|
+
if (data.type === "body_contains") {
|
|
16210
|
+
return !!data.bodyContains;
|
|
16211
|
+
}
|
|
16212
|
+
if (data.type === "expression") {
|
|
16213
|
+
return !!data.expression;
|
|
16214
|
+
}
|
|
16215
|
+
return true;
|
|
16216
|
+
},
|
|
16217
|
+
{
|
|
16218
|
+
message: "Success criteria is missing required fields"
|
|
16219
|
+
}
|
|
16220
|
+
);
|
|
16221
|
+
var waitUntilPollConfigSchema = external_exports.object({
|
|
16222
|
+
enabled: external_exports.boolean().optional(),
|
|
16223
|
+
http: httpConfigSchema,
|
|
16224
|
+
auth: authConfigSchema.optional(),
|
|
16225
|
+
intervalMs: external_exports.union([external_exports.number().int().min(100), external_exports.string().min(1)]).optional(),
|
|
16226
|
+
maxAttempts: external_exports.number().int().min(1).optional(),
|
|
16227
|
+
responseType: external_exports.enum(["json", "text"]).optional(),
|
|
16228
|
+
success: waitUntilSuccessCriteriaSchema.optional()
|
|
16229
|
+
});
|
|
16230
|
+
var waitUntilConfigSchema = external_exports.object({
|
|
16231
|
+
delayMs: external_exports.union([external_exports.number().nonnegative(), external_exports.string().min(1)]).optional(),
|
|
16232
|
+
poll: waitUntilPollConfigSchema.optional(),
|
|
16233
|
+
continueOnTimeout: external_exports.boolean().optional(),
|
|
16234
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16235
|
+
defaultValue: external_exports.any().optional(),
|
|
16236
|
+
outputVariable: external_exports.string().optional(),
|
|
16237
|
+
streamOutput: external_exports.boolean().optional()
|
|
16238
|
+
});
|
|
16239
|
+
var generateEmbeddingVectorStoreConfigSchema = external_exports.object({
|
|
16240
|
+
destination: external_exports.enum(["weaviate", "vectorize", "pinecone"]),
|
|
16241
|
+
weaviateConfig: external_exports.object({
|
|
16242
|
+
configId: external_exports.string().optional(),
|
|
16243
|
+
className: external_exports.string(),
|
|
16244
|
+
uuid: external_exports.string().optional(),
|
|
16245
|
+
properties: external_exports.record(external_exports.string(), external_exports.string()).optional()
|
|
16246
|
+
}).optional(),
|
|
16247
|
+
vectorizeConfig: external_exports.object({
|
|
16248
|
+
configId: external_exports.string().optional(),
|
|
16249
|
+
idTemplate: external_exports.string(),
|
|
16250
|
+
namespace: external_exports.string().optional(),
|
|
16251
|
+
metadata: external_exports.record(external_exports.string(), external_exports.string()).optional()
|
|
16252
|
+
}).optional(),
|
|
16253
|
+
pineconeConfig: external_exports.object({
|
|
16254
|
+
configId: external_exports.string().optional(),
|
|
16255
|
+
idTemplate: external_exports.string(),
|
|
16256
|
+
namespace: external_exports.string().optional(),
|
|
16257
|
+
metadata: external_exports.record(external_exports.string(), external_exports.string()).optional()
|
|
16258
|
+
}).optional()
|
|
16259
|
+
});
|
|
16260
|
+
var generateEmbeddingConfigSchema = external_exports.object({
|
|
16261
|
+
inputSource: external_exports.enum(["text", "variable", "record"]).optional().default("text"),
|
|
16262
|
+
text: external_exports.string().optional(),
|
|
16263
|
+
variableName: external_exports.string().optional(),
|
|
16264
|
+
recordId: external_exports.string().optional(),
|
|
16265
|
+
recordType: external_exports.string().optional(),
|
|
16266
|
+
recordName: external_exports.string().optional(),
|
|
16267
|
+
textField: external_exports.string().optional(),
|
|
16268
|
+
storeInRecord: external_exports.boolean().optional(),
|
|
16269
|
+
embeddingModel: external_exports.string().optional(),
|
|
16270
|
+
maxLength: external_exports.number().int().positive().optional(),
|
|
16271
|
+
inputMode: external_exports.enum(["single", "batch"]).optional(),
|
|
16272
|
+
inputVariable: external_exports.string().optional(),
|
|
16273
|
+
itemAlias: external_exports.string().optional(),
|
|
16274
|
+
textTemplate: external_exports.string().optional(),
|
|
16275
|
+
batchSize: external_exports.number().int().positive().optional(),
|
|
16276
|
+
vectorStore: generateEmbeddingVectorStoreConfigSchema.optional(),
|
|
16277
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16278
|
+
streamOutput: external_exports.boolean().optional()
|
|
16279
|
+
});
|
|
16280
|
+
var vectorSearchConfigSchema = external_exports.object({
|
|
16281
|
+
query: external_exports.string().min(1, "Query is required"),
|
|
16282
|
+
embeddingModel: external_exports.string().optional(),
|
|
16283
|
+
vectorStore: external_exports.enum(["pgvector", "weaviate", "vectorize", "pinecone"]).optional(),
|
|
16284
|
+
weaviateConfig: external_exports.object({
|
|
16285
|
+
configId: external_exports.string().optional(),
|
|
16286
|
+
className: external_exports.string()
|
|
16287
|
+
}).optional(),
|
|
16288
|
+
vectorizeConfig: external_exports.object({
|
|
16289
|
+
configId: external_exports.string().optional(),
|
|
16290
|
+
namespace: external_exports.string().optional()
|
|
16291
|
+
}).optional(),
|
|
16292
|
+
pineconeConfig: external_exports.object({
|
|
16293
|
+
configId: external_exports.string().optional(),
|
|
16294
|
+
namespace: external_exports.string().optional()
|
|
16295
|
+
}).optional(),
|
|
16296
|
+
limit: external_exports.number().int().positive().optional(),
|
|
16297
|
+
threshold: external_exports.number().min(0).max(1).optional(),
|
|
16298
|
+
recordType: external_exports.string().optional(),
|
|
16299
|
+
metadataFilters: external_exports.record(external_exports.string(), external_exports.any()).optional(),
|
|
16300
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16301
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16302
|
+
includeEmbedding: external_exports.boolean().optional(),
|
|
16303
|
+
includeMetadata: external_exports.boolean().optional()
|
|
16304
|
+
});
|
|
16305
|
+
var toolCallConfigSchema = external_exports.object({
|
|
16306
|
+
toolId: external_exports.string().min(1, "Tool ID is required"),
|
|
16307
|
+
parameters: external_exports.record(external_exports.string(), external_exports.any()),
|
|
16308
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16309
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16310
|
+
maxRetries: external_exports.number().int().min(0).optional(),
|
|
16311
|
+
timeout: external_exports.number().int().positive().optional(),
|
|
16312
|
+
onError: external_exports.enum(["fail", "continue", "retry"]).optional()
|
|
16313
|
+
});
|
|
16314
|
+
var storeVectorConfigSchema = external_exports.object({
|
|
16315
|
+
vectorsSource: external_exports.string().optional(),
|
|
16316
|
+
inputMode: external_exports.enum(["single", "batch"]).optional(),
|
|
16317
|
+
inputVariable: external_exports.string().optional(),
|
|
16318
|
+
itemAlias: external_exports.string().optional(),
|
|
16319
|
+
batchSize: external_exports.number().int().positive().optional(),
|
|
16320
|
+
destination: external_exports.enum(["pgvector", "weaviate", "vectorize", "pinecone"]),
|
|
16321
|
+
weaviateConfig: external_exports.object({
|
|
16322
|
+
configId: external_exports.string().optional(),
|
|
16323
|
+
className: external_exports.string(),
|
|
16324
|
+
uuid: external_exports.string().optional(),
|
|
16325
|
+
properties: external_exports.record(external_exports.string(), external_exports.string()).optional()
|
|
16326
|
+
}).optional(),
|
|
16327
|
+
vectorizeConfig: external_exports.object({
|
|
16328
|
+
configId: external_exports.string().optional(),
|
|
16329
|
+
id: external_exports.string(),
|
|
16330
|
+
namespace: external_exports.string().optional(),
|
|
16331
|
+
metadata: external_exports.record(external_exports.string(), external_exports.string()).optional()
|
|
16332
|
+
}).optional(),
|
|
16333
|
+
pineconeConfig: external_exports.object({
|
|
16334
|
+
configId: external_exports.string().optional(),
|
|
16335
|
+
id: external_exports.string(),
|
|
16336
|
+
namespace: external_exports.string().optional(),
|
|
16337
|
+
metadata: external_exports.record(external_exports.string(), external_exports.string()).optional()
|
|
16338
|
+
}).optional(),
|
|
16339
|
+
weaviateConfigId: external_exports.string().optional(),
|
|
16340
|
+
weaviateClassName: external_exports.string().optional(),
|
|
16341
|
+
vectorizeConfigId: external_exports.string().optional(),
|
|
16342
|
+
vectorizeNamespace: external_exports.string().optional(),
|
|
16343
|
+
pineconeConfigId: external_exports.string().optional(),
|
|
16344
|
+
pineconeNamespace: external_exports.string().optional(),
|
|
16345
|
+
idTemplate: external_exports.string().optional(),
|
|
16346
|
+
metadata: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
16347
|
+
outputVariable: external_exports.string().optional(),
|
|
16348
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16349
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16350
|
+
defaultValue: external_exports.any().optional()
|
|
16351
|
+
});
|
|
16352
|
+
var upsertRecordConfigSchema = external_exports.object({
|
|
16353
|
+
recordType: external_exports.string().min(1, "Record type is required"),
|
|
16354
|
+
recordName: external_exports.string().optional(),
|
|
16355
|
+
sourceVariable: external_exports.string().min(1, "Source variable is required"),
|
|
16356
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16357
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16358
|
+
mergeStrategy: external_exports.enum(["merge", "replace"]).optional(),
|
|
16359
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16360
|
+
defaultValue: external_exports.any().optional(),
|
|
16361
|
+
contentField: external_exports.string().optional(),
|
|
16362
|
+
inputMode: external_exports.enum(["single", "batch"]).optional(),
|
|
16363
|
+
inputVariable: external_exports.string().optional(),
|
|
16364
|
+
itemAlias: external_exports.string().optional(),
|
|
16365
|
+
metadataMapping: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
16366
|
+
batchSize: external_exports.number().int().positive().optional()
|
|
16367
|
+
});
|
|
16368
|
+
var sendEmailConfigSchema = external_exports.object({
|
|
16369
|
+
from: external_exports.string().optional(),
|
|
16370
|
+
to: external_exports.string().min(1, "To recipients are required"),
|
|
16371
|
+
subject: external_exports.string().min(1, "Subject is required"),
|
|
16372
|
+
replyTo: external_exports.string().optional(),
|
|
16373
|
+
cc: external_exports.string().optional(),
|
|
16374
|
+
bcc: external_exports.string().optional(),
|
|
16375
|
+
html: external_exports.string().optional(),
|
|
16376
|
+
text: external_exports.string().optional(),
|
|
16377
|
+
attachments: external_exports.array(
|
|
16378
|
+
external_exports.object({
|
|
16379
|
+
filename: external_exports.string(),
|
|
16380
|
+
content: external_exports.string(),
|
|
16381
|
+
contentType: external_exports.string().optional()
|
|
16382
|
+
})
|
|
16383
|
+
).optional(),
|
|
16384
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16385
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16386
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16387
|
+
defaultValue: external_exports.any().optional()
|
|
16388
|
+
});
|
|
16389
|
+
var paginateApiConfigSchema = external_exports.object({
|
|
16390
|
+
// API configuration (supports both the detailed `url` and the UI `http` format)
|
|
16391
|
+
url: external_exports.string().optional(),
|
|
16392
|
+
http: external_exports.object({
|
|
16393
|
+
url: external_exports.string().min(1),
|
|
16394
|
+
method: external_exports.enum(["GET", "POST", "PUT", "DELETE", "PATCH"]).optional(),
|
|
16395
|
+
headers: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
16396
|
+
body: external_exports.string().optional(),
|
|
16397
|
+
timeout: external_exports.number().optional()
|
|
16398
|
+
}).optional(),
|
|
16399
|
+
method: external_exports.enum(["GET", "POST"]).optional(),
|
|
16400
|
+
headers: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
16401
|
+
body: external_exports.string().optional(),
|
|
16402
|
+
// Authentication — `api_key` is a string literal value (snake_case wire token),
|
|
16403
|
+
// not an object key, so it needs no `@snake-case-ok` decorator.
|
|
16404
|
+
authType: external_exports.enum(["none", "bearer", "api_key", "basic", "oauth2"]).optional(),
|
|
16405
|
+
authConfig: external_exports.object({
|
|
16406
|
+
bearerToken: external_exports.string().optional(),
|
|
16407
|
+
apiKeyHeader: external_exports.string().optional(),
|
|
16408
|
+
apiKeyValue: external_exports.string().optional(),
|
|
16409
|
+
basicUsername: external_exports.string().optional(),
|
|
16410
|
+
basicPassword: external_exports.string().optional(),
|
|
16411
|
+
oauth2TokenUrl: external_exports.string().optional(),
|
|
16412
|
+
oauth2ClientId: external_exports.string().optional(),
|
|
16413
|
+
oauth2ClientSecret: external_exports.string().optional(),
|
|
16414
|
+
oauth2Scopes: external_exports.array(external_exports.string()).optional()
|
|
16415
|
+
}).optional(),
|
|
16416
|
+
paginationType: external_exports.enum(["cursor", "offset", "page", "link_header"]).optional(),
|
|
16417
|
+
paginationConfig: external_exports.object({
|
|
16418
|
+
cursorPath: external_exports.string().optional(),
|
|
16419
|
+
cursorParam: external_exports.string().optional(),
|
|
16420
|
+
offsetParam: external_exports.string().optional(),
|
|
16421
|
+
limitParam: external_exports.string().optional(),
|
|
16422
|
+
limit: external_exports.number().int().positive().optional(),
|
|
16423
|
+
totalPath: external_exports.string().optional(),
|
|
16424
|
+
pageParam: external_exports.string().optional(),
|
|
16425
|
+
perPageParam: external_exports.string().optional(),
|
|
16426
|
+
perPage: external_exports.number().int().positive().optional(),
|
|
16427
|
+
totalPagesPath: external_exports.string().optional()
|
|
16428
|
+
}).optional(),
|
|
16429
|
+
// Simplified (UI) pagination settings
|
|
16430
|
+
pageSize: external_exports.number().int().positive().optional(),
|
|
16431
|
+
maxPages: external_exports.number().int().positive().optional(),
|
|
16432
|
+
offsetParam: external_exports.string().optional(),
|
|
16433
|
+
limitParam: external_exports.string().optional(),
|
|
16434
|
+
cursorParam: external_exports.string().optional(),
|
|
16435
|
+
cursorPath: external_exports.string().optional(),
|
|
16436
|
+
pageParam: external_exports.string().optional(),
|
|
16437
|
+
startPage: external_exports.number().int().optional(),
|
|
16438
|
+
// Entity extraction
|
|
16439
|
+
entitiesPath: external_exports.string().optional(),
|
|
16440
|
+
entityPath: external_exports.string().optional(),
|
|
16441
|
+
entityIdPath: external_exports.string().optional(),
|
|
16442
|
+
// Safety limits + rate limiting
|
|
16443
|
+
maxEntities: external_exports.number().int().positive().optional(),
|
|
16444
|
+
requestDelayMs: external_exports.number().int().nonnegative().optional(),
|
|
16445
|
+
retryOnRateLimit: external_exports.boolean().optional(),
|
|
16446
|
+
maxRetries: external_exports.number().int().min(0).optional(),
|
|
16447
|
+
// Output
|
|
16448
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16449
|
+
includeMetadata: external_exports.boolean().optional(),
|
|
16450
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16451
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16452
|
+
defaultValue: external_exports.any().optional()
|
|
16453
|
+
});
|
|
16454
|
+
var retrieveRecordConfigSchema = external_exports.object({
|
|
16455
|
+
retrievalMode: external_exports.enum(["id", "query"]).optional(),
|
|
16456
|
+
recordType: external_exports.string().optional(),
|
|
16457
|
+
recordName: external_exports.string().optional(),
|
|
16458
|
+
recordId: external_exports.string().optional(),
|
|
16459
|
+
// Chip-based filter for richer query mode (metadata + top-level columns).
|
|
16460
|
+
// Coexists with recordType/recordName so old saved flows keep working;
|
|
16461
|
+
// when both are present, recordFilter wins in the executor.
|
|
16462
|
+
recordFilter: recordFilterSchema.optional(),
|
|
16463
|
+
fieldsToInclude: external_exports.string().optional(),
|
|
16464
|
+
fieldsToExclude: external_exports.string().optional(),
|
|
16465
|
+
availableFields: external_exports.array(external_exports.string()).optional(),
|
|
16466
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16467
|
+
fields: external_exports.array(external_exports.string()).optional(),
|
|
16468
|
+
includeMetadata: external_exports.boolean().optional(),
|
|
16469
|
+
streamOutput: external_exports.boolean().optional()
|
|
16470
|
+
});
|
|
16471
|
+
var updateRecordConfigSchema = external_exports.object({
|
|
16472
|
+
recordId: external_exports.string().optional(),
|
|
16473
|
+
recordType: external_exports.string().optional(),
|
|
16474
|
+
recordName: external_exports.string().optional(),
|
|
16475
|
+
// Same chip filter as retrieve-record. Executor takes the first match
|
|
16476
|
+
// (ordered by updatedAt desc). Validate-time check rejects malformed
|
|
16477
|
+
// filters early instead of waiting for the compiler at execute time.
|
|
16478
|
+
recordFilter: recordFilterSchema.optional(),
|
|
16479
|
+
updates: external_exports.record(external_exports.string(), external_exports.any()),
|
|
16480
|
+
updatesTemplate: external_exports.string().optional(),
|
|
16481
|
+
mergeStrategy: external_exports.enum(["merge", "replace", "deep-merge"]),
|
|
16482
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16483
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16484
|
+
includeFullRecord: external_exports.boolean().optional(),
|
|
16485
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16486
|
+
defaultValue: external_exports.any().optional()
|
|
16487
|
+
});
|
|
16488
|
+
var transformDataNetworkAccessSchema = external_exports.union([
|
|
16489
|
+
external_exports.literal("off"),
|
|
16490
|
+
external_exports.literal("on"),
|
|
16491
|
+
external_exports.object({ allowedHostnames: external_exports.array(external_exports.string()).min(1) })
|
|
16492
|
+
]);
|
|
16493
|
+
var transformDataConfigSchema = external_exports.object({
|
|
16494
|
+
// Not used at runtime — all flow variables are passed to the script regardless.
|
|
16495
|
+
inputVariables: external_exports.array(external_exports.string()).optional(),
|
|
16496
|
+
script: external_exports.string().min(1, "Script is required"),
|
|
16497
|
+
outputVariable: external_exports.string().min(1, "Output variable is required"),
|
|
16498
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16499
|
+
sandboxProvider: external_exports.enum(["quickjs", "daytona", "cloudflare-worker", "runtype-sandbox", "cloudflare-sandbox"]).optional(),
|
|
16500
|
+
language: external_exports.enum(["javascript", "typescript", "python"]).optional(),
|
|
16501
|
+
// `inputMode: 'variable'` resolves `script` (and `packageJson`) as a template
|
|
16502
|
+
// before execution; `'code'` (default) treats `script` as literal source.
|
|
16503
|
+
inputMode: external_exports.enum(["code", "variable"]).optional(),
|
|
16504
|
+
// package.json content (daytona / runtype-sandbox); respects `inputMode`.
|
|
16505
|
+
packageJson: external_exports.string().optional(),
|
|
16506
|
+
// Sandbox persistence (daytona / runtype-sandbox).
|
|
16507
|
+
persistSandbox: external_exports.boolean().optional(),
|
|
16508
|
+
reuseSandboxId: external_exports.string().optional(),
|
|
16509
|
+
networkAccess: transformDataNetworkAccessSchema.optional(),
|
|
16510
|
+
errorHandling: contextErrorHandlingConfigSchema.optional(),
|
|
16511
|
+
defaultValue: external_exports.any().optional(),
|
|
16512
|
+
// Tool access for code steps (cloudflare-worker sandbox only). Narrow 4-field
|
|
16513
|
+
// shape the validator has always accepted; the full tool shapes are validated
|
|
16514
|
+
// by the runtime-tools layer.
|
|
16515
|
+
tools: external_exports.object({
|
|
16516
|
+
toolIds: external_exports.array(external_exports.string()).optional(),
|
|
16517
|
+
toolConfigs: external_exports.record(external_exports.string(), external_exports.any()).optional(),
|
|
16518
|
+
runtimeTools: external_exports.array(external_exports.any()).optional(),
|
|
16519
|
+
mcpServers: external_exports.array(external_exports.any()).optional()
|
|
16520
|
+
}).optional()
|
|
16521
|
+
});
|
|
16522
|
+
var promptMessageSchema = external_exports.object({
|
|
16523
|
+
role: external_exports.enum(["system", "user", "assistant"]),
|
|
16524
|
+
content: external_exports.union([external_exports.string(), external_exports.array(external_exports.unknown())])
|
|
16525
|
+
});
|
|
16526
|
+
var promptPreviousMessagesSchema = external_exports.union([external_exports.string(), external_exports.array(promptMessageSchema)]);
|
|
16527
|
+
var promptFallbackSchema = external_exports.union([
|
|
16528
|
+
external_exports.object({ type: external_exports.literal("retry"), delay: external_exports.number().optional() }),
|
|
16529
|
+
external_exports.object({
|
|
16530
|
+
type: external_exports.literal("model"),
|
|
16531
|
+
model: external_exports.string(),
|
|
16532
|
+
temperature: external_exports.number().optional(),
|
|
16533
|
+
maxTokens: external_exports.number().optional(),
|
|
16534
|
+
topP: external_exports.number().optional(),
|
|
16535
|
+
topK: external_exports.number().optional(),
|
|
16536
|
+
frequencyPenalty: external_exports.number().optional(),
|
|
16537
|
+
presencePenalty: external_exports.number().optional(),
|
|
16538
|
+
seed: external_exports.number().optional(),
|
|
16539
|
+
delay: external_exports.number().optional()
|
|
16540
|
+
}),
|
|
16541
|
+
external_exports.object({ type: external_exports.literal("message"), message: external_exports.string(), delay: external_exports.number().optional() })
|
|
16542
|
+
]);
|
|
16543
|
+
var promptFallbackTriggerSchema = external_exports.union([
|
|
16544
|
+
external_exports.object({ type: external_exports.literal("error") }),
|
|
16545
|
+
external_exports.object({ type: external_exports.literal("empty-output") }),
|
|
16546
|
+
external_exports.object({ type: external_exports.literal("slow"), afterMs: external_exports.number().optional() })
|
|
16547
|
+
]);
|
|
16548
|
+
var promptErrorHandlingConfigSchema = external_exports.union([
|
|
16549
|
+
external_exports.enum(["fail", "continue", "fallback", "default"]),
|
|
16550
|
+
external_exports.object({
|
|
16551
|
+
onError: external_exports.enum(["fail", "continue", "fallback"]),
|
|
16552
|
+
fallbacks: external_exports.array(promptFallbackSchema).optional(),
|
|
16553
|
+
triggers: external_exports.array(promptFallbackTriggerSchema).optional()
|
|
16554
|
+
})
|
|
16555
|
+
]);
|
|
16556
|
+
var promptConfigSchema = external_exports.object({
|
|
16557
|
+
// Validation only requires a non-empty string here. The non-blocking
|
|
16558
|
+
// model-advisory pass in `flow-validator.ts` (`collectModelAdvisoryIssues`)
|
|
16559
|
+
// additionally emits warnings/recommendations for deprecated, non-routed,
|
|
16560
|
+
// capability-mismatched, or not-enabled models — sourced from the model
|
|
16561
|
+
// registry. Keep that pass in lockstep per `.claude/rules/flow-validation.md`.
|
|
16562
|
+
model: external_exports.string().min(1, "Model is required"),
|
|
16563
|
+
text: external_exports.string().optional(),
|
|
16564
|
+
userPrompt: external_exports.string().optional(),
|
|
16565
|
+
systemPrompt: external_exports.string().optional(),
|
|
16566
|
+
responseFormat: external_exports.enum(["default", "json", "markdown", "html", "xml", "text"]).optional(),
|
|
16567
|
+
outputVariable: external_exports.string().optional(),
|
|
16568
|
+
temperature: external_exports.number().min(0).max(2).optional(),
|
|
16569
|
+
maxTokens: external_exports.number().positive().optional(),
|
|
16570
|
+
topP: external_exports.number().min(0).max(1).optional(),
|
|
16571
|
+
topK: external_exports.number().int().min(1).max(500).optional(),
|
|
16572
|
+
frequencyPenalty: external_exports.number().min(-2).max(2).optional(),
|
|
16573
|
+
presencePenalty: external_exports.number().min(-2).max(2).optional(),
|
|
16574
|
+
seed: external_exports.number().int().optional(),
|
|
16575
|
+
// Canonical object form is the Phase-1 `agentToolsConfigSchema`. The
|
|
16576
|
+
// `z.array(z.unknown())` arm preserves a legacy ARRAY `tools` shape
|
|
16577
|
+
// (`[{ toolId }]` / `string[]`) that predates the object form — it exists in
|
|
16578
|
+
// production (1 live flow + 6 version snapshots) and validated under the prior
|
|
16579
|
+
// `z.any()`, so the union keeps it accepted rather than newly rejecting it. The
|
|
16580
|
+
// runtime's tool resolver reads object keys, so an array `tools` resolves to no
|
|
16581
|
+
// tools (unchanged behavior). Object inputs always match the first arm.
|
|
16582
|
+
tools: external_exports.union([agentToolsConfigSchema, external_exports.array(external_exports.unknown())]).optional(),
|
|
16583
|
+
artifacts: external_exports.object({
|
|
16584
|
+
enabled: external_exports.literal(true),
|
|
16585
|
+
types: external_exports.array(external_exports.enum(["markdown", "component"])).min(1)
|
|
16586
|
+
}).optional(),
|
|
16587
|
+
reasoning: external_exports.boolean().optional(),
|
|
16588
|
+
previousMessages: promptPreviousMessagesSchema.optional(),
|
|
16589
|
+
streamOutput: external_exports.boolean().optional(),
|
|
16590
|
+
errorHandling: promptErrorHandlingConfigSchema.optional(),
|
|
16591
|
+
mode: external_exports.string().optional()
|
|
16592
|
+
// UI mode (task, agent, etc.)
|
|
16593
|
+
});
|
|
15735
16594
|
var SERIALIZED_HELPERS_SOURCE = `
|
|
15736
16595
|
// Transform helper functions (from packages/shared/src/transform-helpers.ts)
|
|
15737
16596
|
const helpers = (function createHelpers() {
|
|
@@ -16120,30 +16979,6 @@ function resolveModelSecretNames(model) {
|
|
|
16120
16979
|
}
|
|
16121
16980
|
return [];
|
|
16122
16981
|
}
|
|
16123
|
-
var MCPServerCategory = {
|
|
16124
|
-
COMMUNICATION: "communication",
|
|
16125
|
-
PRODUCTIVITY: "productivity",
|
|
16126
|
-
DEVELOPMENT: "development",
|
|
16127
|
-
PROJECT_MANAGEMENT: "project_management"
|
|
16128
|
-
};
|
|
16129
|
-
var CreateToolSchema = external_exports.object({
|
|
16130
|
-
name: external_exports.string().min(1).max(100),
|
|
16131
|
-
description: external_exports.string().min(1).max(500),
|
|
16132
|
-
toolType: external_exports.enum(["flow", "custom", "external", "graphql", "mcp", "local", "subagent"]),
|
|
16133
|
-
parametersSchema: external_exports.record(external_exports.string(), external_exports.any()),
|
|
16134
|
-
config: external_exports.record(external_exports.string(), external_exports.any())
|
|
16135
|
-
});
|
|
16136
|
-
var ExecuteToolSchema = external_exports.object({
|
|
16137
|
-
// toolId is redundant with the URL path param (/v1/tools/:id/execute) and optional
|
|
16138
|
-
// so MCP/SDK callers that only send { parameters } aren't rejected at validation.
|
|
16139
|
-
toolId: external_exports.string().optional(),
|
|
16140
|
-
parameters: external_exports.record(external_exports.string(), external_exports.any()),
|
|
16141
|
-
context: external_exports.object({
|
|
16142
|
-
flowExecutionId: external_exports.string().optional(),
|
|
16143
|
-
stepId: external_exports.string().optional(),
|
|
16144
|
-
userId: external_exports.string()
|
|
16145
|
-
}).optional()
|
|
16146
|
-
});
|
|
16147
16982
|
var EMIT_ARTIFACT_MARKDOWN_TOOL_ID = "emit_artifact_markdown";
|
|
16148
16983
|
var EMIT_ARTIFACT_COMPONENT_TOOL_ID = "emit_artifact_component";
|
|
16149
16984
|
var EMIT_ARTIFACT_MARKDOWN_FULL_ID = `builtin:${EMIT_ARTIFACT_MARKDOWN_TOOL_ID}`;
|
|
@@ -27145,7 +27980,8 @@ var BuiltInToolCategory = {
|
|
|
27145
27980
|
COMMERCE: "commerce",
|
|
27146
27981
|
BROWSER: "browser",
|
|
27147
27982
|
SANDBOX: "sandbox",
|
|
27148
|
-
MESSAGING: "messaging"
|
|
27983
|
+
MESSAGING: "messaging",
|
|
27984
|
+
TEMPORAL: "temporal"
|
|
27149
27985
|
};
|
|
27150
27986
|
var BuiltInToolIdPrefix = {
|
|
27151
27987
|
BUILTIN: "builtin",
|
|
@@ -27160,7 +27996,8 @@ var BuiltInToolGroup = {
|
|
|
27160
27996
|
RECORD_MANAGEMENT: "record_management",
|
|
27161
27997
|
UCP_COMMERCE: "ucp_commerce",
|
|
27162
27998
|
SANDBOX_USE: "sandbox_use",
|
|
27163
|
-
SANDBOX_SESSION: "sandbox_session"
|
|
27999
|
+
SANDBOX_SESSION: "sandbox_session",
|
|
28000
|
+
TEMPORAL: "temporal"
|
|
27164
28001
|
};
|
|
27165
28002
|
var BROWSER_RUN_DOCUMENTATION_URL = "https://developers.cloudflare.com/browser-run/quick-actions/";
|
|
27166
28003
|
var BROWSER_SESSION_DOCUMENTATION_URL = "https://developers.cloudflare.com/browser-run/cdp/";
|
|
@@ -28718,6 +29555,133 @@ var CORE_BUILTIN_TOOLS_REGISTRY = [
|
|
|
28718
29555
|
executionHint: "platform",
|
|
28719
29556
|
hidden: true
|
|
28720
29557
|
},
|
|
29558
|
+
// Temporal — ground the agent in real-world time. Platform-executed, stateless,
|
|
29559
|
+
// provider-agnostic. Timezone defaults follow a layered precedence resolved
|
|
29560
|
+
// api-side (call param > conversation timezone > agent default > UTC).
|
|
29561
|
+
{
|
|
29562
|
+
id: "get_current_time",
|
|
29563
|
+
name: "Get Current Time",
|
|
29564
|
+
description: 'Get the current date and time. LLMs have no clock and no sense of "now" beyond their training cutoff \u2014 call this whenever the current date/time matters. Returns the instant in a specific IANA timezone (e.g. "America/New_York", "Asia/Tokyo"). When `timezone` is omitted, the resolved default is used (the conversation\'s timezone if set, otherwise the agent default, otherwise UTC). Returns ISO 8601 (UTC), plus the local date, 24-hour time, year/month/day, weekday name, Unix seconds, and the resolved timezone.',
|
|
29565
|
+
category: BuiltInToolCategory.TEMPORAL,
|
|
29566
|
+
toolGroup: BuiltInToolGroup.TEMPORAL,
|
|
29567
|
+
providers: [BuiltInToolProvider.MULTI],
|
|
29568
|
+
parametersSchema: {
|
|
29569
|
+
type: "object",
|
|
29570
|
+
properties: {
|
|
29571
|
+
timezone: {
|
|
29572
|
+
type: "string",
|
|
29573
|
+
description: 'Optional IANA timezone name (e.g. "America/New_York", "Europe/London", "Asia/Tokyo"). Defaults to the resolved zone (conversation > agent default > UTC). Invalid zones fall back to UTC.'
|
|
29574
|
+
}
|
|
29575
|
+
},
|
|
29576
|
+
required: []
|
|
29577
|
+
},
|
|
29578
|
+
executionHint: "platform",
|
|
29579
|
+
requiresApiKey: false
|
|
29580
|
+
},
|
|
29581
|
+
{
|
|
29582
|
+
id: "convert_time",
|
|
29583
|
+
name: "Convert Time Between Zones",
|
|
29584
|
+
description: 'Convert a wall-clock time from one IANA timezone to another, with daylight-saving handled automatically. Provide `time` as "YYYY-MM-DD HH:mm" or "HH:mm" (today is assumed when the date is omitted), plus the source and target IANA timezones. Returns the rendered local time in each zone and the whole-hour offset between them.',
|
|
29585
|
+
category: BuiltInToolCategory.TEMPORAL,
|
|
29586
|
+
toolGroup: BuiltInToolGroup.TEMPORAL,
|
|
29587
|
+
providers: [BuiltInToolProvider.MULTI],
|
|
29588
|
+
parametersSchema: {
|
|
29589
|
+
type: "object",
|
|
29590
|
+
properties: {
|
|
29591
|
+
time: {
|
|
29592
|
+
type: "string",
|
|
29593
|
+
description: 'The wall-clock time to convert, as "YYYY-MM-DD HH:mm[:ss]" or "HH:mm[:ss]" (the current date in the source zone is assumed when only a time is given).'
|
|
29594
|
+
},
|
|
29595
|
+
sourceTimezone: {
|
|
29596
|
+
type: "string",
|
|
29597
|
+
description: 'IANA timezone the `time` is expressed in (e.g. "America/New_York").'
|
|
29598
|
+
},
|
|
29599
|
+
targetTimezone: {
|
|
29600
|
+
type: "string",
|
|
29601
|
+
description: 'IANA timezone to convert the `time` into (e.g. "Asia/Tokyo").'
|
|
29602
|
+
}
|
|
29603
|
+
},
|
|
29604
|
+
required: ["time", "sourceTimezone", "targetTimezone"]
|
|
29605
|
+
},
|
|
29606
|
+
executionHint: "platform",
|
|
29607
|
+
requiresApiKey: false
|
|
29608
|
+
},
|
|
29609
|
+
{
|
|
29610
|
+
id: "time_difference",
|
|
29611
|
+
name: "Time Difference",
|
|
29612
|
+
description: 'Compute the elapsed time between two instants \u2014 a stopwatch for the agent. Provide `from` (ISO 8601 / RFC 3339); `to` defaults to now if omitted. Returns the signed duration in milliseconds, a `direction` of "past" or "future" (relative to `from`), and a humanized string like "6 hours 30 minutes".',
|
|
29613
|
+
category: BuiltInToolCategory.TEMPORAL,
|
|
29614
|
+
toolGroup: BuiltInToolGroup.TEMPORAL,
|
|
29615
|
+
providers: [BuiltInToolProvider.MULTI],
|
|
29616
|
+
parametersSchema: {
|
|
29617
|
+
type: "object",
|
|
29618
|
+
properties: {
|
|
29619
|
+
from: {
|
|
29620
|
+
type: "string",
|
|
29621
|
+
description: 'Start instant, ISO 8601 / RFC 3339 (e.g. "2026-06-03T12:00:00Z").'
|
|
29622
|
+
},
|
|
29623
|
+
to: {
|
|
29624
|
+
type: "string",
|
|
29625
|
+
description: "End instant, ISO 8601 / RFC 3339. Defaults to the current time when omitted."
|
|
29626
|
+
}
|
|
29627
|
+
},
|
|
29628
|
+
required: ["from"]
|
|
29629
|
+
},
|
|
29630
|
+
executionHint: "platform",
|
|
29631
|
+
requiresApiKey: false
|
|
29632
|
+
},
|
|
29633
|
+
{
|
|
29634
|
+
id: "set_timezone",
|
|
29635
|
+
name: "Set Conversation Timezone",
|
|
29636
|
+
description: `Remember the user's timezone for this conversation. Call this once you learn where the user is (e.g. they say "I'm in Tokyo" or mention a local time), passing the matching IANA timezone (e.g. "Asia/Tokyo"). From then on the time tools and any time-awareness context default to their local zone. Only meaningful inside a conversation.`,
|
|
29637
|
+
category: BuiltInToolCategory.TEMPORAL,
|
|
29638
|
+
toolGroup: BuiltInToolGroup.TEMPORAL,
|
|
29639
|
+
providers: [BuiltInToolProvider.MULTI],
|
|
29640
|
+
parametersSchema: {
|
|
29641
|
+
type: "object",
|
|
29642
|
+
properties: {
|
|
29643
|
+
timezone: {
|
|
29644
|
+
type: "string",
|
|
29645
|
+
description: `The user's IANA timezone name (e.g. "America/New_York", "Asia/Tokyo", "Europe/London").`
|
|
29646
|
+
}
|
|
29647
|
+
},
|
|
29648
|
+
required: ["timezone"]
|
|
29649
|
+
},
|
|
29650
|
+
executionHint: "platform",
|
|
29651
|
+
requiresApiKey: false
|
|
29652
|
+
},
|
|
29653
|
+
{
|
|
29654
|
+
id: "set_reminder",
|
|
29655
|
+
name: "Set Reminder",
|
|
29656
|
+
description: 'Schedule yourself to run again later with a follow-up message \u2014 a durable "wake me later". Provide a `message` (the instruction you\'ll receive when it fires) plus exactly one of `at` (an absolute RFC 3339 / ISO 8601 timestamp, e.g. "2026-06-04T09:00:00Z") or `inSeconds` (a relative delay, e.g. 3600 for one hour). Optionally pass `timezone` to interpret a zone-less `at`. The reminder runs as a one-time scheduled execution of this same agent; when it fires you receive the message and can act on it (including reaching out to the user via your messaging or email tools). Only available to agents (not standalone flow steps).',
|
|
29657
|
+
category: BuiltInToolCategory.TEMPORAL,
|
|
29658
|
+
toolGroup: BuiltInToolGroup.TEMPORAL,
|
|
29659
|
+
providers: [BuiltInToolProvider.MULTI],
|
|
29660
|
+
parametersSchema: {
|
|
29661
|
+
type: "object",
|
|
29662
|
+
properties: {
|
|
29663
|
+
message: {
|
|
29664
|
+
type: "string",
|
|
29665
|
+
description: "The follow-up instruction delivered to you when the reminder fires (becomes the kickoff message of the scheduled run)."
|
|
29666
|
+
},
|
|
29667
|
+
at: {
|
|
29668
|
+
type: "string",
|
|
29669
|
+
description: 'Absolute fire time, RFC 3339 / ISO 8601 (e.g. "2026-06-04T09:00:00Z"). Provide this OR `inSeconds`, not both.'
|
|
29670
|
+
},
|
|
29671
|
+
inSeconds: {
|
|
29672
|
+
type: "number",
|
|
29673
|
+
description: "Relative delay in seconds from now (e.g. 3600 = one hour). Provide this OR `at`, not both."
|
|
29674
|
+
},
|
|
29675
|
+
timezone: {
|
|
29676
|
+
type: "string",
|
|
29677
|
+
description: 'IANA timezone used to interpret a zone-less `at` value (e.g. "America/New_York"). Ignored when `at` already carries an offset or `inSeconds` is used.'
|
|
29678
|
+
}
|
|
29679
|
+
},
|
|
29680
|
+
required: ["message"]
|
|
29681
|
+
},
|
|
29682
|
+
executionHint: "platform",
|
|
29683
|
+
requiresApiKey: false
|
|
29684
|
+
},
|
|
28721
29685
|
// Asset Storage — mirror files onto Runtype's CDN from a URL or inline bytes
|
|
28722
29686
|
{
|
|
28723
29687
|
id: "store_asset",
|
|
@@ -32519,6 +33483,9 @@ var MODEL_FAMILY_PROVIDER_IDS = {
|
|
|
32519
33483
|
"nemotron-3-super-120b-a12b": {
|
|
32520
33484
|
"vercel": "nvidia/nemotron-3-super-120b-a12b"
|
|
32521
33485
|
},
|
|
33486
|
+
"nemotron-3-ultra-550b-a55b": {
|
|
33487
|
+
"vercel": "nvidia/nemotron-3-ultra-550b-a55b"
|
|
33488
|
+
},
|
|
32522
33489
|
"nemotron-nano-12b-v2-vl": {
|
|
32523
33490
|
"vercel": "nvidia/nemotron-nano-12b-v2-vl"
|
|
32524
33491
|
},
|
|
@@ -33716,6 +34683,179 @@ var SLACK_MANIFEST_BOT_SCOPES = [
|
|
|
33716
34683
|
...SLACK_REQUIRED_BOT_SCOPES,
|
|
33717
34684
|
...SLACK_OPTIONAL_BOT_SCOPES
|
|
33718
34685
|
];
|
|
34686
|
+
var reasoningConfigSchema = external_exports.union([
|
|
34687
|
+
external_exports.boolean(),
|
|
34688
|
+
external_exports.object({
|
|
34689
|
+
enabled: external_exports.boolean(),
|
|
34690
|
+
// OpenAI GPT-5 and o-series
|
|
34691
|
+
reasoningEffort: external_exports.enum(["minimal", "low", "medium", "high", "xhigh"]).optional(),
|
|
34692
|
+
reasoningSummary: external_exports.enum(["auto", "detailed"]).optional(),
|
|
34693
|
+
// Anthropic Claude
|
|
34694
|
+
budgetTokens: external_exports.number().int().min(1e3).max(1e5).optional(),
|
|
34695
|
+
// Google Gemini
|
|
34696
|
+
thinkingBudget: external_exports.number().int().min(1024).max(65536).optional(),
|
|
34697
|
+
includeThoughts: external_exports.boolean().optional()
|
|
34698
|
+
})
|
|
34699
|
+
]);
|
|
34700
|
+
var samplingConfigSchema = {
|
|
34701
|
+
topP: external_exports.number().min(0).max(1).optional(),
|
|
34702
|
+
topK: external_exports.number().int().min(1).max(500).optional(),
|
|
34703
|
+
frequencyPenalty: external_exports.number().min(-2).max(2).optional(),
|
|
34704
|
+
presencePenalty: external_exports.number().min(-2).max(2).optional(),
|
|
34705
|
+
seed: external_exports.number().int().optional()
|
|
34706
|
+
};
|
|
34707
|
+
var errorHandlingSchema = external_exports.object({
|
|
34708
|
+
onError: external_exports.enum(["fail", "continue", "fallback"]),
|
|
34709
|
+
fallbacks: external_exports.array(
|
|
34710
|
+
external_exports.discriminatedUnion("type", [
|
|
34711
|
+
external_exports.object({
|
|
34712
|
+
type: external_exports.literal("retry"),
|
|
34713
|
+
delay: external_exports.number().int().min(0).max(6e4).optional()
|
|
34714
|
+
}),
|
|
34715
|
+
external_exports.object({
|
|
34716
|
+
type: external_exports.literal("model"),
|
|
34717
|
+
model: external_exports.string(),
|
|
34718
|
+
temperature: external_exports.number().min(0).max(2).optional(),
|
|
34719
|
+
maxTokens: external_exports.number().int().min(1).optional(),
|
|
34720
|
+
delay: external_exports.number().int().min(0).max(6e4).optional()
|
|
34721
|
+
}),
|
|
34722
|
+
external_exports.object({
|
|
34723
|
+
type: external_exports.literal("message"),
|
|
34724
|
+
message: external_exports.string(),
|
|
34725
|
+
delay: external_exports.number().int().min(0).max(6e4).optional()
|
|
34726
|
+
})
|
|
34727
|
+
])
|
|
34728
|
+
).optional(),
|
|
34729
|
+
// Conditions that activate the fallback chain. Mirrors PromptErrorHandling.triggers;
|
|
34730
|
+
// defaults to error-only when omitted.
|
|
34731
|
+
triggers: external_exports.array(external_exports.object({ type: external_exports.enum(["error", "empty-output"]) })).optional()
|
|
34732
|
+
}).optional();
|
|
34733
|
+
var artifactConfigSchema = external_exports.object({
|
|
34734
|
+
enabled: external_exports.literal(true),
|
|
34735
|
+
types: external_exports.array(external_exports.enum(["markdown", "component"])).min(1)
|
|
34736
|
+
});
|
|
34737
|
+
var temporalConfigSchema = external_exports.object({
|
|
34738
|
+
injectElapsed: external_exports.boolean().optional(),
|
|
34739
|
+
elapsedThresholdSeconds: external_exports.number().int().min(0).optional(),
|
|
34740
|
+
groundNow: external_exports.boolean().optional(),
|
|
34741
|
+
timezone: external_exports.string().optional()
|
|
34742
|
+
});
|
|
34743
|
+
var agentRuntimeConfigSchema = external_exports.object({
|
|
34744
|
+
model: external_exports.string().optional(),
|
|
34745
|
+
systemPrompt: external_exports.string().optional(),
|
|
34746
|
+
temperature: external_exports.number().min(0).max(2).optional(),
|
|
34747
|
+
...samplingConfigSchema,
|
|
34748
|
+
// Unified tools configuration (nested under 'tools').
|
|
34749
|
+
//
|
|
34750
|
+
// This is the **createAgent / FPO-v2 create-form** projection of the canonical
|
|
34751
|
+
// `agentToolsConfigSchema` (`tool-types.ts`). It is kept separate on purpose —
|
|
34752
|
+
// it carries create-time constraints (`.int().min().max()`), a create-form
|
|
34753
|
+
// `runtimeTools.toolType` enum (`advisor`/`search` instead of the canonical
|
|
34754
|
+
// `RuntimeToolDefinition` union), and does NOT yet accept `toolSearch`.
|
|
34755
|
+
// Collapsing it onto the canonical leaves would change createAgent validation,
|
|
34756
|
+
// so the two are pinned by review + the planning doc rather than a shared
|
|
34757
|
+
// import. Adding `toolSearch` here (to match the canonical schema + the runtime
|
|
34758
|
+
// wire form) is a tracked follow-up.
|
|
34759
|
+
tools: external_exports.object({
|
|
34760
|
+
toolIds: external_exports.array(external_exports.string()).optional(),
|
|
34761
|
+
toolConfigs: external_exports.record(external_exports.string(), external_exports.record(external_exports.string(), external_exports.unknown())).optional(),
|
|
34762
|
+
runtimeTools: external_exports.array(
|
|
34763
|
+
external_exports.object({
|
|
34764
|
+
name: external_exports.string(),
|
|
34765
|
+
description: external_exports.string(),
|
|
34766
|
+
toolType: external_exports.enum([
|
|
34767
|
+
"flow",
|
|
34768
|
+
"custom",
|
|
34769
|
+
"external",
|
|
34770
|
+
"local",
|
|
34771
|
+
"advisor",
|
|
34772
|
+
"subagent",
|
|
34773
|
+
"search"
|
|
34774
|
+
]),
|
|
34775
|
+
parametersSchema: external_exports.record(external_exports.string(), external_exports.unknown()),
|
|
34776
|
+
config: external_exports.record(external_exports.string(), external_exports.unknown())
|
|
34777
|
+
})
|
|
34778
|
+
).optional(),
|
|
34779
|
+
mcpServers: external_exports.array(
|
|
34780
|
+
external_exports.object({
|
|
34781
|
+
id: external_exports.string(),
|
|
34782
|
+
name: external_exports.string().optional(),
|
|
34783
|
+
url: external_exports.string(),
|
|
34784
|
+
auth: external_exports.object({
|
|
34785
|
+
type: external_exports.enum(["api_key", "bearer", "basic", "custom_header", "none"]),
|
|
34786
|
+
headerName: external_exports.string().optional(),
|
|
34787
|
+
token: external_exports.string().optional(),
|
|
34788
|
+
username: external_exports.string().optional(),
|
|
34789
|
+
password: external_exports.string().optional()
|
|
34790
|
+
}).optional(),
|
|
34791
|
+
allowedTools: external_exports.array(external_exports.string()).optional(),
|
|
34792
|
+
timeout: external_exports.number().optional(),
|
|
34793
|
+
transport: external_exports.enum(["streamable_http", "rest"]).optional(),
|
|
34794
|
+
enabled: external_exports.boolean().optional()
|
|
34795
|
+
})
|
|
34796
|
+
).optional(),
|
|
34797
|
+
maxToolCalls: external_exports.number().int().min(1).max(100).optional(),
|
|
34798
|
+
toolCallStrategy: external_exports.enum(["auto", "required", "none"]).optional(),
|
|
34799
|
+
parallelCalls: external_exports.boolean().optional(),
|
|
34800
|
+
approval: external_exports.object({
|
|
34801
|
+
require: external_exports.union([external_exports.array(external_exports.string()), external_exports.boolean()]),
|
|
34802
|
+
timeout: external_exports.number().optional()
|
|
34803
|
+
}).optional(),
|
|
34804
|
+
perToolLimits: external_exports.record(
|
|
34805
|
+
external_exports.string(),
|
|
34806
|
+
external_exports.object({
|
|
34807
|
+
maxCalls: external_exports.number().optional(),
|
|
34808
|
+
required: external_exports.boolean().optional()
|
|
34809
|
+
})
|
|
34810
|
+
).optional(),
|
|
34811
|
+
subagentConfig: external_exports.object({
|
|
34812
|
+
toolPool: external_exports.array(external_exports.string()),
|
|
34813
|
+
defaultMaxTurns: external_exports.number().int().min(1).max(100).optional(),
|
|
34814
|
+
maxTurnsLimit: external_exports.number().int().min(1).max(100).optional(),
|
|
34815
|
+
maxSpawnsPerRun: external_exports.number().int().min(1).max(50).optional(),
|
|
34816
|
+
defaultModel: external_exports.string().optional(),
|
|
34817
|
+
allowNesting: external_exports.boolean().optional(),
|
|
34818
|
+
defaultTimeoutMs: external_exports.number().int().min(1e3).max(6e5).optional()
|
|
34819
|
+
}).optional(),
|
|
34820
|
+
codeModeConfig: external_exports.object({
|
|
34821
|
+
toolPool: external_exports.array(external_exports.string()),
|
|
34822
|
+
description: external_exports.string().optional(),
|
|
34823
|
+
timeoutMs: external_exports.number().int().min(1e3).max(6e5).optional()
|
|
34824
|
+
}).optional()
|
|
34825
|
+
}).optional(),
|
|
34826
|
+
artifacts: artifactConfigSchema.optional(),
|
|
34827
|
+
reasoning: reasoningConfigSchema.optional(),
|
|
34828
|
+
advisor: external_exports.object({
|
|
34829
|
+
model: external_exports.string(),
|
|
34830
|
+
systemPrompt: external_exports.string().optional()
|
|
34831
|
+
}).optional().nullable(),
|
|
34832
|
+
loopConfig: external_exports.object({
|
|
34833
|
+
maxTurns: external_exports.number().int().min(1).max(100).optional(),
|
|
34834
|
+
maxCost: external_exports.number().min(0).optional(),
|
|
34835
|
+
enableReflection: external_exports.boolean().optional(),
|
|
34836
|
+
reflectionInterval: external_exports.number().int().min(1).max(50).optional()
|
|
34837
|
+
}).optional(),
|
|
34838
|
+
voice: external_exports.object({
|
|
34839
|
+
enabled: external_exports.boolean().optional(),
|
|
34840
|
+
provider: external_exports.string().optional(),
|
|
34841
|
+
interruptionMode: external_exports.enum(["none", "cancel", "barge-in"]).optional(),
|
|
34842
|
+
elevenLabs: external_exports.object({
|
|
34843
|
+
voiceId: external_exports.string().optional(),
|
|
34844
|
+
modelId: external_exports.string().optional(),
|
|
34845
|
+
stability: external_exports.number().min(0).max(1).optional(),
|
|
34846
|
+
similarity: external_exports.number().min(0).max(1).optional()
|
|
34847
|
+
}).optional()
|
|
34848
|
+
}).optional(),
|
|
34849
|
+
errorHandling: errorHandlingSchema,
|
|
34850
|
+
loggingPolicy: external_exports.enum(["default", "on", "off"]).optional(),
|
|
34851
|
+
// Opt-in temporal awareness. `injectElapsed` turns on the automatic
|
|
34852
|
+
// "time has passed" decorator (a `<temporal_context>` block prepended to
|
|
34853
|
+
// the user turn at dispatch, gated on turn ≥ 2 and a gap ≥
|
|
34854
|
+
// `elapsedThresholdSeconds`). `groundNow` additionally surfaces the current
|
|
34855
|
+
// datetime in that block. `timezone` is the agent's DEFAULT IANA zone —
|
|
34856
|
+
// the layered tool/decorator resolution overrides it per-conversation.
|
|
34857
|
+
temporal: temporalConfigSchema.optional()
|
|
34858
|
+
});
|
|
33719
34859
|
var SECRET_REF_PATTERN = /\{\{secret:([A-Z][A-Z0-9_]*[A-Z0-9])\}\}/g;
|
|
33720
34860
|
function extractSecretReferences(template) {
|
|
33721
34861
|
const keys = /* @__PURE__ */ new Set();
|
|
@@ -33750,6 +34890,7 @@ function extractSecretReferencesFromAnyValue(value, maxDepth = 10) {
|
|
|
33750
34890
|
}
|
|
33751
34891
|
var FULL_PRODUCT_OBJECT_VERSION_1_0 = "1.0";
|
|
33752
34892
|
var FULL_PRODUCT_OBJECT_VERSION_1_1 = "1.1";
|
|
34893
|
+
var FULL_PRODUCT_OBJECT_VERSION_2_0 = "2.0";
|
|
33753
34894
|
var createPolicySchema = external_exports.enum(["create", "skip", "manual"]).optional();
|
|
33754
34895
|
var flowStepSchema = external_exports.object({
|
|
33755
34896
|
type: external_exports.string().refine(
|
|
@@ -33778,7 +34919,7 @@ var agentToolSchema = external_exports.object({
|
|
|
33778
34919
|
description: external_exports.string().optional(),
|
|
33779
34920
|
config: external_exports.record(external_exports.string(), external_exports.any()).optional()
|
|
33780
34921
|
});
|
|
33781
|
-
var
|
|
34922
|
+
var agentSubagentConfigSchema2 = external_exports.object({
|
|
33782
34923
|
toolPool: external_exports.array(external_exports.string()).optional(),
|
|
33783
34924
|
defaultMaxTurns: external_exports.number().int().positive().optional(),
|
|
33784
34925
|
maxSpawnsPerRun: external_exports.number().int().positive().optional(),
|
|
@@ -33848,7 +34989,7 @@ var agentMcpServerSchema = external_exports.object({
|
|
|
33848
34989
|
transport: external_exports.enum(["streamable_http", "rest"]).optional(),
|
|
33849
34990
|
enabled: external_exports.boolean().optional()
|
|
33850
34991
|
});
|
|
33851
|
-
var
|
|
34992
|
+
var agentToolsConfigSchema2 = external_exports.object({
|
|
33852
34993
|
toolIds: external_exports.array(external_exports.string()).optional(),
|
|
33853
34994
|
toolConfigs: external_exports.record(external_exports.string(), external_exports.record(external_exports.string(), external_exports.any())).optional(),
|
|
33854
34995
|
runtimeTools: external_exports.array(external_exports.object({
|
|
@@ -33870,7 +35011,7 @@ var agentToolsConfigSchema = external_exports.object({
|
|
|
33870
35011
|
maxCalls: external_exports.number().int().positive().optional(),
|
|
33871
35012
|
required: external_exports.boolean().optional()
|
|
33872
35013
|
})).optional(),
|
|
33873
|
-
subagentConfig:
|
|
35014
|
+
subagentConfig: agentSubagentConfigSchema2.optional(),
|
|
33874
35015
|
codeModeConfig: external_exports.object({
|
|
33875
35016
|
toolPool: external_exports.array(external_exports.string()).optional(),
|
|
33876
35017
|
description: external_exports.string().optional(),
|
|
@@ -33910,7 +35051,7 @@ var agentDefinitionSchema = external_exports.object({
|
|
|
33910
35051
|
seed: external_exports.number().int().optional(),
|
|
33911
35052
|
// Tools — legacy simple array, or the full config object
|
|
33912
35053
|
tools: external_exports.array(agentToolSchema).optional(),
|
|
33913
|
-
toolsConfig:
|
|
35054
|
+
toolsConfig: agentToolsConfigSchema2.optional(),
|
|
33914
35055
|
// Advanced config
|
|
33915
35056
|
loopConfig: agentLoopConfigSchema.optional(),
|
|
33916
35057
|
reasoning: external_exports.union([external_exports.boolean(), agentReasoningConfigSchema]).optional(),
|
|
@@ -33921,13 +35062,30 @@ var agentDefinitionSchema = external_exports.object({
|
|
|
33921
35062
|
model: external_exports.string(),
|
|
33922
35063
|
systemPrompt: external_exports.string().optional()
|
|
33923
35064
|
}).optional(),
|
|
33924
|
-
subagentConfig:
|
|
35065
|
+
subagentConfig: agentSubagentConfigSchema2.optional(),
|
|
33925
35066
|
capabilityToolRefs: external_exports.array(capabilityToolRefSchema).optional(),
|
|
33926
35067
|
// External / managed agent configs
|
|
33927
35068
|
externalConfig: agentExternalConfigSchema.optional(),
|
|
33928
35069
|
claudeManagedConfig: agentClaudeManagedConfigSchema.optional(),
|
|
33929
35070
|
createPolicy: createPolicySchema
|
|
33930
35071
|
});
|
|
35072
|
+
var agentDefinitionSchemaV2 = external_exports.object({
|
|
35073
|
+
name: external_exports.string().min(1),
|
|
35074
|
+
description: external_exports.string().min(1),
|
|
35075
|
+
icon: external_exports.string().max(50).optional(),
|
|
35076
|
+
agentType: external_exports.enum(["runtype", "external", "claude_managed"]).optional(),
|
|
35077
|
+
// Canonical runtime config — identical to `createAgentSchema.config`.
|
|
35078
|
+
config: agentRuntimeConfigSchema.optional(),
|
|
35079
|
+
// FPO-specific wiring, top-level like the flat shape.
|
|
35080
|
+
capabilityToolRefs: external_exports.array(capabilityToolRefSchema).optional(),
|
|
35081
|
+
// External / managed agent configs (top-level, mirroring `createAgent`).
|
|
35082
|
+
externalConfig: agentExternalConfigSchema.optional(),
|
|
35083
|
+
claudeManagedConfig: agentClaudeManagedConfigSchema.optional(),
|
|
35084
|
+
createPolicy: createPolicySchema
|
|
35085
|
+
}).strict();
|
|
35086
|
+
function isNestedFpoAgent(agent) {
|
|
35087
|
+
return !!agent && typeof agent === "object" && "config" in agent && !("model" in agent);
|
|
35088
|
+
}
|
|
33931
35089
|
var capabilitySchema = external_exports.object({
|
|
33932
35090
|
id: external_exports.string().min(1),
|
|
33933
35091
|
name: external_exports.string().min(1),
|
|
@@ -33935,7 +35093,12 @@ var capabilitySchema = external_exports.object({
|
|
|
33935
35093
|
inputSchema: external_exports.record(external_exports.string(), external_exports.any()).optional(),
|
|
33936
35094
|
outputSchema: external_exports.record(external_exports.string(), external_exports.any()).optional(),
|
|
33937
35095
|
flow: flowDefinitionSchema.optional(),
|
|
33938
|
-
agent
|
|
35096
|
+
// Accept BOTH inline-agent shapes. The flat ≤1.1 shape requires a top-level
|
|
35097
|
+
// `model`; the v2 shape is `.strict()` with no top-level `model`. These are
|
|
35098
|
+
// mutually exclusive, so the union routes unambiguously. Version-consistency
|
|
35099
|
+
// (flat ↔ ≤1.1, nested ↔ 2.0) is enforced in `fullProductObjectSchema`'s
|
|
35100
|
+
// superRefine, which has access to the document `version`.
|
|
35101
|
+
agent: external_exports.union([agentDefinitionSchema, agentDefinitionSchemaV2]).optional(),
|
|
33939
35102
|
existingFlowId: external_exports.string().optional(),
|
|
33940
35103
|
existingAgentId: external_exports.string().optional()
|
|
33941
35104
|
}).refine(
|
|
@@ -34075,7 +35238,11 @@ var metaSchema = external_exports.object({
|
|
|
34075
35238
|
planHash: external_exports.string().min(1)
|
|
34076
35239
|
});
|
|
34077
35240
|
var fullProductObjectSchema = external_exports.object({
|
|
34078
|
-
version: external_exports.enum([
|
|
35241
|
+
version: external_exports.enum([
|
|
35242
|
+
FULL_PRODUCT_OBJECT_VERSION_1_0,
|
|
35243
|
+
FULL_PRODUCT_OBJECT_VERSION_1_1,
|
|
35244
|
+
FULL_PRODUCT_OBJECT_VERSION_2_0
|
|
35245
|
+
]),
|
|
34079
35246
|
product: external_exports.object({
|
|
34080
35247
|
name: external_exports.string().min(1),
|
|
34081
35248
|
description: external_exports.string().min(1),
|
|
@@ -34090,78 +35257,24 @@ var fullProductObjectSchema = external_exports.object({
|
|
|
34090
35257
|
secrets: external_exports.array(productSecretSchema).max(50).optional(),
|
|
34091
35258
|
_meta: metaSchema
|
|
34092
35259
|
}).superRefine((fpo, ctx) => {
|
|
34093
|
-
const
|
|
35260
|
+
const isV2 = fpo.version === FULL_PRODUCT_OBJECT_VERSION_2_0;
|
|
34094
35261
|
for (const [i, cap] of fpo.capabilities.entries()) {
|
|
34095
|
-
const
|
|
34096
|
-
if (
|
|
35262
|
+
const agent = cap.agent;
|
|
35263
|
+
if (!agent || typeof agent !== "object") continue;
|
|
35264
|
+
const looksNested = "config" in agent && !("model" in agent);
|
|
35265
|
+
if (isV2 && !looksNested) {
|
|
34097
35266
|
ctx.addIssue({
|
|
34098
35267
|
code: "custom",
|
|
34099
|
-
message:
|
|
34100
|
-
path: ["capabilities", i, "
|
|
35268
|
+
message: "Version 2.0 requires the nested inline-agent shape: put model/systemPrompt/tools under `agent.config`.",
|
|
35269
|
+
path: ["capabilities", i, "agent"]
|
|
34101
35270
|
});
|
|
34102
|
-
}
|
|
34103
|
-
capIds.add(id);
|
|
34104
|
-
}
|
|
34105
|
-
const toolIds = /* @__PURE__ */ new Set();
|
|
34106
|
-
for (const [i, tool] of fpo.tools.entries()) {
|
|
34107
|
-
if (toolIds.has(tool.id)) {
|
|
35271
|
+
} else if (!isV2 && looksNested) {
|
|
34108
35272
|
ctx.addIssue({
|
|
34109
35273
|
code: "custom",
|
|
34110
|
-
message: `
|
|
34111
|
-
path: ["
|
|
35274
|
+
message: 'The nested `agent.config` shape requires version "2.0". Use the flat agent shape for version 1.0/1.1, or set version to "2.0".',
|
|
35275
|
+
path: ["capabilities", i, "agent"]
|
|
34112
35276
|
});
|
|
34113
35277
|
}
|
|
34114
|
-
toolIds.add(tool.id);
|
|
34115
|
-
}
|
|
34116
|
-
const surfaceIds = /* @__PURE__ */ new Set();
|
|
34117
|
-
for (const [i, surface] of fpo.surfaces.entries()) {
|
|
34118
|
-
if (surfaceIds.has(surface.id)) {
|
|
34119
|
-
ctx.addIssue({
|
|
34120
|
-
code: "custom",
|
|
34121
|
-
message: `Duplicate surface id: ${surface.id}`,
|
|
34122
|
-
path: ["surfaces", i, "id"]
|
|
34123
|
-
});
|
|
34124
|
-
}
|
|
34125
|
-
surfaceIds.add(surface.id);
|
|
34126
|
-
}
|
|
34127
|
-
if (fpo.records) {
|
|
34128
|
-
const recordIds = /* @__PURE__ */ new Set();
|
|
34129
|
-
for (const [i, record2] of fpo.records.entries()) {
|
|
34130
|
-
if (recordIds.has(record2.id)) {
|
|
34131
|
-
ctx.addIssue({
|
|
34132
|
-
code: "custom",
|
|
34133
|
-
message: `Duplicate record id: ${record2.id}`,
|
|
34134
|
-
path: ["records", i, "id"]
|
|
34135
|
-
});
|
|
34136
|
-
}
|
|
34137
|
-
recordIds.add(record2.id);
|
|
34138
|
-
}
|
|
34139
|
-
}
|
|
34140
|
-
if (fpo.schedules) {
|
|
34141
|
-
const scheduleIds = /* @__PURE__ */ new Set();
|
|
34142
|
-
for (const [i, schedule] of fpo.schedules.entries()) {
|
|
34143
|
-
if (scheduleIds.has(schedule.id)) {
|
|
34144
|
-
ctx.addIssue({
|
|
34145
|
-
code: "custom",
|
|
34146
|
-
message: `Duplicate schedule id: ${schedule.id}`,
|
|
34147
|
-
path: ["schedules", i, "id"]
|
|
34148
|
-
});
|
|
34149
|
-
}
|
|
34150
|
-
scheduleIds.add(schedule.id);
|
|
34151
|
-
}
|
|
34152
|
-
}
|
|
34153
|
-
if (fpo.secrets) {
|
|
34154
|
-
const secretIds = /* @__PURE__ */ new Set();
|
|
34155
|
-
for (const [i, secret] of fpo.secrets.entries()) {
|
|
34156
|
-
if (secretIds.has(secret.id)) {
|
|
34157
|
-
ctx.addIssue({
|
|
34158
|
-
code: "custom",
|
|
34159
|
-
message: `Duplicate secret id: ${secret.id}`,
|
|
34160
|
-
path: ["secrets", i, "id"]
|
|
34161
|
-
});
|
|
34162
|
-
}
|
|
34163
|
-
secretIds.add(secret.id);
|
|
34164
|
-
}
|
|
34165
35278
|
}
|
|
34166
35279
|
});
|
|
34167
35280
|
function createIssue(severity, code, message, path16, suggestedFix) {
|
|
@@ -34254,6 +35367,29 @@ function validateAgentDefinition(agent, capIndex) {
|
|
|
34254
35367
|
createIssue("error", "AGENT_NAME_EMPTY", "Agent name is required", `${base}.name`)
|
|
34255
35368
|
);
|
|
34256
35369
|
}
|
|
35370
|
+
if (isNestedFpoAgent(agent)) {
|
|
35371
|
+
validateNestedAgent(agent, base, result);
|
|
35372
|
+
} else {
|
|
35373
|
+
validateFlatAgent(agent, base, result);
|
|
35374
|
+
}
|
|
35375
|
+
if (agent.capabilityToolRefs) {
|
|
35376
|
+
for (const [i, ref] of agent.capabilityToolRefs.entries()) {
|
|
35377
|
+
if (!ref.toolName || ref.toolName.trim() === "") {
|
|
35378
|
+
result.errors.push(
|
|
35379
|
+
createIssue("error", "CAPABILITY_TOOL_REF_NAME_EMPTY", "capabilityToolRefs toolName is required", `${base}.capabilityToolRefs[${i}].toolName`)
|
|
35380
|
+
);
|
|
35381
|
+
}
|
|
35382
|
+
if (!ref.capabilityId || ref.capabilityId.trim() === "") {
|
|
35383
|
+
result.errors.push(
|
|
35384
|
+
createIssue("error", "CAPABILITY_TOOL_REF_ID_EMPTY", "capabilityToolRefs capabilityId is required", `${base}.capabilityToolRefs[${i}].capabilityId`)
|
|
35385
|
+
);
|
|
35386
|
+
}
|
|
35387
|
+
}
|
|
35388
|
+
}
|
|
35389
|
+
result.valid = result.errors.length === 0;
|
|
35390
|
+
return result;
|
|
35391
|
+
}
|
|
35392
|
+
function validateFlatAgent(agent, base, result) {
|
|
34257
35393
|
if (!agent.model || agent.model.trim() === "") {
|
|
34258
35394
|
result.errors.push(
|
|
34259
35395
|
createIssue("error", "AGENT_NO_MODEL", "Agent model is required", `${base}.model`)
|
|
@@ -34289,22 +35425,35 @@ function validateAgentDefinition(agent, capIndex) {
|
|
|
34289
35425
|
}
|
|
34290
35426
|
}
|
|
34291
35427
|
}
|
|
34292
|
-
|
|
34293
|
-
|
|
34294
|
-
|
|
35428
|
+
}
|
|
35429
|
+
function validateNestedAgent(agent, base, result) {
|
|
35430
|
+
const config3 = agent.config;
|
|
35431
|
+
if (!config3?.model || config3.model.trim() === "") {
|
|
35432
|
+
result.errors.push(
|
|
35433
|
+
createIssue("error", "AGENT_NO_MODEL", "Agent model is required", `${base}.config.model`)
|
|
35434
|
+
);
|
|
35435
|
+
}
|
|
35436
|
+
if (config3?.advisor) {
|
|
35437
|
+
if (!config3.advisor.model || config3.advisor.model.trim() === "") {
|
|
35438
|
+
result.errors.push(
|
|
35439
|
+
createIssue("error", "AGENT_ADVISOR_NO_MODEL", "Advisor model is required when advisor is configured", `${base}.config.advisor.model`)
|
|
35440
|
+
);
|
|
35441
|
+
}
|
|
35442
|
+
}
|
|
35443
|
+
if (config3?.tools?.runtimeTools) {
|
|
35444
|
+
for (const [i, tool] of config3.tools.runtimeTools.entries()) {
|
|
35445
|
+
if (!tool.name || tool.name.trim() === "") {
|
|
34295
35446
|
result.errors.push(
|
|
34296
|
-
createIssue("error", "
|
|
35447
|
+
createIssue("error", "RUNTIME_TOOL_NAME_EMPTY", "Runtime tool name is required", `${base}.config.tools.runtimeTools[${i}].name`)
|
|
34297
35448
|
);
|
|
34298
35449
|
}
|
|
34299
|
-
if (!
|
|
34300
|
-
result.
|
|
34301
|
-
createIssue("
|
|
35450
|
+
if (tool.toolType === "flow" && (!tool.config?.steps || !Array.isArray(tool.config.steps) || tool.config.steps.length === 0)) {
|
|
35451
|
+
result.warnings.push(
|
|
35452
|
+
createIssue("warning", "FLOW_RUNTIME_TOOL_NO_STEPS", "Flow runtime tool should have steps in config", `${base}.config.tools.runtimeTools[${i}].config.steps`)
|
|
34302
35453
|
);
|
|
34303
35454
|
}
|
|
34304
35455
|
}
|
|
34305
35456
|
}
|
|
34306
|
-
result.valid = result.errors.length === 0;
|
|
34307
|
-
return result;
|
|
34308
35457
|
}
|
|
34309
35458
|
var KEBAB_CASE_RE = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
34310
35459
|
function validateCapability(cap, index, context) {
|
|
@@ -34521,7 +35670,16 @@ function validateConnectivity(fpo) {
|
|
|
34521
35670
|
}
|
|
34522
35671
|
}
|
|
34523
35672
|
for (const [ci, cap] of fpo.capabilities.entries()) {
|
|
34524
|
-
const
|
|
35673
|
+
const agent = cap.agent;
|
|
35674
|
+
let toolIds;
|
|
35675
|
+
let toolIdsPath;
|
|
35676
|
+
if (isNestedFpoAgent(agent)) {
|
|
35677
|
+
toolIds = agent.config?.tools?.toolIds;
|
|
35678
|
+
toolIdsPath = "config.tools.toolIds";
|
|
35679
|
+
} else {
|
|
35680
|
+
toolIds = agent?.toolsConfig?.toolIds;
|
|
35681
|
+
toolIdsPath = "toolsConfig.toolIds";
|
|
35682
|
+
}
|
|
34525
35683
|
if (!toolIds) continue;
|
|
34526
35684
|
for (const [ti, toolId] of toolIds.entries()) {
|
|
34527
35685
|
if (!toolId.startsWith("capability:")) continue;
|
|
@@ -34533,7 +35691,7 @@ function validateConnectivity(fpo) {
|
|
|
34533
35691
|
"error",
|
|
34534
35692
|
"CAPABILITY_TOOLID_REF_NOT_FOUND",
|
|
34535
35693
|
`toolIds references non-existent capability "${refCapId}"`,
|
|
34536
|
-
`capabilities[${ci}].agent
|
|
35694
|
+
`capabilities[${ci}].agent.${toolIdsPath}[${ti}]`,
|
|
34537
35695
|
"Ensure the capability:<id> matches an existing capability"
|
|
34538
35696
|
)
|
|
34539
35697
|
);
|
|
@@ -34543,7 +35701,7 @@ function validateConnectivity(fpo) {
|
|
|
34543
35701
|
"error",
|
|
34544
35702
|
"CAPABILITY_TOOLID_REF_NOT_FLOW",
|
|
34545
35703
|
`toolIds references capability "${refCapId}" which is not a flow capability`,
|
|
34546
|
-
`capabilities[${ci}].agent
|
|
35704
|
+
`capabilities[${ci}].agent.${toolIdsPath}[${ti}]`,
|
|
34547
35705
|
"capability: refs in toolIds can only reference capabilities backed by a flow"
|
|
34548
35706
|
)
|
|
34549
35707
|
);
|
|
@@ -34554,7 +35712,7 @@ function validateConnectivity(fpo) {
|
|
|
34554
35712
|
"error",
|
|
34555
35713
|
"CAPABILITY_TOOLID_REF_SELF",
|
|
34556
35714
|
`toolIds cannot reference the capability's own id "${cap.id}"`,
|
|
34557
|
-
`capabilities[${ci}].agent
|
|
35715
|
+
`capabilities[${ci}].agent.${toolIdsPath}[${ti}]`
|
|
34558
35716
|
)
|
|
34559
35717
|
);
|
|
34560
35718
|
}
|
|
@@ -34589,59 +35747,80 @@ function validateConnectivity(fpo) {
|
|
|
34589
35747
|
result.valid = result.errors.length === 0;
|
|
34590
35748
|
return result;
|
|
34591
35749
|
}
|
|
35750
|
+
function safeValidate(fn) {
|
|
35751
|
+
try {
|
|
35752
|
+
return fn();
|
|
35753
|
+
} catch {
|
|
35754
|
+
return emptyResult();
|
|
35755
|
+
}
|
|
35756
|
+
}
|
|
35757
|
+
function readId(entry) {
|
|
35758
|
+
return entry && typeof entry === "object" ? entry.id : void 0;
|
|
35759
|
+
}
|
|
34592
35760
|
function validateFPO(fpo) {
|
|
34593
35761
|
const result = emptyResult();
|
|
34594
35762
|
const capIds = /* @__PURE__ */ new Set();
|
|
34595
35763
|
for (const [i, cap] of fpo.capabilities.entries()) {
|
|
34596
|
-
|
|
35764
|
+
const id = readId(cap);
|
|
35765
|
+
if (id === void 0) continue;
|
|
35766
|
+
if (capIds.has(id)) {
|
|
34597
35767
|
result.errors.push(
|
|
34598
|
-
createIssue("error", "DUPLICATE_CAPABILITY_ID", `Duplicate capability id: "${
|
|
35768
|
+
createIssue("error", "DUPLICATE_CAPABILITY_ID", `Duplicate capability id: "${id}"`, `capabilities[${i}].id`)
|
|
34599
35769
|
);
|
|
34600
35770
|
}
|
|
34601
|
-
capIds.add(
|
|
35771
|
+
capIds.add(id);
|
|
34602
35772
|
}
|
|
34603
35773
|
const toolIdSet = /* @__PURE__ */ new Set();
|
|
34604
35774
|
for (const [i, tool] of fpo.tools.entries()) {
|
|
34605
|
-
|
|
35775
|
+
const id = readId(tool);
|
|
35776
|
+
if (id === void 0) continue;
|
|
35777
|
+
if (toolIdSet.has(id)) {
|
|
34606
35778
|
result.errors.push(
|
|
34607
|
-
createIssue("error", "DUPLICATE_TOOL_ID", `Duplicate tool id: "${
|
|
35779
|
+
createIssue("error", "DUPLICATE_TOOL_ID", `Duplicate tool id: "${id}"`, `tools[${i}].id`)
|
|
34608
35780
|
);
|
|
34609
35781
|
}
|
|
34610
|
-
toolIdSet.add(
|
|
35782
|
+
toolIdSet.add(id);
|
|
34611
35783
|
}
|
|
34612
35784
|
const surfaceIds = /* @__PURE__ */ new Set();
|
|
34613
35785
|
for (const [i, surface] of fpo.surfaces.entries()) {
|
|
34614
|
-
|
|
35786
|
+
const id = readId(surface);
|
|
35787
|
+
if (id === void 0) continue;
|
|
35788
|
+
if (surfaceIds.has(id)) {
|
|
34615
35789
|
result.errors.push(
|
|
34616
|
-
createIssue("error", "DUPLICATE_SURFACE_ID", `Duplicate surface id: "${
|
|
35790
|
+
createIssue("error", "DUPLICATE_SURFACE_ID", `Duplicate surface id: "${id}"`, `surfaces[${i}].id`)
|
|
34617
35791
|
);
|
|
34618
35792
|
}
|
|
34619
|
-
surfaceIds.add(
|
|
35793
|
+
surfaceIds.add(id);
|
|
34620
35794
|
}
|
|
34621
35795
|
if (fpo.records) {
|
|
34622
35796
|
const recordIds = /* @__PURE__ */ new Set();
|
|
34623
35797
|
for (const [i, record2] of fpo.records.entries()) {
|
|
34624
|
-
|
|
35798
|
+
const id = readId(record2);
|
|
35799
|
+
if (id === void 0) continue;
|
|
35800
|
+
if (recordIds.has(id)) {
|
|
34625
35801
|
result.errors.push(
|
|
34626
|
-
createIssue("error", "DUPLICATE_RECORD_ID", `Duplicate record id: "${
|
|
35802
|
+
createIssue("error", "DUPLICATE_RECORD_ID", `Duplicate record id: "${id}"`, `records[${i}].id`)
|
|
34627
35803
|
);
|
|
34628
35804
|
}
|
|
34629
|
-
recordIds.add(
|
|
35805
|
+
recordIds.add(id);
|
|
34630
35806
|
}
|
|
34631
35807
|
}
|
|
34632
|
-
const capIdSet = new Set(fpo.capabilities.map((c) => c.id));
|
|
34633
35808
|
if (fpo.schedules) {
|
|
34634
35809
|
const scheduleIds = /* @__PURE__ */ new Set();
|
|
34635
35810
|
for (const [i, schedule] of fpo.schedules.entries()) {
|
|
34636
|
-
|
|
34637
|
-
|
|
34638
|
-
|
|
34639
|
-
|
|
35811
|
+
const id = readId(schedule);
|
|
35812
|
+
if (id !== void 0) {
|
|
35813
|
+
if (scheduleIds.has(id)) {
|
|
35814
|
+
result.errors.push(
|
|
35815
|
+
createIssue("error", "DUPLICATE_SCHEDULE_ID", `Duplicate schedule id: "${id}"`, `schedules[${i}].id`)
|
|
35816
|
+
);
|
|
35817
|
+
}
|
|
35818
|
+
scheduleIds.add(id);
|
|
34640
35819
|
}
|
|
34641
|
-
|
|
34642
|
-
if (!
|
|
35820
|
+
const capabilityId = schedule && typeof schedule === "object" ? schedule.capabilityId : void 0;
|
|
35821
|
+
if (capabilityId !== void 0 && !capIds.has(capabilityId)) {
|
|
34643
35822
|
result.errors.push(
|
|
34644
|
-
createIssue("error", "SCHEDULE_CAPABILITY_NOT_FOUND", `Schedule "${schedule
|
|
35823
|
+
createIssue("error", "SCHEDULE_CAPABILITY_NOT_FOUND", `Schedule "${readId(schedule) ?? ""}" references capability "${capabilityId}" which does not exist`, `schedules[${i}].capabilityId`)
|
|
34645
35824
|
);
|
|
34646
35825
|
}
|
|
34647
35826
|
}
|
|
@@ -34649,23 +35828,81 @@ function validateFPO(fpo) {
|
|
|
34649
35828
|
if (fpo.secrets) {
|
|
34650
35829
|
const secretIds = /* @__PURE__ */ new Set();
|
|
34651
35830
|
for (const [i, secret] of fpo.secrets.entries()) {
|
|
34652
|
-
|
|
35831
|
+
const id = readId(secret);
|
|
35832
|
+
if (id === void 0) continue;
|
|
35833
|
+
if (secretIds.has(id)) {
|
|
34653
35834
|
result.errors.push(
|
|
34654
|
-
createIssue("error", "DUPLICATE_SECRET_ID", `Duplicate secret id: "${
|
|
35835
|
+
createIssue("error", "DUPLICATE_SECRET_ID", `Duplicate secret id: "${id}"`, `secrets[${i}].id`)
|
|
34655
35836
|
);
|
|
34656
35837
|
}
|
|
34657
|
-
secretIds.add(
|
|
35838
|
+
secretIds.add(id);
|
|
34658
35839
|
}
|
|
34659
35840
|
}
|
|
34660
|
-
const toolIds = new Set(
|
|
35841
|
+
const toolIds = new Set(
|
|
35842
|
+
[...toolIdSet].filter((id) => typeof id === "string")
|
|
35843
|
+
);
|
|
34661
35844
|
const capResults = fpo.capabilities.map(
|
|
34662
|
-
(cap, i) => validateCapability(cap, i, { toolIds })
|
|
35845
|
+
(cap, i) => safeValidate(() => validateCapability(cap, i, { toolIds }))
|
|
34663
35846
|
);
|
|
34664
|
-
const toolResults = fpo.tools.map(
|
|
34665
|
-
|
|
34666
|
-
|
|
35847
|
+
const toolResults = fpo.tools.map(
|
|
35848
|
+
(tool, i) => safeValidate(() => validateToolDefinition(tool, i))
|
|
35849
|
+
);
|
|
35850
|
+
const surfaceResults = fpo.surfaces.map(
|
|
35851
|
+
(surface, i) => safeValidate(() => validateSurfaceDefinition(surface, i))
|
|
35852
|
+
);
|
|
35853
|
+
const connectivityResult = safeValidate(() => validateConnectivity(fpo));
|
|
34667
35854
|
return mergeResults(result, ...capResults, ...toolResults, ...surfaceResults, connectivityResult);
|
|
34668
35855
|
}
|
|
35856
|
+
function zodIssueCodeToValidationCode(code) {
|
|
35857
|
+
return code ? `SCHEMA_${code.toUpperCase()}` : "SCHEMA_ERROR";
|
|
35858
|
+
}
|
|
35859
|
+
function zodIssuesToValidationIssues(issues) {
|
|
35860
|
+
return issues.map(
|
|
35861
|
+
(issue2) => createIssue(
|
|
35862
|
+
"error",
|
|
35863
|
+
zodIssueCodeToValidationCode(issue2.code),
|
|
35864
|
+
issue2.message,
|
|
35865
|
+
issue2.path.map(String).join(".")
|
|
35866
|
+
)
|
|
35867
|
+
);
|
|
35868
|
+
}
|
|
35869
|
+
function zodIssuesToValidationResult(issues) {
|
|
35870
|
+
const result = emptyResult();
|
|
35871
|
+
result.errors.push(...zodIssuesToValidationIssues(issues));
|
|
35872
|
+
result.valid = false;
|
|
35873
|
+
return result;
|
|
35874
|
+
}
|
|
35875
|
+
function mergeZodSchemaAndSemantic(parsed, fallbackSemanticInput, validate) {
|
|
35876
|
+
if (parsed.success) {
|
|
35877
|
+
return validate(parsed.data);
|
|
35878
|
+
}
|
|
35879
|
+
const schemaResult = zodIssuesToValidationResult(parsed.error.issues);
|
|
35880
|
+
if (fallbackSemanticInput === null || fallbackSemanticInput === void 0) {
|
|
35881
|
+
return schemaResult;
|
|
35882
|
+
}
|
|
35883
|
+
let semanticResult;
|
|
35884
|
+
try {
|
|
35885
|
+
semanticResult = validate(fallbackSemanticInput);
|
|
35886
|
+
} catch {
|
|
35887
|
+
semanticResult = emptyResult();
|
|
35888
|
+
}
|
|
35889
|
+
const merged = mergeResults(schemaResult, semanticResult);
|
|
35890
|
+
merged.valid = false;
|
|
35891
|
+
return merged;
|
|
35892
|
+
}
|
|
35893
|
+
function coerceFullProductObjectForSemanticValidation(body) {
|
|
35894
|
+
if (typeof body !== "object" || body === null) return null;
|
|
35895
|
+
const obj = body;
|
|
35896
|
+
return {
|
|
35897
|
+
...obj,
|
|
35898
|
+
capabilities: Array.isArray(obj.capabilities) ? obj.capabilities : [],
|
|
35899
|
+
tools: Array.isArray(obj.tools) ? obj.tools : [],
|
|
35900
|
+
surfaces: Array.isArray(obj.surfaces) ? obj.surfaces : [],
|
|
35901
|
+
records: Array.isArray(obj.records) ? obj.records : void 0,
|
|
35902
|
+
schedules: Array.isArray(obj.schedules) ? obj.schedules : void 0,
|
|
35903
|
+
secrets: Array.isArray(obj.secrets) ? obj.secrets : void 0
|
|
35904
|
+
};
|
|
35905
|
+
}
|
|
34669
35906
|
var FULL_PRODUCT_OBJECT_TEMPLATE_VERSION = "1.0";
|
|
34670
35907
|
var FULL_PRODUCT_OBJECT_TEMPLATE_VERSION_1_1 = "1.1";
|
|
34671
35908
|
var fpoTemplateVariableInputTypeSchema = external_exports.enum([
|
|
@@ -34798,9 +36035,6 @@ function getVariableReferences(template) {
|
|
|
34798
36035
|
}
|
|
34799
36036
|
return references;
|
|
34800
36037
|
}
|
|
34801
|
-
function normalizeValidationPath(path16) {
|
|
34802
|
-
return path16.map(String).join(".");
|
|
34803
|
-
}
|
|
34804
36038
|
function coerceFPOTemplateVariableValue(variable, rawValue) {
|
|
34805
36039
|
if (rawValue === void 0 || rawValue === null || rawValue === "") {
|
|
34806
36040
|
return void 0;
|
|
@@ -34912,11 +36146,7 @@ function validateFPOTemplate(body, options = {}) {
|
|
|
34912
36146
|
const parseResult = fullProductObjectTemplateSchema.safeParse(body);
|
|
34913
36147
|
if (!parseResult.success) {
|
|
34914
36148
|
const result2 = emptyResult();
|
|
34915
|
-
result2.errors.push(
|
|
34916
|
-
...parseResult.error.issues.map(
|
|
34917
|
-
(issue2) => createIssue("error", "SCHEMA_ERROR", issue2.message, normalizeValidationPath(issue2.path))
|
|
34918
|
-
)
|
|
34919
|
-
);
|
|
36149
|
+
result2.errors.push(...zodIssuesToValidationIssues(parseResult.error.issues));
|
|
34920
36150
|
result2.valid = false;
|
|
34921
36151
|
return {
|
|
34922
36152
|
...result2,
|
|
@@ -57634,20 +58864,12 @@ function runValidation(body, kind) {
|
|
|
57634
58864
|
}
|
|
57635
58865
|
const parsed = fullProductObjectSchema.safeParse(body);
|
|
57636
58866
|
if (!parsed.success) {
|
|
57637
|
-
|
|
57638
|
-
|
|
57639
|
-
|
|
57640
|
-
|
|
57641
|
-
|
|
57642
|
-
|
|
57643
|
-
message: issue2.message,
|
|
57644
|
-
path: issue2.path.map(String).join("."),
|
|
57645
|
-
severity: "error"
|
|
57646
|
-
})
|
|
57647
|
-
),
|
|
57648
|
-
warnings: [],
|
|
57649
|
-
recommendations: []
|
|
57650
|
-
};
|
|
58867
|
+
const merged = mergeZodSchemaAndSemantic(
|
|
58868
|
+
parsed,
|
|
58869
|
+
coerceFullProductObjectForSemanticValidation(body),
|
|
58870
|
+
validateFPO
|
|
58871
|
+
);
|
|
58872
|
+
return { kind, ...merged };
|
|
57651
58873
|
}
|
|
57652
58874
|
return { kind, ...validateFPO(parsed.data) };
|
|
57653
58875
|
}
|