@synergenius/flow-weaver 0.3.0 → 0.4.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/README.md +1 -0
  2. package/dist/annotation-generator.js +36 -0
  3. package/dist/api/generate-in-place.js +39 -0
  4. package/dist/api/generate.js +11 -1
  5. package/dist/api/manipulation/nodes.js +22 -0
  6. package/dist/ast/types.d.ts +27 -1
  7. package/dist/built-in-nodes/index.d.ts +1 -0
  8. package/dist/built-in-nodes/index.js +1 -0
  9. package/dist/built-in-nodes/invoke-workflow.js +12 -1
  10. package/dist/built-in-nodes/mock-types.d.ts +2 -0
  11. package/dist/built-in-nodes/wait-for-agent.d.ts +13 -0
  12. package/dist/built-in-nodes/wait-for-agent.js +26 -0
  13. package/dist/chevrotain-parser/fan-parser.d.ts +38 -0
  14. package/dist/chevrotain-parser/fan-parser.js +149 -0
  15. package/dist/chevrotain-parser/grammar-diagrams.d.ts +1 -0
  16. package/dist/chevrotain-parser/grammar-diagrams.js +3 -0
  17. package/dist/chevrotain-parser/index.d.ts +3 -1
  18. package/dist/chevrotain-parser/index.js +3 -1
  19. package/dist/chevrotain-parser/tokens.d.ts +2 -0
  20. package/dist/chevrotain-parser/tokens.js +10 -0
  21. package/dist/cli/commands/diagram.d.ts +2 -1
  22. package/dist/cli/commands/diagram.js +9 -6
  23. package/dist/cli/commands/run.js +59 -1
  24. package/dist/cli/flow-weaver.mjs +1396 -77
  25. package/dist/cli/index.js +23 -36
  26. package/dist/diagram/geometry.js +47 -5
  27. package/dist/diagram/html-viewer.d.ts +12 -0
  28. package/dist/diagram/html-viewer.js +399 -0
  29. package/dist/diagram/index.d.ts +12 -0
  30. package/dist/diagram/index.js +22 -0
  31. package/dist/diagram/types.d.ts +1 -0
  32. package/dist/doc-metadata/extractors/annotations.js +282 -1
  33. package/dist/doc-metadata/types.d.ts +6 -0
  34. package/dist/generator/control-flow.d.ts +13 -0
  35. package/dist/generator/control-flow.js +74 -0
  36. package/dist/generator/inngest.js +23 -0
  37. package/dist/generator/unified.js +122 -2
  38. package/dist/jsdoc-parser.d.ts +24 -0
  39. package/dist/jsdoc-parser.js +41 -1
  40. package/dist/mcp/agent-channel.d.ts +35 -0
  41. package/dist/mcp/agent-channel.js +61 -0
  42. package/dist/mcp/run-registry.d.ts +29 -0
  43. package/dist/mcp/run-registry.js +24 -0
  44. package/dist/mcp/tools-diagram.d.ts +1 -1
  45. package/dist/mcp/tools-diagram.js +15 -7
  46. package/dist/mcp/tools-editor.js +75 -3
  47. package/dist/mcp/workflow-executor.d.ts +28 -0
  48. package/dist/mcp/workflow-executor.js +62 -1
  49. package/dist/parser.d.ts +8 -0
  50. package/dist/parser.js +100 -0
  51. package/dist/runtime/ExecutionContext.d.ts +2 -0
  52. package/dist/runtime/ExecutionContext.js +2 -0
  53. package/dist/runtime/events.d.ts +1 -1
  54. package/dist/sugar-optimizer.js +28 -3
  55. package/dist/validator.d.ts +8 -0
  56. package/dist/validator.js +92 -0
  57. package/docs/reference/advanced-annotations.md +431 -0
  58. package/docs/reference/built-in-nodes.md +225 -0
  59. package/docs/reference/cli-reference.md +882 -0
  60. package/docs/reference/compilation.md +351 -0
  61. package/docs/reference/concepts.md +400 -0
  62. package/docs/reference/debugging.md +255 -0
  63. package/docs/reference/deployment.md +207 -0
  64. package/docs/reference/error-codes.md +686 -0
  65. package/docs/reference/export-interface.md +229 -0
  66. package/docs/reference/iterative-development.md +186 -0
  67. package/docs/reference/jsdoc-grammar.md +471 -0
  68. package/docs/reference/marketplace.md +205 -0
  69. package/docs/reference/node-conversion.md +308 -0
  70. package/docs/reference/patterns.md +161 -0
  71. package/docs/reference/scaffold.md +160 -0
  72. package/docs/reference/tutorial.md +519 -0
  73. package/package.json +37 -1
@@ -3,7 +3,9 @@
3
3
  */
4
4
  import * as path from 'path';
5
5
  import * as fs from 'fs';
6
+ import * as readline from 'readline';
6
7
  import { executeWorkflowFromFile } from '../../mcp/workflow-executor.js';
8
+ import { AgentChannel } from '../../mcp/agent-channel.js';
7
9
  import { logger } from '../utils/logger.js';
8
10
  import { getFriendlyError } from '../../friendly-errors.js';
9
11
  import { getErrorMessage } from '../../utils/error-utils.js';
@@ -104,12 +106,56 @@ export async function runCommand(input, options) {
104
106
  if (!options.json && mocks) {
105
107
  logger.info('Running with mock data');
106
108
  }
107
- const result = await executeWorkflowFromFile(filePath, params, {
109
+ const channel = new AgentChannel();
110
+ const execPromise = executeWorkflowFromFile(filePath, params, {
108
111
  workflowName: options.workflow,
109
112
  production: options.production ?? false,
110
113
  includeTrace,
111
114
  mocks,
115
+ agentChannel: channel,
112
116
  });
117
+ let result;
118
+ let execDone = false;
119
+ // Race loop: detect pauses, prompt user, resume
120
+ while (!execDone) {
121
+ const raceResult = await Promise.race([
122
+ execPromise.then((r) => ({ type: 'completed', result: r })),
123
+ channel.onPause().then((req) => ({ type: 'paused', request: req })),
124
+ ]);
125
+ if (raceResult.type === 'completed') {
126
+ result = raceResult.result;
127
+ execDone = true;
128
+ }
129
+ else {
130
+ // Workflow paused at waitForAgent
131
+ const request = raceResult.request;
132
+ if (!process.stdin.isTTY) {
133
+ throw new Error('Workflow paused at waitForAgent but stdin is not interactive. ' +
134
+ 'Use --mocks to provide agent responses.');
135
+ }
136
+ // Display prompt info to stderr (keeps stdout clean for --json)
137
+ const label = request.prompt || `Agent "${request.agentId}" is requesting input`;
138
+ if (!options.json) {
139
+ logger.newline();
140
+ logger.section('Waiting for Input');
141
+ logger.info(label);
142
+ if (request.context && Object.keys(request.context).length > 0) {
143
+ logger.log(` Context: ${JSON.stringify(request.context, null, 2)}`);
144
+ }
145
+ }
146
+ // Prompt user for JSON response
147
+ const userInput = await promptForInput('Enter response (JSON): ');
148
+ let parsed;
149
+ try {
150
+ parsed = JSON.parse(userInput);
151
+ }
152
+ catch {
153
+ // If not valid JSON, wrap as { response: "..." }
154
+ parsed = { response: userInput };
155
+ }
156
+ channel.resume(parsed);
157
+ }
158
+ }
113
159
  if (timedOut)
114
160
  return; // Don't output if already timed out
115
161
  if (options.json) {
@@ -188,4 +234,16 @@ export async function runCommand(input, options) {
188
234
  }
189
235
  }
190
236
  }
237
+ function promptForInput(question) {
238
+ return new Promise((resolve) => {
239
+ const rl = readline.createInterface({
240
+ input: process.stdin,
241
+ output: process.stderr, // prompts to stderr, not stdout
242
+ });
243
+ rl.question(question, (answer) => {
244
+ rl.close();
245
+ resolve(answer.trim());
246
+ });
247
+ });
248
+ }
191
249
  //# sourceMappingURL=run.js.map