@openapi-flow/langchain 0.2.0 → 0.3.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.
Files changed (235) hide show
  1. package/README.md +121 -1
  2. package/dist/arguments/analyze-api-input-answers.d.ts +3 -0
  3. package/dist/arguments/analyze-api-input-answers.js +87 -0
  4. package/dist/arguments/analyze-api-request-media-type.d.ts +4 -0
  5. package/dist/arguments/analyze-api-request-media-type.js +50 -0
  6. package/dist/arguments/extract-api-input-answers.d.ts +3 -0
  7. package/dist/arguments/extract-api-input-answers.js +4 -0
  8. package/dist/arguments/generate-api-arguments.js +43 -28
  9. package/dist/arguments/select-api-request-media-type.js +8 -37
  10. package/dist/bindings/plan-api-bindings.js +30 -23
  11. package/dist/draft/analyze-workflow-draft-edit.d.ts +4 -0
  12. package/dist/draft/analyze-workflow-draft-edit.js +84 -0
  13. package/dist/draft/generate-workflow-draft-api-call-arguments.d.ts +3 -0
  14. package/dist/draft/generate-workflow-draft-api-call-arguments.js +88 -0
  15. package/dist/draft/generate-workflow-draft-api-input-edits.d.ts +4 -0
  16. package/dist/draft/generate-workflow-draft-api-input-edits.js +58 -0
  17. package/dist/draft/generate-workflow-draft-native-node-addition.d.ts +4 -0
  18. package/dist/draft/generate-workflow-draft-native-node-addition.js +137 -0
  19. package/dist/draft/generate-workflow-draft-native-parameter-edits.d.ts +3 -0
  20. package/dist/draft/generate-workflow-draft-native-parameter-edits.js +71 -0
  21. package/dist/draft/plan-workflow-draft-api-binding-edit.d.ts +4 -0
  22. package/dist/draft/plan-workflow-draft-api-binding-edit.js +103 -0
  23. package/dist/draft/plan-workflow-draft-api-call-bindings.d.ts +3 -0
  24. package/dist/draft/plan-workflow-draft-api-call-bindings.js +114 -0
  25. package/dist/draft/plan-workflow-draft-clarification-scopes.d.ts +4 -0
  26. package/dist/draft/plan-workflow-draft-clarification-scopes.js +77 -0
  27. package/dist/draft/plan-workflow-draft-connection-edit.d.ts +4 -0
  28. package/dist/draft/plan-workflow-draft-connection-edit.js +79 -0
  29. package/dist/draft/plan-workflow-draft-native-dependencies.d.ts +4 -0
  30. package/dist/draft/plan-workflow-draft-native-dependencies.js +45 -0
  31. package/dist/draft/plan-workflow-draft-native-reference-repair.d.ts +4 -0
  32. package/dist/draft/plan-workflow-draft-native-reference-repair.js +68 -0
  33. package/dist/draft/resolve-workflow-draft-edit-proposal.d.ts +3 -0
  34. package/dist/draft/resolve-workflow-draft-edit-proposal.js +39 -0
  35. package/dist/draft/select-workflow-draft-api-binding-inputs.d.ts +4 -0
  36. package/dist/draft/select-workflow-draft-api-binding-inputs.js +83 -0
  37. package/dist/draft/select-workflow-draft-api-input-edit-targets.d.ts +4 -0
  38. package/dist/draft/select-workflow-draft-api-input-edit-targets.js +55 -0
  39. package/dist/draft/select-workflow-draft-native-node-parameter-ownership.d.ts +4 -0
  40. package/dist/draft/select-workflow-draft-native-node-parameter-ownership.js +81 -0
  41. package/dist/draft/select-workflow-draft-native-parameter-edit-targets.d.ts +3 -0
  42. package/dist/draft/select-workflow-draft-native-parameter-edit-targets.js +51 -0
  43. package/dist/draft/workflow-draft-api-binding-edit-planning-error.d.ts +5 -0
  44. package/dist/draft/workflow-draft-api-binding-edit-planning-error.js +10 -0
  45. package/dist/draft/workflow-draft-api-call-planning-error.d.ts +5 -0
  46. package/dist/draft/workflow-draft-api-call-planning-error.js +10 -0
  47. package/dist/draft/workflow-draft-api-input-edit-planning-error.d.ts +5 -0
  48. package/dist/draft/workflow-draft-api-input-edit-planning-error.js +10 -0
  49. package/dist/draft/workflow-draft-clarification-scope-planning-error.d.ts +5 -0
  50. package/dist/draft/workflow-draft-clarification-scope-planning-error.js +8 -0
  51. package/dist/draft/workflow-draft-connection-edit-planning-error.d.ts +5 -0
  52. package/dist/draft/workflow-draft-connection-edit-planning-error.js +10 -0
  53. package/dist/draft/workflow-draft-edit-planning-error.d.ts +5 -0
  54. package/dist/draft/workflow-draft-edit-planning-error.js +8 -0
  55. package/dist/draft/workflow-draft-native-node-addition-planning-error.d.ts +5 -0
  56. package/dist/draft/workflow-draft-native-node-addition-planning-error.js +10 -0
  57. package/dist/draft/workflow-draft-native-parameter-edit-planning-error.d.ts +5 -0
  58. package/dist/draft/workflow-draft-native-parameter-edit-planning-error.js +8 -0
  59. package/dist/draft/workflow-draft-native-reference-repair-planning-error.d.ts +5 -0
  60. package/dist/draft/workflow-draft-native-reference-repair-planning-error.js +8 -0
  61. package/dist/prompts/api-arguments-prompt.d.ts +1 -1
  62. package/dist/prompts/api-arguments-prompt.js +1 -1
  63. package/dist/prompts/api-bindings-prompt.d.ts +1 -1
  64. package/dist/prompts/api-bindings-prompt.js +1 -0
  65. package/dist/prompts/api-input-answers-prompt.d.ts +1 -0
  66. package/dist/prompts/api-input-answers-prompt.js +7 -0
  67. package/dist/prompts/api-request-media-type-prompt.d.ts +1 -1
  68. package/dist/prompts/api-request-media-type-prompt.js +1 -1
  69. package/dist/prompts/api-selection-analysis-prompt.d.ts +1 -0
  70. package/dist/prompts/api-selection-analysis-prompt.js +5 -0
  71. package/dist/prompts/api-selection-explanation-prompt.d.ts +1 -0
  72. package/dist/prompts/api-selection-explanation-prompt.js +1 -0
  73. package/dist/prompts/native-instance-dependencies-prompt.d.ts +1 -0
  74. package/dist/prompts/native-instance-dependencies-prompt.js +8 -0
  75. package/dist/prompts/native-node-planning-prompt.d.ts +3 -1
  76. package/dist/prompts/native-node-planning-prompt.js +14 -1
  77. package/dist/prompts/reviewable-workflow-graph-prompt.d.ts +1 -1
  78. package/dist/prompts/workflow-connections-prompt.d.ts +1 -1
  79. package/dist/prompts/workflow-connections-prompt.js +3 -1
  80. package/dist/prompts/workflow-draft-api-binding-edit-prompt.d.ts +1 -0
  81. package/dist/prompts/workflow-draft-api-binding-edit-prompt.js +9 -0
  82. package/dist/prompts/workflow-draft-api-call-planning-prompt.d.ts +3 -0
  83. package/dist/prompts/workflow-draft-api-call-planning-prompt.js +39 -0
  84. package/dist/prompts/workflow-draft-api-input-edit-prompt.d.ts +2 -0
  85. package/dist/prompts/workflow-draft-api-input-edit-prompt.js +14 -0
  86. package/dist/prompts/workflow-draft-clarification-scope-prompt.d.ts +1 -0
  87. package/dist/prompts/workflow-draft-clarification-scope-prompt.js +10 -0
  88. package/dist/prompts/workflow-draft-connection-edit-prompt.d.ts +1 -0
  89. package/dist/prompts/workflow-draft-connection-edit-prompt.js +7 -0
  90. package/dist/prompts/workflow-draft-edit-prompt.d.ts +1 -0
  91. package/dist/prompts/workflow-draft-edit-prompt.js +15 -0
  92. package/dist/prompts/workflow-draft-native-dependencies-prompt.d.ts +1 -0
  93. package/dist/prompts/workflow-draft-native-dependencies-prompt.js +5 -0
  94. package/dist/prompts/workflow-draft-native-node-addition-prompt.d.ts +2 -0
  95. package/dist/prompts/workflow-draft-native-node-addition-prompt.js +6 -0
  96. package/dist/prompts/workflow-draft-native-parameter-edit-prompt.d.ts +2 -0
  97. package/dist/prompts/workflow-draft-native-parameter-edit-prompt.js +2 -0
  98. package/dist/prompts/workflow-draft-native-reference-repair-prompt.d.ts +1 -0
  99. package/dist/prompts/workflow-draft-native-reference-repair-prompt.js +7 -0
  100. package/dist/prompts/workflow-graph-prompt.d.ts +1 -1
  101. package/dist/prompts/workflow-graph-prompt.js +2 -0
  102. package/dist/prompts/workflow-requirements-prompt.d.ts +1 -0
  103. package/dist/prompts/workflow-requirements-prompt.js +14 -0
  104. package/dist/prompts/workflow-review-suggestions-prompt.d.ts +1 -0
  105. package/dist/prompts/workflow-review-suggestions-prompt.js +4 -0
  106. package/dist/prompts/workflow-user-action-evidence-prompt.d.ts +1 -0
  107. package/dist/prompts/workflow-user-action-evidence-prompt.js +1 -0
  108. package/dist/public-api.d.ts +47 -0
  109. package/dist/public-api.js +34 -0
  110. package/dist/requirements/clarify-workflow-requirements.d.ts +4 -0
  111. package/dist/requirements/clarify-workflow-requirements.js +53 -0
  112. package/dist/requirements/resolve-workflow-requirements-evidence.d.ts +4 -0
  113. package/dist/requirements/resolve-workflow-requirements-evidence.js +58 -0
  114. package/dist/review/suggest-workflow-review-follow-ups.d.ts +4 -0
  115. package/dist/review/suggest-workflow-review-follow-ups.js +87 -0
  116. package/dist/review/workflow-review-suggestion-planning-error.d.ts +5 -0
  117. package/dist/review/workflow-review-suggestion-planning-error.js +8 -0
  118. package/dist/schemas/api-binding-plan-schema.d.ts +7 -2
  119. package/dist/schemas/api-binding-plan-schema.js +11 -1
  120. package/dist/schemas/api-input-answer-source-schema.d.ts +16 -0
  121. package/dist/schemas/api-input-answer-source-schema.js +28 -0
  122. package/dist/schemas/api-literal-generation-output-schema.d.ts +11 -0
  123. package/dist/schemas/api-literal-generation-output-schema.js +20 -0
  124. package/dist/schemas/api-request-media-type-schema.d.ts +5 -2
  125. package/dist/schemas/api-request-media-type-schema.js +14 -2
  126. package/dist/schemas/api-selection-analysis-schema.d.ts +41 -0
  127. package/dist/schemas/api-selection-analysis-schema.js +23 -0
  128. package/dist/schemas/api-selection-options-schema.d.ts +4 -0
  129. package/dist/schemas/api-selection-options-schema.js +4 -0
  130. package/dist/schemas/api-selection-schema.d.ts +14 -1
  131. package/dist/schemas/api-selection-schema.js +6 -5
  132. package/dist/schemas/create-workflow-message-evidence-selection-schema.d.ts +16 -0
  133. package/dist/schemas/create-workflow-message-evidence-selection-schema.js +22 -0
  134. package/dist/schemas/native-node-explanation-schema.d.ts +5 -0
  135. package/dist/schemas/native-node-explanation-schema.js +9 -0
  136. package/dist/schemas/native-node-parameter-contract.d.ts +3 -0
  137. package/dist/schemas/native-node-parameter-contract.js +30 -0
  138. package/dist/schemas/native-node-planning-contract.d.ts +3 -0
  139. package/dist/schemas/native-node-planning-contract.js +44 -0
  140. package/dist/schemas/request-media-selection-options-schema.d.ts +4 -0
  141. package/dist/schemas/request-media-selection-options-schema.js +4 -0
  142. package/dist/schemas/reviewable-workflow-graph-schema.d.ts +4 -2
  143. package/dist/schemas/reviewable-workflow-graph-schema.js +13 -1
  144. package/dist/schemas/serialize-structured-output-schema.d.ts +5 -0
  145. package/dist/schemas/serialize-structured-output-schema.js +10 -0
  146. package/dist/schemas/serialize-workflow-requirements-schema.d.ts +4 -0
  147. package/dist/schemas/serialize-workflow-requirements-schema.js +5 -0
  148. package/dist/schemas/with-api-selection-explanation.d.ts +10 -0
  149. package/dist/schemas/with-api-selection-explanation.js +15 -0
  150. package/dist/schemas/workflow-connection-explanation-schema.d.ts +5 -0
  151. package/dist/schemas/workflow-connection-explanation-schema.js +9 -0
  152. package/dist/schemas/workflow-draft-edit-schema.d.ts +3 -0
  153. package/dist/schemas/workflow-draft-edit-schema.js +17 -0
  154. package/dist/schemas/workflow-graph-explanation-schema.d.ts +5 -0
  155. package/dist/schemas/workflow-graph-explanation-schema.js +9 -0
  156. package/dist/schemas/workflow-graph-proposal-schema.d.ts +2 -2
  157. package/dist/schemas/workflow-graph-proposal-schema.js +14 -7
  158. package/dist/schemas/workflow-planning-evidence-schemas.d.ts +20 -0
  159. package/dist/schemas/workflow-planning-evidence-schemas.js +44 -0
  160. package/dist/schemas/workflow-requirements-schema.d.ts +3 -0
  161. package/dist/schemas/workflow-requirements-schema.js +6 -0
  162. package/dist/schemas/workflow-review-suggestions-schema.d.ts +4 -0
  163. package/dist/schemas/workflow-review-suggestions-schema.js +18 -0
  164. package/dist/selection/analyze-api-selection.d.ts +4 -0
  165. package/dist/selection/analyze-api-selection.js +117 -0
  166. package/dist/selection/resolve-api-selection-options.d.ts +3 -0
  167. package/dist/selection/resolve-api-selection-options.js +6 -0
  168. package/dist/selection/select-api-operations.d.ts +1 -1
  169. package/dist/selection/select-api-operations.js +39 -6
  170. package/dist/types/api-input-answers.d.ts +16 -0
  171. package/dist/types/api-input-answers.js +1 -0
  172. package/dist/types/api-selection-analysis.d.ts +3 -0
  173. package/dist/types/api-selection-analysis.js +1 -0
  174. package/dist/types/argument-generation.d.ts +11 -5
  175. package/dist/types/binding-planning.d.ts +7 -5
  176. package/dist/types/native-node-planning.d.ts +67 -16
  177. package/dist/types/operation-selection.d.ts +5 -1
  178. package/dist/types/request-media-selection.d.ts +7 -2
  179. package/dist/types/reviewable-workflow-planning.d.ts +11 -2
  180. package/dist/types/structured-output-schema.d.ts +3 -0
  181. package/dist/types/structured-output-schema.js +1 -0
  182. package/dist/types/workflow-clarification.d.ts +23 -0
  183. package/dist/types/workflow-clarification.js +1 -0
  184. package/dist/types/workflow-draft-api-binding-edit.d.ts +9 -0
  185. package/dist/types/workflow-draft-api-binding-edit.js +1 -0
  186. package/dist/types/workflow-draft-api-call-planning.d.ts +15 -0
  187. package/dist/types/workflow-draft-api-call-planning.js +1 -0
  188. package/dist/types/workflow-draft-api-input-edit.d.ts +13 -0
  189. package/dist/types/workflow-draft-api-input-edit.js +1 -0
  190. package/dist/types/workflow-draft-clarification.d.ts +9 -0
  191. package/dist/types/workflow-draft-clarification.js +1 -0
  192. package/dist/types/workflow-draft-connection-edit.d.ts +9 -0
  193. package/dist/types/workflow-draft-connection-edit.js +1 -0
  194. package/dist/types/workflow-draft-edit.d.ts +16 -0
  195. package/dist/types/workflow-draft-edit.js +1 -0
  196. package/dist/types/workflow-draft-native-node-addition.d.ts +18 -0
  197. package/dist/types/workflow-draft-native-node-addition.js +1 -0
  198. package/dist/types/workflow-draft-native-parameter-edit.d.ts +13 -0
  199. package/dist/types/workflow-draft-native-parameter-edit.js +1 -0
  200. package/dist/types/workflow-draft-native-reference-repair.d.ts +9 -0
  201. package/dist/types/workflow-draft-native-reference-repair.js +1 -0
  202. package/dist/types/workflow-message-evidence-selection.d.ts +6 -0
  203. package/dist/types/workflow-message-evidence-selection.js +1 -0
  204. package/dist/types/workflow-orchestration.d.ts +13 -15
  205. package/dist/types/workflow-planning.d.ts +19 -7
  206. package/dist/types/workflow-review-suggestions.d.ts +12 -0
  207. package/dist/types/workflow-review-suggestions.js +1 -0
  208. package/dist/workflow/generate-native-node-parameters.d.ts +4 -0
  209. package/dist/workflow/generate-native-node-parameters.js +87 -0
  210. package/dist/workflow/orchestrate-workflow.js +2 -2
  211. package/dist/workflow/plan-native-instance-dependencies.d.ts +4 -0
  212. package/dist/workflow/plan-native-instance-dependencies.js +45 -0
  213. package/dist/workflow/plan-native-nodes.js +63 -66
  214. package/dist/workflow/plan-reviewable-workflow-graph.js +33 -64
  215. package/dist/workflow/plan-workflow-connections.js +35 -30
  216. package/dist/workflow/plan-workflow-graph.js +45 -64
  217. package/dist/workflow/resolve-native-node-parameter-source.d.ts +4 -0
  218. package/dist/workflow/resolve-native-node-parameter-source.js +7 -0
  219. package/dist/workflow/resolve-native-node-planning-output.d.ts +3 -0
  220. package/dist/workflow/resolve-native-node-planning-output.js +33 -0
  221. package/dist/workflow/resolve-workflow-connection-output.d.ts +3 -0
  222. package/dist/workflow/resolve-workflow-connection-output.js +22 -0
  223. package/dist/workflow/resolve-workflow-graph-output.d.ts +5 -0
  224. package/dist/workflow/resolve-workflow-graph-output.js +69 -0
  225. package/dist/workflow/select-native-node-instances.d.ts +4 -0
  226. package/dist/workflow/select-native-node-instances.js +57 -0
  227. package/package.json +7 -4
  228. package/dist/schemas/native-node-plan-schema.d.ts +0 -4
  229. package/dist/schemas/native-node-plan-schema.js +0 -26
  230. package/dist/workflow/assemble-native-node-materials.d.ts +0 -3
  231. package/dist/workflow/assemble-native-node-materials.js +0 -8
  232. package/dist/workflow/create-prepared-native-node-materials.d.ts +0 -4
  233. package/dist/workflow/create-prepared-native-node-materials.js +0 -15
  234. package/dist/workflow/prepare-workflow-connection-materials.d.ts +0 -3
  235. package/dist/workflow/prepare-workflow-connection-materials.js +0 -66
@@ -0,0 +1,88 @@
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ import { HumanMessage, SystemMessage } from '@langchain/core/messages';
3
+ import { describeWorkflowDraftClarification, describeWorkflowDraftClarificationOwnership, describeWorkflowDraftApiCallArguments, createWorkflowDraftApiCallArgumentsSchema, resolveWorkflowDraftApiCallArguments, } from '@openapi-flow/core';
4
+ import { workflowDraftApiCallArgumentsPrompt } from '../prompts/workflow-draft-api-call-planning-prompt.js';
5
+ import { serializeStructuredOutputSchema } from '../schemas/serialize-structured-output-schema.js';
6
+ import { parseStructuredOutput } from '../legacy/planning/parse-structured-output.js';
7
+ import { WorkflowDraftApiCallPlanningError } from './workflow-draft-api-call-planning-error.js';
8
+ export async function generateWorkflowDraftApiCallArguments(input) {
9
+ const description = describeWorkflowDraftApiCallArguments(input);
10
+ const schema = createWorkflowDraftApiCallArgumentsSchema(input);
11
+ if (!description.hasLiteralInputs)
12
+ return resolveWorkflowDraftApiCallArguments({
13
+ ...input,
14
+ fingerprint: description.fingerprint,
15
+ proposal: {
16
+ values: {},
17
+ ...(input.trackRequestedInputs === true ? { requestedInputs: [] } : {}),
18
+ sourceMessageIds: description.messages.map((message) => message.id),
19
+ ...(description.includeExplanations
20
+ ? {
21
+ explanation: {
22
+ reason: 'The OAS input contract has no remaining literal fields after explicit bindings and confirmed inputs.',
23
+ evidence: description.messages.map((message) => ({
24
+ kind: 'message',
25
+ messageId: message.id,
26
+ })),
27
+ },
28
+ }
29
+ : {}),
30
+ },
31
+ });
32
+ if (!input.model || typeof input.model.withStructuredOutput !== 'function')
33
+ throw new Error('generateWorkflowDraftApiCallArguments.model must support structured output when literal inputs remain');
34
+ const output = await input.model
35
+ .withStructuredOutput(serializeStructuredOutputSchema(schema, 'draft-2020-12'), {
36
+ name: 'generate_draft_api_call_arguments',
37
+ // Omitted unknown OAS values are intentional. OpenAI strict JSON Schema
38
+ // requires every property, so use the same primary tool transport as
39
+ // generateApiArguments and validate the unchanged schema locally.
40
+ method: 'functionCalling',
41
+ strict: false,
42
+ })
43
+ .invoke([
44
+ new SystemMessage(workflowDraftApiCallArgumentsPrompt),
45
+ new HumanMessage(JSON.stringify({
46
+ clarification: describeWorkflowDraftClarification(input.context),
47
+ planningClarifications: describeWorkflowDraftClarificationOwnership({
48
+ ...input,
49
+ stepId: input.stepId,
50
+ stage: 'api-arguments',
51
+ }),
52
+ instruction: description.instruction,
53
+ messages: description.messages,
54
+ backgroundMessages: description.backgroundMessages,
55
+ operation: {
56
+ key: description.operation.key,
57
+ method: description.operation.method,
58
+ path: description.operation.path,
59
+ summary: description.operation.operation.summary,
60
+ description: description.operation.operation.description,
61
+ },
62
+ requestMediaType: description.requestMediaType,
63
+ literalInputSchema: description.literalInputSchema,
64
+ ...(input.trackRequestedInputs === true
65
+ ? {
66
+ trackRequestedInputs: true,
67
+ requestedInputSchema: description.requestSchema,
68
+ }
69
+ : {}),
70
+ includeExplanations: description.includeExplanations,
71
+ })),
72
+ ]);
73
+ try {
74
+ const parsed = parseStructuredOutput(schema, output, 'draft API call arguments');
75
+ if (!isDeepStrictEqual(parsed, output))
76
+ throw new Error('API call argument output changed during validation');
77
+ return resolveWorkflowDraftApiCallArguments({
78
+ ...input,
79
+ fingerprint: description.fingerprint,
80
+ proposal: parsed,
81
+ });
82
+ }
83
+ catch (cause) {
84
+ if (!(cause instanceof Error))
85
+ throw cause;
86
+ throw new WorkflowDraftApiCallPlanningError({ stage: 'arguments', output }, cause);
87
+ }
88
+ }
@@ -0,0 +1,4 @@
1
+ import type { WorkflowDraftApiInputEditResult } from '@openapi-flow/core';
2
+ import type { GenerateWorkflowDraftApiInputEditsInput } from '../types/workflow-draft-api-input-edit.js';
3
+ /** Only actual selected values. Removals require zero value-generation calls. */
4
+ export declare function generateWorkflowDraftApiInputEdits(input: GenerateWorkflowDraftApiInputEditsInput): Promise<WorkflowDraftApiInputEditResult>;
@@ -0,0 +1,58 @@
1
+ import { HumanMessage, SystemMessage } from '@langchain/core/messages';
2
+ import { describeWorkflowDraftClarification, describeWorkflowDraftClarificationOwnership, createWorkflowDraftApiInputEditValuesSchema, describeWorkflowDraftApiInputEdit, resolveWorkflowDraftApiInputEdits, } from '@openapi-flow/core';
3
+ import { workflowDraftApiInputEditValuesPrompt } from '../prompts/workflow-draft-api-input-edit-prompt.js';
4
+ import { WorkflowDraftApiInputEditPlanningError } from './workflow-draft-api-input-edit-planning-error.js';
5
+ import { parseStructuredOutput } from '../legacy/planning/parse-structured-output.js';
6
+ import { serializeStructuredOutputSchema } from '../schemas/serialize-structured-output-schema.js';
7
+ import { createWorkflowMessageEvidenceSelectionSchema } from '../schemas/create-workflow-message-evidence-selection-schema.js';
8
+ /** Only actual selected values. Removals require zero value-generation calls. */
9
+ export async function generateWorkflowDraftApiInputEdits(input) {
10
+ const described = describeWorkflowDraftApiInputEdit(input);
11
+ const schema = createWorkflowDraftApiInputEditValuesSchema(input, createWorkflowMessageEvidenceSelectionSchema(described.messages));
12
+ const contract = structuredClone(input.contract);
13
+ if (!contract.targets.some((target) => target.kind === 'set'))
14
+ return resolveWorkflowDraftApiInputEdits({
15
+ ...input,
16
+ output: { values: {} },
17
+ });
18
+ if (!input.model || typeof input.model.withStructuredOutput !== 'function')
19
+ throw new Error('generateWorkflowDraftApiInputEdits.model must support structured output when set-values remain');
20
+ const output = await input.model
21
+ .withStructuredOutput(serializeStructuredOutputSchema(schema, 'draft-2020-12', 'input'), {
22
+ name: 'generate_draft_api_input_edit_values',
23
+ method: 'jsonSchema',
24
+ strict: true,
25
+ })
26
+ .invoke([
27
+ new SystemMessage(workflowDraftApiInputEditValuesPrompt),
28
+ new HumanMessage(JSON.stringify({
29
+ clarification: describeWorkflowDraftClarification(input.context),
30
+ planningClarifications: describeWorkflowDraftClarificationOwnership({
31
+ ...input,
32
+ stepId: input.stepId,
33
+ stage: 'api-arguments',
34
+ }),
35
+ instruction: described.instruction,
36
+ messages: described.messages,
37
+ targets: contract.targets.filter((target) => target.kind === 'set'),
38
+ includeExplanations: described.includeExplanations,
39
+ })),
40
+ ]);
41
+ try {
42
+ const parsed = parseStructuredOutput(schema, output, 'draft API input edit values');
43
+ const result = resolveWorkflowDraftApiInputEdits({
44
+ ...input,
45
+ output: parsed,
46
+ });
47
+ if (JSON.stringify(input.contract) !== JSON.stringify(contract) ||
48
+ JSON.stringify(describeWorkflowDraftApiInputEdit(input)) !==
49
+ JSON.stringify(described))
50
+ throw new Error('Draft API input edit source changed during value generation; no automatic rebase');
51
+ return result;
52
+ }
53
+ catch (cause) {
54
+ if (!(cause instanceof Error))
55
+ throw cause;
56
+ throw new WorkflowDraftApiInputEditPlanningError({ stage: 'values', output }, cause);
57
+ }
58
+ }
@@ -0,0 +1,4 @@
1
+ import type { WorkflowDraftNativeNodeAdditionResult } from '@openapi-flow/core';
2
+ import type { GenerateWorkflowDraftNativeNodeAdditionInput } from '../types/workflow-draft-native-node-addition.js';
3
+ /** One selected instance, zero or one model call; the original draft is never adopted here. */
4
+ export declare function generateWorkflowDraftNativeNodeAddition(input: GenerateWorkflowDraftNativeNodeAdditionInput): Promise<WorkflowDraftNativeNodeAdditionResult>;
@@ -0,0 +1,137 @@
1
+ import { HumanMessage, SystemMessage } from '@langchain/core/messages';
2
+ import { isDeepStrictEqual } from 'node:util';
3
+ import { describeWorkflowDraftClarification, describeWorkflowDraftClarificationOwnership, describeWorkflowDraftNativeNodeAddition, createWorkflowDraftNativeNodeAdditionSchema, resolveWorkflowDraftNativeNodeAddition, validateWorkflowDraftNativeNodeParameterOwnershipContract, } from '@openapi-flow/core';
4
+ import { serializeStructuredOutputSchema } from '../schemas/serialize-structured-output-schema.js';
5
+ import { parseStructuredOutput } from '../legacy/planning/parse-structured-output.js';
6
+ import { workflowDraftNativeNodeAdditionPrompt } from '../prompts/workflow-draft-native-node-addition-prompt.js';
7
+ import { WorkflowDraftNativeNodeAdditionPlanningError } from './workflow-draft-native-node-addition-planning-error.js';
8
+ /** One selected instance, zero or one model call; the original draft is never adopted here. */
9
+ export async function generateWorkflowDraftNativeNodeAddition(input) {
10
+ const description = describeWorkflowDraftNativeNodeAddition(input);
11
+ const ownership = input.parameterOwnership === undefined
12
+ ? undefined
13
+ : validateWorkflowDraftNativeNodeParameterOwnershipContract(input);
14
+ const originalOwnership = JSON.stringify(input.parameterOwnership);
15
+ if (ownership !== undefined && !ownership.hasLiteralParameters)
16
+ return resolveWorkflowDraftNativeNodeAddition({
17
+ ...input,
18
+ fingerprint: description.fingerprint,
19
+ proposal: {
20
+ decision: {
21
+ ...(ownership.runtimeParameters === true
22
+ ? { status: 'runtime-parameters' }
23
+ : { status: 'provided', parameters: {} }),
24
+ sourceMessageIds: ownership.proposal.decision.sourceMessageIds,
25
+ ...(ownership.proposal.decision.explanation === undefined
26
+ ? {}
27
+ : { explanation: ownership.proposal.decision.explanation }),
28
+ },
29
+ },
30
+ });
31
+ if (description.parameterMode === 'fixed-empty') {
32
+ return resolveWorkflowDraftNativeNodeAddition({
33
+ ...input,
34
+ fingerprint: description.fingerprint,
35
+ proposal: {
36
+ decision: {
37
+ status: 'provided',
38
+ parameters: {},
39
+ sourceMessageIds: description.messages.map((message) => message.id),
40
+ ...(description.includeExplanations
41
+ ? {
42
+ explanation: {
43
+ reason: 'The registered configuration admits exactly one value: the empty object.',
44
+ evidence: description.messages.map((message) => ({
45
+ kind: 'message',
46
+ messageId: message.id,
47
+ })),
48
+ },
49
+ }
50
+ : {}),
51
+ },
52
+ },
53
+ });
54
+ }
55
+ if (!input.model || typeof input.model.withStructuredOutput !== 'function')
56
+ throw new Error('generateWorkflowDraftNativeNodeAddition.model must support structured output for parameter choices');
57
+ const schema = createWorkflowDraftNativeNodeAdditionSchema(input);
58
+ const output = await input.model
59
+ .withStructuredOutput(serializeStructuredOutputSchema(schema, 'draft-2020-12'), {
60
+ name: 'generate_draft_native_node_addition',
61
+ method: 'jsonSchema',
62
+ strict: true,
63
+ })
64
+ .invoke([
65
+ new SystemMessage(workflowDraftNativeNodeAdditionPrompt),
66
+ new HumanMessage(JSON.stringify({
67
+ clarification: describeWorkflowDraftClarification(input.context),
68
+ planningClarifications: describeWorkflowDraftClarificationOwnership({
69
+ ...input,
70
+ stepId: input.stepId,
71
+ stage: 'native-parameters',
72
+ }),
73
+ instruction: description.instruction,
74
+ ...(description.plannedNativeRoles === undefined
75
+ ? {}
76
+ : {
77
+ nodeId: description.nodeId,
78
+ stepId: input.stepId,
79
+ plannedNativeRoles: description.plannedNativeRoles,
80
+ }),
81
+ ...(description.sourceDependencies === undefined
82
+ ? {}
83
+ : { sourceDependencies: description.sourceDependencies }),
84
+ capability: description.capability,
85
+ parametersSchema: ownership === undefined
86
+ ? description.parametersSchema
87
+ : ownership.literalParametersSchema,
88
+ ...(ownership === undefined
89
+ ? {}
90
+ : { runtimeParameters: ownership.runtimeParameters }),
91
+ sourceCandidates: description.sources.values.map((source) => source.kind === 'native'
92
+ ? source
93
+ : {
94
+ kind: source.kind,
95
+ nodeId: source.nodeId,
96
+ preparation: source.preparation,
97
+ operation: {
98
+ method: source.operation.method,
99
+ path: source.operation.path,
100
+ summary: source.operation.operation.summary,
101
+ description: source.operation.operation.description,
102
+ responses: source.operation.operation.responses,
103
+ },
104
+ responsePointerCatalog: source.responsePointerCatalog,
105
+ }),
106
+ exclusiveOutputSources: description.sources.exclusiveOutputs,
107
+ messages: description.messages,
108
+ backgroundMessages: description.backgroundMessages,
109
+ includeExplanations: description.includeExplanations,
110
+ })),
111
+ ]);
112
+ let proposal;
113
+ try {
114
+ proposal = parseStructuredOutput(schema, output, 'native node addition');
115
+ if (!isDeepStrictEqual(proposal, output))
116
+ throw new Error('Native node addition output must validate without defaults, coercion or transformation');
117
+ }
118
+ catch (cause) {
119
+ if (!(cause instanceof Error))
120
+ throw cause;
121
+ throw new WorkflowDraftNativeNodeAdditionPlanningError({ stage: 'proposal-schema', output }, cause);
122
+ }
123
+ try {
124
+ if (JSON.stringify(input.parameterOwnership) !== originalOwnership)
125
+ throw new Error('Native addition ownership changed during value generation; no automatic rebase');
126
+ return resolveWorkflowDraftNativeNodeAddition({
127
+ ...input,
128
+ fingerprint: description.fingerprint,
129
+ proposal,
130
+ });
131
+ }
132
+ catch (cause) {
133
+ if (!(cause instanceof Error))
134
+ throw cause;
135
+ throw new WorkflowDraftNativeNodeAdditionPlanningError({ stage: 'node-validation', output }, cause);
136
+ }
137
+ }
@@ -0,0 +1,3 @@
1
+ import type { WorkflowDraftNativeParameterEditResult } from '@openapi-flow/core';
2
+ import type { GenerateWorkflowDraftNativeParameterEditsInput } from '../types/workflow-draft-native-parameter-edit.js';
3
+ export declare function generateWorkflowDraftNativeParameterEdits(input: GenerateWorkflowDraftNativeParameterEditsInput): Promise<WorkflowDraftNativeParameterEditResult>;
@@ -0,0 +1,71 @@
1
+ import { HumanMessage, SystemMessage } from '@langchain/core/messages';
2
+ import { describeWorkflowDraftClarification, describeWorkflowDraftClarificationOwnership, describeWorkflowDraftNativeParameterEdit, createWorkflowDraftNativeParameterEditValuesSchema, resolveWorkflowDraftNativeParameterEdits, } from '@openapi-flow/core';
3
+ import { workflowDraftNativeParameterEditValuesPrompt } from '../prompts/workflow-draft-native-parameter-edit-prompt.js';
4
+ import { serializeStructuredOutputSchema } from '../schemas/serialize-structured-output-schema.js';
5
+ import { createWorkflowMessageEvidenceSelectionSchema } from '../schemas/create-workflow-message-evidence-selection-schema.js';
6
+ import { parseStructuredOutput } from '../legacy/planning/parse-structured-output.js';
7
+ import { WorkflowDraftNativeParameterEditPlanningError } from './workflow-draft-native-parameter-edit-planning-error.js';
8
+ export async function generateWorkflowDraftNativeParameterEdits(input) {
9
+ const context = describeWorkflowDraftNativeParameterEdit(input);
10
+ const schema = createWorkflowDraftNativeParameterEditValuesSchema(input, createWorkflowMessageEvidenceSelectionSchema(context.messages));
11
+ const originalContract = JSON.stringify(input.contract);
12
+ if (!input.contract.targets.some((target) => target.kind === 'set'))
13
+ return resolveWorkflowDraftNativeParameterEdits({
14
+ ...input,
15
+ output: { values: {} },
16
+ });
17
+ if (!input.model || typeof input.model.withStructuredOutput !== 'function')
18
+ throw new Error('generateWorkflowDraftNativeParameterEdits.model must support structured output for set values');
19
+ const output = await input.model
20
+ .withStructuredOutput(serializeStructuredOutputSchema(schema, 'draft-2020-12', 'input'), {
21
+ name: 'generate_draft_native_parameter_edit_values',
22
+ method: 'jsonSchema',
23
+ strict: true,
24
+ })
25
+ .invoke([
26
+ new SystemMessage(workflowDraftNativeParameterEditValuesPrompt),
27
+ new HumanMessage(JSON.stringify({
28
+ clarification: describeWorkflowDraftClarification(input.context),
29
+ planningClarifications: describeWorkflowDraftClarificationOwnership({
30
+ ...input,
31
+ stepId: input.stepId,
32
+ stage: 'native-parameters',
33
+ }),
34
+ instruction: context.instruction,
35
+ capability: context.capability,
36
+ targets: input.contract.targets.filter((target) => target.kind === 'set'),
37
+ sourceCandidates: context.sourceCandidates.map((source) => source.kind === 'native'
38
+ ? source
39
+ : {
40
+ kind: source.kind,
41
+ nodeId: source.nodeId,
42
+ preparation: source.preparation,
43
+ operation: {
44
+ method: source.operation.method,
45
+ path: source.operation.path,
46
+ summary: source.operation.operation.summary,
47
+ description: source.operation.operation.description,
48
+ responses: source.operation.operation.responses,
49
+ },
50
+ responsePointerCatalog: source.responsePointerCatalog,
51
+ }),
52
+ messages: context.messages,
53
+ exclusiveOutputSources: context.exclusiveOutputSources,
54
+ includeExplanations: context.includeExplanations,
55
+ })),
56
+ ]);
57
+ try {
58
+ const parsed = parseStructuredOutput(schema, output, 'draft native parameter edit values');
59
+ if (JSON.stringify(input.contract) !== originalContract)
60
+ throw new Error('Native parameter edit contract changed during generation; no automatic rebase');
61
+ return resolveWorkflowDraftNativeParameterEdits({
62
+ ...input,
63
+ output: parsed,
64
+ });
65
+ }
66
+ catch (cause) {
67
+ if (!(cause instanceof Error))
68
+ throw cause;
69
+ throw new WorkflowDraftNativeParameterEditPlanningError({ stage: 'values', output }, cause);
70
+ }
71
+ }
@@ -0,0 +1,4 @@
1
+ import type { WorkflowDraftApiBindingEditResult } from '@openapi-flow/core';
2
+ import type { PlanWorkflowDraftApiBindingEditInput } from '../types/workflow-draft-api-binding-edit.js';
3
+ /** One bounded semantic call, usable for an unfinished step or code-derived repair. */
4
+ export declare function planWorkflowDraftApiBindingEdit(input: PlanWorkflowDraftApiBindingEditInput): Promise<WorkflowDraftApiBindingEditResult>;
@@ -0,0 +1,103 @@
1
+ import { HumanMessage, SystemMessage } from '@langchain/core/messages';
2
+ import { describeWorkflowDraftClarification, describeWorkflowDraftClarificationOwnership, describeWorkflowDraftApiBindingEdit, createWorkflowDraftApiBindingEditProposalSchema, resolveWorkflowDraftApiBindingEdit, } from '@openapi-flow/core';
3
+ import { workflowDraftApiBindingEditPrompt } from '../prompts/workflow-draft-api-binding-edit-prompt.js';
4
+ import { serializeStructuredOutputSchema } from '../schemas/serialize-structured-output-schema.js';
5
+ import { parseStructuredOutput } from '../legacy/planning/parse-structured-output.js';
6
+ import { WorkflowDraftApiBindingEditPlanningError } from './workflow-draft-api-binding-edit-planning-error.js';
7
+ import { createWorkflowMessageEvidenceSelectionSchema } from '../schemas/create-workflow-message-evidence-selection-schema.js';
8
+ /** One bounded semantic call, usable for an unfinished step or code-derived repair. */
9
+ export async function planWorkflowDraftApiBindingEdit(input) {
10
+ const context = describeWorkflowDraftApiBindingEdit(input);
11
+ if (!input.model || typeof input.model.withStructuredOutput !== 'function')
12
+ throw new Error('planWorkflowDraftApiBindingEdit.model must support structured output');
13
+ const schema = createWorkflowDraftApiBindingEditProposalSchema(context, createWorkflowMessageEvidenceSelectionSchema(context.messages));
14
+ const output = await input.model
15
+ .withStructuredOutput(serializeStructuredOutputSchema(schema, 'draft-7', 'input'), {
16
+ name: 'plan_draft_api_binding_edit',
17
+ method: 'jsonSchema',
18
+ strict: true,
19
+ })
20
+ .invoke([
21
+ new SystemMessage(workflowDraftApiBindingEditPrompt),
22
+ new HumanMessage(JSON.stringify({
23
+ clarification: describeWorkflowDraftClarification(input.context),
24
+ planningClarifications: context.scope.kind === 'step'
25
+ ? describeWorkflowDraftClarificationOwnership({
26
+ ...input,
27
+ stepId: context.scope.stepId,
28
+ stage: 'api-bindings',
29
+ })
30
+ : [],
31
+ mode: context.scope.kind,
32
+ instruction: context.instruction,
33
+ target: {
34
+ values: context.call.values,
35
+ bindings: context.call.bindings,
36
+ requestSchema: context.requestSchema,
37
+ operation: {
38
+ method: context.operation.method,
39
+ path: context.operation.path,
40
+ summary: context.operation.operation.summary,
41
+ description: context.operation.operation.description,
42
+ parameters: context.operation.effective.parameters,
43
+ requestBody: context.operation.operation.requestBody,
44
+ },
45
+ },
46
+ sourceCandidates: context.sourceCandidates.map((source) => source.kind === 'native'
47
+ ? source
48
+ : {
49
+ nodeId: source.nodeId,
50
+ kind: source.kind,
51
+ operation: {
52
+ method: source.operation.method,
53
+ path: source.operation.path,
54
+ summary: source.operation.operation.summary,
55
+ description: source.operation.operation.description,
56
+ responses: source.operation.operation.responses,
57
+ },
58
+ responsePointerCatalog: source.responsePointerCatalog,
59
+ preparation: source.preparation,
60
+ requirements: source.requirements,
61
+ }),
62
+ requiredTargetPointers: context.requiredTargetPointers,
63
+ messages: context.messages,
64
+ backgroundMessages: context.backgroundMessages,
65
+ pendingSourceChanges: input.plan.steps.flatMap((step) => {
66
+ const decision = step.decision;
67
+ return context.stage.pendingResolutionStepIds.includes(step.id) &&
68
+ 'nodeId' in decision &&
69
+ context.sourceCandidates.some((source) => source.nodeId === decision.nodeId)
70
+ ? [
71
+ {
72
+ nodeId: decision.nodeId,
73
+ kind: decision.kind,
74
+ instruction: decision.instruction,
75
+ },
76
+ ]
77
+ : [];
78
+ }),
79
+ includeExplanations: context.includeExplanations,
80
+ })),
81
+ ]);
82
+ let proposal;
83
+ try {
84
+ proposal = parseStructuredOutput(schema, output, 'draft API binding edit');
85
+ }
86
+ catch (cause) {
87
+ if (!(cause instanceof Error))
88
+ throw cause;
89
+ throw new WorkflowDraftApiBindingEditPlanningError({ stage: 'proposal-schema', output }, cause);
90
+ }
91
+ try {
92
+ return resolveWorkflowDraftApiBindingEdit({
93
+ ...input,
94
+ fingerprint: context.fingerprint,
95
+ proposal,
96
+ });
97
+ }
98
+ catch (cause) {
99
+ if (!(cause instanceof Error))
100
+ throw cause;
101
+ throw new WorkflowDraftApiBindingEditPlanningError({ stage: 'proposal-validation', output }, cause);
102
+ }
103
+ }
@@ -0,0 +1,3 @@
1
+ import type { WorkflowDraftApiCallBindingResult } from '@openapi-flow/core';
2
+ import type { PlanWorkflowDraftApiCallBindingsInput } from '../types/workflow-draft-api-call-planning.js';
3
+ export declare function planWorkflowDraftApiCallBindings(input: PlanWorkflowDraftApiCallBindingsInput): Promise<WorkflowDraftApiCallBindingResult>;
@@ -0,0 +1,114 @@
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ import { HumanMessage, SystemMessage } from '@langchain/core/messages';
3
+ import { describeWorkflowDraftClarification, describeWorkflowDraftClarificationOwnership, describeWorkflowDraftApiCallBindings, createWorkflowDraftApiCallBindingsSchema, resolveWorkflowDraftApiCallBindings, } from '@openapi-flow/core';
4
+ import { workflowDraftApiCallBindingsPrompt } from '../prompts/workflow-draft-api-call-planning-prompt.js';
5
+ import { serializeStructuredOutputSchema } from '../schemas/serialize-structured-output-schema.js';
6
+ import { parseStructuredOutput } from '../legacy/planning/parse-structured-output.js';
7
+ import { WorkflowDraftApiCallPlanningError } from './workflow-draft-api-call-planning-error.js';
8
+ export async function planWorkflowDraftApiCallBindings(input) {
9
+ const description = describeWorkflowDraftApiCallBindings(input);
10
+ const schema = createWorkflowDraftApiCallBindingsSchema(input);
11
+ const planningClarifications = describeWorkflowDraftClarificationOwnership({
12
+ ...input,
13
+ stepId: input.stepId,
14
+ stage: 'api-bindings',
15
+ });
16
+ const noPredecessorChoice = !description.hasOtherSelectedNodes &&
17
+ !description.sources.values.length &&
18
+ !planningClarifications.length;
19
+ if (!description.hasRequestInputs ||
20
+ description.inputIntent?.targets.length === 0 ||
21
+ (description.inputIntent === undefined && noPredecessorChoice))
22
+ return resolveWorkflowDraftApiCallBindings({
23
+ ...input,
24
+ fingerprint: description.fingerprint,
25
+ proposal: {
26
+ decision: {
27
+ status: 'provided',
28
+ sourceMessageIds: description.messages.map((message) => message.id),
29
+ ...(description.includeExplanations
30
+ ? {
31
+ explanation: {
32
+ reason: !description.hasRequestInputs
33
+ ? 'The selected OAS declares no request input fields, so there are no request fields to bind.'
34
+ : description.inputIntent !== undefined
35
+ ? 'The validated input intent requests no predecessor data. Unspecified optional inputs are not binding questions; required literals remain the OAS argument stage responsibility.'
36
+ : 'The selected graph has no other API/native instance and no declared binding concern. There is no predecessor choice; missing literal values remain the argument stage responsibility.',
37
+ evidence: description.messages.map((message) => ({
38
+ kind: 'message',
39
+ messageId: message.id,
40
+ })),
41
+ },
42
+ }
43
+ : {}),
44
+ },
45
+ },
46
+ });
47
+ if (!input.model || typeof input.model.withStructuredOutput !== 'function')
48
+ throw new Error('planWorkflowDraftApiCallBindings.model must support structured output when request inputs exist');
49
+ const output = await input.model
50
+ .withStructuredOutput(serializeStructuredOutputSchema(schema, 'draft-2020-12'), {
51
+ name: 'plan_draft_api_call_bindings',
52
+ method: 'jsonSchema',
53
+ strict: true,
54
+ })
55
+ .invoke([
56
+ new SystemMessage(workflowDraftApiCallBindingsPrompt),
57
+ new HumanMessage(JSON.stringify({
58
+ clarification: describeWorkflowDraftClarification(input.context),
59
+ planningClarifications,
60
+ instruction: description.instruction,
61
+ messages: description.messages,
62
+ backgroundMessages: description.backgroundMessages,
63
+ operation: {
64
+ key: description.operation.key,
65
+ method: description.operation.method,
66
+ path: description.operation.path,
67
+ summary: description.operation.operation.summary,
68
+ description: description.operation.operation.description,
69
+ },
70
+ ...(description.bindingTargets === undefined
71
+ ? {
72
+ requestSchema: description.requestSchema,
73
+ requestInputRoots: description.requestInputRoots,
74
+ }
75
+ : { bindingTargets: description.bindingTargets }),
76
+ requestMediaType: description.requestMediaType,
77
+ sourceCandidates: description.sources.values.map((source) => source.kind === 'native'
78
+ ? source
79
+ : {
80
+ kind: source.kind,
81
+ nodeId: source.nodeId,
82
+ preparation: source.preparation,
83
+ operation: {
84
+ key: source.operation.key,
85
+ method: source.operation.method,
86
+ path: source.operation.path,
87
+ responses: source.operation.operation.responses,
88
+ summary: source.operation.operation.summary,
89
+ description: source.operation.operation.description,
90
+ },
91
+ responsePointerCatalog: source.responsePointerCatalog,
92
+ }),
93
+ ...(description.previousCall === undefined
94
+ ? {}
95
+ : { previousCall: description.previousCall }),
96
+ includeExplanations: description.includeExplanations,
97
+ })),
98
+ ]);
99
+ try {
100
+ const parsed = parseStructuredOutput(schema, output, 'draft API call bindings');
101
+ if (!isDeepStrictEqual(parsed, output))
102
+ throw new Error('API call binding output changed during validation');
103
+ return resolveWorkflowDraftApiCallBindings({
104
+ ...input,
105
+ fingerprint: description.fingerprint,
106
+ proposal: parsed,
107
+ });
108
+ }
109
+ catch (cause) {
110
+ if (!(cause instanceof Error))
111
+ throw cause;
112
+ throw new WorkflowDraftApiCallPlanningError({ stage: 'bindings', output }, cause);
113
+ }
114
+ }
@@ -0,0 +1,4 @@
1
+ import type { ResolvedWorkflowDraftClarificationScopes } from '@openapi-flow/core';
2
+ import type { PlanWorkflowDraftClarificationScopesInput } from '../types/workflow-draft-clarification.js';
3
+ /** One semantic scope choice. No calls when there are no requirements or only the workflow scope exists. */
4
+ export declare function planWorkflowDraftClarificationScopes(input: PlanWorkflowDraftClarificationScopesInput): Promise<ResolvedWorkflowDraftClarificationScopes>;