@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,53 @@
1
+ import { randomUUID } from 'crypto';
2
+ /**
3
+ * Sanitize a value for safe inclusion in a Temporal workflow ID.
4
+ *
5
+ * Replaces any character outside [A-Za-z0-9._-] with a dash and trims leading
6
+ * / trailing dashes, so values like GitLab project paths (`org/subgroup/repo`)
7
+ * become ID-safe segments (`org-subgroup-repo`).
8
+ */
9
+ function sanitizeIdSegment(value) {
10
+ return value.replace(/[^A-Za-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'unknown';
11
+ }
12
+ /**
13
+ * Derive a deterministic Temporal workflow ID from the workflow name and
14
+ * resolved inputs.
15
+ *
16
+ * DRS workflows are triggered by external events whose identity is stable
17
+ * across re-deliveries (a webhook retried, a scheduler replay, a service
18
+ * restart). A deterministic workflow ID lets Temporal's built-in workflow-ID
19
+ * uniqueness deduplicate repeated triggers instead of scheduling duplicate
20
+ * work.
21
+ *
22
+ * Recognized trigger patterns (based on the standard DRS workflow inputs):
23
+ *
24
+ * - **GitHub PR** — inputs contain `owner`, `repo`, and `pr`:
25
+ * `{prefix}-{workflowName}-gh-{owner}-{repo}-pr-{pr}`
26
+ * - **GitLab MR** — inputs contain `project` and `mr`:
27
+ * `{prefix}-{workflowName}-gl-{project}-mr-{mr}`
28
+ *
29
+ * Workflows without a recognized external trigger identity (e.g. `local-review`,
30
+ * one-off CLI runs, smoke tests) fall back to a random UUID suffix so each
31
+ * dispatch is a fresh run — exactly the behavior expected for unique work.
32
+ *
33
+ * Callers that need full control (a service layer with a custom trigger
34
+ * identity) can bypass this helper by passing an explicit `workflowId` in
35
+ * {@link WorkflowRunOptions}.
36
+ */
37
+ export function deriveTemporalWorkflowId(prefix, workflowName, inputs) {
38
+ const safePrefix = sanitizeIdSegment(prefix);
39
+ const safeName = sanitizeIdSegment(workflowName);
40
+ const owner = inputs['owner'];
41
+ const repo = inputs['repo'];
42
+ const pr = inputs['pr'];
43
+ if (owner && repo && pr) {
44
+ return `${safePrefix}-${safeName}-gh-${sanitizeIdSegment(owner)}-${sanitizeIdSegment(repo)}-pr-${sanitizeIdSegment(pr)}`;
45
+ }
46
+ const project = inputs['project'];
47
+ const mr = inputs['mr'];
48
+ if (project && mr) {
49
+ return `${safePrefix}-${safeName}-gl-${sanitizeIdSegment(project)}-mr-${sanitizeIdSegment(mr)}`;
50
+ }
51
+ return `${safePrefix}-${safeName}-${randomUUID()}`;
52
+ }
53
+ //# sourceMappingURL=workflow-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-id.js","sourceRoot":"","sources":["../../src/temporal/workflow-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;AACtF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAc,EACd,YAAoB,EACpB,MAA8B;IAE9B,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAExB,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QACxB,OAAO,GAAG,UAAU,IAAI,QAAQ,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3H,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAExB,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;QAClB,OAAO,GAAG,UAAU,IAAI,QAAQ,OAAO,iBAAiB,CAAC,OAAO,CAAC,OAAO,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;IAClG,CAAC;IAED,OAAO,GAAG,UAAU,IAAI,QAAQ,IAAI,UAAU,EAAE,EAAE,CAAC;AACrD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { TemporalWorkflowArtifactsQueryResult, TemporalWorkflowInput, TemporalWorkflowStatusQueryResult, TemporalWorkflowResult } from './types.js';
2
+ export declare const workflowStatusQuery: import("@temporalio/common").QueryDefinition<TemporalWorkflowStatusQueryResult, [], string>;
3
+ export declare const workflowLoopStateQuery: import("@temporalio/common").QueryDefinition<Record<string, import("../cli/workflow.js").WorkflowLoopState>, [], string>;
4
+ export declare const workflowArtifactsQuery: import("@temporalio/common").QueryDefinition<TemporalWorkflowArtifactsQueryResult, [], string>;
5
+ export declare function drsWorkflow(input: TemporalWorkflowInput): Promise<TemporalWorkflowResult>;
6
+ //# sourceMappingURL=workflows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/temporal/workflows.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAEV,oCAAoC,EACpC,qBAAqB,EACrB,iCAAiC,EACjC,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mBAAmB,6FACqC,CAAC;AACtE,eAAO,MAAM,sBAAsB,0HACmC,CAAC;AACvE,eAAO,MAAM,sBAAsB,gGACwC,CAAC;AA8Y5E,wBAAsB,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA6D/F"}
@@ -0,0 +1,355 @@
1
+ import { defineQuery, isCancellation, proxyActivities, setHandler, workflowInfo, } from '@temporalio/workflow';
2
+ import { computeActiveWorkflowNodes, createSkippedWorkflowNodeResult, findWorkflowSegmentIndex, getNodeNeeds, getWorkflowNodeSkipReason, isPotentialWorkspaceMutation, runControlWorkflowNode, } from '../lib/workflow/planning.js';
3
+ import { isArtifactRef } from '../lib/workflow/artifact-store.js';
4
+ import { getTemporalNodeRetryMode, TEMPORAL_RETRYABLE_ACTIVITY_POLICY } from './retry-policy.js';
5
+ export const workflowStatusQuery = defineQuery('drsWorkflowStatus');
6
+ export const workflowLoopStateQuery = defineQuery('drsWorkflowLoopState');
7
+ export const workflowArtifactsQuery = defineQuery('drsWorkflowArtifacts');
8
+ const { runWorkflowNodeActivity, resolveArtifactRefsActivity, prepareWorkspaceActivity } = proxyActivities({
9
+ startToCloseTimeout: '30 minutes',
10
+ // Bound total time across all retries so a persistently failing activity
11
+ // fails the workflow instead of retrying indefinitely. 3 hours comfortably
12
+ // allows 5 attempts at up to 30 minutes each plus backoff.
13
+ scheduleToCloseTimeout: '3 hours',
14
+ retry: TEMPORAL_RETRYABLE_ACTIVITY_POLICY,
15
+ });
16
+ const { runWorkflowNodeActivity: runWorkflowNodeNoRetryActivity } = proxyActivities({
17
+ startToCloseTimeout: '30 minutes',
18
+ retry: {
19
+ maximumAttempts: 1,
20
+ },
21
+ });
22
+ function recordNodeArtifact(nodeId, node, result, artifacts) {
23
+ const artifactValue = result.output ?? result.response ?? result.responses;
24
+ artifacts[nodeId] = artifactValue;
25
+ if (node.output) {
26
+ artifacts[node.output] = artifactValue;
27
+ }
28
+ if (result.outputs) {
29
+ for (const [name, value] of Object.entries(result.outputs)) {
30
+ artifacts[name] = value;
31
+ }
32
+ }
33
+ }
34
+ function recordWorkflowNodeResult(nodeId, node, result, nodes, artifacts) {
35
+ result.status ??= 'success';
36
+ nodes[nodeId] = result;
37
+ if (result.status !== 'skipped') {
38
+ recordNodeArtifact(nodeId, node, result, artifacts);
39
+ }
40
+ }
41
+ function buildWorkflowStatusSnapshot(input, context, runningNodeIds, isCancelled) {
42
+ const nodes = {};
43
+ for (const [nodeId, node] of Object.entries(input.plan.nodes)) {
44
+ const result = context.nodes[nodeId];
45
+ nodes[nodeId] = {
46
+ id: nodeId,
47
+ status: runningNodeIds.has(nodeId) ? 'running' : (result?.status ?? 'pending'),
48
+ action: node.action,
49
+ agent: node.agent,
50
+ control: node.control,
51
+ };
52
+ }
53
+ const info = workflowInfo();
54
+ return {
55
+ workflow: input.plan.workflowName,
56
+ workflowId: info.workflowId,
57
+ runId: info.runId,
58
+ cancelled: isCancelled,
59
+ nodes,
60
+ runningNodeIds: [...runningNodeIds],
61
+ completedNodeIds: Object.keys(context.nodes),
62
+ };
63
+ }
64
+ function buildArtifactsSnapshot(context) {
65
+ const artifactRefs = {};
66
+ for (const [key, value] of Object.entries(context.artifacts)) {
67
+ if (isArtifactRef(value)) {
68
+ artifactRefs[key] = value;
69
+ }
70
+ }
71
+ return {
72
+ artifactKeys: Object.keys(context.artifacts),
73
+ artifactRefs,
74
+ };
75
+ }
76
+ function createActivityIdempotencyContext(nodeId) {
77
+ const info = workflowInfo();
78
+ return {
79
+ workflowId: info.workflowId,
80
+ runId: info.runId,
81
+ nodeId,
82
+ idempotencyKey: `${info.workflowId}:${info.runId}:${nodeId}`,
83
+ };
84
+ }
85
+ async function runTemporalWorkflowNodeActivity(input, nodeId, node, context) {
86
+ const activityInput = {
87
+ workingDir: input.workingDir,
88
+ nodeId,
89
+ node,
90
+ context,
91
+ options: input.options,
92
+ idempotencyContext: createActivityIdempotencyContext(nodeId),
93
+ offloadArtifacts: true,
94
+ };
95
+ if (getTemporalNodeRetryMode(node) === 'no-retry') {
96
+ return runWorkflowNodeNoRetryActivity(activityInput);
97
+ }
98
+ return runWorkflowNodeActivity(activityInput);
99
+ }
100
+ /**
101
+ * Extract artifact keys referenced by a template/expression string.
102
+ *
103
+ * Scans for `{{artifacts.KEY}}` template references and bare `artifacts.KEY`
104
+ * path references, collecting only the first path segment after `artifacts.`
105
+ * (the key in `context.artifacts`). Subsequent dotted segments are sub-paths
106
+ * within the resolved value and are resolved at evaluation time.
107
+ */
108
+ function extractArtifactKeysFromExpression(expression, keys) {
109
+ for (const match of expression.matchAll(/\{\{\s*artifacts\.([A-Za-z0-9_-]+)/g)) {
110
+ keys.add(match[1] ?? '');
111
+ }
112
+ const stripped = expression.replace(/\{\{[^}]+\}\}/g, '');
113
+ for (const match of stripped.matchAll(/(?:^|[^A-Za-z0-9_.])artifacts\.([A-Za-z0-9_-]+)/g)) {
114
+ keys.add(match[1] ?? '');
115
+ }
116
+ keys.delete('');
117
+ }
118
+ /**
119
+ * Resolve only the artifact refs needed for upcoming control-flow evaluation.
120
+ *
121
+ * Returns a shallow-copy evaluation context with the requested keys resolved.
122
+ * The original `context.artifacts` is never mutated, so large values that are
123
+ * not needed for branching stay as refs in workflow state and never enter
124
+ * Temporal event history. Activities self-hydrate from their own deserialized
125
+ * copy, so node execution is unaffected.
126
+ */
127
+ async function resolveEvaluationArtifacts(input, context, keys) {
128
+ if (keys.size === 0)
129
+ return context;
130
+ const refsToResolve = {};
131
+ for (const key of keys) {
132
+ const value = context.artifacts[key];
133
+ if (isArtifactRef(value)) {
134
+ refsToResolve[key] = value;
135
+ }
136
+ }
137
+ if (Object.keys(refsToResolve).length === 0)
138
+ return context;
139
+ const resolved = await resolveArtifactRefsActivity({
140
+ workingDir: input.workingDir,
141
+ refs: refsToResolve,
142
+ });
143
+ return {
144
+ ...context,
145
+ artifacts: { ...context.artifacts, ...resolved },
146
+ };
147
+ }
148
+ /**
149
+ * Build an evaluation context for a set of runnable DAG nodes by resolving
150
+ * only the artifact refs referenced by their `if` conditions.
151
+ */
152
+ async function resolveDagEvaluationContext(input, context, runnableNodeIds) {
153
+ const keys = new Set();
154
+ for (const nodeId of runnableNodeIds) {
155
+ const node = input.plan.nodes[nodeId];
156
+ if (node?.if) {
157
+ extractArtifactKeysFromExpression(node.if, keys);
158
+ }
159
+ }
160
+ return resolveEvaluationArtifacts(input, context, keys);
161
+ }
162
+ /**
163
+ * Build an evaluation context for a control node by resolving only the
164
+ * artifact refs referenced by its `if`, `value` (switch), or `maxIterations`
165
+ * (loop) expressions.
166
+ */
167
+ async function resolveControlEvaluationContext(input, context, node) {
168
+ const keys = new Set();
169
+ if (node.if) {
170
+ extractArtifactKeysFromExpression(node.if, keys);
171
+ }
172
+ if (node.control === 'switch' && node.value) {
173
+ extractArtifactKeysFromExpression(node.value, keys);
174
+ }
175
+ if (node.control === 'loop' && typeof node.maxIterations === 'string') {
176
+ extractArtifactKeysFromExpression(node.maxIterations, keys);
177
+ }
178
+ return resolveEvaluationArtifacts(input, context, keys);
179
+ }
180
+ async function runTemporalDagNodes(input, nodeIds, activeNodeIds, context, runningNodeIds) {
181
+ const { plan } = input;
182
+ const completed = new Set();
183
+ const segmentNodeIds = new Set(nodeIds);
184
+ if (activeNodeIds) {
185
+ for (const nodeId of nodeIds) {
186
+ if (!activeNodeIds.has(nodeId)) {
187
+ completed.add(nodeId);
188
+ context.nodes[nodeId] ??= createSkippedWorkflowNodeResult(nodeId);
189
+ }
190
+ }
191
+ }
192
+ while (completed.size < nodeIds.length) {
193
+ const runnable = nodeIds.filter((nodeId) => {
194
+ if (completed.has(nodeId))
195
+ return false;
196
+ const node = plan.nodes[nodeId];
197
+ if (!node)
198
+ return false;
199
+ return getNodeNeeds(node).every((dependency) => completed.has(dependency) || !segmentNodeIds.has(dependency));
200
+ });
201
+ if (runnable.length === 0) {
202
+ const incomplete = nodeIds.filter((nodeId) => !completed.has(nodeId));
203
+ throw new Error(`Workflow control runner could not make progress in a DAG segment. Pending nodes: ${incomplete.join(', ')}.`);
204
+ }
205
+ const evalContext = await resolveDagEvaluationContext(input, context, runnable);
206
+ const runNode = async (nodeId) => {
207
+ const node = plan.nodes[nodeId];
208
+ if (!node) {
209
+ throw new Error(`Workflow references unknown node "${nodeId}".`);
210
+ }
211
+ const skipReason = getWorkflowNodeSkipReason(node, evalContext);
212
+ if (skipReason) {
213
+ return { nodeId, node, result: createSkippedWorkflowNodeResult(nodeId) };
214
+ }
215
+ runningNodeIds.add(nodeId);
216
+ try {
217
+ const result = await runTemporalWorkflowNodeActivity(input, nodeId, node, context);
218
+ return { nodeId, node, result };
219
+ }
220
+ finally {
221
+ runningNodeIds.delete(nodeId);
222
+ }
223
+ };
224
+ const serializeWave = runnable.some((nodeId) => {
225
+ const node = plan.nodes[nodeId];
226
+ return node ? isPotentialWorkspaceMutation(node) : false;
227
+ });
228
+ const results = [];
229
+ if (serializeWave) {
230
+ for (const nodeId of runnable)
231
+ results.push(await runNode(nodeId));
232
+ }
233
+ else {
234
+ results.push(...(await Promise.all(runnable.map(runNode))));
235
+ }
236
+ for (const { nodeId, node, result } of results) {
237
+ completed.add(nodeId);
238
+ recordWorkflowNodeResult(nodeId, node, result, context.nodes, context.artifacts);
239
+ }
240
+ }
241
+ }
242
+ function toWorkflowSegments(compiledSegments) {
243
+ return compiledSegments.map((segment) => segment.type === 'control'
244
+ ? { type: 'control', nodeId: segment.nodeId }
245
+ : {
246
+ type: 'dag',
247
+ nodeIds: [...segment.nodeIds],
248
+ ...(segment.activeNodeIds ? { activeNodeIds: new Set(segment.activeNodeIds) } : {}),
249
+ });
250
+ }
251
+ async function runTemporalControlWorkflow(input, context, runningNodeIds) {
252
+ const { plan } = input;
253
+ const segments = toWorkflowSegments(plan.segments);
254
+ let segmentIndex = 0;
255
+ while (segmentIndex < segments.length) {
256
+ const segment = segments[segmentIndex];
257
+ if (segment.type === 'dag') {
258
+ await runTemporalDagNodes(input, segment.nodeIds, segment.activeNodeIds, context, runningNodeIds);
259
+ segmentIndex += 1;
260
+ continue;
261
+ }
262
+ const node = plan.nodes[segment.nodeId];
263
+ if (!node) {
264
+ throw new Error(`Workflow references unknown node "${segment.nodeId}".`);
265
+ }
266
+ const evalContext = await resolveControlEvaluationContext(input, context, node);
267
+ const skipReason = getWorkflowNodeSkipReason(node, evalContext);
268
+ const { result, nextNodeId, ended } = skipReason
269
+ ? { result: createSkippedWorkflowNodeResult(segment.nodeId) }
270
+ : runControlWorkflowNode(segment.nodeId, node, evalContext);
271
+ recordWorkflowNodeResult(segment.nodeId, node, result, context.nodes, context.artifacts);
272
+ if (ended) {
273
+ return;
274
+ }
275
+ if (!nextNodeId) {
276
+ segmentIndex += 1;
277
+ continue;
278
+ }
279
+ const targetIndex = findWorkflowSegmentIndex(segments, nextNodeId);
280
+ if (targetIndex < 0) {
281
+ throw new Error(`Workflow control node "${segment.nodeId}" targets unknown node "${nextNodeId}".`);
282
+ }
283
+ if (node.control !== 'loop' && targetIndex <= segmentIndex) {
284
+ throw new Error(`Workflow control node "${segment.nodeId}" cannot jump backward to "${nextNodeId}". Use control: loop with maxIterations for repeated execution.`);
285
+ }
286
+ const targetSegment = segments[targetIndex];
287
+ if (targetSegment.type === 'dag') {
288
+ targetSegment.activeNodeIds = computeActiveWorkflowNodes(plan.nodes, targetSegment.nodeIds, nextNodeId, !(node.control === 'loop' && nextNodeId === node.target));
289
+ }
290
+ segmentIndex = targetIndex;
291
+ }
292
+ }
293
+ async function runTemporalDagWorkflow(input, context, runningNodeIds) {
294
+ for (const wave of input.plan.waves) {
295
+ await runTemporalDagNodes(input, wave, undefined, context, runningNodeIds);
296
+ }
297
+ }
298
+ export async function drsWorkflow(input) {
299
+ const { plan } = input;
300
+ const info = workflowInfo();
301
+ const executionInput = input.workspace
302
+ ? {
303
+ ...input,
304
+ workingDir: (await prepareWorkspaceActivity({
305
+ workspace: input.workspace,
306
+ workflowId: info.workflowId,
307
+ runId: info.runId,
308
+ })).workingDir,
309
+ }
310
+ : input;
311
+ const nodes = {};
312
+ const artifacts = {};
313
+ const runningNodeIds = new Set();
314
+ let isCancelled = false;
315
+ const context = {
316
+ startedAt: info.runStartTime.toISOString(),
317
+ inputs: input.inputs,
318
+ nodes,
319
+ artifacts,
320
+ loop: {},
321
+ };
322
+ setHandler(workflowStatusQuery, () => buildWorkflowStatusSnapshot(input, context, runningNodeIds, isCancelled));
323
+ setHandler(workflowLoopStateQuery, () => context.loop);
324
+ setHandler(workflowArtifactsQuery, () => buildArtifactsSnapshot(context));
325
+ try {
326
+ if (plan.hasControlNodes) {
327
+ await runTemporalControlWorkflow(executionInput, context, runningNodeIds);
328
+ }
329
+ else {
330
+ await runTemporalDagWorkflow(executionInput, context, runningNodeIds);
331
+ }
332
+ }
333
+ catch (error) {
334
+ if (isCancellation(error)) {
335
+ isCancelled = true;
336
+ runningNodeIds.clear();
337
+ }
338
+ throw error;
339
+ }
340
+ const lastNode = plan.nodes[plan.lastNodeId];
341
+ const outputKey = plan.output ?? lastNode?.output ?? plan.lastNodeId;
342
+ return {
343
+ // Deterministic timestamp: derive from workflowInfo().runStartTime (set by
344
+ // the Temporal server and replayed) instead of new Date(), which would be a
345
+ // determinism violation in workflow code.
346
+ timestamp: info.runStartTime.toISOString(),
347
+ workflow: plan.workflowName,
348
+ inputs: input.inputs,
349
+ nodes,
350
+ artifacts,
351
+ loop: context.loop,
352
+ output: artifacts[outputKey],
353
+ };
354
+ }
355
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/temporal/workflows.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,24 +1,26 @@
1
1
  {
2
2
  "name": "@diff-review-system/drs",
3
- "version": "4.0.1",
3
+ "version": "5.0.0-rc.1",
4
4
  "description": "Workflow-first AI code maintenance for reviews, changelogs, docs, and repository upkeep.",
5
5
  "type": "module",
6
- "main": "dist/index.js",
7
6
  "bin": {
8
7
  "drs": "dist/cli/index.js"
9
8
  },
10
9
  "scripts": {
11
- "build": "tsc",
10
+ "build": "node clean-dist.mjs && tsc",
12
11
  "build:watch": "tsc --watch",
13
12
  "dev": "tsx watch src/cli/index.ts",
14
13
  "dev:cli": "tsx src/cli/index.ts",
15
14
  "start": "node dist/cli/index.js",
16
15
  "test": "vitest run",
17
- "test:e2e": "DRS_E2E_LIVE=1 vitest run src/cli/review-local.live.e2e.test.ts",
16
+ "test:temporal:smoke": "DRS_TEMPORAL_SMOKE=1 vitest run src/temporal/smoke.test.ts",
17
+ "wiki:site:dev": "npm run build --silent && vitepress dev .wiki-site",
18
+ "wiki:site:build": "npm run build --silent && vitepress build .wiki-site",
19
+ "wiki:site:preview": "vitepress preview .wiki-site",
18
20
  "lint": "eslint 'src/**/*.ts'",
19
21
  "lint:fix": "eslint 'src/**/*.ts' --fix",
20
- "format": "prettier --write 'src/**/*.{ts,json}' 'package.json' '.pi/**/*.{yaml,yml}'",
21
- "format:check": "prettier --check 'src/**/*.{ts,json}' 'package.json' '.pi/**/*.{yaml,yml}'",
22
+ "format": "prettier --write 'src/**/*.{ts,json}' 'package.json' '.pi/**/*.{yaml,yml}' '.wiki-site/**/*.{ts,mts,vue,css}'",
23
+ "format:check": "prettier --check 'src/**/*.{ts,json}' 'package.json' '.pi/**/*.{yaml,yml}' '.wiki-site/**/*.{ts,mts,vue,css}'",
22
24
  "check:all": "npm run format && npm run lint:fix && npm run build && npm test && npm run format:check && npm run lint",
23
25
  "type-check": "tsc --noEmit",
24
26
  "prek:install": "prek install",
@@ -31,7 +33,9 @@
31
33
  "!dist/**/*.test.*",
32
34
  "README.md",
33
35
  "LICENSE",
34
- ".pi"
36
+ ".pi",
37
+ ".wiki-site",
38
+ "!.wiki-site/dist"
35
39
  ],
36
40
  "repository": {
37
41
  "type": "git",
@@ -40,7 +44,7 @@
40
44
  "bugs": {
41
45
  "url": "https://github.com/manojlds/drs/issues"
42
46
  },
43
- "homepage": "https://github.com/manojlds/drs#readme",
47
+ "homepage": "https://manojlds.github.io/drs/",
44
48
  "keywords": [
45
49
  "gitlab",
46
50
  "github",
@@ -55,17 +59,28 @@
55
59
  "author": "",
56
60
  "license": "Apache-2.0",
57
61
  "dependencies": {
58
- "@earendil-works/pi-coding-agent": "^0.79.6",
62
+ "@earendil-works/pi-coding-agent": "^0.79.10",
59
63
  "@gitbeaker/node": "^35.8.1",
60
64
  "@octokit/rest": "^21.0.0",
61
65
  "@sinclair/typebox": "^0.34.49",
66
+ "@temporalio/activity": "^1.20.3",
67
+ "@temporalio/client": "^1.20.3",
68
+ "@temporalio/worker": "^1.20.3",
69
+ "@temporalio/workflow": "^1.20.3",
62
70
  "ajv": "^8.20.0",
63
71
  "chalk": "^5.3.0",
64
72
  "commander": "^12.0.0",
65
73
  "dotenv": "^16.0.0",
74
+ "markdown-it": "^14.3.0",
75
+ "minimatch": "^10.2.5",
66
76
  "simple-git": "^3.36.0",
77
+ "vitepress": "^1.6.4",
67
78
  "yaml": "^2.9.0"
68
79
  },
80
+ "overrides": {
81
+ "fast-uri": "3.1.4",
82
+ "protobufjs": "7.6.5"
83
+ },
69
84
  "devDependencies": {
70
85
  "@types/node": "^22.19.21",
71
86
  "@typescript-eslint/eslint-plugin": "^8.61.1",