@n8n/instance-ai 1.4.0 → 1.5.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 (149) hide show
  1. package/dist/agent/instance-agent.js +0 -1
  2. package/dist/agent/instance-agent.js.map +1 -1
  3. package/dist/agent/sub-agent-debriefing.d.ts +2 -2
  4. package/dist/agent/system-prompt.js +36 -14
  5. package/dist/agent/system-prompt.js.map +1 -1
  6. package/dist/build.tsbuildinfo +1 -1
  7. package/dist/constants/model-settings.d.ts +3 -0
  8. package/dist/constants/model-settings.js +7 -0
  9. package/dist/constants/model-settings.js.map +1 -0
  10. package/dist/index.d.ts +4 -2
  11. package/dist/index.js +4 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/logger.d.ts +6 -0
  14. package/dist/planned-tasks/planned-task-permissions.d.ts +2 -0
  15. package/dist/planned-tasks/planned-task-permissions.js +8 -2
  16. package/dist/planned-tasks/planned-task-permissions.js.map +1 -1
  17. package/dist/planned-tasks/planned-task-service.d.ts +14 -1
  18. package/dist/planned-tasks/planned-task-service.js +138 -2
  19. package/dist/planned-tasks/planned-task-service.js.map +1 -1
  20. package/dist/runtime/background-task-manager.d.ts +25 -1
  21. package/dist/runtime/background-task-manager.js +66 -2
  22. package/dist/runtime/background-task-manager.js.map +1 -1
  23. package/dist/runtime/builder-sandbox-session-registry.d.ts +45 -0
  24. package/dist/runtime/builder-sandbox-session-registry.js +159 -0
  25. package/dist/runtime/builder-sandbox-session-registry.js.map +1 -0
  26. package/dist/runtime/run-state-registry.d.ts +7 -4
  27. package/dist/runtime/run-state-registry.js +9 -0
  28. package/dist/runtime/run-state-registry.js.map +1 -1
  29. package/dist/storage/planned-task-storage.js +2 -1
  30. package/dist/storage/planned-task-storage.js.map +1 -1
  31. package/dist/storage/workflow-loop-storage.d.ts +292 -12
  32. package/dist/stream/consume-with-hitl.d.ts +1 -0
  33. package/dist/stream/consume-with-hitl.js +1 -0
  34. package/dist/stream/consume-with-hitl.js.map +1 -1
  35. package/dist/tools/data-tables.tool.js +60 -22
  36. package/dist/tools/data-tables.tool.js.map +1 -1
  37. package/dist/tools/executions.tool.js +4 -1
  38. package/dist/tools/executions.tool.js.map +1 -1
  39. package/dist/tools/index.d.ts +1 -2
  40. package/dist/tools/index.js +2 -3
  41. package/dist/tools/index.js.map +1 -1
  42. package/dist/tools/orchestration/add-plan-item.tool.js +3 -1
  43. package/dist/tools/orchestration/add-plan-item.tool.js.map +1 -1
  44. package/dist/tools/orchestration/blueprint-accumulator.d.ts +4 -1
  45. package/dist/tools/orchestration/blueprint-accumulator.js +28 -0
  46. package/dist/tools/orchestration/blueprint-accumulator.js.map +1 -1
  47. package/dist/tools/orchestration/blueprint.schema.d.ts +60 -15
  48. package/dist/tools/orchestration/blueprint.schema.js +15 -1
  49. package/dist/tools/orchestration/blueprint.schema.js.map +1 -1
  50. package/dist/tools/orchestration/build-workflow-agent.prompt.js +41 -12
  51. package/dist/tools/orchestration/build-workflow-agent.prompt.js.map +1 -1
  52. package/dist/tools/orchestration/build-workflow-agent.tool.d.ts +51 -3
  53. package/dist/tools/orchestration/build-workflow-agent.tool.js +837 -272
  54. package/dist/tools/orchestration/build-workflow-agent.tool.js.map +1 -1
  55. package/dist/tools/orchestration/builder-memory-compaction.d.ts +38 -0
  56. package/dist/tools/orchestration/builder-memory-compaction.js +146 -0
  57. package/dist/tools/orchestration/builder-memory-compaction.js.map +1 -0
  58. package/dist/tools/orchestration/complete-checkpoint.tool.d.ts +2 -0
  59. package/dist/tools/orchestration/complete-checkpoint.tool.js +76 -0
  60. package/dist/tools/orchestration/complete-checkpoint.tool.js.map +1 -0
  61. package/dist/tools/orchestration/data-table-agent.tool.js +33 -17
  62. package/dist/tools/orchestration/data-table-agent.tool.js.map +1 -1
  63. package/dist/tools/orchestration/delegate.tool.js +32 -16
  64. package/dist/tools/orchestration/delegate.tool.js.map +1 -1
  65. package/dist/tools/orchestration/plan-agent-prompt.d.ts +1 -1
  66. package/dist/tools/orchestration/plan-agent-prompt.js +6 -0
  67. package/dist/tools/orchestration/plan-agent-prompt.js.map +1 -1
  68. package/dist/tools/orchestration/plan-with-agent.tool.d.ts +8 -0
  69. package/dist/tools/orchestration/plan-with-agent.tool.js +43 -12
  70. package/dist/tools/orchestration/plan-with-agent.tool.js.map +1 -1
  71. package/dist/tools/orchestration/plan.tool.js +17 -1
  72. package/dist/tools/orchestration/plan.tool.js.map +1 -1
  73. package/dist/tools/orchestration/report-verification-verdict.tool.d.ts +40 -2
  74. package/dist/tools/orchestration/report-verification-verdict.tool.js +85 -6
  75. package/dist/tools/orchestration/report-verification-verdict.tool.js.map +1 -1
  76. package/dist/tools/orchestration/research-with-agent.tool.js +32 -16
  77. package/dist/tools/orchestration/research-with-agent.tool.js.map +1 -1
  78. package/dist/tools/orchestration/verify-built-workflow.tool.d.ts +8 -2
  79. package/dist/tools/orchestration/verify-built-workflow.tool.js +476 -6
  80. package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
  81. package/dist/tools/research.tool.js +2 -2
  82. package/dist/tools/research.tool.js.map +1 -1
  83. package/dist/tools/templates.tool.js +5 -90
  84. package/dist/tools/templates.tool.js.map +1 -1
  85. package/dist/tools/web-research/sanitize-web-content.d.ts +0 -1
  86. package/dist/tools/web-research/sanitize-web-content.js +0 -9
  87. package/dist/tools/web-research/sanitize-web-content.js.map +1 -1
  88. package/dist/tools/workflows/apply-workflow-credentials.tool.d.ts +2 -2
  89. package/dist/tools/workflows/build-workflow.tool.d.ts +2 -2
  90. package/dist/tools/workflows/build-workflow.tool.js +3 -1
  91. package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
  92. package/dist/tools/workflows/materialize-node-type.tool.d.ts +8 -8
  93. package/dist/tools/workflows/submit-workflow-identity.d.ts +23 -1
  94. package/dist/tools/workflows/submit-workflow-identity.js +92 -5
  95. package/dist/tools/workflows/submit-workflow-identity.js.map +1 -1
  96. package/dist/tools/workflows/submit-workflow.tool.d.ts +48 -3
  97. package/dist/tools/workflows/submit-workflow.tool.js +81 -11
  98. package/dist/tools/workflows/submit-workflow.tool.js.map +1 -1
  99. package/dist/tracing/langsmith-tracing.js +8 -3
  100. package/dist/tracing/langsmith-tracing.js.map +1 -1
  101. package/dist/tracing/trace-replay.d.ts +3 -0
  102. package/dist/tracing/trace-replay.js +65 -0
  103. package/dist/tracing/trace-replay.js.map +1 -1
  104. package/dist/types.d.ts +79 -12
  105. package/dist/workflow-builder/parse-validate.d.ts +5 -1
  106. package/dist/workflow-builder/parse-validate.js +4 -3
  107. package/dist/workflow-builder/parse-validate.js.map +1 -1
  108. package/dist/workflow-loop/guidance.js +8 -2
  109. package/dist/workflow-loop/guidance.js.map +1 -1
  110. package/dist/workflow-loop/index.d.ts +3 -2
  111. package/dist/workflow-loop/index.js +9 -1
  112. package/dist/workflow-loop/index.js.map +1 -1
  113. package/dist/workflow-loop/remediation.d.ts +13 -0
  114. package/dist/workflow-loop/remediation.js +36 -0
  115. package/dist/workflow-loop/remediation.js.map +1 -0
  116. package/dist/workflow-loop/runtime.js +7 -0
  117. package/dist/workflow-loop/runtime.js.map +1 -1
  118. package/dist/workflow-loop/workflow-loop-controller.d.ts +1 -1
  119. package/dist/workflow-loop/workflow-loop-controller.js +196 -29
  120. package/dist/workflow-loop/workflow-loop-controller.js.map +1 -1
  121. package/dist/workflow-loop/workflow-loop-state.d.ts +338 -8
  122. package/dist/workflow-loop/workflow-loop-state.js +44 -1
  123. package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
  124. package/dist/workflow-loop/workflow-task-service.d.ts +2 -1
  125. package/dist/workflow-loop/workflow-task-service.js +4 -0
  126. package/dist/workflow-loop/workflow-task-service.js.map +1 -1
  127. package/dist/workspace/builder-sandbox-factory.d.ts +3 -2
  128. package/dist/workspace/builder-sandbox-factory.js +74 -27
  129. package/dist/workspace/builder-sandbox-factory.js.map +1 -1
  130. package/dist/workspace/create-workspace.d.ts +2 -0
  131. package/dist/workspace/create-workspace.js.map +1 -1
  132. package/dist/workspace/sandbox-setup.js +36 -8
  133. package/dist/workspace/sandbox-setup.js.map +1 -1
  134. package/dist/workspace/snapshot-manager.d.ts +14 -2
  135. package/dist/workspace/snapshot-manager.js +57 -1
  136. package/dist/workspace/snapshot-manager.js.map +1 -1
  137. package/package.json +11 -5
  138. package/dist/tools/templates/template-api.d.ts +0 -21
  139. package/dist/tools/templates/template-api.js +0 -104
  140. package/dist/tools/templates/template-api.js.map +0 -1
  141. package/dist/tools/templates/types.d.ts +0 -52
  142. package/dist/tools/templates/types.js +0 -37
  143. package/dist/tools/templates/types.js.map +0 -1
  144. package/dist/tools/utils/mermaid.utils.d.ts +0 -15
  145. package/dist/tools/utils/mermaid.utils.js +0 -622
  146. package/dist/tools/utils/mermaid.utils.js.map +0 -1
  147. package/dist/tools/utils/node-configuration.utils.d.ts +0 -6
  148. package/dist/tools/utils/node-configuration.utils.js +0 -77
  149. package/dist/tools/utils/node-configuration.utils.js.map +0 -1
package/dist/types.d.ts CHANGED
@@ -5,12 +5,14 @@ import type { Workspace } from '@mastra/core/workspace';
5
5
  import type { Memory } from '@mastra/memory';
6
6
  import type { TaskList, InstanceAiAttachment, InstanceAiPermissions, McpTool, McpToolCallRequest, McpToolCallResult } from '@n8n/api-types';
7
7
  import type { WorkflowJSON } from '@n8n/workflow-sdk';
8
+ import type { GenericValue, INodeTypes } from 'n8n-workflow';
8
9
  import type { DomainAccessTracker } from './domain-access/domain-access-tracker';
9
10
  import type { InstanceAiEventBus } from './event-bus/event-bus.interface';
10
11
  import type { Logger } from './logger';
12
+ import type { BuilderSandboxSessionRegistry } from './runtime/builder-sandbox-session-registry';
11
13
  import type { IterationLog } from './storage/iteration-log';
12
14
  import type { IdRemapper, TraceIndex, TraceWriter } from './tracing/trace-replay';
13
- import type { VerificationResult, WorkflowBuildOutcome, WorkflowLoopAction } from './workflow-loop/workflow-loop-state';
15
+ import type { VerificationResult, WorkflowBuildOutcome, WorkflowLoopAction, WorkflowLoopState } from './workflow-loop/workflow-loop-state';
14
16
  import type { BuilderSandboxFactory } from './workspace/builder-sandbox-factory';
15
17
  export interface WorkflowSummary {
16
18
  id: string;
@@ -281,6 +283,10 @@ export interface SearchableNodeDescription {
281
283
  required: boolean;
282
284
  displayOptions?: Record<string, unknown>;
283
285
  }>;
286
+ outputs?: Record<string, {
287
+ required?: boolean;
288
+ displayOptions?: Record<string, unknown>;
289
+ }>;
284
290
  };
285
291
  }
286
292
  export interface DataTableSummary {
@@ -309,6 +315,9 @@ export interface DataTableFilterInput {
309
315
  value: string | number | boolean | null;
310
316
  }>;
311
317
  }
318
+ export interface DataTableIdOptions {
319
+ projectId?: string;
320
+ }
312
321
  export interface InstanceAiDataTableService {
313
322
  list(options?: {
314
323
  projectId?: string;
@@ -319,35 +328,36 @@ export interface InstanceAiDataTableService {
319
328
  }>, options?: {
320
329
  projectId?: string;
321
330
  }): Promise<DataTableSummary>;
322
- delete(dataTableId: string): Promise<void>;
323
- getSchema(dataTableId: string): Promise<DataTableColumnInfo[]>;
331
+ delete(dataTableId: string, options?: DataTableIdOptions): Promise<void>;
332
+ getSchema(dataTableId: string, options?: DataTableIdOptions): Promise<DataTableColumnInfo[]>;
324
333
  addColumn(dataTableId: string, column: {
325
334
  name: string;
326
335
  type: 'string' | 'number' | 'boolean' | 'date';
327
- }): Promise<DataTableColumnInfo>;
328
- deleteColumn(dataTableId: string, columnId: string): Promise<void>;
329
- renameColumn(dataTableId: string, columnId: string, newName: string): Promise<void>;
336
+ }, options?: DataTableIdOptions): Promise<DataTableColumnInfo>;
337
+ deleteColumn(dataTableId: string, columnId: string, options?: DataTableIdOptions): Promise<void>;
338
+ renameColumn(dataTableId: string, columnId: string, newName: string, options?: DataTableIdOptions): Promise<void>;
330
339
  queryRows(dataTableId: string, options?: {
331
340
  filter?: DataTableFilterInput;
332
341
  limit?: number;
333
342
  offset?: number;
343
+ projectId?: string;
334
344
  }): Promise<{
335
345
  count: number;
336
346
  data: Array<Record<string, unknown>>;
337
347
  }>;
338
- insertRows(dataTableId: string, rows: Array<Record<string, unknown>>): Promise<{
348
+ insertRows(dataTableId: string, rows: Array<Record<string, unknown>>, options?: DataTableIdOptions): Promise<{
339
349
  insertedCount: number;
340
350
  dataTableId: string;
341
351
  tableName: string;
342
352
  projectId: string;
343
353
  }>;
344
- updateRows(dataTableId: string, filter: DataTableFilterInput, data: Record<string, unknown>): Promise<{
354
+ updateRows(dataTableId: string, filter: DataTableFilterInput, data: Record<string, unknown>, options?: DataTableIdOptions): Promise<{
345
355
  updatedCount: number;
346
356
  dataTableId: string;
347
357
  tableName: string;
348
358
  projectId: string;
349
359
  }>;
350
- deleteRows(dataTableId: string, filter: DataTableFilterInput): Promise<{
360
+ deleteRows(dataTableId: string, filter: DataTableFilterInput, options?: DataTableIdOptions): Promise<{
351
361
  deletedCount: number;
352
362
  dataTableId: string;
353
363
  tableName: string;
@@ -446,6 +456,7 @@ export interface InstanceAiContext {
446
456
  localMcpServer?: LocalMcpServer;
447
457
  localGatewayStatus?: LocalGatewayStatus;
448
458
  permissions?: InstanceAiPermissions;
459
+ allowedRunWorkflowIds?: ReadonlySet<string>;
449
460
  branchReadOnly?: boolean;
450
461
  licenseHints?: string[];
451
462
  domainAccessTracker?: DomainAccessTracker;
@@ -453,12 +464,13 @@ export interface InstanceAiContext {
453
464
  aiCreatedWorkflowIds?: Set<string>;
454
465
  currentUserAttachments?: InstanceAiAttachment[];
455
466
  logger?: Logger;
467
+ nodeTypesProvider?: INodeTypes;
456
468
  }
457
469
  export interface TaskStorage {
458
470
  get(threadId: string): Promise<TaskList | null>;
459
471
  save(threadId: string, tasks: TaskList): Promise<void>;
460
472
  }
461
- export type PlannedTaskKind = 'delegate' | 'build-workflow' | 'manage-data-tables' | 'research';
473
+ export type PlannedTaskKind = 'delegate' | 'build-workflow' | 'manage-data-tables' | 'research' | 'checkpoint';
462
474
  export interface PlannedTask {
463
475
  id: string;
464
476
  title: string;
@@ -479,7 +491,7 @@ export interface PlannedTaskRecord extends PlannedTask {
479
491
  startedAt?: number;
480
492
  finishedAt?: number;
481
493
  }
482
- export type PlannedTaskGraphStatus = 'active' | 'awaiting_replan' | 'completed' | 'cancelled';
494
+ export type PlannedTaskGraphStatus = 'awaiting_approval' | 'active' | 'awaiting_replan' | 'completed' | 'cancelled';
483
495
  export interface PlannedTaskGraph {
484
496
  planRunId: string;
485
497
  messageGroupId?: string;
@@ -493,6 +505,10 @@ export type PlannedTaskSchedulerAction = {
493
505
  type: 'dispatch';
494
506
  graph: PlannedTaskGraph;
495
507
  tasks: PlannedTaskRecord[];
508
+ } | {
509
+ type: 'orchestrate-checkpoint';
510
+ graph: PlannedTaskGraph;
511
+ tasks: PlannedTaskRecord[];
496
512
  } | {
497
513
  type: 'replan';
498
514
  graph: PlannedTaskGraph;
@@ -525,11 +541,35 @@ export interface PlannedTaskService {
525
541
  error?: string;
526
542
  finishedAt?: number;
527
543
  }): Promise<PlannedTaskGraph | null>;
544
+ markCheckpointSucceeded(threadId: string, taskId: string, update: {
545
+ result?: string;
546
+ outcome?: Record<string, unknown>;
547
+ finishedAt?: number;
548
+ }): Promise<CheckpointSettleResult>;
549
+ markCheckpointFailed(threadId: string, taskId: string, update: {
550
+ error?: string;
551
+ outcome?: Record<string, unknown>;
552
+ finishedAt?: number;
553
+ }): Promise<CheckpointSettleResult>;
554
+ revertCheckpointToPlanned(threadId: string, taskId: string): Promise<CheckpointSettleResult>;
528
555
  tick(threadId: string, options?: {
529
556
  availableSlots?: number;
530
557
  }): Promise<PlannedTaskSchedulerAction>;
531
558
  clear(threadId: string): Promise<void>;
559
+ approvePlan(threadId: string): Promise<PlannedTaskGraph | null>;
560
+ revertToActive(threadId: string): Promise<PlannedTaskGraph | null>;
532
561
  }
562
+ export type CheckpointSettleResult = {
563
+ ok: true;
564
+ graph: PlannedTaskGraph;
565
+ } | {
566
+ ok: false;
567
+ reason: 'not-found' | 'wrong-kind' | 'wrong-status';
568
+ actual?: {
569
+ kind?: PlannedTaskKind;
570
+ status?: PlannedTaskStatus;
571
+ };
572
+ };
533
573
  export interface McpServerConfig {
534
574
  name: string;
535
575
  url?: string;
@@ -620,12 +660,35 @@ export interface SpawnBackgroundTaskOptions {
620
660
  traceContext?: InstanceAiTraceContext;
621
661
  plannedTaskId?: string;
622
662
  workItemId?: string;
663
+ dedupeKey?: {
664
+ plannedTaskId?: string;
665
+ workflowId?: string;
666
+ role: string;
667
+ };
668
+ parentCheckpointId?: string;
623
669
  run: (signal: AbortSignal, drainCorrections: () => string[], waitForCorrection: () => Promise<void>) => Promise<string | BackgroundTaskResult>;
624
670
  }
671
+ export type SpawnBackgroundTaskResult = {
672
+ status: 'started';
673
+ taskId: string;
674
+ agentId: string;
675
+ } | {
676
+ status: 'limit-reached';
677
+ } | {
678
+ status: 'duplicate';
679
+ existing: {
680
+ taskId: string;
681
+ agentId: string;
682
+ role: string;
683
+ plannedTaskId?: string;
684
+ workItemId?: string;
685
+ };
686
+ };
625
687
  export interface WorkflowTaskService {
626
688
  reportBuildOutcome(outcome: WorkflowBuildOutcome): Promise<WorkflowLoopAction>;
627
689
  reportVerificationVerdict(verdict: VerificationResult): Promise<WorkflowLoopAction>;
628
690
  getBuildOutcome(workItemId: string): Promise<WorkflowBuildOutcome | undefined>;
691
+ getWorkflowLoopState(workItemId: string): Promise<WorkflowLoopState | undefined>;
629
692
  updateBuildOutcome(workItemId: string, update: Partial<WorkflowBuildOutcome>): Promise<void>;
630
693
  }
631
694
  export interface OrchestrationContext {
@@ -639,6 +702,7 @@ export interface OrchestrationContext {
639
702
  subAgentMaxSteps: number;
640
703
  eventBus: InstanceAiEventBus;
641
704
  logger: Logger;
705
+ trackTelemetry?: (eventName: string, properties: Record<string, GenericValue>) => void;
642
706
  domainTools: ToolsInput;
643
707
  abortSignal: AbortSignal;
644
708
  taskStorage: TaskStorage;
@@ -665,16 +729,19 @@ export interface OrchestrationContext {
665
729
  mcpTools?: ToolsInput;
666
730
  oauth2CallbackUrl?: string;
667
731
  webhookBaseUrl?: string;
668
- spawnBackgroundTask?: (opts: SpawnBackgroundTaskOptions) => void;
732
+ spawnBackgroundTask?: (opts: SpawnBackgroundTaskOptions) => SpawnBackgroundTaskResult;
669
733
  cancelBackgroundTask?: (taskId: string) => Promise<void>;
670
734
  plannedTaskService?: PlannedTaskService;
671
735
  schedulePlannedTasks?: () => Promise<void>;
672
736
  workspace?: Workspace;
673
737
  builderSandboxFactory?: BuilderSandboxFactory;
738
+ builderSandboxSessionRegistry?: BuilderSandboxSessionRegistry;
674
739
  nodeDefinitionDirs?: string[];
675
740
  memory?: Memory;
676
741
  currentUserMessage?: string;
677
742
  isReplanFollowUp?: boolean;
743
+ isCheckpointFollowUp?: boolean;
744
+ checkpointTaskId?: string;
678
745
  domainContext?: InstanceAiContext;
679
746
  researchMode?: boolean;
680
747
  iterationLog?: IterationLog;
@@ -1,5 +1,9 @@
1
+ import type { INodeTypes } from 'n8n-workflow';
1
2
  import type { ParseAndValidateResult, ValidationWarning } from './types';
2
- export declare function parseAndValidate(code: string): ParseAndValidateResult;
3
+ export interface ParseAndValidateOptions {
4
+ nodeTypesProvider?: INodeTypes;
5
+ }
6
+ export declare function parseAndValidate(code: string, options?: ParseAndValidateOptions): ParseAndValidateResult;
3
7
  export declare function partitionWarnings(warnings: ValidationWarning[]): {
4
8
  errors: ValidationWarning[];
5
9
  informational: ValidationWarning[];
@@ -13,17 +13,18 @@ function collectValidationIssues(issues, allWarnings) {
13
13
  });
14
14
  }
15
15
  }
16
- function parseAndValidate(code) {
16
+ function parseAndValidate(code, options = {}) {
17
17
  const codeToParse = (0, extract_code_1.stripImportStatements)(code);
18
+ const { nodeTypesProvider } = options;
18
19
  try {
19
20
  const builder = (0, workflow_sdk_1.parseWorkflowCodeToBuilder)(codeToParse);
20
21
  builder.regenerateNodeIds();
21
22
  const allWarnings = [];
22
- const graphValidation = builder.validate();
23
+ const graphValidation = builder.validate({ nodeTypesProvider });
23
24
  collectValidationIssues(graphValidation.errors, allWarnings);
24
25
  collectValidationIssues(graphValidation.warnings, allWarnings);
25
26
  const json = builder.toJSON();
26
- const schemaValidation = (0, workflow_sdk_1.validateWorkflow)(json);
27
+ const schemaValidation = (0, workflow_sdk_1.validateWorkflow)(json, { nodeTypesProvider, strictMode: true });
27
28
  collectValidationIssues(schemaValidation.errors, allWarnings);
28
29
  collectValidationIssues(schemaValidation.warnings, allWarnings);
29
30
  return { workflow: json, warnings: allWarnings };
@@ -1 +1 @@
1
- {"version":3,"file":"parse-validate.js","sourceRoot":"","sources":["../../src/workflow-builder/parse-validate.ts"],"names":[],"mappings":";;AAgDA,4CA+BC;AAQD,8CAmBC;AAlGD,oDAAiF;AAEjF,iDAAuD;AAavD,SAAS,uBAAuB,CAC/B,MAAyB,EACzB,WAAgC;IAEhC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,WAAW,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACxB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAcD,SAAgB,gBAAgB,CAAC,IAAY;IAE5C,MAAM,WAAW,GAAG,IAAA,oCAAqB,EAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,CAAC;QAEJ,MAAM,OAAO,GAAG,IAAA,yCAA0B,EAAC,WAAW,CAAC,CAAC;QAGxD,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAE5B,MAAM,WAAW,GAAwB,EAAE,CAAC;QAG5C,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC3C,uBAAuB,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7D,uBAAuB,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAG9B,MAAM,gBAAgB,GAAG,IAAA,+BAAgB,EAAC,IAAI,CAAC,CAAC;QAChD,uBAAuB,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC9D,uBAAuB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEhE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACd,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC5F,CAAC;IACH,CAAC;AACF,CAAC;AAQD,SAAgB,iBAAiB,CAAC,QAA6B;IAK9D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE7E,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,aAAa,GAAwB,EAAE,CAAC;IAE9C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"parse-validate.js","sourceRoot":"","sources":["../../src/workflow-builder/parse-validate.ts"],"names":[],"mappings":";;AAyDA,4CAsCC;AAQD,8CAmBC;AAlHD,oDAAiF;AAGjF,iDAAuD;AAqBvD,SAAS,uBAAuB,CAC/B,MAAyB,EACzB,WAAgC;IAEhC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,WAAW,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACxB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAcD,SAAgB,gBAAgB,CAC/B,IAAY,EACZ,UAAmC,EAAE;IAGrC,MAAM,WAAW,GAAG,IAAA,oCAAqB,EAAC,IAAI,CAAC,CAAC;IAEhD,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAEtC,IAAI,CAAC;QAEJ,MAAM,OAAO,GAAG,IAAA,yCAA0B,EAAC,WAAW,CAAC,CAAC;QAGxD,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAE5B,MAAM,WAAW,GAAwB,EAAE,CAAC;QAG5C,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAChE,uBAAuB,CAAC,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7D,uBAAuB,CAAC,eAAe,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE/D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAK9B,MAAM,gBAAgB,GAAG,IAAA,+BAAgB,EAAC,IAAI,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACzF,uBAAuB,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC9D,uBAAuB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEhE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACd,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC5F,CAAC;IACH,CAAC;AACF,CAAC;AAQD,SAAgB,iBAAiB,CAAC,QAA6B;IAK9D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE7E,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,aAAa,GAAwB,EAAE,CAAC;IAE9C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAClC,CAAC"}
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.formatWorkflowLoopGuidance = formatWorkflowLoopGuidance;
4
4
  function formatWorkflowLoopGuidance(action, options = {}) {
5
5
  switch (action.type) {
6
+ case 'ignored':
7
+ return `STALE REPORT IGNORED: ${action.reason}`;
8
+ case 'continue_building':
9
+ return `SUBMIT FAILED: ${action.reason}. Fix the workflow code and call \`submit-workflow\` again.`;
6
10
  case 'done': {
7
11
  if (action.mockedCredentialTypes?.length || action.hasUnresolvedPlaceholders) {
8
12
  return ('Workflow verified successfully with temporary mock data. ' +
@@ -23,7 +27,8 @@ function formatWorkflowLoopGuidance(action, options = {}) {
23
27
  case 'rebuild':
24
28
  return (`REBUILD NEEDED: Workflow "${action.workflowId}" needs structural repair. ` +
25
29
  `Call \`build-workflow-with-agent\` directly with \`workflowId: "${action.workflowId}"\` ` +
26
- '(no plan this is a single-task rebuild, and the `workflowId` parameter is required ' +
30
+ `and \`workItemId: "${options.workItemId ?? 'unknown'}"\` ` +
31
+ '(no plan — this is a single-task rebuild; `workflowId` and `workItemId` are required ' +
27
32
  'so the builder updates the existing workflow instead of creating a duplicate). ' +
28
33
  `In the \`task\` parameter, describe the structural repair and include these details: ${action.failureDetails}`);
29
34
  case 'patch':
@@ -31,7 +36,8 @@ function formatWorkflowLoopGuidance(action, options = {}) {
31
36
  `Diagnosis: ${action.diagnosis}. ` +
32
37
  (action.patch ? `Suggested fix: ${JSON.stringify(action.patch)}. ` : '') +
33
38
  `Call \`build-workflow-with-agent\` directly with \`workflowId: "${action.workflowId}"\` ` +
34
- '(no plan this is a single-task patch, and the `workflowId` parameter is required ' +
39
+ `and \`workItemId: "${options.workItemId ?? 'unknown'}"\` ` +
40
+ '(no plan — this is a single-task patch; `workflowId` and `workItemId` are required ' +
35
41
  'so the builder updates the existing workflow instead of creating a duplicate). ' +
36
42
  'In the `task` parameter, describe the targeted fix to apply.');
37
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"guidance.js","sourceRoot":"","sources":["../../src/workflow-loop/guidance.ts"],"names":[],"mappings":";;AAMA,gEA6CC;AA7CD,SAAgB,0BAA0B,CACzC,MAA0B,EAC1B,UAAuC,EAAE;IAEzC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,IAAI,MAAM,CAAC,qBAAqB,EAAE,MAAM,IAAI,MAAM,CAAC,yBAAyB,EAAE,CAAC;gBAC9E,OAAO,CACN,2DAA2D;oBAC3D,uDAAuD,MAAM,CAAC,UAAU,IAAI,SAAS,IAAI;oBACzF,wFAAwF;oBACxF,6HAA6H,CAC7H,CAAC;YACH,CAAC;YACD,OAAO,iEAAiE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACzI,CAAC;QACD,KAAK,QAAQ;YACZ,OAAO,CACN,wBAAwB,MAAM,CAAC,UAAU,IAAI;gBAC7C,uFAAuF,OAAO,CAAC,UAAU,IAAI,SAAS,KAAK;gBAC3H,4CAA4C;gBAC5C,6DAA6D;gBAC7D,8DAA8D,OAAO,CAAC,UAAU,IAAI,SAAS,sBAAsB,CACnH,CAAC;QACH,KAAK,SAAS;YACb,OAAO,kBAAkB,MAAM,CAAC,MAAM,oDAAoD,CAAC;QAC5F,KAAK,SAAS;YACb,OAAO,CACN,6BAA6B,MAAM,CAAC,UAAU,6BAA6B;gBAC3E,mEAAmE,MAAM,CAAC,UAAU,MAAM;gBAC1F,uFAAuF;gBACvF,iFAAiF;gBACjF,wFAAwF,MAAM,CAAC,cAAc,EAAE,CAC/G,CAAC;QACH,KAAK,OAAO;YACX,OAAO,CACN,uBAAuB,MAAM,CAAC,cAAc,iBAAiB,MAAM,CAAC,UAAU,yBAAyB;gBACvG,cAAc,MAAM,CAAC,SAAS,IAAI;gBAClC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,mEAAmE,MAAM,CAAC,UAAU,MAAM;gBAC1F,qFAAqF;gBACrF,iFAAiF;gBACjF,8DAA8D,CAC9D,CAAC;IACJ,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"guidance.js","sourceRoot":"","sources":["../../src/workflow-loop/guidance.ts"],"names":[],"mappings":";;AAMA,gEAmDC;AAnDD,SAAgB,0BAA0B,CACzC,MAA0B,EAC1B,UAAuC,EAAE;IAEzC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,SAAS;YACb,OAAO,yBAAyB,MAAM,CAAC,MAAM,EAAE,CAAC;QACjD,KAAK,mBAAmB;YACvB,OAAO,kBAAkB,MAAM,CAAC,MAAM,6DAA6D,CAAC;QACrG,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,IAAI,MAAM,CAAC,qBAAqB,EAAE,MAAM,IAAI,MAAM,CAAC,yBAAyB,EAAE,CAAC;gBAC9E,OAAO,CACN,2DAA2D;oBAC3D,uDAAuD,MAAM,CAAC,UAAU,IAAI,SAAS,IAAI;oBACzF,wFAAwF;oBACxF,6HAA6H,CAC7H,CAAC;YACH,CAAC;YACD,OAAO,iEAAiE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACzI,CAAC;QACD,KAAK,QAAQ;YACZ,OAAO,CACN,wBAAwB,MAAM,CAAC,UAAU,IAAI;gBAC7C,uFAAuF,OAAO,CAAC,UAAU,IAAI,SAAS,KAAK;gBAC3H,4CAA4C;gBAC5C,6DAA6D;gBAC7D,8DAA8D,OAAO,CAAC,UAAU,IAAI,SAAS,sBAAsB,CACnH,CAAC;QACH,KAAK,SAAS;YACb,OAAO,kBAAkB,MAAM,CAAC,MAAM,oDAAoD,CAAC;QAC5F,KAAK,SAAS;YACb,OAAO,CACN,6BAA6B,MAAM,CAAC,UAAU,6BAA6B;gBAC3E,mEAAmE,MAAM,CAAC,UAAU,MAAM;gBAC1F,sBAAsB,OAAO,CAAC,UAAU,IAAI,SAAS,MAAM;gBAC3D,uFAAuF;gBACvF,iFAAiF;gBACjF,wFAAwF,MAAM,CAAC,cAAc,EAAE,CAC/G,CAAC;QACH,KAAK,OAAO;YACX,OAAO,CACN,uBAAuB,MAAM,CAAC,cAAc,iBAAiB,MAAM,CAAC,UAAU,yBAAyB;gBACvG,cAAc,MAAM,CAAC,SAAS,IAAI;gBAClC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,mEAAmE,MAAM,CAAC,UAAU,MAAM;gBAC1F,sBAAsB,OAAO,CAAC,UAAU,IAAI,SAAS,MAAM;gBAC3D,qFAAqF;gBACrF,iFAAiF;gBACjF,8DAA8D,CAC9D,CAAC;IACJ,CAAC;AACF,CAAC"}
@@ -1,5 +1,6 @@
1
- export { workflowLoopPhaseSchema, workflowLoopStatusSchema, workflowLoopSourceSchema, workflowLoopStateSchema, attemptActionSchema, attemptResultSchema, attemptRecordSchema, triggerTypeSchema, workflowBuildOutcomeSchema, verificationVerdictSchema, verificationResultSchema, } from './workflow-loop-state';
2
- export type { WorkflowLoopPhase, WorkflowLoopStatus, WorkflowLoopSource, WorkflowLoopState, AttemptAction, AttemptResult, AttemptRecord, TriggerType, WorkflowBuildOutcome, VerificationVerdict, VerificationResult, WorkflowLoopAction, } from './workflow-loop-state';
1
+ export { workflowLoopPhaseSchema, workflowLoopStatusSchema, workflowLoopSourceSchema, remediationCategorySchema, remediationMetadataSchema, workflowLoopStateSchema, attemptActionSchema, attemptResultSchema, attemptRecordSchema, triggerTypeSchema, workflowBuildOutcomeSchema, verificationVerdictSchema, verificationResultSchema, } from './workflow-loop-state';
2
+ export type { WorkflowLoopPhase, WorkflowLoopStatus, WorkflowLoopSource, RemediationCategory, RemediationMetadata, WorkflowLoopState, AttemptAction, AttemptResult, AttemptRecord, TriggerType, WorkflowBuildOutcome, VerificationVerdict, VerificationResult, WorkflowLoopAction, } from './workflow-loop-state';
3
3
  export { createWorkItem, handleBuildOutcome, handleVerificationVerdict, formatAttemptHistory, } from './workflow-loop-controller';
4
4
  export { formatWorkflowLoopGuidance } from './guidance';
5
5
  export { WorkflowTaskCoordinator } from './workflow-task-service';
6
+ export { MAX_POST_SUBMIT_REMEDIATION_SUBMITS, MAX_PRE_SAVE_SUBMIT_FAILURES, createRemediation, remainingPostSubmitRemediations, terminalRemediationFromState, } from './remediation';
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WorkflowTaskCoordinator = exports.formatWorkflowLoopGuidance = exports.formatAttemptHistory = exports.handleVerificationVerdict = exports.handleBuildOutcome = exports.createWorkItem = exports.verificationResultSchema = exports.verificationVerdictSchema = exports.workflowBuildOutcomeSchema = exports.triggerTypeSchema = exports.attemptRecordSchema = exports.attemptResultSchema = exports.attemptActionSchema = exports.workflowLoopStateSchema = exports.workflowLoopSourceSchema = exports.workflowLoopStatusSchema = exports.workflowLoopPhaseSchema = void 0;
3
+ exports.terminalRemediationFromState = exports.remainingPostSubmitRemediations = exports.createRemediation = exports.MAX_PRE_SAVE_SUBMIT_FAILURES = exports.MAX_POST_SUBMIT_REMEDIATION_SUBMITS = exports.WorkflowTaskCoordinator = exports.formatWorkflowLoopGuidance = exports.formatAttemptHistory = exports.handleVerificationVerdict = exports.handleBuildOutcome = exports.createWorkItem = exports.verificationResultSchema = exports.verificationVerdictSchema = exports.workflowBuildOutcomeSchema = exports.triggerTypeSchema = exports.attemptRecordSchema = exports.attemptResultSchema = exports.attemptActionSchema = exports.workflowLoopStateSchema = exports.remediationMetadataSchema = exports.remediationCategorySchema = exports.workflowLoopSourceSchema = exports.workflowLoopStatusSchema = exports.workflowLoopPhaseSchema = void 0;
4
4
  var workflow_loop_state_1 = require("./workflow-loop-state");
5
5
  Object.defineProperty(exports, "workflowLoopPhaseSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowLoopPhaseSchema; } });
6
6
  Object.defineProperty(exports, "workflowLoopStatusSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowLoopStatusSchema; } });
7
7
  Object.defineProperty(exports, "workflowLoopSourceSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowLoopSourceSchema; } });
8
+ Object.defineProperty(exports, "remediationCategorySchema", { enumerable: true, get: function () { return workflow_loop_state_1.remediationCategorySchema; } });
9
+ Object.defineProperty(exports, "remediationMetadataSchema", { enumerable: true, get: function () { return workflow_loop_state_1.remediationMetadataSchema; } });
8
10
  Object.defineProperty(exports, "workflowLoopStateSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowLoopStateSchema; } });
9
11
  Object.defineProperty(exports, "attemptActionSchema", { enumerable: true, get: function () { return workflow_loop_state_1.attemptActionSchema; } });
10
12
  Object.defineProperty(exports, "attemptResultSchema", { enumerable: true, get: function () { return workflow_loop_state_1.attemptResultSchema; } });
@@ -22,4 +24,10 @@ var guidance_1 = require("./guidance");
22
24
  Object.defineProperty(exports, "formatWorkflowLoopGuidance", { enumerable: true, get: function () { return guidance_1.formatWorkflowLoopGuidance; } });
23
25
  var workflow_task_service_1 = require("./workflow-task-service");
24
26
  Object.defineProperty(exports, "WorkflowTaskCoordinator", { enumerable: true, get: function () { return workflow_task_service_1.WorkflowTaskCoordinator; } });
27
+ var remediation_1 = require("./remediation");
28
+ Object.defineProperty(exports, "MAX_POST_SUBMIT_REMEDIATION_SUBMITS", { enumerable: true, get: function () { return remediation_1.MAX_POST_SUBMIT_REMEDIATION_SUBMITS; } });
29
+ Object.defineProperty(exports, "MAX_PRE_SAVE_SUBMIT_FAILURES", { enumerable: true, get: function () { return remediation_1.MAX_PRE_SAVE_SUBMIT_FAILURES; } });
30
+ Object.defineProperty(exports, "createRemediation", { enumerable: true, get: function () { return remediation_1.createRemediation; } });
31
+ Object.defineProperty(exports, "remainingPostSubmitRemediations", { enumerable: true, get: function () { return remediation_1.remainingPostSubmitRemediations; } });
32
+ Object.defineProperty(exports, "terminalRemediationFromState", { enumerable: true, get: function () { return remediation_1.terminalRemediationFromState; } });
25
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow-loop/index.ts"],"names":[],"mappings":";;;AAAA,6DAY+B;AAX9B,8HAAA,uBAAuB,OAAA;AACvB,+HAAA,wBAAwB,OAAA;AACxB,+HAAA,wBAAwB,OAAA;AACxB,8HAAA,uBAAuB,OAAA;AACvB,0HAAA,mBAAmB,OAAA;AACnB,0HAAA,mBAAmB,OAAA;AACnB,0HAAA,mBAAmB,OAAA;AACnB,wHAAA,iBAAiB,OAAA;AACjB,iIAAA,0BAA0B,OAAA;AAC1B,gIAAA,yBAAyB,OAAA;AACzB,+HAAA,wBAAwB,OAAA;AAkBzB,uEAKoC;AAJnC,0HAAA,cAAc,OAAA;AACd,8HAAA,kBAAkB,OAAA;AAClB,qIAAA,yBAAyB,OAAA;AACzB,gIAAA,oBAAoB,OAAA;AAGrB,uCAAwD;AAA/C,sHAAA,0BAA0B,OAAA;AACnC,iEAAkE;AAAzD,gIAAA,uBAAuB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow-loop/index.ts"],"names":[],"mappings":";;;AAAA,6DAc+B;AAb9B,8HAAA,uBAAuB,OAAA;AACvB,+HAAA,wBAAwB,OAAA;AACxB,+HAAA,wBAAwB,OAAA;AACxB,gIAAA,yBAAyB,OAAA;AACzB,gIAAA,yBAAyB,OAAA;AACzB,8HAAA,uBAAuB,OAAA;AACvB,0HAAA,mBAAmB,OAAA;AACnB,0HAAA,mBAAmB,OAAA;AACnB,0HAAA,mBAAmB,OAAA;AACnB,wHAAA,iBAAiB,OAAA;AACjB,iIAAA,0BAA0B,OAAA;AAC1B,gIAAA,yBAAyB,OAAA;AACzB,+HAAA,wBAAwB,OAAA;AAoBzB,uEAKoC;AAJnC,0HAAA,cAAc,OAAA;AACd,8HAAA,kBAAkB,OAAA;AAClB,qIAAA,yBAAyB,OAAA;AACzB,gIAAA,oBAAoB,OAAA;AAGrB,uCAAwD;AAA/C,sHAAA,0BAA0B,OAAA;AACnC,iEAAkE;AAAzD,gIAAA,uBAAuB,OAAA;AAChC,6CAMuB;AALtB,kIAAA,mCAAmC,OAAA;AACnC,2HAAA,4BAA4B,OAAA;AAC5B,gHAAA,iBAAiB,OAAA;AACjB,8HAAA,+BAA+B,OAAA;AAC/B,2HAAA,4BAA4B,OAAA"}
@@ -0,0 +1,13 @@
1
+ import type { RemediationCategory, RemediationMetadata, WorkflowLoopState } from './workflow-loop-state';
2
+ export declare const MAX_PRE_SAVE_SUBMIT_FAILURES = 3;
3
+ export declare const MAX_POST_SUBMIT_REMEDIATION_SUBMITS = 2;
4
+ export declare function createRemediation(input: {
5
+ category: RemediationCategory;
6
+ shouldEdit: boolean;
7
+ guidance: string;
8
+ reason?: string;
9
+ remainingSubmitFixes?: number;
10
+ attemptCount?: number;
11
+ }): RemediationMetadata;
12
+ export declare function remainingPostSubmitRemediations(state: WorkflowLoopState): number;
13
+ export declare function terminalRemediationFromState(state: WorkflowLoopState | undefined, currentRunId?: string): RemediationMetadata | undefined;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_POST_SUBMIT_REMEDIATION_SUBMITS = exports.MAX_PRE_SAVE_SUBMIT_FAILURES = void 0;
4
+ exports.createRemediation = createRemediation;
5
+ exports.remainingPostSubmitRemediations = remainingPostSubmitRemediations;
6
+ exports.terminalRemediationFromState = terminalRemediationFromState;
7
+ exports.MAX_PRE_SAVE_SUBMIT_FAILURES = 3;
8
+ exports.MAX_POST_SUBMIT_REMEDIATION_SUBMITS = 2;
9
+ function createRemediation(input) {
10
+ return input;
11
+ }
12
+ function remainingPostSubmitRemediations(state) {
13
+ return Math.max(0, exports.MAX_POST_SUBMIT_REMEDIATION_SUBMITS - (state.postSubmitRemediationSubmitsUsed ?? 0));
14
+ }
15
+ function terminalRemediationFromState(state, currentRunId) {
16
+ if (!state)
17
+ return undefined;
18
+ if (currentRunId !== undefined && state.runId !== currentRunId)
19
+ return undefined;
20
+ if (state.lastRemediation && !state.lastRemediation.shouldEdit) {
21
+ return state.lastRemediation;
22
+ }
23
+ if (state.successfulSubmitSeen &&
24
+ (state.postSubmitRemediationSubmitsUsed ?? 0) >= exports.MAX_POST_SUBMIT_REMEDIATION_SUBMITS) {
25
+ return createRemediation({
26
+ category: 'blocked',
27
+ shouldEdit: false,
28
+ reason: 'post_submit_budget_exhausted',
29
+ attemptCount: state.postSubmitRemediationSubmitsUsed ?? 0,
30
+ remainingSubmitFixes: 0,
31
+ guidance: 'The workflow was saved, but the automatic repair budget is exhausted. Stop editing and explain the blocker to the user.',
32
+ });
33
+ }
34
+ return undefined;
35
+ }
36
+ //# sourceMappingURL=remediation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remediation.js","sourceRoot":"","sources":["../../src/workflow-loop/remediation.ts"],"names":[],"mappings":";;;AASA,8CASC;AAED,0EAKC;AAED,oEAwBC;AA7CY,QAAA,4BAA4B,GAAG,CAAC,CAAC;AACjC,QAAA,mCAAmC,GAAG,CAAC,CAAC;AAErD,SAAgB,iBAAiB,CAAC,KAOjC;IACA,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAgB,+BAA+B,CAAC,KAAwB;IACvE,OAAO,IAAI,CAAC,GAAG,CACd,CAAC,EACD,2CAAmC,GAAG,CAAC,KAAK,CAAC,gCAAgC,IAAI,CAAC,CAAC,CACnF,CAAC;AACH,CAAC;AAED,SAAgB,4BAA4B,CAC3C,KAAoC,EACpC,YAAqB;IAErB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IACjF,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC,eAAe,CAAC;IAC9B,CAAC;IACD,IACC,KAAK,CAAC,oBAAoB;QAC1B,CAAC,KAAK,CAAC,gCAAgC,IAAI,CAAC,CAAC,IAAI,2CAAmC,EACnF,CAAC;QACF,OAAO,iBAAiB,CAAC;YACxB,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,KAAK;YACjB,MAAM,EAAE,8BAA8B;YACtC,YAAY,EAAE,KAAK,CAAC,gCAAgC,IAAI,CAAC;YACzD,oBAAoB,EAAE,CAAC;YACvB,QAAQ,EACP,yHAAyH;SAC1H,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -6,11 +6,14 @@ function createInitialState(threadId, outcome) {
6
6
  return {
7
7
  workItemId: outcome.workItemId,
8
8
  threadId,
9
+ runId: outcome.runId,
9
10
  workflowId: outcome.workflowId,
10
11
  phase: 'building',
11
12
  status: 'active',
12
13
  source: outcome.workflowId ? 'modify' : 'create',
13
14
  rebuildAttempts: 0,
15
+ preSaveSubmitFailures: 0,
16
+ postSubmitRemediationSubmitsUsed: 0,
14
17
  };
15
18
  }
16
19
  class WorkflowLoopRuntime {
@@ -23,6 +26,8 @@ class WorkflowLoopRuntime {
23
26
  const state = existing?.state ?? createInitialState(threadId, outcome);
24
27
  const attempts = existing?.attempts ?? [];
25
28
  const { state: newState, action, attempt } = (0, workflow_loop_controller_1.handleBuildOutcome)(state, attempts, outcome);
29
+ if (action.type === 'ignored')
30
+ return action;
26
31
  await this.storage.saveWorkItem(threadId, newState, [...attempts, attempt], outcome);
27
32
  return action;
28
33
  }
@@ -32,6 +37,8 @@ class WorkflowLoopRuntime {
32
37
  return { type: 'blocked', reason: `Unknown work item: ${verdict.workItemId}` };
33
38
  }
34
39
  const { state: newState, action, attempt, } = (0, workflow_loop_controller_1.handleVerificationVerdict)(existing.state, existing.attempts, verdict);
40
+ if (action.type === 'ignored')
41
+ return action;
35
42
  await this.storage.saveWorkItem(threadId, newState, [...existing.attempts, attempt]);
36
43
  return action;
37
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/workflow-loop/runtime.ts"],"names":[],"mappings":";;;AAAA,yEAA2F;AAS3F,SAAS,kBAAkB,CAAC,QAAgB,EAAE,OAA6B;IAC1E,OAAO;QACN,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ;QACR,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QAChD,eAAe,EAAE,CAAC;KAClB,CAAC;AACH,CAAC;AAED,MAAa,mBAAmB;IACF;IAA7B,YAA6B,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAE7D,KAAK,CAAC,iBAAiB,CACtB,QAAgB,EAChB,OAA6B;QAE7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC;QAE1C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,6CAAkB,EAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1F,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC7B,QAAgB,EAChB,OAA2B;QAE3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9E,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,sBAAsB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QAChF,CAAC;QAED,MAAM,EACL,KAAK,EAAE,QAAQ,EACf,MAAM,EACN,OAAO,GACP,GAAG,IAAA,oDAAyB,EAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE1E,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC;IACf,CAAC;CACD;AAlCD,kDAkCC"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/workflow-loop/runtime.ts"],"names":[],"mappings":";;;AAAA,yEAA2F;AAS3F,SAAS,kBAAkB,CAAC,QAAgB,EAAE,OAA6B;IAC1E,OAAO;QACN,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ;QACR,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QAChD,eAAe,EAAE,CAAC;QAClB,qBAAqB,EAAE,CAAC;QACxB,gCAAgC,EAAE,CAAC;KACnC,CAAC;AACH,CAAC;AAED,MAAa,mBAAmB;IACF;IAA7B,YAA6B,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAE7D,KAAK,CAAC,iBAAiB,CACtB,QAAgB,EAChB,OAA6B;QAE7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC;QAE1C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,6CAAkB,EAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1F,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAE7C,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC;IACf,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC7B,QAAgB,EAChB,OAA2B;QAE3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9E,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,sBAAsB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QAChF,CAAC;QAED,MAAM,EACL,KAAK,EAAE,QAAQ,EACf,MAAM,EACN,OAAO,GACP,GAAG,IAAA,oDAAyB,EAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1E,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAE7C,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC;IACf,CAAC;CACD;AArCD,kDAqCC"}
@@ -1,5 +1,5 @@
1
1
  import type { AttemptRecord, WorkflowBuildOutcome, WorkflowLoopAction, WorkflowLoopSource, WorkflowLoopState, VerificationResult } from './workflow-loop-state';
2
- export declare function createWorkItem(threadId: string, source: WorkflowLoopSource, workflowId?: string): WorkflowLoopState;
2
+ export declare function createWorkItem(threadId: string, source: WorkflowLoopSource, workflowId?: string, runId?: string): WorkflowLoopState;
3
3
  interface TransitionResult {
4
4
  state: WorkflowLoopState;
5
5
  action: WorkflowLoopAction;