@farmslot/protocol 0.7.2 → 0.7.4

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 (67) hide show
  1. package/CHANGELOG.md +3 -22
  2. package/dist/checklist-target.d.ts +45 -0
  3. package/dist/checklist-target.d.ts.map +1 -0
  4. package/dist/checklist-target.js +90 -0
  5. package/dist/checklist-target.js.map +1 -0
  6. package/dist/contracts/backlog.d.ts +23 -1
  7. package/dist/contracts/backlog.d.ts.map +1 -1
  8. package/dist/contracts/backlog.js.map +1 -1
  9. package/dist/contracts/config.d.ts +7 -2
  10. package/dist/contracts/config.d.ts.map +1 -1
  11. package/dist/contracts/config.js +10 -2
  12. package/dist/contracts/config.js.map +1 -1
  13. package/dist/contracts/index.d.ts +1 -0
  14. package/dist/contracts/index.d.ts.map +1 -1
  15. package/dist/contracts/index.js +1 -0
  16. package/dist/contracts/index.js.map +1 -1
  17. package/dist/contracts/interactive-operator-packets.d.ts +79 -0
  18. package/dist/contracts/interactive-operator-packets.d.ts.map +1 -0
  19. package/dist/contracts/interactive-operator-packets.js +274 -0
  20. package/dist/contracts/interactive-operator-packets.js.map +1 -0
  21. package/dist/contracts/recipes.d.ts +7 -0
  22. package/dist/contracts/recipes.d.ts.map +1 -1
  23. package/dist/contracts/recipes.js +140 -0
  24. package/dist/contracts/recipes.js.map +1 -1
  25. package/dist/contracts/roadmap.d.ts +5 -0
  26. package/dist/contracts/roadmap.d.ts.map +1 -1
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/node/capture-helper-path.d.ts +7 -0
  32. package/dist/node/capture-helper-path.d.ts.map +1 -1
  33. package/dist/node/capture-helper-path.js +31 -14
  34. package/dist/node/capture-helper-path.js.map +1 -1
  35. package/dist/roadmap/promotion-drafts.d.ts +16 -0
  36. package/dist/roadmap/promotion-drafts.d.ts.map +1 -0
  37. package/dist/roadmap/promotion-drafts.js +90 -0
  38. package/dist/roadmap/promotion-drafts.js.map +1 -0
  39. package/dist/rpc/backlog.d.ts +10 -0
  40. package/dist/rpc/backlog.d.ts.map +1 -1
  41. package/dist/rpc/backlog.js +1 -0
  42. package/dist/rpc/backlog.js.map +1 -1
  43. package/dist/rpc/gateway.d.ts +13 -0
  44. package/dist/rpc/gateway.d.ts.map +1 -1
  45. package/dist/rpc/index.d.ts +1 -0
  46. package/dist/rpc/index.d.ts.map +1 -1
  47. package/dist/rpc/index.js +1 -0
  48. package/dist/rpc/index.js.map +1 -1
  49. package/dist/rpc/registry.d.ts +9 -0
  50. package/dist/rpc/registry.d.ts.map +1 -1
  51. package/dist/rpc/registry.js +10 -0
  52. package/dist/rpc/registry.js.map +1 -1
  53. package/dist/rpc/roadmap.d.ts +59 -0
  54. package/dist/rpc/roadmap.d.ts.map +1 -1
  55. package/dist/rpc/roadmap.js +7 -0
  56. package/dist/rpc/roadmap.js.map +1 -1
  57. package/dist/rpc/worker-session-history.d.ts +78 -0
  58. package/dist/rpc/worker-session-history.d.ts.map +1 -0
  59. package/dist/rpc/worker-session-history.js +7 -0
  60. package/dist/rpc/worker-session-history.js.map +1 -0
  61. package/dist/transport/events.d.ts +4 -1
  62. package/dist/transport/events.d.ts.map +1 -1
  63. package/dist/transport/events.js +1 -0
  64. package/dist/transport/events.js.map +1 -1
  65. package/dist/version.d.ts +1 -1
  66. package/dist/version.js +1 -1
  67. package/package.json +11 -1
@@ -0,0 +1,274 @@
1
+ export const INTERACTIVE_OPERATOR_PACKET_SCHEMA_V1 = 'farmslot.interactive.operator-packet.v1';
2
+ export const INTERACTIVE_OPERATOR_PACKET_INTENTS = ['plan', 'decision', 'review', 'blocker', 'evidence', 'comparison'];
3
+ export const INTERACTIVE_OPERATOR_PACKET_ACTION_KINDS = ['terminal.send', 'decision.resolve', 'copy', 'open-artifact'];
4
+ function isRecord(value) {
5
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
6
+ }
7
+ function stringValue(value) {
8
+ if (typeof value !== 'string')
9
+ return null;
10
+ const trimmed = value.trim();
11
+ return trimmed ? trimmed : null;
12
+ }
13
+ function payloadString(payload, key) {
14
+ const value = payload?.[key];
15
+ return stringValue(value);
16
+ }
17
+ function isKnownString(value, known) {
18
+ if (typeof value !== 'string')
19
+ return false;
20
+ return known.some((candidate) => candidate === value);
21
+ }
22
+ function knownStringValue(value, known) {
23
+ return isKnownString(value, known) ? value : null;
24
+ }
25
+ function parseBody(value, errors) {
26
+ if (!isRecord(value)) {
27
+ errors.push('body must be an object');
28
+ return null;
29
+ }
30
+ if (value.format !== 'markdown') {
31
+ errors.push('body.format must be "markdown"');
32
+ return null;
33
+ }
34
+ const path = stringValue(value.path) ?? undefined;
35
+ const text = stringValue(value.text) ?? undefined;
36
+ if (!path && !text) {
37
+ errors.push('body must include path or text');
38
+ return null;
39
+ }
40
+ const body = { format: 'markdown' };
41
+ if (path)
42
+ body.path = path;
43
+ if (text)
44
+ body.text = text;
45
+ return body;
46
+ }
47
+ function parseAnchors(value, errors) {
48
+ if (value == null)
49
+ return undefined;
50
+ if (!Array.isArray(value)) {
51
+ errors.push('anchors must be an array');
52
+ return undefined;
53
+ }
54
+ const anchors = [];
55
+ const seenIds = new Set();
56
+ value.forEach((anchor, index) => {
57
+ if (!isRecord(anchor)) {
58
+ errors.push(`anchors[${index}] must be an object`);
59
+ return;
60
+ }
61
+ const id = stringValue(anchor.id);
62
+ const label = stringValue(anchor.label);
63
+ const errorCountBeforeAnchor = errors.length;
64
+ if (!id)
65
+ errors.push(`anchors[${index}].id must be a non-empty string`);
66
+ if (id && seenIds.has(id)) {
67
+ errors.push(`anchors[${index}].id must be unique`);
68
+ }
69
+ if (id)
70
+ seenIds.add(id);
71
+ if (!label) {
72
+ errors.push(`anchors[${index}].label must be a non-empty string`);
73
+ }
74
+ const artifactPath = stringValue(anchor.artifactPath) ?? undefined;
75
+ const selector = stringValue(anchor.selector) ?? undefined;
76
+ const line = Number.isInteger(anchor.line) ? Number(anchor.line) : undefined;
77
+ if (anchor.line != null && (line == null || line < 1)) {
78
+ errors.push(`anchors[${index}].line must be a positive integer`);
79
+ }
80
+ let range;
81
+ if (anchor.range != null) {
82
+ if (!isRecord(anchor.range)) {
83
+ errors.push(`anchors[${index}].range must be an object`);
84
+ }
85
+ else if (!Number.isInteger(anchor.range.start) ||
86
+ !Number.isInteger(anchor.range.end) ||
87
+ Number(anchor.range.start) < 0 ||
88
+ Number(anchor.range.end) < Number(anchor.range.start)) {
89
+ errors.push(`anchors[${index}].range must include valid start/end offsets`);
90
+ }
91
+ else {
92
+ range = { start: Number(anchor.range.start), end: Number(anchor.range.end) };
93
+ }
94
+ }
95
+ if (id && label && (anchor.line == null || line != null) && (anchor.range == null || range)) {
96
+ if (errors.length !== errorCountBeforeAnchor)
97
+ return;
98
+ const parsed = { id, label };
99
+ if (artifactPath)
100
+ parsed.artifactPath = artifactPath;
101
+ if (selector)
102
+ parsed.selector = selector;
103
+ if (line != null)
104
+ parsed.line = line;
105
+ if (range)
106
+ parsed.range = range;
107
+ anchors.push(parsed);
108
+ }
109
+ });
110
+ return anchors;
111
+ }
112
+ function validateActionPayload(kind, payload, index, errors) {
113
+ if (kind === 'copy' || kind === 'terminal.send') {
114
+ if (!payloadString(payload, 'text')) {
115
+ errors.push(`actions[${index}].payload.text must be a non-empty string`);
116
+ }
117
+ return;
118
+ }
119
+ if (kind === 'open-artifact') {
120
+ if (!payloadString(payload, 'artifactPath')) {
121
+ errors.push(`actions[${index}].payload.artifactPath must be a non-empty string`);
122
+ }
123
+ return;
124
+ }
125
+ if (!payloadString(payload, 'decisionId')) {
126
+ errors.push(`actions[${index}].payload.decisionId must be a non-empty string`);
127
+ }
128
+ if (!payloadString(payload, 'actionId')) {
129
+ errors.push(`actions[${index}].payload.actionId must be a non-empty string`);
130
+ }
131
+ }
132
+ function parseActions(value, errors) {
133
+ if (value == null)
134
+ return undefined;
135
+ if (!Array.isArray(value)) {
136
+ errors.push('actions must be an array');
137
+ return undefined;
138
+ }
139
+ const actions = [];
140
+ const seenIds = new Set();
141
+ value.forEach((action, index) => {
142
+ if (!isRecord(action)) {
143
+ errors.push(`actions[${index}] must be an object`);
144
+ return;
145
+ }
146
+ const id = stringValue(action.id);
147
+ const label = stringValue(action.label);
148
+ const errorCountBeforeAction = errors.length;
149
+ if (!id)
150
+ errors.push(`actions[${index}].id must be a non-empty string`);
151
+ if (id && seenIds.has(id)) {
152
+ errors.push(`actions[${index}].id must be unique`);
153
+ }
154
+ if (id)
155
+ seenIds.add(id);
156
+ if (!label) {
157
+ errors.push(`actions[${index}].label must be a non-empty string`);
158
+ }
159
+ const kind = knownStringValue(action.kind, INTERACTIVE_OPERATOR_PACKET_ACTION_KINDS);
160
+ if (!kind) {
161
+ errors.push(`actions[${index}].kind is unsupported`);
162
+ }
163
+ const safety = action.safety === 'read-only' || action.safety === 'operator-confirmed'
164
+ ? action.safety
165
+ : null;
166
+ if (!safety) {
167
+ errors.push(`actions[${index}].safety must be read-only or operator-confirmed`);
168
+ }
169
+ const payload = isRecord(action.payload) ? action.payload : undefined;
170
+ if (action.payload != null && !isRecord(action.payload)) {
171
+ errors.push(`actions[${index}].payload must be an object when present`);
172
+ }
173
+ if (kind)
174
+ validateActionPayload(kind, payload, index, errors);
175
+ if (id &&
176
+ label &&
177
+ kind &&
178
+ safety &&
179
+ (action.payload == null || payload) &&
180
+ errors.length === errorCountBeforeAction) {
181
+ const parsed = { id, label, kind, safety };
182
+ if (payload)
183
+ parsed.payload = payload;
184
+ actions.push(parsed);
185
+ }
186
+ });
187
+ return actions;
188
+ }
189
+ export function validateInteractiveOperatorPacket(value) {
190
+ const errors = [];
191
+ if (!isRecord(value))
192
+ return { ok: false, errors: ['packet must be an object'] };
193
+ if (value.schema !== INTERACTIVE_OPERATOR_PACKET_SCHEMA_V1) {
194
+ errors.push(`schema must be ${INTERACTIVE_OPERATOR_PACKET_SCHEMA_V1}`);
195
+ }
196
+ const id = stringValue(value.id);
197
+ const runId = stringValue(value.runId) ?? undefined;
198
+ const title = stringValue(value.title);
199
+ const summary = stringValue(value.summary) ?? undefined;
200
+ const intent = isKnownString(value.intent, INTERACTIVE_OPERATOR_PACKET_INTENTS)
201
+ ? value.intent
202
+ : null;
203
+ const createdAt = stringValue(value.createdAt);
204
+ if (!id)
205
+ errors.push('id must be a non-empty string');
206
+ if (!title)
207
+ errors.push('title must be a non-empty string');
208
+ if (!intent) {
209
+ errors.push('intent is unsupported');
210
+ }
211
+ const body = parseBody(value.body, errors);
212
+ const anchors = parseAnchors(value.anchors, errors);
213
+ const actions = parseActions(value.actions, errors);
214
+ if (!createdAt)
215
+ errors.push('createdAt must be a non-empty string');
216
+ if (errors.length > 0 || !id || !title || !intent || !body || !createdAt) {
217
+ return { ok: false, errors };
218
+ }
219
+ const packet = {
220
+ schema: INTERACTIVE_OPERATOR_PACKET_SCHEMA_V1,
221
+ id,
222
+ title,
223
+ intent,
224
+ body,
225
+ createdAt,
226
+ };
227
+ if (runId)
228
+ packet.runId = runId;
229
+ if (summary)
230
+ packet.summary = summary;
231
+ if (anchors)
232
+ packet.anchors = anchors;
233
+ if (actions)
234
+ packet.actions = actions;
235
+ return { ok: true, packet, errors: [] };
236
+ }
237
+ export function isInteractiveOperatorPacket(value) {
238
+ return validateInteractiveOperatorPacket(value).ok;
239
+ }
240
+ export function interactiveOperatorPacketActionRequest(action) {
241
+ switch (action.kind) {
242
+ case 'copy': {
243
+ const text = payloadString(action.payload, 'text');
244
+ return text ? { kind: 'copy', text } : null;
245
+ }
246
+ case 'open-artifact': {
247
+ const artifactPath = payloadString(action.payload, 'artifactPath');
248
+ return artifactPath ? { kind: 'open-artifact', artifactPath } : null;
249
+ }
250
+ case 'terminal.send': {
251
+ const text = payloadString(action.payload, 'text');
252
+ return text ? { kind: 'terminal.send', text } : null;
253
+ }
254
+ case 'decision.resolve': {
255
+ const decisionId = payloadString(action.payload, 'decisionId');
256
+ const actionId = payloadString(action.payload, 'actionId');
257
+ return decisionId && actionId ? { kind: 'decision.resolve', decisionId, actionId } : null;
258
+ }
259
+ }
260
+ }
261
+ export function isInteractiveOperatorPacketArtifact(artifact) {
262
+ const normalizedPath = artifact.path.replace(/\\/g, '/').toLowerCase();
263
+ const purpose = artifact.purpose?.toLowerCase() ?? '';
264
+ const type = artifact.type?.toLowerCase() ?? '';
265
+ const mimeType = artifact.mimeType?.toLowerCase() ?? '';
266
+ return (normalizedPath.endsWith('.packet.json') ||
267
+ purpose === 'interactive-packet' ||
268
+ type === 'interactive-packet' ||
269
+ mimeType === 'application/vnd.farmslot.operator-packet+json');
270
+ }
271
+ export function interactiveOperatorPacketArtifacts(artifacts) {
272
+ return artifacts.filter(isInteractiveOperatorPacketArtifact);
273
+ }
274
+ //# sourceMappingURL=interactive-operator-packets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-operator-packets.js","sourceRoot":"","sources":["../../src/contracts/interactive-operator-packets.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,12 @@ export type RecipeQualityVerdict = 'pass' | 'warn' | 'fail';
37
37
  export type RecipeQualityDimensionStatus = 'pass' | 'warn' | 'fail' | 'not_applicable';
38
38
  export type RecipeQualityEvidenceMode = 'logs' | 'state' | 'trace' | 'screenshot' | 'mixed' | 'unknown';
39
39
  export type RecipeQualityArtifactSource = 'worker' | 'gateway' | 'fallback:recipe-coverage' | 'fallback:recipe-json' | 'fallback:report' | 'fallback:missing';
40
+ export declare const RECIPE_QUALITY_ARTIFACT_VERSION = 1;
41
+ export declare const RECIPE_QUALITY_VERDICTS: readonly ["pass", "warn", "fail"];
42
+ export declare const RECIPE_QUALITY_DIMENSION_STATUSES: readonly ["pass", "warn", "fail", "not_applicable"];
43
+ export declare const RECIPE_QUALITY_PROOF_MODES: readonly ["logs", "state", "trace", "screenshot", "mixed", "unknown"];
44
+ export declare const RECIPE_QUALITY_ARTIFACT_SOURCES: readonly ["worker", "gateway", "fallback:recipe-coverage", "fallback:recipe-json", "fallback:report", "fallback:missing"];
45
+ export declare const RECIPE_QUALITY_FALLBACK_SOURCES: readonly ["fallback:recipe-coverage", "fallback:recipe-json", "fallback:report", "fallback:missing"];
40
46
  export interface RecipeQualityCompactProjection {
41
47
  verdict: 'PASS' | 'WARN' | 'FAIL';
42
48
  reasons: string[];
@@ -89,6 +95,7 @@ export interface RecipeQualitySignal {
89
95
  source: 'recipe-quality' | 'human-grade' | 'recipe-coverage' | 'recipe-json' | 'report' | 'missing';
90
96
  reasoning: string;
91
97
  }
98
+ export declare function isRecipeQualityArtifact(value: unknown): value is RecipeQualityArtifact;
92
99
  export type { EvidenceManifestEntry, EvidenceManifestStandalone, LiveRecipeContext, LiveRecipeSelectionReason, LiveRecipeSource, RecipeRunArtifactGroup, RecipeRunArtifactGroupKind, RecipeRunArtifactGroupStatus, } from './runs.js';
93
100
  export { hasLiveRecipeEvidence, LIVE_RECIPE_EVIDENCE_FILES, LIVE_RECIPE_EVIDENCE_PURPOSES, } from './runs.js';
94
101
  //# sourceMappingURL=recipes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/contracts/recipes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/contracts/recipes.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,145 @@ export const RECIPE_STRATEGY_LABELS = {
3
3
  targeted: { label: 'Targeted evidence', tagline: 'smoke + screenshots for changed UI' },
4
4
  smoke: { label: 'Smoke only', tagline: 'backend regression test, no UI evidence' },
5
5
  };
6
+ export const RECIPE_QUALITY_ARTIFACT_VERSION = 1;
7
+ // Runtime enum tuples are the source of truth for JSON validation and derived
8
+ // TypeScript unions; type-only unions disappear after compile.
9
+ export const RECIPE_QUALITY_VERDICTS = ['pass', 'warn', 'fail'];
10
+ export const RECIPE_QUALITY_DIMENSION_STATUSES = [
11
+ 'pass',
12
+ 'warn',
13
+ 'fail',
14
+ 'not_applicable',
15
+ ];
16
+ export const RECIPE_QUALITY_PROOF_MODES = [
17
+ 'logs',
18
+ 'state',
19
+ 'trace',
20
+ 'screenshot',
21
+ 'mixed',
22
+ 'unknown',
23
+ ];
24
+ export const RECIPE_QUALITY_ARTIFACT_SOURCES = [
25
+ 'worker',
26
+ 'gateway',
27
+ 'fallback:recipe-coverage',
28
+ 'fallback:recipe-json',
29
+ 'fallback:report',
30
+ 'fallback:missing',
31
+ ];
32
+ export const RECIPE_QUALITY_FALLBACK_SOURCES = [
33
+ 'fallback:recipe-coverage',
34
+ 'fallback:recipe-json',
35
+ 'fallback:report',
36
+ 'fallback:missing',
37
+ ];
38
+ const RECIPE_QUALITY_FLOW_TYPES = [
39
+ 'fix-bug',
40
+ 'review-pr',
41
+ 'dev',
42
+ 'pr-complete',
43
+ 'merge-main',
44
+ ];
45
+ function isStringArray(value) {
46
+ return Array.isArray(value) && value.every((entry) => typeof entry === 'string');
47
+ }
48
+ function isRecipeQualityFinding(value) {
49
+ if (!value || typeof value !== 'object' || Array.isArray(value))
50
+ return false;
51
+ const finding = value;
52
+ if (typeof finding.code !== 'string' || typeof finding.message !== 'string')
53
+ return false;
54
+ if (finding.dimension != null && typeof finding.dimension !== 'string')
55
+ return false;
56
+ if (finding.evidence != null && !isStringArray(finding.evidence))
57
+ return false;
58
+ return true;
59
+ }
60
+ function isRecipeQualityDimensions(value) {
61
+ if (!value || typeof value !== 'object' || Array.isArray(value))
62
+ return false;
63
+ return Object.values(value).every((dimension) => {
64
+ if (!dimension || typeof dimension !== 'object' || Array.isArray(dimension))
65
+ return false;
66
+ const result = dimension;
67
+ return (RECIPE_QUALITY_DIMENSION_STATUSES.includes(result.status) &&
68
+ typeof result.reason === 'string' &&
69
+ isStringArray(result.evidence));
70
+ });
71
+ }
72
+ function isRecipeQualityTrainingFields(value) {
73
+ if (!value || typeof value !== 'object' || Array.isArray(value))
74
+ return false;
75
+ const fields = value;
76
+ if (fields.farm != null && typeof fields.farm !== 'string')
77
+ return false;
78
+ if (fields.project != null && typeof fields.project !== 'string')
79
+ return false;
80
+ if (fields.flow_type != null &&
81
+ !RECIPE_QUALITY_FLOW_TYPES.includes(String(fields.flow_type)))
82
+ return false;
83
+ if (fields.task_type != null && typeof fields.task_type !== 'string')
84
+ return false;
85
+ if (fields.claim_is_visual != null && typeof fields.claim_is_visual !== 'boolean')
86
+ return false;
87
+ if (fields.proof_mode != null &&
88
+ !RECIPE_QUALITY_PROOF_MODES.includes(String(fields.proof_mode)))
89
+ return false;
90
+ if (fields.anti_patterns != null && !isStringArray(fields.anti_patterns))
91
+ return false;
92
+ if (fields.good_patterns != null && !isStringArray(fields.good_patterns))
93
+ return false;
94
+ return true;
95
+ }
96
+ function isRecipeQualityMeta(value) {
97
+ if (!value || typeof value !== 'object' || Array.isArray(value))
98
+ return false;
99
+ const meta = value;
100
+ if (!RECIPE_QUALITY_ARTIFACT_SOURCES.includes(meta.producer))
101
+ return false;
102
+ if (typeof meta.fallback_used !== 'boolean')
103
+ return false;
104
+ if (typeof meta.legacy_task !== 'boolean')
105
+ return false;
106
+ if (typeof meta.artifact_required !== 'boolean')
107
+ return false;
108
+ if (!isStringArray(meta.source_signals))
109
+ return false;
110
+ if (meta.fallback_source != null &&
111
+ !RECIPE_QUALITY_FALLBACK_SOURCES.includes(meta.fallback_source))
112
+ return false;
113
+ return true;
114
+ }
115
+ export function isRecipeQualityArtifact(value) {
116
+ if (!value || typeof value !== 'object' || Array.isArray(value))
117
+ return false;
118
+ const artifact = value;
119
+ if (artifact.version !== RECIPE_QUALITY_ARTIFACT_VERSION)
120
+ return false;
121
+ if (!RECIPE_QUALITY_VERDICTS.includes(artifact.verdict))
122
+ return false;
123
+ if (!artifact.compact || typeof artifact.compact !== 'object' || Array.isArray(artifact.compact))
124
+ return false;
125
+ const compact = artifact.compact;
126
+ if (!['PASS', 'WARN', 'FAIL'].includes(String(compact.verdict)))
127
+ return false;
128
+ if (!isStringArray(compact.reasons) || !isStringArray(compact.better_version_guidance))
129
+ return false;
130
+ if (!isRecipeQualityDimensions(artifact.dimensions))
131
+ return false;
132
+ if (!Array.isArray(artifact.structural_findings) ||
133
+ !artifact.structural_findings.every(isRecipeQualityFinding))
134
+ return false;
135
+ if (!Array.isArray(artifact.contextual_findings) ||
136
+ !artifact.contextual_findings.every(isRecipeQualityFinding))
137
+ return false;
138
+ if (!isStringArray(artifact.suggested_recipe_delta))
139
+ return false;
140
+ if (!isRecipeQualityTrainingFields(artifact.training_fields))
141
+ return false;
142
+ if (!isRecipeQualityMeta(artifact.meta))
143
+ return false;
144
+ return true;
145
+ }
6
146
  export { hasLiveRecipeEvidence, LIVE_RECIPE_EVIDENCE_FILES, LIVE_RECIPE_EVIDENCE_PURPOSES, } from './runs.js';
7
147
  //# sourceMappingURL=recipes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/contracts/recipes.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,sBAAsB,GAG/B;IACF,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,mCAAmC,EAAE;IAC7E,QAAQ,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,oCAAoC,EAAE;IACvF,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,yCAAyC,EAAE;CACnF,CAAC;AAmHF,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/contracts/recipes.ts"],"names":[],"mappings":"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"}
@@ -11,12 +11,14 @@ export interface RoadmapSource {
11
11
  export interface RoadmapPromotionEntry {
12
12
  backlogItemId?: string;
13
13
  specPath?: string;
14
+ project?: string;
14
15
  createdAt: string;
15
16
  }
16
17
  export interface RoadmapItem {
17
18
  id: string;
18
19
  kind: 'roadmap-item';
19
20
  project: string;
21
+ targetProjects?: string[];
20
22
  title: string;
21
23
  stage: RoadmapItemStage;
22
24
  tags?: string[];
@@ -27,12 +29,15 @@ export interface RoadmapItem {
27
29
  updatedAt: string;
28
30
  /** Repo-relative markdown file path under .roadmap. */
29
31
  filePath: string;
32
+ /** Latest repo-relative refinement prompt path generated for this item, when present. */
33
+ refinementPromptPath?: string;
30
34
  /** SHA-256 of the current markdown file, used for edit conflict checks. */
31
35
  fileHash: string;
32
36
  }
33
37
  export interface RoadmapItemSaveInput {
34
38
  id?: string;
35
39
  project?: string;
40
+ targetProjects?: string[];
36
41
  title: string;
37
42
  stage?: RoadmapItemStage;
38
43
  tags?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"roadmap.d.ts","sourceRoot":"","sources":["../../src/contracts/roadmap.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,6EAOtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,oBAAoB,oDAAqD,CAAC;AACvF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"roadmap.d.ts","sourceRoot":"","sources":["../../src/contracts/roadmap.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,6EAOtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,oBAAoB,oDAAqD,CAAC;AACvF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  export * from './agents/roles.js';
2
+ export * from './checklist-target.js';
2
3
  export * from './contracts/index.js';
3
4
  export * from './integrations/github-ref.js';
4
5
  export * from './pairing/index.js';
5
6
  export * from './recipe/index.js';
6
7
  export * from './recipes/step-io.js';
8
+ export * from './roadmap/promotion-drafts.js';
7
9
  export * from './rpc/index.js';
8
10
  export * from './runs/evidence-summary.js';
9
11
  export * from './runs/family-iteration-ledger.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,cAAc,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,cAAc,oCAAoC,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,11 @@
1
1
  export * from './agents/roles.js';
2
+ export * from './checklist-target.js';
2
3
  export * from './contracts/index.js';
3
4
  export * from './integrations/github-ref.js';
4
5
  export * from './pairing/index.js';
5
6
  export * from './recipe/index.js';
6
7
  export * from './recipes/step-io.js';
8
+ export * from './roadmap/promotion-drafts.js';
7
9
  export * from './rpc/index.js';
8
10
  export * from './runs/evidence-summary.js';
9
11
  export * from './runs/family-iteration-ledger.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,cAAc,oCAAoC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,cAAc,oCAAoC,CAAC"}
@@ -1,3 +1,10 @@
1
+ /** Where a resolved capture-helper binary came from, for provenance reporting. */
2
+ export type CaptureHelperSource = 'env:CAPTURE_HELPER_PATH' | 'env:SITEED_CAPTURE_HELPER_BIN' | 'npm-global' | 'npm-root' | 'PATH' | 'fallback';
3
+ export interface CaptureHelperPathInfo {
4
+ path: string;
5
+ source: CaptureHelperSource;
6
+ }
1
7
  export declare function captureHelperPath(): string;
8
+ export declare function captureHelperPathInfo(): CaptureHelperPathInfo;
2
9
  export declare function resolveNativeCaptureHelperPath(): string | null;
3
10
  //# sourceMappingURL=capture-helper-path.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capture-helper-path.d.ts","sourceRoot":"","sources":["../../src/node/capture-helper-path.ts"],"names":[],"mappings":"AAIA,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,8BAA8B,IAAI,MAAM,GAAG,IAAI,CAoB9D"}
1
+ {"version":3,"file":"capture-helper-path.d.ts","sourceRoot":"","sources":["../../src/node/capture-helper-path.ts"],"names":[],"mappings":"AAIA,kFAAkF;AAClF,MAAM,MAAM,mBAAmB,GAC3B,yBAAyB,GACzB,+BAA+B,GAC/B,YAAY,GACZ,UAAU,GACV,MAAM,GACN,UAAU,CAAC;AAEf,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,qBAAqB,IAAI,qBAAqB,CAM7D;AAED,wBAAgB,8BAA8B,IAAI,MAAM,GAAG,IAAI,CAE9D"}
@@ -2,24 +2,41 @@ import { spawnSync } from 'node:child_process';
2
2
  import { accessSync, constants, existsSync, realpathSync } from 'node:fs';
3
3
  import { dirname, join } from 'node:path';
4
4
  export function captureHelperPath() {
5
- return resolveNativeCaptureHelperPath() ?? commandPath('capture-helper') ?? 'capture-helper';
5
+ return captureHelperPathInfo().path;
6
+ }
7
+ export function captureHelperPathInfo() {
8
+ const native = resolveNativeCaptureHelperPathInfo();
9
+ if (native)
10
+ return native;
11
+ const onPath = commandPath('capture-helper');
12
+ if (onPath)
13
+ return { path: onPath, source: 'PATH' };
14
+ return { path: 'capture-helper', source: 'fallback' };
6
15
  }
7
16
  export function resolveNativeCaptureHelperPath() {
17
+ return resolveNativeCaptureHelperPathInfo()?.path ?? null;
18
+ }
19
+ function resolveNativeCaptureHelperPathInfo() {
8
20
  const candidates = [
9
- process.env.CAPTURE_HELPER_PATH,
10
- process.env.SITEED_CAPTURE_HELPER_BIN,
11
- process.env.HOME
12
- ? join(process.env.HOME, '.npm-global/lib/node_modules/@siteed/capture-helper/native/capture-helper')
13
- : undefined,
14
- npmGlobalNativePath(),
15
- commandPath('capture-helper'),
16
- ].filter((candidate) => Boolean(candidate));
17
- for (const candidate of candidates) {
18
- const native = nativePathForWrapper(candidate);
21
+ { path: process.env.CAPTURE_HELPER_PATH, source: 'env:CAPTURE_HELPER_PATH' },
22
+ { path: process.env.SITEED_CAPTURE_HELPER_BIN, source: 'env:SITEED_CAPTURE_HELPER_BIN' },
23
+ {
24
+ path: process.env.HOME
25
+ ? join(process.env.HOME, '.npm-global/lib/node_modules/@siteed/capture-helper/native/capture-helper')
26
+ : undefined,
27
+ source: 'npm-global',
28
+ },
29
+ { path: npmGlobalNativePath(), source: 'npm-root' },
30
+ { path: commandPath('capture-helper'), source: 'PATH' },
31
+ ];
32
+ for (const { path, source } of candidates) {
33
+ if (!path)
34
+ continue;
35
+ const native = nativePathForWrapper(path);
19
36
  if (native && isExecutable(native))
20
- return native;
21
- if (!isWrapperShim(candidate) && isExecutable(candidate))
22
- return candidate;
37
+ return { path: native, source };
38
+ if (!isWrapperShim(path) && isExecutable(path))
39
+ return { path, source };
23
40
  }
24
41
  return null;
25
42
  }