@fuaran-ui/ops 0.8.0 → 0.19.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.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { Result, NodeId, NodeKind, JsonValue, Binding, SemanticStyle, StateBehaviour, Node, Cell, ColExpr, DataSource, Transform, EvalError, Table, TextSource, CellFormat, ColumnWidth, Orientation, ToneVariant, StyleWeight, Emphasis, HeadingVariant, BadgeVariant, IconSource, IconSize } from '@fuaran-ui/schema';
1
+ import { Result, NodeId, NodeKind, JsonValue, Binding, SemanticStyle, StateBehaviour, Node, Cell, ColExpr, DataSource, Transform, EvalError, Table, TextSource, CellFormat, ColumnWidth, Orientation, ToneVariant, StyleWeight, Emphasis, TrendPolarity, HeadingVariant, BadgeVariant, IconSource, IconSize, DecodePolicy } from '@fuaran-ui/schema';
2
2
 
3
3
  /** Local JSON AST. Shape-for-shape port of the F# decoder's private `Json` DU. */
4
4
  type JsonAst = {
@@ -23,6 +23,15 @@ type JsonAst = {
23
23
  interface ParseError {
24
24
  readonly message: string;
25
25
  readonly offset: number;
26
+ /**
27
+ * True when this failure is a WIRE_FORMAT.md §21 resource-limit breach rather
28
+ * than a syntax error. It exists because the two must not be reported the
29
+ * same way: §21.2 rule 2 forbids reporting a limit breach as `INVALID_JSON`,
30
+ * since the input is well-formed and merely too large to walk, and calling it
31
+ * malformed sends the author to repair the wrong thing. `decodeNode` reads
32
+ * this flag to choose between `INVALID_JSON` and `LIMIT_EXCEEDED`.
33
+ */
34
+ readonly limit?: boolean;
26
35
  }
27
36
  /**
28
37
  * Parse a JSON document into the local AST. Mirrors the F# `tryParse`: empty /
@@ -133,7 +142,28 @@ declare const stepParams: (t: Transform) => readonly string[];
133
142
  declare const pipelineParams: (pipeline: readonly Transform[]) => readonly string[];
134
143
 
135
144
  /** Stable AI-friendly discriminator for decode-time failures (WIRE_FORMAT.md §6). */
136
- type DecodeErrorCode = 'INVALID_JSON' | 'MISSING_FIELD' | 'WRONG_TYPE' | 'UNKNOWN_DU_CASE' | 'WRONG_NODE_KIND' | 'EMPTY_NODE_ID';
145
+ type DecodeErrorCode = 'INVALID_JSON' | 'MISSING_FIELD' | 'WRONG_TYPE' | 'UNKNOWN_DU_CASE' | 'WRONG_NODE_KIND' | 'EMPTY_NODE_ID'
146
+ /**
147
+ * A WIRE_FORMAT.md §21 resource limit was exceeded — the document is
148
+ * well-formed and merely too large to walk. Deliberately distinct from
149
+ * `INVALID_JSON`, which §21.2 rule 2 forbids using for this: calling a
150
+ * well-formed document malformed sends the author to repair the wrong thing.
151
+ */
152
+ | 'LIMIT_EXCEEDED'
153
+ /**
154
+ * The document names a kind the HOST'S DECLARED decode policy does not admit
155
+ * (WIRE_FORMAT.md §23).
156
+ *
157
+ * Deliberately distinct from `WRONG_NODE_KIND`, which says the vocabulary has
158
+ * no such kind. This one says the kind exists and THIS DEPLOYMENT does not
159
+ * take it — a different fact with a different remedy, and conflating them
160
+ * would send a repairing author to invent a spelling that is already correct.
161
+ *
162
+ * Raised ONLY when a caller supplied a narrowing policy. With no policy the
163
+ * code is unreachable, which is what keeps §22's "a decoder owes nothing"
164
+ * true of the default decoder.
165
+ */
166
+ | 'KIND_NOT_ADMITTED';
137
167
  /** AI-recoverable decode-time failure. Mirrors the F# `DecodeError` record. */
138
168
  interface DecodeError {
139
169
  readonly code: DecodeErrorCode;
@@ -175,6 +205,8 @@ declare const coerce: {
175
205
  tone: (v: JsonValue) => Result<ToneVariant, string>;
176
206
  weight: (v: JsonValue) => Result<StyleWeight, string>;
177
207
  emphasis: (v: JsonValue) => Result<Emphasis, string>;
208
+ /** `Metric.TrendPolarity` (Phase 867) - the UpdateProp twin of `decodeTrendPolarity`. */
209
+ trendPolarity: (v: JsonValue) => Result<TrendPolarity, string>;
178
210
  /**
179
211
  * The behavioural `emphasis` BOOL on Fact / LabelValueRow — the UpdateProp
180
212
  * twin of `decodeEmphasisFlag`, so a TreeOp edit gets the same
@@ -189,10 +221,34 @@ declare const coerce: {
189
221
  iconSize: (v: JsonValue) => Result<IconSize, string>;
190
222
  stringOption: (v: JsonValue) => Result<string | undefined, string>;
191
223
  };
192
- /** Decode a canonical-JSON `Node` payload into the storage-shape `Node<unknown>`. */
193
- declare const decodeNode: (json: string) => R<Node<unknown>>;
194
- /** Decode a canonical-JSON `TreeOp` payload into the storage-shape `TreeOp<unknown>`. */
195
- declare const decodeOp: (json: string) => R<TreeOp<unknown>>;
224
+ /**
225
+ * Decode a canonical-JSON `Node` payload into the storage-shape `Node<unknown>`.
226
+ *
227
+ * `policy` is the OPTIONAL WIRE_FORMAT §23 host-declared admission policy: a
228
+ * tree naming a kind outside it is refused with `KIND_NOT_ADMITTED` at the
229
+ * offending `kind.$type`, naming the kind and the policy. **Omitted, the decoder
230
+ * has exactly the obligations it had before** — every valid document decodes and
231
+ * the code is unreachable, which is what keeps §22 unqualified. Build a policy
232
+ * with `@fuaran-ui/schema`'s `CLOSED_PROFILE`, `excluding` or `admitting`.
233
+ *
234
+ * The reference host spells this as a sibling entry point rather than an
235
+ * optional argument, because F# optional parameters exist only on type members
236
+ * and defaulting in place would reshape its whole decoder surface. What the two
237
+ * hosts owe each other is the same behaviour on the same bytes, not the same
238
+ * arity — the `decode-policy/` corpus family is where that is asserted.
239
+ */
240
+ declare const decodeNode: (json: string, policy?: DecodePolicy) => R<Node<unknown>>;
241
+ /**
242
+ * Decode a canonical-JSON `TreeOp` payload into the storage-shape
243
+ * `TreeOp<unknown>`.
244
+ *
245
+ * `policy` is the optional §23 admission policy. A node kind reaches an op two
246
+ * ways — inside a node-bearing operation, and as `EditNode`'s replacement kind —
247
+ * and both are gated, because an op stream that could introduce a refused kind
248
+ * into an admitted tree would make the policy a property of the first decode
249
+ * only rather than a closure.
250
+ */
251
+ declare const decodeOp: (json: string, policy?: DecodePolicy) => R<TreeOp<unknown>>;
196
252
 
197
253
  type ApplyErrorCode = 'NodeNotFound' | 'ParentNotFound' | 'ChildlessKind' | 'PositionOutOfRange' | 'DuplicateNodeId' | 'FieldNotFound' | 'SlotNotFound' | 'KindMismatch' | 'PathInvalid' | 'PathNotSupportedYet' | 'OrderingMismatch' | 'BatchAborted';
198
254
  interface ApplyError {
@@ -729,4 +785,36 @@ declare const decodeElicitationOutcome: (json: string) => Result<ElicitationOutc
729
785
  */
730
786
  declare const validateAnswerDocument: (json: string) => Result<undefined, ElicitationError>;
731
787
 
732
- export { type Answer, type AnswerContract, type AnswerField, type AnswerSpace, type AnswerValue, type ApplyError, type ApplyErrorCode, type ApplyResult, type Compatibility, type DagOpRecord, type DagResultEnvelope, type DecodeError, type DecodeErrorCode, type Decoded, ELICITATION_KEY, ELICITATION_VERSION, type ElicitationEnvelope, type ElicitationError, type ElicitationErrorCode, type ElicitationOutcome, type ElicitationOutcomeEnvelope, type Envelope, type EnvelopeError, type EnvelopeErrorCode, type EvalEnv, type FreshIds, type JsonAst, type MergeConflict, type MergeResult, type OpApplyTelemetryRecord, PAYLOAD_KEY, PROFILE_KEY, type ParseError, type PlaceError, type PlaceTarget, type Placement, type Profile, REQUIRED_PROFILE_KEY, type SourceResolver, type TreeOp, type UnknownKind, apply, canPlace, cellString, coerce, coreV1, decodeDagRecord, decodeElicitation, decodeElicitationOutcome, decodeEnvelope, decodeEnvelopeAst, decodeNode, decodeNodeTolerant, decodeOp, decodeTolerant, derivedFreshIds, duplicateOp, duplicateOpWith, encodeCell, encodeColExpr, encodeDagRecord, encodeDataSource, encodeElicitation, encodeElicitationOutcome, encodeEnvelope, encodeNode, encodeOp, encodePipeline, evalErrorString, evalPipeline, evalPipelineInEnv, evalPipelineWith, evalPipelineWithInEnv, evalSource, field as jsonField, liveValueToTable, merge3Way, moveOp, negotiate, negotiateEnvelope, noResolve, nudgeOp, parse, pasteOp, pasteOpWith, pipelineParams, placeOp, reencodeNode, renderAstCanonical, renderProfile, sequentialFreshIds, stepParams, tryParseProfile, validateAnswer, validateAnswerAt, validateAnswerDocument };
788
+ /**
789
+ * Keys under this prefix are HOST-OWNED: a tree-originated write naming one is
790
+ * refused, so a tree-originated SEED naming one must be too.
791
+ *
792
+ * Declared here rather than imported because the TypeScript tier carries no
793
+ * shared state-key policy module (the F# tier's `Fuaran.UI.StateKeyPolicy`).
794
+ * It must stay in step with that definition — there is one prefix, and a host
795
+ * that names a slot `host.<whatever>` is entitled to have every tier honour it.
796
+ */
797
+ declare const HOST_RESERVED_PREFIX = "host.";
798
+ /**
799
+ * Collect the seed map for a tree: the value each `$state.<key>` slot carries
800
+ * before anything else has said anything.
801
+ *
802
+ * Order-independent by construction (charter §5) — the whole tree is walked
803
+ * before any binding resolves, so a badge declared before the grid that carries
804
+ * its rows is not a special case.
805
+ */
806
+ declare const collectStateSeeds: <TMsg>(tree: Node<TMsg>) => Readonly<Record<string, unknown>>;
807
+ /**
808
+ * Lay a tree's seeds UNDER a host's own binding sources. The host's map wins on
809
+ * every key it names — a seed is the value before anything else has said
810
+ * anything, never an override, which is the only reading consistent with the
811
+ * wire's standing posture that the host owns named data.
812
+ *
813
+ * Returns the caller's own object unchanged when the tree declares nothing, so
814
+ * an unseeded tree costs one walk and no allocation.
815
+ */
816
+ declare const withStateSeeds: <TMsg, S extends {
817
+ readonly state?: Readonly<Record<string, unknown>>;
818
+ }>(tree: Node<TMsg>, sources: S) => S;
819
+
820
+ export { type Answer, type AnswerContract, type AnswerField, type AnswerSpace, type AnswerValue, type ApplyError, type ApplyErrorCode, type ApplyResult, type Compatibility, type DagOpRecord, type DagResultEnvelope, type DecodeError, type DecodeErrorCode, type Decoded, ELICITATION_KEY, ELICITATION_VERSION, type ElicitationEnvelope, type ElicitationError, type ElicitationErrorCode, type ElicitationOutcome, type ElicitationOutcomeEnvelope, type Envelope, type EnvelopeError, type EnvelopeErrorCode, type EvalEnv, type FreshIds, HOST_RESERVED_PREFIX, type JsonAst, type MergeConflict, type MergeResult, type OpApplyTelemetryRecord, PAYLOAD_KEY, PROFILE_KEY, type ParseError, type PlaceError, type PlaceTarget, type Placement, type Profile, REQUIRED_PROFILE_KEY, type SourceResolver, type TreeOp, type UnknownKind, apply, canPlace, cellString, coerce, collectStateSeeds, coreV1, decodeDagRecord, decodeElicitation, decodeElicitationOutcome, decodeEnvelope, decodeEnvelopeAst, decodeNode, decodeNodeTolerant, decodeOp, decodeTolerant, derivedFreshIds, duplicateOp, duplicateOpWith, encodeCell, encodeColExpr, encodeDagRecord, encodeDataSource, encodeElicitation, encodeElicitationOutcome, encodeEnvelope, encodeNode, encodeOp, encodePipeline, evalErrorString, evalPipeline, evalPipelineInEnv, evalPipelineWith, evalPipelineWithInEnv, evalSource, field as jsonField, liveValueToTable, merge3Way, moveOp, negotiate, negotiateEnvelope, noResolve, nudgeOp, parse, pasteOp, pasteOpWith, pipelineParams, placeOp, reencodeNode, renderAstCanonical, renderProfile, sequentialFreshIds, stepParams, tryParseProfile, validateAnswer, validateAnswerAt, validateAnswerDocument, withStateSeeds };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Result, NodeId, NodeKind, JsonValue, Binding, SemanticStyle, StateBehaviour, Node, Cell, ColExpr, DataSource, Transform, EvalError, Table, TextSource, CellFormat, ColumnWidth, Orientation, ToneVariant, StyleWeight, Emphasis, HeadingVariant, BadgeVariant, IconSource, IconSize } from '@fuaran-ui/schema';
1
+ import { Result, NodeId, NodeKind, JsonValue, Binding, SemanticStyle, StateBehaviour, Node, Cell, ColExpr, DataSource, Transform, EvalError, Table, TextSource, CellFormat, ColumnWidth, Orientation, ToneVariant, StyleWeight, Emphasis, TrendPolarity, HeadingVariant, BadgeVariant, IconSource, IconSize, DecodePolicy } from '@fuaran-ui/schema';
2
2
 
3
3
  /** Local JSON AST. Shape-for-shape port of the F# decoder's private `Json` DU. */
4
4
  type JsonAst = {
@@ -23,6 +23,15 @@ type JsonAst = {
23
23
  interface ParseError {
24
24
  readonly message: string;
25
25
  readonly offset: number;
26
+ /**
27
+ * True when this failure is a WIRE_FORMAT.md §21 resource-limit breach rather
28
+ * than a syntax error. It exists because the two must not be reported the
29
+ * same way: §21.2 rule 2 forbids reporting a limit breach as `INVALID_JSON`,
30
+ * since the input is well-formed and merely too large to walk, and calling it
31
+ * malformed sends the author to repair the wrong thing. `decodeNode` reads
32
+ * this flag to choose between `INVALID_JSON` and `LIMIT_EXCEEDED`.
33
+ */
34
+ readonly limit?: boolean;
26
35
  }
27
36
  /**
28
37
  * Parse a JSON document into the local AST. Mirrors the F# `tryParse`: empty /
@@ -133,7 +142,28 @@ declare const stepParams: (t: Transform) => readonly string[];
133
142
  declare const pipelineParams: (pipeline: readonly Transform[]) => readonly string[];
134
143
 
135
144
  /** Stable AI-friendly discriminator for decode-time failures (WIRE_FORMAT.md §6). */
136
- type DecodeErrorCode = 'INVALID_JSON' | 'MISSING_FIELD' | 'WRONG_TYPE' | 'UNKNOWN_DU_CASE' | 'WRONG_NODE_KIND' | 'EMPTY_NODE_ID';
145
+ type DecodeErrorCode = 'INVALID_JSON' | 'MISSING_FIELD' | 'WRONG_TYPE' | 'UNKNOWN_DU_CASE' | 'WRONG_NODE_KIND' | 'EMPTY_NODE_ID'
146
+ /**
147
+ * A WIRE_FORMAT.md §21 resource limit was exceeded — the document is
148
+ * well-formed and merely too large to walk. Deliberately distinct from
149
+ * `INVALID_JSON`, which §21.2 rule 2 forbids using for this: calling a
150
+ * well-formed document malformed sends the author to repair the wrong thing.
151
+ */
152
+ | 'LIMIT_EXCEEDED'
153
+ /**
154
+ * The document names a kind the HOST'S DECLARED decode policy does not admit
155
+ * (WIRE_FORMAT.md §23).
156
+ *
157
+ * Deliberately distinct from `WRONG_NODE_KIND`, which says the vocabulary has
158
+ * no such kind. This one says the kind exists and THIS DEPLOYMENT does not
159
+ * take it — a different fact with a different remedy, and conflating them
160
+ * would send a repairing author to invent a spelling that is already correct.
161
+ *
162
+ * Raised ONLY when a caller supplied a narrowing policy. With no policy the
163
+ * code is unreachable, which is what keeps §22's "a decoder owes nothing"
164
+ * true of the default decoder.
165
+ */
166
+ | 'KIND_NOT_ADMITTED';
137
167
  /** AI-recoverable decode-time failure. Mirrors the F# `DecodeError` record. */
138
168
  interface DecodeError {
139
169
  readonly code: DecodeErrorCode;
@@ -175,6 +205,8 @@ declare const coerce: {
175
205
  tone: (v: JsonValue) => Result<ToneVariant, string>;
176
206
  weight: (v: JsonValue) => Result<StyleWeight, string>;
177
207
  emphasis: (v: JsonValue) => Result<Emphasis, string>;
208
+ /** `Metric.TrendPolarity` (Phase 867) - the UpdateProp twin of `decodeTrendPolarity`. */
209
+ trendPolarity: (v: JsonValue) => Result<TrendPolarity, string>;
178
210
  /**
179
211
  * The behavioural `emphasis` BOOL on Fact / LabelValueRow — the UpdateProp
180
212
  * twin of `decodeEmphasisFlag`, so a TreeOp edit gets the same
@@ -189,10 +221,34 @@ declare const coerce: {
189
221
  iconSize: (v: JsonValue) => Result<IconSize, string>;
190
222
  stringOption: (v: JsonValue) => Result<string | undefined, string>;
191
223
  };
192
- /** Decode a canonical-JSON `Node` payload into the storage-shape `Node<unknown>`. */
193
- declare const decodeNode: (json: string) => R<Node<unknown>>;
194
- /** Decode a canonical-JSON `TreeOp` payload into the storage-shape `TreeOp<unknown>`. */
195
- declare const decodeOp: (json: string) => R<TreeOp<unknown>>;
224
+ /**
225
+ * Decode a canonical-JSON `Node` payload into the storage-shape `Node<unknown>`.
226
+ *
227
+ * `policy` is the OPTIONAL WIRE_FORMAT §23 host-declared admission policy: a
228
+ * tree naming a kind outside it is refused with `KIND_NOT_ADMITTED` at the
229
+ * offending `kind.$type`, naming the kind and the policy. **Omitted, the decoder
230
+ * has exactly the obligations it had before** — every valid document decodes and
231
+ * the code is unreachable, which is what keeps §22 unqualified. Build a policy
232
+ * with `@fuaran-ui/schema`'s `CLOSED_PROFILE`, `excluding` or `admitting`.
233
+ *
234
+ * The reference host spells this as a sibling entry point rather than an
235
+ * optional argument, because F# optional parameters exist only on type members
236
+ * and defaulting in place would reshape its whole decoder surface. What the two
237
+ * hosts owe each other is the same behaviour on the same bytes, not the same
238
+ * arity — the `decode-policy/` corpus family is where that is asserted.
239
+ */
240
+ declare const decodeNode: (json: string, policy?: DecodePolicy) => R<Node<unknown>>;
241
+ /**
242
+ * Decode a canonical-JSON `TreeOp` payload into the storage-shape
243
+ * `TreeOp<unknown>`.
244
+ *
245
+ * `policy` is the optional §23 admission policy. A node kind reaches an op two
246
+ * ways — inside a node-bearing operation, and as `EditNode`'s replacement kind —
247
+ * and both are gated, because an op stream that could introduce a refused kind
248
+ * into an admitted tree would make the policy a property of the first decode
249
+ * only rather than a closure.
250
+ */
251
+ declare const decodeOp: (json: string, policy?: DecodePolicy) => R<TreeOp<unknown>>;
196
252
 
197
253
  type ApplyErrorCode = 'NodeNotFound' | 'ParentNotFound' | 'ChildlessKind' | 'PositionOutOfRange' | 'DuplicateNodeId' | 'FieldNotFound' | 'SlotNotFound' | 'KindMismatch' | 'PathInvalid' | 'PathNotSupportedYet' | 'OrderingMismatch' | 'BatchAborted';
198
254
  interface ApplyError {
@@ -729,4 +785,36 @@ declare const decodeElicitationOutcome: (json: string) => Result<ElicitationOutc
729
785
  */
730
786
  declare const validateAnswerDocument: (json: string) => Result<undefined, ElicitationError>;
731
787
 
732
- export { type Answer, type AnswerContract, type AnswerField, type AnswerSpace, type AnswerValue, type ApplyError, type ApplyErrorCode, type ApplyResult, type Compatibility, type DagOpRecord, type DagResultEnvelope, type DecodeError, type DecodeErrorCode, type Decoded, ELICITATION_KEY, ELICITATION_VERSION, type ElicitationEnvelope, type ElicitationError, type ElicitationErrorCode, type ElicitationOutcome, type ElicitationOutcomeEnvelope, type Envelope, type EnvelopeError, type EnvelopeErrorCode, type EvalEnv, type FreshIds, type JsonAst, type MergeConflict, type MergeResult, type OpApplyTelemetryRecord, PAYLOAD_KEY, PROFILE_KEY, type ParseError, type PlaceError, type PlaceTarget, type Placement, type Profile, REQUIRED_PROFILE_KEY, type SourceResolver, type TreeOp, type UnknownKind, apply, canPlace, cellString, coerce, coreV1, decodeDagRecord, decodeElicitation, decodeElicitationOutcome, decodeEnvelope, decodeEnvelopeAst, decodeNode, decodeNodeTolerant, decodeOp, decodeTolerant, derivedFreshIds, duplicateOp, duplicateOpWith, encodeCell, encodeColExpr, encodeDagRecord, encodeDataSource, encodeElicitation, encodeElicitationOutcome, encodeEnvelope, encodeNode, encodeOp, encodePipeline, evalErrorString, evalPipeline, evalPipelineInEnv, evalPipelineWith, evalPipelineWithInEnv, evalSource, field as jsonField, liveValueToTable, merge3Way, moveOp, negotiate, negotiateEnvelope, noResolve, nudgeOp, parse, pasteOp, pasteOpWith, pipelineParams, placeOp, reencodeNode, renderAstCanonical, renderProfile, sequentialFreshIds, stepParams, tryParseProfile, validateAnswer, validateAnswerAt, validateAnswerDocument };
788
+ /**
789
+ * Keys under this prefix are HOST-OWNED: a tree-originated write naming one is
790
+ * refused, so a tree-originated SEED naming one must be too.
791
+ *
792
+ * Declared here rather than imported because the TypeScript tier carries no
793
+ * shared state-key policy module (the F# tier's `Fuaran.UI.StateKeyPolicy`).
794
+ * It must stay in step with that definition — there is one prefix, and a host
795
+ * that names a slot `host.<whatever>` is entitled to have every tier honour it.
796
+ */
797
+ declare const HOST_RESERVED_PREFIX = "host.";
798
+ /**
799
+ * Collect the seed map for a tree: the value each `$state.<key>` slot carries
800
+ * before anything else has said anything.
801
+ *
802
+ * Order-independent by construction (charter §5) — the whole tree is walked
803
+ * before any binding resolves, so a badge declared before the grid that carries
804
+ * its rows is not a special case.
805
+ */
806
+ declare const collectStateSeeds: <TMsg>(tree: Node<TMsg>) => Readonly<Record<string, unknown>>;
807
+ /**
808
+ * Lay a tree's seeds UNDER a host's own binding sources. The host's map wins on
809
+ * every key it names — a seed is the value before anything else has said
810
+ * anything, never an override, which is the only reading consistent with the
811
+ * wire's standing posture that the host owns named data.
812
+ *
813
+ * Returns the caller's own object unchanged when the tree declares nothing, so
814
+ * an unseeded tree costs one walk and no allocation.
815
+ */
816
+ declare const withStateSeeds: <TMsg, S extends {
817
+ readonly state?: Readonly<Record<string, unknown>>;
818
+ }>(tree: Node<TMsg>, sources: S) => S;
819
+
820
+ export { type Answer, type AnswerContract, type AnswerField, type AnswerSpace, type AnswerValue, type ApplyError, type ApplyErrorCode, type ApplyResult, type Compatibility, type DagOpRecord, type DagResultEnvelope, type DecodeError, type DecodeErrorCode, type Decoded, ELICITATION_KEY, ELICITATION_VERSION, type ElicitationEnvelope, type ElicitationError, type ElicitationErrorCode, type ElicitationOutcome, type ElicitationOutcomeEnvelope, type Envelope, type EnvelopeError, type EnvelopeErrorCode, type EvalEnv, type FreshIds, HOST_RESERVED_PREFIX, type JsonAst, type MergeConflict, type MergeResult, type OpApplyTelemetryRecord, PAYLOAD_KEY, PROFILE_KEY, type ParseError, type PlaceError, type PlaceTarget, type Placement, type Profile, REQUIRED_PROFILE_KEY, type SourceResolver, type TreeOp, type UnknownKind, apply, canPlace, cellString, coerce, collectStateSeeds, coreV1, decodeDagRecord, decodeElicitation, decodeElicitationOutcome, decodeEnvelope, decodeEnvelopeAst, decodeNode, decodeNodeTolerant, decodeOp, decodeTolerant, derivedFreshIds, duplicateOp, duplicateOpWith, encodeCell, encodeColExpr, encodeDagRecord, encodeDataSource, encodeElicitation, encodeElicitationOutcome, encodeEnvelope, encodeNode, encodeOp, encodePipeline, evalErrorString, evalPipeline, evalPipelineInEnv, evalPipelineWith, evalPipelineWithInEnv, evalSource, field as jsonField, liveValueToTable, merge3Way, moveOp, negotiate, negotiateEnvelope, noResolve, nudgeOp, parse, pasteOp, pasteOpWith, pipelineParams, placeOp, reencodeNode, renderAstCanonical, renderProfile, sequentialFreshIds, stepParams, tryParseProfile, validateAnswer, validateAnswerAt, validateAnswerDocument, withStateSeeds };