@captain_z/zsk 1.8.7 → 1.8.8
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.
- package/README.md +34 -16
- package/dist/bin.js +6 -0
- package/dist/bin.js.map +1 -1
- package/dist/commands/prepare.js +3 -0
- package/dist/commands/prepare.js.map +1 -1
- package/dist/core/anchor-drift.d.ts +79 -0
- package/dist/core/anchor-drift.js +198 -0
- package/dist/core/anchor-drift.js.map +1 -0
- package/dist/core/decoupling-eval.d.ts +53 -0
- package/dist/core/decoupling-eval.js +260 -0
- package/dist/core/decoupling-eval.js.map +1 -0
- package/dist/core/issue-publish-adapter.d.ts +50 -0
- package/dist/core/issue-publish-adapter.js +371 -0
- package/dist/core/issue-publish-adapter.js.map +1 -0
- package/dist/core/prepare-artifacts.d.ts +2 -0
- package/dist/core/prepare-artifacts.js +2 -0
- package/dist/core/prepare-artifacts.js.map +1 -1
- package/dist/core/prepare-readiness.d.ts +40 -0
- package/dist/core/prepare-readiness.js +268 -0
- package/dist/core/prepare-readiness.js.map +1 -0
- package/dist/core/prepare-sync.d.ts +2 -0
- package/dist/core/prepare-sync.js +8 -16
- package/dist/core/prepare-sync.js.map +1 -1
- package/dist/core/review-skill-policy.d.ts +74 -0
- package/dist/core/review-skill-policy.js +278 -0
- package/dist/core/review-skill-policy.js.map +1 -0
- package/dist/core/source-snapshot-adapters.d.ts +3 -0
- package/dist/core/source-snapshot-adapters.js.map +1 -1
- package/dist/core/task-decomposition.d.ts +64 -0
- package/dist/core/task-decomposition.js +325 -0
- package/dist/core/task-decomposition.js.map +1 -0
- package/dist/core/task-plan-adapter.d.ts +57 -0
- package/dist/core/task-plan-adapter.js +298 -0
- package/dist/core/task-plan-adapter.js.map +1 -0
- package/dist/core/validation-packet.d.ts +86 -0
- package/dist/core/validation-packet.js +313 -0
- package/dist/core/validation-packet.js.map +1 -0
- package/dist/core/workflow-orchestration-policy.d.ts +92 -0
- package/dist/core/workflow-orchestration-policy.js +215 -0
- package/dist/core/workflow-orchestration-policy.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anchor-drift.js","sourceRoot":"","sources":["../../src/core/anchor-drift.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export type DecouplingSkillSource = {
|
|
2
|
+
slug: string;
|
|
3
|
+
kind?: string;
|
|
4
|
+
skillType?: string;
|
|
5
|
+
contract?: DecouplingSkillContract;
|
|
6
|
+
body: string;
|
|
7
|
+
};
|
|
8
|
+
export type DecouplingSkillContract = {
|
|
9
|
+
responsibility?: string;
|
|
10
|
+
nonGoals?: string[];
|
|
11
|
+
modeRequirements?: {
|
|
12
|
+
direct?: DecouplingModeRequirement;
|
|
13
|
+
governed?: DecouplingModeRequirement;
|
|
14
|
+
strict?: DecouplingModeRequirement;
|
|
15
|
+
};
|
|
16
|
+
workflowOwnedConstraints?: string[];
|
|
17
|
+
qualityRubric?: string[];
|
|
18
|
+
};
|
|
19
|
+
export type DecouplingModeRequirement = {
|
|
20
|
+
hardInputs?: string[];
|
|
21
|
+
optionalInputs?: string[];
|
|
22
|
+
};
|
|
23
|
+
export type DecouplingWarningCategory = "orchestration" | "gate" | "dispatch" | "staffing" | "approval" | "issue-side-effect";
|
|
24
|
+
export type DecouplingWarning = {
|
|
25
|
+
level: "warning";
|
|
26
|
+
skill: string;
|
|
27
|
+
category: DecouplingWarningCategory;
|
|
28
|
+
phrase: string;
|
|
29
|
+
message: string;
|
|
30
|
+
};
|
|
31
|
+
export type DecouplingScenarioId = "direct-review-no-gates" | "governed-review" | "direct-coding" | "strict-gate";
|
|
32
|
+
export type DecouplingScenarioResult = {
|
|
33
|
+
id: DecouplingScenarioId;
|
|
34
|
+
label: string;
|
|
35
|
+
skill: string;
|
|
36
|
+
mode: "direct" | "governed" | "strict";
|
|
37
|
+
outcome: "useful" | "blocked" | "warning";
|
|
38
|
+
blockedReason?: string;
|
|
39
|
+
firstUsefulOutputLatencyProxy: number;
|
|
40
|
+
readFileCountProxy: number;
|
|
41
|
+
contextScaleProxy: number;
|
|
42
|
+
};
|
|
43
|
+
export type DecouplingBaselineReport = {
|
|
44
|
+
status: "warning-only";
|
|
45
|
+
hasFailures: false;
|
|
46
|
+
scenarios: DecouplingScenarioResult[];
|
|
47
|
+
warnings: DecouplingWarning[];
|
|
48
|
+
};
|
|
49
|
+
export type DecouplingBaselineInput = {
|
|
50
|
+
skills: DecouplingSkillSource[];
|
|
51
|
+
};
|
|
52
|
+
export declare function evaluateDecouplingBaseline(input: DecouplingBaselineInput): DecouplingBaselineReport;
|
|
53
|
+
export declare function formatDecouplingBaselineReport(report: DecouplingBaselineReport): string;
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
const scenarioOrder = [
|
|
2
|
+
"direct-review-no-gates",
|
|
3
|
+
"governed-review",
|
|
4
|
+
"direct-coding",
|
|
5
|
+
"strict-gate",
|
|
6
|
+
];
|
|
7
|
+
const leakagePatterns = [
|
|
8
|
+
{ category: "orchestration", phrase: "orchestration", pattern: /\borchestration\b/i },
|
|
9
|
+
{ category: "orchestration", phrase: "workflow owns", pattern: /\bworkflow owns\b/i },
|
|
10
|
+
{ category: "gate", phrase: "zsk gate assess", pattern: /\bzsk\s+gate\s+assess\b/i },
|
|
11
|
+
{ category: "gate", phrase: "gate assess", pattern: /\bgate\s+assess\b/i },
|
|
12
|
+
{ category: "gate", phrase: "stage gate", pattern: /\bstage\s+gates?\b/i },
|
|
13
|
+
{ category: "dispatch", phrase: "dispatch plan", pattern: /\bdispatch\s+plan\b/i },
|
|
14
|
+
{ category: "dispatch", phrase: "dispatch", pattern: /\bdispatch\b/i },
|
|
15
|
+
{ category: "staffing", phrase: "staffing", pattern: /\bstaffing\b/i },
|
|
16
|
+
{ category: "approval", phrase: "approval is required", pattern: /\bapproval\s+is\s+required\b/i },
|
|
17
|
+
{ category: "approval", phrase: "must be approved", pattern: /\bmust\s+be\s+approved\b/i },
|
|
18
|
+
{ category: "approval", phrase: "explicit approval", pattern: /\bexplicit\s+approval\b/i },
|
|
19
|
+
{
|
|
20
|
+
category: "issue-side-effect",
|
|
21
|
+
phrase: "create or update issue",
|
|
22
|
+
pattern: /\bcreate\s+or\s+update\s+(?:an?\s+)?issues?\b/i,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
category: "issue-side-effect",
|
|
26
|
+
phrase: "must create issue",
|
|
27
|
+
pattern: /\bmust\s+(?:create|open|file|record|persist|update|sync)\s+(?:an?\s+)?issues?\b/i,
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
const directReviewBlockerPatterns = [
|
|
31
|
+
{
|
|
32
|
+
phrase: "must run workflow gate before review",
|
|
33
|
+
pattern: /\bbefore\s+(?:any\s+)?review\b[^.\n]{0,160}\b(?:must|required|requires?)\b[^.\n]{0,120}\b(?:zsk\s+gate\s+assess|gate\s+assess|dispatch\s+plan|dispatch|approval|signoff|issue)\b/i,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
phrase: "workflow approval is required before review output",
|
|
37
|
+
pattern: /\b(?:approval|signoff|gate|dispatch|issue)\b[^.\n]{0,120}\b(?:is|are)\s+required\b[^.\n]{0,120}\bbefore\b[^.\n]{0,80}\b(?:reviewer|review|findings|output)\b/i,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
phrase: "issue side effect is required before findings",
|
|
41
|
+
pattern: /\bmust\s+(?:create|open|file|record|persist|update|sync)\s+(?:or\s+update\s+)?(?:an?\s+)?issues?\b[^.\n]{0,120}\bbefore\b[^.\n]{0,80}\b(?:reporting\s+)?findings?\b/i,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
phrase: "missing workflow evidence blocks direct review",
|
|
45
|
+
pattern: /\bmissing\b[^.\n]{0,80}\b(?:gate|signoff|approval|dispatch|issue|validation\s+packet|anchor\s+packet)\b[^.\n]{0,120}\b(?:blocks?|blocked|must\s+stop|cannot\s+review|do\s+not\s+review)\b/i,
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
phrase: "review is forbidden without workflow evidence",
|
|
49
|
+
pattern: /\bdo\s+not\s+review\b[^.\n]{0,120}\b(?:without|until)\b[^.\n]{0,120}\b(?:gate|signoff|approval|dispatch|issue|validation\s+packet|anchor\s+packet)\b/i,
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
const workflowOwnedInputPatterns = [
|
|
53
|
+
{ category: "orchestration", pattern: /\b(?:workflow|workflow-packet|workflow-required-evidence|peer-skill)\b/i },
|
|
54
|
+
{ category: "gate", pattern: /\b(?:gate|gate-evidence|stage-gate|smoke)\b/i },
|
|
55
|
+
{ category: "dispatch", pattern: /\b(?:dispatch|route|routing)\b/i },
|
|
56
|
+
{ category: "staffing", pattern: /\b(?:staff|staffing|subagent|role-lane)\b/i },
|
|
57
|
+
{ category: "approval", pattern: /\b(?:approval|approve|signoff|sign-off|waiver)\b/i },
|
|
58
|
+
{ category: "issue-side-effect", pattern: /\b(?:issue|ticket|record)\b/i },
|
|
59
|
+
];
|
|
60
|
+
export function evaluateDecouplingBaseline(input) {
|
|
61
|
+
const warnings = input.skills.flatMap((skill) => collectSkillWarnings(skill));
|
|
62
|
+
const scenarios = scenarioOrder.map((id) => buildScenario(id, input.skills, warnings));
|
|
63
|
+
return {
|
|
64
|
+
status: "warning-only",
|
|
65
|
+
hasFailures: false,
|
|
66
|
+
scenarios,
|
|
67
|
+
warnings,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export function formatDecouplingBaselineReport(report) {
|
|
71
|
+
const lines = [
|
|
72
|
+
"# Decoupling Eval Baseline",
|
|
73
|
+
"",
|
|
74
|
+
`Status: ${report.status}`,
|
|
75
|
+
`Failure mode: ${report.hasFailures ? "failing" : "warning-only"}`,
|
|
76
|
+
"",
|
|
77
|
+
"## Scenarios",
|
|
78
|
+
"",
|
|
79
|
+
"| Scenario | Skill | Mode | Outcome | Blocked reason | Latency proxy | File proxy | Context proxy |",
|
|
80
|
+
"| --- | --- | --- | --- | --- | ---: | ---: | ---: |",
|
|
81
|
+
...report.scenarios.map((scenario) => `| ${scenario.id} | ${scenario.skill} | ${scenario.mode} | ${scenario.outcome} | ${escapeTableCell(scenario.blockedReason ?? "")} | ${scenario.firstUsefulOutputLatencyProxy} | ${scenario.readFileCountProxy} | ${scenario.contextScaleProxy} |`),
|
|
82
|
+
"",
|
|
83
|
+
"## Decoupling Warnings",
|
|
84
|
+
"",
|
|
85
|
+
];
|
|
86
|
+
if (report.warnings.length === 0) {
|
|
87
|
+
lines.push("No workflow responsibility leakage warnings detected.");
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
lines.push("| Skill | Category | Phrase | Message |");
|
|
91
|
+
lines.push("| --- | --- | --- | --- |");
|
|
92
|
+
for (const warning of report.warnings) {
|
|
93
|
+
lines.push(`| ${warning.skill} | ${warning.category} | ${escapeTableCell(warning.phrase)} | ${escapeTableCell(warning.message)} |`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return `${lines.join("\n")}\n`;
|
|
97
|
+
}
|
|
98
|
+
function collectSkillWarnings(skill) {
|
|
99
|
+
if (isWorkflowSkill(skill)) {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
const seen = new Set();
|
|
103
|
+
const warnings = [];
|
|
104
|
+
const contractBlocker = findWorkflowOwnedDirectHardInput(skill.contract);
|
|
105
|
+
if (contractBlocker) {
|
|
106
|
+
warnings.push({
|
|
107
|
+
level: "warning",
|
|
108
|
+
skill: skill.slug,
|
|
109
|
+
category: contractBlocker.category,
|
|
110
|
+
phrase: `contract direct hard input: ${contractBlocker.input}`,
|
|
111
|
+
message: `${skill.slug} declares ${contractBlocker.input} as a direct-mode hard input. ` +
|
|
112
|
+
"Single-skill direct mode should treat workflow-owned material as optional context unless a workflow invokes strict mode.",
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
for (const leakage of leakagePatterns) {
|
|
116
|
+
if (!leakage.pattern.test(skill.body)) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const key = `${skill.slug}:${leakage.category}:${leakage.phrase}`;
|
|
120
|
+
if (seen.has(key)) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
seen.add(key);
|
|
124
|
+
warnings.push({
|
|
125
|
+
level: "warning",
|
|
126
|
+
skill: skill.slug,
|
|
127
|
+
category: leakage.category,
|
|
128
|
+
phrase: leakage.phrase,
|
|
129
|
+
message: `${skill.slug} mentions ${leakage.phrase}, which may be workflow-owned responsibility. ` +
|
|
130
|
+
"Keep single skills focused on intrinsic responsibilities and let workflows own orchestration.",
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return warnings;
|
|
134
|
+
}
|
|
135
|
+
function buildScenario(id, skills, warnings) {
|
|
136
|
+
switch (id) {
|
|
137
|
+
case "direct-review-no-gates":
|
|
138
|
+
return buildDirectReviewScenario(skills, warnings);
|
|
139
|
+
case "governed-review":
|
|
140
|
+
return buildGovernedReviewScenario(skills, warnings);
|
|
141
|
+
case "direct-coding":
|
|
142
|
+
return buildDirectCodingScenario(skills, warnings);
|
|
143
|
+
case "strict-gate":
|
|
144
|
+
return buildStrictGateScenario(skills);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function buildDirectReviewScenario(skills, warnings) {
|
|
148
|
+
const skill = findSkill(skills, "review");
|
|
149
|
+
const skillWarnings = warningsForSkill(warnings, "review");
|
|
150
|
+
const blocker = skill === undefined ? undefined : findDirectReviewBlocker(skill);
|
|
151
|
+
const outcome = blocker ? "blocked" : skillWarnings.length > 0 ? "warning" : "useful";
|
|
152
|
+
const blockedReason = blocker
|
|
153
|
+
? `Direct review has hard prerequisite ${blocker.source}: ${blocker.phrase}.`
|
|
154
|
+
: undefined;
|
|
155
|
+
return scenarioResult({
|
|
156
|
+
id: "direct-review-no-gates",
|
|
157
|
+
label: "Direct review can produce useful findings without workflow evidence gates.",
|
|
158
|
+
skill,
|
|
159
|
+
skillSlug: "review",
|
|
160
|
+
mode: "direct",
|
|
161
|
+
outcome,
|
|
162
|
+
blockedReason,
|
|
163
|
+
warnings: skillWarnings,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
function buildGovernedReviewScenario(skills, warnings) {
|
|
167
|
+
const skill = findSkill(skills, "review");
|
|
168
|
+
return scenarioResult({
|
|
169
|
+
id: "governed-review",
|
|
170
|
+
label: "Workflow supplies sequencing and evidence, while review owns findings.",
|
|
171
|
+
skill,
|
|
172
|
+
skillSlug: "review",
|
|
173
|
+
mode: "governed",
|
|
174
|
+
outcome: "useful",
|
|
175
|
+
warnings: warningsForSkill(warnings, "review"),
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
function buildDirectCodingScenario(skills, warnings) {
|
|
179
|
+
const skill = findSkill(skills, "coding");
|
|
180
|
+
const skillWarnings = warningsForSkill(warnings, "coding");
|
|
181
|
+
return scenarioResult({
|
|
182
|
+
id: "direct-coding",
|
|
183
|
+
label: "Coding can make progress from a scoped issue without depending on peer skills.",
|
|
184
|
+
skill,
|
|
185
|
+
skillSlug: "coding",
|
|
186
|
+
mode: "direct",
|
|
187
|
+
outcome: skillWarnings.length > 0 ? "warning" : "useful",
|
|
188
|
+
warnings: skillWarnings,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
function buildStrictGateScenario(skills) {
|
|
192
|
+
const skill = findSkill(skills, "zsk");
|
|
193
|
+
return scenarioResult({
|
|
194
|
+
id: "strict-gate",
|
|
195
|
+
label: "Strict gates remain workflow-owned and can block when required evidence is missing.",
|
|
196
|
+
skill,
|
|
197
|
+
skillSlug: "zsk",
|
|
198
|
+
mode: "strict",
|
|
199
|
+
outcome: "blocked",
|
|
200
|
+
blockedReason: "Strict gate requires workflow-owned evidence before downstream execution.",
|
|
201
|
+
warnings: [],
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
function scenarioResult(input) {
|
|
205
|
+
const bodyLength = input.skill?.body.length ?? 0;
|
|
206
|
+
const blockedPenalty = input.outcome === "blocked" ? 2 : 0;
|
|
207
|
+
const governedPenalty = input.mode === "direct" ? 0 : 2;
|
|
208
|
+
const readFileCountProxy = Math.max(1, 1 + governedPenalty + blockedPenalty + input.warnings.length);
|
|
209
|
+
const firstUsefulOutputLatencyProxy = Math.max(1, 1 + blockedPenalty + input.warnings.length);
|
|
210
|
+
return {
|
|
211
|
+
id: input.id,
|
|
212
|
+
label: input.label,
|
|
213
|
+
skill: input.skill?.slug ?? input.skillSlug,
|
|
214
|
+
mode: input.mode,
|
|
215
|
+
outcome: input.outcome,
|
|
216
|
+
blockedReason: input.blockedReason,
|
|
217
|
+
firstUsefulOutputLatencyProxy,
|
|
218
|
+
readFileCountProxy,
|
|
219
|
+
contextScaleProxy: Math.max(1, Math.ceil(bodyLength / 240) + readFileCountProxy),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
function findSkill(skills, slug) {
|
|
223
|
+
return skills.find((skill) => skill.slug === slug);
|
|
224
|
+
}
|
|
225
|
+
function warningsForSkill(warnings, slug) {
|
|
226
|
+
return warnings.filter((warning) => warning.skill === slug);
|
|
227
|
+
}
|
|
228
|
+
function findDirectReviewBlocker(skill) {
|
|
229
|
+
const contractBlocker = findWorkflowOwnedDirectHardInput(skill.contract);
|
|
230
|
+
if (contractBlocker) {
|
|
231
|
+
return {
|
|
232
|
+
source: "contract",
|
|
233
|
+
phrase: `${contractBlocker.input} is declared as a direct-mode hard input`,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
const bodyBlocker = directReviewBlockerPatterns.find((blocker) => blocker.pattern.test(skill.body));
|
|
237
|
+
return bodyBlocker ? { source: "body", phrase: bodyBlocker.phrase } : undefined;
|
|
238
|
+
}
|
|
239
|
+
function findWorkflowOwnedDirectHardInput(contract) {
|
|
240
|
+
const hardInputs = contract?.modeRequirements?.direct?.hardInputs ?? [];
|
|
241
|
+
for (const input of hardInputs) {
|
|
242
|
+
const matched = workflowOwnedInputPatterns.find((entry) => entry.pattern.test(input));
|
|
243
|
+
if (matched) {
|
|
244
|
+
return { input, category: matched.category };
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return undefined;
|
|
248
|
+
}
|
|
249
|
+
function isWorkflowSkill(skill) {
|
|
250
|
+
const skillType = skill.skillType?.toLowerCase();
|
|
251
|
+
if (skillType) {
|
|
252
|
+
return skillType === "workflow";
|
|
253
|
+
}
|
|
254
|
+
const kind = skill.kind?.toLowerCase();
|
|
255
|
+
return kind === "workflow" || kind === "workflow-orchestrator";
|
|
256
|
+
}
|
|
257
|
+
function escapeTableCell(value) {
|
|
258
|
+
return value.replaceAll("|", "\\|").replaceAll("\n", " ");
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=decoupling-eval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoupling-eval.js","sourceRoot":"","sources":["../../src/core/decoupling-eval.ts"],"names":[],"mappings":"AA2FA,MAAM,aAAa,GAA2B;IAC5C,wBAAwB;IACxB,iBAAiB;IACjB,eAAe;IACf,aAAa;CACd,CAAC;AAEF,MAAM,eAAe,GAAqB;IACxC,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE;IACrF,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE;IACrF,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,0BAA0B,EAAE;IACpF,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB,EAAE;IAC1E,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE;IAC1E,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,sBAAsB,EAAE;IAClF,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE;IACtE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE;IACtE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,+BAA+B,EAAE;IAClG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,2BAA2B,EAAE;IAC1F,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,0BAA0B,EAAE;IAC1F;QACE,QAAQ,EAAE,mBAAmB;QAC7B,MAAM,EAAE,wBAAwB;QAChC,OAAO,EAAE,gDAAgD;KAC1D;IACD;QACE,QAAQ,EAAE,mBAAmB;QAC7B,MAAM,EAAE,mBAAmB;QAC3B,OAAO,EAAE,kFAAkF;KAC5F;CACF,CAAC;AAEF,MAAM,2BAA2B,GAAiC;IAChE;QACE,MAAM,EAAE,sCAAsC;QAC9C,OAAO,EACL,mLAAmL;KACtL;IACD;QACE,MAAM,EAAE,oDAAoD;QAC5D,OAAO,EACL,+JAA+J;KAClK;IACD;QACE,MAAM,EAAE,+CAA+C;QACvD,OAAO,EACL,sKAAsK;KACzK;IACD;QACE,MAAM,EAAE,gDAAgD;QACxD,OAAO,EACL,4LAA4L;KAC/L;IACD;QACE,MAAM,EAAE,+CAA+C;QACvD,OAAO,EACL,uJAAuJ;KAC1J;CACF,CAAC;AAEF,MAAM,0BAA0B,GAAgC;IAC9D,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,yEAAyE,EAAE;IACjH,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,8CAA8C,EAAE;IAC7E,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,iCAAiC,EAAE;IACpE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,4CAA4C,EAAE;IAC/E,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,mDAAmD,EAAE;IACtF,EAAE,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,8BAA8B,EAAE;CAC3E,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,KAA8B;IACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvF,OAAO;QACL,MAAM,EAAE,cAAc;QACtB,WAAW,EAAE,KAAK;QAClB,SAAS;QACT,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAgC;IAC7E,MAAM,KAAK,GAAG;QACZ,4BAA4B;QAC5B,EAAE;QACF,WAAW,MAAM,CAAC,MAAM,EAAE;QAC1B,iBAAiB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE;QAClE,EAAE;QACF,cAAc;QACd,EAAE;QACF,qGAAqG;QACrG,sDAAsD;QACtD,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CACrB,CAAC,QAAQ,EAAE,EAAE,CACX,KAAK,QAAQ,CAAC,EAAE,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,OAAO,MAAM,eAAe,CAChG,QAAQ,CAAC,aAAa,IAAI,EAAE,CAC7B,MAAM,QAAQ,CAAC,6BAA6B,MAAM,QAAQ,CAAC,kBAAkB,MAAM,QAAQ,CAAC,iBAAiB,IAAI,CACrH;QACD,EAAE;QACF,wBAAwB;QACxB,EAAE;KACH,CAAC;IAEF,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CACR,KAAK,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,QAAQ,MAAM,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,eAAe,CAChG,OAAO,CAAC,OAAO,CAChB,IAAI,CACN,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA4B;IACxD,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,MAAM,eAAe,GAAG,gCAAgC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzE,IAAI,eAAe,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,QAAQ,EAAE,eAAe,CAAC,QAAQ;YAClC,MAAM,EAAE,+BAA+B,eAAe,CAAC,KAAK,EAAE;YAC9D,OAAO,EACL,GAAG,KAAK,CAAC,IAAI,aAAa,eAAe,CAAC,KAAK,gCAAgC;gBAC/E,0HAA0H;SAC7H,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAClE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EACL,GAAG,KAAK,CAAC,IAAI,aAAa,OAAO,CAAC,MAAM,gDAAgD;gBACxF,+FAA+F;SAClG,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CACpB,EAAwB,EACxB,MAA+B,EAC/B,QAA6B;IAE7B,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,wBAAwB;YAC3B,OAAO,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrD,KAAK,iBAAiB;YACpB,OAAO,2BAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvD,KAAK,eAAe;YAClB,OAAO,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrD,KAAK,aAAa;YAChB,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,MAA+B,EAC/B,QAA6B;IAE7B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtF,MAAM,aAAa,GAAG,OAAO;QAC3B,CAAC,CAAC,uCAAuC,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG;QAC7E,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,cAAc,CAAC;QACpB,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,4EAA4E;QACnF,KAAK;QACL,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,QAAQ;QACd,OAAO;QACP,aAAa;QACb,QAAQ,EAAE,aAAa;KACxB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,2BAA2B,CAClC,MAA+B,EAC/B,QAA6B;IAE7B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE1C,OAAO,cAAc,CAAC;QACpB,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,wEAAwE;QAC/E,KAAK;QACL,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAC/C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAChC,MAA+B,EAC/B,QAA6B;IAE7B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE3D,OAAO,cAAc,CAAC;QACpB,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,gFAAgF;QACvF,KAAK;QACL,SAAS,EAAE,QAAQ;QACnB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QACxD,QAAQ,EAAE,aAAa;KACxB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA+B;IAC9D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAEvC,OAAO,cAAc,CAAC;QACpB,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,qFAAqF;QAC5F,KAAK;QACL,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;QAClB,aAAa,EAAE,2EAA2E;QAC1F,QAAQ,EAAE,EAAE;KACb,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,KASvB;IACC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IACjD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,GAAG,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrG,MAAM,6BAA6B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE9F,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,CAAC,SAAS;QAC3C,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,6BAA6B;QAC7B,kBAAkB;QAClB,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,kBAAkB,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAA+B,EAAE,IAAY;IAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,gBAAgB,CAAC,QAA6B,EAAE,IAAY;IACnE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,uBAAuB,CAAC,KAA4B;IAC3D,MAAM,eAAe,GAAG,gCAAgC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,0CAA0C;SAC3E,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpG,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAClF,CAAC;AAED,SAAS,gCAAgC,CACvC,QAA6C;IAE7C,MAAM,UAAU,GAAG,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;IACxE,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,KAA4B;IACnD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;IACjD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,KAAK,UAAU,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;IACvC,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,uBAAuB,CAAC;AACjE,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type TaskCandidate, type TaskDecompositionAssessment, type TaskDecompositionResult } from "./task-decomposition.js";
|
|
2
|
+
export type IssuePublishMode = "dry-run" | "write";
|
|
3
|
+
export type IssuePublishOptions = {
|
|
4
|
+
featureSlug: string;
|
|
5
|
+
parentPath: string;
|
|
6
|
+
mode?: IssuePublishMode;
|
|
7
|
+
selectedCandidateIds?: string[];
|
|
8
|
+
targetRoot?: string;
|
|
9
|
+
};
|
|
10
|
+
export type PublishedIssueDraft = {
|
|
11
|
+
candidateId: string;
|
|
12
|
+
number: string;
|
|
13
|
+
title: string;
|
|
14
|
+
path: string;
|
|
15
|
+
status: "ready-for-agent" | "ready-for-human";
|
|
16
|
+
workMode: TaskCandidate["workMode"];
|
|
17
|
+
blockedBy: string[];
|
|
18
|
+
unblocks: string[];
|
|
19
|
+
priority: TaskCandidate["priority"];
|
|
20
|
+
body: string;
|
|
21
|
+
};
|
|
22
|
+
export type IssuePublishPlan = {
|
|
23
|
+
version: 1;
|
|
24
|
+
kind: "issue-publish-plan";
|
|
25
|
+
sourceEngine: "task-decomposition";
|
|
26
|
+
source: TaskDecompositionResult["source"];
|
|
27
|
+
assessment: TaskDecompositionAssessment;
|
|
28
|
+
mode: IssuePublishMode;
|
|
29
|
+
parentPath: string;
|
|
30
|
+
featureSlug: string;
|
|
31
|
+
selectedCandidateIds: string[];
|
|
32
|
+
localSideEffects: "none" | "write-issue-markdown";
|
|
33
|
+
workflowSideEffects: [];
|
|
34
|
+
issues: PublishedIssueDraft[];
|
|
35
|
+
};
|
|
36
|
+
export type IssuePublishDiagnostic = {
|
|
37
|
+
code: string;
|
|
38
|
+
severity: "warning" | "failure";
|
|
39
|
+
candidateId?: string;
|
|
40
|
+
message: string;
|
|
41
|
+
evidence: string[];
|
|
42
|
+
};
|
|
43
|
+
export type IssuePublishAssessment = {
|
|
44
|
+
status: "valid" | "warning" | "invalid";
|
|
45
|
+
targetScore: 100;
|
|
46
|
+
score: number;
|
|
47
|
+
diagnostics: IssuePublishDiagnostic[];
|
|
48
|
+
};
|
|
49
|
+
export declare function createIssuePublishPlan(decomposition: TaskDecompositionResult, options: IssuePublishOptions): IssuePublishPlan;
|
|
50
|
+
export declare function evaluateIssuePublishPlan(plan: IssuePublishPlan): IssuePublishAssessment;
|