@cat-factory/orchestration 0.241.0 → 0.243.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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/board/BoardService.d.ts +43 -23
- package/dist/modules/board/BoardService.d.ts.map +1 -1
- package/dist/modules/board/BoardService.js +109 -126
- package/dist/modules/board/BoardService.js.map +1 -1
- package/dist/modules/board/newServiceFrameDefaults.d.ts +18 -1
- package/dist/modules/board/newServiceFrameDefaults.d.ts.map +1 -1
- package/dist/modules/board/newServiceFrameDefaults.js +17 -0
- package/dist/modules/board/newServiceFrameDefaults.js.map +1 -1
- package/dist/modules/board/publicBoardReads.d.ts +56 -2
- package/dist/modules/board/publicBoardReads.d.ts.map +1 -1
- package/dist/modules/board/publicBoardReads.js +53 -0
- package/dist/modules/board/publicBoardReads.js.map +1 -1
- package/dist/modules/board/serviceRepoLinkage.d.ts +51 -0
- package/dist/modules/board/serviceRepoLinkage.d.ts.map +1 -0
- package/dist/modules/board/serviceRepoLinkage.js +54 -0
- package/dist/modules/board/serviceRepoLinkage.js.map +1 -0
- package/dist/modules/board/sharedServiceMount.d.ts +30 -0
- package/dist/modules/board/sharedServiceMount.d.ts.map +1 -0
- package/dist/modules/board/sharedServiceMount.js +91 -0
- package/dist/modules/board/sharedServiceMount.js.map +1 -0
- package/dist/modules/execution/AgentContextBuilder.d.ts +8 -9
- package/dist/modules/execution/AgentContextBuilder.d.ts.map +1 -1
- package/dist/modules/execution/AgentContextBuilder.js +12 -57
- package/dist/modules/execution/AgentContextBuilder.js.map +1 -1
- package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
- package/dist/modules/execution/RunDispatcher.js +9 -4
- package/dist/modules/execution/RunDispatcher.js.map +1 -1
- package/dist/modules/execution/VisualConfirmationController.d.ts.map +1 -1
- package/dist/modules/execution/VisualConfirmationController.js +18 -44
- package/dist/modules/execution/VisualConfirmationController.js.map +1 -1
- package/dist/modules/execution/block-reference-set.d.ts +53 -0
- package/dist/modules/execution/block-reference-set.d.ts.map +1 -0
- package/dist/modules/execution/block-reference-set.js +68 -0
- package/dist/modules/execution/block-reference-set.js.map +1 -0
- package/dist/modules/execution/builder-block-payload.d.ts +33 -0
- package/dist/modules/execution/builder-block-payload.d.ts.map +1 -0
- package/dist/modules/execution/builder-block-payload.js +57 -0
- package/dist/modules/execution/builder-block-payload.js.map +1 -0
- package/dist/modules/execution/run-context-admission.d.ts.map +1 -1
- package/dist/modules/execution/run-context-admission.js +1 -0
- package/dist/modules/execution/run-context-admission.js.map +1 -1
- package/dist/modules/execution/run-reference-screenshots.d.ts +63 -0
- package/dist/modules/execution/run-reference-screenshots.d.ts.map +1 -0
- package/dist/modules/execution/run-reference-screenshots.js +122 -0
- package/dist/modules/execution/run-reference-screenshots.js.map +1 -0
- package/dist/modules/execution/visual-confirm-design-references.d.ts +7 -0
- package/dist/modules/execution/visual-confirm-design-references.d.ts.map +1 -1
- package/dist/modules/execution/visual-confirm-design-references.js +6 -3
- package/dist/modules/execution/visual-confirm-design-references.js.map +1 -1
- package/package.json +11 -11
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { AgentRunContext, DocumentRepository, ReferenceScreenshot, ResolveBinaryArtifactStore } from '@cat-factory/kernel';
|
|
2
|
+
import type { AgentKindRegistry } from '@cat-factory/agents';
|
|
3
|
+
import type { BlockReference } from './block-reference-set.js';
|
|
4
|
+
/**
|
|
5
|
+
* Name each reference's file, keeping the names UNIQUE within the run.
|
|
6
|
+
*
|
|
7
|
+
* Two different views can slug to one name (`Checkout / step 1` and `Checkout — step 1`), and
|
|
8
|
+
* dropping one of them would hand the agent a directory quietly missing a screen it is being
|
|
9
|
+
* asked to compare. So a collision is suffixed with its ordinal instead, in reference order:
|
|
10
|
+
* deterministic, and the prompt states which view each file is, so the suffix never has to be
|
|
11
|
+
* interpreted.
|
|
12
|
+
*/
|
|
13
|
+
export declare function nameReferenceFiles(references: readonly BlockReference[]): ReferenceScreenshot[];
|
|
14
|
+
/**
|
|
15
|
+
* How many references one dispatch is handed.
|
|
16
|
+
*
|
|
17
|
+
* A task's set is UNBOUNDED from here: a person may attach a hundred images to one block, and a
|
|
18
|
+
* design's retained frames sit beside them. The container downloads every one before the agent's
|
|
19
|
+
* first turn, in a pass deliberately budgeted well under the inactivity watchdog, so an unbounded
|
|
20
|
+
* set does not degrade gracefully — it spends the whole budget and delivers a random prefix of
|
|
21
|
+
* whatever finished. A ceiling here makes the set a decision the engine states rather than an
|
|
22
|
+
* accident of transfer speed. The harness keeps its own (higher) backstop against a malformed
|
|
23
|
+
* body; this is the number that should ever actually bind.
|
|
24
|
+
*/
|
|
25
|
+
export declare const MAX_REFERENCE_SCREENSHOTS = 24;
|
|
26
|
+
/**
|
|
27
|
+
* Apply {@link MAX_REFERENCE_SCREENSHOTS}, choosing what to DROP rather than truncating.
|
|
28
|
+
*
|
|
29
|
+
* A plain prefix would fall on the uploads, because {@link mergeBlockReferences} emits the design
|
|
30
|
+
* frames first and appends the views only the uploads introduce. That is exactly backwards: the
|
|
31
|
+
* same precedence rule that lets an upload override a design frame for one view says an upload is
|
|
32
|
+
* the more deliberate artifact, so it is the LAST thing a cap should discard. Uploads are kept
|
|
33
|
+
* first and design frames fill the remainder.
|
|
34
|
+
*
|
|
35
|
+
* Emission order is the original one either way, so a caller rendering the set still shows each
|
|
36
|
+
* design's frames contiguously and the file names stay in gallery order.
|
|
37
|
+
*/
|
|
38
|
+
export declare function capReferences(references: readonly BlockReference[]): {
|
|
39
|
+
kept: BlockReference[];
|
|
40
|
+
omitted: string[];
|
|
41
|
+
};
|
|
42
|
+
/** What {@link resolveReferenceScreenshots} reads through; all of it already on the engine. */
|
|
43
|
+
export interface ReferenceScreenshotDeps {
|
|
44
|
+
documents?: DocumentRepository;
|
|
45
|
+
resolveBinaryArtifactStore?: ResolveBinaryArtifactStore;
|
|
46
|
+
agentKindRegistry: AgentKindRegistry;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolve the reference files for a dispatch that CAPTURES views, as a SPREAD-READY partial (the
|
|
50
|
+
* `validationChecksFor` shape), so the hot context builder gains no branch of its own.
|
|
51
|
+
*
|
|
52
|
+
* The gate is the running kind's declared `ui` image, the same fact the executor routes the job
|
|
53
|
+
* by: only a browser-driven kind captures screenshots, and only a capture has a reference to be
|
|
54
|
+
* compared against. It lives HERE rather than at the call site so a deployment's own capturing
|
|
55
|
+
* kind is served by the same rule, and so every other kind never triggers the two reads.
|
|
56
|
+
*
|
|
57
|
+
* ABSENT and EMPTY are different answers and both are reachable: absent means this dispatch never
|
|
58
|
+
* asked (a kind that captures nothing, a deployment with no artifact storage), an empty `files`
|
|
59
|
+
* means it asked and the task holds no reference at all. A tester with no references names its own
|
|
60
|
+
* views, which is the documented fallback, so neither is a failure.
|
|
61
|
+
*/
|
|
62
|
+
export declare function resolveReferenceScreenshots(deps: ReferenceScreenshotDeps, agentKind: string, workspaceId: string, blockId: string): Promise<Pick<AgentRunContext, 'referenceScreenshots'>>;
|
|
63
|
+
//# sourceMappingURL=run-reference-screenshots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-reference-screenshots.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/run-reference-screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,kBAAkB,EAClB,mBAAmB,EAEnB,0BAA0B,EAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAoC9D;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG,mBAAmB,EAAE,CAU/F;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAA;AAE3C;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG;IACpE,IAAI,EAAE,cAAc,EAAE,CAAA;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAeA;AAED,+FAA+F;AAC/F,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,kBAAkB,CAAA;IAC9B,0BAA0B,CAAC,EAAE,0BAA0B,CAAA;IACvD,iBAAiB,EAAE,iBAAiB,CAAA;CACrC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,uBAAuB,EAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC,CASxD"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { resolveBlockReferences } from './block-reference-set.js';
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// The container half of a task's reference designs: turning the reference SET (which artifact is
|
|
4
|
+
// the reference for each view) into the FILES a capturing agent reads off disk under
|
|
5
|
+
// `.cat-context/reference-screenshots/`.
|
|
6
|
+
//
|
|
7
|
+
// The naming happens in the engine rather than in the container for one reason: the file name is
|
|
8
|
+
// how the agent learns the view name, and the view name is what the gate pairs on. Left to the
|
|
9
|
+
// harness, a sanitiser change in an image the deployment has not rolled out yet would rename the
|
|
10
|
+
// views a run reports, and every pair would come apart with nothing failing.
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
/** The file extension written for each stored image type; anything else falls back to `.png`. */
|
|
13
|
+
const EXTENSIONS = {
|
|
14
|
+
'image/png': 'png',
|
|
15
|
+
'image/jpeg': 'jpg',
|
|
16
|
+
'image/webp': 'webp',
|
|
17
|
+
'image/gif': 'gif',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* A single safe path segment derived from a view name: no separators, no traversal, no leading
|
|
21
|
+
* dot, and short enough for any filesystem. Everything outside a conservative set collapses to
|
|
22
|
+
* `-`, which is lossy ON PURPOSE: the file name is a HANDLE the agent types back, and the view
|
|
23
|
+
* it stands for is stated beside it in the prompt, so legibility beats fidelity here.
|
|
24
|
+
*/
|
|
25
|
+
function slugify(view) {
|
|
26
|
+
const slug = view
|
|
27
|
+
.normalize('NFKD')
|
|
28
|
+
.replace(/[^a-zA-Z0-9]+/g, '-')
|
|
29
|
+
.replace(/^-+|-+$/g, '')
|
|
30
|
+
.slice(0, 60);
|
|
31
|
+
return slug || 'view';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Name each reference's file, keeping the names UNIQUE within the run.
|
|
35
|
+
*
|
|
36
|
+
* Two different views can slug to one name (`Checkout / step 1` and `Checkout — step 1`), and
|
|
37
|
+
* dropping one of them would hand the agent a directory quietly missing a screen it is being
|
|
38
|
+
* asked to compare. So a collision is suffixed with its ordinal instead, in reference order:
|
|
39
|
+
* deterministic, and the prompt states which view each file is, so the suffix never has to be
|
|
40
|
+
* interpreted.
|
|
41
|
+
*/
|
|
42
|
+
export function nameReferenceFiles(references) {
|
|
43
|
+
const used = new Set();
|
|
44
|
+
return references.map((reference) => {
|
|
45
|
+
const extension = EXTENSIONS[reference.contentType] ?? 'png';
|
|
46
|
+
const base = slugify(reference.view);
|
|
47
|
+
let candidate = `${base}.${extension}`;
|
|
48
|
+
for (let n = 2; used.has(candidate); n += 1)
|
|
49
|
+
candidate = `${base}-${n}.${extension}`;
|
|
50
|
+
used.add(candidate);
|
|
51
|
+
return { view: reference.view, artifactId: reference.artifactId, fileName: candidate };
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* How many references one dispatch is handed.
|
|
56
|
+
*
|
|
57
|
+
* A task's set is UNBOUNDED from here: a person may attach a hundred images to one block, and a
|
|
58
|
+
* design's retained frames sit beside them. The container downloads every one before the agent's
|
|
59
|
+
* first turn, in a pass deliberately budgeted well under the inactivity watchdog, so an unbounded
|
|
60
|
+
* set does not degrade gracefully — it spends the whole budget and delivers a random prefix of
|
|
61
|
+
* whatever finished. A ceiling here makes the set a decision the engine states rather than an
|
|
62
|
+
* accident of transfer speed. The harness keeps its own (higher) backstop against a malformed
|
|
63
|
+
* body; this is the number that should ever actually bind.
|
|
64
|
+
*/
|
|
65
|
+
export const MAX_REFERENCE_SCREENSHOTS = 24;
|
|
66
|
+
/**
|
|
67
|
+
* Apply {@link MAX_REFERENCE_SCREENSHOTS}, choosing what to DROP rather than truncating.
|
|
68
|
+
*
|
|
69
|
+
* A plain prefix would fall on the uploads, because {@link mergeBlockReferences} emits the design
|
|
70
|
+
* frames first and appends the views only the uploads introduce. That is exactly backwards: the
|
|
71
|
+
* same precedence rule that lets an upload override a design frame for one view says an upload is
|
|
72
|
+
* the more deliberate artifact, so it is the LAST thing a cap should discard. Uploads are kept
|
|
73
|
+
* first and design frames fill the remainder.
|
|
74
|
+
*
|
|
75
|
+
* Emission order is the original one either way, so a caller rendering the set still shows each
|
|
76
|
+
* design's frames contiguously and the file names stay in gallery order.
|
|
77
|
+
*/
|
|
78
|
+
export function capReferences(references) {
|
|
79
|
+
if (references.length <= MAX_REFERENCE_SCREENSHOTS) {
|
|
80
|
+
return { kept: [...references], omitted: [] };
|
|
81
|
+
}
|
|
82
|
+
const keep = new Set();
|
|
83
|
+
for (const pass of ['upload', 'design']) {
|
|
84
|
+
for (const reference of references) {
|
|
85
|
+
if (keep.size >= MAX_REFERENCE_SCREENSHOTS)
|
|
86
|
+
break;
|
|
87
|
+
if (reference.origin === pass)
|
|
88
|
+
keep.add(reference);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
kept: references.filter((reference) => keep.has(reference)),
|
|
93
|
+
omitted: references.filter((reference) => !keep.has(reference)).map((r) => r.view),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Resolve the reference files for a dispatch that CAPTURES views, as a SPREAD-READY partial (the
|
|
98
|
+
* `validationChecksFor` shape), so the hot context builder gains no branch of its own.
|
|
99
|
+
*
|
|
100
|
+
* The gate is the running kind's declared `ui` image, the same fact the executor routes the job
|
|
101
|
+
* by: only a browser-driven kind captures screenshots, and only a capture has a reference to be
|
|
102
|
+
* compared against. It lives HERE rather than at the call site so a deployment's own capturing
|
|
103
|
+
* kind is served by the same rule, and so every other kind never triggers the two reads.
|
|
104
|
+
*
|
|
105
|
+
* ABSENT and EMPTY are different answers and both are reachable: absent means this dispatch never
|
|
106
|
+
* asked (a kind that captures nothing, a deployment with no artifact storage), an empty `files`
|
|
107
|
+
* means it asked and the task holds no reference at all. A tester with no references names its own
|
|
108
|
+
* views, which is the documented fallback, so neither is a failure.
|
|
109
|
+
*/
|
|
110
|
+
export async function resolveReferenceScreenshots(deps, agentKind, workspaceId, blockId) {
|
|
111
|
+
const resolveStore = deps.resolveBinaryArtifactStore;
|
|
112
|
+
if (!resolveStore || deps.agentKindRegistry.agentStep(agentKind)?.image !== 'ui')
|
|
113
|
+
return {};
|
|
114
|
+
const store = await resolveStore(workspaceId);
|
|
115
|
+
if (!store)
|
|
116
|
+
return {};
|
|
117
|
+
const { references } = await resolveBlockReferences(deps.documents, store, workspaceId, blockId);
|
|
118
|
+
const { kept, omitted } = capReferences(references);
|
|
119
|
+
const set = { files: nameReferenceFiles(kept), omitted };
|
|
120
|
+
return { referenceScreenshots: set };
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=run-reference-screenshots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-reference-screenshots.js","sourceRoot":"","sources":["../../../src/modules/execution/run-reference-screenshots.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,13 @@ export declare const MAX_DESIGN_REFERENCE_VIEWS = 12;
|
|
|
13
13
|
export interface DesignReference {
|
|
14
14
|
view: string;
|
|
15
15
|
artifactId: string;
|
|
16
|
+
/**
|
|
17
|
+
* The stored image's MIME type. Carried because a consumer that WRITES the frame to disk (the
|
|
18
|
+
* container delivery) has to name the file, and a `.png` over a JPEG is a lie an image loader
|
|
19
|
+
* is entitled to act on. The gate itself never reads it: it serves the bytes through the blob
|
|
20
|
+
* endpoint, which reads the type off the same record.
|
|
21
|
+
*/
|
|
22
|
+
contentType: string;
|
|
16
23
|
}
|
|
17
24
|
/** The fold's product: what to show, and what to say about what is missing. */
|
|
18
25
|
export interface DesignReferenceFold {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-confirm-design-references.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/visual-confirm-design-references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EAEnB,cAAc,EACd,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,oBAAoB,EAEpB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,wBAAwB,CAAA;AAc/B;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAE5C,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"visual-confirm-design-references.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/visual-confirm-design-references.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EAEnB,cAAc,EACd,kBAAkB,EACnB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,oBAAoB,EAEpB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,wBAAwB,CAAA;AAc/B;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAE5C,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,+EAA+E;AAC/E,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,OAAO,EAAE,6BAA6B,CAAA;CACvC;AAED,wFAAwF;AACxF,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAA;CAC1C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,oBAAoB,GAAG,IAAI,EACzC,UAAU,EAAE,MAAM,GACjB,4BAA4B,GAAG,IAAI,CAoBrC;AAiED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,qBAAqB,EAAE,EAC3C,SAAS,EAAE,SAAS,oBAAoB,EAAE,EAC1C,GAAG,SAA6B,GAC/B,mBAAmB,CAsErB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,uBAAuB,CAC3C,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,EAClD,KAAK,EAAE,mBAAmB,GAAG,IAAI,EACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAiBrC"}
|
|
@@ -157,7 +157,10 @@ export function foldDesignReferences(documents, artifacts, cap = MAX_DESIGN_REFE
|
|
|
157
157
|
claimants.set(view, new Set([key]));
|
|
158
158
|
}
|
|
159
159
|
const labels = documentLabels(unique);
|
|
160
|
-
const byDocument = new Map(unique.map((document) => [
|
|
160
|
+
const byDocument = new Map(unique.map((document) => [
|
|
161
|
+
documentKey(document),
|
|
162
|
+
new Map(),
|
|
163
|
+
]));
|
|
161
164
|
const heldPerDocument = new Map();
|
|
162
165
|
for (const record of renders) {
|
|
163
166
|
// A render with no view has no pairing key, so it can only ever be shown against nothing.
|
|
@@ -168,11 +171,11 @@ export function foldDesignReferences(documents, artifacts, cap = MAX_DESIGN_REFE
|
|
|
168
171
|
continue;
|
|
169
172
|
const contested = (claimants.get(record.view)?.size ?? 0) > 1;
|
|
170
173
|
const view = contested ? `${record.view} (${labels.get(key) ?? key})` : record.view;
|
|
171
|
-
byDocument.get(key).set(view, record.id);
|
|
174
|
+
byDocument.get(key).set(view, { artifactId: record.id, contentType: record.contentType });
|
|
172
175
|
}
|
|
173
176
|
const offered = unique.map((document) => [...byDocument.get(documentKey(document)).entries()]);
|
|
174
177
|
const taken = allocate(offered.map((views) => views.length), cap);
|
|
175
|
-
const references = offered.flatMap((views, index) => views.slice(0, taken[index]).map(([view,
|
|
178
|
+
const references = offered.flatMap((views, index) => views.slice(0, taken[index]).map(([view, render]) => ({ view, ...render })));
|
|
176
179
|
const gaps = [];
|
|
177
180
|
let dropped = 0;
|
|
178
181
|
unique.forEach((document, index) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-confirm-design-references.js","sourceRoot":"","sources":["../../../src/modules/execution/visual-confirm-design-references.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,8EAA8E;AAC9E,6FAA6F;AAC7F,4FAA4F;AAC5F,2BAA2B;AAC3B,EAAE;AACF,gGAAgG;AAChG,2FAA2F;AAC3F,gGAAgG;AAChG,oFAAoF;AACpF,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"visual-confirm-design-references.js","sourceRoot":"","sources":["../../../src/modules/execution/visual-confirm-design-references.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/orchestration",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.243.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",
|
|
@@ -25,20 +25,20 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"ai": "^7.0.51",
|
|
28
|
-
"@cat-factory/agents": "0.
|
|
29
|
-
"@cat-factory/caching": "0.18.
|
|
30
|
-
"@cat-factory/contracts": "0.
|
|
31
|
-
"@cat-factory/integrations": "0.
|
|
32
|
-
"@cat-factory/kernel": "0.
|
|
33
|
-
"@cat-factory/prompt-fragments": "1.0.
|
|
34
|
-
"@cat-factory/
|
|
35
|
-
"@cat-factory/
|
|
36
|
-
"@cat-factory/workspaces": "0.26.
|
|
28
|
+
"@cat-factory/agents": "0.119.0",
|
|
29
|
+
"@cat-factory/caching": "0.18.16",
|
|
30
|
+
"@cat-factory/contracts": "0.276.0",
|
|
31
|
+
"@cat-factory/integrations": "0.152.1",
|
|
32
|
+
"@cat-factory/kernel": "0.275.0",
|
|
33
|
+
"@cat-factory/prompt-fragments": "1.0.25",
|
|
34
|
+
"@cat-factory/spend": "0.15.43",
|
|
35
|
+
"@cat-factory/sandbox": "0.11.102",
|
|
36
|
+
"@cat-factory/workspaces": "0.26.15"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"typescript": "7.0.2",
|
|
40
40
|
"vitest": "^4.1.10",
|
|
41
|
-
"@cat-factory/sandbox-fixtures": "0.7.
|
|
41
|
+
"@cat-factory/sandbox-fixtures": "0.7.311"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"build": "tsc -b tsconfig.build.json",
|