@cleocode/contracts 2026.5.121 → 2026.5.123

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 (128) hide show
  1. package/dist/__tests__/completion-operation-contracts.test.d.ts +8 -0
  2. package/dist/__tests__/completion-operation-contracts.test.d.ts.map +1 -0
  3. package/dist/__tests__/completion-operation-contracts.test.js +114 -0
  4. package/dist/__tests__/completion-operation-contracts.test.js.map +1 -0
  5. package/dist/__tests__/operation-envelope-validation.test.d.ts +8 -0
  6. package/dist/__tests__/operation-envelope-validation.test.d.ts.map +1 -0
  7. package/dist/__tests__/operation-envelope-validation.test.js +105 -0
  8. package/dist/__tests__/operation-envelope-validation.test.js.map +1 -0
  9. package/dist/__tests__/satisfies-atom.test.d.ts +24 -0
  10. package/dist/__tests__/satisfies-atom.test.d.ts.map +1 -0
  11. package/dist/__tests__/satisfies-atom.test.js +320 -0
  12. package/dist/__tests__/satisfies-atom.test.js.map +1 -0
  13. package/dist/__tests__/validator-types.test.d.ts +13 -0
  14. package/dist/__tests__/validator-types.test.d.ts.map +1 -0
  15. package/dist/__tests__/validator-types.test.js +293 -0
  16. package/dist/__tests__/validator-types.test.js.map +1 -0
  17. package/dist/__tests__/workgraph-context-scaffold-contracts.test.d.ts +8 -0
  18. package/dist/__tests__/workgraph-context-scaffold-contracts.test.d.ts.map +1 -0
  19. package/dist/__tests__/workgraph-context-scaffold-contracts.test.js +188 -0
  20. package/dist/__tests__/workgraph-context-scaffold-contracts.test.js.map +1 -0
  21. package/dist/__tests__/workgraph-operation-contracts.test.d.ts +8 -0
  22. package/dist/__tests__/workgraph-operation-contracts.test.d.ts.map +1 -0
  23. package/dist/__tests__/workgraph-operation-contracts.test.js +115 -0
  24. package/dist/__tests__/workgraph-operation-contracts.test.js.map +1 -0
  25. package/dist/config.d.ts +56 -0
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/data-accessor.d.ts +194 -0
  28. package/dist/data-accessor.d.ts.map +1 -1
  29. package/dist/data-accessor.js.map +1 -1
  30. package/dist/dispatch/__tests__/docs-update-registry.test.d.ts +2 -0
  31. package/dist/dispatch/__tests__/docs-update-registry.test.d.ts.map +1 -0
  32. package/dist/dispatch/__tests__/docs-update-registry.test.js +27 -0
  33. package/dist/dispatch/__tests__/docs-update-registry.test.js.map +1 -0
  34. package/dist/dispatch/__tests__/operation-envelope-snapshots.test.d.ts +2 -0
  35. package/dist/dispatch/__tests__/operation-envelope-snapshots.test.d.ts.map +1 -0
  36. package/dist/dispatch/__tests__/operation-envelope-snapshots.test.js +265 -0
  37. package/dist/dispatch/__tests__/operation-envelope-snapshots.test.js.map +1 -0
  38. package/dist/dispatch/operations-registry.d.ts.map +1 -1
  39. package/dist/dispatch/operations-registry.js +487 -7
  40. package/dist/dispatch/operations-registry.js.map +1 -1
  41. package/dist/evidence-atom-schema.d.ts +91 -0
  42. package/dist/evidence-atom-schema.d.ts.map +1 -1
  43. package/dist/evidence-atom-schema.js +162 -1
  44. package/dist/evidence-atom-schema.js.map +1 -1
  45. package/dist/exit-codes.d.ts +41 -1
  46. package/dist/exit-codes.d.ts.map +1 -1
  47. package/dist/exit-codes.js +40 -0
  48. package/dist/exit-codes.js.map +1 -1
  49. package/dist/index.d.ts +17 -9
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +12 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/operation-envelope-validation.d.ts +79 -0
  54. package/dist/operation-envelope-validation.d.ts.map +1 -0
  55. package/dist/operation-envelope-validation.js +219 -0
  56. package/dist/operation-envelope-validation.js.map +1 -0
  57. package/dist/operations/__tests__/agent-operation-contract.test.d.ts +2 -0
  58. package/dist/operations/__tests__/agent-operation-contract.test.d.ts.map +1 -0
  59. package/dist/operations/__tests__/agent-operation-contract.test.js +128 -0
  60. package/dist/operations/__tests__/agent-operation-contract.test.js.map +1 -0
  61. package/dist/operations/__tests__/tasks-input-contracts.test.js +15 -0
  62. package/dist/operations/__tests__/tasks-input-contracts.test.js.map +1 -1
  63. package/dist/operations/agent-operation-contract.d.ts +227 -0
  64. package/dist/operations/agent-operation-contract.d.ts.map +1 -0
  65. package/dist/operations/agent-operation-contract.js +38 -0
  66. package/dist/operations/agent-operation-contract.js.map +1 -0
  67. package/dist/operations/docs.d.ts +19 -1
  68. package/dist/operations/docs.d.ts.map +1 -1
  69. package/dist/operations/docs.js +20 -0
  70. package/dist/operations/docs.js.map +1 -1
  71. package/dist/operations/focus.d.ts +1 -1
  72. package/dist/operations/index.d.ts +1 -0
  73. package/dist/operations/index.d.ts.map +1 -1
  74. package/dist/operations/index.js +1 -0
  75. package/dist/operations/index.js.map +1 -1
  76. package/dist/operations/orchestrate.d.ts +66 -0
  77. package/dist/operations/orchestrate.d.ts.map +1 -1
  78. package/dist/operations/tasks.d.ts +617 -11
  79. package/dist/operations/tasks.d.ts.map +1 -1
  80. package/dist/operations/tasks.js +22 -3
  81. package/dist/operations/tasks.js.map +1 -1
  82. package/dist/task-record.d.ts +15 -0
  83. package/dist/task-record.d.ts.map +1 -1
  84. package/dist/task.d.ts +52 -5
  85. package/dist/task.d.ts.map +1 -1
  86. package/dist/task.js.map +1 -1
  87. package/dist/tasks.d.ts +944 -0
  88. package/dist/tasks.d.ts.map +1 -1
  89. package/dist/tasks.js +198 -1
  90. package/dist/tasks.js.map +1 -1
  91. package/dist/validator/index.d.ts +375 -0
  92. package/dist/validator/index.d.ts.map +1 -0
  93. package/dist/validator/index.js +162 -0
  94. package/dist/validator/index.js.map +1 -0
  95. package/dist/workgraph.d.ts +1950 -0
  96. package/dist/workgraph.d.ts.map +1 -0
  97. package/dist/workgraph.js +449 -0
  98. package/dist/workgraph.js.map +1 -0
  99. package/package.json +10 -2
  100. package/src/__tests__/__snapshots__/operations-registry.test.ts.snap +1 -1
  101. package/src/__tests__/completion-operation-contracts.test.ts +154 -0
  102. package/src/__tests__/operation-envelope-validation.test.ts +140 -0
  103. package/src/__tests__/satisfies-atom.test.ts +383 -0
  104. package/src/__tests__/validator-types.test.ts +359 -0
  105. package/src/__tests__/workgraph-context-scaffold-contracts.test.ts +232 -0
  106. package/src/__tests__/workgraph-operation-contracts.test.ts +151 -0
  107. package/src/config.ts +58 -0
  108. package/src/data-accessor.ts +213 -0
  109. package/src/dispatch/__tests__/docs-update-registry.test.ts +35 -0
  110. package/src/dispatch/__tests__/operation-envelope-snapshots.test.ts +283 -0
  111. package/src/dispatch/operations-registry.ts +502 -7
  112. package/src/evidence-atom-schema.ts +188 -1
  113. package/src/exit-codes.ts +42 -0
  114. package/src/index.ts +230 -2
  115. package/src/operation-envelope-validation.ts +319 -0
  116. package/src/operations/__tests__/agent-operation-contract.test.ts +161 -0
  117. package/src/operations/__tests__/tasks-input-contracts.test.ts +30 -0
  118. package/src/operations/agent-operation-contract.ts +253 -0
  119. package/src/operations/docs.ts +27 -7
  120. package/src/operations/focus.ts +1 -1
  121. package/src/operations/index.ts +1 -0
  122. package/src/operations/orchestrate.ts +71 -0
  123. package/src/operations/tasks.ts +662 -15
  124. package/src/task-record.ts +16 -0
  125. package/src/task.ts +54 -5
  126. package/src/tasks.ts +558 -0
  127. package/src/validator/index.ts +385 -0
  128. package/src/workgraph.ts +1153 -0
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Validator role contracts — types consumed by the SDK tools (T10511) and the
3
+ * Max-N runtime (T10512) to express the verdict a Validator agent returns
4
+ * after reviewing a Worker submission against a task's acceptance criteria.
5
+ *
6
+ * The Validator is a NEW canonical role in the orchestration hierarchy,
7
+ * orthogonal to the existing Orchestrator → Lead → Worker triad. A Validator
8
+ * does NOT execute work and does NOT spawn other agents — it ONLY attests or
9
+ * rejects work claimed-done by another agent, per-AC.
10
+ *
11
+ * Identity triad:
12
+ * - `agentId` follows the pattern `validator-<discriminator>` (e.g.
13
+ * `validator-prime`, `validator-sec-001`).
14
+ * - `role` is `'validator'` (see {@link AgentRole}).
15
+ * - `sigilCard` is reused as-is from the existing peer/memory layer when
16
+ * the Validator is registered as a CANT-defined persona.
17
+ *
18
+ * Design constraints (ADR-055 / D028 boundary rules):
19
+ * - Lives in `packages/contracts/` — ZERO runtime dependencies (Zod only).
20
+ * - Consumed by `packages/cleo-sdk-tools/` (T10511) and `packages/core/` (T10512).
21
+ * - No cross-package relative imports.
22
+ *
23
+ * @module validator
24
+ * @task T10510
25
+ * @epic T10383 (E-VALIDATOR-ROLE)
26
+ * @saga T10377 (SG-IVTR-AC-BINDING)
27
+ */
28
+ import { z } from 'zod';
29
+ /**
30
+ * Frozen list of canonical {@link AgentRole} values for runtime iteration
31
+ * (e.g. CLI flag validation, registry seeding).
32
+ *
33
+ * @task T10510
34
+ * @epic T10383
35
+ */
36
+ export const AGENT_ROLES = ['orchestrator', 'lead', 'worker', 'validator'];
37
+ /**
38
+ * Type guard for {@link AgentRole}. Returns `true` when `value` is one of the
39
+ * four canonical role strings.
40
+ *
41
+ * @task T10510
42
+ */
43
+ export function isAgentRole(value) {
44
+ return typeof value === 'string' && AGENT_ROLES.includes(value);
45
+ }
46
+ // ============================================================================
47
+ // Zod schemas — runtime validation
48
+ // ============================================================================
49
+ /**
50
+ * Regex validating the canonical Validator agentId pattern
51
+ * `validator-<discriminator>`. The discriminator is `[a-z0-9][a-z0-9-]*`
52
+ * (lowercase alphanumeric + hyphens, must start with alphanum).
53
+ *
54
+ * Examples that MATCH: `validator-prime`, `validator-sec-001`, `validator-a`.
55
+ * Examples that DO NOT match: `validator-`, `Validator-prime`, `validator--x`.
56
+ *
57
+ * @task T10510
58
+ */
59
+ export const VALIDATOR_ID_REGEX = /^validator-[a-z0-9][a-z0-9-]*$/;
60
+ /**
61
+ * Zod schema for {@link ValidatorFinding}. Enforces the AC-id presence,
62
+ * status enum, non-empty reasoning, and ISO-8601 timestamp shape.
63
+ *
64
+ * @task T10510
65
+ */
66
+ export const validatorFindingSchema = z.object({
67
+ acId: z.string().min(1, 'acId must be non-empty'),
68
+ status: z.enum(['pass', 'fail', 'inconclusive']),
69
+ reasoning: z.string().min(1, 'reasoning must be non-empty'),
70
+ evidenceRefs: z.array(z.string()).optional(),
71
+ checkedAt: z.string().min(1, 'checkedAt must be a non-empty ISO-8601 string'),
72
+ });
73
+ /**
74
+ * Zod schema for {@link ValidatorAttestation}. Enforces:
75
+ * - `verdict === 'attest'`
76
+ * - `validatorId` matches {@link VALIDATOR_ID_REGEX}
77
+ * - `findings` non-empty AND every entry has `status === 'pass'`
78
+ * - `schemaVersion === '1'`
79
+ *
80
+ * @task T10510
81
+ */
82
+ export const validatorAttestationSchema = z.object({
83
+ verdict: z.literal('attest'),
84
+ taskId: z.string().min(1),
85
+ validatorId: z
86
+ .string()
87
+ .regex(VALIDATOR_ID_REGEX, 'validatorId must match the pattern validator-<discriminator>'),
88
+ findings: z
89
+ .array(validatorFindingSchema)
90
+ .min(1, 'attestation must contain at least one finding')
91
+ .refine((findings) => findings.every((f) => f.status === 'pass'), 'attestation requires every finding to have status="pass"'),
92
+ summary: z.string().optional(),
93
+ attestedAt: z.string().min(1),
94
+ schemaVersion: z.literal('1'),
95
+ });
96
+ /**
97
+ * Zod schema for {@link ValidatorRejection}. Enforces:
98
+ * - `verdict === 'reject'`
99
+ * - `validatorId` matches {@link VALIDATOR_ID_REGEX}
100
+ * - `findings` non-empty AND at least one entry has `status !== 'pass'`
101
+ * - `summary` non-empty (rejection rationale is mandatory)
102
+ * - `schemaVersion === '1'`
103
+ *
104
+ * @task T10510
105
+ */
106
+ export const validatorRejectionSchema = z.object({
107
+ verdict: z.literal('reject'),
108
+ taskId: z.string().min(1),
109
+ validatorId: z
110
+ .string()
111
+ .regex(VALIDATOR_ID_REGEX, 'validatorId must match the pattern validator-<discriminator>'),
112
+ findings: z
113
+ .array(validatorFindingSchema)
114
+ .min(1, 'rejection must contain at least one finding')
115
+ .refine((findings) => findings.some((f) => f.status !== 'pass'), 'rejection requires at least one finding with status "fail" or "inconclusive"'),
116
+ summary: z.string().min(1, 'rejection summary must be non-empty'),
117
+ remediationHints: z.array(z.string()).optional(),
118
+ rejectedAt: z.string().min(1),
119
+ schemaVersion: z.literal('1'),
120
+ });
121
+ /**
122
+ * Zod schema for the {@link ValidatorVerdict} discriminated union.
123
+ * Routes parsing through the `verdict` discriminant.
124
+ *
125
+ * @task T10510
126
+ */
127
+ export const validatorVerdictSchema = z.discriminatedUnion('verdict', [
128
+ validatorAttestationSchema,
129
+ validatorRejectionSchema,
130
+ ]);
131
+ // ============================================================================
132
+ // Type guards
133
+ // ============================================================================
134
+ /**
135
+ * Type guard validating that `value` conforms to {@link ValidatorAttestation}.
136
+ * Internally uses {@link validatorAttestationSchema}.
137
+ *
138
+ * @task T10510
139
+ */
140
+ export function isValidatorAttestation(value) {
141
+ return validatorAttestationSchema.safeParse(value).success;
142
+ }
143
+ /**
144
+ * Type guard validating that `value` conforms to {@link ValidatorRejection}.
145
+ * Internally uses {@link validatorRejectionSchema}.
146
+ *
147
+ * @task T10510
148
+ */
149
+ export function isValidatorRejection(value) {
150
+ return validatorRejectionSchema.safeParse(value).success;
151
+ }
152
+ /**
153
+ * Type guard validating that `value` conforms to {@link ValidatorVerdict}
154
+ * (either an attestation or a rejection). Internally uses
155
+ * {@link validatorVerdictSchema}.
156
+ *
157
+ * @task T10510
158
+ */
159
+ export function isValidatorVerdict(value) {
160
+ return validatorVerdictSchema.safeParse(value).success;
161
+ }
162
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"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"}