@diff-review-system/drs 4.0.1 → 5.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/.pi/agents/review/unified-reviewer.md +2 -6
  2. package/.pi/agents/task/okf-wiki-maintainer.md +72 -0
  3. package/.pi/agents/task/review-assistant.md +22 -0
  4. package/.pi/workflows/github-pr-fix-review-issues-stacked.yaml +12 -4
  5. package/.pi/workflows/github-pr-review-post.yaml +29 -20
  6. package/.pi/workflows/github-pr-review.yaml +37 -8
  7. package/.pi/workflows/github-pr-update-agents-md-stacked.yaml +2 -0
  8. package/.pi/workflows/github-pr-visual-explain.yaml +46 -1
  9. package/.pi/workflows/gitlab-mr-fix-review-issues-stacked.yaml +12 -4
  10. package/.pi/workflows/gitlab-mr-review.yaml +20 -8
  11. package/.pi/workflows/gitlab-mr-update-agents-md-stacked.yaml +2 -0
  12. package/.pi/workflows/gitlab-mr-visual-explain.yaml +46 -1
  13. package/.pi/workflows/local-fix-review-issues.yaml +13 -6
  14. package/.pi/workflows/local-review.yaml +7 -1
  15. package/.pi/workflows/local-visual-explain.yaml +46 -1
  16. package/.pi/workflows/release-changelog-finalize.yaml +10 -0
  17. package/.pi/workflows/repository-wiki-check.yaml +40 -0
  18. package/.pi/workflows/repository-wiki-sync.yaml +187 -0
  19. package/.pi/workflows/temporal-control-smoke.yaml +63 -0
  20. package/.wiki-site/.vitepress/config.mts +452 -0
  21. package/.wiki-site/.vitepress/theme/PageLead.vue +122 -0
  22. package/.wiki-site/.vitepress/theme/index.ts +12 -0
  23. package/.wiki-site/.vitepress/theme/style.css +270 -0
  24. package/README.md +77 -4
  25. package/dist/cli/index.js +87 -4
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/cli/init.d.ts +6 -1
  28. package/dist/cli/init.d.ts.map +1 -1
  29. package/dist/cli/init.js +26 -10
  30. package/dist/cli/init.js.map +1 -1
  31. package/dist/cli/run-agent.d.ts +5 -7
  32. package/dist/cli/run-agent.d.ts.map +1 -1
  33. package/dist/cli/run-agent.js +56 -5
  34. package/dist/cli/run-agent.js.map +1 -1
  35. package/dist/cli/wiki.d.ts +3 -0
  36. package/dist/cli/wiki.d.ts.map +1 -0
  37. package/dist/cli/wiki.js +174 -0
  38. package/dist/cli/wiki.js.map +1 -0
  39. package/dist/cli/workflow-executor-selection.d.ts +3 -0
  40. package/dist/cli/workflow-executor-selection.d.ts.map +1 -0
  41. package/dist/cli/workflow-executor-selection.js +15 -0
  42. package/dist/cli/workflow-executor-selection.js.map +1 -0
  43. package/dist/cli/workflow.d.ts +40 -42
  44. package/dist/cli/workflow.d.ts.map +1 -1
  45. package/dist/cli/workflow.js +533 -868
  46. package/dist/cli/workflow.js.map +1 -1
  47. package/dist/github/client.d.ts.map +1 -1
  48. package/dist/github/client.js +2 -2
  49. package/dist/github/client.js.map +1 -1
  50. package/dist/github/platform-adapter.d.ts.map +1 -1
  51. package/dist/github/platform-adapter.js +15 -1
  52. package/dist/github/platform-adapter.js.map +1 -1
  53. package/dist/gitlab/client.d.ts +4 -0
  54. package/dist/gitlab/client.d.ts.map +1 -1
  55. package/dist/gitlab/client.js +17 -1
  56. package/dist/gitlab/client.js.map +1 -1
  57. package/dist/gitlab/platform-adapter.d.ts.map +1 -1
  58. package/dist/gitlab/platform-adapter.js +17 -1
  59. package/dist/gitlab/platform-adapter.js.map +1 -1
  60. package/dist/lib/agent-permissions.d.ts +44 -0
  61. package/dist/lib/agent-permissions.d.ts.map +1 -0
  62. package/dist/lib/agent-permissions.js +358 -0
  63. package/dist/lib/agent-permissions.js.map +1 -0
  64. package/dist/lib/agent-result.d.ts +10 -0
  65. package/dist/lib/agent-result.d.ts.map +1 -0
  66. package/dist/lib/agent-result.js +2 -0
  67. package/dist/lib/agent-result.js.map +1 -0
  68. package/dist/lib/comment-poster.d.ts +1 -1
  69. package/dist/lib/comment-poster.d.ts.map +1 -1
  70. package/dist/lib/comment-poster.js +38 -16
  71. package/dist/lib/comment-poster.js.map +1 -1
  72. package/dist/lib/config.d.ts +27 -1
  73. package/dist/lib/config.d.ts.map +1 -1
  74. package/dist/lib/config.js +17 -0
  75. package/dist/lib/config.js.map +1 -1
  76. package/dist/lib/error-comment-poster.d.ts +1 -1
  77. package/dist/lib/error-comment-poster.d.ts.map +1 -1
  78. package/dist/lib/error-comment-poster.js +15 -7
  79. package/dist/lib/error-comment-poster.js.map +1 -1
  80. package/dist/lib/okf-wiki.d.ts +65 -0
  81. package/dist/lib/okf-wiki.d.ts.map +1 -0
  82. package/dist/lib/okf-wiki.js +647 -0
  83. package/dist/lib/okf-wiki.js.map +1 -0
  84. package/dist/lib/output-paths.d.ts +0 -1
  85. package/dist/lib/output-paths.d.ts.map +1 -1
  86. package/dist/lib/output-paths.js +0 -1
  87. package/dist/lib/output-paths.js.map +1 -1
  88. package/dist/lib/platform-client.d.ts +2 -0
  89. package/dist/lib/platform-client.d.ts.map +1 -1
  90. package/dist/lib/project-setup.d.ts +7 -0
  91. package/dist/lib/project-setup.d.ts.map +1 -0
  92. package/dist/lib/project-setup.js +11 -0
  93. package/dist/lib/project-setup.js.map +1 -0
  94. package/dist/lib/review-artifact-store.d.ts +16 -0
  95. package/dist/lib/review-artifact-store.d.ts.map +1 -0
  96. package/dist/lib/review-artifact-store.js +84 -0
  97. package/dist/lib/review-artifact-store.js.map +1 -0
  98. package/dist/lib/review-artifact.d.ts +11 -1
  99. package/dist/lib/review-artifact.d.ts.map +1 -1
  100. package/dist/lib/review-artifact.js +203 -0
  101. package/dist/lib/review-artifact.js.map +1 -1
  102. package/dist/lib/review-core.d.ts +1 -0
  103. package/dist/lib/review-core.d.ts.map +1 -1
  104. package/dist/lib/review-core.js +11 -14
  105. package/dist/lib/review-core.js.map +1 -1
  106. package/dist/lib/review-orchestrator.d.ts +6 -1
  107. package/dist/lib/review-orchestrator.d.ts.map +1 -1
  108. package/dist/lib/review-orchestrator.js +3 -1
  109. package/dist/lib/review-orchestrator.js.map +1 -1
  110. package/dist/lib/review-parser.d.ts.map +1 -1
  111. package/dist/lib/review-parser.js +15 -12
  112. package/dist/lib/review-parser.js.map +1 -1
  113. package/dist/lib/wiki-delta.d.ts +71 -0
  114. package/dist/lib/wiki-delta.d.ts.map +1 -0
  115. package/dist/lib/wiki-delta.js +524 -0
  116. package/dist/lib/wiki-delta.js.map +1 -0
  117. package/dist/lib/wiki-run-summary.d.ts +45 -0
  118. package/dist/lib/wiki-run-summary.d.ts.map +1 -0
  119. package/dist/lib/wiki-run-summary.js +168 -0
  120. package/dist/lib/wiki-run-summary.js.map +1 -0
  121. package/dist/lib/wiki-search.d.ts +24 -0
  122. package/dist/lib/wiki-search.d.ts.map +1 -0
  123. package/dist/lib/wiki-search.js +200 -0
  124. package/dist/lib/wiki-search.js.map +1 -0
  125. package/dist/lib/wiki-site-graph.d.ts +33 -0
  126. package/dist/lib/wiki-site-graph.d.ts.map +1 -0
  127. package/dist/lib/wiki-site-graph.js +446 -0
  128. package/dist/lib/wiki-site-graph.js.map +1 -0
  129. package/dist/lib/wiki-site-safety.d.ts +6 -0
  130. package/dist/lib/wiki-site-safety.d.ts.map +1 -0
  131. package/dist/lib/wiki-site-safety.js +83 -0
  132. package/dist/lib/wiki-site-safety.js.map +1 -0
  133. package/dist/lib/wiki-site-smoke.d.ts +16 -0
  134. package/dist/lib/wiki-site-smoke.d.ts.map +1 -0
  135. package/dist/lib/wiki-site-smoke.js +270 -0
  136. package/dist/lib/wiki-site-smoke.js.map +1 -0
  137. package/dist/lib/wiki-site.d.ts +26 -0
  138. package/dist/lib/wiki-site.d.ts.map +1 -0
  139. package/dist/lib/wiki-site.js +221 -0
  140. package/dist/lib/wiki-site.js.map +1 -0
  141. package/dist/lib/workflow/artifact-store.d.ts +71 -0
  142. package/dist/lib/workflow/artifact-store.d.ts.map +1 -0
  143. package/dist/lib/workflow/artifact-store.js +121 -0
  144. package/dist/lib/workflow/artifact-store.js.map +1 -0
  145. package/dist/lib/workflow/compiled-plan.d.ts +87 -0
  146. package/dist/lib/workflow/compiled-plan.d.ts.map +1 -0
  147. package/dist/lib/workflow/compiled-plan.js +62 -0
  148. package/dist/lib/workflow/compiled-plan.js.map +1 -0
  149. package/dist/lib/workflow/executor.d.ts +18 -0
  150. package/dist/lib/workflow/executor.d.ts.map +1 -0
  151. package/dist/lib/workflow/executor.js +2 -0
  152. package/dist/lib/workflow/executor.js.map +1 -0
  153. package/dist/lib/workflow/graph.d.ts +30 -0
  154. package/dist/lib/workflow/graph.d.ts.map +1 -0
  155. package/dist/lib/workflow/graph.js +139 -0
  156. package/dist/lib/workflow/graph.js.map +1 -0
  157. package/dist/lib/workflow/input.d.ts +4 -0
  158. package/dist/lib/workflow/input.d.ts.map +1 -0
  159. package/dist/lib/workflow/input.js +4 -0
  160. package/dist/lib/workflow/input.js.map +1 -0
  161. package/dist/lib/workflow/node-executor.d.ts +19 -0
  162. package/dist/lib/workflow/node-executor.d.ts.map +1 -0
  163. package/dist/lib/workflow/node-executor.js +2 -0
  164. package/dist/lib/workflow/node-executor.js.map +1 -0
  165. package/dist/lib/workflow/planning.d.ts +52 -0
  166. package/dist/lib/workflow/planning.d.ts.map +1 -0
  167. package/dist/lib/workflow/planning.js +865 -0
  168. package/dist/lib/workflow/planning.js.map +1 -0
  169. package/dist/lib/workflow/types.d.ts +71 -0
  170. package/dist/lib/workflow/types.d.ts.map +1 -0
  171. package/dist/lib/workflow/types.js +2 -0
  172. package/dist/lib/workflow/types.js.map +1 -0
  173. package/dist/lib/workflow-artifacts.d.ts.map +1 -1
  174. package/dist/lib/workflow-artifacts.js +23 -1
  175. package/dist/lib/workflow-artifacts.js.map +1 -1
  176. package/dist/lib/write-json-output.d.ts.map +1 -1
  177. package/dist/lib/write-json-output.js +3 -8
  178. package/dist/lib/write-json-output.js.map +1 -1
  179. package/dist/pi/sdk.d.ts.map +1 -1
  180. package/dist/pi/sdk.js +276 -19
  181. package/dist/pi/sdk.js.map +1 -1
  182. package/dist/runtime/client.d.ts +3 -0
  183. package/dist/runtime/client.d.ts.map +1 -1
  184. package/dist/runtime/client.js +4 -0
  185. package/dist/runtime/client.js.map +1 -1
  186. package/dist/temporal/activities.d.ts +26 -0
  187. package/dist/temporal/activities.d.ts.map +1 -0
  188. package/dist/temporal/activities.js +219 -0
  189. package/dist/temporal/activities.js.map +1 -0
  190. package/dist/temporal/config.d.ts +4 -0
  191. package/dist/temporal/config.d.ts.map +1 -0
  192. package/dist/temporal/config.js +36 -0
  193. package/dist/temporal/config.js.map +1 -0
  194. package/dist/temporal/executor.d.ts +7 -0
  195. package/dist/temporal/executor.d.ts.map +1 -0
  196. package/dist/temporal/executor.js +240 -0
  197. package/dist/temporal/executor.js.map +1 -0
  198. package/dist/temporal/retry-policy.d.ts +28 -0
  199. package/dist/temporal/retry-policy.d.ts.map +1 -0
  200. package/dist/temporal/retry-policy.js +61 -0
  201. package/dist/temporal/retry-policy.js.map +1 -0
  202. package/dist/temporal/types.d.ts +86 -0
  203. package/dist/temporal/types.d.ts.map +1 -0
  204. package/dist/temporal/types.js +2 -0
  205. package/dist/temporal/types.js.map +1 -0
  206. package/dist/temporal/worker.d.ts +3 -0
  207. package/dist/temporal/worker.d.ts.map +1 -0
  208. package/dist/temporal/worker.js +18 -0
  209. package/dist/temporal/worker.js.map +1 -0
  210. package/dist/temporal/workflow-id.d.ts +27 -0
  211. package/dist/temporal/workflow-id.d.ts.map +1 -0
  212. package/dist/temporal/workflow-id.js +53 -0
  213. package/dist/temporal/workflow-id.js.map +1 -0
  214. package/dist/temporal/workflows.d.ts +6 -0
  215. package/dist/temporal/workflows.d.ts.map +1 -0
  216. package/dist/temporal/workflows.js +355 -0
  217. package/dist/temporal/workflows.js.map +1 -0
  218. package/package.json +24 -9
@@ -0,0 +1,121 @@
1
+ import { createHash } from 'crypto';
2
+ import { mkdir, readFile, writeFile } from 'fs/promises';
3
+ import { dirname, join } from 'path';
4
+ import { resolveWithinWorkingDir } from '../path-utils.js';
5
+ export const DEFAULT_ARTIFACT_POLICY = {
6
+ mode: 'ref-large-values',
7
+ inlineMaxBytes: 64 * 1024,
8
+ };
9
+ export function isArtifactRef(value) {
10
+ return (typeof value === 'object' &&
11
+ value !== null &&
12
+ value.kind === 'artifact-ref' &&
13
+ typeof value.key === 'string' &&
14
+ typeof value.uri === 'string');
15
+ }
16
+ /**
17
+ * Decide whether a value should stay inline or be offloaded to the store.
18
+ */
19
+ export function shouldInline(serializedSize, policy) {
20
+ if (policy.mode === 'inline-only')
21
+ return true;
22
+ if (policy.mode === 'ref-all-values')
23
+ return false;
24
+ return serializedSize <= policy.inlineMaxBytes;
25
+ }
26
+ function serialize(value) {
27
+ if (typeof value === 'string') {
28
+ return { bytes: Buffer.from(value, 'utf-8'), contentType: 'text/plain' };
29
+ }
30
+ return {
31
+ bytes: Buffer.from(JSON.stringify(value, null, 2), 'utf-8'),
32
+ contentType: 'application/json',
33
+ };
34
+ }
35
+ function deserialize(buf, contentType) {
36
+ const text = buf.toString('utf-8');
37
+ if (contentType === 'application/json') {
38
+ return JSON.parse(text);
39
+ }
40
+ if (contentType === 'text/plain') {
41
+ return text;
42
+ }
43
+ // Fallback: try JSON, then treat as string.
44
+ try {
45
+ return JSON.parse(text);
46
+ }
47
+ catch {
48
+ return text;
49
+ }
50
+ }
51
+ function sha256(buf) {
52
+ return createHash('sha256').update(buf).digest('hex');
53
+ }
54
+ function slugSegment(value, fallback) {
55
+ const raw = value === undefined || value === '' ? fallback : String(value);
56
+ const slug = raw
57
+ .trim()
58
+ .replace(/[^A-Za-z0-9._-]+/g, '-')
59
+ .replace(/^-+|-+$/g, '');
60
+ return slug || fallback;
61
+ }
62
+ function sanitizeKey(key) {
63
+ const segments = key.split('/').map((seg) => slugSegment(seg, 'segment'));
64
+ if (segments.some((seg) => seg === '..' || seg === '.')) {
65
+ throw new Error(`Refusing to put artifact with unsafe key: ${key}`);
66
+ }
67
+ return segments.join('/');
68
+ }
69
+ /**
70
+ * Local filesystem artifact store.
71
+ *
72
+ * Persists artifacts under `.drs/artifacts/temporal/<namespace>/<key>` within
73
+ * the specified working directory. The `uri` in returned refs is a relative
74
+ * path so the store works consistently across machines when the working
75
+ * directory matches.
76
+ */
77
+ export class LocalWorkflowArtifactStore {
78
+ workingDir;
79
+ baseDir;
80
+ constructor(workingDir, namespace = 'default') {
81
+ this.workingDir = workingDir;
82
+ const slug = slugSegment(namespace, 'default');
83
+ this.baseDir = `.drs/artifacts/temporal/${slug}`;
84
+ }
85
+ async put(key, value, metadata) {
86
+ const { bytes, contentType } = serialize(value);
87
+ const resolvedContentType = metadata?.contentType ?? contentType;
88
+ const hash = sha256(bytes);
89
+ const safeKey = sanitizeKey(key);
90
+ const relativePath = join(this.baseDir, `${safeKey}.json`);
91
+ const fullPath = resolveWithinWorkingDir(this.workingDir, relativePath, 'write');
92
+ await mkdir(dirname(fullPath), { recursive: true });
93
+ await writeFile(fullPath, bytes, 'utf-8');
94
+ return {
95
+ kind: 'artifact-ref',
96
+ key,
97
+ uri: relativePath,
98
+ contentType: resolvedContentType,
99
+ sizeBytes: bytes.length,
100
+ sha256: hash,
101
+ };
102
+ }
103
+ async get(ref) {
104
+ const fullPath = resolveWithinWorkingDir(this.workingDir, ref.uri, 'read');
105
+ const bytes = await readFile(fullPath);
106
+ return deserialize(bytes, ref.contentType);
107
+ }
108
+ async exists(ref) {
109
+ try {
110
+ const fullPath = resolveWithinWorkingDir(this.workingDir, ref.uri, 'read');
111
+ await readFile(fullPath);
112
+ return true;
113
+ }
114
+ catch (error) {
115
+ if (error.code === 'ENOENT')
116
+ return false;
117
+ throw error;
118
+ }
119
+ }
120
+ }
121
+ //# sourceMappingURL=artifact-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-store.js","sourceRoot":"","sources":["../../../src/lib/workflow/artifact-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { DRSConfig, WorkflowNodeConfig } from '../config.js';
2
+ /**
3
+ * Workflow node as it appears in a compiled plan.
4
+ *
5
+ * This is currently an API-facing alias for WorkflowNodeConfig so future plan
6
+ * schema changes can evolve independently from raw workflow config types.
7
+ */
8
+ export type CompiledWorkflowNode = WorkflowNodeConfig;
9
+ /**
10
+ * A DRS workflow control-flow segment expressed as JSON-serializable data.
11
+ *
12
+ * - DAG segments list their node ids plus, when a control node routes into
13
+ * them, the set of active node ids that should actually execute (inactive
14
+ * node ids are skipped by the runner). Active ids are absent for plain DAG
15
+ * segments with no gating control node.
16
+ * - Control segments record the controlling node id.
17
+ */
18
+ export type CompiledWorkflowSegment = {
19
+ type: 'dag';
20
+ nodeIds: string[];
21
+ activeNodeIds?: string[];
22
+ } | {
23
+ type: 'control';
24
+ nodeId: string;
25
+ };
26
+ /**
27
+ * Metadata for a single workflow input, normalized to a plain object so the
28
+ * compiled plan is JSON-serializable even when the original input is declared
29
+ * as a bare string.
30
+ */
31
+ export interface CompiledWorkflowInput {
32
+ type: 'string' | 'boolean' | 'number' | 'enum';
33
+ value?: string;
34
+ file?: string;
35
+ default?: string | number | boolean;
36
+ required?: boolean;
37
+ values?: Array<string | number | boolean>;
38
+ description?: string;
39
+ }
40
+ /**
41
+ * A fully resolved, JSON-serializable description of a workflow ready to be
42
+ * handed to an executor (local or Temporal). It carries everything needed to
43
+ * schedule nodes without reloading repo config: normalized nodes, execution
44
+ * order, waves, control-flow segments, input metadata, and the output key.
45
+ *
46
+ * Resolved input *values* are intentionally not part of the plan; they are
47
+ * supplied separately at run time so the same plan can dispatch multiple runs
48
+ * with different inputs.
49
+ */
50
+ export interface CompiledWorkflowPlan {
51
+ /** Schema version so executors can evolve the shape safely. */
52
+ schemaVersion: 1;
53
+ /** Workflow name as resolved from config.workflows. */
54
+ workflowName: string;
55
+ /** Optional human-readable description. */
56
+ description?: string;
57
+ /** Origin of the workflow definition: packaged or project. */
58
+ source: 'packaged' | 'project';
59
+ /** Project workflows overriding a packaged workflow of the same name. */
60
+ overridesPackaged: boolean;
61
+ /** Workflow-level output artifact key. May be undefined (last node output). */
62
+ output?: string;
63
+ /** Workflow input metadata keyed by input name. */
64
+ inputs: Record<string, CompiledWorkflowInput>;
65
+ /** Normalized nodes keyed by id, identical in shape to WorkflowNodeConfig. */
66
+ nodes: Record<string, CompiledWorkflowNode>;
67
+ /** Dependency-ordered node ids (topological). */
68
+ executionOrder: string[];
69
+ /** Wave grouping for parallel DAG execution. */
70
+ waves: string[][];
71
+ /** Control-flow segments for control-bearing workflows; empty for DAG-only. */
72
+ segments: CompiledWorkflowSegment[];
73
+ /** True when the workflow uses any control (loop/switch/end/passThrough) node. */
74
+ hasControlNodes: boolean;
75
+ /** Id of the last node in execution order, used when output is undefined. */
76
+ lastNodeId: string;
77
+ }
78
+ /**
79
+ * Subset of {@link WorkflowRunOptions} relevant to plan compilation. The
80
+ * workingDir is used only to resolve workflow source info (packaged vs.
81
+ * project) and does not become part of the serialized plan.
82
+ */
83
+ export interface CompileWorkflowPlanOptions {
84
+ workingDir?: string;
85
+ }
86
+ export declare function compileWorkflowPlan(config: DRSConfig, workflowName: string, options?: CompileWorkflowPlanOptions): CompiledWorkflowPlan;
87
+ //# sourceMappingURL=compiled-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiled-plan.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/compiled-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAGT,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAWtB;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEtD;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,aAAa,EAAE,CAAC,CAAC;IACjB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IAC/B,yEAAyE;IACzE,iBAAiB,EAAE,OAAO,CAAC;IAC3B,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC9C,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC5C,iDAAiD;IACjD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gDAAgD;IAChD,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;IAClB,+EAA+E;IAC/E,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,kFAAkF;IAClF,eAAe,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiBD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,0BAA+B,GACvC,oBAAoB,CAmDtB"}
@@ -0,0 +1,62 @@
1
+ import { loadWorkflowSourceInfo } from '../config.js';
2
+ import { getWorkflowExecutionOrder, getWorkflowExecutionWaves, getWorkflowNodes, hasWorkflowControlNodes, splitWorkflowSegments, } from './planning.js';
3
+ import { getWorkflowInputConfigType } from './input.js';
4
+ function normalizeWorkflowInput(input) {
5
+ if (typeof input === 'string') {
6
+ return { type: 'string', value: input };
7
+ }
8
+ return {
9
+ type: getWorkflowInputConfigType(input),
10
+ value: input.value,
11
+ file: input.file,
12
+ default: input.default,
13
+ required: input.required,
14
+ values: input.values,
15
+ description: input.description,
16
+ };
17
+ }
18
+ export function compileWorkflowPlan(config, workflowName, options = {}) {
19
+ const workflow = config.workflows?.[workflowName];
20
+ if (!workflow) {
21
+ throw new Error(`Unknown workflow "${workflowName}".`);
22
+ }
23
+ const workingDir = options.workingDir ?? process.cwd();
24
+ const sourceInfo = loadWorkflowSourceInfo(workingDir)[workflowName] ?? {
25
+ source: 'packaged',
26
+ overridesPackaged: false,
27
+ };
28
+ const nodes = getWorkflowNodes(workflowName, workflow);
29
+ const executionOrder = getWorkflowExecutionOrder(nodes);
30
+ const waves = getWorkflowExecutionWaves(nodes, executionOrder);
31
+ const hasControlNodes = hasWorkflowControlNodes(nodes);
32
+ const segments = hasControlNodes
33
+ ? splitWorkflowSegments(nodes, executionOrder).map((segment) => segment.type === 'control'
34
+ ? { type: 'control', nodeId: segment.nodeId }
35
+ : {
36
+ type: 'dag',
37
+ nodeIds: segment.nodeIds,
38
+ ...(segment.activeNodeIds
39
+ ? { activeNodeIds: Array.from(segment.activeNodeIds) }
40
+ : {}),
41
+ })
42
+ : [];
43
+ return {
44
+ schemaVersion: 1,
45
+ workflowName,
46
+ description: workflow.description,
47
+ source: sourceInfo.source,
48
+ overridesPackaged: sourceInfo.overridesPackaged,
49
+ output: workflow.output,
50
+ inputs: Object.fromEntries(Object.entries(workflow.inputs ?? {}).map(([name, input]) => [
51
+ name,
52
+ normalizeWorkflowInput(input),
53
+ ])),
54
+ nodes,
55
+ executionOrder,
56
+ waves,
57
+ segments,
58
+ hasControlNodes,
59
+ lastNodeId: executionOrder[executionOrder.length - 1] ?? '',
60
+ };
61
+ }
62
+ //# sourceMappingURL=compiled-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiled-plan.js","sourceRoot":"","sources":["../../../src/lib/workflow/compiled-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { DRSConfig } from '../config.js';
2
+ import type { WorkflowRunOptions, WorkflowRunResult } from './types.js';
3
+ /**
4
+ * Execution backend for DRS workflows.
5
+ *
6
+ * The CLI's default backend is the local in-process executor. A Temporal
7
+ * executor will implement this same interface so that `drs workflow run` can
8
+ * dispatch through either backend without changing the workflow DSL or the
9
+ * result shape.
10
+ */
11
+ export interface WorkflowExecutor {
12
+ /**
13
+ * Run a workflow by name using the project config and return the same
14
+ * `WorkflowRunResult` shape as the local executor.
15
+ */
16
+ run(config: DRSConfig, workflowName: string, options?: WorkflowRunOptions): Promise<WorkflowRunResult>;
17
+ }
18
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAExE;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,GAAG,CACD,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/lib/workflow/executor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import type { WorkflowConfig } from '../config.js';
2
+ export type WorkflowGraphNodeKind = 'agent' | 'agents' | 'action' | 'control';
3
+ export type WorkflowGraphEdgeKind = 'dependency' | 'control';
4
+ export interface WorkflowGraphNode {
5
+ id: string;
6
+ label: string;
7
+ kind: WorkflowGraphNodeKind;
8
+ agent?: string;
9
+ agentsFrom?: string;
10
+ action?: string;
11
+ control?: string;
12
+ condition?: string;
13
+ output?: string;
14
+ writes?: string;
15
+ }
16
+ export interface WorkflowGraphEdge {
17
+ id: string;
18
+ source: string;
19
+ target: string;
20
+ kind: WorkflowGraphEdgeKind;
21
+ label?: string;
22
+ }
23
+ export interface WorkflowGraph {
24
+ workflow: string;
25
+ nodes: WorkflowGraphNode[];
26
+ edges: WorkflowGraphEdge[];
27
+ }
28
+ export declare function buildWorkflowGraph(workflowName: string, workflow: WorkflowConfig): WorkflowGraph;
29
+ export declare function formatWorkflowGraphMermaid(graph: WorkflowGraph): string;
30
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,cAAc,CAAC;AAQvE,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC9E,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,aAAa,CA0BhG;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAcvE"}
@@ -0,0 +1,139 @@
1
+ import { getNodeKind, getNodeNeeds, getWorkflowExecutionOrder, getWorkflowNodes, } from './planning.js';
2
+ export function buildWorkflowGraph(workflowName, workflow) {
3
+ const nodesById = getWorkflowNodes(workflowName, workflow);
4
+ const orderedNodeIds = getWorkflowExecutionOrder(nodesById);
5
+ const edges = [];
6
+ for (const nodeId of orderedNodeIds) {
7
+ const node = nodesById[nodeId];
8
+ if (!node)
9
+ continue;
10
+ for (const dependency of getNodeNeeds(node)) {
11
+ edges.push({
12
+ id: `dependency:${dependency}->${nodeId}`,
13
+ source: dependency,
14
+ target: nodeId,
15
+ kind: 'dependency',
16
+ });
17
+ }
18
+ edges.push(...getWorkflowControlEdges(nodeId, node));
19
+ }
20
+ return {
21
+ workflow: workflowName,
22
+ nodes: orderedNodeIds.map((nodeId) => buildWorkflowGraphNode(nodeId, nodesById[nodeId])),
23
+ edges,
24
+ };
25
+ }
26
+ export function formatWorkflowGraphMermaid(graph) {
27
+ const lines = ['flowchart TD'];
28
+ for (const node of graph.nodes) {
29
+ lines.push(` ${mermaidId(node.id)}${mermaidNodeShape(node)}`);
30
+ }
31
+ for (const edge of graph.edges) {
32
+ const label = edge.label ? `|${escapeMermaidLabel(edge.label)}|` : '';
33
+ const arrow = edge.kind === 'control' ? '-.->' : '-->';
34
+ lines.push(` ${mermaidId(edge.source)} ${arrow}${label} ${mermaidId(edge.target)}`);
35
+ }
36
+ return `${lines.join('\n')}\n`;
37
+ }
38
+ function buildWorkflowGraphNode(nodeId, node) {
39
+ return {
40
+ id: nodeId,
41
+ label: getWorkflowGraphNodeLabel(nodeId, node),
42
+ kind: getNodeKind(node),
43
+ agent: node.agent,
44
+ agentsFrom: node.agentsFrom,
45
+ action: node.action,
46
+ control: node.control,
47
+ condition: node.if,
48
+ output: node.output,
49
+ writes: node.writes,
50
+ };
51
+ }
52
+ function getWorkflowGraphNodeLabel(nodeId, node) {
53
+ if (node.agent)
54
+ return `${nodeId}\n${node.agent}`;
55
+ if (node.agentsFrom)
56
+ return `${nodeId}\n${node.agentsFrom}`;
57
+ if (node.action)
58
+ return `${nodeId}\n${node.action}`;
59
+ if (node.control)
60
+ return `${nodeId}\n${node.control}`;
61
+ return nodeId;
62
+ }
63
+ function getWorkflowControlEdges(nodeId, node) {
64
+ if (node.control === 'loop') {
65
+ return [
66
+ ...(node.target
67
+ ? [
68
+ {
69
+ id: `control:${nodeId}->${node.target}:loop`,
70
+ source: nodeId,
71
+ target: node.target,
72
+ kind: 'control',
73
+ label: node.if ? `loop: ${node.if}` : 'loop',
74
+ },
75
+ ]
76
+ : []),
77
+ ...(node.exit
78
+ ? [
79
+ {
80
+ id: `control:${nodeId}->${node.exit}:exit`,
81
+ source: nodeId,
82
+ target: node.exit,
83
+ kind: 'control',
84
+ label: 'exit',
85
+ },
86
+ ]
87
+ : []),
88
+ ];
89
+ }
90
+ if (node.control === 'switch') {
91
+ return [
92
+ ...Object.entries(node.cases ?? {}).map(([caseLabel, target]) => ({
93
+ id: `control:${nodeId}->${target}:case:${caseLabel}`,
94
+ source: nodeId,
95
+ target,
96
+ kind: 'control',
97
+ label: `case ${caseLabel}`,
98
+ })),
99
+ ...(node.default
100
+ ? [
101
+ {
102
+ id: `control:${nodeId}->${node.default}:default`,
103
+ source: nodeId,
104
+ target: node.default,
105
+ kind: 'control',
106
+ label: 'default',
107
+ },
108
+ ]
109
+ : []),
110
+ ];
111
+ }
112
+ if (node.control === 'passThrough' && node.target) {
113
+ return [
114
+ {
115
+ id: `control:${nodeId}->${node.target}:target`,
116
+ source: nodeId,
117
+ target: node.target,
118
+ kind: 'control',
119
+ label: 'target',
120
+ },
121
+ ];
122
+ }
123
+ return [];
124
+ }
125
+ function mermaidId(id) {
126
+ return `n_${id.replace(/[^A-Za-z0-9_]/g, '_')}`;
127
+ }
128
+ function mermaidNodeShape(node) {
129
+ const label = escapeMermaidLabel(node.label);
130
+ if (node.kind === 'control')
131
+ return `{${label}}`;
132
+ if (node.kind === 'agent' || node.kind === 'agents')
133
+ return `([${label}])`;
134
+ return `[${label}]`;
135
+ }
136
+ function escapeMermaidLabel(label) {
137
+ return JSON.stringify(label).slice(1, -1).replace(/"/g, '#quot;');
138
+ }
139
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/lib/workflow/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WorkflowInputConfig } from '../config.js';
2
+ export type WorkflowInputConfigType = 'string' | 'boolean' | 'number' | 'enum';
3
+ export declare function getWorkflowInputConfigType(input: WorkflowInputConfig): WorkflowInputConfigType;
4
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/E,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,mBAAmB,GAAG,uBAAuB,CAE9F"}
@@ -0,0 +1,4 @@
1
+ export function getWorkflowInputConfigType(input) {
2
+ return typeof input === 'string' ? 'string' : (input.type ?? 'string');
3
+ }
4
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/lib/workflow/input.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,0BAA0B,CAAC,KAA0B;IACnE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { WorkflowNodeConfig } from '../config.js';
2
+ import type { WorkflowNodeResult, WorkflowTemplateContext } from './types.js';
3
+ /**
4
+ * Boundary for side-effecting workflow node execution.
5
+ *
6
+ * Deterministic orchestration (dependency scheduling, waves, skip/condition
7
+ * evaluation, result assembly) lives in the workflow runner/Temporal workflow.
8
+ * Side effects (agents, actions, git, platform calls, file writes, artifact
9
+ * operations, model calls) live behind this interface so the same node
10
+ * execution can run either in-process or as a Temporal activity.
11
+ *
12
+ * `runNode` executes a single non-control node using `context` for template
13
+ * rendering and returns the node's result. Skip/condition decisions are made
14
+ * by the caller; `runNode` only executes nodes the caller has chosen to run.
15
+ */
16
+ export interface NodeExecutor {
17
+ runNode(nodeId: string, node: WorkflowNodeConfig, context: WorkflowTemplateContext): Promise<WorkflowNodeResult>;
18
+ }
19
+ //# sourceMappingURL=node-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-executor.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/node-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CACL,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=node-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-executor.js","sourceRoot":"","sources":["../../../src/lib/workflow/node-executor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import type { WorkflowConfig, WorkflowNodeConfig } from '../config.js';
2
+ import type { WorkflowNodeResult, WorkflowTemplateContext } from './types.js';
3
+ export declare function getNodeNeeds(node: WorkflowNodeConfig): string[];
4
+ export declare function getControlTargets(node: WorkflowNodeConfig): string[];
5
+ export declare function validateWorkflowControlTargets(nodes: Record<string, WorkflowNodeConfig>): void;
6
+ export declare function validateWorkflowControlRouteDirection(nodes: Record<string, WorkflowNodeConfig>, executionOrder: string[]): void;
7
+ export declare function validateWorkflowPassThroughShape(nodeId: string, node: WorkflowNodeConfig): void;
8
+ export declare const WORKFLOW_NODE_FIELDS: Set<string>;
9
+ export declare const EXECUTABLE_NODE_FIELDS: Set<string>;
10
+ export declare const CONTROL_NODE_FIELDS: Record<string, Set<string>>;
11
+ export declare const ACTION_OPTION_FIELDS: Partial<Record<NonNullable<WorkflowNodeConfig['action']>, Set<string>>>;
12
+ export declare function validateAllowedFields(nodeId: string, value: Record<string, unknown>, allowed: Set<string>, subject: string): void;
13
+ export declare function validateWorkflowNodeShape(nodeId: string, node: WorkflowNodeConfig): void;
14
+ export declare function validateWorkflowNodeKinds(nodes: Record<string, WorkflowNodeConfig>): void;
15
+ export declare function hasWorkflowControlNodes(nodes: Record<string, WorkflowNodeConfig>): boolean;
16
+ export declare function isPotentialWorkspaceMutation(node: WorkflowNodeConfig): boolean;
17
+ export declare function getWorkflowExecutionOrder(nodes: Record<string, WorkflowNodeConfig>): string[];
18
+ export declare function getWorkflowNodes(workflowName: string, workflow: WorkflowConfig): Record<string, WorkflowNodeConfig>;
19
+ export declare function getWorkflowExecutionWaves(nodes: Record<string, WorkflowNodeConfig>, executionOrder: string[]): string[][];
20
+ export declare function getPathValue(root: unknown, path: string): unknown;
21
+ export declare function stringifyTemplateValue(value: unknown): string;
22
+ export declare function renderTemplate(template: string, context: WorkflowTemplateContext): string;
23
+ export declare function getNodeKind(node: WorkflowNodeConfig): 'agent' | 'agents' | 'action' | 'control';
24
+ export type WorkflowSegment = {
25
+ type: 'dag';
26
+ nodeIds: string[];
27
+ activeNodeIds?: Set<string>;
28
+ } | {
29
+ type: 'control';
30
+ nodeId: string;
31
+ };
32
+ export declare function parseWorkflowExpressionValue(value: string, context?: WorkflowTemplateContext): unknown;
33
+ export declare function isWorkflowTruthy(value: unknown): boolean;
34
+ export declare function normalizeWorkflowBooleanLike(value: unknown): boolean | undefined;
35
+ export declare function compareWorkflowValues(left: unknown, operator: string, right: unknown): boolean;
36
+ export declare function splitWorkflowExpressionOperator(expression: string, operator: '&&' | '||'): string[];
37
+ export declare function stripWorkflowExpressionParens(expression: string): string;
38
+ export declare function evaluateWorkflowExpressionText(rendered: string, context: WorkflowTemplateContext): boolean;
39
+ export declare function evaluateWorkflowExpression(expression: string, context: WorkflowTemplateContext): boolean;
40
+ export declare function splitWorkflowSegments(workflowNodes: Record<string, WorkflowNodeConfig>, executionOrder: string[]): WorkflowSegment[];
41
+ export declare function findWorkflowSegmentIndex(segments: WorkflowSegment[], targetNodeId: string): number;
42
+ export declare function computeActiveWorkflowNodes(workflowNodes: Record<string, WorkflowNodeConfig>, nodeIds: string[], rootNodeId: string, includeRootDependencies?: boolean): Set<string>;
43
+ export declare function runControlWorkflowNode(nodeId: string, node: WorkflowNodeConfig, context: WorkflowTemplateContext): {
44
+ result: WorkflowNodeResult;
45
+ nextNodeId?: string;
46
+ ended?: boolean;
47
+ };
48
+ export declare function createSkippedWorkflowNodeResult(nodeId: string): WorkflowNodeResult;
49
+ export declare function getWorkflowNodeRunCondition(node: WorkflowNodeConfig): string | undefined;
50
+ export declare function getSkippedWorkflowDependencies(node: WorkflowNodeConfig, nodes: Record<string, WorkflowNodeResult>): string[];
51
+ export declare function getWorkflowNodeSkipReason(node: WorkflowNodeConfig, context: WorkflowTemplateContext): string | undefined;
52
+ //# sourceMappingURL=planning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/planning.ts"],"names":[],"mappings":"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"}