@elicitkit/conformance 0.1.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/LICENSE ADDED
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright 2026 the Elicitkit authors
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
@@ -0,0 +1,338 @@
1
+ /**
2
+ * The conformance corpus — spec-derived fixtures. This file is the
3
+ * language-agnostic source of truth for "Elicitkit-compliant" (SPEC §8).
4
+ * Any implementation in any language can consume these cases; the runner
5
+ * (index.ts) is just the reference harness over them.
6
+ */
7
+ export interface AskSetCase {
8
+ name: string;
9
+ valid: boolean;
10
+ /** an AskSet payload */
11
+ askSet: unknown;
12
+ note: string;
13
+ }
14
+ export interface AnswerCase {
15
+ name: string;
16
+ valid: boolean;
17
+ /** the AskSet the answer is for (single ask) */
18
+ askSet: unknown;
19
+ /** raw answers array */
20
+ answers: unknown;
21
+ note: string;
22
+ }
23
+ export declare const VALID_ASKSETS: AskSetCase[];
24
+ export declare const INVALID_ASKSETS: AskSetCase[];
25
+ export declare const VALID_ANSWERS: AnswerCase[];
26
+ export declare const INVALID_ANSWERS: AnswerCase[];
27
+ export interface ElicitationRenderCase {
28
+ name: string;
29
+ /** A single-Ask AskSet to render through the elicitation tier. */
30
+ askSet: unknown;
31
+ /** Substrings that MUST appear in message + serialized request schema. */
32
+ mustInclude: string[];
33
+ /** Substrings that MUST NOT appear (e.g. labels leaking as wire ids). */
34
+ mustExclude?: string[];
35
+ note: string;
36
+ }
37
+ export declare const ELICITATION_RENDER: ElicitationRenderCase[];
38
+ export interface IntegrationCase {
39
+ name: string;
40
+ /** The AskSet to validate + render across all 4 tiers. */
41
+ askSet: unknown;
42
+ /** Per-tier substrings that MUST appear in the tier's rendering. The
43
+ * same labels are expected to surface across tiers (cross-type-drift
44
+ * guard); the lists are split per-tier in case a tier emits less
45
+ * context (e.g. tui condenses; the runner unions them in practice). */
46
+ mustIncludePerTier: {
47
+ apps: string[];
48
+ url: string[];
49
+ tui: string[];
50
+ elicitation: string[];
51
+ };
52
+ note: string;
53
+ }
54
+ /** Public re-export so adopters can drive the same showcase through their
55
+ * own renderTiers implementation without duplicating the fixture. */
56
+ export declare const SHOWCASE: {
57
+ readonly specVersion: "0.1.0";
58
+ readonly meta: {
59
+ readonly layout: "auto";
60
+ readonly accent: "#7c3aed";
61
+ };
62
+ readonly asks: readonly [{
63
+ readonly id: "text_single";
64
+ readonly type: "ask_text";
65
+ readonly prompt: "Single-line text";
66
+ readonly help: "ask_text — auto half-width.";
67
+ readonly spec: {
68
+ readonly placeholder: "type here";
69
+ };
70
+ readonly meta: {
71
+ specVersion: string;
72
+ minTier: string;
73
+ };
74
+ }, {
75
+ readonly id: "text_multi";
76
+ readonly type: "ask_text";
77
+ readonly prompt: "Multiline text";
78
+ readonly help: "ask_text multiline — auto full-width.";
79
+ readonly required: false;
80
+ readonly spec: {
81
+ readonly multiline: true;
82
+ readonly placeholder: "longer answer…";
83
+ };
84
+ readonly meta: {
85
+ specVersion: string;
86
+ minTier: string;
87
+ };
88
+ }, {
89
+ readonly id: "sel_list";
90
+ readonly type: "ask_select";
91
+ readonly prompt: "Select — list (default)";
92
+ readonly spec: {
93
+ readonly options: readonly [{
94
+ readonly id: "a";
95
+ readonly label: "Alpha";
96
+ readonly description: "first option";
97
+ }, {
98
+ readonly id: "b";
99
+ readonly label: "Bravo";
100
+ }];
101
+ };
102
+ readonly meta: {
103
+ specVersion: string;
104
+ minTier: string;
105
+ };
106
+ }, {
107
+ readonly id: "sel_segmented";
108
+ readonly type: "ask_select";
109
+ readonly prompt: "Select — segmented";
110
+ readonly spec: {
111
+ readonly display: "segmented";
112
+ readonly options: readonly [{
113
+ readonly id: "lo";
114
+ readonly label: "Low";
115
+ }, {
116
+ readonly id: "md";
117
+ readonly label: "Med";
118
+ }, {
119
+ readonly id: "hi";
120
+ readonly label: "High";
121
+ }];
122
+ };
123
+ readonly meta: {
124
+ specVersion: string;
125
+ minTier: string;
126
+ };
127
+ }, {
128
+ readonly id: "sel_cards";
129
+ readonly type: "ask_select";
130
+ readonly prompt: "Select — cards with icons";
131
+ readonly spec: {
132
+ readonly display: "cards";
133
+ readonly options: readonly [{
134
+ readonly id: "ship";
135
+ readonly label: "Ship";
136
+ readonly description: "deploy now";
137
+ readonly icon: "rocket";
138
+ }, {
139
+ readonly id: "hold";
140
+ readonly label: "Hold";
141
+ readonly description: "needs review";
142
+ readonly icon: "clock";
143
+ }, {
144
+ readonly id: "block";
145
+ readonly label: "Block";
146
+ readonly description: "do not merge";
147
+ readonly icon: "warning";
148
+ }];
149
+ };
150
+ readonly meta: {
151
+ specVersion: string;
152
+ minTier: string;
153
+ };
154
+ }, {
155
+ readonly id: "sel_grid_multi";
156
+ readonly type: "ask_select";
157
+ readonly prompt: "Multi-select — grid, with color swatches";
158
+ readonly spec: {
159
+ readonly multiple: true;
160
+ readonly min: 1;
161
+ readonly display: "grid";
162
+ readonly options: readonly [{
163
+ readonly id: "red";
164
+ readonly label: "Critical";
165
+ readonly description: "P0";
166
+ readonly color: "#dc2626";
167
+ }, {
168
+ readonly id: "amber";
169
+ readonly label: "Warning";
170
+ readonly description: "P1";
171
+ readonly color: "#d97706";
172
+ }, {
173
+ readonly id: "green";
174
+ readonly label: "Healthy";
175
+ readonly description: "P2";
176
+ readonly color: "#059669";
177
+ }];
178
+ };
179
+ readonly meta: {
180
+ specVersion: string;
181
+ minTier: string;
182
+ };
183
+ }, {
184
+ readonly id: "confirm_cards";
185
+ readonly type: "ask_confirm";
186
+ readonly prompt: "Confirm — with consequence";
187
+ readonly spec: {
188
+ readonly affirm: "Run migration";
189
+ readonly deny: "Skip";
190
+ readonly consequence: "Irreversible without a restore.";
191
+ };
192
+ readonly meta: {
193
+ specVersion: string;
194
+ minTier: string;
195
+ };
196
+ }, {
197
+ readonly id: "num";
198
+ readonly type: "ask_number";
199
+ readonly prompt: "Number — bounded integer with unit";
200
+ readonly spec: {
201
+ readonly min: 1;
202
+ readonly max: 64;
203
+ readonly step: 1;
204
+ readonly integer: true;
205
+ readonly unit: "vCPU";
206
+ };
207
+ readonly meta: {
208
+ specVersion: string;
209
+ minTier: string;
210
+ };
211
+ }, {
212
+ readonly id: "rate_stars";
213
+ readonly type: "ask_rating";
214
+ readonly prompt: "Rating — stars with labels";
215
+ readonly spec: {
216
+ readonly max: 5;
217
+ readonly icon: "star";
218
+ readonly labels: {
219
+ readonly min: "poor";
220
+ readonly max: "great";
221
+ };
222
+ };
223
+ readonly meta: {
224
+ specVersion: string;
225
+ minTier: string;
226
+ };
227
+ }, {
228
+ readonly id: "slider";
229
+ readonly type: "ask_slider";
230
+ readonly prompt: "Slider — 0–100 step 5";
231
+ readonly spec: {
232
+ readonly min: 0;
233
+ readonly max: 100;
234
+ readonly step: 5;
235
+ readonly unit: "%";
236
+ };
237
+ readonly meta: {
238
+ specVersion: string;
239
+ minTier: string;
240
+ };
241
+ }, {
242
+ readonly id: "date";
243
+ readonly type: "ask_date";
244
+ readonly prompt: "Date";
245
+ readonly spec: {};
246
+ readonly meta: {
247
+ specVersion: string;
248
+ minTier: string;
249
+ };
250
+ }, {
251
+ readonly id: "rank";
252
+ readonly type: "ask_rank";
253
+ readonly prompt: "Rank — reorderable, with descriptions";
254
+ readonly spec: {
255
+ readonly items: readonly [{
256
+ readonly id: "speed";
257
+ readonly label: "Ship speed";
258
+ }, {
259
+ readonly id: "safety";
260
+ readonly label: "Safety";
261
+ readonly description: "rollback / blast radius";
262
+ }, {
263
+ readonly id: "polish";
264
+ readonly label: "UX polish";
265
+ }];
266
+ };
267
+ readonly meta: {
268
+ specVersion: string;
269
+ minTier: string;
270
+ };
271
+ }, {
272
+ readonly id: "color_fixed";
273
+ readonly type: "ask_color";
274
+ readonly prompt: "Color — fixed palette only";
275
+ readonly spec: {
276
+ readonly palette: readonly ["#1d4ed8", "#059669", "#d97706"];
277
+ };
278
+ readonly meta: {
279
+ specVersion: string;
280
+ minTier: string;
281
+ };
282
+ }, {
283
+ readonly id: "diff";
284
+ readonly type: "ask_code_diff";
285
+ readonly prompt: "Code diff — multi-file, per-hunk accept/reject";
286
+ readonly help: "ask_code_diff — always full-width; the v0.1 wedge.";
287
+ readonly spec: {
288
+ readonly granularity: "hunk";
289
+ readonly files: readonly [{
290
+ readonly path: "src/auth.ts";
291
+ readonly hunks: readonly [{
292
+ readonly id: "h1";
293
+ readonly header: "@@ tighten check @@";
294
+ readonly before: "if (user) {\n return allow();\n}";
295
+ readonly after: "if (user && user.active) {\n return allow();\n}";
296
+ }];
297
+ }];
298
+ };
299
+ readonly meta: {
300
+ specVersion: string;
301
+ minTier: string;
302
+ };
303
+ }];
304
+ };
305
+ export declare const INTEGRATION: IntegrationCase[];
306
+ export interface PendingShapeCase {
307
+ name: string;
308
+ /** Per-tier substrings the rendering MUST surface. */
309
+ mustIncludePerTier: {
310
+ tui?: string[];
311
+ elicitation?: string[];
312
+ url?: string[];
313
+ apps?: string[];
314
+ };
315
+ /** The AskSet to render; same across tiers so the only var is the tier. */
316
+ askSet: unknown;
317
+ note: string;
318
+ }
319
+ export declare const ELICIT_PENDING_SHAPE: PendingShapeCase[];
320
+ export interface SlowAskRoutingCase {
321
+ name: string;
322
+ askSet: unknown;
323
+ /** Substrings that MUST appear in the route-decision blob. */
324
+ mustInclude: string[];
325
+ /** Substrings that MUST NOT appear (e.g. `"elicitation"` in chosen tier). */
326
+ mustExclude: string[];
327
+ note: string;
328
+ }
329
+ export declare const SLOW_ASK_ROUTING: SlowAskRoutingCase[];
330
+ export interface SemanticCase {
331
+ name: string;
332
+ askSet: unknown;
333
+ answers: unknown;
334
+ shouldPass: boolean;
335
+ note: string;
336
+ }
337
+ export declare const SEMANTIC: SemanticCase[];
338
+ //# sourceMappingURL=corpus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corpus.d.ts","sourceRoot":"","sources":["../src/corpus.ts"],"names":[],"mappings":"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"}
package/dist/corpus.js ADDED
@@ -0,0 +1,328 @@
1
+ /**
2
+ * The conformance corpus — spec-derived fixtures. This file is the
3
+ * language-agnostic source of truth for "Elicitkit-compliant" (SPEC §8).
4
+ * Any implementation in any language can consume these cases; the runner
5
+ * (index.ts) is just the reference harness over them.
6
+ */
7
+ const META = { specVersion: "0.1.0", minTier: "tui" };
8
+ const ask = (type, spec, extra = {}) => ({
9
+ id: type, type, prompt: `${type}?`, spec, meta: META, ...extra,
10
+ });
11
+ const set = (...asks) => ({ specVersion: "0.1.0", asks });
12
+ // ── Valid AskSets: one per type + envelope guarantees ──────────────────
13
+ export const VALID_ASKSETS = [
14
+ { name: "ask_text", valid: true, note: "free text", askSet: set(ask("ask_text", { multiline: true })) },
15
+ { name: "ask_select", valid: true, note: "single", askSet: set(ask("ask_select", { options: [{ id: "a", label: "A" }] })) },
16
+ { name: "ask_select.multiple", valid: true, note: "multi w/ bounds", askSet: set(ask("ask_select", { options: [{ id: "a", label: "A" }, { id: "b", label: "B" }], multiple: true, min: 1, max: 2 })) },
17
+ { name: "ask_confirm", valid: true, note: "consequence", askSet: set(ask("ask_confirm", { affirm: "Do it", consequence: "irreversible" })) },
18
+ { name: "ask_code_diff", valid: true, note: "the wedge", askSet: set(ask("ask_code_diff", { granularity: "hunk", files: [{ path: "a.ts", hunks: [{ id: "h1", after: "x=1" }] }] })) },
19
+ { name: "ask_number", valid: true, note: "bounded int", askSet: set(ask("ask_number", { min: 0, max: 10, integer: true })) },
20
+ { name: "ask_rating", valid: true, note: "1..5", askSet: set(ask("ask_rating", { max: 5 })) },
21
+ { name: "ask_slider", valid: true, note: "range", askSet: set(ask("ask_slider", { min: 0, max: 100, step: 5 })) },
22
+ { name: "ask_date", valid: true, note: "date+time", askSet: set(ask("ask_date", { time: true })) },
23
+ { name: "ask_rank", valid: true, note: "order", askSet: set(ask("ask_rank", { items: [{ id: "a", label: "A" }, { id: "b", label: "B" }] })) },
24
+ { name: "ask_color", valid: true, note: "palette", askSet: set(ask("ask_color", { palette: ["#000000", "#ffffff"] })) },
25
+ { name: "ask_select.display+icon", valid: true, note: "presentation hints are optional/ignorable", askSet: set(ask("ask_select", { display: "cards", options: [{ id: "a", label: "A", icon: "rocket", color: "#f00" }] })) },
26
+ {
27
+ name: "safe-colors-accepted",
28
+ valid: true,
29
+ note: "legit colors across the safe grammar must NOT be over-rejected: #hex, CSS keyword, functional rgb()",
30
+ askSet: {
31
+ specVersion: "0.1.0",
32
+ meta: { layout: "auto", accent: "rebeccapurple" },
33
+ asks: [
34
+ ask("ask_select", { options: [{ id: "o", label: "L", color: "#1d4ed8" }] }),
35
+ ask("ask_color", { palette: ["#1d4ed8", "rebeccapurple", "rgb(10 20 30)"] }),
36
+ ],
37
+ },
38
+ },
39
+ {
40
+ name: "reserved-hooks-and-unknown-meta",
41
+ valid: true,
42
+ note: "agentGuess/confidence/memoryKey inert; unknown meta keys preserved (forward-compat)",
43
+ askSet: set(ask("ask_text", {}, {
44
+ agentGuess: "maybe", confidence: 0.5, memoryKey: "k",
45
+ meta: { ...META, futureKnob: true },
46
+ })),
47
+ },
48
+ {
49
+ name: "askSet.edges-reserved",
50
+ valid: true,
51
+ note: "reserved branching field present but empty is allowed",
52
+ askSet: { specVersion: "0.1.0", asks: [ask("ask_confirm", {})], edges: [] },
53
+ },
54
+ ];
55
+ // ── Invalid AskSets: the schema MUST reject these ──────────────────────
56
+ export const INVALID_ASKSETS = [
57
+ { name: "missing-type", valid: false, note: "ask without type", askSet: set({ id: "x", prompt: "?", spec: {} }) },
58
+ { name: "missing-prompt", valid: false, note: "ask without prompt", askSet: set({ id: "x", type: "ask_text", spec: {} }) },
59
+ { name: "empty-id", valid: false, note: "id minLength 1", askSet: set(ask("ask_text", {}, { id: "" })) },
60
+ { name: "bad-specVersion", valid: false, note: "not semver", askSet: { specVersion: "0.1", asks: [ask("ask_text", {})] } },
61
+ { name: "no-asks", valid: false, note: "asks minItems 1", askSet: { specVersion: "0.1.0", asks: [] } },
62
+ { name: "select-without-options", valid: false, note: "ask_select requires options", askSet: set(ask("ask_select", {})) },
63
+ { name: "code_diff-no-files", valid: false, note: "ask_code_diff requires files", askSet: set(ask("ask_code_diff", { granularity: "hunk" })) },
64
+ { name: "code_diff-hunk-without-after", valid: false, note: "hunk requires after", askSet: set(ask("ask_code_diff", { files: [{ path: "a", hunks: [{ id: "h" }] }] })) },
65
+ { name: "slider-without-bounds", valid: false, note: "ask_slider requires min+max", askSet: set(ask("ask_slider", { step: 1 })) },
66
+ { name: "rank-single-item", valid: false, note: "ask_rank needs ≥2 items", askSet: set(ask("ask_rank", { items: [{ id: "a", label: "A" }] })) },
67
+ { name: "confidence-out-of-range", valid: false, note: "confidence ∈ [0,1]", askSet: set(ask("ask_text", {}, { confidence: 9 })) },
68
+ // CSS url() value-injection guard (security review): SelectOption.color,
69
+ // ask_color.palette[], and AskSet.meta.accent MUST match the safe color
70
+ // grammar. url(/var(/quotes etc. are a no-CSP-channel exfil/breakout and
71
+ // MUST be rejected by a compliant impl.
72
+ {
73
+ name: "meta.accent-url-injection",
74
+ valid: false,
75
+ note: "AskSet.meta.accent must match the safe color grammar (no url())",
76
+ askSet: { specVersion: "0.1.0", meta: { accent: "url(https://x)" }, asks: [ask("ask_text", {})] },
77
+ },
78
+ {
79
+ name: "select-option-color-url-injection",
80
+ valid: false,
81
+ note: "SelectOption.color must match the safe color grammar (no url())",
82
+ askSet: set(ask("ask_select", { options: [{ id: "o", label: "L", color: "url(https://evil/x)" }] })),
83
+ },
84
+ {
85
+ name: "ask_color-palette-url-injection",
86
+ valid: false,
87
+ note: "ask_color.palette[] entries must match the safe color grammar (no url())",
88
+ askSet: set(ask("ask_color", { palette: ["url(https://evil/x)"] })),
89
+ },
90
+ ];
91
+ // ── Answers: per-type value contract (SPEC §5/§7) ──────────────────────
92
+ const a = (type, spec, value, status = "answered") => ({
93
+ name: `${type}:${status}:${JSON.stringify(value)}`,
94
+ askSet: set(ask(type, spec)),
95
+ answers: [{ id: type, type, status, value }],
96
+ });
97
+ export const VALID_ANSWERS = [
98
+ { ...a("ask_text", {}, "hello"), valid: true, note: "string" },
99
+ { ...a("ask_confirm", {}, false), valid: true, note: "boolean" },
100
+ { ...a("ask_select", { options: [{ id: "a", label: "A" }] }, "a"), valid: true, note: "id" },
101
+ { ...a("ask_number", { min: 0, max: 9 }, 4), valid: true, note: "in range" },
102
+ { ...a("ask_rating", { max: 5 }, 5), valid: true, note: "max" },
103
+ { ...a("ask_date", {}, "2026-05-18"), valid: true, note: "iso date" },
104
+ { ...a("ask_rank", { items: [{ id: "a", label: "A" }, { id: "b", label: "B" }] }, ["b", "a"]), valid: true, note: "permutation" },
105
+ { ...a("ask_color", { palette: ["#000", "#fff"] }, "#fff"), valid: true, note: "in palette" },
106
+ { ...a("ask_color", { allowCustom: true }, "#1d4ed8"), valid: true, note: "custom allowed" },
107
+ { ...a("ask_text", {}, undefined, "declined"), valid: true, note: "declined is first-class (SPEC §5)" },
108
+ ];
109
+ export const INVALID_ANSWERS = [
110
+ { ...a("ask_text", {}, 123), valid: false, note: "number for text" },
111
+ { ...a("ask_confirm", {}, "yes"), valid: false, note: "string for boolean" },
112
+ { ...a("ask_select", { options: [{ id: "a", label: "A" }] }, "z"), valid: false, note: "unknown id" },
113
+ { ...a("ask_number", { min: 0, max: 9 }, 50), valid: false, note: "out of range" },
114
+ { ...a("ask_rating", { max: 5 }, 0), valid: false, note: "below 1" },
115
+ { ...a("ask_date", {}, "18-05-2026"), valid: false, note: "wrong date format" },
116
+ { ...a("ask_rank", { items: [{ id: "a", label: "A" }, { id: "b", label: "B" }] }, ["a"]), valid: false, note: "incomplete ranking" },
117
+ { ...a("ask_rank", { items: [{ id: "a", label: "A" }, { id: "b", label: "B" }] }, ["a", "a"]), valid: false, note: "dupe in ranking" },
118
+ { ...a("ask_color", { palette: ["#000", "#fff"] }, "#abc"), valid: false, note: "not in fixed palette" },
119
+ { ...a("ask_color", {}, 123), valid: false, note: "non-string color" },
120
+ ];
121
+ export const ELICITATION_RENDER = [
122
+ {
123
+ name: "ask_select.labels-surfaced",
124
+ note: "single-pick options must carry the option label, not just the id",
125
+ askSet: set(ask("ask_select", {
126
+ options: [
127
+ { id: "q01_a", label: "A quiet beach", description: "low tide, gulls" },
128
+ { id: "q01_b", label: "A rainy garden" },
129
+ { id: "q01_c", label: "A library nook" },
130
+ ],
131
+ })),
132
+ mustInclude: ["A quiet beach", "A rainy garden", "A library nook", "low tide, gulls"],
133
+ },
134
+ {
135
+ name: "ask_select.multiple.labels-surfaced",
136
+ note: "multi-pick: same label contract applies through items.anyOf",
137
+ askSet: set(ask("ask_select", {
138
+ multiple: true, min: 1, max: 2,
139
+ options: [
140
+ { id: "stack_node", label: "Node.js" },
141
+ { id: "stack_go", label: "Go" },
142
+ { id: "stack_rust", label: "Rust" },
143
+ ],
144
+ })),
145
+ mustInclude: ["Node.js", "Go", "Rust"],
146
+ },
147
+ {
148
+ name: "ask_rank.labels-surfaced",
149
+ note: "rank items must reach the user as human-readable rows",
150
+ askSet: set(ask("ask_rank", {
151
+ items: [
152
+ { id: "p1", label: "Reduce onboarding friction" },
153
+ { id: "p2", label: "Cut p95 latency" },
154
+ { id: "p3", label: "Ship the audit log" },
155
+ ],
156
+ })),
157
+ mustInclude: ["Reduce onboarding friction", "Cut p95 latency", "Ship the audit log"],
158
+ },
159
+ ];
160
+ // The showcase AskSet: every v0.1 type, plus the ask_select display
161
+ // variants and the ask_color custom/fixed split, expressed inline so the
162
+ // corpus stays a portable single-file moat. Mirrors
163
+ // examples/showcase-askset.json (kept in sync; tests assert overlap).
164
+ const SHOWCASE_ASKSET = {
165
+ specVersion: "0.1.0",
166
+ meta: { layout: "auto", accent: "#7c3aed" },
167
+ asks: [
168
+ { id: "text_single", type: "ask_text", prompt: "Single-line text", help: "ask_text — auto half-width.", spec: { placeholder: "type here" }, meta: META },
169
+ { id: "text_multi", type: "ask_text", prompt: "Multiline text", help: "ask_text multiline — auto full-width.", required: false, spec: { multiline: true, placeholder: "longer answer…" }, meta: META },
170
+ { id: "sel_list", type: "ask_select", prompt: "Select — list (default)", spec: { options: [{ id: "a", label: "Alpha", description: "first option" }, { id: "b", label: "Bravo" }] }, meta: META },
171
+ { id: "sel_segmented", type: "ask_select", prompt: "Select — segmented", spec: { display: "segmented", options: [{ id: "lo", label: "Low" }, { id: "md", label: "Med" }, { id: "hi", label: "High" }] }, meta: META },
172
+ { id: "sel_cards", type: "ask_select", prompt: "Select — cards with icons", spec: { display: "cards", options: [{ id: "ship", label: "Ship", description: "deploy now", icon: "rocket" }, { id: "hold", label: "Hold", description: "needs review", icon: "clock" }, { id: "block", label: "Block", description: "do not merge", icon: "warning" }] }, meta: META },
173
+ { id: "sel_grid_multi", type: "ask_select", prompt: "Multi-select — grid, with color swatches", spec: { multiple: true, min: 1, display: "grid", options: [{ id: "red", label: "Critical", description: "P0", color: "#dc2626" }, { id: "amber", label: "Warning", description: "P1", color: "#d97706" }, { id: "green", label: "Healthy", description: "P2", color: "#059669" }] }, meta: META },
174
+ { id: "confirm_cards", type: "ask_confirm", prompt: "Confirm — with consequence", spec: { affirm: "Run migration", deny: "Skip", consequence: "Irreversible without a restore." }, meta: META },
175
+ { id: "num", type: "ask_number", prompt: "Number — bounded integer with unit", spec: { min: 1, max: 64, step: 1, integer: true, unit: "vCPU" }, meta: META },
176
+ { id: "rate_stars", type: "ask_rating", prompt: "Rating — stars with labels", spec: { max: 5, icon: "star", labels: { min: "poor", max: "great" } }, meta: META },
177
+ { id: "slider", type: "ask_slider", prompt: "Slider — 0–100 step 5", spec: { min: 0, max: 100, step: 5, unit: "%" }, meta: META },
178
+ { id: "date", type: "ask_date", prompt: "Date", spec: {}, meta: META },
179
+ { id: "rank", type: "ask_rank", prompt: "Rank — reorderable, with descriptions", spec: { items: [{ id: "speed", label: "Ship speed" }, { id: "safety", label: "Safety", description: "rollback / blast radius" }, { id: "polish", label: "UX polish" }] }, meta: META },
180
+ { id: "color_fixed", type: "ask_color", prompt: "Color — fixed palette only", spec: { palette: ["#1d4ed8", "#059669", "#d97706"] }, meta: META },
181
+ { id: "diff", type: "ask_code_diff", prompt: "Code diff — multi-file, per-hunk accept/reject", help: "ask_code_diff — always full-width; the v0.1 wedge.", spec: { granularity: "hunk", files: [{ path: "src/auth.ts", hunks: [{ id: "h1", header: "@@ tighten check @@", before: "if (user) {\n return allow();\n}", after: "if (user && user.active) {\n return allow();\n}" }] }] }, meta: META },
182
+ ],
183
+ };
184
+ /** Public re-export so adopters can drive the same showcase through their
185
+ * own renderTiers implementation without duplicating the fixture. */
186
+ export const SHOWCASE = SHOWCASE_ASKSET;
187
+ export const INTEGRATION = [
188
+ {
189
+ name: "showcase.all-10-types.no-cross-type-drift",
190
+ askSet: SHOWCASE_ASKSET,
191
+ note: "all 10 v0.1 types in one AskSet must validate AND each ask's labels/markers must reach every tier — no type silently dropped or rendered as another",
192
+ mustIncludePerTier: {
193
+ // apps/url emit the panel HTML (same buildPanelHtml under the hood);
194
+ // panel embeds the ask JSON, so type tokens AND option labels both
195
+ // surface in the serialized HTML.
196
+ apps: [
197
+ "ask_text", "ask_select", "ask_confirm", "ask_code_diff", "ask_number",
198
+ "ask_rating", "ask_slider", "ask_date", "ask_rank", "ask_color",
199
+ "Alpha", "Critical", "Ship speed", "#1d4ed8",
200
+ ],
201
+ url: [
202
+ "ask_text", "ask_select", "ask_confirm", "ask_code_diff", "ask_number",
203
+ "ask_rating", "ask_slider", "ask_date", "ask_rank", "ask_color",
204
+ "Alpha", "Critical", "Ship speed", "#1d4ed8",
205
+ ],
206
+ // tui prints `(ask_*)` per row plus enumerated option labels.
207
+ tui: [
208
+ "ask_text", "ask_select", "ask_confirm", "ask_code_diff", "ask_number",
209
+ "ask_rating", "ask_slider", "ask_date", "ask_rank", "ask_color",
210
+ "Alpha", "Critical", "Ship speed",
211
+ ],
212
+ // elicitation is per-ask; the runner concatenates each ask's
213
+ // schema+message into one blob, so type-specific tokens (titled
214
+ // oneOf labels, hunk ids, ask_confirm consequence text, color
215
+ // palette entries, ask_number unit) all land in the union. The
216
+ // ask_confirm primitive is boolean-only — affirm/deny labels do
217
+ // not reach the schema — so we match on the consequence text
218
+ // instead, which IS folded into the message body.
219
+ elicitation: [
220
+ "Alpha", "Critical", "Ship speed", // labelled enum branches
221
+ "Irreversible without a restore.", // ask_confirm consequence
222
+ "vCPU", // ask_number unit
223
+ "#1d4ed8", // ask_color palette
224
+ "h1", // ask_code_diff hunk id
225
+ ],
226
+ },
227
+ },
228
+ ];
229
+ const PENDING_SHAPE_ASKSET = set(ask("ask_confirm", {}));
230
+ export const ELICIT_PENDING_SHAPE = [
231
+ {
232
+ name: "pending-shape.tui",
233
+ askSet: PENDING_SHAPE_ASKSET,
234
+ note: "tui returns the panel reference + token immediately (pending:true)",
235
+ mustIncludePerTier: {
236
+ tui: ["pending", "token", "tui"],
237
+ },
238
+ },
239
+ {
240
+ name: "pending-shape.elicitation",
241
+ askSet: PENDING_SHAPE_ASKSET,
242
+ note: "elicitation returns pending + a completed/total counter so the agent calls elicit_next per ask",
243
+ mustIncludePerTier: {
244
+ elicitation: ["pending", "token", "elicitation"],
245
+ },
246
+ },
247
+ {
248
+ name: "pending-shape.url",
249
+ askSet: PENDING_SHAPE_ASKSET,
250
+ note: "url returns the panel reference + token immediately (pending:true)",
251
+ mustIncludePerTier: {
252
+ url: ["pending", "token", "url"],
253
+ },
254
+ },
255
+ ];
256
+ export const SLOW_ASK_ROUTING = [
257
+ {
258
+ name: "slow-ask-routing.text-multiline",
259
+ askSet: set(ask("ask_text", { multiline: true })),
260
+ note: "a multiline ask_text takes too long for a per-prompt elicitation; route to a panel tier",
261
+ mustInclude: ["routedAwayFromElicitation", "true", "ask_text"],
262
+ mustExclude: ['"renderedTier":"elicitation"', '"chosen":"elicitation"'],
263
+ },
264
+ {
265
+ name: "slow-ask-routing.code-diff-many-hunks",
266
+ askSet: set(ask("ask_code_diff", {
267
+ granularity: "hunk",
268
+ files: [{ path: "src/a.ts", hunks: [
269
+ { id: "h1", after: "x=1" },
270
+ { id: "h2", after: "y=2" },
271
+ { id: "h3", after: "z=3" },
272
+ ] }],
273
+ })),
274
+ note: "ask_code_diff with > 2 hunks is too long for per-prompt elicitation",
275
+ mustInclude: ["routedAwayFromElicitation", "true", "ask_code_diff"],
276
+ mustExclude: ['"renderedTier":"elicitation"', '"chosen":"elicitation"'],
277
+ },
278
+ {
279
+ name: "slow-ask-routing.rank-many-items",
280
+ askSet: set(ask("ask_rank", {
281
+ items: [
282
+ { id: "a", label: "A" }, { id: "b", label: "B" }, { id: "c", label: "C" },
283
+ { id: "d", label: "D" }, { id: "e", label: "E" },
284
+ ],
285
+ })),
286
+ note: "ask_rank with > 4 items is too long for per-prompt elicitation",
287
+ mustInclude: ["routedAwayFromElicitation", "true", "ask_rank"],
288
+ mustExclude: ['"renderedTier":"elicitation"', '"chosen":"elicitation"'],
289
+ },
290
+ ];
291
+ export const SEMANTIC = [
292
+ {
293
+ name: "required-missing-fails",
294
+ askSet: set(ask("ask_text", {})),
295
+ answers: [],
296
+ shouldPass: false,
297
+ note: "a required ask with no answer must fail (no silent skip)",
298
+ },
299
+ {
300
+ name: "required-declined-ok",
301
+ askSet: set(ask("ask_text", {})),
302
+ answers: [{ id: "ask_text", type: "ask_text", status: "declined" }],
303
+ shouldPass: true,
304
+ note: "declined is first-class even for a required ask (SPEC §5)",
305
+ },
306
+ {
307
+ name: "required-deferred-fails",
308
+ askSet: set(ask("ask_text", {})),
309
+ answers: [{ id: "ask_text", type: "ask_text", status: "deferred" }],
310
+ shouldPass: false,
311
+ note: "a required ask cannot be deferred",
312
+ },
313
+ {
314
+ name: "optional-missing-ok",
315
+ askSet: set(ask("ask_text", {}, { required: false })),
316
+ answers: [],
317
+ shouldPass: true,
318
+ note: "an optional ask may be omitted",
319
+ },
320
+ {
321
+ name: "answer-type-mismatch-fails",
322
+ askSet: set(ask("ask_confirm", {})),
323
+ answers: [{ id: "ask_confirm", type: "ask_text", status: "answered", value: "x" }],
324
+ shouldPass: false,
325
+ note: "answer.type must match the ask",
326
+ },
327
+ ];
328
+ //# sourceMappingURL=corpus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corpus.js","sourceRoot":"","sources":["../src/corpus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ export * from "./corpus.js";
2
+ /** Per-tier rendering of an AskSet, as serialisable strings. The runner
3
+ * substring-matches against each tier's expected tokens, so an impl may
4
+ * return literal HTML for `apps`/`url`, the tui plaintext, and either
5
+ * a single concatenated schema-blob or an array of per-ask schema blobs
6
+ * for `elicitation` (the runner JSON-serialises anything non-string). */
7
+ export interface TierRenderings {
8
+ apps?: unknown;
9
+ url?: unknown;
10
+ tui?: unknown;
11
+ elicitation?: unknown;
12
+ }
13
+ /** The minimal surface an implementation exposes to be checked. Only
14
+ * `validateAskSet` + `validateAnswer` are required; `validateAnswers`
15
+ * (set-aware: required/declined/deferred + per-type value) unlocks the
16
+ * set-aware tier. `renderElicitationAsk` is optional and exercises the
17
+ * elicitation-tier rendering contract (labels MUST reach the client).
18
+ * `renderTiers` is the integration capstone — render the SAME AskSet
19
+ * across all four tiers and assert every type/label surfaces in each
20
+ * (the no-cross-type-drift guard at SPEC §6/§7).
21
+ * Shapes are intentionally tiny so any language can adapt. */
22
+ export interface ConformanceTarget {
23
+ validateAskSet(input: unknown): {
24
+ ok: boolean;
25
+ };
26
+ validateAnswer(input: unknown): {
27
+ ok: boolean;
28
+ };
29
+ validateAnswers?(askSet: unknown, rawAnswers: unknown): {
30
+ ok: boolean;
31
+ };
32
+ /** Optional: return what the implementation would send to the host's
33
+ * native elicitation primitive for the single Ask in `askSet`. Can
34
+ * be the full `{ message, requestedSchema }` params or just the
35
+ * schema — the runner serialises whatever is returned and substring-
36
+ * matches the expected labels, so labels may live in either place. */
37
+ renderElicitationAsk?(askSet: unknown): unknown;
38
+ /** Optional: render the WHOLE AskSet across all four tiers. The
39
+ * runner serialises each tier and substring-matches the integration
40
+ * fixture's per-tier tokens — that is what "faithfully rendered
41
+ * across all 4 tiers" means for a v0.1 implementation. */
42
+ renderTiers?(askSet: unknown): TierRenderings;
43
+ /** Optional: simulate an `elicit` tool call (non-blocking contract).
44
+ * Returns the rendering blob the agent receives back per tier — must
45
+ * carry the pending-shape tokens (pending/token/tier) the SPEC
46
+ * defines. The runner serialises whatever is returned and
47
+ * substring-matches against the fixture's per-tier expectations. */
48
+ elicitPendingShape?(askSet: unknown, tier: "tui" | "elicitation" | "url" | "apps"): unknown;
49
+ /** Optional: simulate tier negotiation for an AskSet against a host
50
+ * that offers ALL four tiers — the slow-ask auto-router MUST drop
51
+ * `elicitation` when the set contains a slow-likely ask. Return
52
+ * enough context that the runner can substring-match BOTH the
53
+ * decision flag (e.g. `routedAwayFromElicitation: true`) AND the
54
+ * rule name (the ask type that triggered). */
55
+ slowAskRoute?(askSet: unknown): unknown;
56
+ }
57
+ export interface CheckResult {
58
+ group: string;
59
+ name: string;
60
+ ok: boolean;
61
+ detail: string;
62
+ }
63
+ export interface ConformanceReport {
64
+ /** true ⇒ may display the "Elicitkit-compliant (v0.1)" badge */
65
+ compliant: boolean;
66
+ total: number;
67
+ passed: number;
68
+ /** full per-fixture results — show the failures to the implementer */
69
+ results: CheckResult[];
70
+ /** which optional capabilities were exercised */
71
+ exercised: {
72
+ askSet: boolean;
73
+ answerEnvelope: boolean;
74
+ answerSemantics: boolean;
75
+ elicitationRender: boolean;
76
+ integration: boolean;
77
+ pendingShape: boolean;
78
+ slowAskRouting: boolean;
79
+ };
80
+ }
81
+ /**
82
+ * Run the conformance corpus against `target`. The reference implementation
83
+ * (@elicitkit/core) MUST pass its own suite — that is what makes the suite,
84
+ * not the server, the moat (watchpoint #4).
85
+ */
86
+ export declare function runConformance(target: ConformanceTarget): ConformanceReport;
87
+ /** Human-readable one-liner per failure, for CLI/CI output. */
88
+ export declare function formatReport(r: ConformanceReport): string;
89
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,cAAc,aAAa,CAAC;AAE5B;;;;0EAI0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;+DAQ+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;IAChD,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;IAChD,eAAe,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;IACxE;;;;2EAIuE;IACvE,oBAAoB,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAChD;;;+DAG2D;IAC3D,WAAW,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;IAC9C;;;;yEAIqE;IACrE,kBAAkB,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5F;;;;;mDAK+C;IAC/C,YAAY,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iDAAiD;IACjD,SAAS,EAAE;QACT,MAAM,EAAE,OAAO,CAAC;QAChB,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,OAAO,CAAC;QACzB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,WAAW,EAAE,OAAO,CAAC;QACrB,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;CACH;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CA8M3E;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAQzD"}
package/dist/index.js ADDED
@@ -0,0 +1,211 @@
1
+ import { VALID_ASKSETS, INVALID_ASKSETS, VALID_ANSWERS, INVALID_ANSWERS, SEMANTIC, ELICITATION_RENDER, INTEGRATION, ELICIT_PENDING_SHAPE, SLOW_ASK_ROUTING, } from "./corpus.js";
2
+ export * from "./corpus.js";
3
+ function rec(results, group, name, ok, detail) {
4
+ results.push({ group, name, ok, detail });
5
+ }
6
+ /**
7
+ * Run the conformance corpus against `target`. The reference implementation
8
+ * (@elicitkit/core) MUST pass its own suite — that is what makes the suite,
9
+ * not the server, the moat (watchpoint #4).
10
+ */
11
+ export function runConformance(target) {
12
+ const results = [];
13
+ for (const c of [...VALID_ASKSETS, ...INVALID_ASKSETS]) {
14
+ const got = target.validateAskSet(c.askSet).ok;
15
+ rec(results, "askSet", c.name, got === c.valid, `expected ${c.valid ? "accept" : "reject"} (${c.note}); got ${got ? "accept" : "reject"}`);
16
+ }
17
+ for (const c of [...VALID_ANSWERS, ...INVALID_ANSWERS]) {
18
+ // Envelope-only check: the Answer object itself is schema-valid; the
19
+ // per-type value contract is exercised via validateAnswers below.
20
+ const answer = c.answers[0];
21
+ const got = target.validateAnswer(answer).ok;
22
+ // every fixture answer is a well-formed envelope; the schema MUST accept
23
+ // the envelope regardless of value (value typing is §7, not the schema).
24
+ rec(results, "answerEnvelope", c.name, got === true, `Answer envelope must be schema-valid (${c.note}); got ${got ? "accept" : "reject"}`);
25
+ }
26
+ const hasSetAware = typeof target.validateAnswers === "function";
27
+ if (hasSetAware) {
28
+ const va = target.validateAnswers.bind(target);
29
+ for (const c of [...VALID_ANSWERS, ...INVALID_ANSWERS]) {
30
+ const got = va(c.askSet, c.answers).ok;
31
+ rec(results, "answerValue", c.name, got === c.valid, `value contract: expected ${c.valid ? "accept" : "reject"} (${c.note}); got ${got ? "accept" : "reject"}`);
32
+ }
33
+ for (const c of SEMANTIC) {
34
+ const got = va(c.askSet, c.answers).ok;
35
+ rec(results, "semantics", c.name, got === c.shouldPass, `${c.note}; expected ${c.shouldPass ? "pass" : "fail"}, got ${got ? "pass" : "fail"}`);
36
+ }
37
+ }
38
+ const hasElicitRender = typeof target.renderElicitationAsk === "function";
39
+ if (hasElicitRender) {
40
+ const render = target.renderElicitationAsk.bind(target);
41
+ for (const c of ELICITATION_RENDER) {
42
+ let serialized = "";
43
+ let crashed = false;
44
+ try {
45
+ serialized = JSON.stringify(render(c.askSet));
46
+ }
47
+ catch (e) {
48
+ crashed = true;
49
+ serialized = String(e);
50
+ }
51
+ const missing = c.mustInclude.filter((s) => !serialized.includes(s));
52
+ const leaked = (c.mustExclude ?? []).filter((s) => serialized.includes(s));
53
+ const ok = !crashed && missing.length === 0 && leaked.length === 0;
54
+ rec(results, "elicitationRender", c.name, ok, crashed
55
+ ? `renderElicitationAsk threw: ${serialized}`
56
+ : missing.length
57
+ ? `missing label substrings: ${missing.join(", ")} (${c.note})`
58
+ : leaked.length
59
+ ? `leaked substrings: ${leaked.join(", ")} (${c.note})`
60
+ : `labels surfaced (${c.note})`);
61
+ }
62
+ }
63
+ // Integration: validate the showcase as a whole AND assert every type
64
+ // surfaces faithfully in every tier (no cross-type drift). ONE result
65
+ // per case — either the entire showcase round-trips through the four
66
+ // tiers or this row fails with the exact missing substrings. Opt-in:
67
+ // a target without renderTiers gets a skip-row noted as exercised=false
68
+ // (it still passes if validateAskSet accepts the showcase — the
69
+ // schema half of the contract — so absence of the renderer doesn't
70
+ // silently inflate the row count).
71
+ const hasRenderTiers = typeof target.renderTiers === "function";
72
+ for (const c of INTEGRATION) {
73
+ const wholeValid = target.validateAskSet(c.askSet).ok;
74
+ if (!wholeValid) {
75
+ rec(results, "integration", c.name, false, `showcase AskSet rejected by validateAskSet (${c.note})`);
76
+ continue;
77
+ }
78
+ if (!hasRenderTiers) {
79
+ // Schema-only target: the integration row passes on the AskSet
80
+ // half (the rendering half is genuinely not exercised). Keep
81
+ // total stable so the count is deterministic across capability
82
+ // levels — the implementation will see exercised.integration=false.
83
+ rec(results, "integration", c.name, true, `showcase AskSet validates; renderTiers not provided (${c.note})`);
84
+ continue;
85
+ }
86
+ const r = target.renderTiers.bind(target);
87
+ let rendered;
88
+ try {
89
+ rendered = r(c.askSet) ?? {};
90
+ }
91
+ catch (e) {
92
+ rec(results, "integration", c.name, false, `renderTiers threw: ${String(e)}`);
93
+ continue;
94
+ }
95
+ const ser = (v) => (typeof v === "string" ? v : JSON.stringify(v));
96
+ const tiers = ["apps", "url", "tui", "elicitation"];
97
+ const missing = [];
98
+ for (const t of tiers) {
99
+ const blob = rendered[t] === undefined ? "" : ser(rendered[t]);
100
+ for (const s of c.mustIncludePerTier[t]) {
101
+ if (!blob.includes(s))
102
+ missing.push(`${t}:${s}`);
103
+ }
104
+ }
105
+ const ok = missing.length === 0;
106
+ rec(results, "integration", c.name, ok, ok
107
+ ? `every type's labels/markers reached every tier (${c.note})`
108
+ : `cross-type drift — missing per-tier substrings: ${missing.join(", ")} (${c.note})`);
109
+ }
110
+ // Non-blocking `elicit` contract: per-tier pending-shape fixtures.
111
+ // Optional capability — an adopter without `elicitPendingShape` still
112
+ // passes (validateAskSet on the underlying AskSet is part of askSet),
113
+ // but the pending rows are listed as a skip so the count is stable
114
+ // across capability levels.
115
+ const hasPendingShape = typeof target.elicitPendingShape === "function";
116
+ for (const c of ELICIT_PENDING_SHAPE) {
117
+ const askValid = target.validateAskSet(c.askSet).ok;
118
+ if (!askValid) {
119
+ rec(results, "pendingShape", c.name, false, `pending-shape AskSet rejected by validateAskSet (${c.note})`);
120
+ continue;
121
+ }
122
+ if (!hasPendingShape) {
123
+ rec(results, "pendingShape", c.name, true, `AskSet validates; elicitPendingShape not provided (${c.note})`);
124
+ continue;
125
+ }
126
+ const tiers = Object.keys(c.mustIncludePerTier);
127
+ const missing = [];
128
+ let crashed = null;
129
+ for (const t of tiers) {
130
+ let blob = "";
131
+ try {
132
+ const out = target.elicitPendingShape.bind(target)(c.askSet, t);
133
+ blob = typeof out === "string" ? out : JSON.stringify(out);
134
+ }
135
+ catch (e) {
136
+ crashed = String(e);
137
+ break;
138
+ }
139
+ for (const s of c.mustIncludePerTier[t] ?? []) {
140
+ if (!blob.includes(s))
141
+ missing.push(`${t}:${s}`);
142
+ }
143
+ }
144
+ const ok = crashed === null && missing.length === 0;
145
+ rec(results, "pendingShape", c.name, ok, crashed
146
+ ? `elicitPendingShape threw: ${crashed}`
147
+ : missing.length
148
+ ? `missing pending-shape tokens: ${missing.join(", ")} (${c.note})`
149
+ : `pending-shape tokens surfaced (${c.note})`);
150
+ }
151
+ // Slow-ask auto-router fixtures: an AskSet containing a slow-likely
152
+ // ask MUST route away from elicitation. The runner serialises the
153
+ // route-decision blob and substring-matches the required + forbidden
154
+ // tokens.
155
+ const hasSlowAsk = typeof target.slowAskRoute === "function";
156
+ for (const c of SLOW_ASK_ROUTING) {
157
+ if (!hasSlowAsk) {
158
+ // Optional capability: surface as a skip-row that passes, so a
159
+ // schema-only target's count stays deterministic.
160
+ const askValid = target.validateAskSet(c.askSet).ok;
161
+ rec(results, "slowAskRouting", c.name, askValid, askValid
162
+ ? `AskSet validates; slowAskRoute not provided (${c.note})`
163
+ : `slow-ask AskSet rejected by validateAskSet (${c.note})`);
164
+ continue;
165
+ }
166
+ let blob = "";
167
+ try {
168
+ const out = target.slowAskRoute.bind(target)(c.askSet);
169
+ blob = typeof out === "string" ? out : JSON.stringify(out);
170
+ }
171
+ catch (e) {
172
+ rec(results, "slowAskRouting", c.name, false, `slowAskRoute threw: ${String(e)} (${c.note})`);
173
+ continue;
174
+ }
175
+ const missing = c.mustInclude.filter((s) => !blob.includes(s));
176
+ const leaked = c.mustExclude.filter((s) => blob.includes(s));
177
+ const ok = missing.length === 0 && leaked.length === 0;
178
+ rec(results, "slowAskRouting", c.name, ok, missing.length
179
+ ? `missing route tokens: ${missing.join(", ")} (${c.note})`
180
+ : leaked.length
181
+ ? `forbidden route tokens leaked: ${leaked.join(", ")} (${c.note})`
182
+ : `routed away from elicitation (${c.note})`);
183
+ }
184
+ const passed = results.filter((r) => r.ok).length;
185
+ return {
186
+ compliant: passed === results.length && results.length > 0,
187
+ total: results.length,
188
+ passed,
189
+ results,
190
+ exercised: {
191
+ askSet: true,
192
+ answerEnvelope: true,
193
+ answerSemantics: hasSetAware,
194
+ elicitationRender: hasElicitRender,
195
+ integration: hasRenderTiers,
196
+ pendingShape: hasPendingShape,
197
+ slowAskRouting: hasSlowAsk,
198
+ },
199
+ };
200
+ }
201
+ /** Human-readable one-liner per failure, for CLI/CI output. */
202
+ export function formatReport(r) {
203
+ const head = r.compliant
204
+ ? `Elicitkit-compliant (v0.1) — ${r.passed}/${r.total}`
205
+ : `NOT compliant — ${r.passed}/${r.total}`;
206
+ const fails = r.results
207
+ .filter((x) => !x.ok)
208
+ .map((x) => ` ✗ [${x.group}] ${x.name}: ${x.detail}`);
209
+ return [head, ...fails].join("\n");
210
+ }
211
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,aAAa,EACb,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,cAAc,aAAa,CAAC;AA+E5B,SAAS,GAAG,CAAC,OAAsB,EAAE,KAAa,EAAE,IAAY,EAAE,EAAW,EAAE,MAAc;IAC3F,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAyB;IACtD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,EAC5C,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC;QACvD,qEAAqE;QACrE,kEAAkE;QAClE,MAAM,MAAM,GAAI,CAAC,CAAC,OAAqB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC7C,yEAAyE;QACzE,yEAAyE;QACzE,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EACjD,yCAAyC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU,CAAC;IACjE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,EAAE,GAAG,MAAM,CAAC,eAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC;YACvD,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,EACjD,4BAA4B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,EACpD,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,MAAM,CAAC,oBAAoB,KAAK,UAAU,CAAC;IAC1E,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,KAAK,MAAM,CAAC,IAAI,kBAAkB,EAAE,CAAC;YACnC,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,IAAI,CAAC;gBACf,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;YACnE,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAC1C,OAAO;gBACL,CAAC,CAAC,+BAA+B,UAAU,EAAE;gBAC7C,CAAC,CAAC,OAAO,CAAC,MAAM;oBACd,CAAC,CAAC,6BAA6B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG;oBAC/D,CAAC,CAAC,MAAM,CAAC,MAAM;wBACb,CAAC,CAAC,sBAAsB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG;wBACvD,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,sEAAsE;IACtE,qEAAqE;IACrE,qEAAqE;IACrE,wEAAwE;IACxE,gEAAgE;IAChE,mEAAmE;IACnE,mCAAmC;IACnC,MAAM,cAAc,GAAG,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC;IAChE,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EACvC,+CAA+C,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAC5D,SAAS;QACX,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,+DAA+D;YAC/D,6DAA6D;YAC7D,+DAA+D;YAC/D,oEAAoE;YACpE,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EACtC,wDAAwD,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YACrE,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,MAAM,CAAC,WAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,QAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EACvC,sBAAsB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAU,CAAC;QAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;QAChC,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EACpC,EAAE;YACA,CAAC,CAAC,mDAAmD,CAAC,CAAC,IAAI,GAAG;YAC9D,CAAC,CAAC,mDAAmD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAC7F,CAAC;IAED,mEAAmE;IACnE,sEAAsE;IACtE,sEAAsE;IACtE,mEAAmE;IACnE,4BAA4B;IAC5B,MAAM,eAAe,GAAG,OAAO,MAAM,CAAC,kBAAkB,KAAK,UAAU,CAAC;IACxE,KAAK,MAAM,CAAC,IAAI,oBAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EACxC,oDAAoD,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EACvC,sDAAsD,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YACnE,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAA6C,CAAC;QAC5F,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,CAAC,kBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACjE,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;QACpD,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EACrC,OAAO;YACL,CAAC,CAAC,6BAA6B,OAAO,EAAE;YACxC,CAAC,CAAC,OAAO,CAAC,MAAM;gBACd,CAAC,CAAC,iCAAiC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG;gBACnE,CAAC,CAAC,kCAAkC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,oEAAoE;IACpE,kEAAkE;IAClE,qEAAqE;IACrE,UAAU;IACV,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU,CAAC;IAC7D,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,+DAA+D;YAC/D,kDAAkD;YAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAC7C,QAAQ;gBACN,CAAC,CAAC,gDAAgD,CAAC,CAAC,IAAI,GAAG;gBAC3D,CAAC,CAAC,+CAA+C,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAChE,SAAS;QACX,CAAC;QACD,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,YAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACxD,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAC1C,uBAAuB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;YAClD,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;QACvD,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EACvC,OAAO,CAAC,MAAM;YACZ,CAAC,CAAC,yBAAyB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG;YAC3D,CAAC,CAAC,MAAM,CAAC,MAAM;gBACb,CAAC,CAAC,kCAAkC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG;gBACnE,CAAC,CAAC,iCAAiC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAClD,OAAO;QACL,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAC1D,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,MAAM;QACN,OAAO;QACP,SAAS,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,IAAI;YACpB,eAAe,EAAE,WAAW;YAC5B,iBAAiB,EAAE,eAAe;YAClC,WAAW,EAAE,cAAc;YAC3B,YAAY,EAAE,eAAe;YAC7B,cAAc,EAAE,UAAU;SAC3B;KACF,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,YAAY,CAAC,CAAoB;IAC/C,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS;QACtB,CAAC,CAAC,gCAAgC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE;QACvD,CAAC,CAAC,mBAAmB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@elicitkit/conformance",
3
+ "version": "0.1.0",
4
+ "description": "The Elicitkit conformance suite — the source of truth for what \"Elicitkit-compliant\" means. A spec-derived fixture corpus + a portable runner any implementation points at.",
5
+ "license": "Apache-2.0",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": { "types": "./dist/index.d.ts", "default": "./dist/index.js" },
11
+ "./corpus": "./dist/corpus.js"
12
+ },
13
+ "files": ["dist"],
14
+ "scripts": {
15
+ "build": "tsc -p tsconfig.json",
16
+ "test": "tsc -p tsconfig.json && node test/smoke.mjs"
17
+ },
18
+ "devDependencies": {
19
+ "@elicitkit/core": "workspace:*",
20
+ "@elicitkit/renderers": "workspace:*"
21
+ },
22
+ "publishConfig": { "access": "public" }
23
+ }