@n8n/instance-ai 1.10.0 → 1.11.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 (221) hide show
  1. package/README.md +128 -0
  2. package/dist/agent/instance-agent.js +8 -0
  3. package/dist/agent/instance-agent.js.map +1 -1
  4. package/dist/agent/shared-prompts.d.ts +1 -0
  5. package/dist/agent/shared-prompts.js +25 -0
  6. package/dist/agent/shared-prompts.js.map +1 -1
  7. package/dist/agent/sub-agent-debriefing.d.ts +8 -8
  8. package/dist/agent/system-prompt.d.ts +2 -0
  9. package/dist/agent/system-prompt.js +52 -93
  10. package/dist/agent/system-prompt.js.map +1 -1
  11. package/dist/build.tsbuildinfo +1 -1
  12. package/dist/constants/max-steps.d.ts +0 -1
  13. package/dist/constants/max-steps.js +0 -1
  14. package/dist/constants/max-steps.js.map +1 -1
  15. package/dist/index.d.ts +123 -33
  16. package/dist/index.js +103 -96
  17. package/dist/index.js.map +1 -1
  18. package/dist/knowledge-base/build-templates-index.d.ts +12 -0
  19. package/dist/knowledge-base/build-templates-index.js +113 -0
  20. package/dist/knowledge-base/build-templates-index.js.map +1 -0
  21. package/dist/knowledge-base/extract-builder-templates-archive.d.ts +2 -0
  22. package/dist/knowledge-base/extract-builder-templates-archive.js +89 -0
  23. package/dist/knowledge-base/extract-builder-templates-archive.js.map +1 -0
  24. package/dist/knowledge-base/materialize-knowledge-base.d.ts +67 -0
  25. package/dist/knowledge-base/materialize-knowledge-base.js +186 -0
  26. package/dist/knowledge-base/materialize-knowledge-base.js.map +1 -0
  27. package/dist/mcp/mcp-client-manager.js +6 -1
  28. package/dist/mcp/mcp-client-manager.js.map +1 -1
  29. package/dist/parsers/pdf-parser.js +4 -0
  30. package/dist/parsers/pdf-parser.js.map +1 -1
  31. package/dist/planned-tasks/planned-task-service.d.ts +5 -1
  32. package/dist/planned-tasks/planned-task-service.js +29 -1
  33. package/dist/planned-tasks/planned-task-service.js.map +1 -1
  34. package/dist/runtime/run-state-registry.d.ts +8 -0
  35. package/dist/runtime/run-state-registry.js.map +1 -1
  36. package/dist/runtime/terminal-response-guard.d.ts +2 -1
  37. package/dist/runtime/terminal-response-guard.js +20 -0
  38. package/dist/runtime/terminal-response-guard.js.map +1 -1
  39. package/dist/skills/materialize-runtime-skills.d.ts +1 -7
  40. package/dist/skills/materialize-runtime-skills.js +96 -176
  41. package/dist/skills/materialize-runtime-skills.js.map +1 -1
  42. package/dist/storage/index.d.ts +1 -1
  43. package/dist/storage/planned-task-storage.js +1 -0
  44. package/dist/storage/planned-task-storage.js.map +1 -1
  45. package/dist/storage/terminal-outcome-storage.d.ts +2 -2
  46. package/dist/storage/workflow-loop-storage.d.ts +199 -70
  47. package/dist/storage/workflow-loop-storage.js +107 -0
  48. package/dist/storage/workflow-loop-storage.js.map +1 -1
  49. package/dist/stream/work-summary-accumulator.d.ts +6 -6
  50. package/dist/tools/attachments/parse-file.tool.d.ts +18 -18
  51. package/dist/tools/credentials.tool.d.ts +2 -5
  52. package/dist/tools/credentials.tool.js +2 -6
  53. package/dist/tools/credentials.tool.js.map +1 -1
  54. package/dist/tools/executions.tool.js +53 -7
  55. package/dist/tools/executions.tool.js.map +1 -1
  56. package/dist/tools/index.js +3 -9
  57. package/dist/tools/index.js.map +1 -1
  58. package/dist/tools/nodes/node-search-engine.d.ts +2 -0
  59. package/dist/tools/nodes/node-search-engine.js +66 -7
  60. package/dist/tools/nodes/node-search-engine.js.map +1 -1
  61. package/dist/tools/nodes.tool.js +10 -3
  62. package/dist/tools/nodes.tool.js.map +1 -1
  63. package/dist/tools/orchestration/complete-checkpoint.tool.js +69 -0
  64. package/dist/tools/orchestration/complete-checkpoint.tool.js.map +1 -1
  65. package/dist/tools/orchestration/delegate.schemas.d.ts +5 -5
  66. package/dist/tools/orchestration/delegate.tool.js +1 -1
  67. package/dist/tools/orchestration/delegate.tool.js.map +1 -1
  68. package/dist/tools/orchestration/plan.tool.js +96 -60
  69. package/dist/tools/orchestration/plan.tool.js.map +1 -1
  70. package/dist/tools/orchestration/report-verification-verdict.tool.d.ts +9 -6
  71. package/dist/tools/orchestration/report-verification-verdict.tool.js +6 -1
  72. package/dist/tools/orchestration/report-verification-verdict.tool.js.map +1 -1
  73. package/dist/tools/orchestration/verify-built-workflow.tool.js +3 -2
  74. package/dist/tools/orchestration/verify-built-workflow.tool.js.map +1 -1
  75. package/dist/tools/tool-ids.d.ts +0 -5
  76. package/dist/tools/tool-ids.js +3 -7
  77. package/dist/tools/tool-ids.js.map +1 -1
  78. package/dist/tools/workflows/build-workflow.tool.d.ts +8 -2
  79. package/dist/tools/workflows/build-workflow.tool.js +371 -17
  80. package/dist/tools/workflows/build-workflow.tool.js.map +1 -1
  81. package/dist/tools/workflows/materialize-node-type.tool.d.ts +4 -4
  82. package/dist/tools/workflows/materialize-node-type.tool.js +2 -2
  83. package/dist/tools/workflows/materialize-node-type.tool.js.map +1 -1
  84. package/dist/tools/workflows/setup-workflow.schema.d.ts +32 -32
  85. package/dist/tools/workflows/submit-workflow.tool.d.ts +16 -12
  86. package/dist/tools/workflows/submit-workflow.tool.js +9 -2
  87. package/dist/tools/workflows/submit-workflow.tool.js.map +1 -1
  88. package/dist/tools/workflows/write-sandbox-file.tool.js +2 -2
  89. package/dist/tools/workflows/write-sandbox-file.tool.js.map +1 -1
  90. package/dist/tools/workflows.tool.js +5 -0
  91. package/dist/tools/workflows.tool.js.map +1 -1
  92. package/dist/tracing/langsmith-tracing.js +6 -1
  93. package/dist/tracing/langsmith-tracing.js.map +1 -1
  94. package/dist/tracing/trace-payloads.js +2 -6
  95. package/dist/tracing/trace-payloads.js.map +1 -1
  96. package/dist/types.d.ts +48 -9
  97. package/dist/types.js.map +1 -1
  98. package/dist/workflow-builder/build-failure-tracker.d.ts +10 -0
  99. package/dist/workflow-builder/build-failure-tracker.js +36 -0
  100. package/dist/workflow-builder/build-failure-tracker.js.map +1 -0
  101. package/dist/workflow-builder/index.d.ts +1 -0
  102. package/dist/workflow-builder/index.js +4 -1
  103. package/dist/workflow-builder/index.js.map +1 -1
  104. package/dist/workflow-loop/guidance.js +10 -6
  105. package/dist/workflow-loop/guidance.js.map +1 -1
  106. package/dist/workflow-loop/index.d.ts +3 -2
  107. package/dist/workflow-loop/index.js +14 -1
  108. package/dist/workflow-loop/index.js.map +1 -1
  109. package/dist/workflow-loop/runtime.js +3 -1
  110. package/dist/workflow-loop/runtime.js.map +1 -1
  111. package/dist/workflow-loop/verification-obligation.d.ts +15 -0
  112. package/dist/workflow-loop/verification-obligation.js +140 -0
  113. package/dist/workflow-loop/verification-obligation.js.map +1 -0
  114. package/dist/workflow-loop/workflow-loop-controller.js +26 -1
  115. package/dist/workflow-loop/workflow-loop-controller.js.map +1 -1
  116. package/dist/workflow-loop/workflow-loop-state.d.ts +416 -62
  117. package/dist/workflow-loop/workflow-loop-state.js +66 -1
  118. package/dist/workflow-loop/workflow-loop-state.js.map +1 -1
  119. package/dist/workspace/builder-templates-service.js.map +1 -1
  120. package/dist/workspace/compute-workspace-content-hash.d.ts +1 -0
  121. package/dist/workspace/compute-workspace-content-hash.js +15 -0
  122. package/dist/workspace/compute-workspace-content-hash.js.map +1 -0
  123. package/dist/workspace/create-workspace.d.ts +9 -43
  124. package/dist/workspace/create-workspace.js +45 -56
  125. package/dist/workspace/create-workspace.js.map +1 -1
  126. package/dist/workspace/lazy-runtime-workspace.js +1 -1
  127. package/dist/workspace/lazy-runtime-workspace.js.map +1 -1
  128. package/dist/workspace/prebaked-workspace-bundle.d.ts +39 -0
  129. package/dist/workspace/prebaked-workspace-bundle.js +75 -0
  130. package/dist/workspace/prebaked-workspace-bundle.js.map +1 -0
  131. package/dist/workspace/sandbox-fs.d.ts +9 -24
  132. package/dist/workspace/sandbox-fs.js +2 -16
  133. package/dist/workspace/sandbox-fs.js.map +1 -1
  134. package/dist/workspace/sandbox-setup.d.ts +1 -7
  135. package/dist/workspace/sandbox-setup.js +28 -170
  136. package/dist/workspace/sandbox-setup.js.map +1 -1
  137. package/dist/workspace/snapshot-image-context.d.ts +5 -0
  138. package/dist/workspace/snapshot-image-context.js +36 -0
  139. package/dist/workspace/snapshot-image-context.js.map +1 -0
  140. package/dist/workspace/snapshot-manager.d.ts +9 -9
  141. package/dist/workspace/snapshot-manager.js +57 -67
  142. package/dist/workspace/snapshot-manager.js.map +1 -1
  143. package/dist/workspace/template-telemetry.js +4 -4
  144. package/dist/workspace/template-telemetry.js.map +1 -1
  145. package/dist/workspace/workspace-file-content.d.ts +2 -0
  146. package/dist/workspace/workspace-file-content.js +11 -0
  147. package/dist/workspace/workspace-file-content.js.map +1 -0
  148. package/dist/workspace/workspace-files.d.ts +20 -0
  149. package/dist/workspace/workspace-files.js +74 -0
  150. package/dist/workspace/workspace-files.js.map +1 -0
  151. package/dist/workspace/workspace-manifest.d.ts +12 -0
  152. package/dist/workspace/workspace-manifest.js +28 -0
  153. package/dist/workspace/workspace-manifest.js.map +1 -0
  154. package/package.json +19 -13
  155. package/skills/data-table-manager/SKILL.md +6 -6
  156. package/skills/debugging-executions/SKILL.md +44 -0
  157. package/skills/planned-task-runtime/SKILL.md +163 -0
  158. package/skills/planning/SKILL.md +137 -0
  159. package/skills/post-build-flow/SKILL.md +119 -0
  160. package/skills/post-build-flow/references/trigger-input-data-shapes.md +38 -0
  161. package/skills/workflow-builder/SKILL.md +608 -0
  162. package/dist/tools/best-practices/index.d.ts +0 -2
  163. package/dist/tools/best-practices/index.js +0 -10
  164. package/dist/tools/best-practices/index.js.map +0 -1
  165. package/dist/tools/best-practices/techniques.d.ts +0 -1
  166. package/dist/tools/best-practices/techniques.js +0 -7
  167. package/dist/tools/best-practices/techniques.js.map +0 -1
  168. package/dist/tools/orchestration/add-plan-item.tool.d.ts +0 -5
  169. package/dist/tools/orchestration/add-plan-item.tool.js +0 -89
  170. package/dist/tools/orchestration/add-plan-item.tool.js.map +0 -1
  171. package/dist/tools/orchestration/blueprint-accumulator.d.ts +0 -49
  172. package/dist/tools/orchestration/blueprint-accumulator.js +0 -176
  173. package/dist/tools/orchestration/blueprint-accumulator.js.map +0 -1
  174. package/dist/tools/orchestration/blueprint.schema.d.ts +0 -182
  175. package/dist/tools/orchestration/blueprint.schema.js +0 -56
  176. package/dist/tools/orchestration/blueprint.schema.js.map +0 -1
  177. package/dist/tools/orchestration/build-workflow-agent.prompt.d.ts +0 -8
  178. package/dist/tools/orchestration/build-workflow-agent.prompt.js +0 -466
  179. package/dist/tools/orchestration/build-workflow-agent.prompt.js.map +0 -1
  180. package/dist/tools/orchestration/build-workflow-agent.tool.d.ts +0 -148
  181. package/dist/tools/orchestration/build-workflow-agent.tool.js +0 -1498
  182. package/dist/tools/orchestration/build-workflow-agent.tool.js.map +0 -1
  183. package/dist/tools/orchestration/builder-memory-compaction.d.ts +0 -42
  184. package/dist/tools/orchestration/builder-memory-compaction.js +0 -132
  185. package/dist/tools/orchestration/builder-memory-compaction.js.map +0 -1
  186. package/dist/tools/orchestration/plan-agent-prompt.d.ts +0 -1
  187. package/dist/tools/orchestration/plan-agent-prompt.js +0 -83
  188. package/dist/tools/orchestration/plan-agent-prompt.js.map +0 -1
  189. package/dist/tools/orchestration/plan-with-agent.tool.d.ts +0 -27
  190. package/dist/tools/orchestration/plan-with-agent.tool.js +0 -710
  191. package/dist/tools/orchestration/plan-with-agent.tool.js.map +0 -1
  192. package/dist/tools/orchestration/submit-plan.tool.d.ts +0 -3
  193. package/dist/tools/orchestration/submit-plan.tool.js +0 -98
  194. package/dist/tools/orchestration/submit-plan.tool.js.map +0 -1
  195. package/dist/tools/templates.tool.d.ts +0 -1
  196. package/dist/tools/templates.tool.js +0 -58
  197. package/dist/tools/templates.tool.js.map +0 -1
  198. package/dist/workspace/daytona-auth-manager.d.ts +0 -26
  199. package/dist/workspace/daytona-auth-manager.js +0 -90
  200. package/dist/workspace/daytona-auth-manager.js.map +0 -1
  201. package/dist/workspace/daytona-filesystem.d.ts +0 -26
  202. package/dist/workspace/daytona-filesystem.js +0 -133
  203. package/dist/workspace/daytona-filesystem.js.map +0 -1
  204. package/dist/workspace/daytona-sandbox.d.ts +0 -65
  205. package/dist/workspace/daytona-sandbox.js +0 -314
  206. package/dist/workspace/daytona-sandbox.js.map +0 -1
  207. package/dist/workspace/lazy-daytona.d.ts +0 -2
  208. package/dist/workspace/lazy-daytona.js +0 -12
  209. package/dist/workspace/lazy-daytona.js.map +0 -1
  210. package/dist/workspace/local-filesystem.d.ts +0 -48
  211. package/dist/workspace/local-filesystem.js +0 -250
  212. package/dist/workspace/local-filesystem.js.map +0 -1
  213. package/dist/workspace/local-sandbox.d.ts +0 -28
  214. package/dist/workspace/local-sandbox.js +0 -121
  215. package/dist/workspace/local-sandbox.js.map +0 -1
  216. package/dist/workspace/n8n-sandbox-filesystem.d.ts +0 -25
  217. package/dist/workspace/n8n-sandbox-filesystem.js +0 -128
  218. package/dist/workspace/n8n-sandbox-filesystem.js.map +0 -1
  219. package/dist/workspace/n8n-sandbox-sandbox.d.ts +0 -35
  220. package/dist/workspace/n8n-sandbox-sandbox.js +0 -143
  221. package/dist/workspace/n8n-sandbox-sandbox.js.map +0 -1
package/dist/types.d.ts CHANGED
@@ -8,7 +8,7 @@ import type { Logger } from './logger';
8
8
  import type { McpClientManager } from './mcp/mcp-client-manager';
9
9
  import type { IterationLog } from './storage/iteration-log';
10
10
  import type { IdRemapper, TraceIndex, TraceWriter } from './tracing/trace-replay';
11
- import type { VerificationResult, WorkflowBuildOutcome, WorkflowLoopAction, WorkflowLoopState } from './workflow-loop/workflow-loop-state';
11
+ import type { VerificationResult, WorkflowBuildOutcome, WorkflowLoopAction, WorkflowLoopState, WorkflowVerificationObligation } from './workflow-loop/workflow-loop-state';
12
12
  import type { BuilderTemplatesService } from './workspace/builder-templates-service';
13
13
  export type InstanceAiToolRegistry = Map<string, BuiltTool>;
14
14
  export interface WorkflowSummary {
@@ -150,9 +150,19 @@ export interface InstanceAiWorkflowService {
150
150
  query?: string;
151
151
  limit?: number;
152
152
  status?: WorkflowListStatus;
153
+ scope?: 'project' | 'instance';
153
154
  }): Promise<WorkflowSummary[]>;
154
155
  get(workflowId: string): Promise<WorkflowDetail>;
155
156
  getAsWorkflowJSON(workflowId: string): Promise<WorkflowJSON>;
157
+ getWorkflowHead(workflowId: string): Promise<{
158
+ versionId: string;
159
+ updatedAt: number;
160
+ }>;
161
+ getWorkflowSnapshot(workflowId: string): Promise<{
162
+ json: WorkflowJSON;
163
+ versionId: string;
164
+ updatedAt: number;
165
+ }>;
156
166
  createFromWorkflowJSON(json: WorkflowJSON, options?: {
157
167
  projectId?: string;
158
168
  markAsAiTemporary?: boolean;
@@ -486,6 +496,7 @@ export type LocalGatewayStatus = {
486
496
  };
487
497
  export interface InstanceAiContext {
488
498
  userId: string;
499
+ projectId?: string;
489
500
  workflowService: InstanceAiWorkflowService;
490
501
  executionService: InstanceAiExecutionService;
491
502
  credentialService: InstanceAiCredentialService;
@@ -498,6 +509,8 @@ export interface InstanceAiContext {
498
509
  localGatewayStatus?: LocalGatewayStatus;
499
510
  permissions?: InstanceAiPermissions;
500
511
  allowedRunWorkflowIds?: ReadonlySet<string>;
512
+ allowedRunWorkflowNames?: ReadonlySet<string>;
513
+ requireRunWorkflowApproval?: boolean;
501
514
  branchReadOnly?: boolean;
502
515
  allowSendingParameterValues?: boolean;
503
516
  licenseHints?: string[];
@@ -507,6 +520,17 @@ export interface InstanceAiContext {
507
520
  currentUserAttachments?: InstanceAiAttachment[];
508
521
  logger?: Logger;
509
522
  nodeTypesProvider?: INodeTypes;
523
+ workflowBuildContext?: {
524
+ threadId: string;
525
+ runId: string;
526
+ taskId: string;
527
+ workItemId: string;
528
+ allowPostPlanWorkflowCreate?: boolean;
529
+ isSupportingWorkflowTask?: boolean;
530
+ plannedTaskService?: PlannedTaskService;
531
+ workflowTaskService?: WorkflowTaskService;
532
+ onBuildOutcome?: (outcome: WorkflowBuildOutcome) => void | Promise<void>;
533
+ };
510
534
  }
511
535
  export interface TaskStorage {
512
536
  get(threadId: string): Promise<TaskList | null>;
@@ -523,6 +547,7 @@ export interface PlannedTask {
523
547
  deps: string[];
524
548
  tools?: string[];
525
549
  workflowId?: string;
550
+ isSupportingWorkflow?: boolean;
526
551
  }
527
552
  export type PlannedTaskStatus = 'planned' | 'running' | 'succeeded' | 'failed' | 'cancelled';
528
553
  export interface PlannedTaskRecord extends PlannedTask {
@@ -539,9 +564,15 @@ export type PlannedTaskGraphStatus = 'awaiting_approval' | 'active' | 'awaiting_
539
564
  export interface PlannedTaskGraph {
540
565
  planRunId: string;
541
566
  messageGroupId?: string;
567
+ postBuildRunApprovalRequired?: boolean;
542
568
  status: PlannedTaskGraphStatus;
543
569
  tasks: PlannedTaskRecord[];
544
570
  }
571
+ export interface PlannedWorkflowVerification {
572
+ task: PlannedTaskRecord;
573
+ obligation: WorkflowVerificationObligation;
574
+ outcome?: WorkflowBuildOutcome;
575
+ }
545
576
  export type PlannedTaskSchedulerAction = {
546
577
  type: 'none';
547
578
  graph: PlannedTaskGraph | null;
@@ -549,10 +580,18 @@ export type PlannedTaskSchedulerAction = {
549
580
  type: 'dispatch';
550
581
  graph: PlannedTaskGraph;
551
582
  tasks: PlannedTaskRecord[];
583
+ } | {
584
+ type: 'orchestrate-build-workflow';
585
+ graph: PlannedTaskGraph;
586
+ tasks: PlannedTaskRecord[];
552
587
  } | {
553
588
  type: 'orchestrate-checkpoint';
554
589
  graph: PlannedTaskGraph;
555
590
  tasks: PlannedTaskRecord[];
591
+ } | {
592
+ type: 'orchestrate-workflow-verification';
593
+ graph: PlannedTaskGraph;
594
+ verification: PlannedWorkflowVerification;
556
595
  } | {
557
596
  type: 'replan';
558
597
  graph: PlannedTaskGraph;
@@ -565,6 +604,7 @@ export interface PlannedTaskService {
565
604
  createPlan(threadId: string, tasks: PlannedTask[], metadata: {
566
605
  planRunId: string;
567
606
  messageGroupId?: string;
607
+ postBuildRunApprovalRequired?: boolean;
568
608
  }): Promise<PlannedTaskGraph>;
569
609
  getGraph(threadId: string): Promise<PlannedTaskGraph | null>;
570
610
  markRunning(threadId: string, taskId: string, update: {
@@ -596,8 +636,10 @@ export interface PlannedTaskService {
596
636
  finishedAt?: number;
597
637
  }): Promise<CheckpointSettleResult>;
598
638
  revertCheckpointToPlanned(threadId: string, taskId: string): Promise<CheckpointSettleResult>;
639
+ revertBuildWorkflowToPlanned(threadId: string, taskId: string): Promise<CheckpointSettleResult>;
599
640
  tick(threadId: string, options?: {
600
641
  availableSlots?: number;
642
+ pendingWorkflowVerification?: PlannedWorkflowVerification;
601
643
  }): Promise<PlannedTaskSchedulerAction>;
602
644
  clear(threadId: string): Promise<void>;
603
645
  approvePlan(threadId: string): Promise<PlannedTaskGraph | null>;
@@ -618,9 +660,12 @@ export type CheckpointSettleResult = {
618
660
  export interface McpServerConfig {
619
661
  name: string;
620
662
  url?: string;
663
+ transport?: 'sse' | 'streamableHttp';
621
664
  command?: string;
622
665
  args?: string[];
623
666
  env?: Record<string, string>;
667
+ fetch?: typeof fetch;
668
+ cacheKey?: string;
624
669
  }
625
670
  export interface InstanceAiMemoryConfig {
626
671
  threadTtlDays?: number;
@@ -759,6 +804,7 @@ export interface OrchestrationContext {
759
804
  runId: string;
760
805
  messageGroupId?: string;
761
806
  userId: string;
807
+ projectId?: string;
762
808
  orchestratorAgentId: string;
763
809
  modelId: ModelConfig;
764
810
  checkpointStore?: CheckpointStore;
@@ -799,6 +845,7 @@ export interface OrchestrationContext {
799
845
  plannedTaskService?: PlannedTaskService;
800
846
  schedulePlannedTasks?: () => Promise<void>;
801
847
  workspace?: Workspace;
848
+ workspaceRoot?: string;
802
849
  nodeDefinitionDirs?: string[];
803
850
  memory?: BuiltMemory;
804
851
  currentUserMessage?: string;
@@ -808,14 +855,6 @@ export interface OrchestrationContext {
808
855
  domainContext?: InstanceAiContext;
809
856
  iterationLog?: IterationLog;
810
857
  sendCorrectionToTask?: (taskId: string, correction: string) => 'queued' | 'task-completed' | 'task-not-found';
811
- findSubAgentResumeInfo?: (agentKind: string) => Promise<{
812
- runId: string;
813
- toolCallId: string;
814
- persistence: {
815
- threadId: string;
816
- resourceId: string;
817
- };
818
- } | undefined>;
819
858
  persistInFlightUserMessage?: () => Promise<void>;
820
859
  touchRun?: () => boolean;
821
860
  touchBackgroundTask?: (taskId: string) => boolean;
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA6wBa,QAAA,kBAAkB,GAAG,CAAC,UAAU,EAAE,gBAAgB,EAAE,YAAY,CAAU,CAAC;AAC3E,QAAA,yBAAyB,GAAG,0BAAkB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA+yBa,QAAA,kBAAkB,GAAG,CAAC,UAAU,EAAE,gBAAgB,EAAE,YAAY,CAAU,CAAC;AAC3E,QAAA,yBAAyB,GAAG,0BAAkB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare function buildFailureSignature(errors: string[]): string;
2
+ interface BuildFailureTrackerOptions {
3
+ includeSdkLanguageGuidance?: boolean;
4
+ }
5
+ export declare class BuildFailureTracker {
6
+ private readonly history;
7
+ record(workItemKey: string, errors: string[], options?: BuildFailureTrackerOptions): string | undefined;
8
+ clear(workItemKey: string): void;
9
+ }
10
+ export {};
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BuildFailureTracker = void 0;
4
+ exports.buildFailureSignature = buildFailureSignature;
5
+ function buildFailureSignature(errors) {
6
+ return errors
7
+ .map((error) => error.split('\n\n')[0].toLowerCase().replace(/\d+/g, '#').replace(/\s+/g, ' ').trim())
8
+ .sort()
9
+ .join(' | ');
10
+ }
11
+ const GENERIC_ESCALATION = 'You already tried this and it failed with the same error. Do not repeat the same approach. ' +
12
+ 'Use a different repair strategy for this work item.';
13
+ const SDK_LANGUAGE_GUIDANCE = 'SDK builder code is a restricted subset of TypeScript (see ' +
14
+ 'knowledge-base/reference/workflow-sdk-language.md): only SDK builder methods are allowed, not ' +
15
+ 'native array/string methods or globals. Build strings with template literals or explicit lines, ' +
16
+ 'and move runtime joining, aggregation, or transforms into a Code node or an n8n expression.';
17
+ class BuildFailureTracker {
18
+ history = new Map();
19
+ record(workItemKey, errors, options = {}) {
20
+ const signature = buildFailureSignature(errors);
21
+ const seen = this.history.get(workItemKey) ?? new Set();
22
+ const repeated = seen.has(signature);
23
+ seen.add(signature);
24
+ this.history.set(workItemKey, seen);
25
+ return repeated
26
+ ? [GENERIC_ESCALATION, options.includeSdkLanguageGuidance ? SDK_LANGUAGE_GUIDANCE : '']
27
+ .filter(Boolean)
28
+ .join(' ')
29
+ : undefined;
30
+ }
31
+ clear(workItemKey) {
32
+ this.history.delete(workItemKey);
33
+ }
34
+ }
35
+ exports.BuildFailureTracker = BuildFailureTracker;
36
+ //# sourceMappingURL=build-failure-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-failure-tracker.js","sourceRoot":"","sources":["../../src/workflow-builder/build-failure-tracker.ts"],"names":[],"mappings":";;;AAMA,sDAOC;AAPD,SAAgB,qBAAqB,CAAC,MAAgB;IACrD,OAAO,MAAM;SACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACd,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CACrF;SACA,IAAI,EAAE;SACN,IAAI,CAAC,KAAK,CAAC,CAAC;AACf,CAAC;AAMD,MAAM,kBAAkB,GACvB,6FAA6F;IAC7F,qDAAqD,CAAC;AAEvD,MAAM,qBAAqB,GAC1B,6DAA6D;IAC7D,gGAAgG;IAChG,kGAAkG;IAClG,6FAA6F,CAAC;AAG/F,MAAa,mBAAmB;IACd,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAM1D,MAAM,CACL,WAAmB,EACnB,MAAgB,EAChB,UAAsC,EAAE;QAExC,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACpC,OAAO,QAAQ;YACd,CAAC,CAAC,CAAC,kBAAkB,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpF,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC;YACZ,CAAC,CAAC,SAAS,CAAC;IACd,CAAC;IAGD,KAAK,CAAC,WAAmB;QACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;CACD;AA5BD,kDA4BC"}
@@ -1,5 +1,6 @@
1
1
  export { extractWorkflowCode, stripImportStatements, resolveLocalImports, SDK_IMPORT_STATEMENT, } from './extract-code';
2
2
  export { applyPatches } from './patch-code';
3
3
  export { parseAndValidate, partitionWarnings } from './parse-validate';
4
+ export { BuildFailureTracker, buildFailureSignature } from './build-failure-tracker';
4
5
  export { EXPRESSION_REFERENCE, ADDITIONAL_FUNCTIONS, WORKFLOW_RULES, WORKFLOW_SDK_PATTERNS, } from './sdk-prompt-sections';
5
6
  export type { ValidationWarning, ParseAndValidateResult } from './types';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WORKFLOW_SDK_PATTERNS = exports.WORKFLOW_RULES = exports.ADDITIONAL_FUNCTIONS = exports.EXPRESSION_REFERENCE = exports.partitionWarnings = exports.parseAndValidate = exports.applyPatches = exports.SDK_IMPORT_STATEMENT = exports.resolveLocalImports = exports.stripImportStatements = exports.extractWorkflowCode = void 0;
3
+ exports.WORKFLOW_SDK_PATTERNS = exports.WORKFLOW_RULES = exports.ADDITIONAL_FUNCTIONS = exports.EXPRESSION_REFERENCE = exports.buildFailureSignature = exports.BuildFailureTracker = exports.partitionWarnings = exports.parseAndValidate = exports.applyPatches = exports.SDK_IMPORT_STATEMENT = exports.resolveLocalImports = exports.stripImportStatements = exports.extractWorkflowCode = void 0;
4
4
  var extract_code_1 = require("./extract-code");
5
5
  Object.defineProperty(exports, "extractWorkflowCode", { enumerable: true, get: function () { return extract_code_1.extractWorkflowCode; } });
6
6
  Object.defineProperty(exports, "stripImportStatements", { enumerable: true, get: function () { return extract_code_1.stripImportStatements; } });
@@ -11,6 +11,9 @@ Object.defineProperty(exports, "applyPatches", { enumerable: true, get: function
11
11
  var parse_validate_1 = require("./parse-validate");
12
12
  Object.defineProperty(exports, "parseAndValidate", { enumerable: true, get: function () { return parse_validate_1.parseAndValidate; } });
13
13
  Object.defineProperty(exports, "partitionWarnings", { enumerable: true, get: function () { return parse_validate_1.partitionWarnings; } });
14
+ var build_failure_tracker_1 = require("./build-failure-tracker");
15
+ Object.defineProperty(exports, "BuildFailureTracker", { enumerable: true, get: function () { return build_failure_tracker_1.BuildFailureTracker; } });
16
+ Object.defineProperty(exports, "buildFailureSignature", { enumerable: true, get: function () { return build_failure_tracker_1.buildFailureSignature; } });
14
17
  var sdk_prompt_sections_1 = require("./sdk-prompt-sections");
15
18
  Object.defineProperty(exports, "EXPRESSION_REFERENCE", { enumerable: true, get: function () { return sdk_prompt_sections_1.EXPRESSION_REFERENCE; } });
16
19
  Object.defineProperty(exports, "ADDITIONAL_FUNCTIONS", { enumerable: true, get: function () { return sdk_prompt_sections_1.ADDITIONAL_FUNCTIONS; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow-builder/index.ts"],"names":[],"mappings":";;;AAAA,+CAKwB;AAJvB,mHAAA,mBAAmB,OAAA;AACnB,qHAAA,qBAAqB,OAAA;AACrB,mHAAA,mBAAmB,OAAA;AACnB,oHAAA,oBAAoB,OAAA;AAErB,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AACrB,mDAAuE;AAA9D,kHAAA,gBAAgB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAC5C,6DAK+B;AAJ9B,2HAAA,oBAAoB,OAAA;AACpB,2HAAA,oBAAoB,OAAA;AACpB,qHAAA,cAAc,OAAA;AACd,4HAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow-builder/index.ts"],"names":[],"mappings":";;;AAAA,+CAKwB;AAJvB,mHAAA,mBAAmB,OAAA;AACnB,qHAAA,qBAAqB,OAAA;AACrB,mHAAA,mBAAmB,OAAA;AACnB,oHAAA,oBAAoB,OAAA;AAErB,2CAA4C;AAAnC,0GAAA,YAAY,OAAA;AACrB,mDAAuE;AAA9D,kHAAA,gBAAgB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAC5C,iEAAqF;AAA5E,4HAAA,mBAAmB,OAAA;AAAE,8HAAA,qBAAqB,OAAA;AACnD,6DAK+B;AAJ9B,2HAAA,oBAAoB,OAAA;AACpB,2HAAA,oBAAoB,OAAA;AACpB,qHAAA,cAAc,OAAA;AACd,4HAAA,qBAAqB,OAAA"}
@@ -18,29 +18,33 @@ function formatWorkflowLoopGuidance(action, options = {}) {
18
18
  return `Workflow verified successfully. Report completion to the user.${action.workflowId ? ` Workflow ID: ${action.workflowId}` : ''}`;
19
19
  }
20
20
  case 'verify':
21
- return (`VERIFY: Run workflow ${action.workflowId}. ` +
21
+ return (`VERIFY: Inspect the persisted workflow ${action.workflowId} with \`workflows(action="get-json")\` and compare it to the requested outcome. ` +
22
+ 'Build/save success only means a workflow was saved. ' +
22
23
  `If the build had mocked credentials, use \`verify-built-workflow\` with workItemId "${options.workItemId ?? 'unknown'}". ` +
23
24
  'Otherwise use `executions(action="run")`. ' +
24
25
  'If it fails, use `executions(action="debug")` to diagnose. ' +
25
- `Then call \`report-verification-verdict\` with workItemId "${options.workItemId ?? 'unknown'}" and your findings.`);
26
+ 'If the saved graph or run evidence is not good enough, report `needs_patch` or `needs_rebuild` and keep patching the same workflow. ' +
27
+ `Then call \`report-verification-verdict\` with workItemId "${options.workItemId ?? 'unknown'}", \`workflowInspection\`, and your findings.`);
26
28
  case 'blocked':
27
29
  return `BUILD BLOCKED: ${action.reason}. Explain this to the user and ask how to proceed.`;
28
30
  case 'rebuild':
29
31
  return (`REBUILD NEEDED: Workflow "${action.workflowId}" needs structural repair. ` +
30
- `Call \`build-workflow-with-agent\` directly with \`workflowId: "${action.workflowId}"\` ` +
32
+ 'Load the `workflow-builder` skill, then call `build-workflow` directly ' +
33
+ `with \`workflowId: "${action.workflowId}"\` ` +
31
34
  `and \`workItemId: "${options.workItemId ?? 'unknown'}"\` ` +
32
35
  '(no plan — this is a single-task rebuild; `workflowId` and `workItemId` are required ' +
33
36
  'so the builder updates the existing workflow instead of creating a duplicate). ' +
34
- `In the \`task\` parameter, describe the structural repair and include these details: ${action.failureDetails}`);
37
+ `Use SDK code or a targeted patch to apply this structural repair: ${action.failureDetails}`);
35
38
  case 'patch':
36
39
  return (`PATCH NEEDED: Node "${action.failedNodeName}" in workflow ${action.workflowId} needs a targeted fix. ` +
37
40
  `Diagnosis: ${action.diagnosis}. ` +
38
41
  (action.patch ? `Suggested fix: ${JSON.stringify(action.patch)}. ` : '') +
39
- `Call \`build-workflow-with-agent\` directly with \`workflowId: "${action.workflowId}"\` ` +
42
+ 'Load the `workflow-builder` skill, then call `build-workflow` directly ' +
43
+ `with \`workflowId: "${action.workflowId}"\` ` +
40
44
  `and \`workItemId: "${options.workItemId ?? 'unknown'}"\` ` +
41
45
  '(no plan — this is a single-task patch; `workflowId` and `workItemId` are required ' +
42
46
  'so the builder updates the existing workflow instead of creating a duplicate). ' +
43
- 'In the `task` parameter, describe the targeted fix to apply.');
47
+ 'Use patch mode when the edit is small.');
44
48
  }
45
49
  }
46
50
  //# sourceMappingURL=guidance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guidance.js","sourceRoot":"","sources":["../../src/workflow-loop/guidance.ts"],"names":[],"mappings":";;AAMA,gEAoDC;AApDD,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,qGAAqG;oBACrG,oFAAoF;oBACpF,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
+ {"version":3,"file":"guidance.js","sourceRoot":"","sources":["../../src/workflow-loop/guidance.ts"],"names":[],"mappings":";;AAMA,gEAwDC;AAxDD,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,qGAAqG;oBACrG,oFAAoF;oBACpF,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,0CAA0C,MAAM,CAAC,UAAU,kFAAkF;gBAC7I,sDAAsD;gBACtD,uFAAuF,OAAO,CAAC,UAAU,IAAI,SAAS,KAAK;gBAC3H,4CAA4C;gBAC5C,6DAA6D;gBAC7D,sIAAsI;gBACtI,8DAA8D,OAAO,CAAC,UAAU,IAAI,SAAS,+CAA+C,CAC5I,CAAC;QACH,KAAK,SAAS;YACb,OAAO,kBAAkB,MAAM,CAAC,MAAM,oDAAoD,CAAC;QAC5F,KAAK,SAAS;YACb,OAAO,CACN,6BAA6B,MAAM,CAAC,UAAU,6BAA6B;gBAC3E,yEAAyE;gBACzE,uBAAuB,MAAM,CAAC,UAAU,MAAM;gBAC9C,sBAAsB,OAAO,CAAC,UAAU,IAAI,SAAS,MAAM;gBAC3D,uFAAuF;gBACvF,iFAAiF;gBACjF,qEAAqE,MAAM,CAAC,cAAc,EAAE,CAC5F,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,yEAAyE;gBACzE,uBAAuB,MAAM,CAAC,UAAU,MAAM;gBAC9C,sBAAsB,OAAO,CAAC,UAAU,IAAI,SAAS,MAAM;gBAC3D,qFAAqF;gBACrF,iFAAiF;gBACjF,wCAAwC,CACxC,CAAC;IACJ,CAAC;AACF,CAAC"}
@@ -1,7 +1,8 @@
1
- export { workflowLoopPhaseSchema, workflowLoopStatusSchema, workflowLoopSourceSchema, remediationCategorySchema, remediationMetadataSchema, workflowLoopStateSchema, attemptActionSchema, attemptResultSchema, attemptRecordSchema, triggerTypeSchema, workflowVerificationReadinessSchema, workflowSetupRequirementSchema, workflowBuildOutcomeSchema, verificationVerdictSchema, verificationResultSchema, } from './workflow-loop-state';
2
- export type { WorkflowLoopPhase, WorkflowLoopStatus, WorkflowLoopSource, RemediationCategory, RemediationMetadata, WorkflowLoopState, AttemptAction, AttemptResult, AttemptRecord, TriggerType, WorkflowVerificationEvidence, WorkflowVerificationReadiness, WorkflowSetupRequirement, WorkflowBuildOutcome, VerificationVerdict, VerificationResult, WorkflowLoopAction, } from './workflow-loop-state';
1
+ export { workflowLoopPhaseSchema, workflowLoopStatusSchema, workflowLoopSourceSchema, remediationCategorySchema, remediationMetadataSchema, workflowBuildOwnerSchema, workflowLoopStateSchema, attemptActionSchema, attemptResultSchema, attemptRecordSchema, triggerTypeSchema, workflowVerificationEvidenceSchema, workflowVerificationReadinessSchema, workflowSetupRequirementSchema, workflowVerificationObligationStatusSchema, workflowVerificationObligationPolicySchema, workflowVerificationObligationSourceSchema, workflowVerificationObligationSchema, workflowBuildOutcomeSchema, verificationVerdictSchema, verificationResultSchema, resolveWorkflowBuildOwner, plannedTaskIdFromWorkflowBuildOwner, isPlannedWorkflowBuildOwner, } from './workflow-loop-state';
2
+ export type { WorkflowLoopPhase, WorkflowLoopStatus, WorkflowLoopSource, RemediationCategory, RemediationMetadata, WorkflowBuildOwner, WorkflowLoopState, AttemptAction, AttemptResult, AttemptRecord, TriggerType, WorkflowVerificationEvidence, WorkflowVerificationReadiness, WorkflowSetupRequirement, WorkflowVerificationObligationStatus, WorkflowVerificationObligationPolicy, WorkflowVerificationObligationSource, WorkflowVerificationObligation, 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 { deriveWorkflowVerificationObligation, deriveWorkflowVerificationObligationFromOutcome, isWorkflowVerificationObligationUnsettled, type DeriveWorkflowVerificationObligationOptions, type WorkflowVerificationObligationRecord, } from './verification-obligation';
6
7
  export { MAX_POST_SUBMIT_REMEDIATION_SUBMITS, MAX_PRE_SAVE_SUBMIT_FAILURES, createRemediation, remainingPostSubmitRemediations, terminalRemediationFromState, } from './remediation';
7
8
  export { createTerminalRemediationGuard, type TerminalRemediationGuard, } from './terminal-remediation-guard';
@@ -1,22 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTerminalRemediationGuard = 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.workflowSetupRequirementSchema = exports.workflowVerificationReadinessSchema = exports.triggerTypeSchema = exports.attemptRecordSchema = exports.attemptResultSchema = exports.attemptActionSchema = exports.workflowLoopStateSchema = exports.remediationMetadataSchema = exports.remediationCategorySchema = exports.workflowLoopSourceSchema = exports.workflowLoopStatusSchema = exports.workflowLoopPhaseSchema = void 0;
3
+ exports.createTerminalRemediationGuard = exports.terminalRemediationFromState = exports.remainingPostSubmitRemediations = exports.createRemediation = exports.MAX_PRE_SAVE_SUBMIT_FAILURES = exports.MAX_POST_SUBMIT_REMEDIATION_SUBMITS = exports.isWorkflowVerificationObligationUnsettled = exports.deriveWorkflowVerificationObligationFromOutcome = exports.deriveWorkflowVerificationObligation = exports.WorkflowTaskCoordinator = exports.formatWorkflowLoopGuidance = exports.formatAttemptHistory = exports.handleVerificationVerdict = exports.handleBuildOutcome = exports.createWorkItem = exports.isPlannedWorkflowBuildOwner = exports.plannedTaskIdFromWorkflowBuildOwner = exports.resolveWorkflowBuildOwner = exports.verificationResultSchema = exports.verificationVerdictSchema = exports.workflowBuildOutcomeSchema = exports.workflowVerificationObligationSchema = exports.workflowVerificationObligationSourceSchema = exports.workflowVerificationObligationPolicySchema = exports.workflowVerificationObligationStatusSchema = exports.workflowSetupRequirementSchema = exports.workflowVerificationReadinessSchema = exports.workflowVerificationEvidenceSchema = exports.triggerTypeSchema = exports.attemptRecordSchema = exports.attemptResultSchema = exports.attemptActionSchema = exports.workflowLoopStateSchema = exports.workflowBuildOwnerSchema = 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
8
  Object.defineProperty(exports, "remediationCategorySchema", { enumerable: true, get: function () { return workflow_loop_state_1.remediationCategorySchema; } });
9
9
  Object.defineProperty(exports, "remediationMetadataSchema", { enumerable: true, get: function () { return workflow_loop_state_1.remediationMetadataSchema; } });
10
+ Object.defineProperty(exports, "workflowBuildOwnerSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowBuildOwnerSchema; } });
10
11
  Object.defineProperty(exports, "workflowLoopStateSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowLoopStateSchema; } });
11
12
  Object.defineProperty(exports, "attemptActionSchema", { enumerable: true, get: function () { return workflow_loop_state_1.attemptActionSchema; } });
12
13
  Object.defineProperty(exports, "attemptResultSchema", { enumerable: true, get: function () { return workflow_loop_state_1.attemptResultSchema; } });
13
14
  Object.defineProperty(exports, "attemptRecordSchema", { enumerable: true, get: function () { return workflow_loop_state_1.attemptRecordSchema; } });
14
15
  Object.defineProperty(exports, "triggerTypeSchema", { enumerable: true, get: function () { return workflow_loop_state_1.triggerTypeSchema; } });
16
+ Object.defineProperty(exports, "workflowVerificationEvidenceSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowVerificationEvidenceSchema; } });
15
17
  Object.defineProperty(exports, "workflowVerificationReadinessSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowVerificationReadinessSchema; } });
16
18
  Object.defineProperty(exports, "workflowSetupRequirementSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowSetupRequirementSchema; } });
19
+ Object.defineProperty(exports, "workflowVerificationObligationStatusSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowVerificationObligationStatusSchema; } });
20
+ Object.defineProperty(exports, "workflowVerificationObligationPolicySchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowVerificationObligationPolicySchema; } });
21
+ Object.defineProperty(exports, "workflowVerificationObligationSourceSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowVerificationObligationSourceSchema; } });
22
+ Object.defineProperty(exports, "workflowVerificationObligationSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowVerificationObligationSchema; } });
17
23
  Object.defineProperty(exports, "workflowBuildOutcomeSchema", { enumerable: true, get: function () { return workflow_loop_state_1.workflowBuildOutcomeSchema; } });
18
24
  Object.defineProperty(exports, "verificationVerdictSchema", { enumerable: true, get: function () { return workflow_loop_state_1.verificationVerdictSchema; } });
19
25
  Object.defineProperty(exports, "verificationResultSchema", { enumerable: true, get: function () { return workflow_loop_state_1.verificationResultSchema; } });
26
+ Object.defineProperty(exports, "resolveWorkflowBuildOwner", { enumerable: true, get: function () { return workflow_loop_state_1.resolveWorkflowBuildOwner; } });
27
+ Object.defineProperty(exports, "plannedTaskIdFromWorkflowBuildOwner", { enumerable: true, get: function () { return workflow_loop_state_1.plannedTaskIdFromWorkflowBuildOwner; } });
28
+ Object.defineProperty(exports, "isPlannedWorkflowBuildOwner", { enumerable: true, get: function () { return workflow_loop_state_1.isPlannedWorkflowBuildOwner; } });
20
29
  var workflow_loop_controller_1 = require("./workflow-loop-controller");
21
30
  Object.defineProperty(exports, "createWorkItem", { enumerable: true, get: function () { return workflow_loop_controller_1.createWorkItem; } });
22
31
  Object.defineProperty(exports, "handleBuildOutcome", { enumerable: true, get: function () { return workflow_loop_controller_1.handleBuildOutcome; } });
@@ -26,6 +35,10 @@ var guidance_1 = require("./guidance");
26
35
  Object.defineProperty(exports, "formatWorkflowLoopGuidance", { enumerable: true, get: function () { return guidance_1.formatWorkflowLoopGuidance; } });
27
36
  var workflow_task_service_1 = require("./workflow-task-service");
28
37
  Object.defineProperty(exports, "WorkflowTaskCoordinator", { enumerable: true, get: function () { return workflow_task_service_1.WorkflowTaskCoordinator; } });
38
+ var verification_obligation_1 = require("./verification-obligation");
39
+ Object.defineProperty(exports, "deriveWorkflowVerificationObligation", { enumerable: true, get: function () { return verification_obligation_1.deriveWorkflowVerificationObligation; } });
40
+ Object.defineProperty(exports, "deriveWorkflowVerificationObligationFromOutcome", { enumerable: true, get: function () { return verification_obligation_1.deriveWorkflowVerificationObligationFromOutcome; } });
41
+ Object.defineProperty(exports, "isWorkflowVerificationObligationUnsettled", { enumerable: true, get: function () { return verification_obligation_1.isWorkflowVerificationObligationUnsettled; } });
29
42
  var remediation_1 = require("./remediation");
30
43
  Object.defineProperty(exports, "MAX_POST_SUBMIT_REMEDIATION_SUBMITS", { enumerable: true, get: function () { return remediation_1.MAX_POST_SUBMIT_REMEDIATION_SUBMITS; } });
31
44
  Object.defineProperty(exports, "MAX_PRE_SAVE_SUBMIT_FAILURES", { enumerable: true, get: function () { return remediation_1.MAX_PRE_SAVE_SUBMIT_FAILURES; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow-loop/index.ts"],"names":[],"mappings":";;;AAAA,6DAgB+B;AAf9B,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,0IAAA,mCAAmC,OAAA;AACnC,qIAAA,8BAA8B,OAAA;AAC9B,iIAAA,0BAA0B,OAAA;AAC1B,gIAAA,yBAAyB,OAAA;AACzB,+HAAA,wBAAwB,OAAA;AAuBzB,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;AAE7B,2EAGsC;AAFrC,4IAAA,8BAA8B,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow-loop/index.ts"],"names":[],"mappings":";;;AAAA,6DAyB+B;AAxB9B,8HAAA,uBAAuB,OAAA;AACvB,+HAAA,wBAAwB,OAAA;AACxB,+HAAA,wBAAwB,OAAA;AACxB,gIAAA,yBAAyB,OAAA;AACzB,gIAAA,yBAAyB,OAAA;AACzB,+HAAA,wBAAwB,OAAA;AACxB,8HAAA,uBAAuB,OAAA;AACvB,0HAAA,mBAAmB,OAAA;AACnB,0HAAA,mBAAmB,OAAA;AACnB,0HAAA,mBAAmB,OAAA;AACnB,wHAAA,iBAAiB,OAAA;AACjB,yIAAA,kCAAkC,OAAA;AAClC,0IAAA,mCAAmC,OAAA;AACnC,qIAAA,8BAA8B,OAAA;AAC9B,iJAAA,0CAA0C,OAAA;AAC1C,iJAAA,0CAA0C,OAAA;AAC1C,iJAAA,0CAA0C,OAAA;AAC1C,2IAAA,oCAAoC,OAAA;AACpC,iIAAA,0BAA0B,OAAA;AAC1B,gIAAA,yBAAyB,OAAA;AACzB,+HAAA,wBAAwB,OAAA;AACxB,gIAAA,yBAAyB,OAAA;AACzB,0IAAA,mCAAmC,OAAA;AACnC,kIAAA,2BAA2B,OAAA;AA4B5B,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,qEAMmC;AALlC,+IAAA,oCAAoC,OAAA;AACpC,0JAAA,+CAA+C,OAAA;AAC/C,oJAAA,yCAAyC,OAAA;AAI1C,6CAMuB;AALtB,kIAAA,mCAAmC,OAAA;AACnC,2HAAA,4BAA4B,OAAA;AAC5B,gHAAA,iBAAiB,OAAA;AACjB,8HAAA,+BAA+B,OAAA;AAC/B,2HAAA,4BAA4B,OAAA;AAE7B,2EAGsC;AAFrC,4IAAA,8BAA8B,OAAA"}
@@ -11,6 +11,8 @@ function createInitialState(threadId, outcome) {
11
11
  phase: 'building',
12
12
  status: 'active',
13
13
  source: outcome.workflowId ? 'modify' : 'create',
14
+ owner: outcome.owner,
15
+ plannedTaskId: outcome.plannedTaskId,
14
16
  rebuildAttempts: 0,
15
17
  preSaveSubmitFailures: 0,
16
18
  postSubmitRemediationSubmitsUsed: 0,
@@ -39,7 +41,7 @@ class WorkflowLoopRuntime {
39
41
  const { state: newState, action, attempt, } = (0, workflow_loop_controller_1.handleVerificationVerdict)(existing.state, existing.attempts, verdict);
40
42
  if (action.type === 'ignored')
41
43
  return action;
42
- await this.storage.saveWorkItem(threadId, newState, [...existing.attempts, attempt]);
44
+ await this.storage.saveWorkItem(threadId, newState, [...existing.attempts, attempt], existing.lastBuildOutcome);
43
45
  return action;
44
46
  }
45
47
  }
@@ -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,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
+ {"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,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,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,CAC9B,QAAQ,EACR,QAAQ,EACR,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC/B,QAAQ,CAAC,gBAAgB,CACzB,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC;CACD;AA1CD,kDA0CC"}
@@ -0,0 +1,15 @@
1
+ import type { AttemptRecord, WorkflowBuildOwner, WorkflowBuildOutcome, WorkflowLoopState, WorkflowVerificationObligation, WorkflowVerificationObligationSource } from './workflow-loop-state';
2
+ export interface WorkflowVerificationObligationRecord {
3
+ state: WorkflowLoopState;
4
+ attempts: AttemptRecord[];
5
+ lastBuildOutcome?: WorkflowBuildOutcome;
6
+ }
7
+ export interface DeriveWorkflowVerificationObligationOptions {
8
+ source?: WorkflowVerificationObligationSource;
9
+ owner?: WorkflowBuildOwner;
10
+ plannedTaskId?: string;
11
+ updatedAt?: string;
12
+ }
13
+ export declare function deriveWorkflowVerificationObligation(threadId: string, record: WorkflowVerificationObligationRecord, options?: DeriveWorkflowVerificationObligationOptions): WorkflowVerificationObligation;
14
+ export declare function isWorkflowVerificationObligationUnsettled(obligation: WorkflowVerificationObligation): boolean;
15
+ export declare function deriveWorkflowVerificationObligationFromOutcome(threadId: string, outcome: WorkflowBuildOutcome, options?: DeriveWorkflowVerificationObligationOptions): WorkflowVerificationObligation;
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deriveWorkflowVerificationObligation = deriveWorkflowVerificationObligation;
4
+ exports.isWorkflowVerificationObligationUnsettled = isWorkflowVerificationObligationUnsettled;
5
+ exports.deriveWorkflowVerificationObligationFromOutcome = deriveWorkflowVerificationObligationFromOutcome;
6
+ const workflow_loop_state_1 = require("./workflow-loop-state");
7
+ const UNSETTLED_OBLIGATION_STATUSES = new Set([
8
+ 'pending_build',
9
+ 'ready_to_verify',
10
+ 'verifying',
11
+ ]);
12
+ function hasSuccessfulEvidence(outcome) {
13
+ return (outcome.verification?.attempted === true &&
14
+ outcome.verification.success &&
15
+ !!outcome.verification.executionId);
16
+ }
17
+ function hasFailedEvidence(outcome) {
18
+ return outcome.verification?.attempted === true && !outcome.verification.success;
19
+ }
20
+ function isNeedsSetupRemediation(remediation) {
21
+ return remediation?.category === 'needs_setup' && !remediation.shouldEdit;
22
+ }
23
+ function hasSetupBlockingEvidence(state, outcome) {
24
+ if (outcome.verificationReadiness?.status === 'needs_setup')
25
+ return true;
26
+ if (isNeedsSetupRemediation(outcome.remediation))
27
+ return true;
28
+ if (isNeedsSetupRemediation(state.lastRemediation))
29
+ return true;
30
+ return outcome.setupRequirement?.status === 'required' && hasFailedEvidence(outcome);
31
+ }
32
+ function deriveStatus(state, outcome) {
33
+ if (!outcome)
34
+ return 'pending_build';
35
+ if (!outcome.submitted)
36
+ return 'blocked';
37
+ if (hasSuccessfulEvidence(outcome))
38
+ return 'verified';
39
+ if (hasSetupBlockingEvidence(state, outcome))
40
+ return 'needs_setup';
41
+ switch (outcome.verificationReadiness?.status) {
42
+ case 'already_verified':
43
+ return 'verified';
44
+ case 'needs_setup':
45
+ return 'needs_setup';
46
+ case 'not_verifiable':
47
+ return 'not_verifiable';
48
+ case 'ready':
49
+ if (state.status === 'blocked')
50
+ return 'blocked';
51
+ return 'ready_to_verify';
52
+ default:
53
+ if (state.status === 'blocked')
54
+ return 'blocked';
55
+ return outcome.workflowId ? 'ready_to_verify' : 'blocked';
56
+ }
57
+ }
58
+ function derivePolicy(status, outcome) {
59
+ if (status === 'not_verifiable')
60
+ return 'manual';
61
+ if (outcome?.verificationReadiness?.status === 'not_verifiable')
62
+ return 'manual';
63
+ return 'required';
64
+ }
65
+ function deriveBlockingReason(state, outcome) {
66
+ if (!outcome)
67
+ return undefined;
68
+ if (!outcome.submitted) {
69
+ return (outcome.blockingReason ?? outcome.failureSignature ?? 'Builder did not submit a workflow.');
70
+ }
71
+ if (outcome.verificationReadiness?.status === 'not_verifiable') {
72
+ return outcome.verificationReadiness.guidance;
73
+ }
74
+ if (outcome.verificationReadiness?.status === 'needs_setup') {
75
+ return outcome.verificationReadiness.guidance;
76
+ }
77
+ const outcomeRemediation = outcome.remediation;
78
+ if (outcomeRemediation?.category === 'needs_setup' && !outcomeRemediation.shouldEdit) {
79
+ return outcomeRemediation.guidance;
80
+ }
81
+ const lastRemediation = state.lastRemediation;
82
+ if (lastRemediation?.category === 'needs_setup' && !lastRemediation.shouldEdit) {
83
+ return lastRemediation.guidance;
84
+ }
85
+ if (outcome.setupRequirement?.status === 'required' && hasFailedEvidence(outcome)) {
86
+ return outcome.setupRequirement.guidance;
87
+ }
88
+ if (state.status === 'blocked') {
89
+ return state.lastRemediation?.guidance ?? outcome.blockingReason ?? outcome.failureSignature;
90
+ }
91
+ return undefined;
92
+ }
93
+ function lastAttemptTimestamp(attempts) {
94
+ return attempts.at(-1)?.createdAt;
95
+ }
96
+ function deriveWorkflowVerificationObligation(threadId, record, options = {}) {
97
+ const outcome = record.lastBuildOutcome;
98
+ const status = deriveStatus(record.state, outcome);
99
+ const updatedAt = options.updatedAt ?? lastAttemptTimestamp(record.attempts) ?? new Date().toISOString();
100
+ const owner = (0, workflow_loop_state_1.resolveWorkflowBuildOwner)(options, record.state, outcome);
101
+ const plannedTaskId = (0, workflow_loop_state_1.plannedTaskIdFromWorkflowBuildOwner)(owner);
102
+ const source = options.source ?? owner.type;
103
+ return {
104
+ workItemId: record.state.workItemId,
105
+ threadId,
106
+ runId: outcome?.runId ?? record.state.runId,
107
+ taskId: outcome?.taskId ?? record.state.lastTaskId,
108
+ owner,
109
+ plannedTaskId,
110
+ workflowId: outcome?.workflowId ?? record.state.workflowId,
111
+ source,
112
+ policy: derivePolicy(status, outcome),
113
+ status,
114
+ readiness: outcome?.verificationReadiness,
115
+ setupRequirement: outcome?.setupRequirement,
116
+ evidence: outcome?.verification,
117
+ blockingReason: deriveBlockingReason(record.state, outcome),
118
+ updatedAt,
119
+ };
120
+ }
121
+ function isWorkflowVerificationObligationUnsettled(obligation) {
122
+ return UNSETTLED_OBLIGATION_STATUSES.has(obligation.status);
123
+ }
124
+ function deriveWorkflowVerificationObligationFromOutcome(threadId, outcome, options = {}) {
125
+ const state = {
126
+ workItemId: outcome.workItemId,
127
+ threadId,
128
+ runId: outcome.runId,
129
+ workflowId: outcome.workflowId,
130
+ lastTaskId: outcome.taskId,
131
+ owner: outcome.owner,
132
+ plannedTaskId: outcome.plannedTaskId,
133
+ phase: 'verifying',
134
+ status: 'active',
135
+ source: 'create',
136
+ rebuildAttempts: 0,
137
+ };
138
+ return deriveWorkflowVerificationObligation(threadId, { state, attempts: [], lastBuildOutcome: outcome }, options);
139
+ }
140
+ //# sourceMappingURL=verification-obligation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-obligation.js","sourceRoot":"","sources":["../../src/workflow-loop/verification-obligation.ts"],"names":[],"mappings":"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"}