@cat-factory/orchestration 0.306.0 → 0.307.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.
- package/dist/modules/execution/BugFishingController.d.ts +26 -3
- package/dist/modules/execution/BugFishingController.d.ts.map +1 -1
- package/dist/modules/execution/BugFishingController.js +23 -6
- package/dist/modules/execution/BugFishingController.js.map +1 -1
- package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionService.js +3 -1
- package/dist/modules/execution/ExecutionService.js.map +1 -1
- package/dist/modules/execution/ci.logic.d.ts +1 -0
- package/dist/modules/execution/ci.logic.d.ts.map +1 -1
- package/dist/modules/execution/ci.logic.js +9 -0
- package/dist/modules/execution/ci.logic.js.map +1 -1
- package/dist/modules/execution/dispatcher-registries.d.ts.map +1 -1
- package/dist/modules/execution/dispatcher-registries.js +18 -1
- package/dist/modules/execution/dispatcher-registries.js.map +1 -1
- package/dist/modules/execution/gate-window-controllers.d.ts +7 -3
- package/dist/modules/execution/gate-window-controllers.d.ts.map +1 -1
- package/dist/modules/execution/gate-window-controllers.js +1 -1
- package/dist/modules/execution/gate-window-controllers.js.map +1 -1
- package/dist/modules/execution/integrationTest.logic.d.ts +38 -0
- package/dist/modules/execution/integrationTest.logic.d.ts.map +1 -0
- package/dist/modules/execution/integrationTest.logic.js +129 -0
- package/dist/modules/execution/integrationTest.logic.js.map +1 -0
- package/dist/modules/execution/prReport.logic.d.ts.map +1 -1
- package/dist/modules/execution/prReport.logic.js +19 -2
- package/dist/modules/execution/prReport.logic.js.map +1 -1
- package/dist/modules/execution/reproTest.logic.d.ts.map +1 -1
- package/dist/modules/execution/reproTest.logic.js +13 -16
- package/dist/modules/execution/reproTest.logic.js.map +1 -1
- package/dist/modules/execution/structuredDigest.logic.d.ts +37 -0
- package/dist/modules/execution/structuredDigest.logic.d.ts.map +1 -0
- package/dist/modules/execution/structuredDigest.logic.js +33 -0
- package/dist/modules/execution/structuredDigest.logic.js.map +1 -0
- package/package.json +11 -11
|
@@ -1,33 +1,30 @@
|
|
|
1
1
|
import { reproTestOutcome } from '@cat-factory/agents';
|
|
2
|
+
import { renderStructuredDigest } from './structuredDigest.logic.js';
|
|
2
3
|
// Pure rendering for the `repro-test` post-completion resolver: fold its STRUCTURED outcome
|
|
3
4
|
// (`result.custom`, the `reproTestOutcome` schema) into a short prose digest that lands on
|
|
4
5
|
// `step.output`. Downstream steps read only `step.output` via `priorOutputs` (the coder), so
|
|
5
6
|
// this digest is how the reproduction result reaches them; the raw structured object stays on
|
|
6
7
|
// `step.custom` for the `generic-structured` result view. Returns `undefined` for an
|
|
7
8
|
// unparseable/empty result so the resolver leaves the agent's raw reply on `step.output`.
|
|
8
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Human-readable heading for each reproduction outcome, typed over the closed picklist so the
|
|
11
|
+
* lookup is total and the compiler refuses a new verdict until it has a heading.
|
|
12
|
+
*/
|
|
9
13
|
const OUTCOME_LABEL = {
|
|
10
|
-
reproduced: 'Reproduced
|
|
14
|
+
reproduced: 'Reproduced: a failing test was committed',
|
|
11
15
|
partial: 'Partially reproduced',
|
|
12
|
-
not_reproducible: 'Not reproducible
|
|
16
|
+
not_reproducible: 'Not reproducible: no failing test was committed',
|
|
13
17
|
};
|
|
14
18
|
/** Render a repro-test's structured outcome into a human-readable digest, or undefined. */
|
|
15
19
|
export function renderReproDigest(custom) {
|
|
16
20
|
const parsed = reproTestOutcome.safeParse(custom);
|
|
17
21
|
if (!parsed)
|
|
18
22
|
return undefined;
|
|
19
|
-
|
|
20
|
-
'
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (paths.length) {
|
|
26
|
-
lines.push('', '### Tests', '', ...paths.map((p) => `- \`${p}\``));
|
|
27
|
-
}
|
|
28
|
-
const notes = parsed.notes?.trim();
|
|
29
|
-
if (notes)
|
|
30
|
-
lines.push('', '### Notes', '', notes);
|
|
31
|
-
return lines.join('\n');
|
|
23
|
+
return renderStructuredDigest({
|
|
24
|
+
heading: 'Reproduction test',
|
|
25
|
+
headline: OUTCOME_LABEL[parsed.outcome],
|
|
26
|
+
sections: [{ heading: 'Tests', values: parsed.testPaths, code: true }],
|
|
27
|
+
notes: parsed.notes,
|
|
28
|
+
});
|
|
32
29
|
}
|
|
33
30
|
//# sourceMappingURL=reproTest.logic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reproTest.logic.js","sourceRoot":"","sources":["../../../src/modules/execution/reproTest.logic.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"reproTest.logic.js","sourceRoot":"","sources":["../../../src/modules/execution/reproTest.logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,4FAA4F;AAC5F,2FAA2F;AAC3F,6FAA6F;AAC7F,8FAA8F;AAC9F,qFAAqF;AACrF,0FAA0F;AAE1F;;;GAGG;AACH,MAAM,aAAa,GAAgD;IACjE,UAAU,EAAE,0CAA0C;IACtD,OAAO,EAAE,sBAAsB;IAC/B,gBAAgB,EAAE,iDAAiD;CACpE,CAAA;AAED,2FAA2F;AAC3F,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACjD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC7B,OAAO,sBAAsB,CAAC;QAC5B,OAAO,EAAE,mBAAmB;QAC5B,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;QACvC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACtE,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** One bulleted section of a digest: a trusted heading over untrusted values. */
|
|
2
|
+
export interface DigestSection {
|
|
3
|
+
/** Engine-authored, rendered as-is. */
|
|
4
|
+
heading: string;
|
|
5
|
+
/** Model-authored. Blank entries are dropped; an empty section is omitted entirely. */
|
|
6
|
+
values: readonly string[];
|
|
7
|
+
/**
|
|
8
|
+
* Render each value as a code span. For a path, a command or an identifier, where a reader
|
|
9
|
+
* needs the exact characters and markdown would otherwise eat the underscores in one.
|
|
10
|
+
*/
|
|
11
|
+
code?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** What {@link renderStructuredDigest} composes. */
|
|
14
|
+
export interface StructuredDigest {
|
|
15
|
+
/** Engine-authored `## ` heading for the whole digest. */
|
|
16
|
+
heading: string;
|
|
17
|
+
/** Engine-authored one-line verdict, straight under the heading. */
|
|
18
|
+
headline: string;
|
|
19
|
+
/**
|
|
20
|
+
* Engine-authored lines under the headline: what the PLATFORM found about the report, as
|
|
21
|
+
* opposed to what the report claims. Blank/absent entries are dropped, so a caller can compute
|
|
22
|
+
* one conditionally without branching at the call site.
|
|
23
|
+
*/
|
|
24
|
+
caveats?: readonly (string | undefined)[];
|
|
25
|
+
sections?: readonly DigestSection[];
|
|
26
|
+
/** Model-authored closing prose. */
|
|
27
|
+
notes?: string | null | undefined;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Render a structured step outcome as the markdown digest for `step.output`.
|
|
31
|
+
*
|
|
32
|
+
* Sections with nothing in them are omitted rather than rendered empty: an empty "Not covered"
|
|
33
|
+
* heading reads as a gap nobody described, where its absence reads as no gap stated, and only the
|
|
34
|
+
* second one is true.
|
|
35
|
+
*/
|
|
36
|
+
export declare function renderStructuredDigest(digest: StructuredDigest): string;
|
|
37
|
+
//# sourceMappingURL=structuredDigest.logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structuredDigest.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/structuredDigest.logic.ts"],"names":[],"mappings":"AAqBA,iFAAiF;AACjF,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,uFAAuF;IACvF,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAA;IACzC,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,CAAA;IACnC,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAClC;AAQD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAevE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { hostMarkdown, redactSecrets } from '@cat-factory/kernel';
|
|
2
|
+
/** Scrub, then neutralise: the order matters, see the module header. */
|
|
3
|
+
function safeInline(value, code) {
|
|
4
|
+
const scrubbed = redactSecrets(value) ?? '';
|
|
5
|
+
return code ? hostMarkdown.inlineCode(scrubbed) : hostMarkdown.inline(scrubbed);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Render a structured step outcome as the markdown digest for `step.output`.
|
|
9
|
+
*
|
|
10
|
+
* Sections with nothing in them are omitted rather than rendered empty: an empty "Not covered"
|
|
11
|
+
* heading reads as a gap nobody described, where its absence reads as no gap stated, and only the
|
|
12
|
+
* second one is true.
|
|
13
|
+
*/
|
|
14
|
+
export function renderStructuredDigest(digest) {
|
|
15
|
+
const lines = [`## ${digest.heading}`, '', digest.headline];
|
|
16
|
+
for (const caveat of digest.caveats ?? []) {
|
|
17
|
+
if (caveat?.trim())
|
|
18
|
+
lines.push('', caveat.trim());
|
|
19
|
+
}
|
|
20
|
+
for (const section of digest.sections ?? []) {
|
|
21
|
+
const kept = section.values
|
|
22
|
+
.map((value) => value.trim())
|
|
23
|
+
.filter((value) => value.length > 0)
|
|
24
|
+
.map((value) => `- ${safeInline(value, section.code === true)}`);
|
|
25
|
+
if (kept.length)
|
|
26
|
+
lines.push('', `### ${section.heading}`, '', ...kept);
|
|
27
|
+
}
|
|
28
|
+
const notes = digest.notes?.trim();
|
|
29
|
+
if (notes)
|
|
30
|
+
lines.push('', '### Notes', '', hostMarkdown.prose(redactSecrets(notes) ?? ''));
|
|
31
|
+
return lines.join('\n');
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=structuredDigest.logic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structuredDigest.logic.js","sourceRoot":"","sources":["../../../src/modules/execution/structuredDigest.logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAmDjE,wEAAwE;AACxE,SAAS,UAAU,CAAC,KAAa,EAAE,IAAa;IAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IAC3C,OAAO,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AACjF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAwB;IAC7D,MAAM,KAAK,GAAa,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;IACrE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAC1C,IAAI,MAAM,EAAE,IAAI,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACnD,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM;aACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;aACnC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAAA;QAClE,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IACxE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;IAClC,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC1F,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/orchestration",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.307.0",
|
|
4
4
|
"description": "Delivery-workflow engine for the Agent Architecture Board (execution, bootstrap, pipelines, board, boardScan, requirements, and composition root).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,19 +24,19 @@
|
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@cat-factory/agents": "0.
|
|
28
|
-
"@cat-factory/caching": "0.20.
|
|
29
|
-
"@cat-factory/contracts": "0.
|
|
30
|
-
"@cat-factory/integrations": "0.172.
|
|
31
|
-
"@cat-factory/kernel": "0.
|
|
32
|
-
"@cat-factory/prompt-fragments": "1.1.
|
|
33
|
-
"@cat-factory/sandbox": "0.12.
|
|
34
|
-
"@cat-factory/spend": "0.21.
|
|
35
|
-
"@cat-factory/workspaces": "0.29.
|
|
27
|
+
"@cat-factory/agents": "0.161.0",
|
|
28
|
+
"@cat-factory/caching": "0.20.78",
|
|
29
|
+
"@cat-factory/contracts": "0.351.0",
|
|
30
|
+
"@cat-factory/integrations": "0.172.13",
|
|
31
|
+
"@cat-factory/kernel": "0.343.0",
|
|
32
|
+
"@cat-factory/prompt-fragments": "1.1.40",
|
|
33
|
+
"@cat-factory/sandbox": "0.12.52",
|
|
34
|
+
"@cat-factory/spend": "0.21.2",
|
|
35
|
+
"@cat-factory/workspaces": "0.29.1",
|
|
36
36
|
"ai": "^7.0.93"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@cat-factory/sandbox-fixtures": "0.8.
|
|
39
|
+
"@cat-factory/sandbox-fixtures": "0.8.34",
|
|
40
40
|
"typescript": "7.0.2",
|
|
41
41
|
"vitest": "^4.1.11"
|
|
42
42
|
},
|