@exaudeus/workrail 3.39.0 → 3.41.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 (97) hide show
  1. package/dist/cli/commands/init.js +0 -3
  2. package/dist/cli-worktrain.js +58 -26
  3. package/dist/cli.js +0 -18
  4. package/dist/config/app-config.d.ts +0 -16
  5. package/dist/config/app-config.js +0 -14
  6. package/dist/config/config-file.js +0 -3
  7. package/dist/console-ui/assets/index-CQt4UhPB.js +28 -0
  8. package/dist/console-ui/assets/index-DGj8EsFR.css +1 -0
  9. package/dist/console-ui/index.html +2 -2
  10. package/dist/coordinators/pr-review.d.ts +23 -1
  11. package/dist/coordinators/pr-review.js +224 -5
  12. package/dist/daemon/daemon-events.d.ts +9 -1
  13. package/dist/daemon/soul-template.d.ts +2 -2
  14. package/dist/daemon/soul-template.js +11 -1
  15. package/dist/daemon/workflow-runner.d.ts +17 -3
  16. package/dist/daemon/workflow-runner.js +401 -28
  17. package/dist/di/container.js +1 -25
  18. package/dist/di/tokens.d.ts +0 -3
  19. package/dist/di/tokens.js +0 -3
  20. package/dist/engine/engine-factory.js +0 -1
  21. package/dist/infrastructure/console-defaults.d.ts +1 -0
  22. package/dist/infrastructure/console-defaults.js +4 -0
  23. package/dist/infrastructure/session/index.d.ts +0 -1
  24. package/dist/infrastructure/session/index.js +1 -3
  25. package/dist/manifest.json +124 -124
  26. package/dist/mcp/handlers/session.d.ts +1 -0
  27. package/dist/mcp/handlers/session.js +61 -13
  28. package/dist/mcp/output-schemas.d.ts +10 -10
  29. package/dist/mcp/server.js +1 -18
  30. package/dist/mcp/tools.d.ts +12 -12
  31. package/dist/mcp/transports/http-entry.js +0 -2
  32. package/dist/mcp/transports/stdio-entry.js +1 -2
  33. package/dist/mcp/types.d.ts +0 -2
  34. package/dist/trigger/daemon-console.d.ts +2 -0
  35. package/dist/trigger/daemon-console.js +1 -1
  36. package/dist/trigger/trigger-listener.d.ts +2 -0
  37. package/dist/trigger/trigger-listener.js +3 -1
  38. package/dist/trigger/trigger-router.d.ts +4 -3
  39. package/dist/trigger/trigger-router.js +13 -5
  40. package/dist/trigger/trigger-store.js +17 -4
  41. package/dist/types/workflow-source.d.ts +0 -1
  42. package/dist/types/workflow-source.js +3 -6
  43. package/dist/types/workflow.d.ts +1 -1
  44. package/dist/types/workflow.js +1 -2
  45. package/dist/v2/durable-core/domain/artifact-contract-validator.js +66 -0
  46. package/dist/v2/durable-core/schemas/artifacts/coordinator-signal.d.ts +25 -0
  47. package/dist/v2/durable-core/schemas/artifacts/coordinator-signal.js +31 -0
  48. package/dist/v2/durable-core/schemas/artifacts/index.d.ts +3 -1
  49. package/dist/v2/durable-core/schemas/artifacts/index.js +14 -1
  50. package/dist/v2/durable-core/schemas/artifacts/review-verdict.d.ts +41 -0
  51. package/dist/v2/durable-core/schemas/artifacts/review-verdict.js +30 -0
  52. package/dist/v2/durable-core/schemas/export-bundle/index.d.ts +236 -236
  53. package/dist/v2/durable-core/schemas/session/events.d.ts +50 -50
  54. package/dist/v2/durable-core/schemas/session/gaps.d.ts +2 -2
  55. package/dist/v2/durable-core/schemas/session/manifest.d.ts +4 -4
  56. package/dist/v2/durable-core/schemas/session/outputs.d.ts +8 -8
  57. package/dist/v2/usecases/console-routes.d.ts +2 -1
  58. package/dist/v2/usecases/console-routes.js +207 -5
  59. package/dist/v2/usecases/console-service.js +14 -0
  60. package/dist/v2/usecases/console-types.d.ts +1 -0
  61. package/docs/authoring.md +16 -16
  62. package/docs/design/coordinator-artifact-protocol-design-candidates.md +155 -0
  63. package/docs/design/coordinator-artifact-protocol-design-review.md +103 -0
  64. package/docs/design/coordinator-artifact-protocol-implementation-plan.md +259 -0
  65. package/docs/design/coordinator-message-queue-drain-plan.md +241 -0
  66. package/docs/design/coordinator-message-queue-drain-review.md +120 -0
  67. package/docs/design/coordinator-message-queue-drain.md +289 -0
  68. package/docs/design/shaping-workflow-external-research.md +119 -0
  69. package/docs/discovery/late-bound-goals-impl-plan.md +147 -0
  70. package/docs/discovery/late-bound-goals-review.md +82 -0
  71. package/docs/discovery/late-bound-goals.md +118 -0
  72. package/docs/discovery/steer-endpoint-design-candidates.md +288 -0
  73. package/docs/discovery/steer-endpoint-design-review-findings.md +104 -0
  74. package/docs/discovery/steer-endpoint-implementation-plan.md +284 -0
  75. package/docs/ideas/backlog.md +447 -97
  76. package/docs/ideas/design-candidates-console-session-tree-impl.md +64 -0
  77. package/docs/ideas/design-candidates-session-tree-view.md +196 -0
  78. package/docs/ideas/design-review-findings-console-session-tree-impl.md +75 -0
  79. package/docs/ideas/design-review-findings-session-tree-view.md +88 -0
  80. package/docs/ideas/implementation_plan_session_tree_view.md +238 -0
  81. package/package.json +2 -1
  82. package/spec/authoring-spec.json +16 -16
  83. package/spec/shape.schema.json +178 -0
  84. package/spec/workflow-tags.json +232 -47
  85. package/workflows/coding-task-workflow-agentic.json +491 -480
  86. package/workflows/mr-review-workflow.agentic.v2.json +5 -1
  87. package/workflows/wr.shaping.json +182 -0
  88. package/dist/console-ui/assets/index-3oXZ_A9m.js +0 -28
  89. package/dist/console-ui/assets/index-8dh0Psu-.css +0 -1
  90. package/dist/infrastructure/session/DashboardHeartbeat.d.ts +0 -8
  91. package/dist/infrastructure/session/DashboardHeartbeat.js +0 -39
  92. package/dist/infrastructure/session/DashboardLockRelease.d.ts +0 -2
  93. package/dist/infrastructure/session/DashboardLockRelease.js +0 -29
  94. package/dist/infrastructure/session/HttpServer.d.ts +0 -60
  95. package/dist/infrastructure/session/HttpServer.js +0 -912
  96. package/workflows/coding-task-workflow-agentic.lean.v2.json +0 -648
  97. package/workflows/coding-task-workflow-agentic.v2.json +0 -324
@@ -21,6 +21,10 @@ function validateArtifactContract(artifacts, contract) {
21
21
  switch (contractRef) {
22
22
  case index_js_1.LOOP_CONTROL_CONTRACT_REF:
23
23
  return validateLoopControlContract(artifacts, contractRef, required);
24
+ case index_js_1.COORDINATOR_SIGNAL_CONTRACT_REF:
25
+ return validateCoordinatorSignalContract(artifacts, contractRef, required);
26
+ case index_js_1.REVIEW_VERDICT_CONTRACT_REF:
27
+ return validateReviewVerdictContract(artifacts, contractRef, required);
24
28
  default:
25
29
  return {
26
30
  valid: false,
@@ -63,6 +67,68 @@ function validateLoopControlContract(artifacts, contractRef, required) {
63
67
  }
64
68
  return { valid: true, artifact: parseResult.data };
65
69
  }
70
+ function validateCoordinatorSignalContract(artifacts, contractRef, required) {
71
+ const signalArtifacts = artifacts.filter(index_js_1.isCoordinatorSignalArtifact);
72
+ if (signalArtifacts.length === 0) {
73
+ if (required) {
74
+ return {
75
+ valid: false,
76
+ error: {
77
+ code: 'MISSING_REQUIRED_ARTIFACT',
78
+ contractRef,
79
+ message: `Required artifact missing: ${contractRef}. Agent must provide an artifact with kind='wr.coordinator_signal'.`,
80
+ },
81
+ };
82
+ }
83
+ return { valid: true, artifact: null };
84
+ }
85
+ const artifact = signalArtifacts[0];
86
+ const parseResult = index_js_1.CoordinatorSignalArtifactV1Schema.safeParse(artifact);
87
+ if (!parseResult.success) {
88
+ const issues = parseResult.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`);
89
+ return {
90
+ valid: false,
91
+ error: {
92
+ code: 'INVALID_ARTIFACT_SCHEMA',
93
+ contractRef,
94
+ message: `Artifact schema validation failed for ${contractRef}`,
95
+ issues,
96
+ },
97
+ };
98
+ }
99
+ return { valid: true, artifact: parseResult.data };
100
+ }
101
+ function validateReviewVerdictContract(artifacts, contractRef, required) {
102
+ const verdictArtifacts = artifacts.filter(index_js_1.isReviewVerdictArtifact);
103
+ if (verdictArtifacts.length === 0) {
104
+ if (required) {
105
+ return {
106
+ valid: false,
107
+ error: {
108
+ code: 'MISSING_REQUIRED_ARTIFACT',
109
+ contractRef,
110
+ message: `Required artifact missing: ${contractRef}. Agent must provide an artifact with kind='wr.review_verdict'.`,
111
+ },
112
+ };
113
+ }
114
+ return { valid: true, artifact: null };
115
+ }
116
+ const artifact = verdictArtifacts[0];
117
+ const parseResult = index_js_1.ReviewVerdictArtifactV1Schema.safeParse(artifact);
118
+ if (!parseResult.success) {
119
+ const issues = parseResult.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`);
120
+ return {
121
+ valid: false,
122
+ error: {
123
+ code: 'INVALID_ARTIFACT_SCHEMA',
124
+ contractRef,
125
+ message: `Artifact schema validation failed for ${contractRef}`,
126
+ issues,
127
+ },
128
+ };
129
+ }
130
+ return { valid: true, artifact: parseResult.data };
131
+ }
66
132
  function requiresArtifactValidation(outputContract) {
67
133
  if (!outputContract)
68
134
  return false;
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ export declare const COORDINATOR_SIGNAL_CONTRACT_REF: "wr.contracts.coordinator_signal";
3
+ export declare const CoordinatorSignalKindSchema: z.ZodEnum<["progress", "finding", "data_needed", "approval_needed", "blocked"]>;
4
+ export type CoordinatorSignalKind = z.infer<typeof CoordinatorSignalKindSchema>;
5
+ export declare const CoordinatorSignalArtifactV1Schema: z.ZodObject<{
6
+ kind: z.ZodLiteral<"wr.coordinator_signal">;
7
+ signalKind: z.ZodEnum<["progress", "finding", "data_needed", "approval_needed", "blocked"]>;
8
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
9
+ sessionId: z.ZodOptional<z.ZodString>;
10
+ }, "strict", z.ZodTypeAny, {
11
+ kind: "wr.coordinator_signal";
12
+ signalKind: "blocked" | "progress" | "finding" | "data_needed" | "approval_needed";
13
+ payload: Record<string, unknown>;
14
+ sessionId?: string | undefined;
15
+ }, {
16
+ kind: "wr.coordinator_signal";
17
+ signalKind: "blocked" | "progress" | "finding" | "data_needed" | "approval_needed";
18
+ payload: Record<string, unknown>;
19
+ sessionId?: string | undefined;
20
+ }>;
21
+ export type CoordinatorSignalArtifactV1 = z.infer<typeof CoordinatorSignalArtifactV1Schema>;
22
+ export declare function isCoordinatorSignalArtifact(artifact: unknown): artifact is {
23
+ readonly kind: 'wr.coordinator_signal';
24
+ };
25
+ export declare function parseCoordinatorSignalArtifact(artifact: unknown): CoordinatorSignalArtifactV1 | null;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CoordinatorSignalArtifactV1Schema = exports.CoordinatorSignalKindSchema = exports.COORDINATOR_SIGNAL_CONTRACT_REF = void 0;
4
+ exports.isCoordinatorSignalArtifact = isCoordinatorSignalArtifact;
5
+ exports.parseCoordinatorSignalArtifact = parseCoordinatorSignalArtifact;
6
+ const zod_1 = require("zod");
7
+ exports.COORDINATOR_SIGNAL_CONTRACT_REF = 'wr.contracts.coordinator_signal';
8
+ exports.CoordinatorSignalKindSchema = zod_1.z.enum([
9
+ 'progress',
10
+ 'finding',
11
+ 'data_needed',
12
+ 'approval_needed',
13
+ 'blocked',
14
+ ]);
15
+ exports.CoordinatorSignalArtifactV1Schema = zod_1.z
16
+ .object({
17
+ kind: zod_1.z.literal('wr.coordinator_signal'),
18
+ signalKind: exports.CoordinatorSignalKindSchema,
19
+ payload: zod_1.z.record(zod_1.z.unknown()),
20
+ sessionId: zod_1.z.string().optional(),
21
+ })
22
+ .strict();
23
+ function isCoordinatorSignalArtifact(artifact) {
24
+ return (typeof artifact === 'object' &&
25
+ artifact !== null &&
26
+ artifact.kind === 'wr.coordinator_signal');
27
+ }
28
+ function parseCoordinatorSignalArtifact(artifact) {
29
+ const result = exports.CoordinatorSignalArtifactV1Schema.safeParse(artifact);
30
+ return result.success ? result.data : null;
31
+ }
@@ -1,5 +1,7 @@
1
1
  export { ASSESSMENT_CONTRACT_REF, AssessmentArtifactV1Schema, AssessmentDimensionSubmissionSchema, isAssessmentArtifact, parseAssessmentArtifact, type AssessmentArtifactV1, type AssessmentDimensionSubmission, } from './assessment.js';
2
2
  export { LOOP_CONTROL_CONTRACT_REF, LoopControlDecisionSchema, LoopControlMetadataV1Schema, LoopControlArtifactV1Schema, isLoopControlArtifact, parseLoopControlArtifact, findLoopControlArtifact, type LoopControlDecision, type LoopControlMetadataV1, type LoopControlArtifactV1, } from './loop-control.js';
3
- export declare const ARTIFACT_CONTRACT_REFS: readonly ["wr.contracts.assessment", "wr.contracts.loop_control"];
3
+ export { COORDINATOR_SIGNAL_CONTRACT_REF, CoordinatorSignalKindSchema, CoordinatorSignalArtifactV1Schema, isCoordinatorSignalArtifact, parseCoordinatorSignalArtifact, type CoordinatorSignalKind, type CoordinatorSignalArtifactV1, } from './coordinator-signal.js';
4
+ export { REVIEW_VERDICT_CONTRACT_REF, ReviewVerdictArtifactV1Schema, isReviewVerdictArtifact, parseReviewVerdictArtifact, type ReviewVerdictArtifactV1, } from './review-verdict.js';
5
+ export declare const ARTIFACT_CONTRACT_REFS: readonly ["wr.contracts.assessment", "wr.contracts.loop_control", "wr.contracts.coordinator_signal", "wr.contracts.review_verdict"];
4
6
  export type ArtifactContractRef = (typeof ARTIFACT_CONTRACT_REFS)[number];
5
7
  export declare function isValidContractRef(ref: string): ref is ArtifactContractRef;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ARTIFACT_CONTRACT_REFS = exports.findLoopControlArtifact = exports.parseLoopControlArtifact = exports.isLoopControlArtifact = exports.LoopControlArtifactV1Schema = exports.LoopControlMetadataV1Schema = exports.LoopControlDecisionSchema = exports.LOOP_CONTROL_CONTRACT_REF = exports.parseAssessmentArtifact = exports.isAssessmentArtifact = exports.AssessmentDimensionSubmissionSchema = exports.AssessmentArtifactV1Schema = exports.ASSESSMENT_CONTRACT_REF = void 0;
3
+ exports.ARTIFACT_CONTRACT_REFS = exports.parseReviewVerdictArtifact = exports.isReviewVerdictArtifact = exports.ReviewVerdictArtifactV1Schema = exports.REVIEW_VERDICT_CONTRACT_REF = exports.parseCoordinatorSignalArtifact = exports.isCoordinatorSignalArtifact = exports.CoordinatorSignalArtifactV1Schema = exports.CoordinatorSignalKindSchema = exports.COORDINATOR_SIGNAL_CONTRACT_REF = exports.findLoopControlArtifact = exports.parseLoopControlArtifact = exports.isLoopControlArtifact = exports.LoopControlArtifactV1Schema = exports.LoopControlMetadataV1Schema = exports.LoopControlDecisionSchema = exports.LOOP_CONTROL_CONTRACT_REF = exports.parseAssessmentArtifact = exports.isAssessmentArtifact = exports.AssessmentDimensionSubmissionSchema = exports.AssessmentArtifactV1Schema = exports.ASSESSMENT_CONTRACT_REF = void 0;
4
4
  exports.isValidContractRef = isValidContractRef;
5
5
  var assessment_js_1 = require("./assessment.js");
6
6
  Object.defineProperty(exports, "ASSESSMENT_CONTRACT_REF", { enumerable: true, get: function () { return assessment_js_1.ASSESSMENT_CONTRACT_REF; } });
@@ -16,9 +16,22 @@ Object.defineProperty(exports, "LoopControlArtifactV1Schema", { enumerable: true
16
16
  Object.defineProperty(exports, "isLoopControlArtifact", { enumerable: true, get: function () { return loop_control_js_1.isLoopControlArtifact; } });
17
17
  Object.defineProperty(exports, "parseLoopControlArtifact", { enumerable: true, get: function () { return loop_control_js_1.parseLoopControlArtifact; } });
18
18
  Object.defineProperty(exports, "findLoopControlArtifact", { enumerable: true, get: function () { return loop_control_js_1.findLoopControlArtifact; } });
19
+ var coordinator_signal_js_1 = require("./coordinator-signal.js");
20
+ Object.defineProperty(exports, "COORDINATOR_SIGNAL_CONTRACT_REF", { enumerable: true, get: function () { return coordinator_signal_js_1.COORDINATOR_SIGNAL_CONTRACT_REF; } });
21
+ Object.defineProperty(exports, "CoordinatorSignalKindSchema", { enumerable: true, get: function () { return coordinator_signal_js_1.CoordinatorSignalKindSchema; } });
22
+ Object.defineProperty(exports, "CoordinatorSignalArtifactV1Schema", { enumerable: true, get: function () { return coordinator_signal_js_1.CoordinatorSignalArtifactV1Schema; } });
23
+ Object.defineProperty(exports, "isCoordinatorSignalArtifact", { enumerable: true, get: function () { return coordinator_signal_js_1.isCoordinatorSignalArtifact; } });
24
+ Object.defineProperty(exports, "parseCoordinatorSignalArtifact", { enumerable: true, get: function () { return coordinator_signal_js_1.parseCoordinatorSignalArtifact; } });
25
+ var review_verdict_js_1 = require("./review-verdict.js");
26
+ Object.defineProperty(exports, "REVIEW_VERDICT_CONTRACT_REF", { enumerable: true, get: function () { return review_verdict_js_1.REVIEW_VERDICT_CONTRACT_REF; } });
27
+ Object.defineProperty(exports, "ReviewVerdictArtifactV1Schema", { enumerable: true, get: function () { return review_verdict_js_1.ReviewVerdictArtifactV1Schema; } });
28
+ Object.defineProperty(exports, "isReviewVerdictArtifact", { enumerable: true, get: function () { return review_verdict_js_1.isReviewVerdictArtifact; } });
29
+ Object.defineProperty(exports, "parseReviewVerdictArtifact", { enumerable: true, get: function () { return review_verdict_js_1.parseReviewVerdictArtifact; } });
19
30
  exports.ARTIFACT_CONTRACT_REFS = [
20
31
  'wr.contracts.assessment',
21
32
  'wr.contracts.loop_control',
33
+ 'wr.contracts.coordinator_signal',
34
+ 'wr.contracts.review_verdict',
22
35
  ];
23
36
  function isValidContractRef(ref) {
24
37
  return exports.ARTIFACT_CONTRACT_REFS.includes(ref);
@@ -0,0 +1,41 @@
1
+ import { z } from 'zod';
2
+ export declare const REVIEW_VERDICT_CONTRACT_REF: "wr.contracts.review_verdict";
3
+ export declare const ReviewVerdictArtifactV1Schema: z.ZodObject<{
4
+ kind: z.ZodLiteral<"wr.review_verdict">;
5
+ verdict: z.ZodEnum<["clean", "minor", "blocking"]>;
6
+ confidence: z.ZodEnum<["high", "medium", "low"]>;
7
+ findings: z.ZodArray<z.ZodObject<{
8
+ severity: z.ZodEnum<["critical", "major", "minor", "nit"]>;
9
+ summary: z.ZodString;
10
+ }, "strict", z.ZodTypeAny, {
11
+ summary: string;
12
+ severity: "minor" | "critical" | "major" | "nit";
13
+ }, {
14
+ summary: string;
15
+ severity: "minor" | "critical" | "major" | "nit";
16
+ }>, "many">;
17
+ summary: z.ZodString;
18
+ }, "strict", z.ZodTypeAny, {
19
+ kind: "wr.review_verdict";
20
+ summary: string;
21
+ confidence: "high" | "medium" | "low";
22
+ verdict: "clean" | "minor" | "blocking";
23
+ findings: {
24
+ summary: string;
25
+ severity: "minor" | "critical" | "major" | "nit";
26
+ }[];
27
+ }, {
28
+ kind: "wr.review_verdict";
29
+ summary: string;
30
+ confidence: "high" | "medium" | "low";
31
+ verdict: "clean" | "minor" | "blocking";
32
+ findings: {
33
+ summary: string;
34
+ severity: "minor" | "critical" | "major" | "nit";
35
+ }[];
36
+ }>;
37
+ export type ReviewVerdictArtifactV1 = z.infer<typeof ReviewVerdictArtifactV1Schema>;
38
+ export declare function isReviewVerdictArtifact(artifact: unknown): artifact is {
39
+ readonly kind: 'wr.review_verdict';
40
+ };
41
+ export declare function parseReviewVerdictArtifact(artifact: unknown): ReviewVerdictArtifactV1 | null;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReviewVerdictArtifactV1Schema = exports.REVIEW_VERDICT_CONTRACT_REF = void 0;
4
+ exports.isReviewVerdictArtifact = isReviewVerdictArtifact;
5
+ exports.parseReviewVerdictArtifact = parseReviewVerdictArtifact;
6
+ const zod_1 = require("zod");
7
+ exports.REVIEW_VERDICT_CONTRACT_REF = 'wr.contracts.review_verdict';
8
+ exports.ReviewVerdictArtifactV1Schema = zod_1.z
9
+ .object({
10
+ kind: zod_1.z.literal('wr.review_verdict'),
11
+ verdict: zod_1.z.enum(['clean', 'minor', 'blocking']),
12
+ confidence: zod_1.z.enum(['high', 'medium', 'low']),
13
+ findings: zod_1.z.array(zod_1.z
14
+ .object({
15
+ severity: zod_1.z.enum(['critical', 'major', 'minor', 'nit']),
16
+ summary: zod_1.z.string().min(1),
17
+ })
18
+ .strict()),
19
+ summary: zod_1.z.string().min(1),
20
+ })
21
+ .strict();
22
+ function isReviewVerdictArtifact(artifact) {
23
+ return (typeof artifact === 'object' &&
24
+ artifact !== null &&
25
+ artifact.kind === 'wr.review_verdict');
26
+ }
27
+ function parseReviewVerdictArtifact(artifact) {
28
+ const result = exports.ReviewVerdictArtifactV1Schema.safeParse(artifact);
29
+ return result.success ? result.data : null;
30
+ }