markform 0.1.24 → 0.1.26
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/README.md +55 -31
- package/dist/ai-sdk.d.mts +1 -1
- package/dist/ai-sdk.mjs +2 -2
- package/dist/bin.mjs +1 -1
- package/dist/{cli-B1DhFYBS.mjs → cli-BMQ9k9z7.mjs} +85 -40
- package/dist/cli-BMQ9k9z7.mjs.map +1 -0
- package/dist/cli.mjs +1 -1
- package/dist/{coreTypes-GxzWNXap.d.mts → coreTypes-CxpqKpBA.d.mts} +45 -2
- package/dist/{coreTypes-CctFK6uE.mjs → coreTypes-DIv9Aabl.mjs} +19 -5
- package/dist/coreTypes-DIv9Aabl.mjs.map +1 -0
- package/dist/{fillRecord-DeqI2pQ5.d.mts → fillRecord-V3vlyobd.d.mts} +5 -1
- package/dist/{fillRecordRenderer-VBQ2vwPV.mjs → fillRecordRenderer-BqRPHPmE.mjs} +47 -15
- package/dist/fillRecordRenderer-BqRPHPmE.mjs.map +1 -0
- package/dist/index.d.mts +32 -4
- package/dist/index.mjs +4 -4
- package/dist/{prompts-BCnYaH4_.mjs → prompts-4jZmkGKW.mjs} +114 -11
- package/dist/prompts-4jZmkGKW.mjs.map +1 -0
- package/dist/render.d.mts +2 -2
- package/dist/render.mjs +1 -1
- package/dist/{session-BLjN3BkJ.mjs → session-BW9jtYNV.mjs} +2 -2
- package/dist/{session-BLjN3BkJ.mjs.map → session-BW9jtYNV.mjs.map} +1 -1
- package/dist/{session-D7C7IlEv.mjs → session-DHyTMP67.mjs} +1 -1
- package/dist/{shared-DtorFV21.mjs → shared-BLh342F5.mjs} +1 -1
- package/dist/{shared-CuSRYcIB.mjs → shared-BszoSkAO.mjs} +8 -8
- package/dist/{shared-CuSRYcIB.mjs.map → shared-BszoSkAO.mjs.map} +1 -1
- package/dist/{src-C5OWf1dL.mjs → src-Dy3cDjDS.mjs} +165 -35
- package/dist/src-Dy3cDjDS.mjs.map +1 -0
- package/docs/markform-apis.md +19 -7
- package/docs/markform-reference.md +247 -178
- package/docs/markform-spec.md +81 -33
- package/docs/skill/SKILL.md +62 -20
- package/examples/markform-demo-playbook.md +342 -0
- package/examples/parallel/parallel-research.form.md +2 -6
- package/examples/simple/simple-mock-filled.report.md +2 -2
- package/examples/simple/simple-skipped-filled.report.md +2 -2
- package/examples/twitter-thread/twitter-thread.form.md +5 -5
- package/package.json +1 -1
- package/dist/cli-B1DhFYBS.mjs.map +0 -1
- package/dist/coreTypes-CctFK6uE.mjs.map +0 -1
- package/dist/fillRecordRenderer-VBQ2vwPV.mjs.map +0 -1
- package/dist/prompts-BCnYaH4_.mjs.map +0 -1
- package/dist/src-C5OWf1dL.mjs.map +0 -1
- package/examples/startup-research/startup-research-mock-filled.form.md +0 -297
- package/examples/startup-research/startup-research.form.md +0 -181
package/dist/cli.mjs
CHANGED
|
@@ -73,12 +73,20 @@ type ColumnTypeName = 'string' | 'number' | 'url' | 'date' | 'year';
|
|
|
73
73
|
/**
|
|
74
74
|
* Column definition - derived from columnIds, columnLabels, columnTypes attributes.
|
|
75
75
|
* After parsing, columns always have explicit required flag (default: false).
|
|
76
|
+
* May include per-column constraints matching the column type.
|
|
76
77
|
*/
|
|
77
78
|
interface TableColumn {
|
|
78
79
|
id: Id;
|
|
79
80
|
label: string;
|
|
80
81
|
type: ColumnTypeName;
|
|
81
82
|
required: boolean;
|
|
83
|
+
minLength?: number;
|
|
84
|
+
maxLength?: number;
|
|
85
|
+
pattern?: string;
|
|
86
|
+
enum?: string[];
|
|
87
|
+
min?: number | string;
|
|
88
|
+
max?: number | string;
|
|
89
|
+
integer?: boolean;
|
|
82
90
|
}
|
|
83
91
|
/** Field priority level for issue scoring */
|
|
84
92
|
type FieldPriorityLevel = 'high' | 'medium' | 'low';
|
|
@@ -978,7 +986,7 @@ declare const ColumnTypeNameSchema: z.ZodEnum<{
|
|
|
978
986
|
}>;
|
|
979
987
|
/**
|
|
980
988
|
* Table column schema (normalized form after parsing).
|
|
981
|
-
* Always has explicit required flag.
|
|
989
|
+
* Always has explicit required flag. May include per-column constraints.
|
|
982
990
|
*/
|
|
983
991
|
declare const TableColumnSchema: z.ZodObject<{
|
|
984
992
|
id: z.ZodString;
|
|
@@ -991,6 +999,13 @@ declare const TableColumnSchema: z.ZodObject<{
|
|
|
991
999
|
year: "year";
|
|
992
1000
|
}>;
|
|
993
1001
|
required: z.ZodBoolean;
|
|
1002
|
+
minLength: z.ZodOptional<z.ZodNumber>;
|
|
1003
|
+
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
1004
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
1005
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1006
|
+
min: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
1007
|
+
max: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
1008
|
+
integer: z.ZodOptional<z.ZodBoolean>;
|
|
994
1009
|
}, z.core.$strip>;
|
|
995
1010
|
/** Cell response schema */
|
|
996
1011
|
declare const CellResponseSchema: z.ZodObject<{
|
|
@@ -1288,6 +1303,13 @@ declare const TableFieldSchema: z.ZodObject<{
|
|
|
1288
1303
|
year: "year";
|
|
1289
1304
|
}>;
|
|
1290
1305
|
required: z.ZodBoolean;
|
|
1306
|
+
minLength: z.ZodOptional<z.ZodNumber>;
|
|
1307
|
+
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
1308
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
1309
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1310
|
+
min: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
1311
|
+
max: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
1312
|
+
integer: z.ZodOptional<z.ZodBoolean>;
|
|
1291
1313
|
}, z.core.$strip>>;
|
|
1292
1314
|
minRows: z.ZodOptional<z.ZodNumber>;
|
|
1293
1315
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1555,6 +1577,13 @@ declare const FieldSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1555
1577
|
year: "year";
|
|
1556
1578
|
}>;
|
|
1557
1579
|
required: z.ZodBoolean;
|
|
1580
|
+
minLength: z.ZodOptional<z.ZodNumber>;
|
|
1581
|
+
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
1582
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
1583
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1584
|
+
min: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
1585
|
+
max: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
1586
|
+
integer: z.ZodOptional<z.ZodBoolean>;
|
|
1558
1587
|
}, z.core.$strip>>;
|
|
1559
1588
|
minRows: z.ZodOptional<z.ZodNumber>;
|
|
1560
1589
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1828,6 +1857,13 @@ declare const FieldGroupSchema: z.ZodObject<{
|
|
|
1828
1857
|
year: "year";
|
|
1829
1858
|
}>;
|
|
1830
1859
|
required: z.ZodBoolean;
|
|
1860
|
+
minLength: z.ZodOptional<z.ZodNumber>;
|
|
1861
|
+
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
1862
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
1863
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1864
|
+
min: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
1865
|
+
max: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
1866
|
+
integer: z.ZodOptional<z.ZodBoolean>;
|
|
1831
1867
|
}, z.core.$strip>>;
|
|
1832
1868
|
minRows: z.ZodOptional<z.ZodNumber>;
|
|
1833
1869
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
@@ -2107,6 +2143,13 @@ declare const FormSchemaSchema: z.ZodObject<{
|
|
|
2107
2143
|
year: "year";
|
|
2108
2144
|
}>;
|
|
2109
2145
|
required: z.ZodBoolean;
|
|
2146
|
+
minLength: z.ZodOptional<z.ZodNumber>;
|
|
2147
|
+
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
2148
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
2149
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
2150
|
+
min: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
2151
|
+
max: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
2152
|
+
integer: z.ZodOptional<z.ZodBoolean>;
|
|
2110
2153
|
}, z.core.$strip>>;
|
|
2111
2154
|
minRows: z.ZodOptional<z.ZodNumber>;
|
|
2112
2155
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
@@ -3920,4 +3963,4 @@ declare const MarkformFrontmatterSchema: z.ZodObject<{
|
|
|
3920
3963
|
}, z.core.$strip>;
|
|
3921
3964
|
//#endregion
|
|
3922
3965
|
export { HarnessConfigSchema as $, TableRowResponseSchema as $n, SetCheckboxesPatch as $t, ExecutionPlan as A, SourcePositionSchema as An, YearFieldSchema as Ar, ParsedForm as At, FieldPriorityLevel as B, StringListValueSchema as Bn, ProgressSummarySchema as Bt, DateFieldSchema as C, SimpleCheckboxState as Cn, WireResponseStep as Cr, NumberFieldSchema as Ct, DocumentationBlockSchema as D, SingleSelectValue as Dn, WireToolResult as Dr, OptionId as Dt, DocumentationBlock as E, SingleSelectFieldSchema as En, WireToolCallSchema as Er, Option as Et, FieldBase as F, StringField as Fn, ProgressCounts as Ft, FieldSchema as G, SyntaxStyle as Gn, SessionFinal as Gt, FieldProgressSchema as H, StringValueSchema as Hn, QualifiedOptionRef as Ht, FieldGroup as I, StringFieldSchema as In, ProgressCountsSchema as It, FillMode as J, TableField as Jn, SessionTranscriptSchema as Jt, FieldValue as K, TableColumn as Kn, SessionFinalSchema as Kt, FieldGroupSchema as L, StringListField as Ln, ProgressState as Lt, ExplicitCheckboxValue as M, SourceRangeSchema as Mn, YearValueSchema as Mr, PatchRejection as Mt, ExplicitCheckboxValueSchema as N, StepResult as Nn, PatchSchema as Nt, DocumentationTag as O, SingleSelectValueSchema as On, WireToolResultSchema as Or, OptionIdSchema as Ot, Field as P, StepResultSchema as Pn, PatchWarning as Pt, HarnessConfig as Q, TableRowResponse as Qn, SessionTurnStats as Qt, FieldKind as R, StringListFieldSchema as Rn, ProgressStateSchema as Rt, DateField as S, SeveritySchema as Sn, WireResponseFormatSchema as Sr, NumberField as St, DateValueSchema as T, SingleSelectField as Tn, WireToolCall as Tr, NumberValueSchema as Tt, FieldResponse as U, StructureSummary as Un, RunMode as Ut, FieldProgress as V, StringValue as Vn, QualifiedColumnRef as Vt, FieldResponseSchema as W, StructureSummarySchema as Wn, RunModeSchema as Wt, FormSchemaSchema as X, TableRowPatch as Xn, SessionTurnContext as Xt, FormSchema as Y, TableFieldSchema as Yn, SessionTurn as Yt, FrontmatterHarnessConfig as Z, TableRowPatchSchema as Zn, SessionTurnSchema as Zt, CheckboxesValueSchema as _, SetUrlPatch as _n, WireFormat as _r, MultiSelectFieldSchema as _t, ApprovalMode as a, SetNumberPatch as an, UrlListFieldSchema as ar, InspectResult as at, ColumnTypeName as b, SetYearPatchSchema as bn, WireRequestFormatSchema as br, NodeType as bt, CheckboxMode as c, SetSingleSelectPatchSchema as cn, UrlValue as cr, IssueReasonSchema as ct, CheckboxProgressCountsSchema as d, SetStringPatch as dn, ValidationIssueSchema as dr, MarkformFrontmatter as dt, SetCheckboxesPatchSchema as en, TableValue as er, Id as et, CheckboxValue as f, SetStringPatchSchema as fn, ValidatorContext as fr, MarkformFrontmatterSchema as ft, CheckboxesValue as g, SetUrlListPatchSchema as gn, ValidatorRegistry as gr, MultiSelectField as gt, CheckboxesFieldSchema as h, SetUrlListPatch as hn, ValidatorRefSchema as hr, MultiCheckboxStateSchema as ht, ApplyResultSchema as i, SetMultiSelectPatchSchema as in, UrlListField as ir, InspectIssueSchema as it, ExecutionPlanItem as j, SourceRange as jn, YearValue as jr, Patch as jt, DocumentationTagSchema as k, SourcePosition as kn, YearField as kr, OptionSchema as kt, CheckboxModeSchema as l, SetStringListPatch as ln, UrlValueSchema as lr, IssueScope as lt, CheckboxesField as m, SetTablePatchSchema as mn, ValidatorRef as mr, MultiCheckboxState as mt, AnswerStateSchema as n, SetDatePatchSchema as nn, UrlField as nr, IdSchema as nt, CellResponse as o, SetNumberPatchSchema as on, UrlListValue as or, InspectResultSchema as ot, CheckboxValueSchema as p, SetTablePatch as pn, ValidatorFn as pr, MarkformSectionInputSchema as pt, FieldValueSchema as q, TableColumnSchema as qn, SessionTranscript as qt, ApplyResult as r, SetMultiSelectPatch as rn, UrlFieldSchema as rr, InspectIssue as rt, CellResponseSchema as s, SetSingleSelectPatch as sn, UrlListValueSchema as sr, IssueReason as st, AnswerState as t, SetDatePatch as tn, TableValueSchema as tr, IdIndexEntry as tt, CheckboxProgressCounts as u, SetStringListPatchSchema as un, ValidationIssue as ur, IssueScopeSchema as ut, ClearFieldPatch as v, SetUrlPatchSchema as vn, WireFormatSchema as vr, MultiSelectValue as vt, DateValue as w, SimpleCheckboxStateSchema as wn, WireResponseStepSchema as wr, NumberValue as wt, ColumnTypeNameSchema as x, Severity as xn, WireResponseFormat as xr, Note as xt, ClearFieldPatchSchema as y, SetYearPatch as yn, WireRequestFormat as yr, MultiSelectValueSchema as yt, FieldKindSchema as z, StringListValue as zn, ProgressSummary as zt };
|
|
3923
|
-
//# sourceMappingURL=coreTypes-
|
|
3966
|
+
//# sourceMappingURL=coreTypes-CxpqKpBA.d.mts.map
|
|
@@ -63,21 +63,35 @@ const ColumnTypeNameSchema = z.enum([
|
|
|
63
63
|
]);
|
|
64
64
|
/**
|
|
65
65
|
* Column type specification schema (for parsing attributes).
|
|
66
|
-
* Either a simple type name or an object with type and
|
|
66
|
+
* Either a simple type name or an object with type, required, and optional constraints.
|
|
67
67
|
*/
|
|
68
68
|
const ColumnTypeSpecSchema = z.union([ColumnTypeNameSchema, z.object({
|
|
69
69
|
type: ColumnTypeNameSchema,
|
|
70
|
-
required: z.boolean()
|
|
70
|
+
required: z.boolean().optional(),
|
|
71
|
+
minLength: z.number().int().nonnegative().optional(),
|
|
72
|
+
maxLength: z.number().int().nonnegative().optional(),
|
|
73
|
+
pattern: z.string().optional(),
|
|
74
|
+
enum: z.array(z.string()).optional(),
|
|
75
|
+
min: z.union([z.number(), z.string()]).optional(),
|
|
76
|
+
max: z.union([z.number(), z.string()]).optional(),
|
|
77
|
+
integer: z.boolean().optional()
|
|
71
78
|
})]);
|
|
72
79
|
/**
|
|
73
80
|
* Table column schema (normalized form after parsing).
|
|
74
|
-
* Always has explicit required flag.
|
|
81
|
+
* Always has explicit required flag. May include per-column constraints.
|
|
75
82
|
*/
|
|
76
83
|
const TableColumnSchema = z.object({
|
|
77
84
|
id: IdSchema,
|
|
78
85
|
label: z.string(),
|
|
79
86
|
type: ColumnTypeNameSchema,
|
|
80
|
-
required: z.boolean()
|
|
87
|
+
required: z.boolean(),
|
|
88
|
+
minLength: z.number().int().nonnegative().optional(),
|
|
89
|
+
maxLength: z.number().int().nonnegative().optional(),
|
|
90
|
+
pattern: z.string().optional(),
|
|
91
|
+
enum: z.array(z.string()).optional(),
|
|
92
|
+
min: z.union([z.number(), z.string()]).optional(),
|
|
93
|
+
max: z.union([z.number(), z.string()]).optional(),
|
|
94
|
+
integer: z.boolean().optional()
|
|
81
95
|
});
|
|
82
96
|
/** Cell value schema (never null - use sentinels for skipped) */
|
|
83
97
|
const CellValueSchema = z.union([z.string(), z.number()]);
|
|
@@ -748,4 +762,4 @@ const MarkformFrontmatterSchema = z.object({
|
|
|
748
762
|
|
|
749
763
|
//#endregion
|
|
750
764
|
export { SetStringPatchSchema as $, MarkformSectionInputSchema as A, WireResponseStepSchema as At, ProgressCountsSchema as B, HarnessConfigSchema as C, UrlListValueSchema as Ct, IssueReasonSchema as D, WireFormatSchema as Dt, InspectResultSchema as E, ValidatorRefSchema as Et, NumberValueSchema as F, SessionTranscriptSchema as G, ProgressSummarySchema as H, OptionIdSchema as I, SetDatePatchSchema as J, SessionTurnSchema as K, OptionSchema as L, MultiSelectFieldSchema as M, WireToolResultSchema as Mt, MultiSelectValueSchema as N, YearFieldSchema as Nt, IssueScopeSchema as O, WireRequestFormatSchema as Ot, NumberFieldSchema as P, YearValueSchema as Pt, SetStringListPatchSchema as Q, PatchSchema as R, FormSchemaSchema as S, UrlListFieldSchema as St, InspectIssueSchema as T, ValidationIssueSchema as Tt, RunModeSchema as U, ProgressStateSchema as V, SessionFinalSchema as W, SetNumberPatchSchema as X, SetMultiSelectPatchSchema as Y, SetSingleSelectPatchSchema as Z, FieldKindSchema as _, TableFieldSchema as _t, CheckboxProgressCountsSchema as a, SimpleCheckboxStateSchema as at, FieldSchema as b, TableValueSchema as bt, CheckboxesValueSchema as c, SourcePositionSchema as ct, DateFieldSchema as d, StringFieldSchema as dt, SetTablePatchSchema as et, DateValueSchema as f, StringListFieldSchema as ft, FieldGroupSchema as g, TableColumnSchema as gt, ExplicitCheckboxValueSchema as h, StructureSummarySchema as ht, CheckboxModeSchema as i, SeveritySchema as it, MultiCheckboxStateSchema as j, WireToolCallSchema as jt, MarkformFrontmatterSchema as k, WireResponseFormatSchema as kt, ClearFieldPatchSchema as l, SourceRangeSchema as lt, DocumentationTagSchema as m, StringValueSchema as mt, ApplyResultSchema as n, SetUrlPatchSchema as nt, CheckboxValueSchema as o, SingleSelectFieldSchema as ot, DocumentationBlockSchema as p, StringListValueSchema as pt, SetCheckboxesPatchSchema as q, CellResponseSchema as r, SetYearPatchSchema as rt, CheckboxesFieldSchema as s, SingleSelectValueSchema as st, AnswerStateSchema as t, SetUrlListPatchSchema as tt, ColumnTypeNameSchema as u, StepResultSchema as ut, FieldProgressSchema as v, TableRowPatchSchema as vt, IdSchema as w, UrlValueSchema as wt, FieldValueSchema as x, UrlFieldSchema as xt, FieldResponseSchema as y, TableRowResponseSchema as yt, PatchWarningSchema as z };
|
|
751
|
-
//# sourceMappingURL=coreTypes-
|
|
765
|
+
//# sourceMappingURL=coreTypes-DIv9Aabl.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coreTypes-DIv9Aabl.mjs","names":[],"sources":["../src/engine/coreTypes.ts"],"sourcesContent":["/**\n * Core types and Zod schemas for Markform.\n *\n * This module defines all TypeScript types and their corresponding Zod schemas\n * for forms, fields, values, validation, patches, and session transcripts.\n */\n\nimport { z } from 'zod';\n\n// =============================================================================\n// Basic Types\n// =============================================================================\n\n/** Form/group/field ID - globally unique within a document */\nexport type Id = string;\n\n/** Option ID - unique within its containing field */\nexport type OptionId = string;\n\n/** Qualified option reference - used in doc blocks and external references */\nexport type QualifiedOptionRef = `${Id}.${OptionId}`;\n\n/** Qualified column reference - used in table field references (e.g., \"team.name\") */\nexport type QualifiedColumnRef = `${Id}.${Id}`;\n\n/** Validator reference - simple ID or parameterized object */\nexport type ValidatorRef = string | { id: string; [key: string]: unknown };\n\n// =============================================================================\n// Answer State Types (markform-255)\n// =============================================================================\n\n/**\n * Answer state for a field.\n * What action was taken: no answer yet, answered, skipped, or aborted.\n */\nexport type AnswerState = 'unanswered' | 'answered' | 'skipped' | 'aborted';\n\n/**\n * Field response: combines answer state with optional value.\n * Used in responsesByFieldId for all fields.\n */\nexport interface FieldResponse {\n state: AnswerState;\n value?: FieldValue; // present only when state === 'answered'\n reason?: string; // present when state === 'skipped' or 'aborted'\n}\n\n// =============================================================================\n// Note Types (markform-205)\n// =============================================================================\n\n/** Unique note ID (implementation uses n1, n2, n3...) */\nexport type NoteId = string;\n\n/** Note attached to a field, group, or form */\nexport interface Note {\n id: NoteId;\n ref: Id; // target ID (field, group, or form)\n role: string; // who created (agent, user, ...)\n text: string; // markdown content\n}\n\n// =============================================================================\n// Checkbox Types\n// =============================================================================\n\n/** Multi-checkbox states (checkboxMode=\"multi\", default) - 5 states */\nexport type MultiCheckboxState = 'todo' | 'done' | 'incomplete' | 'active' | 'na';\n\n/** Simple checkbox states (checkboxMode=\"simple\") - 2 states, GFM-compatible */\nexport type SimpleCheckboxState = 'todo' | 'done';\n\n/** Explicit checkbox values (checkboxMode=\"explicit\") - requires yes/no answer */\nexport type ExplicitCheckboxValue = 'unfilled' | 'yes' | 'no';\n\n/** Union type for all checkbox values */\nexport type CheckboxValue = MultiCheckboxState | ExplicitCheckboxValue;\n\n/** Checkbox mode determines which states are valid */\nexport type CheckboxMode = 'multi' | 'simple' | 'explicit';\n\n/**\n * Controls how fill handles existing values for target role fields.\n * - 'continue': Skip fields that already have values (default)\n * - 'overwrite': Clear and re-fill all fields for the target role\n */\nexport type FillMode = 'continue' | 'overwrite';\n\n/**\n * Agent mode for fill operations.\n * - 'mock': Use mock agent (for testing, requires mock source file)\n * - 'live': Use live LLM agent (default, requires model)\n */\nexport type MockMode = 'mock' | 'live';\n\n/**\n * Controls whether a checkbox field acts as a blocking checkpoint.\n * - 'none': No blocking behavior (default)\n * - 'blocking': Fields after this cannot be filled until checkbox is complete\n */\nexport type ApprovalMode = 'none' | 'blocking';\n\n// =============================================================================\n// Field Kinds\n// =============================================================================\n\n/** Field kind discriminant */\nexport type FieldKind =\n | 'string'\n | 'number'\n | 'string_list'\n | 'checkboxes'\n | 'single_select'\n | 'multi_select'\n | 'url'\n | 'url_list'\n | 'date'\n | 'year'\n | 'table';\n\n// =============================================================================\n// Table Field Definitions\n// =============================================================================\n\n/** Base column type for table cells - simple types only */\nexport type ColumnTypeName = 'string' | 'number' | 'url' | 'date' | 'year';\n\n/**\n * Per-column constraints by type.\n * These mirror the top-level field constraints but apply at the column level.\n */\nexport interface StringColumnConstraints {\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n /** Allowed values (controlled vocabulary). Column value must be one of these. */\n enum?: string[];\n}\n\nexport interface NumberColumnConstraints {\n min?: number;\n max?: number;\n integer?: boolean;\n}\n\nexport interface DateColumnConstraints {\n min?: string; // ISO 8601 date string (YYYY-MM-DD)\n max?: string;\n}\n\nexport interface YearColumnConstraints {\n min?: number;\n max?: number;\n}\n\n/**\n * Column type specification in attributes.\n * Can be a simple string, or an object with type, required flag, and optional constraints.\n */\nexport type ColumnTypeSpec =\n | ColumnTypeName\n | ({ type: ColumnTypeName; required?: boolean } & StringColumnConstraints &\n NumberColumnConstraints &\n DateColumnConstraints &\n YearColumnConstraints);\n\n/**\n * Column definition - derived from columnIds, columnLabels, columnTypes attributes.\n * After parsing, columns always have explicit required flag (default: false).\n * May include per-column constraints matching the column type.\n */\nexport interface TableColumn {\n id: Id; // from columnIds array\n label: string; // from columnLabels array (defaults to id)\n type: ColumnTypeName; // from columnTypes array (defaults to 'string')\n required: boolean; // from columnTypes object or default false\n // Per-column constraints (type-specific)\n minLength?: number; // string\n maxLength?: number; // string\n pattern?: string; // string\n enum?: string[]; // string (controlled vocabulary)\n min?: number | string; // number: number, date: string, year: number\n max?: number | string; // number: number, date: string, year: number\n integer?: boolean; // number\n}\n\n/** Field priority level for issue scoring */\nexport type FieldPriorityLevel = 'high' | 'medium' | 'low';\n\n/** Base interface for all field kinds */\nexport interface FieldBase {\n id: Id;\n label: string;\n required: boolean; // explicit: parser defaults to false if not specified\n priority: FieldPriorityLevel; // explicit: parser defaults to 'medium' if not specified\n role: string; // explicit: parser defaults to AGENT_ROLE if not specified\n validate?: ValidatorRef[];\n /** Whether to include this field in report output. Default: true */\n report?: boolean;\n /** Hint text for empty field (text-entry fields only) */\n placeholder?: string;\n /** Example values (text-entry fields only) */\n examples?: string[];\n /** True for auto-generated implicit fields (e.g., 'checkboxes' for plan documents) */\n implicit?: boolean;\n /** Parallel batch identifier. Top-level fields only. */\n parallel?: string;\n /** Fill order. Lower values filled first. Default: 0. */\n order?: number;\n}\n\n// =============================================================================\n// Field Kind Categories\n// =============================================================================\n\n/** Field kinds that accept text entry (support placeholder/examples) */\nexport const TEXT_ENTRY_FIELD_KINDS = [\n 'string',\n 'number',\n 'string_list',\n 'url',\n 'url_list',\n] as const;\n\n/** Field kinds that are choosers (do NOT support placeholder/examples) */\nexport const CHOOSER_FIELD_KINDS = ['single_select', 'multi_select', 'checkboxes'] as const;\n\n/**\n * Check if a field kind accepts text entry (supports placeholder/examples).\n */\nexport function isTextEntryFieldKind(kind: FieldKind): boolean {\n return (TEXT_ENTRY_FIELD_KINDS as readonly string[]).includes(kind);\n}\n\n/** String field - single or multiline text */\nexport interface StringField extends FieldBase {\n kind: 'string';\n multiline?: boolean;\n pattern?: string;\n minLength?: number;\n maxLength?: number;\n}\n\n/** Number field - numeric value with optional constraints */\nexport interface NumberField extends FieldBase {\n kind: 'number';\n min?: number;\n max?: number;\n integer?: boolean;\n}\n\n/** String list field - array of user-provided strings */\nexport interface StringListField extends FieldBase {\n kind: 'string_list';\n minItems?: number;\n maxItems?: number;\n itemMinLength?: number;\n itemMaxLength?: number;\n uniqueItems?: boolean;\n}\n\n/** Option in select/checkbox fields */\nexport interface Option {\n id: Id;\n label: string;\n}\n\n/** Checkboxes field - stateful checklist with configurable modes */\nexport interface CheckboxesField extends FieldBase {\n kind: 'checkboxes';\n checkboxMode: CheckboxMode; // explicit: parser defaults to 'multi' if not specified\n minDone?: number;\n options: Option[];\n approvalMode: ApprovalMode; // explicit: parser defaults to 'none' if not specified\n}\n\n/** Single-select field - exactly one option can be selected */\nexport interface SingleSelectField extends FieldBase {\n kind: 'single_select';\n options: Option[];\n}\n\n/** Multi-select field - multiple options can be selected */\nexport interface MultiSelectField extends FieldBase {\n kind: 'multi_select';\n options: Option[];\n minSelections?: number;\n maxSelections?: number;\n}\n\n/** URL field - single URL value with built-in format validation */\nexport interface UrlField extends FieldBase {\n kind: 'url';\n // No additional constraints - URL format validation is built-in\n}\n\n/** URL list field - multiple URLs (for citations, sources, references) */\nexport interface UrlListField extends FieldBase {\n kind: 'url_list';\n minItems?: number;\n maxItems?: number;\n uniqueItems?: boolean;\n}\n\n/** Date field - ISO 8601 date (YYYY-MM-DD) with optional min/max constraints */\nexport interface DateField extends FieldBase {\n kind: 'date';\n min?: string; // ISO 8601 date string (YYYY-MM-DD)\n max?: string; // ISO 8601 date string (YYYY-MM-DD)\n}\n\n/** Year field - integer year with optional min/max constraints */\nexport interface YearField extends FieldBase {\n kind: 'year';\n min?: number; // minimum year (inclusive)\n max?: number; // maximum year (inclusive)\n}\n\n/**\n * Table field - structured tabular data with typed columns.\n * Inherits all FieldBase properties including `report?: boolean`.\n */\nexport interface TableField extends FieldBase {\n kind: 'table';\n columns: TableColumn[]; // column definitions in order\n minRows?: number;\n maxRows?: number;\n}\n\n/** Union of all field kinds */\nexport type Field =\n | StringField\n | NumberField\n | StringListField\n | CheckboxesField\n | SingleSelectField\n | MultiSelectField\n | UrlField\n | UrlListField\n | DateField\n | YearField\n | TableField;\n\n// =============================================================================\n// Form Structure Types\n// =============================================================================\n\n/**\n * Field group: container for fields (nested groups deferred to future).\n */\nexport interface FieldGroup {\n id: Id;\n title?: string;\n validate?: ValidatorRef[];\n children: Field[];\n /** Whether to include this group in report output. Default: true */\n report?: boolean;\n /**\n * True if this group was implicitly created for fields placed directly\n * under the form (not wrapped in an explicit group).\n * Implicit groups are serialized without group wrapper tags.\n */\n implicit?: boolean;\n /** Parallel batch identifier. */\n parallel?: string;\n /** Fill order. Lower values filled first. Default: 0. */\n order?: number;\n}\n\n// =============================================================================\n// Execution Plan Types\n// =============================================================================\n\n/** An item in an execution plan (a top-level field or group). */\nexport interface ExecutionPlanItem {\n itemId: Id;\n itemType: 'field' | 'group';\n order: number;\n}\n\n/** A parallel batch: items that can execute concurrently. */\nexport interface ParallelBatch {\n batchId: string;\n items: ExecutionPlanItem[];\n}\n\n/** Execution plan: partitions form into loose-serial pool + parallel batches. */\nexport interface ExecutionPlan {\n looseSerial: ExecutionPlanItem[];\n parallelBatches: ParallelBatch[];\n /** Distinct order levels found in the form, sorted ascending. */\n orderLevels: number[];\n}\n\n/** Form schema - root container with groups */\nexport interface FormSchema {\n id: Id;\n title?: string;\n description?: string;\n groups: FieldGroup[];\n}\n\n// =============================================================================\n// Field Value Types\n// =============================================================================\n\n/** String field value */\nexport interface StringValue {\n kind: 'string';\n value: string | null;\n}\n\n/** Number field value */\nexport interface NumberValue {\n kind: 'number';\n value: number | null;\n}\n\n/** String list field value */\nexport interface StringListValue {\n kind: 'string_list';\n items: string[];\n}\n\n/** Checkboxes field value */\nexport interface CheckboxesValue {\n kind: 'checkboxes';\n values: Record<OptionId, CheckboxValue>;\n}\n\n/** Single-select field value */\nexport interface SingleSelectValue {\n kind: 'single_select';\n selected: OptionId | null;\n}\n\n/** Multi-select field value */\nexport interface MultiSelectValue {\n kind: 'multi_select';\n selected: OptionId[];\n}\n\n/** URL field value */\nexport interface UrlValue {\n kind: 'url';\n value: string | null; // null if empty, validated URL string otherwise\n}\n\n/** URL list field value */\nexport interface UrlListValue {\n kind: 'url_list';\n items: string[]; // Array of URL strings\n}\n\n/** Date field value */\nexport interface DateValue {\n kind: 'date';\n value: string | null; // ISO 8601 date string (YYYY-MM-DD) or null\n}\n\n/** Year field value */\nexport interface YearValue {\n kind: 'year';\n value: number | null; // integer year or null\n}\n\n/**\n * Cell value - scalar value only (never null).\n * Empty/skipped cells use %SKIP% sentinel, not null.\n */\nexport type CellValue = string | number;\n\n/**\n * Cell response - matches FieldResponse pattern.\n * Used in internal representation (ParsedForm).\n */\nexport interface CellResponse {\n state: 'answered' | 'skipped' | 'aborted'; // cells cannot be 'unanswered'\n value?: CellValue; // present when state === 'answered'\n reason?: string; // present when state === 'skipped' or 'aborted'\n}\n\n/** Table row response - each cell has a response (internal representation) */\nexport type TableRowResponse = Record<Id, CellResponse>;\n\n/** Table field value (internal representation) */\nexport interface TableValue {\n kind: 'table';\n rows: TableRowResponse[];\n}\n\n/** Union of all field value types */\nexport type FieldValue =\n | StringValue\n | NumberValue\n | StringListValue\n | CheckboxesValue\n | SingleSelectValue\n | MultiSelectValue\n | UrlValue\n | UrlListValue\n | DateValue\n | YearValue\n | TableValue;\n\n// =============================================================================\n// Documentation Block\n// =============================================================================\n\n/** Documentation tag type - determines the semantic purpose of the block */\nexport type DocumentationTag = 'description' | 'instructions' | 'documentation';\n\n/** Documentation block attached to form elements */\nexport interface DocumentationBlock {\n /** The semantic tag type: description, instructions, or documentation */\n tag: DocumentationTag;\n /** Reference to form/group/field ID or qualified option ref (fieldId.optionId) */\n ref: string;\n bodyMarkdown: string;\n /**\n * Whether to include this block in report output.\n * Default: false for 'instructions' tag, true for others.\n */\n report?: boolean;\n}\n\n// =============================================================================\n// Form Metadata (from frontmatter)\n// =============================================================================\n\n/**\n * Optional harness configuration from frontmatter.\n * Forms can specify default harness settings for fill operations.\n */\nexport interface FrontmatterHarnessConfig {\n maxTurns?: number;\n maxPatchesPerTurn?: number;\n maxIssuesPerTurn?: number;\n maxParallelAgents?: number;\n}\n\n/**\n * Run mode for the form - determines how 'markform run' executes.\n * - interactive: Launch interactive fill for user-role fields\n * - fill: Prompt for model, run agent fill\n * - research: Prompt for web-search model, run research fill\n */\nexport type RunMode = 'interactive' | 'fill' | 'research';\n\n/** Form-level metadata from YAML frontmatter, including role configuration */\nexport interface FormMetadata {\n markformVersion: string;\n /** Optional title from frontmatter (may differ from form tag title) */\n title?: string;\n /** Optional description from frontmatter */\n description?: string;\n roles: string[];\n roleInstructions: Record<string, string>;\n /** Optional harness configuration from frontmatter */\n harnessConfig?: FrontmatterHarnessConfig;\n /** How this form should be executed by 'markform run' */\n runMode?: RunMode;\n}\n\n// =============================================================================\n// Parsed Form\n// =============================================================================\n\n/** Node type for ID index entries - identifies what structural element an ID refers to */\nexport type NodeType = 'form' | 'group' | 'field' | 'option';\n\n/** ID index entry for fast lookup and validation */\nexport interface IdIndexEntry {\n nodeType: NodeType; // what this ID refers to\n parentId?: Id;\n fieldId?: Id;\n}\n\n/**\n * The syntax style used in a Markform document.\n * - 'comments': HTML comment syntax with f: namespace (`<!-- f:tag -->`) - primary/default\n * - 'tags': Traditional Markdoc Jinja-style syntax (`{% tag %}`)\n */\nexport type SyntaxStyle = 'comments' | 'tags';\n\n/**\n * Tag types that can appear in Markform documents for position tracking.\n * - 'form': The root form tag\n * - 'group': Field group tags\n * - 'field': Individual field tags (may include value fence)\n * - 'note': Inline note tags (`{% note %}`)\n * - 'documentation': Documentation block tags (instructions, description, etc.)\n */\nexport type TagType = 'form' | 'group' | 'field' | 'note' | 'documentation';\n\n/**\n * Position of a Markform tag region in the source document.\n * Used for splice-based serialization to preserve content outside tags.\n */\nexport interface TagRegion {\n /** ID of the element (form, group, field ID, or note ID) */\n tagId: Id;\n /** Type of Markform tag */\n tagType: TagType;\n /** Start position in rawSource (inclusive, byte offset) */\n startOffset: number;\n /** End position in rawSource (exclusive, byte offset) */\n endOffset: number;\n /**\n * For field tags: whether region includes value fence.\n * True if field has a value block between open/close tags.\n */\n includesValue?: boolean;\n}\n\n/** Canonical internal representation returned by parseForm() */\nexport interface ParsedForm {\n schema: FormSchema;\n responsesByFieldId: Record<Id, FieldResponse>; // replaces valuesByFieldId + skipsByFieldId\n notes: Note[]; // agent/user notes\n docs: DocumentationBlock[];\n orderIndex: Id[];\n idIndex: Map<Id, IdIndexEntry>;\n metadata?: FormMetadata; // optional for backward compat with forms without frontmatter\n /** The syntax style detected in the original document (for round-trip serialization) */\n syntaxStyle?: SyntaxStyle;\n\n // Raw source preservation for content-preserving serialization\n /**\n * Original markdown source (post-frontmatter, post-preprocessing for comment syntax).\n * Used for splice-based serialization to preserve content outside Markform tags.\n */\n rawSource?: string;\n /**\n * Positions of all Markform tags in rawSource.\n * Sorted by startOffset in document order.\n */\n tagRegions?: TagRegion[];\n}\n\n// =============================================================================\n// Validation Types\n// =============================================================================\n\n/** Validation issue severity */\nexport type Severity = 'error' | 'warning' | 'info';\n\n/** Source position for error locations */\nexport interface SourcePosition {\n line: number;\n col: number;\n}\n\n/** Source range for error locations */\nexport interface SourceRange {\n start: SourcePosition;\n end: SourcePosition;\n}\n\n/** Validation issue from the validation pipeline */\nexport interface ValidationIssue {\n severity: Severity;\n message: string;\n code?: string;\n ref?: Id;\n path?: string;\n range?: SourceRange;\n validatorId?: string;\n source: 'builtin' | 'code' | 'llm';\n}\n\n// =============================================================================\n// Error Types (markform-210)\n// =============================================================================\n\n/** Location information for error reporting */\nexport interface ErrorLocation {\n line?: number;\n column?: number;\n fieldId?: Id;\n noteId?: NoteId;\n}\n\n/** Markdown/Markdoc syntax error */\nexport interface ParseError {\n type: 'parse';\n message: string;\n location?: ErrorLocation;\n}\n\n/** Markform model consistency error */\nexport interface MarkformValidationError {\n type: 'validation';\n message: string;\n location?: ErrorLocation;\n}\n\n/** Union of all Markform error types */\nexport type MarkformError = ParseError | MarkformValidationError;\n\n// =============================================================================\n// Inspect Types\n// =============================================================================\n\n/** Standard reason codes for inspect issues */\nexport type IssueReason =\n | 'validation_error'\n | 'required_missing'\n | 'checkbox_incomplete'\n | 'min_items_not_met'\n | 'optional_unanswered';\n\n/** Issue scope - the level at which the issue applies */\nexport type IssueScope = 'form' | 'group' | 'field' | 'option' | 'column' | 'cell';\n\n/** Inspect issue - unified type for agent/UI consumption */\nexport interface InspectIssue {\n ref: string;\n scope: IssueScope;\n reason: IssueReason;\n message: string;\n severity: 'required' | 'recommended';\n priority: number;\n blockedBy?: Id; // if field is blocked by an incomplete blocking checkpoint\n}\n\n// =============================================================================\n// Summary Types\n// =============================================================================\n\n/** Structure summary - describes static form schema */\nexport interface StructureSummary {\n groupCount: number;\n fieldCount: number;\n optionCount: number;\n /** Count of table columns across all table fields */\n columnCount: number;\n fieldCountByKind: Record<FieldKind, number>;\n groupsById: Record<Id, 'field_group'>;\n fieldsById: Record<Id, FieldKind>;\n optionsById: Record<QualifiedOptionRef, { parentFieldId: Id; parentFieldKind: FieldKind }>;\n /** Map of qualified column refs to column metadata */\n columnsById: Record<QualifiedColumnRef, { parentFieldId: Id; columnType: ColumnTypeName }>;\n}\n\n/** Progress state for a field or form */\nexport type ProgressState = 'empty' | 'incomplete' | 'invalid' | 'complete';\n\n/** Checkbox progress counts */\nexport interface CheckboxProgressCounts {\n total: number;\n // Multi mode\n todo: number;\n done: number;\n incomplete: number;\n active: number;\n na: number;\n // Explicit mode\n unfilled: number;\n yes: number;\n no: number;\n}\n\n/**\n * Field progress tracking.\n * Uses orthogonal booleans instead of ProgressState enum.\n */\nexport interface FieldProgress {\n kind: FieldKind;\n required: boolean;\n answerState: AnswerState;\n hasNotes: boolean;\n noteCount: number;\n /** Whether the field has a value (answered, or has checkbox selections) */\n empty: boolean;\n /** Whether the field passes validation (no issues) */\n valid: boolean;\n issueCount: number;\n checkboxProgress?: CheckboxProgressCounts;\n}\n\n/**\n * Progress counts rollup with three orthogonal dimensions.\n */\nexport interface ProgressCounts {\n totalFields: number;\n requiredFields: number;\n\n // Dimension 1: AnswerState (mutually exclusive, sum to totalFields)\n unansweredFields: number;\n answeredFields: number;\n skippedFields: number;\n abortedFields: number;\n\n // Dimension 2: Validity (mutually exclusive, sum to totalFields)\n validFields: number;\n invalidFields: number;\n\n // Dimension 3: Value presence (mutually exclusive, sum to totalFields)\n emptyFields: number;\n filledFields: number;\n\n // Derived counts\n emptyRequiredFields: number;\n totalNotes: number;\n}\n\n/** Progress summary - tracks filling progress */\nexport interface ProgressSummary {\n counts: ProgressCounts;\n fields: Record<Id, FieldProgress>;\n}\n\n// =============================================================================\n// Inspect/Apply Result Types\n// =============================================================================\n\n/** Result from inspect operation */\nexport interface InspectResult {\n structureSummary: StructureSummary;\n progressSummary: ProgressSummary;\n issues: InspectIssue[];\n isComplete: boolean;\n formState: ProgressState;\n}\n\n/** Details about a rejected patch */\nexport interface PatchRejection {\n patchIndex: number;\n message: string;\n /** Field ID if available (for type mismatch errors) */\n fieldId?: string;\n /** Field kind if available (for type mismatch errors) */\n fieldKind?: string;\n /** Column IDs if available (for table fields) */\n columnIds?: string[];\n}\n\n/** Coercion type for patch warnings */\nexport type PatchCoercionType =\n | 'string_to_list'\n | 'url_to_list'\n | 'option_to_array'\n | 'boolean_to_checkbox'\n | 'array_to_checkboxes';\n\n/** Warning for coerced patches */\nexport interface PatchWarning {\n patchIndex: number;\n fieldId: string;\n message: string;\n coercion: PatchCoercionType;\n}\n\n/** Status of patch application */\nexport type ApplyStatus = 'applied' | 'partial' | 'rejected';\n\n/** Result from apply operation */\nexport interface ApplyResult {\n applyStatus: ApplyStatus;\n structureSummary: StructureSummary;\n progressSummary: ProgressSummary;\n issues: InspectIssue[];\n isComplete: boolean;\n formState: ProgressState;\n /** Patches that were successfully applied (normalized/coerced) */\n appliedPatches: Patch[];\n /** Empty on success, contains rejection details on failure */\n rejectedPatches: PatchRejection[];\n /** Warnings for patches that were coerced */\n warnings: PatchWarning[];\n}\n\n// =============================================================================\n// Patch Types\n// =============================================================================\n\n/** Set string field value */\nexport interface SetStringPatch {\n op: 'set_string';\n fieldId: Id;\n value: string | null;\n}\n\n/** Set number field value */\nexport interface SetNumberPatch {\n op: 'set_number';\n fieldId: Id;\n value: number | null;\n}\n\n/** Set string list field value */\nexport interface SetStringListPatch {\n op: 'set_string_list';\n fieldId: Id;\n value: string[];\n}\n\n/** Set checkboxes field value (merges with existing) */\nexport interface SetCheckboxesPatch {\n op: 'set_checkboxes';\n fieldId: Id;\n value: Record<OptionId, CheckboxValue>;\n}\n\n/** Set single-select field value */\nexport interface SetSingleSelectPatch {\n op: 'set_single_select';\n fieldId: Id;\n value: OptionId | null;\n}\n\n/** Set multi-select field value */\nexport interface SetMultiSelectPatch {\n op: 'set_multi_select';\n fieldId: Id;\n value: OptionId[];\n}\n\n/** Set URL field value */\nexport interface SetUrlPatch {\n op: 'set_url';\n fieldId: Id;\n value: string | null;\n}\n\n/** Set URL list field value */\nexport interface SetUrlListPatch {\n op: 'set_url_list';\n fieldId: Id;\n value: string[];\n}\n\n/** Set date field value */\nexport interface SetDatePatch {\n op: 'set_date';\n fieldId: Id;\n value: string | null; // ISO 8601 date string (YYYY-MM-DD) or null\n}\n\n/** Set year field value */\nexport interface SetYearPatch {\n op: 'set_year';\n fieldId: Id;\n value: number | null; // integer year or null\n}\n\n/**\n * Table row for patches - simplified format.\n * Values can be:\n * - Actual value (string/number)\n * - null to indicate %SKIP% (serialized as %SKIP% in markdown)\n * - \"%SKIP%\" or \"%ABORT%\" sentinel strings with optional reason\n */\nexport type TableRowPatch = Record<Id, CellValue | null | string>;\n\n/**\n * Set table field patch.\n * Uses simplified format where null values become %SKIP% on serialize.\n */\nexport interface SetTablePatch {\n op: 'set_table';\n fieldId: Id;\n value: TableRowPatch[];\n}\n\n/** Append rows to a table field */\nexport interface AppendTablePatch {\n op: 'append_table';\n fieldId: Id;\n value: TableRowPatch[];\n}\n\n/** Delete a row from a table field by index */\nexport interface DeleteTablePatch {\n op: 'delete_table';\n fieldId: Id;\n value: number; // 0-based row index\n}\n\n/** Append items to a string_list field */\nexport interface AppendStringListPatch {\n op: 'append_string_list';\n fieldId: Id;\n value: string[];\n}\n\n/** Delete an item from a string_list field by index */\nexport interface DeleteStringListPatch {\n op: 'delete_string_list';\n fieldId: Id;\n value: number; // 0-based item index\n}\n\n/** Append items to a url_list field */\nexport interface AppendUrlListPatch {\n op: 'append_url_list';\n fieldId: Id;\n value: string[];\n}\n\n/** Delete an item from a url_list field by index */\nexport interface DeleteUrlListPatch {\n op: 'delete_url_list';\n fieldId: Id;\n value: number; // 0-based item index\n}\n\n/** Clear field value */\nexport interface ClearFieldPatch {\n op: 'clear_field';\n fieldId: Id;\n}\n\n/** Skip field - explicitly skip an optional field without providing a value */\nexport interface SkipFieldPatch {\n op: 'skip_field';\n fieldId: Id;\n role: string; // required: who is skipping\n reason?: string; // optional reason for skipping\n}\n\n/** Abort field - mark a field as unable to be completed */\nexport interface AbortFieldPatch {\n op: 'abort_field';\n fieldId: Id;\n role: string;\n reason?: string;\n}\n\n/** Add note - attach a note to a form element */\nexport interface AddNotePatch {\n op: 'add_note';\n ref: Id;\n role: string;\n text: string;\n}\n\n/** Remove note - remove a specific note by ID */\nexport interface RemoveNotePatch {\n op: 'remove_note';\n noteId: NoteId;\n}\n\n/** Union of all patch types */\nexport type Patch =\n | SetStringPatch\n | SetNumberPatch\n | SetStringListPatch\n | SetCheckboxesPatch\n | SetSingleSelectPatch\n | SetMultiSelectPatch\n | SetUrlPatch\n | SetUrlListPatch\n | SetDatePatch\n | SetYearPatch\n | SetTablePatch\n | AppendTablePatch\n | DeleteTablePatch\n | AppendStringListPatch\n | DeleteStringListPatch\n | AppendUrlListPatch\n | DeleteUrlListPatch\n | ClearFieldPatch\n | SkipFieldPatch\n | AbortFieldPatch\n | AddNotePatch\n | RemoveNotePatch;\n\n// =============================================================================\n// Harness Types\n// =============================================================================\n\n/** Result from harness step */\nexport interface StepResult {\n structureSummary: StructureSummary;\n progressSummary: ProgressSummary;\n issues: InspectIssue[];\n stepBudget: number;\n isComplete: boolean;\n turnNumber: number;\n /** Number of patches actually applied (set by harness.apply, undefined for step-only results) */\n patchesApplied?: number;\n /** Rejection details if patches failed (set by harness.apply, undefined for step-only results) */\n rejectedPatches?: PatchRejection[];\n /** Coercion warnings from patch normalization (set by harness.apply, undefined for step-only results) */\n coercionWarnings?: PatchWarning[];\n}\n\n// =============================================================================\n// Session Transcript Types\n// =============================================================================\n\n/** Harness configuration */\nexport interface HarnessConfig {\n maxIssuesPerTurn: number;\n maxPatchesPerTurn: number;\n maxTurns: number;\n /** Maximum unique fields to include issues for per turn (undefined = unlimited) */\n maxFieldsPerTurn?: number;\n /** Maximum unique groups to include issues for per turn (undefined = unlimited) */\n maxGroupsPerTurn?: number;\n /** Target roles to fill (default: [AGENT_ROLE], '*' for all) */\n targetRoles?: string[];\n /** Fill mode: 'continue' (skip filled) or 'overwrite' (re-fill) */\n fillMode?: FillMode;\n /** Max concurrent agents for parallel batches (default: 4) */\n maxParallelAgents?: number;\n}\n\n/** LLM stats for a turn (from live agent) */\nexport interface SessionTurnStats {\n /** Input tokens for this turn */\n inputTokens?: number;\n /** Output tokens for this turn */\n outputTokens?: number;\n /** Tool calls made during this turn */\n toolCalls?: { name: string; count: number }[];\n}\n\n/** Context prompts sent to LLM (for session logging and debugging) */\nexport interface SessionTurnContext {\n /** System prompt with instructions */\n systemPrompt: string;\n /** Context prompt with issues and field schema */\n contextPrompt: string;\n}\n\n// =============================================================================\n// Wire Format Types (for comprehensive session logging)\n// =============================================================================\n\n/**\n * Tool call captured from LLM response step.\n * Omits toolCallId for stability (changes each run).\n */\nexport interface WireToolCall {\n /** Name of the tool that was called */\n toolName: string;\n /** Input passed to the tool */\n input: unknown;\n}\n\n/**\n * Tool result captured from LLM response step.\n * Omits toolCallId for stability (changes each run).\n */\nexport interface WireToolResult {\n /** Name of the tool that returned this result */\n toolName: string;\n /** Result returned by tool.execute() */\n result: unknown;\n}\n\n/**\n * A single step in the LLM response.\n * Corresponds to one iteration of the tool-calling loop.\n */\nexport interface WireResponseStep {\n /** Tool calls made in this step */\n toolCalls: WireToolCall[];\n /** Results returned by tools in this step */\n toolResults: WireToolResult[];\n /** Text output from the model in this step (null if none) */\n text: string | null;\n}\n\n/**\n * The request sent to the LLM via Vercel AI SDK generateText().\n */\nexport interface WireRequestFormat {\n /** System prompt with agent instructions */\n system: string;\n /** Context prompt with form state and issues */\n prompt: string;\n /** Tool definitions with descriptions and schemas */\n tools: Record<\n string,\n {\n /** Tool description shown to LLM */\n description: string;\n /** JSON Schema for tool input */\n inputSchema: unknown;\n }\n >;\n}\n\n/**\n * The response received from the LLM via Vercel AI SDK generateText().\n */\nexport interface WireResponseFormat {\n /** Steps in the tool-calling loop */\n steps: WireResponseStep[];\n /** Token usage for this call */\n usage: {\n inputTokens: number;\n outputTokens: number;\n };\n}\n\n/**\n * Complete wire format capturing the LLM request and response.\n *\n * This captures the exact data sent to and received from the LLM,\n * enabling comprehensive regression testing and prompt engineering visibility.\n *\n * Used in session logging to provide a \"transparent view\" of LLM interactions\n * that can be diffed to catch changes in prompts, schemas, or error messages.\n */\nexport interface WireFormat {\n /** The request sent to the LLM */\n request: WireRequestFormat;\n /** The response received from the LLM */\n response: WireResponseFormat;\n}\n\n/** Session turn - one iteration of the harness loop */\nexport interface SessionTurn {\n turn: number;\n inspect: {\n issues: InspectIssue[];\n };\n /** Context sent to LLM (prompts with field schema info) */\n context?: SessionTurnContext;\n apply: {\n patches: Patch[];\n /** Patches that were rejected (type mismatch, invalid field, etc.) */\n rejectedPatches?: PatchRejection[];\n /** Warnings for patches that were coerced (e.g., string → array) */\n warnings?: PatchWarning[];\n };\n after: {\n requiredIssueCount: number;\n markdownSha256: string;\n answeredFieldCount: number;\n skippedFieldCount: number;\n };\n /** LLM stats (only present for live agent sessions) */\n llm?: SessionTurnStats;\n /**\n * Complete wire format for comprehensive session logging.\n * Captures exact LLM request/response for regression testing.\n * Optional - only populated when wire format capture is enabled.\n */\n wire?: WireFormat;\n}\n\n/** Final session expectations */\nexport interface SessionFinal {\n expectComplete: boolean;\n expectedCompletedForm: string;\n}\n\n/** Session transcript for golden testing */\nexport interface SessionTranscript {\n sessionVersion: string;\n mode: MockMode;\n form: {\n path: string;\n };\n validators?: {\n code?: string;\n };\n mock?: {\n completedMock: string;\n };\n live?: {\n modelId: string;\n };\n harness: HarnessConfig;\n turns: SessionTurn[];\n final: SessionFinal;\n}\n\n// =============================================================================\n// Frontmatter Types\n// =============================================================================\n\n/** Markform frontmatter structure */\nexport interface MarkformFrontmatter {\n markformVersion: string;\n formSummary: StructureSummary;\n formProgress: ProgressSummary;\n formState: ProgressState;\n}\n\n// =============================================================================\n// Validator Types\n// =============================================================================\n\n/** Context passed to validator functions */\nexport interface ValidatorContext {\n schema: FormSchema;\n values: Record<Id, FieldValue>;\n targetId: Id;\n targetSchema: Field | FieldGroup | FormSchema;\n params: Record<string, unknown>;\n}\n\n/** Validator function signature */\nexport type ValidatorFn = (ctx: ValidatorContext) => ValidationIssue[];\n\n/** Validator registry from sidecar files */\nexport type ValidatorRegistry = Record<string, ValidatorFn>;\n\n// =============================================================================\n// Zod Schemas\n// =============================================================================\n\n// Basic schemas\nexport const IdSchema = z.string().min(1);\nexport const OptionIdSchema = z.string().min(1);\nexport const NoteIdSchema = z.string().min(1);\n\nexport const ValidatorRefSchema = z.union([z.string(), z.looseObject({ id: z.string() })]);\n\n// Answer state schema (markform-255)\nexport const AnswerStateSchema = z.enum(['unanswered', 'answered', 'skipped', 'aborted']);\n\n// Checkbox state schemas\nexport const MultiCheckboxStateSchema = z.enum(['todo', 'done', 'incomplete', 'active', 'na']);\n\nexport const SimpleCheckboxStateSchema = z.enum(['todo', 'done']);\n\nexport const ExplicitCheckboxValueSchema = z.enum(['unfilled', 'yes', 'no']);\n\nexport const CheckboxValueSchema = z.union([MultiCheckboxStateSchema, ExplicitCheckboxValueSchema]);\n\nexport const CheckboxModeSchema = z.enum(['multi', 'simple', 'explicit']);\n\nexport const FillModeSchema = z.enum(['continue', 'overwrite']);\n\nexport const MockModeSchema = z.enum(['mock', 'live']);\n\nexport const ApprovalModeSchema = z.enum(['none', 'blocking']);\n\n// Field kind schema\nexport const FieldKindSchema = z.enum([\n 'string',\n 'number',\n 'string_list',\n 'checkboxes',\n 'single_select',\n 'multi_select',\n 'url',\n 'url_list',\n 'date',\n 'year',\n 'table',\n]);\n\n// =============================================================================\n// Table Type Zod Schemas\n// =============================================================================\n\n/** Base column type name schema */\nexport const ColumnTypeNameSchema = z.enum(['string', 'number', 'url', 'date', 'year']);\n\n/**\n * Column type specification schema (for parsing attributes).\n * Either a simple type name or an object with type, required, and optional constraints.\n */\nexport const ColumnTypeSpecSchema = z.union([\n ColumnTypeNameSchema,\n z.object({\n type: ColumnTypeNameSchema,\n required: z.boolean().optional(),\n // String constraints\n minLength: z.number().int().nonnegative().optional(),\n maxLength: z.number().int().nonnegative().optional(),\n pattern: z.string().optional(),\n enum: z.array(z.string()).optional(),\n // Number/year/date constraints\n min: z.union([z.number(), z.string()]).optional(),\n max: z.union([z.number(), z.string()]).optional(),\n integer: z.boolean().optional(),\n }),\n]);\n\n/**\n * Table column schema (normalized form after parsing).\n * Always has explicit required flag. May include per-column constraints.\n */\nexport const TableColumnSchema = z.object({\n id: IdSchema,\n label: z.string(),\n type: ColumnTypeNameSchema,\n required: z.boolean(),\n // Per-column constraints (type-specific)\n minLength: z.number().int().nonnegative().optional(),\n maxLength: z.number().int().nonnegative().optional(),\n pattern: z.string().optional(),\n enum: z.array(z.string()).optional(),\n min: z.union([z.number(), z.string()]).optional(),\n max: z.union([z.number(), z.string()]).optional(),\n integer: z.boolean().optional(),\n});\n\n/** Cell value schema (never null - use sentinels for skipped) */\nexport const CellValueSchema = z.union([z.string(), z.number()]);\n\n/** Cell response schema */\nexport const CellResponseSchema = z.object({\n state: z.enum(['answered', 'skipped', 'aborted']),\n value: CellValueSchema.optional(),\n reason: z.string().optional(),\n});\n\n/** Table row response schema */\nexport const TableRowResponseSchema = z.record(IdSchema, CellResponseSchema);\n\n/** Table value schema */\nexport const TableValueSchema = z.object({\n kind: z.literal('table'),\n rows: z.array(TableRowResponseSchema),\n});\n\n/** Table row patch schema (simplified for patches) */\nexport const TableRowPatchSchema = z.record(\n IdSchema,\n z.union([CellValueSchema, z.null(), z.string()]), // null or sentinel string\n);\n\nexport const FieldPriorityLevelSchema = z.enum(['high', 'medium', 'low']);\n\n// Option schema\nexport const OptionSchema = z.object({\n id: IdSchema,\n label: z.string(),\n});\n\n// Field base schema (partial, used for extension)\n// NOTE: required, priority, and role are explicit (not optional) - parser assigns defaults\nconst FieldBaseSchemaPartial = {\n id: IdSchema,\n label: z.string(),\n required: z.boolean(),\n priority: FieldPriorityLevelSchema,\n role: z.string(),\n validate: z.array(ValidatorRefSchema).optional(),\n report: z.boolean().optional(),\n placeholder: z.string().optional(),\n examples: z.array(z.string()).optional(),\n parallel: z.string().optional(),\n order: z.number().optional(),\n};\n\n// Field schemas\nexport const StringFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('string'),\n multiline: z.boolean().optional(),\n pattern: z.string().optional(),\n minLength: z.number().int().nonnegative().optional(),\n maxLength: z.number().int().nonnegative().optional(),\n});\n\nexport const NumberFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('number'),\n min: z.number().optional(),\n max: z.number().optional(),\n integer: z.boolean().optional(),\n});\n\nexport const StringListFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('string_list'),\n minItems: z.number().int().nonnegative().optional(),\n maxItems: z.number().int().nonnegative().optional(),\n itemMinLength: z.number().int().nonnegative().optional(),\n itemMaxLength: z.number().int().nonnegative().optional(),\n uniqueItems: z.boolean().optional(),\n});\n\nexport const CheckboxesFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('checkboxes'),\n checkboxMode: CheckboxModeSchema, // explicit: parser defaults to 'multi'\n minDone: z.number().int().optional(),\n options: z.array(OptionSchema),\n approvalMode: ApprovalModeSchema, // explicit: parser defaults to 'none'\n});\n\nexport const SingleSelectFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('single_select'),\n options: z.array(OptionSchema),\n});\n\nexport const MultiSelectFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('multi_select'),\n options: z.array(OptionSchema),\n minSelections: z.number().int().nonnegative().optional(),\n maxSelections: z.number().int().nonnegative().optional(),\n});\n\nexport const UrlFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('url'),\n});\n\nexport const UrlListFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('url_list'),\n minItems: z.number().int().nonnegative().optional(),\n maxItems: z.number().int().nonnegative().optional(),\n uniqueItems: z.boolean().optional(),\n});\n\nexport const DateFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('date'),\n min: z.string().optional(), // ISO 8601 date string (YYYY-MM-DD)\n max: z.string().optional(), // ISO 8601 date string (YYYY-MM-DD)\n});\n\nexport const YearFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('year'),\n min: z.number().int().optional(), // minimum year\n max: z.number().int().optional(), // maximum year\n});\n\n/** Table field schema (extends FieldBase pattern) */\nexport const TableFieldSchema = z.object({\n ...FieldBaseSchemaPartial,\n kind: z.literal('table'),\n columns: z.array(TableColumnSchema),\n minRows: z.number().int().nonnegative().optional(),\n maxRows: z.number().int().positive().optional(),\n});\n\nexport const FieldSchema = z.discriminatedUnion('kind', [\n StringFieldSchema,\n NumberFieldSchema,\n StringListFieldSchema,\n CheckboxesFieldSchema,\n SingleSelectFieldSchema,\n MultiSelectFieldSchema,\n UrlFieldSchema,\n UrlListFieldSchema,\n DateFieldSchema,\n YearFieldSchema,\n TableFieldSchema,\n]);\n\n// Field group schema (no 'kind' property - reserved for Field/FieldValue types)\nexport const FieldGroupSchema = z.object({\n id: IdSchema,\n title: z.string().optional(),\n validate: z.array(ValidatorRefSchema).optional(),\n children: z.array(FieldSchema),\n parallel: z.string().optional(),\n order: z.number().optional(),\n});\n\n// Form schema\nexport const FormSchemaSchema = z.object({\n id: IdSchema,\n title: z.string().optional(),\n groups: z.array(FieldGroupSchema),\n});\n\n// Field value schemas\nexport const StringValueSchema = z.object({\n kind: z.literal('string'),\n value: z.string().nullable(),\n});\n\nexport const NumberValueSchema = z.object({\n kind: z.literal('number'),\n value: z.number().nullable(),\n});\n\nexport const StringListValueSchema = z.object({\n kind: z.literal('string_list'),\n items: z.array(z.string()),\n});\n\nexport const CheckboxesValueSchema = z.object({\n kind: z.literal('checkboxes'),\n values: z.record(OptionIdSchema, CheckboxValueSchema),\n});\n\nexport const SingleSelectValueSchema = z.object({\n kind: z.literal('single_select'),\n selected: OptionIdSchema.nullable(),\n});\n\nexport const MultiSelectValueSchema = z.object({\n kind: z.literal('multi_select'),\n selected: z.array(OptionIdSchema),\n});\n\nexport const UrlValueSchema = z.object({\n kind: z.literal('url'),\n value: z.string().nullable(),\n});\n\nexport const UrlListValueSchema = z.object({\n kind: z.literal('url_list'),\n items: z.array(z.string()),\n});\n\nexport const DateValueSchema = z.object({\n kind: z.literal('date'),\n value: z.string().nullable(), // ISO 8601 date string (YYYY-MM-DD) or null\n});\n\nexport const YearValueSchema = z.object({\n kind: z.literal('year'),\n value: z.number().int().nullable(), // integer year or null\n});\n\nexport const FieldValueSchema = z.discriminatedUnion('kind', [\n StringValueSchema,\n NumberValueSchema,\n StringListValueSchema,\n CheckboxesValueSchema,\n SingleSelectValueSchema,\n MultiSelectValueSchema,\n UrlValueSchema,\n UrlListValueSchema,\n DateValueSchema,\n YearValueSchema,\n TableValueSchema,\n]);\n\n// FieldResponse schema (markform-255)\nexport const FieldResponseSchema = z.object({\n state: AnswerStateSchema,\n value: FieldValueSchema.optional(),\n reason: z.string().optional(),\n});\n\n// Note schema (markform-205)\nexport const NoteSchema = z.object({\n id: NoteIdSchema,\n ref: IdSchema,\n role: z.string(),\n text: z.string(),\n});\n\n// Documentation block schema\nexport const DocumentationTagSchema = z.enum(['description', 'instructions', 'documentation']);\n\nexport const DocumentationBlockSchema = z.object({\n tag: DocumentationTagSchema,\n ref: z.string(),\n bodyMarkdown: z.string(),\n});\n\n// Frontmatter harness config schema (camelCase, used internally)\nexport const FrontmatterHarnessConfigSchema = z.object({\n maxTurns: z.number().int().positive().optional(),\n maxPatchesPerTurn: z.number().int().positive().optional(),\n maxIssuesPerTurn: z.number().int().positive().optional(),\n maxParallelAgents: z.number().int().positive().optional(),\n});\n\n// Run mode schema\nexport const RunModeSchema = z.enum(['interactive', 'fill', 'research']);\n\n/**\n * Schema for the raw YAML markform section input (snake_case keys).\n * Used to validate frontmatter before transforming to internal representation.\n */\nexport const MarkformSectionInputSchema = z.object({\n spec: z.string().optional(),\n title: z.string().optional(),\n description: z.string().optional(),\n run_mode: RunModeSchema.optional(),\n roles: z.array(z.string()).min(1).optional(),\n role_instructions: z.record(z.string(), z.string()).optional(),\n harness: z\n .object({\n max_turns: z.number().int().positive().optional(),\n max_patches_per_turn: z.number().int().positive().optional(),\n max_issues_per_turn: z.number().int().positive().optional(),\n max_parallel_agents: z.number().int().positive().optional(),\n })\n .strict() // Fail on unknown keys\n .optional(),\n});\n\n// Form metadata schema (camelCase, internal representation)\nexport const FormMetadataSchema = z.object({\n markformVersion: z.string(),\n title: z.string().optional(),\n description: z.string().optional(),\n roles: z.array(z.string()).min(1),\n roleInstructions: z.record(z.string(), z.string()),\n harnessConfig: FrontmatterHarnessConfigSchema.optional(),\n runMode: RunModeSchema.optional(),\n});\n\n// Validation schemas\nexport const SeveritySchema = z.enum(['error', 'warning', 'info']);\n\nexport const SourcePositionSchema = z.object({\n line: z.number().int().positive(),\n col: z.number().int().positive(),\n});\n\nexport const SourceRangeSchema = z.object({\n start: SourcePositionSchema,\n end: SourcePositionSchema,\n});\n\nexport const ValidationIssueSchema = z.object({\n severity: SeveritySchema,\n message: z.string(),\n code: z.string().optional(),\n ref: IdSchema.optional(),\n path: z.string().optional(),\n range: SourceRangeSchema.optional(),\n validatorId: z.string().optional(),\n source: z.enum(['builtin', 'code', 'llm']),\n});\n\n// Error location schema (markform-210)\nexport const ErrorLocationSchema = z.object({\n line: z.number().int().positive().optional(),\n column: z.number().int().positive().optional(),\n fieldId: IdSchema.optional(),\n noteId: NoteIdSchema.optional(),\n});\n\n// Error type schemas (markform-210)\nexport const ParseErrorSchema = z.object({\n type: z.literal('parse'),\n message: z.string(),\n location: ErrorLocationSchema.optional(),\n});\n\nexport const MarkformValidationErrorSchema = z.object({\n type: z.literal('validation'),\n message: z.string(),\n location: ErrorLocationSchema.optional(),\n});\n\nexport const MarkformErrorSchema = z.discriminatedUnion('type', [\n ParseErrorSchema,\n MarkformValidationErrorSchema,\n]);\n\n// Inspect issue schema\nexport const IssueReasonSchema = z.enum([\n 'validation_error',\n 'required_missing',\n 'checkbox_incomplete',\n 'min_items_not_met',\n 'optional_unanswered',\n]);\n\nexport const IssueScopeSchema = z.enum(['form', 'group', 'field', 'option', 'column', 'cell']);\n\nexport const InspectIssueSchema = z.object({\n ref: z.union([IdSchema, z.string()]), // Id or QualifiedOptionRef\n scope: IssueScopeSchema,\n reason: IssueReasonSchema,\n message: z.string(),\n severity: z.enum(['required', 'recommended']),\n priority: z.number().int().positive(),\n blockedBy: IdSchema.optional(),\n});\n\n// Summary schemas\nexport const ProgressStateSchema = z.enum(['empty', 'incomplete', 'invalid', 'complete']);\n\nexport const CheckboxProgressCountsSchema = z.object({\n total: z.number().int().nonnegative(),\n // Multi mode\n todo: z.number().int().nonnegative(),\n done: z.number().int().nonnegative(),\n incomplete: z.number().int().nonnegative(),\n active: z.number().int().nonnegative(),\n na: z.number().int().nonnegative(),\n // Explicit mode\n unfilled: z.number().int().nonnegative(),\n yes: z.number().int().nonnegative(),\n no: z.number().int().nonnegative(),\n});\n\nexport const FieldProgressSchema = z.object({\n kind: FieldKindSchema,\n required: z.boolean(),\n answerState: AnswerStateSchema,\n hasNotes: z.boolean(),\n noteCount: z.number().int().nonnegative(),\n empty: z.boolean(),\n valid: z.boolean(),\n issueCount: z.number().int().nonnegative(),\n checkboxProgress: CheckboxProgressCountsSchema.optional(),\n});\n\nexport const ProgressCountsSchema = z.object({\n totalFields: z.number().int().nonnegative(),\n requiredFields: z.number().int().nonnegative(),\n // Dimension 1: AnswerState (mutually exclusive, sum to totalFields)\n unansweredFields: z.number().int().nonnegative(),\n answeredFields: z.number().int().nonnegative(),\n skippedFields: z.number().int().nonnegative(),\n abortedFields: z.number().int().nonnegative(),\n // Dimension 2: Validity (mutually exclusive, sum to totalFields)\n validFields: z.number().int().nonnegative(),\n invalidFields: z.number().int().nonnegative(),\n // Dimension 3: Value presence (mutually exclusive, sum to totalFields)\n emptyFields: z.number().int().nonnegative(),\n filledFields: z.number().int().nonnegative(),\n // Derived counts\n emptyRequiredFields: z.number().int().nonnegative(),\n totalNotes: z.number().int().nonnegative(),\n});\n\nexport const ProgressSummarySchema = z.object({\n counts: ProgressCountsSchema,\n fields: z.record(IdSchema, FieldProgressSchema),\n});\n\nexport const StructureSummarySchema = z.object({\n groupCount: z.number().int().nonnegative(),\n fieldCount: z.number().int().nonnegative(),\n optionCount: z.number().int().nonnegative(),\n fieldCountByKind: z.record(FieldKindSchema, z.number().int().nonnegative()),\n groupsById: z.record(IdSchema, z.literal('field_group')),\n fieldsById: z.record(IdSchema, FieldKindSchema),\n optionsById: z.record(\n z.string(),\n z.object({\n parentFieldId: IdSchema,\n parentFieldKind: FieldKindSchema,\n }),\n ),\n});\n\n// Result schemas\nexport const InspectResultSchema = z.object({\n structureSummary: StructureSummarySchema,\n progressSummary: ProgressSummarySchema,\n issues: z.array(InspectIssueSchema),\n isComplete: z.boolean(),\n formState: ProgressStateSchema,\n});\n\n// Patch rejection schema\nexport const PatchRejectionSchema = z.object({\n patchIndex: z.number().int().nonnegative(),\n message: z.string(),\n fieldId: z.string().optional(),\n fieldKind: z.string().optional(),\n columnIds: z.array(z.string()).optional(),\n});\n\n// Patch warning schemas\nexport const PatchCoercionTypeSchema = z.enum([\n 'string_to_list',\n 'url_to_list',\n 'option_to_array',\n 'boolean_to_checkbox',\n 'array_to_checkboxes',\n]);\n\nexport const PatchWarningSchema = z.object({\n patchIndex: z.number().int().nonnegative(),\n fieldId: z.string(),\n message: z.string(),\n coercion: PatchCoercionTypeSchema,\n});\n\nexport const ApplyStatusSchema = z.enum(['applied', 'partial', 'rejected']);\n\nexport const ApplyResultSchema = z.object({\n applyStatus: ApplyStatusSchema,\n structureSummary: StructureSummarySchema,\n progressSummary: ProgressSummarySchema,\n issues: z.array(InspectIssueSchema),\n isComplete: z.boolean(),\n formState: ProgressStateSchema,\n appliedPatches: z.array(z.lazy(() => PatchSchema)),\n rejectedPatches: z.array(PatchRejectionSchema),\n warnings: z.array(PatchWarningSchema),\n});\n\n// Patch schemas\nexport const SetStringPatchSchema = z.object({\n op: z.literal('set_string'),\n fieldId: IdSchema,\n value: z.string().nullable(),\n});\n\nexport const SetNumberPatchSchema = z.object({\n op: z.literal('set_number'),\n fieldId: IdSchema,\n value: z.number().nullable(),\n});\n\nexport const SetStringListPatchSchema = z.object({\n op: z.literal('set_string_list'),\n fieldId: IdSchema,\n value: z.array(z.string()),\n});\n\nexport const SetCheckboxesPatchSchema = z.object({\n op: z.literal('set_checkboxes'),\n fieldId: IdSchema,\n value: z.record(OptionIdSchema, CheckboxValueSchema),\n});\n\nexport const SetSingleSelectPatchSchema = z.object({\n op: z.literal('set_single_select'),\n fieldId: IdSchema,\n value: OptionIdSchema.nullable(),\n});\n\nexport const SetMultiSelectPatchSchema = z.object({\n op: z.literal('set_multi_select'),\n fieldId: IdSchema,\n value: z.array(OptionIdSchema),\n});\n\nexport const SetUrlPatchSchema = z.object({\n op: z.literal('set_url'),\n fieldId: IdSchema,\n value: z.string().nullable(),\n});\n\nexport const SetUrlListPatchSchema = z.object({\n op: z.literal('set_url_list'),\n fieldId: IdSchema,\n value: z.array(z.string()),\n});\n\nexport const SetDatePatchSchema = z.object({\n op: z.literal('set_date'),\n fieldId: IdSchema,\n value: z.string().nullable(), // ISO 8601 date string (YYYY-MM-DD) or null\n});\n\nexport const SetYearPatchSchema = z.object({\n op: z.literal('set_year'),\n fieldId: IdSchema,\n value: z.number().int().nullable(), // integer year or null\n});\n\n/** Set table patch schema */\nexport const SetTablePatchSchema = z.object({\n op: z.literal('set_table'),\n fieldId: IdSchema,\n value: z.array(TableRowPatchSchema),\n});\n\nexport const AppendTablePatchSchema = z.object({\n op: z.literal('append_table'),\n fieldId: IdSchema,\n value: z.array(TableRowPatchSchema),\n});\n\nexport const DeleteTablePatchSchema = z.object({\n op: z.literal('delete_table'),\n fieldId: IdSchema,\n value: z.number().int().min(0),\n});\n\nexport const AppendStringListPatchSchema = z.object({\n op: z.literal('append_string_list'),\n fieldId: IdSchema,\n value: z.array(z.string()),\n});\n\nexport const DeleteStringListPatchSchema = z.object({\n op: z.literal('delete_string_list'),\n fieldId: IdSchema,\n value: z.number().int().min(0),\n});\n\nexport const AppendUrlListPatchSchema = z.object({\n op: z.literal('append_url_list'),\n fieldId: IdSchema,\n value: z.array(z.string()),\n});\n\nexport const DeleteUrlListPatchSchema = z.object({\n op: z.literal('delete_url_list'),\n fieldId: IdSchema,\n value: z.number().int().min(0),\n});\n\nexport const ClearFieldPatchSchema = z.object({\n op: z.literal('clear_field'),\n fieldId: IdSchema,\n});\n\nexport const SkipFieldPatchSchema = z.object({\n op: z.literal('skip_field'),\n fieldId: IdSchema,\n role: z.string(),\n reason: z.string().optional(),\n});\n\nexport const AbortFieldPatchSchema = z.object({\n op: z.literal('abort_field'),\n fieldId: IdSchema,\n role: z.string(),\n reason: z.string().optional(),\n});\n\nexport const AddNotePatchSchema = z.object({\n op: z.literal('add_note'),\n ref: IdSchema,\n role: z.string(),\n text: z.string(),\n});\n\nexport const RemoveNotePatchSchema = z.object({\n op: z.literal('remove_note'),\n noteId: NoteIdSchema,\n});\n\nexport const PatchSchema = z.discriminatedUnion('op', [\n SetStringPatchSchema,\n SetNumberPatchSchema,\n SetStringListPatchSchema,\n SetCheckboxesPatchSchema,\n SetSingleSelectPatchSchema,\n SetMultiSelectPatchSchema,\n SetUrlPatchSchema,\n SetUrlListPatchSchema,\n SetDatePatchSchema,\n SetYearPatchSchema,\n SetTablePatchSchema,\n AppendTablePatchSchema,\n DeleteTablePatchSchema,\n AppendStringListPatchSchema,\n DeleteStringListPatchSchema,\n AppendUrlListPatchSchema,\n DeleteUrlListPatchSchema,\n ClearFieldPatchSchema,\n SkipFieldPatchSchema,\n AbortFieldPatchSchema,\n AddNotePatchSchema,\n RemoveNotePatchSchema,\n]);\n\n// Harness schemas\nexport const StepResultSchema = z.object({\n structureSummary: StructureSummarySchema,\n progressSummary: ProgressSummarySchema,\n issues: z.array(InspectIssueSchema),\n stepBudget: z.number().int().nonnegative(),\n isComplete: z.boolean(),\n turnNumber: z.number().int().positive(),\n});\n\n// Session transcript schemas\nexport const HarnessConfigSchema = z.object({\n maxIssuesPerTurn: z.number().int().positive(),\n maxPatchesPerTurn: z.number().int().positive(),\n maxTurns: z.number().int().positive(),\n maxFieldsPerTurn: z.number().int().positive().optional(),\n maxGroupsPerTurn: z.number().int().positive().optional(),\n targetRoles: z.array(z.string()).optional(),\n fillMode: FillModeSchema.optional(),\n maxParallelAgents: z.number().int().positive().optional(),\n});\n\nexport const SessionTurnStatsSchema = z.object({\n inputTokens: z.number().int().nonnegative().optional(),\n outputTokens: z.number().int().nonnegative().optional(),\n toolCalls: z\n .array(\n z.object({\n name: z.string(),\n count: z.number().int().positive(),\n }),\n )\n .optional(),\n});\n\nexport const SessionTurnContextSchema = z.object({\n systemPrompt: z.string(),\n contextPrompt: z.string(),\n});\n\n// Wire format Zod schemas for session logging\nexport const WireToolCallSchema = z.object({\n toolName: z.string(),\n input: z.unknown(),\n});\n\nexport const WireToolResultSchema = z.object({\n toolName: z.string(),\n result: z.unknown(),\n});\n\nexport const WireResponseStepSchema = z.object({\n toolCalls: z.array(WireToolCallSchema),\n toolResults: z.array(WireToolResultSchema),\n text: z.string().nullable(),\n});\n\nexport const WireRequestFormatSchema = z.object({\n system: z.string(),\n prompt: z.string(),\n tools: z.record(\n z.string(),\n z.object({\n description: z.string(),\n inputSchema: z.unknown(),\n }),\n ),\n});\n\nexport const WireResponseFormatSchema = z.object({\n steps: z.array(WireResponseStepSchema),\n usage: z.object({\n inputTokens: z.number().int().nonnegative(),\n outputTokens: z.number().int().nonnegative(),\n }),\n});\n\nexport const WireFormatSchema = z.object({\n request: WireRequestFormatSchema,\n response: WireResponseFormatSchema,\n});\n\nexport const SessionTurnSchema = z.object({\n turn: z.number().int().positive(),\n inspect: z.object({\n issues: z.array(InspectIssueSchema),\n }),\n context: SessionTurnContextSchema.optional(),\n apply: z.object({\n patches: z.array(PatchSchema),\n rejectedPatches: z.array(PatchRejectionSchema).optional(),\n warnings: z.array(PatchWarningSchema).optional(),\n }),\n after: z.object({\n requiredIssueCount: z.number().int().nonnegative(),\n markdownSha256: z.string(),\n answeredFieldCount: z.number().int().nonnegative(),\n skippedFieldCount: z.number().int().nonnegative(),\n }),\n llm: SessionTurnStatsSchema.optional(),\n wire: WireFormatSchema.optional(),\n});\n\nexport const SessionFinalSchema = z.object({\n expectComplete: z.boolean(),\n expectedCompletedForm: z.string(),\n});\n\nexport const SessionTranscriptSchema = z.object({\n sessionVersion: z.string(),\n mode: MockModeSchema,\n form: z.object({\n path: z.string(),\n }),\n validators: z\n .object({\n code: z.string().optional(),\n })\n .optional(),\n mock: z\n .object({\n completedMock: z.string(),\n })\n .optional(),\n live: z\n .object({\n modelId: z.string(),\n })\n .optional(),\n harness: HarnessConfigSchema,\n turns: z.array(SessionTurnSchema),\n final: SessionFinalSchema,\n});\n\n// Frontmatter schema\nexport const MarkformFrontmatterSchema = z.object({\n markformVersion: z.string(),\n formSummary: StructureSummarySchema,\n formProgress: ProgressSummarySchema,\n formState: ProgressStateSchema,\n});\n"],"mappings":"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"}
|
|
@@ -121,6 +121,7 @@ declare const TimingBreakdownSchema: z.ZodObject<{
|
|
|
121
121
|
ms: z.ZodNumber;
|
|
122
122
|
percentage: z.ZodNumber;
|
|
123
123
|
}, z.core.$strip>>;
|
|
124
|
+
llmParallelism: z.ZodNumber;
|
|
124
125
|
}, z.core.$strip>;
|
|
125
126
|
type TimingBreakdown = z.infer<typeof TimingBreakdownSchema>;
|
|
126
127
|
/**
|
|
@@ -132,6 +133,7 @@ declare const ToolSummarySchema: z.ZodObject<{
|
|
|
132
133
|
failedCalls: z.ZodNumber;
|
|
133
134
|
successRate: z.ZodNumber;
|
|
134
135
|
totalDurationMs: z.ZodNumber;
|
|
136
|
+
avgDurationMs: z.ZodNumber;
|
|
135
137
|
byTool: z.ZodArray<z.ZodObject<{
|
|
136
138
|
toolName: z.ZodString;
|
|
137
139
|
callCount: z.ZodNumber;
|
|
@@ -276,6 +278,7 @@ declare const FillRecordSchema: z.ZodObject<{
|
|
|
276
278
|
failedCalls: z.ZodNumber;
|
|
277
279
|
successRate: z.ZodNumber;
|
|
278
280
|
totalDurationMs: z.ZodNumber;
|
|
281
|
+
avgDurationMs: z.ZodNumber;
|
|
279
282
|
byTool: z.ZodArray<z.ZodObject<{
|
|
280
283
|
toolName: z.ZodString;
|
|
281
284
|
callCount: z.ZodNumber;
|
|
@@ -312,6 +315,7 @@ declare const FillRecordSchema: z.ZodObject<{
|
|
|
312
315
|
ms: z.ZodNumber;
|
|
313
316
|
percentage: z.ZodNumber;
|
|
314
317
|
}, z.core.$strip>>;
|
|
318
|
+
llmParallelism: z.ZodNumber;
|
|
315
319
|
}, z.core.$strip>;
|
|
316
320
|
timeline: z.ZodArray<z.ZodObject<{
|
|
317
321
|
turnNumber: z.ZodNumber;
|
|
@@ -366,4 +370,4 @@ declare const FillRecordSchema: z.ZodObject<{
|
|
|
366
370
|
type FillRecord = z.infer<typeof FillRecordSchema>;
|
|
367
371
|
//#endregion
|
|
368
372
|
export { ToolSummary as _, FillRecordStatus as a, TimelineEntrySchema as c, TimingBreakdownItemSchema as d, TimingBreakdownSchema as f, ToolStatsSchema as g, ToolStats as h, FillRecordSchema as i, TimingBreakdown as l, ToolCallRecordSchema as m, ExecutionMetadataSchema as n, FillRecordStatusSchema as o, ToolCallRecord as p, FillRecord as r, TimelineEntry as s, ExecutionMetadata as t, TimingBreakdownItem as u, ToolSummarySchema as v };
|
|
369
|
-
//# sourceMappingURL=fillRecord-
|
|
373
|
+
//# sourceMappingURL=fillRecord-V3vlyobd.d.mts.map
|
|
@@ -23,6 +23,18 @@ function formatDuration(ms) {
|
|
|
23
23
|
return `${Math.floor(ms / 6e4)}m ${(ms % 6e4 / 1e3).toFixed(0)}s`;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
+
* Format a rate value with appropriate significant figures.
|
|
27
|
+
* >= 10s: 1 decimal (e.g., 12.3s/field)
|
|
28
|
+
* >= 1s: 2 decimals (e.g., 3.45s/field)
|
|
29
|
+
* < 1s: show as ms (e.g., 450ms/field)
|
|
30
|
+
*/
|
|
31
|
+
function formatRate(ms, unit) {
|
|
32
|
+
const seconds = ms / 1e3;
|
|
33
|
+
if (seconds >= 10) return `${seconds.toFixed(1)}s/${unit}`;
|
|
34
|
+
if (seconds >= 1) return `${seconds.toFixed(2)}s/${unit}`;
|
|
35
|
+
return `${Math.round(ms)}ms/${unit}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
26
38
|
* Format token count with K suffix for large numbers.
|
|
27
39
|
*/
|
|
28
40
|
function formatTokens(count) {
|
|
@@ -1046,20 +1058,35 @@ function renderFillRecordContent(record) {
|
|
|
1046
1058
|
statusBanner = `<div class="fr-banner ${bannerClass}"><strong>${icon} ${title}${msg ? ":" : ""}</strong>${msg ? ` ${escapeHtml(msg)}` : ""}</div>`;
|
|
1047
1059
|
}
|
|
1048
1060
|
const totalTokens = llm.inputTokens + llm.outputTokens;
|
|
1049
|
-
const
|
|
1050
|
-
|
|
1051
|
-
<div class="fr-card">
|
|
1052
|
-
<div class="fr-card__label">Status</div>
|
|
1053
|
-
<div><span class="${`fr-badge fr-badge--${status}`}">${{
|
|
1061
|
+
const badgeClass = `fr-badge fr-badge--${status}`;
|
|
1062
|
+
const badgeIcon = {
|
|
1054
1063
|
completed: "✓",
|
|
1055
1064
|
partial: "⚠",
|
|
1056
1065
|
cancelled: "⊘",
|
|
1057
1066
|
failed: "✕"
|
|
1058
|
-
}[status] ?? "?"
|
|
1067
|
+
}[status] ?? "?";
|
|
1068
|
+
const badgeLabel = status.charAt(0).toUpperCase() + status.slice(1);
|
|
1069
|
+
const durationSubParts = [];
|
|
1070
|
+
if (record.execution.totalTurns > 0) durationSubParts.push(formatRate(durationMs / record.execution.totalTurns, "turn"));
|
|
1071
|
+
if (formProgress.answeredFields > 0) durationSubParts.push(formatRate(durationMs / formProgress.answeredFields, "field"));
|
|
1072
|
+
const durationSubHtml = durationSubParts.length > 0 ? `<div class="fr-card__sub">${durationSubParts.join(" · ")}</div>` : "";
|
|
1073
|
+
const ep = record.timingBreakdown.llmParallelism;
|
|
1074
|
+
const parallelismCard = ep > 0 ? `
|
|
1075
|
+
<div class="fr-card">
|
|
1076
|
+
<div class="fr-card__label">Parallelism</div>
|
|
1077
|
+
<div class="fr-card__value">${ep.toFixed(1)}x</div>
|
|
1078
|
+
<div class="fr-card__sub">${record.execution.parallelEnabled ? `${record.execution.executionThreads.length} threads` : "serial"}</div>
|
|
1079
|
+
</div>` : "";
|
|
1080
|
+
const summaryCards = `
|
|
1081
|
+
<div class="fr-cards">
|
|
1082
|
+
<div class="fr-card">
|
|
1083
|
+
<div class="fr-card__label">Status</div>
|
|
1084
|
+
<div><span class="${badgeClass}">${badgeIcon} ${badgeLabel}</span></div>
|
|
1059
1085
|
</div>
|
|
1060
1086
|
<div class="fr-card">
|
|
1061
1087
|
<div class="fr-card__label">Duration</div>
|
|
1062
1088
|
<div class="fr-card__value">${formatDuration(durationMs)}</div>
|
|
1089
|
+
${durationSubHtml}
|
|
1063
1090
|
</div>
|
|
1064
1091
|
<div class="fr-card">
|
|
1065
1092
|
<div class="fr-card__label">Turns</div>
|
|
@@ -1070,6 +1097,7 @@ function renderFillRecordContent(record) {
|
|
|
1070
1097
|
<div class="fr-card__value">${formatTokens(totalTokens)}</div>
|
|
1071
1098
|
<div class="fr-card__sub">${formatTokens(llm.inputTokens)} in / ${formatTokens(llm.outputTokens)} out</div>
|
|
1072
1099
|
</div>
|
|
1100
|
+
${parallelismCard}
|
|
1073
1101
|
</div>
|
|
1074
1102
|
`;
|
|
1075
1103
|
const fieldsMap = /* @__PURE__ */ new Map();
|
|
@@ -1181,13 +1209,8 @@ function renderFillRecordContent(record) {
|
|
|
1181
1209
|
</details>
|
|
1182
1210
|
`;
|
|
1183
1211
|
let toolSection = "";
|
|
1184
|
-
if (toolSummary.byTool.length > 0)
|
|
1185
|
-
|
|
1186
|
-
<summary>Tool Summary</summary>
|
|
1187
|
-
<div style="overflow-x: auto; margin-top: 8px;">
|
|
1188
|
-
<table class="fr-table">
|
|
1189
|
-
<thead><tr><th>Tool</th><th>Calls</th><th>Success</th><th>Avg</th><th>p95</th></tr></thead>
|
|
1190
|
-
<tbody>${toolSummary.byTool.map((t) => `
|
|
1212
|
+
if (toolSummary.byTool.length > 0) {
|
|
1213
|
+
const toolRows = toolSummary.byTool.map((t) => `
|
|
1191
1214
|
<tr>
|
|
1192
1215
|
<td>${escapeHtml(t.toolName)}</td>
|
|
1193
1216
|
<td>${t.callCount}</td>
|
|
@@ -1195,11 +1218,20 @@ function renderFillRecordContent(record) {
|
|
|
1195
1218
|
<td>${formatDuration(t.timing.avgMs)}</td>
|
|
1196
1219
|
<td>${formatDuration(t.timing.p95Ms)}</td>
|
|
1197
1220
|
</tr>
|
|
1198
|
-
`).join("")
|
|
1221
|
+
`).join("");
|
|
1222
|
+
const avgToolDuration = toolSummary.avgDurationMs > 0 ? ` · avg ${formatDuration(toolSummary.avgDurationMs)} each` : "";
|
|
1223
|
+
toolSection = `
|
|
1224
|
+
<details class="fr-details fr-section" open>
|
|
1225
|
+
<summary>Tool Summary (${toolSummary.totalCalls} calls${avgToolDuration})</summary>
|
|
1226
|
+
<div style="overflow-x: auto; margin-top: 8px;">
|
|
1227
|
+
<table class="fr-table">
|
|
1228
|
+
<thead><tr><th>Tool</th><th>Calls</th><th>Success</th><th>Avg</th><th>p95</th></tr></thead>
|
|
1229
|
+
<tbody>${toolRows}</tbody>
|
|
1199
1230
|
</table>
|
|
1200
1231
|
</div>
|
|
1201
1232
|
</details>
|
|
1202
1233
|
`;
|
|
1234
|
+
}
|
|
1203
1235
|
let timelineSection = "";
|
|
1204
1236
|
if (timeline.length > 0) {
|
|
1205
1237
|
const timelineItems = timeline.map((turn) => {
|
|
@@ -1250,4 +1282,4 @@ function renderFillRecordContent(record) {
|
|
|
1250
1282
|
|
|
1251
1283
|
//#endregion
|
|
1252
1284
|
export { renderJsonContent as a, renderViewContent as c, formatDuration as d, formatTokens as f, highlightYamlValue as i, renderYamlContent as l, FILL_RECORD_STYLES as n, renderMarkdownContent as o, renderFillRecordContent as r, renderSourceContent as s, FILL_RECORD_SCRIPTS as t, escapeHtml as u };
|
|
1253
|
-
//# sourceMappingURL=fillRecordRenderer-
|
|
1285
|
+
//# sourceMappingURL=fillRecordRenderer-BqRPHPmE.mjs.map
|