@cat-factory/orchestration 0.253.0 → 0.255.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/AgentContextBuilder.d.ts.map +1 -1
- package/dist/modules/execution/AgentContextBuilder.js +6 -9
- package/dist/modules/execution/AgentContextBuilder.js.map +1 -1
- package/dist/modules/execution/AgentDispatchController.d.ts +9 -0
- package/dist/modules/execution/AgentDispatchController.d.ts.map +1 -1
- package/dist/modules/execution/AgentDispatchController.js +25 -1
- package/dist/modules/execution/AgentDispatchController.js.map +1 -1
- package/dist/modules/execution/CompanionController.d.ts +2 -0
- package/dist/modules/execution/CompanionController.d.ts.map +1 -1
- package/dist/modules/execution/CompanionController.js +13 -0
- package/dist/modules/execution/CompanionController.js.map +1 -1
- package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
- package/dist/modules/execution/ExecutionService.js +1 -0
- package/dist/modules/execution/ExecutionService.js.map +1 -1
- package/dist/modules/execution/RunAdmission.js +5 -0
- package/dist/modules/execution/RunAdmission.js.map +1 -1
- package/dist/modules/execution/RunDispatcher.d.ts +3 -1
- package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
- package/dist/modules/execution/RunDispatcher.js +4 -0
- package/dist/modules/execution/RunDispatcher.js.map +1 -1
- package/dist/modules/execution/run-design-images.d.ts +15 -0
- package/dist/modules/execution/run-design-images.d.ts.map +1 -0
- package/dist/modules/execution/run-design-images.js +19 -0
- package/dist/modules/execution/run-design-images.js.map +1 -0
- package/dist/modules/execution/run-images.d.ts +30 -0
- package/dist/modules/execution/run-images.d.ts.map +1 -0
- package/dist/modules/execution/run-images.js +80 -0
- package/dist/modules/execution/run-images.js.map +1 -0
- package/dist/modules/execution/run-reference-screenshots.d.ts +11 -25
- package/dist/modules/execution/run-reference-screenshots.d.ts.map +1 -1
- package/dist/modules/execution/run-reference-screenshots.js +21 -33
- package/dist/modules/execution/run-reference-screenshots.js.map +1 -1
- package/dist/modules/execution/step-fold.logic.d.ts +20 -0
- package/dist/modules/execution/step-fold.logic.d.ts.map +1 -1
- package/dist/modules/execution/step-fold.logic.js +34 -1
- package/dist/modules/execution/step-fold.logic.js.map +1 -1
- package/dist/validation/validateBinaryGenerators.d.ts.map +1 -1
- package/dist/validation/validateBinaryGenerators.js +15 -1
- package/dist/validation/validateBinaryGenerators.js.map +1 -1
- package/package.json +11 -11
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { describeError, noopLogger } from '@cat-factory/kernel';
|
|
2
|
+
import { DESIGN_IMAGES_TRAIT, hasTrait } from '@cat-factory/agents';
|
|
3
|
+
import { resolveBlockReferences } from './block-reference-set.js';
|
|
4
|
+
import { MAX_REFERENCE_SCREENSHOTS, assignFileNames, capReferences, nameReferenceFiles, } from './run-reference-screenshots.js';
|
|
5
|
+
import { MAX_DESIGN_IMAGES } from './run-design-images.js';
|
|
6
|
+
/**
|
|
7
|
+
* Resolve this dispatch's images, as a SPREAD-READY partial so the hot context builder gains no
|
|
8
|
+
* branch of its own.
|
|
9
|
+
*
|
|
10
|
+
* Each half is gated on what the KIND declares, and a kind declaring neither costs nothing: the
|
|
11
|
+
* store and document reads happen only once at least one consumer wants them.
|
|
12
|
+
*
|
|
13
|
+
* - The capture set is gated on the kind's declared `ui` image, the same fact the executor routes
|
|
14
|
+
* the job by, so a deployment's own browser-driven kind is served by the same rule.
|
|
15
|
+
* - The design set is gated on the `design-images` trait, for the same reason.
|
|
16
|
+
*
|
|
17
|
+
* The two halves answer an EMPTY set differently, deliberately. A capture that asked and found
|
|
18
|
+
* nothing still tells a tester so ("you were asked, and there is nothing to compare against"); a
|
|
19
|
+
* building kind with no pictures is just a task that links no design, which is the ordinary state
|
|
20
|
+
* of most tasks and nothing a prompt should spend a line on.
|
|
21
|
+
*/
|
|
22
|
+
export async function resolveRunImages(deps, agentKind, workspaceId, blockId) {
|
|
23
|
+
const captures = deps.agentKindRegistry.agentStep(agentKind)?.image === 'ui';
|
|
24
|
+
const builds = hasTrait(agentKind, DESIGN_IMAGES_TRAIT, deps.agentKindRegistry);
|
|
25
|
+
const resolveStore = deps.resolveBinaryArtifactStore;
|
|
26
|
+
if (!resolveStore || (!captures && !builds))
|
|
27
|
+
return {};
|
|
28
|
+
try {
|
|
29
|
+
const store = await resolveStore(workspaceId);
|
|
30
|
+
if (!store)
|
|
31
|
+
return {};
|
|
32
|
+
const { references } = await resolveBlockReferences(deps.documents, store, workspaceId, blockId);
|
|
33
|
+
return {
|
|
34
|
+
...(captures ? captureSet(references) : {}),
|
|
35
|
+
...(builds ? designSet(references) : {}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
// An image read must never wedge a run. Resolving the store reads the ACCOUNT's
|
|
40
|
+
// content-storage settings, and that repository decrypts inside itself, so it is one a
|
|
41
|
+
// mothership node deliberately cannot reach: left to propagate, this fails EVERY dispatch of
|
|
42
|
+
// every building kind there, and every capturing one everywhere the store is briefly down.
|
|
43
|
+
// Degrading to "no images" is exactly the unconfigured-storage behaviour, so the run proceeds
|
|
44
|
+
// as it did before the feature existed rather than stopping.
|
|
45
|
+
//
|
|
46
|
+
// Degrade LOUDLY to the operator, and DELIBERATELY silently to the agent. The two are not the
|
|
47
|
+
// same audience: an operator can act on "this deployment cannot read its artifact store", and
|
|
48
|
+
// an agent cannot act on anything here, because a read that failed cannot say whether the task
|
|
49
|
+
// had a picture at all. Claiming a withheld design we never confirmed exists would be the
|
|
50
|
+
// worse error, so the prompt stays as it is for a task that links none.
|
|
51
|
+
;
|
|
52
|
+
(deps.logger ?? noopLogger).warn('Run image read failed; dispatching with no images', {
|
|
53
|
+
workspaceId,
|
|
54
|
+
blockId,
|
|
55
|
+
agentKind,
|
|
56
|
+
...describeError(error),
|
|
57
|
+
});
|
|
58
|
+
return {};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** The capture half: named files plus the views the cap dropped, empty set included. */
|
|
62
|
+
function captureSet(references) {
|
|
63
|
+
const { kept, omitted } = capReferences(references, MAX_REFERENCE_SCREENSHOTS);
|
|
64
|
+
return { referenceScreenshots: { files: nameReferenceFiles(kept), omitted } };
|
|
65
|
+
}
|
|
66
|
+
/** The design half: nothing at all when the task holds no picture (see {@link resolveRunImages}). */
|
|
67
|
+
function designSet(references) {
|
|
68
|
+
if (!references.length)
|
|
69
|
+
return {};
|
|
70
|
+
const { kept, omitted } = capReferences(references, MAX_DESIGN_IMAGES);
|
|
71
|
+
const names = assignFileNames(kept);
|
|
72
|
+
const files = kept.map((reference, index) => ({
|
|
73
|
+
view: reference.view,
|
|
74
|
+
artifactId: reference.artifactId,
|
|
75
|
+
contentType: reference.contentType,
|
|
76
|
+
fileName: names[index],
|
|
77
|
+
}));
|
|
78
|
+
return { designImages: { files, omitted } };
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=run-images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-images.js","sourceRoot":"","sources":["../../../src/modules/execution/run-images.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { AgentKindRegistry } from '@cat-factory/agents';
|
|
1
|
+
import type { ReferenceScreenshot } from '@cat-factory/kernel';
|
|
3
2
|
import type { BlockReference } from './block-reference-set.js';
|
|
4
3
|
/**
|
|
5
4
|
* Name each reference's file, keeping the names UNIQUE within the run.
|
|
@@ -10,6 +9,8 @@ import type { BlockReference } from './block-reference-set.js';
|
|
|
10
9
|
* deterministic, and the prompt states which view each file is, so the suffix never has to be
|
|
11
10
|
* interpreted.
|
|
12
11
|
*/
|
|
12
|
+
export declare function assignFileNames(references: readonly BlockReference[]): string[];
|
|
13
|
+
/** {@link assignFileNames}, projected onto the capture manifest's own shape. */
|
|
13
14
|
export declare function nameReferenceFiles(references: readonly BlockReference[]): ReferenceScreenshot[];
|
|
14
15
|
/**
|
|
15
16
|
* How many references one dispatch is handed.
|
|
@@ -24,7 +25,13 @@ export declare function nameReferenceFiles(references: readonly BlockReference[]
|
|
|
24
25
|
*/
|
|
25
26
|
export declare const MAX_REFERENCE_SCREENSHOTS = 24;
|
|
26
27
|
/**
|
|
27
|
-
* Apply
|
|
28
|
+
* Apply a `limit` to a reference set, choosing what to DROP rather than truncating.
|
|
29
|
+
*
|
|
30
|
+
* The limit is the CALLER's, because the two consumers of a task's references bound themselves for
|
|
31
|
+
* different reasons and by different amounts: a capture spends transfer time per image
|
|
32
|
+
* ({@link MAX_REFERENCE_SCREENSHOTS}), while an attachment spends input tokens on every turn
|
|
33
|
+
* ({@link MAX_DESIGN_IMAGES}), which is far tighter. One shared number would have to be the
|
|
34
|
+
* smaller, silently starving the capture set.
|
|
28
35
|
*
|
|
29
36
|
* A plain prefix would fall on the uploads, because {@link mergeBlockReferences} emits the design
|
|
30
37
|
* frames first and appends the views only the uploads introduce. That is exactly backwards: the
|
|
@@ -35,29 +42,8 @@ export declare const MAX_REFERENCE_SCREENSHOTS = 24;
|
|
|
35
42
|
* Emission order is the original one either way, so a caller rendering the set still shows each
|
|
36
43
|
* design's frames contiguously and the file names stay in gallery order.
|
|
37
44
|
*/
|
|
38
|
-
export declare function capReferences(references: readonly BlockReference[]): {
|
|
45
|
+
export declare function capReferences(references: readonly BlockReference[], limit: number): {
|
|
39
46
|
kept: BlockReference[];
|
|
40
47
|
omitted: string[];
|
|
41
48
|
};
|
|
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
49
|
//# sourceMappingURL=run-reference-screenshots.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-reference-screenshots.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/run-reference-screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"run-reference-screenshots.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/run-reference-screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAoC9D;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,EAAE,CAU/E;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG,mBAAmB,EAAE,CAO/F;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAA;AAE3C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,SAAS,cAAc,EAAE,EACrC,KAAK,EAAE,MAAM,GACZ;IACD,IAAI,EAAE,cAAc,EAAE,CAAA;IACtB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAeA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { resolveBlockReferences } from './block-reference-set.js';
|
|
2
1
|
// ---------------------------------------------------------------------------
|
|
3
2
|
// The container half of a task's reference designs: turning the reference SET (which artifact is
|
|
4
3
|
// the reference for each view) into the FILES a capturing agent reads off disk under
|
|
@@ -39,7 +38,7 @@ function slugify(view) {
|
|
|
39
38
|
* deterministic, and the prompt states which view each file is, so the suffix never has to be
|
|
40
39
|
* interpreted.
|
|
41
40
|
*/
|
|
42
|
-
export function
|
|
41
|
+
export function assignFileNames(references) {
|
|
43
42
|
const used = new Set();
|
|
44
43
|
return references.map((reference) => {
|
|
45
44
|
const extension = EXTENSIONS[reference.contentType] ?? 'png';
|
|
@@ -48,9 +47,18 @@ export function nameReferenceFiles(references) {
|
|
|
48
47
|
for (let n = 2; used.has(candidate); n += 1)
|
|
49
48
|
candidate = `${base}-${n}.${extension}`;
|
|
50
49
|
used.add(candidate);
|
|
51
|
-
return
|
|
50
|
+
return candidate;
|
|
52
51
|
});
|
|
53
52
|
}
|
|
53
|
+
/** {@link assignFileNames}, projected onto the capture manifest's own shape. */
|
|
54
|
+
export function nameReferenceFiles(references) {
|
|
55
|
+
const names = assignFileNames(references);
|
|
56
|
+
return references.map((reference, index) => ({
|
|
57
|
+
view: reference.view,
|
|
58
|
+
artifactId: reference.artifactId,
|
|
59
|
+
fileName: names[index],
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
54
62
|
/**
|
|
55
63
|
* How many references one dispatch is handed.
|
|
56
64
|
*
|
|
@@ -64,7 +72,13 @@ export function nameReferenceFiles(references) {
|
|
|
64
72
|
*/
|
|
65
73
|
export const MAX_REFERENCE_SCREENSHOTS = 24;
|
|
66
74
|
/**
|
|
67
|
-
* Apply
|
|
75
|
+
* Apply a `limit` to a reference set, choosing what to DROP rather than truncating.
|
|
76
|
+
*
|
|
77
|
+
* The limit is the CALLER's, because the two consumers of a task's references bound themselves for
|
|
78
|
+
* different reasons and by different amounts: a capture spends transfer time per image
|
|
79
|
+
* ({@link MAX_REFERENCE_SCREENSHOTS}), while an attachment spends input tokens on every turn
|
|
80
|
+
* ({@link MAX_DESIGN_IMAGES}), which is far tighter. One shared number would have to be the
|
|
81
|
+
* smaller, silently starving the capture set.
|
|
68
82
|
*
|
|
69
83
|
* A plain prefix would fall on the uploads, because {@link mergeBlockReferences} emits the design
|
|
70
84
|
* frames first and appends the views only the uploads introduce. That is exactly backwards: the
|
|
@@ -75,14 +89,14 @@ export const MAX_REFERENCE_SCREENSHOTS = 24;
|
|
|
75
89
|
* Emission order is the original one either way, so a caller rendering the set still shows each
|
|
76
90
|
* design's frames contiguously and the file names stay in gallery order.
|
|
77
91
|
*/
|
|
78
|
-
export function capReferences(references) {
|
|
79
|
-
if (references.length <=
|
|
92
|
+
export function capReferences(references, limit) {
|
|
93
|
+
if (references.length <= limit) {
|
|
80
94
|
return { kept: [...references], omitted: [] };
|
|
81
95
|
}
|
|
82
96
|
const keep = new Set();
|
|
83
97
|
for (const pass of ['upload', 'design']) {
|
|
84
98
|
for (const reference of references) {
|
|
85
|
-
if (keep.size >=
|
|
99
|
+
if (keep.size >= limit)
|
|
86
100
|
break;
|
|
87
101
|
if (reference.origin === pass)
|
|
88
102
|
keep.add(reference);
|
|
@@ -93,30 +107,4 @@ export function capReferences(references) {
|
|
|
93
107
|
omitted: references.filter((reference) => !keep.has(reference)).map((r) => r.view),
|
|
94
108
|
};
|
|
95
109
|
}
|
|
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
110
|
//# sourceMappingURL=run-reference-screenshots.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-reference-screenshots.js","sourceRoot":"","sources":["../../../src/modules/execution/run-reference-screenshots.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-reference-screenshots.js","sourceRoot":"","sources":["../../../src/modules/execution/run-reference-screenshots.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type AgentJobHandle, type PipelineStep } from '@cat-factory/kernel';
|
|
2
|
+
import type { DispatchToolServers } from '@cat-factory/contracts';
|
|
2
3
|
/**
|
|
3
4
|
* Rebuild the job handle a settled/running POLL addresses, from the step alone.
|
|
4
5
|
*
|
|
@@ -41,6 +42,25 @@ export declare function pollHandleFor(step: PipelineStep, workspaceId: string, e
|
|
|
41
42
|
* function exists at all.
|
|
42
43
|
*/
|
|
43
44
|
export declare function recordDispatchAttribution(step: PipelineStep, handle: AgentJobHandle, dispatchedKind: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* Record what an INLINE dispatch will do with the running kind's tool servers (MCP).
|
|
47
|
+
*
|
|
48
|
+
* The counterpart of the `handle.toolServers` fold above on the path that returns a RESULT instead
|
|
49
|
+
* of a job handle. Its one producer today is a consensus-diverted step: the panel runs as inline
|
|
50
|
+
* model calls with no agent CLI, so every server the kind declared is withheld, and without this
|
|
51
|
+
* the step would carry no record at all and read exactly like a kind that declared none.
|
|
52
|
+
*
|
|
53
|
+
* Called BEFORE the inline call, off `AgentExecutor.previewToolServers`, so the two paths record on
|
|
54
|
+
* the same terms: the container path stamps off the handle at dispatch, and a job that later fails
|
|
55
|
+
* keeps its record. Folding an inline resolution off the RESULT instead would drop it on exactly
|
|
56
|
+
* the runs a reader most needs it for, since a failed step returns no result to carry it.
|
|
57
|
+
*
|
|
58
|
+
* `dispatchedKind` is a parameter here for the same reason it is there, and it is what keeps the
|
|
59
|
+
* stamp out of the executor's hands: the engine names the kind it dispatched, so a resolution can
|
|
60
|
+
* never be labelled with another one. Guarded on presence, so an inline executor with nothing to
|
|
61
|
+
* report never erases a record an earlier container round on this step wrote.
|
|
62
|
+
*/
|
|
63
|
+
export declare function recordInlineToolServers(step: PipelineStep, resolved: DispatchToolServers | undefined, dispatchedKind: string): void;
|
|
44
64
|
/**
|
|
45
65
|
* Record an ACCEPTED container dispatch on the step: the job handle to poll, the attribution
|
|
46
66
|
* only the dispatch site can resolve ({@link recordDispatchAttribution}), and the container
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-fold.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/step-fold.logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"step-fold.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/execution/step-fold.logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAC1F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAYjE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,cAAc,CAUhB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,GACrB,IAAI,CAwBN;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,mBAAmB,GAAG,SAAS,EACzC,cAAc,EAAE,MAAM,GACrB,IAAI,CAEN;AAkBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,GACrB,MAAM,CAKR;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACpE,OAAO,CAkBT;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,GAC/B,OAAO,CAKT;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAI3F"}
|
|
@@ -79,7 +79,7 @@ export function recordDispatchAttribution(step, handle, dispatchedKind) {
|
|
|
79
79
|
// re-dispatch by an executor that wires no tool servers (the inline path picking up a step a
|
|
80
80
|
// container path started) never erases the container round's record.
|
|
81
81
|
if (handle.toolServers)
|
|
82
|
-
step
|
|
82
|
+
stampToolServers(step, handle.toolServers, dispatchedKind);
|
|
83
83
|
// Order-preserving by FIRST dispatch, counting every one after it: the count is what makes a
|
|
84
84
|
// gate's fourth fixer round visible, so a re-dispatch increments rather than deduplicating.
|
|
85
85
|
const dispatches = step.dispatches ?? [];
|
|
@@ -88,6 +88,39 @@ export function recordDispatchAttribution(step, handle, dispatchedKind) {
|
|
|
88
88
|
? dispatches.map((d) => (d === existing ? { ...d, count: d.count + 1 } : d))
|
|
89
89
|
: [...dispatches, { agentKind: dispatchedKind, count: 1 }];
|
|
90
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Record what an INLINE dispatch will do with the running kind's tool servers (MCP).
|
|
93
|
+
*
|
|
94
|
+
* The counterpart of the `handle.toolServers` fold above on the path that returns a RESULT instead
|
|
95
|
+
* of a job handle. Its one producer today is a consensus-diverted step: the panel runs as inline
|
|
96
|
+
* model calls with no agent CLI, so every server the kind declared is withheld, and without this
|
|
97
|
+
* the step would carry no record at all and read exactly like a kind that declared none.
|
|
98
|
+
*
|
|
99
|
+
* Called BEFORE the inline call, off `AgentExecutor.previewToolServers`, so the two paths record on
|
|
100
|
+
* the same terms: the container path stamps off the handle at dispatch, and a job that later fails
|
|
101
|
+
* keeps its record. Folding an inline resolution off the RESULT instead would drop it on exactly
|
|
102
|
+
* the runs a reader most needs it for, since a failed step returns no result to carry it.
|
|
103
|
+
*
|
|
104
|
+
* `dispatchedKind` is a parameter here for the same reason it is there, and it is what keeps the
|
|
105
|
+
* stamp out of the executor's hands: the engine names the kind it dispatched, so a resolution can
|
|
106
|
+
* never be labelled with another one. Guarded on presence, so an inline executor with nothing to
|
|
107
|
+
* report never erases a record an earlier container round on this step wrote.
|
|
108
|
+
*/
|
|
109
|
+
export function recordInlineToolServers(step, resolved, dispatchedKind) {
|
|
110
|
+
if (resolved)
|
|
111
|
+
stampToolServers(step, resolved, dispatchedKind);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Put one dispatch's tool-server resolution on the step under the kind that ran.
|
|
115
|
+
*
|
|
116
|
+
* Shared by the container and inline folds rather than spelled out at each, because the STAMP is
|
|
117
|
+
* the invariant: the executor reports two lists and the engine alone says whose they are (see
|
|
118
|
+
* `DispatchToolServers`). Two spellings of it is two places for an executor-supplied kind to creep
|
|
119
|
+
* back in.
|
|
120
|
+
*/
|
|
121
|
+
function stampToolServers(step, resolved, dispatchedKind) {
|
|
122
|
+
step.toolServers = { ...resolved, agentKind: dispatchedKind };
|
|
123
|
+
}
|
|
91
124
|
/**
|
|
92
125
|
* Record an ACCEPTED container dispatch on the step: the job handle to poll, the attribution
|
|
93
126
|
* only the dispatch site can resolve ({@link recordDispatchAttribution}), and the container
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-fold.logic.js","sourceRoot":"","sources":["../../../src/modules/execution/step-fold.logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0C,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"step-fold.logic.js","sourceRoot":"","sources":["../../../src/modules/execution/step-fold.logic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateBinaryGenerators.d.ts","sourceRoot":"","sources":["../../src/validation/validateBinaryGenerators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"validateBinaryGenerators.d.ts","sourceRoot":"","sources":["../../src/validation/validateBinaryGenerators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAgBlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAErE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,GAC5C,mBAAmB,EAAE,CAqBvB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describeFoundationalProblem, isAllowedMcpHttpUrl, validateFoundationalDefinition, } from '@cat-factory/kernel';
|
|
2
|
-
import { binaryCredentialInjectionName, binaryGeneratorDefinitionIssues, comparableCredentialInjectionName, modalitiesOfMediaType, } from '@cat-factory/contracts';
|
|
2
|
+
import { binaryAcceptsWithoutCapability, binaryCredentialInjectionName, binaryGeneratorDefinitionIssues, comparableCredentialInjectionName, modalitiesOfMediaType, } from '@cat-factory/contracts';
|
|
3
3
|
/**
|
|
4
4
|
* Section 9 of `collectRegistrationProblems`: every generative binary integration a deployment
|
|
5
5
|
* registers must be a definition the platform can actually dispatch against.
|
|
@@ -133,6 +133,20 @@ function checkBinaryGeneratorDetails(definition) {
|
|
|
133
133
|
`refused, and one selecting it for the listed modalities would be told it can emit this.`);
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
+
// The same fault one axis finer: a declaration whose two halves contradict each other, where
|
|
137
|
+
// every reader believes a different half. An `accepts` set states which values the endpoint
|
|
138
|
+
// takes for an option its `capabilities` say it cannot be asked for at all, so the brief
|
|
139
|
+
// renders the set as fact while admission refuses every step that asks, and the value rule
|
|
140
|
+
// (judged over the capability's declarers) never sees the set at all. The accurate half is
|
|
141
|
+
// unreachable, which makes this an error rather than a warning: the remedy is one capability
|
|
142
|
+
// on one definition, and the deployment has already written down that the endpoint has it.
|
|
143
|
+
for (const { option, capability } of binaryAcceptsWithoutCapability(definition)) {
|
|
144
|
+
invalid('binary_generator_accepts_without_capability', `Generative binary integration "${definition.id}" states the values it accepts for ` +
|
|
145
|
+
`\`${option}\` but does not declare the "${capability}" capability that option needs. ` +
|
|
146
|
+
`A step asking for it is refused as unsupported, so the accepted set is never consulted ` +
|
|
147
|
+
`while the agent's brief states it. Declare "${capability}", or drop the set if the ` +
|
|
148
|
+
`endpoint genuinely takes no such parameter.`);
|
|
149
|
+
}
|
|
136
150
|
return problems;
|
|
137
151
|
}
|
|
138
152
|
//# sourceMappingURL=validateBinaryGenerators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateBinaryGenerators.js","sourceRoot":"","sources":["../../src/validation/validateBinaryGenerators.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAEL,6BAA6B,EAC7B,+BAA+B,EAC/B,iCAAiC,EACjC,qBAAqB,GACtB,MAAM,wBAAwB,CAAA;AAK/B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAA6C;IAE7C,MAAM,QAAQ,GAA0B,EAAE,CAAA;IAC1C,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC9B,MAAM,KAAK,GAAgC,EAAE,CAAA;IAC7C,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,+BAA+B,CAAC,UAAU,CAAC,CAAA;QAC1D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE,kCAAkC,UAAU,CAAC,EAAE,gCAAgC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC5G,CAAC,CAAA;YACF,uFAAuF;YACvF,sCAAsC;YACtC,SAAQ;QACV,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAA;IAC3D,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAA;IACrD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,4BAA4B,CACnC,WAAiD;IAEjD,8FAA8F;IAC9F,wFAAwF;IACxF,gGAAgG;IAChG,6CAA6C;IAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8D,CAAA;IACpF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,UAAU,CAAC,CAAC,IAAI;gBACzE,QAAQ,EAAE,6BAA6B,CAAC,UAAU,CAAC;gBACnD,KAAK,EAAE,IAAI,GAAG,EAAoB;aACnC,CAAA;YACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;YAC5F,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAA;QAClE,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAA0B,EAAE,CAAA;IAC1C,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;QACtD,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;YAAE,SAAQ;QAC5B,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC;aACzB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;aACnD,IAAI,EAAE;aACN,IAAI,CAAC,OAAO,CAAC,CAAA;QAChB,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,2CAA2C;YACjD,OAAO,EACL,uEAAuE,OAAO,WAAW;gBACzF,4BAA4B,SAAS,sDAAsD;gBAC3F,2FAA2F;gBAC3F,0FAA0F;gBAC1F,mBAAmB;SACtB,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,iGAAiG;AACjG,SAAS,2BAA2B,CAAC,UAAqC;IACxE,MAAM,QAAQ,GAA0B,EAAE,CAAA;IAC1C,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAe,EAAQ,EAAE;QACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACrD,CAAC,CAAA;IACD,yFAAyF;IACzF,6FAA6F;IAC7F,sFAAsF;IACtF,IAAI,UAAU,CAAC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrE,OAAO,CACL,oCAAoC,EACpC,kCAAkC,UAAU,CAAC,EAAE,mBAAmB,UAAU,CAAC,QAAQ,SAAS;YAC5F,sFAAsF;YACtF,6BAA6B,CAChC,CAAA;IACH,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,8BAA8B,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;QAC1F,OAAO,CACL,0BAA0B,EAC1B,kCAAkC,UAAU,CAAC,EAAE,MAAM,2BAA2B,CAAC,OAAO,CAAC,EAAE,CAC5F,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;IAC/C,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;QACnD,4FAA4F;QAC5F,4FAA4F;QAC5F,sFAAsF;QACtF,EAAE;QACF,6FAA6F;QAC7F,+FAA+F;QAC/F,2FAA2F;QAC3F,6CAA6C;QAC7C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACpF,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAClC,OAAO,CACL,oCAAoC,EACpC,kCAAkC,UAAU,CAAC,EAAE,0BAA0B,SAAS,IAAI;gBACpF,IAAI,KAAK,iDAAiD;gBAC1D,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B,KAAK,YAAY;gBACnF,yFAAyF,CAC5F,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"validateBinaryGenerators.js","sourceRoot":"","sources":["../../src/validation/validateBinaryGenerators.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.255.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.58",
|
|
28
|
-
"@cat-factory/agents": "0.
|
|
29
|
-
"@cat-factory/caching": "0.18.
|
|
30
|
-
"@cat-factory/contracts": "0.
|
|
31
|
-
"@cat-factory/integrations": "0.153.
|
|
32
|
-
"@cat-factory/kernel": "0.
|
|
33
|
-
"@cat-factory/prompt-fragments": "1.0.
|
|
34
|
-
"@cat-factory/sandbox": "0.11.
|
|
35
|
-
"@cat-factory/spend": "0.15.
|
|
36
|
-
"@cat-factory/workspaces": "0.27.
|
|
28
|
+
"@cat-factory/agents": "0.124.0",
|
|
29
|
+
"@cat-factory/caching": "0.18.36",
|
|
30
|
+
"@cat-factory/contracts": "0.290.0",
|
|
31
|
+
"@cat-factory/integrations": "0.153.12",
|
|
32
|
+
"@cat-factory/kernel": "0.284.0",
|
|
33
|
+
"@cat-factory/prompt-fragments": "1.0.45",
|
|
34
|
+
"@cat-factory/sandbox": "0.11.122",
|
|
35
|
+
"@cat-factory/spend": "0.15.63",
|
|
36
|
+
"@cat-factory/workspaces": "0.27.7"
|
|
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.328"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"build": "tsc -b tsconfig.build.json",
|