From c5a2151fb6d13e9d4c1f6313d88d4b1df5ae9771 Mon Sep 17 00:00:00 2001 From: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Date: Sat, 5 Sep 2026 09:47:29 -0700 Subject: [PATCH 1/4] refactor(shared): remove unused helpers and private exports --- apps/web/src/sourceControlPresentation.ts | 2 -- packages/shared/src/Net.ts | 2 +- packages/shared/src/agentAwareness.ts | 4 ++-- packages/shared/src/composerTrigger.ts | 13 ------------- packages/shared/src/httpReadiness.ts | 2 +- packages/shared/src/model.ts | 9 ++------- packages/shared/src/observability.ts | 8 ++++---- packages/shared/src/orchestrationTiming.ts | 2 +- packages/shared/src/relayClient.ts | 6 +++--- packages/shared/src/remote.ts | 6 +++--- packages/shared/src/schemaJson.ts | 4 ++-- packages/shared/src/schemaYaml.ts | 12 ++++-------- packages/shared/src/sourceControl.ts | 13 +------------ packages/shared/src/usageLimits.ts | 2 +- packages/shared/src/usageMerge.ts | 6 +++--- 15 files changed, 28 insertions(+), 63 deletions(-) diff --git a/apps/web/src/sourceControlPresentation.ts b/apps/web/src/sourceControlPresentation.ts index 116f27b95f97..4e757e6954a5 100644 --- a/apps/web/src/sourceControlPresentation.ts +++ b/apps/web/src/sourceControlPresentation.ts @@ -3,8 +3,6 @@ import type { ElementType } from "react"; import type { SourceControlProviderInfo, SourceControlProviderKind } from "@t3tools/contracts"; export { DEFAULT_CHANGE_REQUEST_TERMINOLOGY, - formatChangeRequestAction, - formatCreateChangeRequestPhrase, getChangeRequestTerminology, resolveChangeRequestPresentation, type ChangeRequestPresentation, diff --git a/packages/shared/src/Net.ts b/packages/shared/src/Net.ts index 4644576296bc..984e6a38570c 100644 --- a/packages/shared/src/Net.ts +++ b/packages/shared/src/Net.ts @@ -63,7 +63,7 @@ export class NetService extends Context.Service()( "@t3tools/shared/Net/NetService", ) {} -export const make = () => { +const make = () => { /** * Returns true when a TCP server can bind to {host, port}. * `EADDRNOTAVAIL` is treated as available so IPv6-absent hosts don't fail diff --git a/packages/shared/src/agentAwareness.ts b/packages/shared/src/agentAwareness.ts index c0f5842eb7c5..59385c760be2 100644 --- a/packages/shared/src/agentAwareness.ts +++ b/packages/shared/src/agentAwareness.ts @@ -5,7 +5,7 @@ import type { ThreadId, } from "@t3tools/contracts"; -export type AgentAwarenessPhase = +type AgentAwarenessPhase = | "starting" | "running" | "waiting_for_approval" @@ -43,7 +43,7 @@ export interface ProjectThreadAwarenessInput { >; } -export function buildAgentAwarenessDeepLink(input: { +function buildAgentAwarenessDeepLink(input: { readonly environmentId: EnvironmentId; readonly threadId: ThreadId; }): string { diff --git a/packages/shared/src/composerTrigger.ts b/packages/shared/src/composerTrigger.ts index c68a9963ffa8..f29423d4419c 100644 --- a/packages/shared/src/composerTrigger.ts +++ b/packages/shared/src/composerTrigger.ts @@ -1,5 +1,4 @@ export type ComposerTriggerKind = "path" | "slash-command" | "slash-model" | "skill"; -export type ComposerSlashCommand = "model" | "plan" | "default"; export interface ComposerTrigger { kind: ComposerTriggerKind; @@ -115,18 +114,6 @@ export function detectComposerTrigger( }; } -export function parseStandaloneComposerSlashCommand( - text: string, -): Exclude | null { - const match = /^\/(plan|default)\s*$/i.exec(text.trim()); - if (!match) { - return null; - } - const command = match[1]?.toLowerCase(); - if (command === "plan") return "plan"; - return "default"; -} - export function replaceTextRange( text: string, rangeStart: number, diff --git a/packages/shared/src/httpReadiness.ts b/packages/shared/src/httpReadiness.ts index be1b3475ff3e..5aad9d488aae 100644 --- a/packages/shared/src/httpReadiness.ts +++ b/packages/shared/src/httpReadiness.ts @@ -5,7 +5,7 @@ import * as Ref from "effect/Ref"; import * as Schedule from "effect/Schedule"; import { HttpClient, HttpClientRequest } from "effect/unstable/http"; -export const DEFAULT_HTTP_READY_PROBE_TIMEOUT_MS = 1_000; +const DEFAULT_HTTP_READY_PROBE_TIMEOUT_MS = 1_000; /** * Normalizes an arbitrary readiness probe failure into a plain, structured value diff --git a/packages/shared/src/model.ts b/packages/shared/src/model.ts index 940778fba1ea..d6cb26f25be3 100644 --- a/packages/shared/src/model.ts +++ b/packages/shared/src/model.ts @@ -35,7 +35,7 @@ function getRawSelectionValueById( return selection?.value; } -export function getProviderOptionSelectionValue( +function getProviderOptionSelectionValue( selections: ReadonlyArray | null | undefined, id: string, ): string | boolean | undefined { @@ -298,11 +298,6 @@ export function readCustomModelEntries(value: unknown): CustomModelDefinition[] return entries; } -/** Slugs of a `customModels` setting, in stored order. */ -export function readCustomModelSlugs(value: unknown): string[] { - return readCustomModelEntries(value).map((entry) => entry.slug); -} - /** * Write a definition back to the compact stored shape: a bare slug when it * carries nothing custom, otherwise an entry with only the set fields. @@ -361,7 +356,7 @@ export function resolveSelectableModel( } /** Trim a string, returning null for empty/missing values. */ -export function trimOrNull(value: T | null | undefined): T | null { +function trimOrNull(value: T | null | undefined): T | null { if (typeof value !== "string") return null; const trimmed = value.trim() as T; return trimmed || null; diff --git a/packages/shared/src/observability.ts b/packages/shared/src/observability.ts index 67057c548806..be2781dd1b24 100644 --- a/packages/shared/src/observability.ts +++ b/packages/shared/src/observability.ts @@ -13,13 +13,13 @@ const textEncoder = new TextEncoder(); export type TraceAttributes = Readonly>; -export interface TraceRecordEvent { +interface TraceRecordEvent { readonly name: string; readonly timeUnixNano: string; readonly attributes: Readonly>; } -export interface TraceRecordLink { +interface TraceRecordLink { readonly traceId: string; readonly spanId: string; readonly attributes: Readonly>; @@ -40,7 +40,7 @@ interface BaseTraceRecord { readonly links: ReadonlyArray; } -export interface EffectTraceRecord extends BaseTraceRecord { +interface EffectTraceRecord extends BaseTraceRecord { readonly type: "effect-span"; readonly exit: | { @@ -303,7 +303,7 @@ export function truncateTraceAttributes(attributes: TraceAttributes): TraceAttri return truncated ?? attributes; } -export function spanToTraceRecord(span: SerializableSpan): EffectTraceRecord { +function spanToTraceRecord(span: SerializableSpan): EffectTraceRecord { const status = span.status as Extract; const parentSpanId = Option.getOrUndefined(span.parent)?.spanId; diff --git a/packages/shared/src/orchestrationTiming.ts b/packages/shared/src/orchestrationTiming.ts index 98829ae052ad..2ae82c22a691 100644 --- a/packages/shared/src/orchestrationTiming.ts +++ b/packages/shared/src/orchestrationTiming.ts @@ -28,7 +28,7 @@ export function formatDuration(durationMs: number): string { return parts.join(" "); } -export function isLatestTurnSettled( +function isLatestTurnSettled( latestTurn: LatestTurnTiming | null, session: SessionActivityState | null, ): boolean { diff --git a/packages/shared/src/relayClient.ts b/packages/shared/src/relayClient.ts index 0a56e45191c2..f62260a56d8e 100644 --- a/packages/shared/src/relayClient.ts +++ b/packages/shared/src/relayClient.ts @@ -20,9 +20,9 @@ import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process"; import { HostProcessArchitecture, HostProcessPlatform } from "./hostProcess.ts"; export const CLOUDFLARED_VERSION = "2026.5.2"; -export const CLOUDFLARED_PATH_ENV_NAME = "T3CODE_CLOUDFLARED_PATH"; +const CLOUDFLARED_PATH_ENV_NAME = "T3CODE_CLOUDFLARED_PATH"; -export type RelayClientExecutableSource = "override" | "managed" | "path"; +type RelayClientExecutableSource = "override" | "managed" | "path"; export type RelayClientStatus = | { @@ -42,7 +42,7 @@ export type RelayClientStatus = readonly version: string; }; -export type AvailableRelayClient = Extract; +type AvailableRelayClient = Extract; export class RelayClientInstallError extends Data.TaggedError("RelayClientInstallError")<{ readonly reason: diff --git a/packages/shared/src/remote.ts b/packages/shared/src/remote.ts index 1b5d1c586e22..2f05521ef41a 100644 --- a/packages/shared/src/remote.ts +++ b/packages/shared/src/remote.ts @@ -51,7 +51,7 @@ export class RemotePairingTokenMissingError extends Schema.TaggedErrorClass()( +class RemotePairingCodeMissingError extends Schema.TaggedErrorClass()( "RemotePairingCodeMissingError", { host: Schema.String }, ) { @@ -60,14 +60,14 @@ export class RemotePairingCodeMissingError extends Schema.TaggedErrorClass SUPPORTED_REMOTE_BACKEND_PROTOCOLS.has(url.protocol); diff --git a/packages/shared/src/schemaJson.ts b/packages/shared/src/schemaJson.ts index e132b7084b74..076ff67b62df 100644 --- a/packages/shared/src/schemaJson.ts +++ b/packages/shared/src/schemaJson.ts @@ -199,12 +199,12 @@ const parseLenientJsonGetter = SchemaGetter.onSome((input: string) => { * strips trailing commas and JS-style comments before parsing. * Encoding produces strict JSON via `JSON.stringify`. */ -export const fromLenientJsonString = new SchemaTransformation.Transformation( +const fromLenientJsonString = new SchemaTransformation.Transformation( parseLenientJsonGetter, SchemaGetter.stringifyJson(), ); -export const prettyJsonString = SchemaGetter.parseJson().compose( +const prettyJsonString = SchemaGetter.parseJson().compose( SchemaGetter.stringifyJson({ space: 2 }), ); diff --git a/packages/shared/src/schemaYaml.ts b/packages/shared/src/schemaYaml.ts index 70e3c987ae00..6a13263ee8dd 100644 --- a/packages/shared/src/schemaYaml.ts +++ b/packages/shared/src/schemaYaml.ts @@ -15,8 +15,8 @@ import { type ToStringOptions, } from "yaml"; -export type YamlParseOptions = ParseOptions & DocumentOptions & SchemaOptions & ToJSOptions; -export type YamlStringifyOptions = DocumentOptions & +type YamlParseOptions = ParseOptions & DocumentOptions & SchemaOptions & ToJSOptions; +type YamlStringifyOptions = DocumentOptions & SchemaOptions & ParseOptions & CreateNodeOptions & @@ -55,9 +55,7 @@ function formatYamlParseError(error: unknown): string { * * @see {@link stringifyYaml} for the inverse operation */ -export function parseYaml( - options?: YamlParseOptions, -): SchemaGetter.Getter { +function parseYaml(options?: YamlParseOptions): SchemaGetter.Getter { return SchemaGetter.transformOrFail((input: E) => Effect.try({ try: () => parseYamlString(input, options) as unknown, @@ -89,9 +87,7 @@ export function parseYaml( * * @see {@link parseYaml} for the inverse operation */ -export function stringifyYaml( - options?: YamlStringifyOptions, -): SchemaGetter.Getter { +function stringifyYaml(options?: YamlStringifyOptions): SchemaGetter.Getter { return SchemaGetter.transformOrFail((input: unknown) => Effect.try({ try: () => stringifyYamlValue(input, options), diff --git a/packages/shared/src/sourceControl.ts b/packages/shared/src/sourceControl.ts index df88de595a3f..93b7c41ad44f 100644 --- a/packages/shared/src/sourceControl.ts +++ b/packages/shared/src/sourceControl.ts @@ -92,23 +92,12 @@ export function resolveChangeRequestPresentation( } } -export function resolveChangeRequestPresentationForKind( +function resolveChangeRequestPresentationForKind( kind: SourceControlProviderKind, ): ChangeRequestPresentation { return resolveChangeRequestPresentation({ kind, name: "", baseUrl: "" }); } -export function formatChangeRequestAction( - verb: "View" | "Create", - presentation: ChangeRequestPresentation, -): string { - return `${verb} ${presentation.shortName}`; -} - -export function formatCreateChangeRequestPhrase(presentation: ChangeRequestPresentation): string { - return `create ${presentation.shortName}`; -} - export function getChangeRequestTerminology( provider: SourceControlProviderInfo | null | undefined, ): ChangeRequestTerminology { diff --git a/packages/shared/src/usageLimits.ts b/packages/shared/src/usageLimits.ts index 8341796e39c3..e7582b1ecc64 100644 --- a/packages/shared/src/usageLimits.ts +++ b/packages/shared/src/usageLimits.ts @@ -161,7 +161,7 @@ export function limitsNotice(limits: ServerProviderUsageLimits): string | null { return limits.windows.length === 0 ? "No limits reported." : null; } -export function resetMillis(window: ServerProviderUsageWindow): number | null { +function resetMillis(window: ServerProviderUsageWindow): number | null { if (window.resetsAt === undefined) return null; const at = Date.parse(window.resetsAt); return Number.isFinite(at) ? at : null; diff --git a/packages/shared/src/usageMerge.ts b/packages/shared/src/usageMerge.ts index 95982bf507da..802238bccd08 100644 --- a/packages/shared/src/usageMerge.ts +++ b/packages/shared/src/usageMerge.ts @@ -21,7 +21,7 @@ export interface EnvironmentUsage { readonly summary: UsageSummary; } -export interface ProviderTotals { +interface ProviderTotals { readonly provider: UsageProviderKind; readonly costUsd: number; readonly totalTokens: number; @@ -31,7 +31,7 @@ export interface ProviderTotals { readonly tokenShare: number; } -export interface ModelTotals { +interface ModelTotals { readonly model: string; readonly provider: UsageProviderKind; readonly costUsd: number; @@ -55,7 +55,7 @@ export interface HourlyTotals { readonly byProvider: ReadonlyMap; } -export interface CostQuality { +interface CostQuality { readonly providerReportedShare: number; readonly modelPricedShare: number; readonly unpricedShare: number; From 7c857d6fdda6f721b4d978d2473fba524bf4cd6b Mon Sep 17 00:00:00 2001 From: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Date: Sat, 5 Sep 2026 10:03:34 -0700 Subject: [PATCH 2/4] refactor(shared): retain the public Net constructor --- packages/shared/src/Net.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/shared/src/Net.ts b/packages/shared/src/Net.ts index 984e6a38570c..e3b653692880 100644 --- a/packages/shared/src/Net.ts +++ b/packages/shared/src/Net.ts @@ -63,7 +63,8 @@ export class NetService extends Context.Service()( "@t3tools/shared/Net/NetService", ) {} -const make = () => { +/** @public Service construction is part of the canonical Effect module API. */ +export const make = () => { /** * Returns true when a TCP server can bind to {host, port}. * `EADDRNOTAVAIL` is treated as available so IPv6-absent hosts don't fail From d5f8565e1e8cb1113f024ca793d39954e3541d8f Mon Sep 17 00:00:00 2001 From: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Date: Sat, 5 Sep 2026 11:17:46 -0700 Subject: [PATCH 3/4] refactor(shared): retain exported types and schemas --- packages/shared/src/Net.ts | 2 +- packages/shared/src/agentAwareness.ts | 2 +- packages/shared/src/composerTrigger.ts | 1 + packages/shared/src/observability.ts | 6 +++--- packages/shared/src/relayClient.ts | 4 ++-- packages/shared/src/remote.ts | 6 +++--- packages/shared/src/schemaYaml.ts | 4 ++-- packages/shared/src/usageMerge.ts | 6 +++--- 8 files changed, 16 insertions(+), 15 deletions(-) diff --git a/packages/shared/src/Net.ts b/packages/shared/src/Net.ts index e3b653692880..19796976e756 100644 --- a/packages/shared/src/Net.ts +++ b/packages/shared/src/Net.ts @@ -63,7 +63,7 @@ export class NetService extends Context.Service()( "@t3tools/shared/Net/NetService", ) {} -/** @public Service construction is part of the canonical Effect module API. */ +/** @public */ export const make = () => { /** * Returns true when a TCP server can bind to {host, port}. diff --git a/packages/shared/src/agentAwareness.ts b/packages/shared/src/agentAwareness.ts index 59385c760be2..77c7c845db31 100644 --- a/packages/shared/src/agentAwareness.ts +++ b/packages/shared/src/agentAwareness.ts @@ -5,7 +5,7 @@ import type { ThreadId, } from "@t3tools/contracts"; -type AgentAwarenessPhase = +export type AgentAwarenessPhase = | "starting" | "running" | "waiting_for_approval" diff --git a/packages/shared/src/composerTrigger.ts b/packages/shared/src/composerTrigger.ts index f29423d4419c..6176d10d7908 100644 --- a/packages/shared/src/composerTrigger.ts +++ b/packages/shared/src/composerTrigger.ts @@ -1,4 +1,5 @@ export type ComposerTriggerKind = "path" | "slash-command" | "slash-model" | "skill"; +export type ComposerSlashCommand = "model" | "plan" | "default"; export interface ComposerTrigger { kind: ComposerTriggerKind; diff --git a/packages/shared/src/observability.ts b/packages/shared/src/observability.ts index be2781dd1b24..9692a05f7592 100644 --- a/packages/shared/src/observability.ts +++ b/packages/shared/src/observability.ts @@ -13,13 +13,13 @@ const textEncoder = new TextEncoder(); export type TraceAttributes = Readonly>; -interface TraceRecordEvent { +export interface TraceRecordEvent { readonly name: string; readonly timeUnixNano: string; readonly attributes: Readonly>; } -interface TraceRecordLink { +export interface TraceRecordLink { readonly traceId: string; readonly spanId: string; readonly attributes: Readonly>; @@ -40,7 +40,7 @@ interface BaseTraceRecord { readonly links: ReadonlyArray; } -interface EffectTraceRecord extends BaseTraceRecord { +export interface EffectTraceRecord extends BaseTraceRecord { readonly type: "effect-span"; readonly exit: | { diff --git a/packages/shared/src/relayClient.ts b/packages/shared/src/relayClient.ts index f62260a56d8e..7915c6b535f7 100644 --- a/packages/shared/src/relayClient.ts +++ b/packages/shared/src/relayClient.ts @@ -22,7 +22,7 @@ import { HostProcessArchitecture, HostProcessPlatform } from "./hostProcess.ts"; export const CLOUDFLARED_VERSION = "2026.5.2"; const CLOUDFLARED_PATH_ENV_NAME = "T3CODE_CLOUDFLARED_PATH"; -type RelayClientExecutableSource = "override" | "managed" | "path"; +export type RelayClientExecutableSource = "override" | "managed" | "path"; export type RelayClientStatus = | { @@ -42,7 +42,7 @@ export type RelayClientStatus = readonly version: string; }; -type AvailableRelayClient = Extract; +export type AvailableRelayClient = Extract; export class RelayClientInstallError extends Data.TaggedError("RelayClientInstallError")<{ readonly reason: diff --git a/packages/shared/src/remote.ts b/packages/shared/src/remote.ts index 2f05521ef41a..1b5d1c586e22 100644 --- a/packages/shared/src/remote.ts +++ b/packages/shared/src/remote.ts @@ -51,7 +51,7 @@ export class RemotePairingTokenMissingError extends Schema.TaggedErrorClass()( +export class RemotePairingCodeMissingError extends Schema.TaggedErrorClass()( "RemotePairingCodeMissingError", { host: Schema.String }, ) { @@ -60,14 +60,14 @@ class RemotePairingCodeMissingError extends Schema.TaggedErrorClass SUPPORTED_REMOTE_BACKEND_PROTOCOLS.has(url.protocol); diff --git a/packages/shared/src/schemaYaml.ts b/packages/shared/src/schemaYaml.ts index 6a13263ee8dd..c9bc40b4ccf0 100644 --- a/packages/shared/src/schemaYaml.ts +++ b/packages/shared/src/schemaYaml.ts @@ -15,8 +15,8 @@ import { type ToStringOptions, } from "yaml"; -type YamlParseOptions = ParseOptions & DocumentOptions & SchemaOptions & ToJSOptions; -type YamlStringifyOptions = DocumentOptions & +export type YamlParseOptions = ParseOptions & DocumentOptions & SchemaOptions & ToJSOptions; +export type YamlStringifyOptions = DocumentOptions & SchemaOptions & ParseOptions & CreateNodeOptions & diff --git a/packages/shared/src/usageMerge.ts b/packages/shared/src/usageMerge.ts index 802238bccd08..95982bf507da 100644 --- a/packages/shared/src/usageMerge.ts +++ b/packages/shared/src/usageMerge.ts @@ -21,7 +21,7 @@ export interface EnvironmentUsage { readonly summary: UsageSummary; } -interface ProviderTotals { +export interface ProviderTotals { readonly provider: UsageProviderKind; readonly costUsd: number; readonly totalTokens: number; @@ -31,7 +31,7 @@ interface ProviderTotals { readonly tokenShare: number; } -interface ModelTotals { +export interface ModelTotals { readonly model: string; readonly provider: UsageProviderKind; readonly costUsd: number; @@ -55,7 +55,7 @@ export interface HourlyTotals { readonly byProvider: ReadonlyMap; } -interface CostQuality { +export interface CostQuality { readonly providerReportedShare: number; readonly modelPricedShare: number; readonly unpricedShare: number; From 56a7d66e15efa66ce4c934324cdcd7fd5ab6f798 Mon Sep 17 00:00:00 2001 From: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Date: Sat, 5 Sep 2026 11:28:13 -0700 Subject: [PATCH 4/4] docs(shared): remove stale examples for private YAML helpers --- packages/shared/src/Net.ts | 2 +- packages/shared/src/schemaYaml.ts | 48 ++----------------------------- 2 files changed, 3 insertions(+), 47 deletions(-) diff --git a/packages/shared/src/Net.ts b/packages/shared/src/Net.ts index 19796976e756..e3b653692880 100644 --- a/packages/shared/src/Net.ts +++ b/packages/shared/src/Net.ts @@ -63,7 +63,7 @@ export class NetService extends Context.Service()( "@t3tools/shared/Net/NetService", ) {} -/** @public */ +/** @public Service construction is part of the canonical Effect module API. */ export const make = () => { /** * Returns true when a TCP server can bind to {host, port}. diff --git a/packages/shared/src/schemaYaml.ts b/packages/shared/src/schemaYaml.ts index c9bc40b4ccf0..55b5b97122ae 100644 --- a/packages/shared/src/schemaYaml.ts +++ b/packages/shared/src/schemaYaml.ts @@ -32,29 +32,7 @@ function formatYamlParseError(error: unknown): string { return `Invalid YAML (code=${error.code}${location}).`; } -/** - * Parses a YAML string into a value. - * - * **When to use** - * - * Use when you need a schema getter to parse a present encoded YAML string - * during decoding. - * - * **Details** - * - * Parse failures become `SchemaIssue.InvalidValue` values. - * - * **Example** (Parse YAML) - * - * ```ts - * import { parseYaml } from "@t3tools/shared/schemaYaml" - * - * const parse = parseYaml() - * // Getter - * ``` - * - * @see {@link stringifyYaml} for the inverse operation - */ +/** Parses YAML during decoding, reporting parse failures as InvalidValue issues. */ function parseYaml(options?: YamlParseOptions): SchemaGetter.Getter { return SchemaGetter.transformOrFail((input: E) => Effect.try({ @@ -64,29 +42,7 @@ function parseYaml(options?: YamlParseOptions): SchemaGetter.G ); } -/** - * Stringifies a present value as YAML. - * - * **When to use** - * - * Use when you need a schema getter to serialize a present decoded value to - * YAML text during encoding. - * - * **Details** - * - * Stringify failures become `SchemaIssue.InvalidValue` values. - * - * **Example** (Stringify YAML) - * - * ```ts - * import { stringifyYaml } from "@t3tools/shared/schemaYaml" - * - * const stringify = stringifyYaml() - * // Getter - * ``` - * - * @see {@link parseYaml} for the inverse operation - */ +/** Serializes YAML during encoding, reporting stringify failures as InvalidValue issues. */ function stringifyYaml(options?: YamlStringifyOptions): SchemaGetter.Getter { return SchemaGetter.transformOrFail((input: unknown) => Effect.try({