@haibun/core 3.9.0 → 4.0.0-alpha.1

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.
Files changed (73) hide show
  1. package/build/currentVersion.d.ts +1 -1
  2. package/build/currentVersion.d.ts.map +1 -1
  3. package/build/currentVersion.js +1 -1
  4. package/build/currentVersion.js.map +1 -1
  5. package/build/lib/EventLogger.d.ts +8 -5
  6. package/build/lib/EventLogger.d.ts.map +1 -1
  7. package/build/lib/EventLogger.js +15 -12
  8. package/build/lib/EventLogger.js.map +1 -1
  9. package/build/lib/consts.d.ts +5 -0
  10. package/build/lib/consts.d.ts.map +1 -0
  11. package/build/lib/consts.js +5 -0
  12. package/build/lib/consts.js.map +1 -0
  13. package/build/lib/core/flow-runner.js +6 -6
  14. package/build/lib/core/flow-runner.js.map +1 -1
  15. package/build/lib/defs.d.ts +13 -2
  16. package/build/lib/defs.d.ts.map +1 -1
  17. package/build/lib/defs.js.map +1 -1
  18. package/build/lib/feature-variables.d.ts.map +1 -1
  19. package/build/lib/feature-variables.js +8 -3
  20. package/build/lib/feature-variables.js.map +1 -1
  21. package/build/lib/namedVars.d.ts.map +1 -1
  22. package/build/lib/namedVars.js +2 -1
  23. package/build/lib/namedVars.js.map +1 -1
  24. package/build/lib/step-dispatch.d.ts +106 -0
  25. package/build/lib/step-dispatch.d.ts.map +1 -0
  26. package/build/lib/step-dispatch.js +207 -0
  27. package/build/lib/step-dispatch.js.map +1 -0
  28. package/build/lib/step-helpers.d.ts +10 -0
  29. package/build/lib/step-helpers.d.ts.map +1 -0
  30. package/build/lib/step-helpers.js +16 -0
  31. package/build/lib/step-helpers.js.map +1 -0
  32. package/build/lib/step-validation.d.ts +26 -0
  33. package/build/lib/step-validation.d.ts.map +1 -0
  34. package/build/lib/step-validation.js +26 -0
  35. package/build/lib/step-validation.js.map +1 -0
  36. package/build/lib/stepper-registry.d.ts +5 -2
  37. package/build/lib/stepper-registry.d.ts.map +1 -1
  38. package/build/lib/stepper-registry.js +2 -1
  39. package/build/lib/stepper-registry.js.map +1 -1
  40. package/build/lib/test/EventCollectorStepper.d.ts +6 -4
  41. package/build/lib/test/EventCollectorStepper.d.ts.map +1 -1
  42. package/build/lib/test/EventCollectorStepper.js +14 -22
  43. package/build/lib/test/EventCollectorStepper.js.map +1 -1
  44. package/build/lib/test/TestStepsWithOptions.d.ts +5 -1
  45. package/build/lib/test/TestStepsWithOptions.d.ts.map +1 -1
  46. package/build/lib/test/TestStepsWithOptions.js +4 -2
  47. package/build/lib/test/TestStepsWithOptions.js.map +1 -1
  48. package/build/lib/test/resolvedTestFeatures.d.ts +1 -1
  49. package/build/lib/util/index.d.ts +12 -4
  50. package/build/lib/util/index.d.ts.map +1 -1
  51. package/build/lib/util/index.js +45 -4
  52. package/build/lib/util/index.js.map +1 -1
  53. package/build/phases/Executor.d.ts.map +1 -1
  54. package/build/phases/Executor.js +3 -2
  55. package/build/phases/Executor.js.map +1 -1
  56. package/build/schema/protocol.d.ts +65 -59
  57. package/build/schema/protocol.d.ts.map +1 -1
  58. package/build/schema/protocol.js +3 -3
  59. package/build/schema/protocol.js.map +1 -1
  60. package/build/steps/activities-stepper.d.ts.map +1 -1
  61. package/build/steps/activities-stepper.js +12 -7
  62. package/build/steps/activities-stepper.js.map +1 -1
  63. package/build/steps/debugger-stepper.js +1 -1
  64. package/build/steps/debugger-stepper.js.map +1 -1
  65. package/build/steps/finalizer-stepper.d.ts +3 -1
  66. package/build/steps/finalizer-stepper.d.ts.map +1 -1
  67. package/build/steps/finalizer-stepper.js +35 -11
  68. package/build/steps/finalizer-stepper.js.map +1 -1
  69. package/build/steps/logic-stepper.d.ts +5 -1
  70. package/build/steps/logic-stepper.d.ts.map +1 -1
  71. package/build/steps/logic-stepper.js +4 -2
  72. package/build/steps/logic-stepper.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,106 @@
1
+ import { z } from 'zod';
2
+ import { AStepper } from './astepper.js';
3
+ import type { TWorld, TStepperStep } from './defs.js';
4
+ import { type StepDescriptor } from './stepper-registry.js';
5
+ /** Clean result type for transport consumers (SSE, MCP). Hides haibun internals. */
6
+ export type StepHandlerResult = {
7
+ ok: true;
8
+ products: Record<string, unknown>;
9
+ } | {
10
+ ok: false;
11
+ error: string;
12
+ };
13
+ /**
14
+ * A registered step tool — the unit of dispatch for any transport (MCP, SSE, etc.).
15
+ */
16
+ export type StepTool = {
17
+ name: string;
18
+ description: string;
19
+ inputSchema: StepToolInputSchema;
20
+ /** Zod schemas for each input parameter, keyed by parameter name. Used for runtime validation. */
21
+ paramSchemas: Map<string, z.ZodType>;
22
+ /** JSON Schema describing the products this step returns. Built from outputSchema on step definition. */
23
+ outputSchema?: Record<string, unknown>;
24
+ stepperName: string;
25
+ stepName: string;
26
+ handler: (input: Record<string, unknown>) => Promise<StepHandlerResult>;
27
+ };
28
+ export type StepToolInputSchema = {
29
+ type: 'object';
30
+ properties?: Record<string, {
31
+ type?: string;
32
+ description?: string;
33
+ [key: string]: unknown;
34
+ }>;
35
+ required?: string[];
36
+ [key: string]: unknown;
37
+ };
38
+ /**
39
+ * Build a registry of step tools from the given steppers.
40
+ * Each key is `${stepperName}-${stepName}` (e.g. `MuskegStepper-getTypes`).
41
+ * Steps with `expose: false` are excluded.
42
+ *
43
+ * Used by MCP, SSE, and any future transport.
44
+ */
45
+ export declare function buildStepRegistry(steppers: AStepper[], world: TWorld): Map<string, StepTool>;
46
+ /**
47
+ * Validate input against a step tool's Zod schemas.
48
+ * Returns validated (parsed) input on success, throws with descriptive errors on failure.
49
+ */
50
+ export declare function validateToolInput(tool: StepTool, input: Record<string, unknown>): Record<string, unknown>;
51
+ /**
52
+ * Generate the canonical RPC method name for a step.
53
+ * Used by both server (registry keys) and client (typed imports).
54
+ *
55
+ * Accepts either a stepper class/instance or a stepper name string.
56
+ */
57
+ export declare function stepMethodName(stepperOrName: string | AStepper | {
58
+ name: string;
59
+ }, stepName: string): string;
60
+ /**
61
+ * Create a handler that calls the step action directly with validated input.
62
+ * RPC transports validate input via validateToolInput() then call this handler.
63
+ * The action receives typed values directly — no string round-tripping through
64
+ * mapInputToStepValues/resolveVariable. A minimal featureStep is provided for provenance.
65
+ */
66
+ export declare function createStepHandler(stepperName: string, stepName: string, stepDef: TStepperStep): (input: Record<string, unknown>) => Promise<StepHandlerResult>;
67
+ /** Incoming JSON-RPC 2.0 request from client (POST /rpc/:method). */
68
+ export declare const RpcRequestSchema: z.ZodObject<{
69
+ jsonrpc: z.ZodLiteral<"2.0">;
70
+ id: z.ZodString;
71
+ method: z.ZodString;
72
+ params: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
73
+ stream: z.ZodOptional<z.ZodBoolean>;
74
+ }, z.core.$strip>;
75
+ export type TRpcRequest = z.infer<typeof RpcRequestSchema>;
76
+ /** Outgoing JSON-RPC 2.0 response to client. */
77
+ export declare const RpcResponseSchema: z.ZodObject<{
78
+ jsonrpc: z.ZodLiteral<"2.0">;
79
+ id: z.ZodString;
80
+ result: z.ZodOptional<z.ZodUnknown>;
81
+ error: z.ZodOptional<z.ZodString>;
82
+ }, z.core.$strip>;
83
+ export type TRpcResponse = z.infer<typeof RpcResponseSchema>;
84
+ /** Outgoing JSON-RPC 2.0 stream chunk to client. */
85
+ export declare const RpcStreamSchema: z.ZodObject<{
86
+ jsonrpc: z.ZodLiteral<"2.0">;
87
+ id: z.ZodString;
88
+ stream: z.ZodLiteral<true>;
89
+ data: z.ZodUnknown;
90
+ }, z.core.$strip>;
91
+ export type TRpcStream = z.infer<typeof RpcStreamSchema>;
92
+ /**
93
+ * Parse and validate an incoming RPC request.
94
+ * Returns the parsed request or null if the message is not an RPC request.
95
+ */
96
+ export declare function parseRpcRequest(raw: unknown): TRpcRequest | null;
97
+ export type StepDiscovery = {
98
+ registry: Map<string, StepTool>;
99
+ metadata: StepDescriptor[];
100
+ };
101
+ /**
102
+ * Build a step registry and enrich metadata with input/output schemas.
103
+ * Single entry point for both SSE and MCP transports.
104
+ */
105
+ export declare function discoverSteps(steppers: AStepper[], world: TWorld): StepDiscovery;
106
+ //# sourceMappingURL=step-dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-dispatch.d.ts","sourceRoot":"","sources":["../../src/lib/step-dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,207 @@
1
+ import { z } from 'zod';
2
+ import { namedInterpolation, mapInputToStepValues } from './namedVars.js';
3
+ import { constructorName } from './util/index.js';
4
+ import { DOMAIN_STRING, normalizeDomainKey } from './domain-types.js';
5
+ import { StepperRegistry } from './stepper-registry.js';
6
+ /**
7
+ * Build a registry of step tools from the given steppers.
8
+ * Each key is `${stepperName}-${stepName}` (e.g. `MuskegStepper-getTypes`).
9
+ * Steps with `expose: false` are excluded.
10
+ *
11
+ * Used by MCP, SSE, and any future transport.
12
+ */
13
+ export function buildStepRegistry(steppers, world) {
14
+ const registry = new Map();
15
+ for (const stepper of steppers) {
16
+ const stepperName = constructorName(stepper);
17
+ for (const [stepName, stepDef] of Object.entries(stepper.steps)) {
18
+ if (stepDef.expose === false)
19
+ continue;
20
+ const { inputSchema, paramSchemas } = buildInputSchema(stepDef, world);
21
+ const name = stepMethodName(stepperName, stepName);
22
+ let outputSchema;
23
+ if (stepDef.outputSchema) {
24
+ try {
25
+ outputSchema = z.toJSONSchema(stepDef.outputSchema);
26
+ }
27
+ catch { /* skip if schema can't be converted */ }
28
+ }
29
+ registry.set(name, {
30
+ name,
31
+ description: stepDef.gwta || stepName,
32
+ inputSchema,
33
+ paramSchemas,
34
+ outputSchema,
35
+ stepperName,
36
+ stepName,
37
+ handler: createStepHandler(stepperName, stepName, stepDef),
38
+ });
39
+ }
40
+ }
41
+ return registry;
42
+ }
43
+ /**
44
+ * Validate input against a step tool's Zod schemas.
45
+ * Returns validated (parsed) input on success, throws with descriptive errors on failure.
46
+ */
47
+ export function validateToolInput(tool, input) {
48
+ const validated = { ...input };
49
+ const errors = [];
50
+ const required = tool.inputSchema.required || [];
51
+ for (const key of required) {
52
+ if (!(key in input) || input[key] === undefined) {
53
+ errors.push(`"${key}": required`);
54
+ }
55
+ }
56
+ for (const [key, value] of Object.entries(input)) {
57
+ const schema = tool.paramSchemas.get(key);
58
+ if (schema) {
59
+ const result = schema.safeParse(value);
60
+ if (result.success) {
61
+ validated[key] = result.data;
62
+ }
63
+ else {
64
+ const issues = result.error.issues.map(i => i.path.length ? `${i.path.join('.')}: ${i.message}` : i.message).join('; ');
65
+ errors.push(`"${key}": ${issues}`);
66
+ }
67
+ }
68
+ }
69
+ if (errors.length) {
70
+ throw new Error(`${tool.name} validation failed: ${errors.join(', ')}`);
71
+ }
72
+ return validated;
73
+ }
74
+ /**
75
+ * Generate the canonical RPC method name for a step.
76
+ * Used by both server (registry keys) and client (typed imports).
77
+ *
78
+ * Accepts either a stepper class/instance or a stepper name string.
79
+ */
80
+ export function stepMethodName(stepperOrName, stepName) {
81
+ const name = typeof stepperOrName === 'string'
82
+ ? stepperOrName
83
+ : ('steps' in stepperOrName ? constructorName(stepperOrName) : stepperOrName.name);
84
+ return `${name}-${stepName}`;
85
+ }
86
+ /**
87
+ * Create a handler that calls the step action directly with validated input.
88
+ * RPC transports validate input via validateToolInput() then call this handler.
89
+ * The action receives typed values directly — no string round-tripping through
90
+ * mapInputToStepValues/resolveVariable. A minimal featureStep is provided for provenance.
91
+ */
92
+ export function createStepHandler(stepperName, stepName, stepDef) {
93
+ return async (input) => {
94
+ const featureStep = {
95
+ in: stepDef.gwta || '',
96
+ action: {
97
+ stepperName,
98
+ actionName: stepName,
99
+ step: stepDef,
100
+ stepValuesMap: mapInputToStepValues(input, stepDef.gwta || ''),
101
+ },
102
+ seqPath: [0],
103
+ source: { path: 'step-dispatch' },
104
+ };
105
+ try {
106
+ const actionResult = await stepDef.action(input, featureStep);
107
+ if (actionResult.ok) {
108
+ const products = 'products' in actionResult ? actionResult.products : {};
109
+ return { ok: true, products: products || {} };
110
+ }
111
+ return { ok: false, error: actionResult.message || 'Step failed' };
112
+ }
113
+ catch (caught) {
114
+ const err = caught instanceof Error ? caught : new Error(String(caught));
115
+ return { ok: false, error: `${stepperName}-${stepName}: ${err.message}` };
116
+ }
117
+ };
118
+ }
119
+ /**
120
+ * Build a JSON Schema and Zod param schemas for a step's input parameters.
121
+ * Uses z.toJSONSchema() to convert Zod domain schemas into full JSON Schema
122
+ * (enums, object structures, descriptions, etc.) for MCP and SSE consumers.
123
+ * Returns both the JSON Schema (for documentation/discovery) and the Zod schemas (for runtime validation).
124
+ */
125
+ function buildInputSchema(stepDef, world) {
126
+ const properties = {};
127
+ const required = [];
128
+ const paramSchemas = new Map();
129
+ if (stepDef.gwta) {
130
+ const { stepValuesMap } = namedInterpolation(stepDef.gwta);
131
+ if (stepValuesMap) {
132
+ for (const v of Object.values(stepValuesMap)) {
133
+ const rawDomain = v.domain || DOMAIN_STRING;
134
+ const parts = rawDomain.split(' | ').sort();
135
+ const domainKey = normalizeDomainKey(parts.join(' | '));
136
+ const domain = world.domains?.[domainKey];
137
+ if (domain?.schema) {
138
+ paramSchemas.set(v.term, domain.schema);
139
+ try {
140
+ const jsonSchema = z.toJSONSchema(domain.schema);
141
+ const prop = { ...jsonSchema };
142
+ if (domain.description && !prop.description) {
143
+ prop.description = domain.description;
144
+ }
145
+ properties[v.term] = prop;
146
+ }
147
+ catch {
148
+ properties[v.term] = { type: 'string', description: domain.description };
149
+ }
150
+ }
151
+ else {
152
+ properties[v.term] = { type: 'string' };
153
+ }
154
+ required.push(v.term);
155
+ }
156
+ }
157
+ }
158
+ return { inputSchema: { type: 'object', properties, required }, paramSchemas };
159
+ }
160
+ // --- RPC Message Schemas ---
161
+ /** Incoming JSON-RPC 2.0 request from client (POST /rpc/:method). */
162
+ export const RpcRequestSchema = z.object({
163
+ jsonrpc: z.literal('2.0'),
164
+ id: z.string(),
165
+ method: z.string(),
166
+ params: z.record(z.string(), z.unknown()).optional().default({}),
167
+ stream: z.boolean().optional(),
168
+ });
169
+ /** Outgoing JSON-RPC 2.0 response to client. */
170
+ export const RpcResponseSchema = z.object({
171
+ jsonrpc: z.literal('2.0'),
172
+ id: z.string(),
173
+ result: z.unknown().optional(),
174
+ error: z.string().optional(),
175
+ });
176
+ /** Outgoing JSON-RPC 2.0 stream chunk to client. */
177
+ export const RpcStreamSchema = z.object({
178
+ jsonrpc: z.literal('2.0'),
179
+ id: z.string(),
180
+ stream: z.literal(true),
181
+ data: z.unknown(),
182
+ });
183
+ /**
184
+ * Parse and validate an incoming RPC request.
185
+ * Returns the parsed request or null if the message is not an RPC request.
186
+ */
187
+ export function parseRpcRequest(raw) {
188
+ const result = RpcRequestSchema.safeParse(raw);
189
+ return result.success ? result.data : null;
190
+ }
191
+ /**
192
+ * Build a step registry and enrich metadata with input/output schemas.
193
+ * Single entry point for both SSE and MCP transports.
194
+ */
195
+ export function discoverSteps(steppers, world) {
196
+ const registry = buildStepRegistry(steppers, world);
197
+ const metadata = StepperRegistry.getMetadata(steppers);
198
+ for (const meta of metadata) {
199
+ const tool = registry.get(meta.method);
200
+ if (tool) {
201
+ meta.inputSchema = tool.inputSchema;
202
+ meta.outputSchema = tool.outputSchema;
203
+ }
204
+ }
205
+ return { registry, metadata };
206
+ }
207
+ //# sourceMappingURL=step-dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-dispatch.js","sourceRoot":"","sources":["../../src/lib/step-dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { z } from 'zod';
2
+ import type { TActionResult, TStepArgs } from '../schema/protocol.js';
3
+ import type { TFeatureStep } from './defs.js';
4
+ /**
5
+ * Wrap a step action with a products schema.
6
+ * The fn returns raw products data; withProducts wraps it in actionOK.
7
+ * The schema is attached to the returned action for buildStepRegistry to read.
8
+ */
9
+ export declare function withProducts<T extends z.ZodType<Record<string, unknown>>>(schema: T, fn: (args: TStepArgs, featureStep?: TFeatureStep) => Promise<z.infer<T>> | z.infer<T>): (args: TStepArgs, featureStep?: TFeatureStep) => Promise<TActionResult>;
10
+ //# sourceMappingURL=step-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/step-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxE,MAAM,EAAE,CAAC,EACT,EAAE,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAEzD,SAAS,gBAAgB,YAAY,KAAG,OAAO,CAAC,aAAa,CAAC,CAO1F"}
@@ -0,0 +1,16 @@
1
+ import { actionOK } from './util/index.js';
2
+ /**
3
+ * Wrap a step action with a products schema.
4
+ * The fn returns raw products data; withProducts wraps it in actionOK.
5
+ * The schema is attached to the returned action for buildStepRegistry to read.
6
+ */
7
+ export function withProducts(schema, fn) {
8
+ const action = async (args, featureStep) => {
9
+ const products = await fn(args, featureStep);
10
+ return actionOK({ products });
11
+ };
12
+ // biome-ignore lint/suspicious/noExplicitAny: attaching schema metadata for buildStepRegistry
13
+ action.__productsSchema = schema;
14
+ return action;
15
+ }
16
+ //# sourceMappingURL=step-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-helpers.js","sourceRoot":"","sources":["../../src/lib/step-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC3B,MAAS,EACT,EAAqF;IAErF,MAAM,MAAM,GAAG,KAAK,EAAE,IAAe,EAAE,WAA0B,EAA0B,EAAE;QAC5F,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7C,OAAO,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF,8FAA8F;IAC7F,MAAc,CAAC,gBAAgB,GAAG,MAAM,CAAC;IAC1C,OAAO,MAAM,CAAC;AACf,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { AStepper } from './astepper.js';
2
+ import type { TStepAction, TFeatures } from './defs.js';
3
+ import { type StepDescriptor } from './stepper-registry.js';
4
+ /**
5
+ * Result of validating a step text against registered steppers.
6
+ */
7
+ export type StepValidationResult = {
8
+ valid: true;
9
+ action: TStepAction;
10
+ } | {
11
+ valid: false;
12
+ error: string;
13
+ };
14
+ /**
15
+ * Validate a step text against the registered steppers.
16
+ * Returns the matched action if valid, or an error message if not.
17
+ *
18
+ * Shared by LSP (diagnostics), SSE (step mode validation), and any future consumer.
19
+ */
20
+ export declare function validateStep(text: string, steppers: AStepper[], backgrounds?: TFeatures): StepValidationResult;
21
+ /**
22
+ * Get metadata for all exposed steps across all steppers.
23
+ * Used for autocomplete in LSP, SSE step mode, and MCP tool discovery.
24
+ */
25
+ export declare function getStepDescriptors(steppers: AStepper[]): StepDescriptor[];
26
+ //# sourceMappingURL=step-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-validation.d.ts","sourceRoot":"","sources":["../../src/lib/step-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAClC,KAAK,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,WAAW,CAAC;CACpB,GAAG;IACH,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC,EAAE,SAAS,GAAG,oBAAoB,CAQ9G;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAEzE"}
@@ -0,0 +1,26 @@
1
+ import { Resolver } from '../phases/Resolver.js';
2
+ import { StepperRegistry } from './stepper-registry.js';
3
+ /**
4
+ * Validate a step text against the registered steppers.
5
+ * Returns the matched action if valid, or an error message if not.
6
+ *
7
+ * Shared by LSP (diagnostics), SSE (step mode validation), and any future consumer.
8
+ */
9
+ export function validateStep(text, steppers, backgrounds) {
10
+ const resolver = new Resolver(steppers, backgrounds || []);
11
+ try {
12
+ const action = resolver.findSingleStepAction(text);
13
+ return { valid: true, action };
14
+ }
15
+ catch (e) {
16
+ return { valid: false, error: e instanceof Error ? e.message : String(e) };
17
+ }
18
+ }
19
+ /**
20
+ * Get metadata for all exposed steps across all steppers.
21
+ * Used for autocomplete in LSP, SSE step mode, and MCP tool discovery.
22
+ */
23
+ export function getStepDescriptors(steppers) {
24
+ return StepperRegistry.getMetadata(steppers);
25
+ }
26
+ //# sourceMappingURL=step-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-validation.js","sourceRoot":"","sources":["../../src/lib/step-validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAuB,MAAM,uBAAuB,CAAC;AAa7E;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,QAAoB,EAAE,WAAuB;IACvF,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAChC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAoB;IACtD,OAAO,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC"}
@@ -3,11 +3,14 @@ import { AStepper } from './astepper.js';
3
3
  * Metadata for a single step, extracted from a stepper definition.
4
4
  * Used by both LSP (for autocomplete/hover) and MCP (for tool registration).
5
5
  */
6
- export interface StepMetadata {
6
+ export interface StepDescriptor {
7
7
  stepperName: string;
8
8
  stepName: string;
9
+ method: string;
9
10
  pattern: string;
10
11
  params: Record<string, 'string' | 'number'>;
12
+ inputSchema?: Record<string, unknown>;
13
+ outputSchema?: Record<string, unknown>;
11
14
  }
12
15
  /**
13
16
  * Central registry for extracting step metadata from steppers.
@@ -18,7 +21,7 @@ export declare class StepperRegistry {
18
21
  * Extract metadata from all steps in the provided steppers.
19
22
  * Filters out steps marked with `expose: false`.
20
23
  */
21
- static getMetadata(steppers: AStepper[]): StepMetadata[];
24
+ static getMetadata(steppers: AStepper[]): StepDescriptor[];
22
25
  /**
23
26
  * Convert a gwta pattern to an LSP snippet format.
24
27
  * Transforms `{varName}` to `${1:varName}` for tab-stop support.
@@ -1 +1 @@
1
- {"version":3,"file":"stepper-registry.d.ts","sourceRoot":"","sources":["../../src/lib/stepper-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;CAC7C;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE;IAuBxD;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAIjD"}
1
+ {"version":3,"file":"stepper-registry.d.ts","sourceRoot":"","sources":["../../src/lib/stepper-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE;IAwB1D;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAIjD"}
@@ -26,7 +26,8 @@ export class StepperRegistry {
26
26
  }
27
27
  }
28
28
  }
29
- return { stepperName, stepName, pattern, params };
29
+ const method = `${stepperName}-${stepName}`;
30
+ return { stepperName, stepName, method, pattern, params };
30
31
  });
31
32
  });
32
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stepper-registry.js","sourceRoot":"","sources":["../../src/lib/stepper-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAapD;;;GAGG;AACH,MAAM,OAAO,eAAe;IAC1B;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,QAAoB;QACrC,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAChC,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;iBACjC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC;iBACzC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;gBAC3B,MAAM,MAAM,GAAwC,EAAE,CAAC;gBACvD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,QAAQ,CAAC;gBAEvF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACjB,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC3D,IAAI,aAAa,EAAE,CAAC;wBAClB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;4BAC7C,kEAAkE;4BAClE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;wBAC/D,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YACpD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAe;QACrC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC;IACtF,CAAC;CACF"}
1
+ {"version":3,"file":"stepper-registry.js","sourceRoot":"","sources":["../../src/lib/stepper-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAgBpD;;;GAGG;AACH,MAAM,OAAO,eAAe;IAC1B;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,QAAoB;QACrC,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAChC,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;iBACjC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC;iBACzC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;gBAC3B,MAAM,MAAM,GAAwC,EAAE,CAAC;gBACvD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,QAAQ,CAAC;gBAEvF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACjB,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC3D,IAAI,aAAa,EAAE,CAAC;wBAClB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;4BAC7C,kEAAkE;4BAClE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;wBAC/D,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM,MAAM,GAAG,GAAG,WAAW,IAAI,QAAQ,EAAE,CAAC;gBAC5C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC5D,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAe;QACrC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC;IACtF,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
- import { AStepper, IHasCycles } from '../astepper.js';
2
- import { TWorld, IStepperCycles } from '../defs.js';
1
+ import { AStepper } from '../astepper.js';
2
+ import { TWorld } from '../defs.js';
3
3
  import { THaibunEvent } from '../../schema/protocol.js';
4
4
  /**
5
5
  * EventCollectorStepper - Collects events for test inspection.
@@ -12,10 +12,10 @@ import { THaibunEvent } from '../../schema/protocol.js';
12
12
  * const stepEvents = collector.getStepEvents();
13
13
  * ```
14
14
  */
15
- export declare class EventCollectorStepper extends AStepper implements IHasCycles {
15
+ export declare class EventCollectorStepper extends AStepper {
16
16
  description: string;
17
17
  private events;
18
- cycles: IStepperCycles;
18
+ private subscriberCallback?;
19
19
  setWorld(world: TWorld, steppers: AStepper[]): Promise<void>;
20
20
  steps: {};
21
21
  /** Get all collected events */
@@ -26,6 +26,8 @@ export declare class EventCollectorStepper extends AStepper implements IHasCycle
26
26
  findEvents(predicate: (e: THaibunEvent) => boolean): THaibunEvent[];
27
27
  /** Clear collected events */
28
28
  clear(): void;
29
+ /** Unsubscribe from event logger */
30
+ close(): void;
29
31
  }
30
32
  export default EventCollectorStepper;
31
33
  //# sourceMappingURL=EventCollectorStepper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventCollectorStepper.d.ts","sourceRoot":"","sources":["../../../src/lib/test/EventCollectorStepper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,SAAQ,QAAS,YAAW,UAAU;IACvE,WAAW,SAAyC;IAEpD,OAAO,CAAC,MAAM,CAAsB;IAEpC,MAAM,EAAE,cAAc,CAYpB;IAEF,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5D,KAAK,KAAM;IAEX,+BAA+B;IAC/B,SAAS,IAAI,YAAY,EAAE;IAI3B,qCAAqC;IACrC,aAAa,IAAI,YAAY,EAAE;IAI/B,sCAAsC;IACtC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,OAAO,GAAG,YAAY,EAAE;IAInE,6BAA6B;IAC7B,KAAK,IAAI,IAAI;CAGd;AAED,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"EventCollectorStepper.d.ts","sourceRoot":"","sources":["../../../src/lib/test/EventCollectorStepper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IACjD,WAAW,SAAyC;IAEpD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,kBAAkB,CAAC,CAAgC;IAErD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlE,KAAK,KAAM;IAEX,+BAA+B;IAC/B,SAAS,IAAI,YAAY,EAAE;IAI3B,qCAAqC;IACrC,aAAa,IAAI,YAAY,EAAE;IAI/B,sCAAsC;IACtC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,OAAO,GAAG,YAAY,EAAE;IAInE,6BAA6B;IAC7B,KAAK,IAAI,IAAI;IAIb,oCAAoC;IACpC,KAAK,IAAI,IAAI;CAMd;AAED,eAAe,qBAAqB,CAAC"}
@@ -13,28 +13,13 @@ import { AStepper } from '../astepper.js';
13
13
  export class EventCollectorStepper extends AStepper {
14
14
  description = 'Collects events for test inspection';
15
15
  events = [];
16
- cycles = {
17
- startScenario: () => {
18
- // Hook into world event logger to collect events
19
- if (this.world?.eventLogger) {
20
- const originalCallback = this.world.eventLogger.stepperCallback;
21
- this.world.eventLogger.setStepperCallback?.((event) => {
22
- this.events.push(event);
23
- originalCallback?.(event);
24
- });
25
- }
26
- return Promise.resolve();
27
- }
28
- };
29
- setWorld(world, steppers) {
30
- this.world = world;
31
- // Hook into world event logger immediately
32
- if (world.eventLogger?.setStepperCallback) {
33
- world.eventLogger.setStepperCallback((event) => {
34
- this.events.push(event);
35
- });
36
- }
37
- return Promise.resolve();
16
+ subscriberCallback;
17
+ async setWorld(world, steppers) {
18
+ await super.setWorld(world, steppers);
19
+ this.subscriberCallback = (event) => {
20
+ this.events.push(event);
21
+ };
22
+ world.eventLogger.subscribe(this.subscriberCallback);
38
23
  }
39
24
  steps = {};
40
25
  /** Get all collected events */
@@ -53,6 +38,13 @@ export class EventCollectorStepper extends AStepper {
53
38
  clear() {
54
39
  this.events = [];
55
40
  }
41
+ /** Unsubscribe from event logger */
42
+ close() {
43
+ if (this.subscriberCallback && this.world?.eventLogger) {
44
+ this.world.eventLogger.unsubscribe(this.subscriberCallback);
45
+ this.subscriberCallback = undefined;
46
+ }
47
+ }
56
48
  }
57
49
  export default EventCollectorStepper;
58
50
  //# sourceMappingURL=EventCollectorStepper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventCollectorStepper.js","sourceRoot":"","sources":["../../../src/lib/test/EventCollectorStepper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAc,MAAM,gBAAgB,CAAC;AAItD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,WAAW,GAAG,qCAAqC,CAAC;IAE5C,MAAM,GAAmB,EAAE,CAAC;IAEpC,MAAM,GAAmB;QACvB,aAAa,EAAE,GAAG,EAAE;YAClB,iDAAiD;YACjD,IAAI,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;gBAC5B,MAAM,gBAAgB,GAAI,IAAI,CAAC,KAAK,CAAC,WAA+D,CAAC,eAAe,CAAC;gBACrH,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC,CAAC,KAAmB,EAAE,EAAE;oBAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxB,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;KACF,CAAC;IAEF,QAAQ,CAAC,KAAa,EAAE,QAAoB;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,2CAA2C;QAC3C,IAAI,KAAK,CAAC,WAAW,EAAE,kBAAkB,EAAE,CAAC;YAC1C,KAAK,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,KAAmB,EAAE,EAAE;gBAC3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,KAAK,GAAG,EAAE,CAAC;IAEX,+BAA+B;IAC/B,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,qCAAqC;IACrC,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,sCAAsC;IACtC,UAAU,CAAC,SAAuC;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,6BAA6B;IAC7B,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;CACF;AAED,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"EventCollectorStepper.js","sourceRoot":"","sources":["../../../src/lib/test/EventCollectorStepper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C;;;;;;;;;;GAUG;AACH,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,WAAW,GAAG,qCAAqC,CAAC;IAE5C,MAAM,GAAmB,EAAE,CAAC;IAC5B,kBAAkB,CAAiC;IAE3D,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,QAAoB;QAChD,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,kBAAkB,GAAG,CAAC,KAAmB,EAAE,EAAE;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC;QACF,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,GAAG,EAAE,CAAC;IAEX,+BAA+B;IAC/B,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,qCAAqC;IACrC,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,sCAAsC;IACtC,UAAU,CAAC,SAAuC;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,6BAA6B;IAC7B,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,oCAAoC;IACpC,KAAK;QACH,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC5D,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACtC,CAAC;IACH,CAAC;CACF;AAED,eAAe,qBAAqB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { AStepper } from '../astepper.js';
2
+ import { z } from 'zod';
2
3
  export declare const TestStepsWithOptions: {
3
4
  new (): {
4
5
  options: {
@@ -12,7 +13,10 @@ export declare const TestStepsWithOptions: {
12
13
  steps: {
13
14
  test: {
14
15
  exact: string;
15
- action: () => Promise<import("../../schema/protocol.js").TOKActionResult>;
16
+ outputSchema: z.ZodObject<{
17
+ summary: z.ZodString;
18
+ }, z.core.$strip>;
19
+ action: () => Promise<import("../../schema/protocol.js").TActionOKWithProducts>;
16
20
  };
17
21
  };
18
22
  description?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"TestStepsWithOptions.d.ts","sourceRoot":"","sources":["../../../src/lib/test/TestStepsWithOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;CAgBhC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"TestStepsWithOptions.d.ts","sourceRoot":"","sources":["../../../src/lib/test/TestStepsWithOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;CAiBhC,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { AStepper } from '../astepper.js';
2
- import { actionOK, getStepperOption } from '../util/index.js';
2
+ import { actionOKWithProducts, getStepperOption } from '../util/index.js';
3
+ import { z } from 'zod';
3
4
  export const TestStepsWithOptions = class TestStepsWithOptions extends AStepper {
4
5
  options = {
5
6
  EXISTS: {
@@ -10,9 +11,10 @@ export const TestStepsWithOptions = class TestStepsWithOptions extends AStepper
10
11
  steps = {
11
12
  test: {
12
13
  exact: 'have a stepper option',
14
+ outputSchema: z.object({ summary: z.string() }),
13
15
  action: () => {
14
16
  const _res = getStepperOption(this, 'EXISTS', this.getWorld().moduleOptions);
15
- return Promise.resolve(actionOK({ topics: { summary: 'options' } }));
17
+ return Promise.resolve(actionOKWithProducts({ summary: 'options' }));
16
18
  },
17
19
  },
18
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TestStepsWithOptions.js","sourceRoot":"","sources":["../../../src/lib/test/TestStepsWithOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,oBAAqB,SAAQ,QAAQ;IAC9E,OAAO,GAAG;QACT,MAAM,EAAE;YACP,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;SAC7B;KACD,CAAC;IACF,KAAK,GAAG;QACP,IAAI,EAAE;YACL,KAAK,EAAE,uBAAuB;YAC9B,MAAM,EAAE,GAAG,EAAE;gBACZ,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;gBAC7E,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YACtE,CAAC;SACD;KACD,CAAC;CACF,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"TestStepsWithOptions.js","sourceRoot":"","sources":["../../../src/lib/test/TestStepsWithOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,oBAAqB,SAAQ,QAAQ;IAC9E,OAAO,GAAG;QACT,MAAM,EAAE;YACP,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;SAC7B;KACD,CAAC;IACF,KAAK,GAAG;QACP,IAAI,EAAE;YACL,KAAK,EAAE,uBAAuB;YAC9B,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,MAAM,EAAE,GAAG,EAAE;gBACZ,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;gBAC7E,OAAO,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YACtE,CAAC;SACD;KACD,CAAC;CACF,CAAC;AAEF,eAAe,oBAAoB,CAAC"}