@openapi-flow/core 0.3.9 → 0.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/arguments/clarification/api-input-requirement-dialect.d.ts +4 -0
- package/dist/arguments/clarification/api-input-requirement-dialect.js +8 -0
- package/dist/arguments/clarification/extraction/capture-api-input-answer-context.js +2 -3
- package/dist/arguments/clarification/extraction/create-api-input-answer-extraction-record.js +8 -2
- package/dist/arguments/clarification/extraction/resolve-api-input-answer-interpretations.d.ts +3 -0
- package/dist/arguments/clarification/extraction/resolve-api-input-answer-interpretations.js +51 -0
- package/dist/arguments/clarification/extraction/resolve-api-input-answer-sources.js +2 -3
- package/dist/arguments/clarification/extraction/validate-api-input-answer-analysis.d.ts +3 -0
- package/dist/arguments/clarification/extraction/validate-api-input-answer-analysis.js +55 -0
- package/dist/arguments/clarification/extraction/validate-api-input-answer-extraction-record.js +3 -0
- package/dist/arguments/enum/describe-api-input-enum-answer-choices.d.ts +4 -0
- package/dist/arguments/enum/describe-api-input-enum-answer-choices.js +23 -0
- package/dist/arguments/enum/list-api-input-enum-candidates.d.ts +3 -0
- package/dist/arguments/enum/list-api-input-enum-candidates.js +73 -0
- package/dist/draft/edits/api/describe-workflow-draft-api-enum-choices.d.ts +3 -0
- package/dist/draft/edits/api/describe-workflow-draft-api-enum-choices.js +70 -0
- package/dist/draft/edits/api/resolve-workflow-draft-api-call-arguments.js +9 -5
- package/dist/draft/edits/api/resolve-workflow-draft-api-enum-selections.d.ts +4 -0
- package/dist/draft/edits/api/resolve-workflow-draft-api-enum-selections.js +38 -0
- package/dist/draft/edits/enum/verify-workflow-draft-api-enum-selection.d.ts +3 -0
- package/dist/draft/edits/enum/verify-workflow-draft-api-enum-selection.js +23 -0
- package/dist/draft/edits/inputs/describe-workflow-draft-api-input-edit-answer-requirements.d.ts +4 -0
- package/dist/draft/edits/inputs/describe-workflow-draft-api-input-edit-answer-requirements.js +30 -0
- package/dist/draft/edits/inputs/describe-workflow-draft-api-input-edit-enum-choices.d.ts +4 -0
- package/dist/draft/edits/inputs/describe-workflow-draft-api-input-edit-enum-choices.js +42 -0
- package/dist/draft/edits/inputs/resolve-workflow-draft-api-input-edit-reply.d.ts +3 -0
- package/dist/draft/edits/inputs/resolve-workflow-draft-api-input-edit-reply.js +24 -0
- package/dist/draft/edits/inputs/resolve-workflow-draft-api-input-edits.js +20 -0
- package/dist/openapi/common/create-oas-value-validation-cache.d.ts +3 -0
- package/dist/openapi/common/create-oas-value-validation-cache.js +46 -0
- package/dist/openapi/common/create-oas-value-validator.js +12 -3
- package/dist/public-api.d.ts +11 -0
- package/dist/public-api.js +8 -0
- package/dist/schemas/api-input-answer-extraction-schema.d.ts +15 -0
- package/dist/schemas/api-input-answer-extraction-schema.js +4 -0
- package/dist/schemas/api-input-enum-answer-selection-schema.d.ts +25 -0
- package/dist/schemas/api-input-enum-answer-selection-schema.js +11 -0
- package/dist/schemas/create-workflow-draft-api-input-edit-values-schema.js +11 -2
- package/dist/schemas/workflow-draft-api-enum-choice-schema.d.ts +5 -0
- package/dist/schemas/workflow-draft-api-enum-choice-schema.js +25 -0
- package/dist/schemas/workflow-draft-api-enum-selection-schema.d.ts +4 -0
- package/dist/schemas/workflow-draft-api-enum-selection-schema.js +14 -0
- package/dist/schemas/workflow-draft-api-input-edit-proposal-schema.js +3 -1
- package/dist/types/api-clarification.d.ts +2 -0
- package/dist/types/api-input-answer-extraction.d.ts +9 -2
- package/dist/types/api-input-enum-answers.d.ts +25 -0
- package/dist/types/api-input-enum-answers.js +1 -0
- package/dist/types/api-input-enum.d.ts +26 -0
- package/dist/types/api-input-enum.js +1 -0
- package/dist/types/oas-value-validation.d.ts +13 -0
- package/dist/types/workflow-draft-api-call-planning.d.ts +4 -0
- package/dist/types/workflow-draft-api-enum-selection.d.ts +39 -0
- package/dist/types/workflow-draft-api-enum-selection.js +1 -0
- package/dist/types/workflow-draft-api-input-edit.d.ts +15 -2
- package/package.json +1 -1
|
@@ -6,6 +6,8 @@ import { applyWorkflowDraftApiInputEdits } from '../values/apply-workflow-draft-
|
|
|
6
6
|
import { validateApiArguments } from '../../../arguments/validate-api-arguments.js';
|
|
7
7
|
import { orderWorkflowDraftValueEdits } from '../values/order-workflow-draft-value-edits.js';
|
|
8
8
|
import { verifyApiInputLiteralSource } from '../../../arguments/sources/verify-api-input-literal-source.js';
|
|
9
|
+
import { describeWorkflowDraftApiInputEditEnumChoices } from './describe-workflow-draft-api-input-edit-enum-choices.js';
|
|
10
|
+
import { verifyWorkflowDraftApiEnumSelection } from '../enum/verify-workflow-draft-api-enum-selection.js';
|
|
9
11
|
/** Exact-source validation is deterministic; it is not semantic entailment proof. */
|
|
10
12
|
export function resolveWorkflowDraftApiInputEdits(input) {
|
|
11
13
|
const output = createWorkflowDraftApiInputEditValuesSchema(input).parse(input.output);
|
|
@@ -19,12 +21,28 @@ export function resolveWorkflowDraftApiInputEdits(input) {
|
|
|
19
21
|
const sets = [];
|
|
20
22
|
const removals = [];
|
|
21
23
|
const pendingTargets = [];
|
|
24
|
+
const enumSelections = [];
|
|
25
|
+
const { candidates } = describeWorkflowDraftApiInputEditEnumChoices(input);
|
|
22
26
|
for (const target of input.contract.targets) {
|
|
23
27
|
if (target.kind === 'remove') {
|
|
24
28
|
removals.push({ kind: 'remove', pointer: target.pointer });
|
|
25
29
|
continue;
|
|
26
30
|
}
|
|
27
31
|
const answer = output.values[target.id];
|
|
32
|
+
if (answer.status === 'oas-enum') {
|
|
33
|
+
const selection = verifyWorkflowDraftApiEnumSelection({
|
|
34
|
+
selection: answer.selection,
|
|
35
|
+
candidates: candidates.filter((candidate) => candidate.targetPointer === target.pointer),
|
|
36
|
+
messages: described.messages,
|
|
37
|
+
});
|
|
38
|
+
sets.push({
|
|
39
|
+
kind: 'set',
|
|
40
|
+
pointer: target.pointer,
|
|
41
|
+
value: structuredClone(selection.value),
|
|
42
|
+
});
|
|
43
|
+
enumSelections.push(selection);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
28
46
|
if (answer.explanation)
|
|
29
47
|
validateWorkflowPlanningEvidence({
|
|
30
48
|
context: { messages: described.messages },
|
|
@@ -60,6 +78,7 @@ export function resolveWorkflowDraftApiInputEdits(input) {
|
|
|
60
78
|
values: output,
|
|
61
79
|
pendingTargets,
|
|
62
80
|
...human,
|
|
81
|
+
...(enumSelections.length ? { enumSelections } : {}),
|
|
63
82
|
};
|
|
64
83
|
// Targets address the original value. Set before deletion; remove higher array
|
|
65
84
|
// indices first so one deletion does not retarget another original index.
|
|
@@ -80,6 +99,7 @@ export function resolveWorkflowDraftApiInputEdits(input) {
|
|
|
80
99
|
contractId: input.contract.id,
|
|
81
100
|
values: output,
|
|
82
101
|
...human,
|
|
102
|
+
...(enumSelections.length ? { enumSelections } : {}),
|
|
83
103
|
resolution: {
|
|
84
104
|
stepId: input.stepId,
|
|
85
105
|
kind: 'api-inputs',
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { OasValueValidationCache, OasValueValidationCacheOptions } from '../../types/oas-value-validation.js';
|
|
2
|
+
/** Cache compilation only; every supplied value still runs the original validator. */
|
|
3
|
+
export declare function createOasValueValidationCache(options: OasValueValidationCacheOptions): OasValueValidationCache;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
3
|
+
/** Cache compilation only; every supplied value still runs the original validator. */
|
|
4
|
+
export function createOasValueValidationCache(options) {
|
|
5
|
+
for (const name of ['maximumEntries', 'maximumRetainedSchemaBytes'])
|
|
6
|
+
if (!Number.isSafeInteger(options[name]) || options[name] <= 0)
|
|
7
|
+
throw new Error(`OAS validator cache.${name} must be a positive safe integer`);
|
|
8
|
+
const { maximumEntries, maximumRetainedSchemaBytes } = options;
|
|
9
|
+
const entries = new Map();
|
|
10
|
+
let retainedSchemaBytes = 0;
|
|
11
|
+
return {
|
|
12
|
+
getOrCreate: (schema, dialect, compile) => {
|
|
13
|
+
const key = JSON.stringify([dialect, schema]);
|
|
14
|
+
const existing = entries.get(key);
|
|
15
|
+
// Serialization alone is not identity: undefined and non-JSON values can collide.
|
|
16
|
+
if (existing !== undefined &&
|
|
17
|
+
isDeepStrictEqual(existing.schema, schema)) {
|
|
18
|
+
entries.delete(key);
|
|
19
|
+
entries.set(key, existing);
|
|
20
|
+
return existing.validate;
|
|
21
|
+
}
|
|
22
|
+
// Neither returned schemas nor caller-owned objects can mutate the compiled resource.
|
|
23
|
+
const snapshot = structuredClone(schema);
|
|
24
|
+
const validate = compile(snapshot);
|
|
25
|
+
const bytes = Buffer.byteLength(key);
|
|
26
|
+
// Large schemas remain supported; only their optional retention is bounded.
|
|
27
|
+
if (bytes > maximumRetainedSchemaBytes)
|
|
28
|
+
return validate;
|
|
29
|
+
if (existing !== undefined) {
|
|
30
|
+
entries.delete(key);
|
|
31
|
+
retainedSchemaBytes -= existing.bytes;
|
|
32
|
+
}
|
|
33
|
+
while (entries.size >= maximumEntries ||
|
|
34
|
+
retainedSchemaBytes + bytes > maximumRetainedSchemaBytes) {
|
|
35
|
+
const oldest = entries.entries().next();
|
|
36
|
+
if (oldest.done)
|
|
37
|
+
throw new Error('OAS validator cache retained-size invariant is invalid');
|
|
38
|
+
entries.delete(oldest.value[0]);
|
|
39
|
+
retainedSchemaBytes -= oldest.value[1].bytes;
|
|
40
|
+
}
|
|
41
|
+
entries.set(key, { schema: snapshot, validate, bytes });
|
|
42
|
+
retainedSchemaBytes += bytes;
|
|
43
|
+
return validate;
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
@@ -2,6 +2,12 @@ import { createHash } from 'node:crypto';
|
|
|
2
2
|
import { createValidator } from '@scalar/json-schema-validator';
|
|
3
3
|
import { normalizeOasValueSchema } from './normalize-oas-value-schema.js';
|
|
4
4
|
import { isObject } from '../../utils/is-object.js';
|
|
5
|
+
import { createOasValueValidationCache } from './create-oas-value-validation-cache.js';
|
|
6
|
+
// Internal retention budgets, not limits on accepted OAS contracts or request values.
|
|
7
|
+
const compiledValidators = createOasValueValidationCache({
|
|
8
|
+
maximumEntries: 64,
|
|
9
|
+
maximumRetainedSchemaBytes: 1024 * 1024,
|
|
10
|
+
});
|
|
5
11
|
export function createOasValueValidator(input, dialect, source) {
|
|
6
12
|
if (typeof input !== 'boolean' && !isObject(input))
|
|
7
13
|
throw new Error(`${source} must be an OAS schema object or boolean`);
|
|
@@ -24,7 +30,11 @@ export function createOasValueValidator(input, dialect, source) {
|
|
|
24
30
|
};
|
|
25
31
|
let validate;
|
|
26
32
|
try {
|
|
27
|
-
validate =
|
|
33
|
+
validate = compiledValidators.getOrCreate(schema, dialect, (snapshot) => {
|
|
34
|
+
const compiled = createValidator(snapshot);
|
|
35
|
+
// Scalar parses string documents as YAML; encode actual string values first.
|
|
36
|
+
return (value) => compiled(typeof value === 'string' ? JSON.stringify(value) : value);
|
|
37
|
+
});
|
|
28
38
|
}
|
|
29
39
|
catch (error) {
|
|
30
40
|
throw new Error(`${source} cannot compile its OAS value schema`, {
|
|
@@ -33,7 +43,6 @@ export function createOasValueValidator(input, dialect, source) {
|
|
|
33
43
|
}
|
|
34
44
|
return {
|
|
35
45
|
schema,
|
|
36
|
-
|
|
37
|
-
validate: (value) => validate(typeof value === 'string' ? JSON.stringify(value) : value),
|
|
46
|
+
validate,
|
|
38
47
|
};
|
|
39
48
|
}
|
package/dist/public-api.d.ts
CHANGED
|
@@ -32,8 +32,14 @@ export { resolveApiInputSourceSelections } from './arguments/clarification/extra
|
|
|
32
32
|
export { createApiInputSourceSelectionSchema } from './schemas/api-input-source-selection-schema.js';
|
|
33
33
|
export { captureApiInputAnswerContext } from './arguments/clarification/extraction/capture-api-input-answer-context.js';
|
|
34
34
|
export { resolveApiInputAnswerSources } from './arguments/clarification/extraction/resolve-api-input-answer-sources.js';
|
|
35
|
+
export { resolveApiInputAnswerInterpretations } from './arguments/clarification/extraction/resolve-api-input-answer-interpretations.js';
|
|
36
|
+
export { describeApiInputEnumAnswerChoices } from './arguments/enum/describe-api-input-enum-answer-choices.js';
|
|
37
|
+
export type * from './types/api-input-enum-answers.js';
|
|
35
38
|
export { createApiInputAnswerExtractionRecord } from './arguments/clarification/extraction/create-api-input-answer-extraction-record.js';
|
|
36
39
|
export { validateApiInputAnswerExtractionRecord } from './arguments/clarification/extraction/validate-api-input-answer-extraction-record.js';
|
|
40
|
+
export { validateApiInputAnswerAnalysis } from './arguments/clarification/extraction/validate-api-input-answer-analysis.js';
|
|
41
|
+
export { describeWorkflowDraftApiInputEditAnswerRequirements } from './draft/edits/inputs/describe-workflow-draft-api-input-edit-answer-requirements.js';
|
|
42
|
+
export { resolveWorkflowDraftApiInputEditReply } from './draft/edits/inputs/resolve-workflow-draft-api-input-edit-reply.js';
|
|
37
43
|
export { applyConfirmedApiInputs } from './arguments/clarification/apply-confirmed-api-inputs.js';
|
|
38
44
|
export { inspectApiArgumentRequirements } from './arguments/clarification/inspect-api-argument-requirements.js';
|
|
39
45
|
export { validateApiInputAnswers } from './arguments/clarification/validate-api-input-answers.js';
|
|
@@ -166,6 +172,11 @@ export type * from './types/workflow-draft-native-dependencies.js';
|
|
|
166
172
|
export { createWorkflowDraftNativeDependenciesSchema } from './schemas/workflow-draft-native-dependencies-schema.js';
|
|
167
173
|
export { describeWorkflowDraftNativeDependencies, resolveWorkflowDraftNativeDependencies, validateWorkflowDraftNativeDependencies, validateWorkflowDraftNativeDependencyResolutions, } from './draft/edits/native/additions/resolve-workflow-draft-native-dependencies.js';
|
|
168
174
|
export type * from './types/workflow-draft-api-call-planning.js';
|
|
175
|
+
export type * from './types/workflow-draft-api-enum-selection.js';
|
|
176
|
+
export type { ApiInputEnumCandidate } from './types/api-input-enum.js';
|
|
177
|
+
export { describeWorkflowDraftApiEnumChoices } from './draft/edits/api/describe-workflow-draft-api-enum-choices.js';
|
|
178
|
+
export { createWorkflowDraftApiEnumSelectionSchema } from './schemas/workflow-draft-api-enum-selection-schema.js';
|
|
179
|
+
export { describeWorkflowDraftApiInputEditEnumChoices } from './draft/edits/inputs/describe-workflow-draft-api-input-edit-enum-choices.js';
|
|
169
180
|
export type * from './types/workflow-draft-api-binding-intent.js';
|
|
170
181
|
export { describeWorkflowDraftApiBindingIntent } from './draft/edits/api/describe-workflow-draft-api-binding-intent.js';
|
|
171
182
|
export { createWorkflowDraftApiBindingIntentSchema } from './schemas/workflow-draft-api-binding-intent-schema.js';
|
package/dist/public-api.js
CHANGED
|
@@ -22,8 +22,13 @@ export { resolveApiInputSourceSelections } from './arguments/clarification/extra
|
|
|
22
22
|
export { createApiInputSourceSelectionSchema } from './schemas/api-input-source-selection-schema.js';
|
|
23
23
|
export { captureApiInputAnswerContext } from './arguments/clarification/extraction/capture-api-input-answer-context.js';
|
|
24
24
|
export { resolveApiInputAnswerSources } from './arguments/clarification/extraction/resolve-api-input-answer-sources.js';
|
|
25
|
+
export { resolveApiInputAnswerInterpretations } from './arguments/clarification/extraction/resolve-api-input-answer-interpretations.js';
|
|
26
|
+
export { describeApiInputEnumAnswerChoices } from './arguments/enum/describe-api-input-enum-answer-choices.js';
|
|
25
27
|
export { createApiInputAnswerExtractionRecord } from './arguments/clarification/extraction/create-api-input-answer-extraction-record.js';
|
|
26
28
|
export { validateApiInputAnswerExtractionRecord } from './arguments/clarification/extraction/validate-api-input-answer-extraction-record.js';
|
|
29
|
+
export { validateApiInputAnswerAnalysis } from './arguments/clarification/extraction/validate-api-input-answer-analysis.js';
|
|
30
|
+
export { describeWorkflowDraftApiInputEditAnswerRequirements } from './draft/edits/inputs/describe-workflow-draft-api-input-edit-answer-requirements.js';
|
|
31
|
+
export { resolveWorkflowDraftApiInputEditReply } from './draft/edits/inputs/resolve-workflow-draft-api-input-edit-reply.js';
|
|
27
32
|
export { applyConfirmedApiInputs } from './arguments/clarification/apply-confirmed-api-inputs.js';
|
|
28
33
|
export { inspectApiArgumentRequirements } from './arguments/clarification/inspect-api-argument-requirements.js';
|
|
29
34
|
export { validateApiInputAnswers } from './arguments/clarification/validate-api-input-answers.js';
|
|
@@ -124,6 +129,9 @@ export { resolveWorkflowDraftNativeNodeParameterOwnership, validateWorkflowDraft
|
|
|
124
129
|
export { resolveWorkflowDraftNativeNodeAddition } from './draft/edits/native/additions/resolve-workflow-draft-native-node-addition.js';
|
|
125
130
|
export { createWorkflowDraftNativeDependenciesSchema } from './schemas/workflow-draft-native-dependencies-schema.js';
|
|
126
131
|
export { describeWorkflowDraftNativeDependencies, resolveWorkflowDraftNativeDependencies, validateWorkflowDraftNativeDependencies, validateWorkflowDraftNativeDependencyResolutions, } from './draft/edits/native/additions/resolve-workflow-draft-native-dependencies.js';
|
|
132
|
+
export { describeWorkflowDraftApiEnumChoices } from './draft/edits/api/describe-workflow-draft-api-enum-choices.js';
|
|
133
|
+
export { createWorkflowDraftApiEnumSelectionSchema } from './schemas/workflow-draft-api-enum-selection-schema.js';
|
|
134
|
+
export { describeWorkflowDraftApiInputEditEnumChoices } from './draft/edits/inputs/describe-workflow-draft-api-input-edit-enum-choices.js';
|
|
127
135
|
export { describeWorkflowDraftApiBindingIntent } from './draft/edits/api/describe-workflow-draft-api-binding-intent.js';
|
|
128
136
|
export { createWorkflowDraftApiBindingIntentSchema } from './schemas/workflow-draft-api-binding-intent-schema.js';
|
|
129
137
|
export { resolveWorkflowDraftApiBindingIntent } from './draft/edits/api/resolve-workflow-draft-api-binding-intent.js';
|
|
@@ -15,6 +15,7 @@ export declare const apiInputRequirementSchema: z.ZodObject<{
|
|
|
15
15
|
targetPointer: z.ZodString;
|
|
16
16
|
schema: z.ZodUnion<readonly [z.ZodBoolean, z.ZodRecord<z.ZodString, z.ZodJSONSchema>]>;
|
|
17
17
|
openapiVersion: z.ZodString;
|
|
18
|
+
schemaDialect: z.ZodOptional<z.ZodLiteral<"draft-2020-12">>;
|
|
18
19
|
operationSummary: z.ZodOptional<z.ZodString>;
|
|
19
20
|
parameterDescription: z.ZodOptional<z.ZodString>;
|
|
20
21
|
message: z.ZodString;
|
|
@@ -37,10 +38,12 @@ export declare const apiInputAnswerContextSchema: z.ZodObject<{
|
|
|
37
38
|
targetPointer: z.ZodString;
|
|
38
39
|
schema: z.ZodUnion<readonly [z.ZodBoolean, z.ZodRecord<z.ZodString, z.ZodJSONSchema>]>;
|
|
39
40
|
openapiVersion: z.ZodString;
|
|
41
|
+
schemaDialect: z.ZodOptional<z.ZodLiteral<"draft-2020-12">>;
|
|
40
42
|
operationSummary: z.ZodOptional<z.ZodString>;
|
|
41
43
|
parameterDescription: z.ZodOptional<z.ZodString>;
|
|
42
44
|
message: z.ZodString;
|
|
43
45
|
}, z.core.$strict>>;
|
|
46
|
+
selectOasEnums: z.ZodOptional<z.ZodBoolean>;
|
|
44
47
|
}, z.core.$strict>;
|
|
45
48
|
export declare const apiInputAnswerSourceSchema: z.ZodObject<{
|
|
46
49
|
sourceFormat: z.ZodEnum<{
|
|
@@ -69,4 +72,16 @@ export declare const apiInputAnswerExtractionDecisionSchema: z.ZodObject<{
|
|
|
69
72
|
requirementId: z.ZodString;
|
|
70
73
|
reason: z.ZodString;
|
|
71
74
|
}, z.core.$strict>>;
|
|
75
|
+
enumSelections: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
76
|
+
requirementId: z.ZodString;
|
|
77
|
+
candidateId: z.ZodString;
|
|
78
|
+
intent: z.ZodObject<{
|
|
79
|
+
sourceFormat: z.ZodEnum<{
|
|
80
|
+
text: "text";
|
|
81
|
+
json: "json";
|
|
82
|
+
}>;
|
|
83
|
+
sourceText: z.ZodString;
|
|
84
|
+
}, z.core.$strict>;
|
|
85
|
+
reason: z.ZodString;
|
|
86
|
+
}, z.core.$strict>>>;
|
|
72
87
|
}, z.core.$strict>;
|
|
@@ -2,6 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import { apiOperationKeySchema } from './api-operation-key-schema.js';
|
|
3
3
|
import { apiInputLiteralSourceSchema } from './api-input-literal-source-schema.js';
|
|
4
4
|
import { requestedApiInputsSchema } from './requested-api-inputs-schema.js';
|
|
5
|
+
import { apiInputEnumAnswerSelectionsSchema } from './api-input-enum-answer-selection-schema.js';
|
|
5
6
|
export const apiInputRequirementSchema = z.strictObject({
|
|
6
7
|
kind: z.enum(['missing-input', 'requested-input']),
|
|
7
8
|
requestedInputs: requestedApiInputsSchema.optional(),
|
|
@@ -11,6 +12,7 @@ export const apiInputRequirementSchema = z.strictObject({
|
|
|
11
12
|
targetPointer: z.string().min(1),
|
|
12
13
|
schema: z.union([z.boolean(), z.record(z.string(), z.json())]),
|
|
13
14
|
openapiVersion: z.string().min(1),
|
|
15
|
+
schemaDialect: z.literal('draft-2020-12').optional(),
|
|
14
16
|
operationSummary: z.string().optional(),
|
|
15
17
|
parameterDescription: z.string().optional(),
|
|
16
18
|
message: z.string().min(1),
|
|
@@ -18,6 +20,7 @@ export const apiInputRequirementSchema = z.strictObject({
|
|
|
18
20
|
export const apiInputAnswerContextSchema = z.strictObject({
|
|
19
21
|
reply: z.string(),
|
|
20
22
|
requirements: z.array(apiInputRequirementSchema),
|
|
23
|
+
selectOasEnums: z.boolean().optional(),
|
|
21
24
|
});
|
|
22
25
|
export const apiInputAnswerSourceSchema = apiInputLiteralSourceSchema.extend({
|
|
23
26
|
requirementId: z.string().min(1),
|
|
@@ -26,4 +29,5 @@ export const apiInputAnswerSourcesSchema = z.array(apiInputAnswerSourceSchema);
|
|
|
26
29
|
export const apiInputAnswerExtractionDecisionSchema = z.strictObject({
|
|
27
30
|
reason: z.string().min(1),
|
|
28
31
|
answers: z.array(apiInputAnswerSourceSchema.extend({ reason: z.string().min(1) })),
|
|
32
|
+
enumSelections: apiInputEnumAnswerSelectionsSchema.optional(),
|
|
29
33
|
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const apiInputEnumAnswerSelectionSchema: z.ZodObject<{
|
|
3
|
+
requirementId: z.ZodString;
|
|
4
|
+
candidateId: z.ZodString;
|
|
5
|
+
intent: z.ZodObject<{
|
|
6
|
+
sourceFormat: z.ZodEnum<{
|
|
7
|
+
text: "text";
|
|
8
|
+
json: "json";
|
|
9
|
+
}>;
|
|
10
|
+
sourceText: z.ZodString;
|
|
11
|
+
}, z.core.$strict>;
|
|
12
|
+
reason: z.ZodString;
|
|
13
|
+
}, z.core.$strict>;
|
|
14
|
+
export declare const apiInputEnumAnswerSelectionsSchema: z.ZodArray<z.ZodObject<{
|
|
15
|
+
requirementId: z.ZodString;
|
|
16
|
+
candidateId: z.ZodString;
|
|
17
|
+
intent: z.ZodObject<{
|
|
18
|
+
sourceFormat: z.ZodEnum<{
|
|
19
|
+
text: "text";
|
|
20
|
+
json: "json";
|
|
21
|
+
}>;
|
|
22
|
+
sourceText: z.ZodString;
|
|
23
|
+
}, z.core.$strict>;
|
|
24
|
+
reason: z.ZodString;
|
|
25
|
+
}, z.core.$strict>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { apiInputLiteralSourceSchema } from './api-input-literal-source-schema.js';
|
|
3
|
+
export const apiInputEnumAnswerSelectionSchema = z.strictObject({
|
|
4
|
+
requirementId: z.string().min(1),
|
|
5
|
+
candidateId: z.string().min(1),
|
|
6
|
+
intent: apiInputLiteralSourceSchema,
|
|
7
|
+
reason: z
|
|
8
|
+
.string()
|
|
9
|
+
.refine((value) => value.trim().length > 0, 'An enum choice requires a reason'),
|
|
10
|
+
});
|
|
11
|
+
export const apiInputEnumAnswerSelectionsSchema = z.array(apiInputEnumAnswerSelectionSchema);
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { validateWorkflowDraftApiInputEditContract } from '../draft/edits/inputs/validate-workflow-draft-api-input-edit-contract.js';
|
|
3
2
|
import { createWorkflowDraftEditMessageFields } from './workflow-draft-edit-message-fields.js';
|
|
4
3
|
import { createWorkflowDraftApiInputEditTargetValueSchema } from './create-workflow-draft-api-input-edit-target-value-schema.js';
|
|
5
4
|
import { createSchemaResourceContext } from '../bindings/resources/create-schema-resource-context.js';
|
|
6
5
|
import { apiInputLiteralSourceSchema } from './api-input-literal-source-schema.js';
|
|
6
|
+
import { describeWorkflowDraftApiInputEditEnumChoices } from '../draft/edits/inputs/describe-workflow-draft-api-input-edit-enum-choices.js';
|
|
7
|
+
import { createWorkflowDraftApiEnumChoiceSchema } from './workflow-draft-api-enum-choice-schema.js';
|
|
7
8
|
/** Only selected set-values are model-owned; per-field OAS assertions stay intact. */
|
|
8
9
|
export function createWorkflowDraftApiInputEditValuesSchema(input, messageSchema) {
|
|
9
|
-
|
|
10
|
+
const { candidates } = describeWorkflowDraftApiInputEditEnumChoices(input);
|
|
10
11
|
const evidence = createWorkflowDraftEditMessageFields(input.requestMessageIds, input.plan.options.includeExplanations, messageSchema);
|
|
11
12
|
const resources = createSchemaResourceContext(input.contract.schemaResource);
|
|
12
13
|
const wire = resources.bundleStaticProjections(Object.fromEntries(input.contract.targets
|
|
@@ -31,6 +32,14 @@ export function createWorkflowDraftApiInputEditValuesSchema(input, messageSchema
|
|
|
31
32
|
status: z.literal('needs-input'),
|
|
32
33
|
...evidence.fields,
|
|
33
34
|
}),
|
|
35
|
+
...(candidates.some((candidate) => candidate.targetPointer === target.pointer)
|
|
36
|
+
? [
|
|
37
|
+
z.strictObject({
|
|
38
|
+
status: z.literal('oas-enum'),
|
|
39
|
+
selection: createWorkflowDraftApiEnumChoiceSchema(candidates.filter((candidate) => candidate.targetPointer === target.pointer), input.requestMessageIds),
|
|
40
|
+
}),
|
|
41
|
+
]
|
|
42
|
+
: []),
|
|
34
43
|
]),
|
|
35
44
|
]))),
|
|
36
45
|
})
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { WorkflowDraftApiEnumSelection } from '../types/workflow-draft-api-enum-selection.js';
|
|
3
|
+
import type { ApiInputEnumCandidate } from '../types/api-input-enum.js';
|
|
4
|
+
/** No generated value or schema field exists in a semantic enum choice. */
|
|
5
|
+
export declare function createWorkflowDraftApiEnumChoiceSchema(candidates: ApiInputEnumCandidate[], messageIds: string[]): z.ZodType<WorkflowDraftApiEnumSelection>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** No generated value or schema field exists in a semantic enum choice. */
|
|
3
|
+
export function createWorkflowDraftApiEnumChoiceSchema(candidates, messageIds) {
|
|
4
|
+
if (!messageIds.length)
|
|
5
|
+
throw new Error('API enum choice requires original human message IDs');
|
|
6
|
+
if (!candidates.length)
|
|
7
|
+
return z.never();
|
|
8
|
+
return z.strictObject({
|
|
9
|
+
candidateId: z
|
|
10
|
+
.enum(candidates.map((candidate) => candidate.id))
|
|
11
|
+
.describe('Choose an offered original-OAS enum candidate ID. Code copies its original value; never generate a request value.'),
|
|
12
|
+
messageId: z
|
|
13
|
+
.enum(messageIds)
|
|
14
|
+
.describe('Actual supplied human message expressing this enum intent, not an OAS quotation.'),
|
|
15
|
+
sourceText: z
|
|
16
|
+
.string()
|
|
17
|
+
.min(1)
|
|
18
|
+
.describe('Exact original human text expressing the intended meaning; it need not contain the enum literal.'),
|
|
19
|
+
reason: z
|
|
20
|
+
.string()
|
|
21
|
+
.min(1)
|
|
22
|
+
.refine((value) => value.trim().length > 0)
|
|
23
|
+
.describe('Brief user-facing reason why this OAS choice matches the cited request. Not private chain-of-thought.'),
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { WorkflowDraftApiEnumChoicesInput, WorkflowDraftApiEnumSelectionProposal } from '../types/workflow-draft-api-enum-selection.js';
|
|
3
|
+
/** The model selects IDs and explains intent; there is deliberately no value field. */
|
|
4
|
+
export declare function createWorkflowDraftApiEnumSelectionSchema(input: WorkflowDraftApiEnumChoicesInput): z.ZodType<WorkflowDraftApiEnumSelectionProposal>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { describeWorkflowDraftApiEnumChoices } from '../draft/edits/api/describe-workflow-draft-api-enum-choices.js';
|
|
3
|
+
import { createWorkflowDraftApiEnumChoiceSchema } from './workflow-draft-api-enum-choice-schema.js';
|
|
4
|
+
/** The model selects IDs and explains intent; there is deliberately no value field. */
|
|
5
|
+
export function createWorkflowDraftApiEnumSelectionSchema(input) {
|
|
6
|
+
const { candidates } = describeWorkflowDraftApiEnumChoices(input);
|
|
7
|
+
if (!candidates.length)
|
|
8
|
+
return z.strictObject({ selections: z.array(z.never()).max(0) });
|
|
9
|
+
return z.strictObject({
|
|
10
|
+
selections: z
|
|
11
|
+
.array(createWorkflowDraftApiEnumChoiceSchema(candidates, input.context.messages.map((message) => message.id)))
|
|
12
|
+
.describe('Select only when the human request identifies the meaning. Empty means no supported interpretation; keep the existing input question. Never select a default just because it exists.'),
|
|
13
|
+
});
|
|
14
|
+
}
|
|
@@ -6,7 +6,9 @@ export function createWorkflowDraftApiInputEditProposalSchema(messageIds, includ
|
|
|
6
6
|
return z.strictObject({
|
|
7
7
|
targets: z
|
|
8
8
|
.array(z.strictObject({
|
|
9
|
-
kind: z
|
|
9
|
+
kind: z
|
|
10
|
+
.enum(['set', 'remove'])
|
|
11
|
+
.describe('set replaces a requested field, even when its new value is unknown and must be asked later. remove requires explicit withdrawal/deletion; asking which replacement to use is not removal.'),
|
|
10
12
|
pointer: z
|
|
11
13
|
.string()
|
|
12
14
|
.min(1)
|
|
@@ -23,6 +23,8 @@ export interface ApiInputRequirement {
|
|
|
23
23
|
targetPointer: string;
|
|
24
24
|
schema: JsonObject | boolean;
|
|
25
25
|
openapiVersion: string;
|
|
26
|
+
/** Present only when schema is an already-normalized OAS projection. Omission means raw source-version rules. */
|
|
27
|
+
schemaDialect?: 'draft-2020-12';
|
|
26
28
|
operationSummary?: string;
|
|
27
29
|
parameterDescription?: string;
|
|
28
30
|
message: string;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ApiInputAnswer, ApiInputRequirement } from './api-clarification.js';
|
|
2
|
+
import type { ApiInputEnumAnswerSelection, ResolvedApiInputAnswerInterpretations } from './api-input-enum-answers.js';
|
|
2
3
|
export interface ApiInputAnswerContext {
|
|
3
4
|
reply: string;
|
|
4
5
|
requirements: ApiInputRequirement[];
|
|
6
|
+
/** Allow semantic selection of original OAS enum values, never arbitrary generation. */
|
|
7
|
+
selectOasEnums?: boolean;
|
|
5
8
|
}
|
|
6
9
|
export interface ApiInputAnswerSource {
|
|
7
10
|
requirementId: string;
|
|
@@ -30,12 +33,13 @@ export interface ResolvedApiInputAnswerSources {
|
|
|
30
33
|
export interface ApiInputAnswerExtractionDecision {
|
|
31
34
|
reason: string;
|
|
32
35
|
answers: ExplainedApiInputAnswerSource[];
|
|
36
|
+
enumSelections?: ApiInputEnumAnswerSelection[];
|
|
33
37
|
}
|
|
34
38
|
export interface ApiInputAnswerExtractionRecord {
|
|
35
39
|
kind: 'model-extracted-api-input-answers';
|
|
36
40
|
decision: ApiInputAnswerExtractionDecision;
|
|
37
41
|
evidence: ApiInputAnswerContext;
|
|
38
|
-
verification:
|
|
42
|
+
verification: ResolvedApiInputAnswerInterpretations;
|
|
39
43
|
}
|
|
40
44
|
export interface CreateApiInputAnswerExtractionRecordInput extends ApiInputAnswerContext {
|
|
41
45
|
decision: ApiInputAnswerExtractionDecision;
|
|
@@ -43,7 +47,10 @@ export interface CreateApiInputAnswerExtractionRecordInput extends ApiInputAnswe
|
|
|
43
47
|
export interface ValidateApiInputAnswerExtractionRecordInput extends ApiInputAnswerContext {
|
|
44
48
|
record: ApiInputAnswerExtractionRecord;
|
|
45
49
|
}
|
|
46
|
-
export interface ApiInputAnswerAnalysis extends
|
|
50
|
+
export interface ApiInputAnswerAnalysis extends ResolvedApiInputAnswerInterpretations {
|
|
47
51
|
status: 'extracted' | 'no-pending-inputs' | 'empty-reply';
|
|
48
52
|
extraction?: ApiInputAnswerExtractionRecord;
|
|
49
53
|
}
|
|
54
|
+
export interface ValidateApiInputAnswerAnalysisInput extends ApiInputAnswerContext {
|
|
55
|
+
analysis: ApiInputAnswerAnalysis;
|
|
56
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ApiInputAnswerContext, ApiInputAnswerSource, ApiInputAnswerSourceLocation, ResolvedApiInputAnswerSources } from './api-input-answer-extraction.js';
|
|
2
|
+
import type { ApiInputEnumCandidate } from './api-input-enum.js';
|
|
3
|
+
import type { ApiInputLiteralSource } from './api-input-literal-source.js';
|
|
4
|
+
export interface ApiInputEnumAnswerChoice {
|
|
5
|
+
requirementId: string;
|
|
6
|
+
candidates: ApiInputEnumCandidate[];
|
|
7
|
+
}
|
|
8
|
+
/** Intent is a human quotation, not the value copied from the OAS. */
|
|
9
|
+
export interface ApiInputEnumAnswerSelection {
|
|
10
|
+
requirementId: string;
|
|
11
|
+
candidateId: string;
|
|
12
|
+
intent: ApiInputLiteralSource;
|
|
13
|
+
reason: string;
|
|
14
|
+
}
|
|
15
|
+
export interface VerifiedApiInputEnumAnswerSelection extends ApiInputEnumAnswerSelection {
|
|
16
|
+
candidate: ApiInputEnumCandidate;
|
|
17
|
+
occurrences: ApiInputAnswerSourceLocation[];
|
|
18
|
+
}
|
|
19
|
+
export interface ResolveApiInputAnswerInterpretationsInput extends ApiInputAnswerContext {
|
|
20
|
+
selections: ApiInputAnswerSource[];
|
|
21
|
+
enumSelections?: ApiInputEnumAnswerSelection[];
|
|
22
|
+
}
|
|
23
|
+
export interface ResolvedApiInputAnswerInterpretations extends ResolvedApiInputAnswerSources {
|
|
24
|
+
enumSelections?: VerifiedApiInputEnumAnswerSelection[];
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ApiOperationKey } from './api-catalog.js';
|
|
2
|
+
import type { JsonValue } from './api-arguments.js';
|
|
3
|
+
import type { ApiBindingMaterial, BindingSchema } from './api-bindings.js';
|
|
4
|
+
import type { ApiInputRequirement } from './api-clarification.js';
|
|
5
|
+
import type { SchemaResourceContext } from './schema-resource.js';
|
|
6
|
+
export interface ApiInputEnumCandidate {
|
|
7
|
+
id: string;
|
|
8
|
+
callId: string;
|
|
9
|
+
operation: ApiOperationKey;
|
|
10
|
+
targetPointer: string;
|
|
11
|
+
/** Location in the original target schema, never a human quotation. */
|
|
12
|
+
schemaPointer: string;
|
|
13
|
+
value: JsonValue;
|
|
14
|
+
}
|
|
15
|
+
export type ApiInputEnumSource = (ApiBindingMaterial & {
|
|
16
|
+
kind: 'operation';
|
|
17
|
+
targetPointer: string;
|
|
18
|
+
}) | {
|
|
19
|
+
kind: 'requirement';
|
|
20
|
+
requirement: ApiInputRequirement;
|
|
21
|
+
};
|
|
22
|
+
export interface ApiInputEnumCandidatesInput {
|
|
23
|
+
source: ApiInputEnumSource;
|
|
24
|
+
schemas: BindingSchema[];
|
|
25
|
+
resources: SchemaResourceContext;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
import type { createValidator } from '@scalar/json-schema-validator';
|
|
2
2
|
import type { JsonObject } from './openapi.js';
|
|
3
|
+
import type { SchemaDialect } from './schema-dialect.js';
|
|
3
4
|
export type OasValueSchema = JsonObject | boolean;
|
|
4
5
|
export type OasValueValidation = ReturnType<typeof createValidator>;
|
|
5
6
|
export interface OasValueValidator {
|
|
6
7
|
schema: JsonObject;
|
|
7
8
|
validate: OasValueValidation;
|
|
8
9
|
}
|
|
10
|
+
export interface OasValueValidationCacheOptions {
|
|
11
|
+
maximumEntries: number;
|
|
12
|
+
maximumRetainedSchemaBytes: number;
|
|
13
|
+
}
|
|
14
|
+
export interface OasValueValidationCacheEntry {
|
|
15
|
+
schema: JsonObject;
|
|
16
|
+
validate: OasValueValidation;
|
|
17
|
+
bytes: number;
|
|
18
|
+
}
|
|
19
|
+
export interface OasValueValidationCache {
|
|
20
|
+
getOrCreate(schema: JsonObject, dialect: SchemaDialect, compile: (schema: JsonObject) => OasValueValidation): OasValueValidation;
|
|
21
|
+
}
|
|
@@ -9,6 +9,7 @@ import type { ProposedWorkflowDraftSourceEvidence, ResolvedWorkflowDraftSourceEv
|
|
|
9
9
|
import type { ProposedWorkflowDraftApiBindingQuestion, WorkflowDraftApiBindingAnswer, WorkflowDraftApiCallPlanningQuestion } from './workflow-draft-api-binding-clarification.js';
|
|
10
10
|
import type { WorkflowDraftApiBindingIntent } from './workflow-draft-api-binding-intent.js';
|
|
11
11
|
import type { BindingSchema } from './api-bindings.js';
|
|
12
|
+
import type { WorkflowDraftApiEnumSelection, VerifiedWorkflowDraftApiEnumSelection } from './workflow-draft-api-enum-selection.js';
|
|
12
13
|
/** One operation already selected by an add-api-call or replace-api-operation decision. */
|
|
13
14
|
export interface WorkflowDraftApiCallPlanningInput extends PrepareWorkflowDraftEditInput {
|
|
14
15
|
stepId: string;
|
|
@@ -108,11 +109,14 @@ export interface WorkflowDraftApiCallArgumentsDescription extends WorkflowDraftA
|
|
|
108
109
|
export interface ResolveWorkflowDraftApiCallArgumentsInput extends WorkflowDraftApiCallArgumentsInput {
|
|
109
110
|
fingerprint: string;
|
|
110
111
|
proposal: WorkflowDraftApiCallArgumentsProposal;
|
|
112
|
+
/** Semantic OAS choices, never raw user literal provenance or confirmed user answers. */
|
|
113
|
+
enumSelections?: WorkflowDraftApiEnumSelection[];
|
|
111
114
|
}
|
|
112
115
|
export interface WorkflowDraftApiCallArgumentsResultFields extends ResolvedWorkflowDraftSourceEvidence {
|
|
113
116
|
fingerprint: string;
|
|
114
117
|
proposal: WorkflowDraftApiCallArgumentsProposal;
|
|
115
118
|
literalSources: VerifiedWorkflowDraftApiLiteralSource[];
|
|
119
|
+
enumSelections?: VerifiedWorkflowDraftApiEnumSelection[];
|
|
116
120
|
arguments: ApiCallArguments;
|
|
117
121
|
requirements: ApiInputRequirement[];
|
|
118
122
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ApiInputAnswerSourceLocation } from './api-input-answer-extraction.js';
|
|
2
|
+
import type { JsonObject } from './openapi.js';
|
|
3
|
+
import type { ApiArgumentValues } from './api-arguments.js';
|
|
4
|
+
import type { ApiInputEnumCandidate } from './api-input-enum.js';
|
|
5
|
+
import type { WorkflowSourceMessage } from './workflow-draft.js';
|
|
6
|
+
import type { WorkflowDraftApiCallArgumentsInput, WorkflowDraftApiCallArgumentsProposal } from './workflow-draft-api-call-planning.js';
|
|
7
|
+
export interface WorkflowDraftApiEnumSelection {
|
|
8
|
+
candidateId: string;
|
|
9
|
+
messageId: string;
|
|
10
|
+
sourceText: string;
|
|
11
|
+
reason: string;
|
|
12
|
+
}
|
|
13
|
+
export interface VerifiedWorkflowDraftApiEnumSelection extends ApiInputEnumCandidate, WorkflowDraftApiEnumSelection {
|
|
14
|
+
occurrences: ApiInputAnswerSourceLocation[];
|
|
15
|
+
}
|
|
16
|
+
export interface WorkflowDraftApiEnumChoicesInput extends WorkflowDraftApiCallArgumentsInput {
|
|
17
|
+
proposal: WorkflowDraftApiCallArgumentsProposal;
|
|
18
|
+
}
|
|
19
|
+
export interface WorkflowDraftApiEnumChoicesDescription {
|
|
20
|
+
candidates: ApiInputEnumCandidate[];
|
|
21
|
+
targets: WorkflowDraftApiEnumTarget[];
|
|
22
|
+
}
|
|
23
|
+
export interface WorkflowDraftApiEnumTarget {
|
|
24
|
+
targetPointer: string;
|
|
25
|
+
schema: JsonObject | boolean;
|
|
26
|
+
description?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface WorkflowDraftApiEnumResolution {
|
|
29
|
+
values: ApiArgumentValues;
|
|
30
|
+
selections: VerifiedWorkflowDraftApiEnumSelection[];
|
|
31
|
+
}
|
|
32
|
+
export interface WorkflowDraftApiEnumSelectionProposal {
|
|
33
|
+
selections: WorkflowDraftApiEnumSelection[];
|
|
34
|
+
}
|
|
35
|
+
export interface VerifyWorkflowDraftApiEnumSelectionInput {
|
|
36
|
+
selection: WorkflowDraftApiEnumSelection;
|
|
37
|
+
candidates: ApiInputEnumCandidate[];
|
|
38
|
+
messages: WorkflowSourceMessage[];
|
|
39
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|