@zapier/kitcore 0.14.0 → 0.16.0

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.d.mts CHANGED
@@ -222,6 +222,72 @@ interface MethodHooks {
222
222
  annotator?: ComposedAnnotator;
223
223
  }
224
224
 
225
+ /**
226
+ * API stability tiers.
227
+ *
228
+ * A plugin declares exactly one level via `PluginMeta.stability`; tier
229
+ * membership (which subpath aggregate exports the plugin) is structural,
230
+ * so nothing here compares levels ordinally. The array is the single
231
+ * source of truth: it derives the {@link StabilityLevel} type, gives the
232
+ * ladder tests their adjacent-tier iteration order, and gives docs a
233
+ * render order.
234
+ */
235
+ declare const STABILITY_LEVELS: readonly ["stable", "beta", "experimental"];
236
+ type StabilityLevel = (typeof STABILITY_LEVELS)[number];
237
+ /**
238
+ * Title-case display names for each level, for section-level badges in
239
+ * generated docs (e.g. `Code Workflows (Beta)`). Inline description
240
+ * labels go through {@link applyStabilityLabel} instead.
241
+ */
242
+ declare const STABILITY_TITLES: {
243
+ readonly stable: "Stable";
244
+ readonly beta: "Beta";
245
+ readonly experimental: "Experimental";
246
+ };
247
+ /**
248
+ * Normalize authored meta to a concrete level: absent means `"stable"`,
249
+ * and the deprecated `experimental: true` boolean means `"experimental"`.
250
+ * The registry projection runs every entry through this, so
251
+ * `FunctionRegistryEntry.stability` is always concrete and consumers
252
+ * never branch on `undefined`.
253
+ *
254
+ * The declared value can cross a JSON boundary from a hand-written
255
+ * plugin, so at runtime it may be any string. An unrecognized level
256
+ * clamps to `"experimental"` — the author declared the method not
257
+ * stable, and clamping keeps the raw string out of notices and labels.
258
+ * It doesn't throw because this also runs in the `getStability` live
259
+ * read on the call path, where a throw would break the observed call.
260
+ */
261
+ declare function normalizeStability(meta: {
262
+ stability?: StabilityLevel;
263
+ experimental?: boolean;
264
+ }): StabilityLevel;
265
+ /**
266
+ * The shared label renderer: every consumer that renders a registry
267
+ * entry's description (CLI help, MCP tool descriptions) labels it
268
+ * through this function, so a new consumer cannot silently drop the
269
+ * label. `stability` stays structured data on the registry entry — the
270
+ * label is applied at render time, never baked into the stored
271
+ * description (docs badge at the section level, so baking it in would
272
+ * double-badge).
273
+ *
274
+ * The label follows the plugin's declared level, not the subpath that
275
+ * surfaced it: a beta method surfaced through an experimental-tier
276
+ * consumer still reads "(beta)".
277
+ */
278
+ declare function applyStabilityLabel({ description, stability, placement, }: {
279
+ description: string;
280
+ /** Absent means stable (the value may arrive from outside the
281
+ * normalized registry projection, e.g. hand-built JSON). */
282
+ stability: StabilityLevel | undefined;
283
+ /**
284
+ * `"suffix"` renders `<description> (beta)` (CLI help);
285
+ * `"prefix"` renders `[Beta] <description>` (MCP tool descriptions,
286
+ * where the front of the string is what an LLM reads first).
287
+ */
288
+ placement?: "suffix" | "prefix";
289
+ }): string;
290
+
225
291
  /**
226
292
  * Plugins with a required-parameter rename declare two schemas: a canonical one
227
293
  * (new names only, carrying `.meta({ aliases })`) and a `z.union([canonical,
@@ -562,6 +628,8 @@ interface LeafMetaFields {
562
628
  * off the registry / CLI / MCP surface, exactly like `skipInputValidation`. */
563
629
  skipOutputValidation?: boolean;
564
630
  packages?: string[];
631
+ stability?: StabilityLevel;
632
+ /** @deprecated Use `stability: "experimental"` instead. */
565
633
  experimental?: boolean;
566
634
  confirm?: "create-secret" | "delete";
567
635
  deprecation?: FunctionDeprecation;
@@ -1195,10 +1263,10 @@ type DataOf<TResponse> = TResponse extends {
1195
1263
  } ? TData : never;
1196
1264
  /**
1197
1265
  * A leaf plugin that is a single value (not a function). `value` is a static
1198
- * constant; `get({ imports })` computes the value from imports. Like a
1199
- * method's `setup`, `get` runs eagerly at createSdk (dependencies first), so a
1200
- * module-level value is built on import. An imported/surfaced property yields
1201
- * the value, not a callable.
1266
+ * constant; `get({ imports, state })` computes the value from imports and
1267
+ * `setup` state, re-running live on each read. An optional `setup` runs once
1268
+ * eagerly at createSdk (dependencies first, like a method's `setup`) to build
1269
+ * that state. An imported/surfaced property yields the value, not a callable.
1202
1270
  */
1203
1271
  interface PropertyPlugin<TName extends string = string, TValue = unknown> {
1204
1272
  pluginType: "property";
@@ -1238,6 +1306,7 @@ interface PropertyPlugin<TName extends string = string, TValue = unknown> {
1238
1306
  get?: (bag: {
1239
1307
  imports: Record<string, unknown>;
1240
1308
  state: unknown;
1309
+ callContext?: CallContext;
1241
1310
  }) => TValue;
1242
1311
  /** Descriptive metadata for the registry / CLI / MCP / docs (carry-only). */
1243
1312
  meta?: LeafMeta;
@@ -1480,7 +1549,10 @@ interface PropertyEntry {
1480
1549
  pluginType: "property";
1481
1550
  name: string;
1482
1551
  value?: any;
1483
- getValue?: () => any;
1552
+ /** Re-derives the value per read. Receives the live per-call `CallContext`
1553
+ * when installed on a method's `imports` bag with a threaded context, and
1554
+ * nothing on a surface / build-time read. */
1555
+ getValue?: (callContext?: CallContext) => any;
1484
1556
  /** Carried from the descriptor for the registry / CLI / MCP / docs. */
1485
1557
  meta?: LeafMeta;
1486
1558
  /** Carried from the descriptor: templated registry members for this
@@ -1748,8 +1820,17 @@ interface FunctionRegistryEntry {
1748
1820
  resolvers?: Record<string, BoundResolver>;
1749
1821
  packages?: string[];
1750
1822
  /**
1751
- * True if the plugin is registered only in the experimental SDK
1752
- * factory. See `PluginMeta.experimental`.
1823
+ * API stability tier of the plugin, normalized from `PluginMeta.stability`
1824
+ * (absent means `"stable"`; the legacy `experimental: true` boolean means
1825
+ * `"experimental"`). Always concrete here, so consumers never branch on
1826
+ * `undefined`.
1827
+ */
1828
+ stability: StabilityLevel;
1829
+ /**
1830
+ * @deprecated Read `stability` instead. Derived as
1831
+ * `stability === "experimental"` — literal by name, so beta reads
1832
+ * `false`; the not-stable warning duty lives in `stability` and the
1833
+ * runtime stability notice.
1753
1834
  */
1754
1835
  experimental?: boolean;
1755
1836
  /** Confirmation prompt type - prompts user before executing */
@@ -1845,10 +1926,19 @@ interface PluginMeta<TSdk = unknown> {
1845
1926
  /** Confirmation prompt type - prompts user before executing */
1846
1927
  confirm?: "create-secret" | "delete";
1847
1928
  /**
1848
- * Marks this plugin as experimental wrappers can keep it out of
1849
- * their stable build (typically by gating it behind an
1850
- * `experimental` subpath import) and the registry can badge it in
1851
- * generated docs / CLI help. No runtime capability check.
1929
+ * API stability tier this plugin belongs to. Absent means `"stable"`;
1930
+ * the registry projection normalizes it, so registry consumers always
1931
+ * read a concrete {@link StabilityLevel}. Wrappers keep non-stable
1932
+ * plugins out of their stable build (by gating them behind a `beta` /
1933
+ * `experimental` subpath import) and consumers badge the level in
1934
+ * generated docs, CLI help, and MCP tool descriptions. No runtime
1935
+ * capability check.
1936
+ */
1937
+ stability?: StabilityLevel;
1938
+ /**
1939
+ * @deprecated Use `stability: "experimental"` instead. Kept as an
1940
+ * input for external authors; `true` normalizes to
1941
+ * `stability: "experimental"` in the registry projection.
1852
1942
  */
1853
1943
  experimental?: boolean;
1854
1944
  [key: string]: any;
@@ -2541,9 +2631,11 @@ declare function declareOptionalMethod<const TId extends string, TInput = unknow
2541
2631
  optional: true;
2542
2632
  } & PluginSummary<never, never>;
2543
2633
  /**
2544
- * Define a property leaf. Either a static `value` or a computed `get` (eager,
2545
- * dependencies first, like `setup`). `createSdk`, a dependent's `imports`, or
2546
- * an aggregate's re-export binds it under its bare `name` and yields the value.
2634
+ * Define a property leaf. Either a static `value` or a computed `get`, which
2635
+ * re-runs live on each read; an optional `setup` runs once at `createSdk`
2636
+ * (dependencies first, like a method's `setup`) to build the state `get` reads.
2637
+ * `createSdk`, a dependent's `imports`, or an aggregate's re-export binds it
2638
+ * under its bare `name` and yields the value.
2547
2639
  */
2548
2640
  declare function defineProperty<const TName extends string, TValue, const TNamespace extends string = "">(config: {
2549
2641
  name: TName;
@@ -2565,6 +2657,13 @@ declare function defineProperty<const TName extends string, TValue, const TImpor
2565
2657
  get: (bag: {
2566
2658
  imports: ImportsOf<TImports>;
2567
2659
  state: TState;
2660
+ /** The live per-call context when the property is read from a method's
2661
+ * `imports` bag — every method call has one, at any depth. Undefined only
2662
+ * where no call is in flight: the property bound onto the SDK object
2663
+ * itself, and reads from a `setup`-time imports bag. A context-aware
2664
+ * property reads its `callId` off this; because its value is then specific
2665
+ * to the reading call, callers must not cache it across calls. */
2666
+ callContext?: CallContext;
2568
2667
  }) => TValue;
2569
2668
  /** Templated registry members for this property's dynamic sub-surface (e.g.
2570
2669
  * a proxy): each a bodyless declaration keyed by `path` instead of `name`. */
@@ -2928,6 +3027,16 @@ interface DeprecationWarning {
2928
3027
  * once-per-process per message.
2929
3028
  */
2930
3029
  declare function defaultLogDeprecation({ methodName, deprecation, }: DeprecationWarning): void;
3030
+ /**
3031
+ * What the boundary reports when a non-stable (beta / experimental) method
3032
+ * is called: the method plus its declared level. `DeprecationWarning`'s
3033
+ * sibling — same self-describing shape, same handler-not-observer contract.
3034
+ */
3035
+ interface StabilityNotice {
3036
+ type: "stability";
3037
+ methodName: string;
3038
+ stability: StabilityLevel;
3039
+ }
2931
3040
  /**
2932
3041
  * The well-known id for framework options: heads inject a `CoreOptions` bag
2933
3042
  * under it via `createSdk`'s `configuration` (or register a property plugin),
@@ -2964,6 +3073,16 @@ interface CoreOptions {
2964
3073
  * reserved for an `on*`-named observer when the unified event bus lands.
2965
3074
  */
2966
3075
  logDeprecation?: (warning: DeprecationWarning) => void;
3076
+ /**
3077
+ * `logDeprecation`'s sibling for API stability: the framework signals
3078
+ * every surface call of a method declaring a non-stable `stability`
3079
+ * level (beta / experimental), and this gate decides what happens.
3080
+ * Exactly one: absent falls back to {@link defaultLogStabilityNotice}
3081
+ * (once-per-process per message), supplied replaces it. Runs isolated,
3082
+ * so a throwing handler never breaks the observed call. Internal
3083
+ * delegation never signals, matching the deprecation contract.
3084
+ */
3085
+ logStabilityNotice?: (notice: StabilityNotice) => void;
2967
3086
  /**
2968
3087
  * Report what output validation stripped, on the response's
2969
3088
  * `meta.outputValidation.droppedPaths` (the name mirrors that path). Off by
@@ -3527,6 +3646,8 @@ declare function createFunction<TOptions, TResult, TSchemaOptions extends TOptio
3527
3646
  annotator?: (input: unknown) => Annotations;
3528
3647
  /** Live read of the method's deprecation meta (see signalDeprecation). */
3529
3648
  getDeprecation?: () => FunctionDeprecation | undefined;
3649
+ /** Live read of the method's stability level (see signalStability). */
3650
+ getStability?: () => StabilityLevel | undefined;
3530
3651
  }): (callOptions?: TOptions) => Promise<TResult>;
3531
3652
  /**
3532
3653
  * Higher-order function that creates a paginated function that wraps
@@ -3567,6 +3688,8 @@ declare function createPaginatedFunction<TUserOptions, TResponse, TItem = ItemTy
3567
3688
  finalizePage?: (page: SdkPage<TItem>) => SdkPage<TItem>;
3568
3689
  /** Live read of the method's deprecation meta (see signalDeprecation). */
3569
3690
  getDeprecation?: () => FunctionDeprecation | undefined;
3691
+ /** Live read of the method's stability level (see signalStability). */
3692
+ getStability?: () => StabilityLevel | undefined;
3570
3693
  }): (options?: TUserOptions & {
3571
3694
  cursor?: string;
3572
3695
  pageSize?: number;
@@ -3808,6 +3931,16 @@ interface DeprecationLogger {
3808
3931
  * channels while sharing the implementation.
3809
3932
  */
3810
3933
  declare function createDeprecationLogger(tag: string): DeprecationLogger;
3934
+ interface StabilityNoticeLogger {
3935
+ logStabilityNotice(message: string): void;
3936
+ resetStabilityNotices(): void;
3937
+ }
3938
+ /**
3939
+ * Create a package-tagged stability-notice logger: the deprecation logger's
3940
+ * sibling for non-stable (beta / experimental) API warnings, with the same
3941
+ * once-per-process dedupe policy and its own independent message Set.
3942
+ */
3943
+ declare function createStabilityNoticeLogger(tag: string): StabilityNoticeLogger;
3811
3944
 
3812
3945
  /**
3813
3946
  * Core signal machinery.
@@ -4235,4 +4368,4 @@ declare const normalizeConnectionPlugin: MethodPlugin<"normalizeConnection", Nor
4235
4368
  */
4236
4369
  declare const resolveConnectionPlugin: MethodPlugin<"resolveConnection", ResolveConnectionInput, string | undefined, readonly []> & LeafSummary<"kitcore", "resolveConnection", readonly []>;
4237
4370
 
4238
- export { type AdaptError, type AdaptErrorOptions, type AdaptPage, type AggregatePlugin, type Annotations, type ArrayResolver$1 as ArrayResolver, type AsyncContext, type AttemptHttpRequestInput, type AuthorizeHttpRequestInput, type BoundFormatter, type BoundResolver, CONTEXT, CORE_ERROR_SYMBOL, CORE_OPTIONS_ID, CORE_SIGNAL_SYMBOL, type CallContext, type CallOrigin, type CategoryDefinition, type ComposedAnnotator, type ConstantResolver$1 as ConstantResolver, type Controller, type ControllerAction, type ControllerAffordance, type ControllerAnswerFn, type ControllerChoice, type ControllerError, type ControllerIssue, type ControllerListingPage, type ControllerListingPosition, type ControllerMethodDescription, type ControllerMethodSummary, type ControllerPagination, type ControllerParameterDescription, type ControllerPath, type ControllerQuestion, type ControllerResult, type ControllerSdk, type ControllerSelectPage, type ControllerState, type CoreApiError, CoreCancelledSignal, CoreDisposeError, CoreError, CoreErrorCode, type CoreErrorOptions, type CoreOptions, CoreSignal, type CreateSdkOptions, type DefaultConnectionSchemeInput, type DeprecatedPromptConfigChoice, type DeprecationLogger, type DeprecationWarning, type DispatchHttpRequestInput, type DisposeFn, type DynamicListResolver, type DynamicMember, type DynamicResolver$1 as DynamicResolver, type DynamicSearchResolver, type FieldsResolver, type FormattedItem, type Formatter, type FunctionDeprecation, type FunctionRegistryEntry, type HookAnnotator, type HookPlugin, type HttpAttemptContext, type HttpFetchInit, type HttpOperationContext, type HttpOperationStart, type HttpPipelineState, type HttpRequest, type HttpRequestInput, type HttpResponse, type InitializeHttpRequestInput, type LeafMeta, type LeafSummary, type LegacyMergePlugin, type LegacyPlugin, type ListItemsResult, type ListPromptConfig, type MethodAnnotator, type MethodAttachment, type MethodHooks, type MethodOverridePlugin, type MethodPlugin, type MethodScope, type Resolver as ModelResolver, type NegatableMetadata, type NormalizeConnectionInput, type NormalizedConnection, type OnMethodEnd, type OnMethodEndContext, type OnMethodStart, type OnMethodStartContext, type OutputFormatter, type PaginatedSdkFunction, type PaginatedSdkResult, type Plugin, type PluginMeta, type PluginProvides, type PluginStack, type PluginSummary, type PluginSurface, type PositionalMetadata, type PrepareHttpRequestInput, type PromptConfig, type PromptConfigChoice, type PropertyPlugin, RETRY_HTTP_REQUEST_OPTIONS_ID, type ReceiveHttpResponseInput, type RegistryResult, type RequiredSdkOf, type ResolveConnectionInput, type Resolver$1 as Resolver, type ResolverConfig, type ResolverFieldItem, type ResolverMetadata, type ResolverPromptConfig, type ResolverType, type ResponseMeta, type RetryHttpRequestOptions, type Sdk, type SdkContext, type SdkPage, type SendHttpRequest, type StaticResolver$1 as StaticResolver, type ValidResolvers, addPlugin, attemptHttpRequestPlugin, authorizeHttpRequestPlugin, canonicalInputSchema, composePlugins, concatLists, concatPaginated, coreOptionsPluginRef, createAsyncContext, createController, createCoreError, createCorePlugin, createDeprecationLogger, createFunction, createPaginatedFunction, createPaginatedPluginMethod, createPluginMethod, createPluginStack, createPrefixedCursor, createSdk, createValidator, dangerousContextPlugin, declareDefault, declareMethod, declareOptionalMethod, declareOptionalProperty, declarePlugin, declareProperty, decodeIncomingCursor, defaultConnectionSchemePlugin, defaultLogDeprecation, defineFormatter, defineHook, defineLegacyMerge, defineMethod, defineMethodOverride, definePlugin, defineProperty, defineResolver, dispatchHttpRequestPlugin, disposeSdk, fetchPlugin, fromFunctionPlugin, getContext, getCoreErrorCause, getCoreErrorCode, getCurrentDepth, getCurrentScope, getFieldDescriptions, getNegatable, getOutputSchema, getRegistryPlugin, getSchemaDescription, initializeHttpRequestPlugin, isCoreCancelledSignal, isCoreError, isCoreSignal, isNestedMethodCall, isPositional, isTelemetryNested, normalizeConnectionPlugin, omitExports, openEnum, paginate, paginateBuffered, paginateMaxItems, prepareHttpRequestPlugin, receiveHttpResponsePlugin, redactHeaders, redactHttpRequest, resolveConnectionPlugin, resolvePlugin, retryHttpRequestOptionsPluginRef, retryHttpRequestPlugin, runInMethodScope, runWithTelemetryContext, selectExports, sendHttpRequestPlugin, splitPrefixedCursor, toIterable, toSnakeCase, toTitleCase, validateOptions, withOutputSchema, withPositional, withResolver };
4371
+ export { type AdaptError, type AdaptErrorOptions, type AdaptPage, type AggregatePlugin, type Annotations, type ArrayResolver$1 as ArrayResolver, type AsyncContext, type AttemptHttpRequestInput, type AuthorizeHttpRequestInput, type BoundFormatter, type BoundResolver, CONTEXT, CORE_ERROR_SYMBOL, CORE_OPTIONS_ID, CORE_SIGNAL_SYMBOL, type CallContext, type CallOrigin, type CategoryDefinition, type ComposedAnnotator, type ConstantResolver$1 as ConstantResolver, type Controller, type ControllerAction, type ControllerAffordance, type ControllerAnswerFn, type ControllerChoice, type ControllerError, type ControllerIssue, type ControllerListingPage, type ControllerListingPosition, type ControllerMethodDescription, type ControllerMethodSummary, type ControllerPagination, type ControllerParameterDescription, type ControllerPath, type ControllerQuestion, type ControllerResult, type ControllerSdk, type ControllerSelectPage, type ControllerState, type CoreApiError, CoreCancelledSignal, CoreDisposeError, CoreError, CoreErrorCode, type CoreErrorOptions, type CoreOptions, CoreSignal, type CreateSdkOptions, type DefaultConnectionSchemeInput, type DeprecatedPromptConfigChoice, type DeprecationLogger, type DeprecationWarning, type DispatchHttpRequestInput, type DisposeFn, type DynamicListResolver, type DynamicMember, type DynamicResolver$1 as DynamicResolver, type DynamicSearchResolver, type FieldsResolver, type FormattedItem, type Formatter, type FunctionDeprecation, type FunctionRegistryEntry, type HookAnnotator, type HookPlugin, type HttpAttemptContext, type HttpFetchInit, type HttpOperationContext, type HttpOperationStart, type HttpPipelineState, type HttpRequest, type HttpRequestInput, type HttpResponse, type InitializeHttpRequestInput, type LeafMeta, type LeafSummary, type LegacyMergePlugin, type LegacyPlugin, type ListItemsResult, type ListPromptConfig, type MethodAnnotator, type MethodAttachment, type MethodHooks, type MethodOverridePlugin, type MethodPlugin, type MethodScope, type Resolver as ModelResolver, type NegatableMetadata, type NormalizeConnectionInput, type NormalizedConnection, type OnMethodEnd, type OnMethodEndContext, type OnMethodStart, type OnMethodStartContext, type OutputFormatter, type PaginatedSdkFunction, type PaginatedSdkResult, type Plugin, type PluginMeta, type PluginProvides, type PluginStack, type PluginSummary, type PluginSurface, type PositionalMetadata, type PrepareHttpRequestInput, type PromptConfig, type PromptConfigChoice, type PropertyPlugin, RETRY_HTTP_REQUEST_OPTIONS_ID, type ReceiveHttpResponseInput, type RegistryResult, type RequiredSdkOf, type ResolveConnectionInput, type Resolver$1 as Resolver, type ResolverConfig, type ResolverFieldItem, type ResolverMetadata, type ResolverPromptConfig, type ResolverType, type ResponseMeta, type RetryHttpRequestOptions, STABILITY_LEVELS, STABILITY_TITLES, type Sdk, type SdkContext, type SdkPage, type SendHttpRequest, type StabilityLevel, type StabilityNotice, type StabilityNoticeLogger, type StaticResolver$1 as StaticResolver, type ValidResolvers, addPlugin, applyStabilityLabel, attemptHttpRequestPlugin, authorizeHttpRequestPlugin, canonicalInputSchema, composePlugins, concatLists, concatPaginated, coreOptionsPluginRef, createAsyncContext, createController, createCoreError, createCorePlugin, createDeprecationLogger, createFunction, createPaginatedFunction, createPaginatedPluginMethod, createPluginMethod, createPluginStack, createPrefixedCursor, createSdk, createStabilityNoticeLogger, createValidator, dangerousContextPlugin, declareDefault, declareMethod, declareOptionalMethod, declareOptionalProperty, declarePlugin, declareProperty, decodeIncomingCursor, defaultConnectionSchemePlugin, defaultLogDeprecation, defineFormatter, defineHook, defineLegacyMerge, defineMethod, defineMethodOverride, definePlugin, defineProperty, defineResolver, dispatchHttpRequestPlugin, disposeSdk, fetchPlugin, fromFunctionPlugin, getContext, getCoreErrorCause, getCoreErrorCode, getCurrentDepth, getCurrentScope, getFieldDescriptions, getNegatable, getOutputSchema, getRegistryPlugin, getSchemaDescription, initializeHttpRequestPlugin, isCoreCancelledSignal, isCoreError, isCoreSignal, isNestedMethodCall, isPositional, isTelemetryNested, normalizeConnectionPlugin, normalizeStability, omitExports, openEnum, paginate, paginateBuffered, paginateMaxItems, prepareHttpRequestPlugin, receiveHttpResponsePlugin, redactHeaders, redactHttpRequest, resolveConnectionPlugin, resolvePlugin, retryHttpRequestOptionsPluginRef, retryHttpRequestPlugin, runInMethodScope, runWithTelemetryContext, selectExports, sendHttpRequestPlugin, splitPrefixedCursor, toIterable, toSnakeCase, toTitleCase, validateOptions, withOutputSchema, withPositional, withResolver };
package/dist/index.d.ts CHANGED
@@ -222,6 +222,72 @@ interface MethodHooks {
222
222
  annotator?: ComposedAnnotator;
223
223
  }
224
224
 
225
+ /**
226
+ * API stability tiers.
227
+ *
228
+ * A plugin declares exactly one level via `PluginMeta.stability`; tier
229
+ * membership (which subpath aggregate exports the plugin) is structural,
230
+ * so nothing here compares levels ordinally. The array is the single
231
+ * source of truth: it derives the {@link StabilityLevel} type, gives the
232
+ * ladder tests their adjacent-tier iteration order, and gives docs a
233
+ * render order.
234
+ */
235
+ declare const STABILITY_LEVELS: readonly ["stable", "beta", "experimental"];
236
+ type StabilityLevel = (typeof STABILITY_LEVELS)[number];
237
+ /**
238
+ * Title-case display names for each level, for section-level badges in
239
+ * generated docs (e.g. `Code Workflows (Beta)`). Inline description
240
+ * labels go through {@link applyStabilityLabel} instead.
241
+ */
242
+ declare const STABILITY_TITLES: {
243
+ readonly stable: "Stable";
244
+ readonly beta: "Beta";
245
+ readonly experimental: "Experimental";
246
+ };
247
+ /**
248
+ * Normalize authored meta to a concrete level: absent means `"stable"`,
249
+ * and the deprecated `experimental: true` boolean means `"experimental"`.
250
+ * The registry projection runs every entry through this, so
251
+ * `FunctionRegistryEntry.stability` is always concrete and consumers
252
+ * never branch on `undefined`.
253
+ *
254
+ * The declared value can cross a JSON boundary from a hand-written
255
+ * plugin, so at runtime it may be any string. An unrecognized level
256
+ * clamps to `"experimental"` — the author declared the method not
257
+ * stable, and clamping keeps the raw string out of notices and labels.
258
+ * It doesn't throw because this also runs in the `getStability` live
259
+ * read on the call path, where a throw would break the observed call.
260
+ */
261
+ declare function normalizeStability(meta: {
262
+ stability?: StabilityLevel;
263
+ experimental?: boolean;
264
+ }): StabilityLevel;
265
+ /**
266
+ * The shared label renderer: every consumer that renders a registry
267
+ * entry's description (CLI help, MCP tool descriptions) labels it
268
+ * through this function, so a new consumer cannot silently drop the
269
+ * label. `stability` stays structured data on the registry entry — the
270
+ * label is applied at render time, never baked into the stored
271
+ * description (docs badge at the section level, so baking it in would
272
+ * double-badge).
273
+ *
274
+ * The label follows the plugin's declared level, not the subpath that
275
+ * surfaced it: a beta method surfaced through an experimental-tier
276
+ * consumer still reads "(beta)".
277
+ */
278
+ declare function applyStabilityLabel({ description, stability, placement, }: {
279
+ description: string;
280
+ /** Absent means stable (the value may arrive from outside the
281
+ * normalized registry projection, e.g. hand-built JSON). */
282
+ stability: StabilityLevel | undefined;
283
+ /**
284
+ * `"suffix"` renders `<description> (beta)` (CLI help);
285
+ * `"prefix"` renders `[Beta] <description>` (MCP tool descriptions,
286
+ * where the front of the string is what an LLM reads first).
287
+ */
288
+ placement?: "suffix" | "prefix";
289
+ }): string;
290
+
225
291
  /**
226
292
  * Plugins with a required-parameter rename declare two schemas: a canonical one
227
293
  * (new names only, carrying `.meta({ aliases })`) and a `z.union([canonical,
@@ -562,6 +628,8 @@ interface LeafMetaFields {
562
628
  * off the registry / CLI / MCP surface, exactly like `skipInputValidation`. */
563
629
  skipOutputValidation?: boolean;
564
630
  packages?: string[];
631
+ stability?: StabilityLevel;
632
+ /** @deprecated Use `stability: "experimental"` instead. */
565
633
  experimental?: boolean;
566
634
  confirm?: "create-secret" | "delete";
567
635
  deprecation?: FunctionDeprecation;
@@ -1195,10 +1263,10 @@ type DataOf<TResponse> = TResponse extends {
1195
1263
  } ? TData : never;
1196
1264
  /**
1197
1265
  * A leaf plugin that is a single value (not a function). `value` is a static
1198
- * constant; `get({ imports })` computes the value from imports. Like a
1199
- * method's `setup`, `get` runs eagerly at createSdk (dependencies first), so a
1200
- * module-level value is built on import. An imported/surfaced property yields
1201
- * the value, not a callable.
1266
+ * constant; `get({ imports, state })` computes the value from imports and
1267
+ * `setup` state, re-running live on each read. An optional `setup` runs once
1268
+ * eagerly at createSdk (dependencies first, like a method's `setup`) to build
1269
+ * that state. An imported/surfaced property yields the value, not a callable.
1202
1270
  */
1203
1271
  interface PropertyPlugin<TName extends string = string, TValue = unknown> {
1204
1272
  pluginType: "property";
@@ -1238,6 +1306,7 @@ interface PropertyPlugin<TName extends string = string, TValue = unknown> {
1238
1306
  get?: (bag: {
1239
1307
  imports: Record<string, unknown>;
1240
1308
  state: unknown;
1309
+ callContext?: CallContext;
1241
1310
  }) => TValue;
1242
1311
  /** Descriptive metadata for the registry / CLI / MCP / docs (carry-only). */
1243
1312
  meta?: LeafMeta;
@@ -1480,7 +1549,10 @@ interface PropertyEntry {
1480
1549
  pluginType: "property";
1481
1550
  name: string;
1482
1551
  value?: any;
1483
- getValue?: () => any;
1552
+ /** Re-derives the value per read. Receives the live per-call `CallContext`
1553
+ * when installed on a method's `imports` bag with a threaded context, and
1554
+ * nothing on a surface / build-time read. */
1555
+ getValue?: (callContext?: CallContext) => any;
1484
1556
  /** Carried from the descriptor for the registry / CLI / MCP / docs. */
1485
1557
  meta?: LeafMeta;
1486
1558
  /** Carried from the descriptor: templated registry members for this
@@ -1748,8 +1820,17 @@ interface FunctionRegistryEntry {
1748
1820
  resolvers?: Record<string, BoundResolver>;
1749
1821
  packages?: string[];
1750
1822
  /**
1751
- * True if the plugin is registered only in the experimental SDK
1752
- * factory. See `PluginMeta.experimental`.
1823
+ * API stability tier of the plugin, normalized from `PluginMeta.stability`
1824
+ * (absent means `"stable"`; the legacy `experimental: true` boolean means
1825
+ * `"experimental"`). Always concrete here, so consumers never branch on
1826
+ * `undefined`.
1827
+ */
1828
+ stability: StabilityLevel;
1829
+ /**
1830
+ * @deprecated Read `stability` instead. Derived as
1831
+ * `stability === "experimental"` — literal by name, so beta reads
1832
+ * `false`; the not-stable warning duty lives in `stability` and the
1833
+ * runtime stability notice.
1753
1834
  */
1754
1835
  experimental?: boolean;
1755
1836
  /** Confirmation prompt type - prompts user before executing */
@@ -1845,10 +1926,19 @@ interface PluginMeta<TSdk = unknown> {
1845
1926
  /** Confirmation prompt type - prompts user before executing */
1846
1927
  confirm?: "create-secret" | "delete";
1847
1928
  /**
1848
- * Marks this plugin as experimental wrappers can keep it out of
1849
- * their stable build (typically by gating it behind an
1850
- * `experimental` subpath import) and the registry can badge it in
1851
- * generated docs / CLI help. No runtime capability check.
1929
+ * API stability tier this plugin belongs to. Absent means `"stable"`;
1930
+ * the registry projection normalizes it, so registry consumers always
1931
+ * read a concrete {@link StabilityLevel}. Wrappers keep non-stable
1932
+ * plugins out of their stable build (by gating them behind a `beta` /
1933
+ * `experimental` subpath import) and consumers badge the level in
1934
+ * generated docs, CLI help, and MCP tool descriptions. No runtime
1935
+ * capability check.
1936
+ */
1937
+ stability?: StabilityLevel;
1938
+ /**
1939
+ * @deprecated Use `stability: "experimental"` instead. Kept as an
1940
+ * input for external authors; `true` normalizes to
1941
+ * `stability: "experimental"` in the registry projection.
1852
1942
  */
1853
1943
  experimental?: boolean;
1854
1944
  [key: string]: any;
@@ -2541,9 +2631,11 @@ declare function declareOptionalMethod<const TId extends string, TInput = unknow
2541
2631
  optional: true;
2542
2632
  } & PluginSummary<never, never>;
2543
2633
  /**
2544
- * Define a property leaf. Either a static `value` or a computed `get` (eager,
2545
- * dependencies first, like `setup`). `createSdk`, a dependent's `imports`, or
2546
- * an aggregate's re-export binds it under its bare `name` and yields the value.
2634
+ * Define a property leaf. Either a static `value` or a computed `get`, which
2635
+ * re-runs live on each read; an optional `setup` runs once at `createSdk`
2636
+ * (dependencies first, like a method's `setup`) to build the state `get` reads.
2637
+ * `createSdk`, a dependent's `imports`, or an aggregate's re-export binds it
2638
+ * under its bare `name` and yields the value.
2547
2639
  */
2548
2640
  declare function defineProperty<const TName extends string, TValue, const TNamespace extends string = "">(config: {
2549
2641
  name: TName;
@@ -2565,6 +2657,13 @@ declare function defineProperty<const TName extends string, TValue, const TImpor
2565
2657
  get: (bag: {
2566
2658
  imports: ImportsOf<TImports>;
2567
2659
  state: TState;
2660
+ /** The live per-call context when the property is read from a method's
2661
+ * `imports` bag — every method call has one, at any depth. Undefined only
2662
+ * where no call is in flight: the property bound onto the SDK object
2663
+ * itself, and reads from a `setup`-time imports bag. A context-aware
2664
+ * property reads its `callId` off this; because its value is then specific
2665
+ * to the reading call, callers must not cache it across calls. */
2666
+ callContext?: CallContext;
2568
2667
  }) => TValue;
2569
2668
  /** Templated registry members for this property's dynamic sub-surface (e.g.
2570
2669
  * a proxy): each a bodyless declaration keyed by `path` instead of `name`. */
@@ -2928,6 +3027,16 @@ interface DeprecationWarning {
2928
3027
  * once-per-process per message.
2929
3028
  */
2930
3029
  declare function defaultLogDeprecation({ methodName, deprecation, }: DeprecationWarning): void;
3030
+ /**
3031
+ * What the boundary reports when a non-stable (beta / experimental) method
3032
+ * is called: the method plus its declared level. `DeprecationWarning`'s
3033
+ * sibling — same self-describing shape, same handler-not-observer contract.
3034
+ */
3035
+ interface StabilityNotice {
3036
+ type: "stability";
3037
+ methodName: string;
3038
+ stability: StabilityLevel;
3039
+ }
2931
3040
  /**
2932
3041
  * The well-known id for framework options: heads inject a `CoreOptions` bag
2933
3042
  * under it via `createSdk`'s `configuration` (or register a property plugin),
@@ -2964,6 +3073,16 @@ interface CoreOptions {
2964
3073
  * reserved for an `on*`-named observer when the unified event bus lands.
2965
3074
  */
2966
3075
  logDeprecation?: (warning: DeprecationWarning) => void;
3076
+ /**
3077
+ * `logDeprecation`'s sibling for API stability: the framework signals
3078
+ * every surface call of a method declaring a non-stable `stability`
3079
+ * level (beta / experimental), and this gate decides what happens.
3080
+ * Exactly one: absent falls back to {@link defaultLogStabilityNotice}
3081
+ * (once-per-process per message), supplied replaces it. Runs isolated,
3082
+ * so a throwing handler never breaks the observed call. Internal
3083
+ * delegation never signals, matching the deprecation contract.
3084
+ */
3085
+ logStabilityNotice?: (notice: StabilityNotice) => void;
2967
3086
  /**
2968
3087
  * Report what output validation stripped, on the response's
2969
3088
  * `meta.outputValidation.droppedPaths` (the name mirrors that path). Off by
@@ -3527,6 +3646,8 @@ declare function createFunction<TOptions, TResult, TSchemaOptions extends TOptio
3527
3646
  annotator?: (input: unknown) => Annotations;
3528
3647
  /** Live read of the method's deprecation meta (see signalDeprecation). */
3529
3648
  getDeprecation?: () => FunctionDeprecation | undefined;
3649
+ /** Live read of the method's stability level (see signalStability). */
3650
+ getStability?: () => StabilityLevel | undefined;
3530
3651
  }): (callOptions?: TOptions) => Promise<TResult>;
3531
3652
  /**
3532
3653
  * Higher-order function that creates a paginated function that wraps
@@ -3567,6 +3688,8 @@ declare function createPaginatedFunction<TUserOptions, TResponse, TItem = ItemTy
3567
3688
  finalizePage?: (page: SdkPage<TItem>) => SdkPage<TItem>;
3568
3689
  /** Live read of the method's deprecation meta (see signalDeprecation). */
3569
3690
  getDeprecation?: () => FunctionDeprecation | undefined;
3691
+ /** Live read of the method's stability level (see signalStability). */
3692
+ getStability?: () => StabilityLevel | undefined;
3570
3693
  }): (options?: TUserOptions & {
3571
3694
  cursor?: string;
3572
3695
  pageSize?: number;
@@ -3808,6 +3931,16 @@ interface DeprecationLogger {
3808
3931
  * channels while sharing the implementation.
3809
3932
  */
3810
3933
  declare function createDeprecationLogger(tag: string): DeprecationLogger;
3934
+ interface StabilityNoticeLogger {
3935
+ logStabilityNotice(message: string): void;
3936
+ resetStabilityNotices(): void;
3937
+ }
3938
+ /**
3939
+ * Create a package-tagged stability-notice logger: the deprecation logger's
3940
+ * sibling for non-stable (beta / experimental) API warnings, with the same
3941
+ * once-per-process dedupe policy and its own independent message Set.
3942
+ */
3943
+ declare function createStabilityNoticeLogger(tag: string): StabilityNoticeLogger;
3811
3944
 
3812
3945
  /**
3813
3946
  * Core signal machinery.
@@ -4235,4 +4368,4 @@ declare const normalizeConnectionPlugin: MethodPlugin<"normalizeConnection", Nor
4235
4368
  */
4236
4369
  declare const resolveConnectionPlugin: MethodPlugin<"resolveConnection", ResolveConnectionInput, string | undefined, readonly []> & LeafSummary<"kitcore", "resolveConnection", readonly []>;
4237
4370
 
4238
- export { type AdaptError, type AdaptErrorOptions, type AdaptPage, type AggregatePlugin, type Annotations, type ArrayResolver$1 as ArrayResolver, type AsyncContext, type AttemptHttpRequestInput, type AuthorizeHttpRequestInput, type BoundFormatter, type BoundResolver, CONTEXT, CORE_ERROR_SYMBOL, CORE_OPTIONS_ID, CORE_SIGNAL_SYMBOL, type CallContext, type CallOrigin, type CategoryDefinition, type ComposedAnnotator, type ConstantResolver$1 as ConstantResolver, type Controller, type ControllerAction, type ControllerAffordance, type ControllerAnswerFn, type ControllerChoice, type ControllerError, type ControllerIssue, type ControllerListingPage, type ControllerListingPosition, type ControllerMethodDescription, type ControllerMethodSummary, type ControllerPagination, type ControllerParameterDescription, type ControllerPath, type ControllerQuestion, type ControllerResult, type ControllerSdk, type ControllerSelectPage, type ControllerState, type CoreApiError, CoreCancelledSignal, CoreDisposeError, CoreError, CoreErrorCode, type CoreErrorOptions, type CoreOptions, CoreSignal, type CreateSdkOptions, type DefaultConnectionSchemeInput, type DeprecatedPromptConfigChoice, type DeprecationLogger, type DeprecationWarning, type DispatchHttpRequestInput, type DisposeFn, type DynamicListResolver, type DynamicMember, type DynamicResolver$1 as DynamicResolver, type DynamicSearchResolver, type FieldsResolver, type FormattedItem, type Formatter, type FunctionDeprecation, type FunctionRegistryEntry, type HookAnnotator, type HookPlugin, type HttpAttemptContext, type HttpFetchInit, type HttpOperationContext, type HttpOperationStart, type HttpPipelineState, type HttpRequest, type HttpRequestInput, type HttpResponse, type InitializeHttpRequestInput, type LeafMeta, type LeafSummary, type LegacyMergePlugin, type LegacyPlugin, type ListItemsResult, type ListPromptConfig, type MethodAnnotator, type MethodAttachment, type MethodHooks, type MethodOverridePlugin, type MethodPlugin, type MethodScope, type Resolver as ModelResolver, type NegatableMetadata, type NormalizeConnectionInput, type NormalizedConnection, type OnMethodEnd, type OnMethodEndContext, type OnMethodStart, type OnMethodStartContext, type OutputFormatter, type PaginatedSdkFunction, type PaginatedSdkResult, type Plugin, type PluginMeta, type PluginProvides, type PluginStack, type PluginSummary, type PluginSurface, type PositionalMetadata, type PrepareHttpRequestInput, type PromptConfig, type PromptConfigChoice, type PropertyPlugin, RETRY_HTTP_REQUEST_OPTIONS_ID, type ReceiveHttpResponseInput, type RegistryResult, type RequiredSdkOf, type ResolveConnectionInput, type Resolver$1 as Resolver, type ResolverConfig, type ResolverFieldItem, type ResolverMetadata, type ResolverPromptConfig, type ResolverType, type ResponseMeta, type RetryHttpRequestOptions, type Sdk, type SdkContext, type SdkPage, type SendHttpRequest, type StaticResolver$1 as StaticResolver, type ValidResolvers, addPlugin, attemptHttpRequestPlugin, authorizeHttpRequestPlugin, canonicalInputSchema, composePlugins, concatLists, concatPaginated, coreOptionsPluginRef, createAsyncContext, createController, createCoreError, createCorePlugin, createDeprecationLogger, createFunction, createPaginatedFunction, createPaginatedPluginMethod, createPluginMethod, createPluginStack, createPrefixedCursor, createSdk, createValidator, dangerousContextPlugin, declareDefault, declareMethod, declareOptionalMethod, declareOptionalProperty, declarePlugin, declareProperty, decodeIncomingCursor, defaultConnectionSchemePlugin, defaultLogDeprecation, defineFormatter, defineHook, defineLegacyMerge, defineMethod, defineMethodOverride, definePlugin, defineProperty, defineResolver, dispatchHttpRequestPlugin, disposeSdk, fetchPlugin, fromFunctionPlugin, getContext, getCoreErrorCause, getCoreErrorCode, getCurrentDepth, getCurrentScope, getFieldDescriptions, getNegatable, getOutputSchema, getRegistryPlugin, getSchemaDescription, initializeHttpRequestPlugin, isCoreCancelledSignal, isCoreError, isCoreSignal, isNestedMethodCall, isPositional, isTelemetryNested, normalizeConnectionPlugin, omitExports, openEnum, paginate, paginateBuffered, paginateMaxItems, prepareHttpRequestPlugin, receiveHttpResponsePlugin, redactHeaders, redactHttpRequest, resolveConnectionPlugin, resolvePlugin, retryHttpRequestOptionsPluginRef, retryHttpRequestPlugin, runInMethodScope, runWithTelemetryContext, selectExports, sendHttpRequestPlugin, splitPrefixedCursor, toIterable, toSnakeCase, toTitleCase, validateOptions, withOutputSchema, withPositional, withResolver };
4371
+ export { type AdaptError, type AdaptErrorOptions, type AdaptPage, type AggregatePlugin, type Annotations, type ArrayResolver$1 as ArrayResolver, type AsyncContext, type AttemptHttpRequestInput, type AuthorizeHttpRequestInput, type BoundFormatter, type BoundResolver, CONTEXT, CORE_ERROR_SYMBOL, CORE_OPTIONS_ID, CORE_SIGNAL_SYMBOL, type CallContext, type CallOrigin, type CategoryDefinition, type ComposedAnnotator, type ConstantResolver$1 as ConstantResolver, type Controller, type ControllerAction, type ControllerAffordance, type ControllerAnswerFn, type ControllerChoice, type ControllerError, type ControllerIssue, type ControllerListingPage, type ControllerListingPosition, type ControllerMethodDescription, type ControllerMethodSummary, type ControllerPagination, type ControllerParameterDescription, type ControllerPath, type ControllerQuestion, type ControllerResult, type ControllerSdk, type ControllerSelectPage, type ControllerState, type CoreApiError, CoreCancelledSignal, CoreDisposeError, CoreError, CoreErrorCode, type CoreErrorOptions, type CoreOptions, CoreSignal, type CreateSdkOptions, type DefaultConnectionSchemeInput, type DeprecatedPromptConfigChoice, type DeprecationLogger, type DeprecationWarning, type DispatchHttpRequestInput, type DisposeFn, type DynamicListResolver, type DynamicMember, type DynamicResolver$1 as DynamicResolver, type DynamicSearchResolver, type FieldsResolver, type FormattedItem, type Formatter, type FunctionDeprecation, type FunctionRegistryEntry, type HookAnnotator, type HookPlugin, type HttpAttemptContext, type HttpFetchInit, type HttpOperationContext, type HttpOperationStart, type HttpPipelineState, type HttpRequest, type HttpRequestInput, type HttpResponse, type InitializeHttpRequestInput, type LeafMeta, type LeafSummary, type LegacyMergePlugin, type LegacyPlugin, type ListItemsResult, type ListPromptConfig, type MethodAnnotator, type MethodAttachment, type MethodHooks, type MethodOverridePlugin, type MethodPlugin, type MethodScope, type Resolver as ModelResolver, type NegatableMetadata, type NormalizeConnectionInput, type NormalizedConnection, type OnMethodEnd, type OnMethodEndContext, type OnMethodStart, type OnMethodStartContext, type OutputFormatter, type PaginatedSdkFunction, type PaginatedSdkResult, type Plugin, type PluginMeta, type PluginProvides, type PluginStack, type PluginSummary, type PluginSurface, type PositionalMetadata, type PrepareHttpRequestInput, type PromptConfig, type PromptConfigChoice, type PropertyPlugin, RETRY_HTTP_REQUEST_OPTIONS_ID, type ReceiveHttpResponseInput, type RegistryResult, type RequiredSdkOf, type ResolveConnectionInput, type Resolver$1 as Resolver, type ResolverConfig, type ResolverFieldItem, type ResolverMetadata, type ResolverPromptConfig, type ResolverType, type ResponseMeta, type RetryHttpRequestOptions, STABILITY_LEVELS, STABILITY_TITLES, type Sdk, type SdkContext, type SdkPage, type SendHttpRequest, type StabilityLevel, type StabilityNotice, type StabilityNoticeLogger, type StaticResolver$1 as StaticResolver, type ValidResolvers, addPlugin, applyStabilityLabel, attemptHttpRequestPlugin, authorizeHttpRequestPlugin, canonicalInputSchema, composePlugins, concatLists, concatPaginated, coreOptionsPluginRef, createAsyncContext, createController, createCoreError, createCorePlugin, createDeprecationLogger, createFunction, createPaginatedFunction, createPaginatedPluginMethod, createPluginMethod, createPluginStack, createPrefixedCursor, createSdk, createStabilityNoticeLogger, createValidator, dangerousContextPlugin, declareDefault, declareMethod, declareOptionalMethod, declareOptionalProperty, declarePlugin, declareProperty, decodeIncomingCursor, defaultConnectionSchemePlugin, defaultLogDeprecation, defineFormatter, defineHook, defineLegacyMerge, defineMethod, defineMethodOverride, definePlugin, defineProperty, defineResolver, dispatchHttpRequestPlugin, disposeSdk, fetchPlugin, fromFunctionPlugin, getContext, getCoreErrorCause, getCoreErrorCode, getCurrentDepth, getCurrentScope, getFieldDescriptions, getNegatable, getOutputSchema, getRegistryPlugin, getSchemaDescription, initializeHttpRequestPlugin, isCoreCancelledSignal, isCoreError, isCoreSignal, isNestedMethodCall, isPositional, isTelemetryNested, normalizeConnectionPlugin, normalizeStability, omitExports, openEnum, paginate, paginateBuffered, paginateMaxItems, prepareHttpRequestPlugin, receiveHttpResponsePlugin, redactHeaders, redactHttpRequest, resolveConnectionPlugin, resolvePlugin, retryHttpRequestOptionsPluginRef, retryHttpRequestPlugin, runInMethodScope, runWithTelemetryContext, selectExports, sendHttpRequestPlugin, splitPrefixedCursor, toIterable, toSnakeCase, toTitleCase, validateOptions, withOutputSchema, withPositional, withResolver };