@exellix/graph-engine 8.6.0 → 9.0.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/CHANGELOG.md +21 -0
- package/README.md +2 -2
- package/dist/src/compile/compileExellixExecutablePlan.d.ts +4 -1
- package/dist/src/compile/compileExellixExecutablePlan.js +18 -0
- package/dist/src/contract/graphRunContract.d.ts +37 -0
- package/dist/src/contract/graphRunContract.js +127 -0
- package/dist/src/contract/persistencyDefaults.d.ts +2 -0
- package/dist/src/contract/persistencyDefaults.js +2 -0
- package/dist/src/index.d.ts +11 -2
- package/dist/src/index.js +8 -1
- package/dist/src/inspection/graphInspection.js +4 -0
- package/dist/src/inspection/types.d.ts +5 -0
- package/dist/src/integrations/activixExellixShared.js +2 -2
- package/dist/src/plan/embeddedGraphToExellixGraph.js +25 -8
- package/dist/src/runtime/ExellixGraphRuntime.d.ts +2 -2
- package/dist/src/runtime/ExellixGraphRuntime.js +52 -19
- package/dist/src/runtime/coerceStringArray.d.ts +5 -0
- package/dist/src/runtime/coerceStringArray.js +34 -0
- package/dist/src/runtime/executionMatrixHost.d.ts +2 -2
- package/dist/src/runtime/executionMatrixHost.js +2 -2
- package/dist/src/runtime/graphEngineLogMeta.js +2 -2
- package/dist/src/runtime/graphEngineLogxer.js +2 -2
- package/dist/src/runtime/graphResponseMapping.d.ts +11 -0
- package/dist/src/runtime/graphResponseMapping.js +61 -8
- package/dist/src/runtime/runtimeObjects.d.ts +5 -5
- package/dist/src/runtime/runtimeObjects.js +5 -5
- package/dist/src/runtime/validateCanonicalGraphDocument.js +26 -1
- package/dist/src/types/aiTaskProfile.d.ts +2 -2
- package/dist/src/types/aiTaskProfile.js +1 -1
- package/dist/src/types/refs.d.ts +13 -8
- package/dist/src/validation/authoringGraphResponse.d.ts +21 -0
- package/dist/src/validation/authoringGraphResponse.js +88 -0
- package/dist/src/validation/validateGraphResponseWiring.d.ts +26 -0
- package/dist/src/validation/validateGraphResponseWiring.js +233 -0
- package/dist/testkit/authoringGraphFixtures.js +4 -1
- package/dist/testkit/buildExecuteGraphInput.js +3 -1
- package/dist/testkit/flatGraphToAuthoring.js +5 -5
- package/docs/handoff/graphs-studio-graphenix-2.7.3.md +13 -13
- package/package.json +17 -16
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { embeddedGraphToExellixGraph } from '../plan/embeddedGraphToExellixGraph.js';
|
|
2
|
+
import { detectAuthoringResponseSourceIssues, GRAPH_RESPONSE_DUAL_SOURCE, GRAPH_RESPONSE_LEGACY_SOURCE, } from './authoringGraphResponse.js';
|
|
3
|
+
export const RESPONSE_PATH_NO_WRITER = 'RESPONSE_PATH_NO_WRITER';
|
|
4
|
+
export const TASK_MAP_TARGET_INVALID = 'TASK_MAP_TARGET_INVALID';
|
|
5
|
+
export const TASK_MAP_SOURCE_INVALID = 'TASK_MAP_SOURCE_INVALID';
|
|
6
|
+
export const RESPONSE_LEGACY_SHAPE_KEY = 'RESPONSE_LEGACY_SHAPE_KEY';
|
|
7
|
+
export const EXECUTION_MAPPING_LEGACY_PATH = 'EXECUTION_MAPPING_LEGACY_PATH';
|
|
8
|
+
export const RESPONSE_EMPTY_SHAPE = 'RESPONSE_EMPTY_SHAPE';
|
|
9
|
+
export const RESPONSE_LEGACY_PRESET_ID = 'RESPONSE_LEGACY_PRESET_ID';
|
|
10
|
+
export const RESPONSE_COERCE_STRING_ARRAY_ON_SCALAR = 'RESPONSE_COERCE_STRING_ARRAY_ON_SCALAR';
|
|
11
|
+
const LEGACY_SHAPE_KEYS = new Set(['subnetAnalysis', 'taskSections']);
|
|
12
|
+
const LEGACY_EXECUTION_PATH_RE = /^inference\.conceptSketch(\.|$)/;
|
|
13
|
+
const KNOWN_MAP_SOURCE_PREFIXES = ['output.', 'parsed.', 'node.', 'variables.', 'jobMemory.'];
|
|
14
|
+
function isPlainRecord(v) {
|
|
15
|
+
return v != null && typeof v === 'object' && !Array.isArray(v);
|
|
16
|
+
}
|
|
17
|
+
function isSupportedSelector(v) {
|
|
18
|
+
return isPlainRecord(v) && typeof v.type === 'string';
|
|
19
|
+
}
|
|
20
|
+
function getGraphNodes(graph) {
|
|
21
|
+
return Array.isArray(graph.nodes) ? graph.nodes : [];
|
|
22
|
+
}
|
|
23
|
+
function isTaskNode(node) {
|
|
24
|
+
return node.type !== 'finalizer';
|
|
25
|
+
}
|
|
26
|
+
function isFinalizerNode(node) {
|
|
27
|
+
return node.type === 'finalizer';
|
|
28
|
+
}
|
|
29
|
+
function isShapeEmpty(shape) {
|
|
30
|
+
if (shape == null)
|
|
31
|
+
return true;
|
|
32
|
+
if (Array.isArray(shape))
|
|
33
|
+
return shape.length === 0;
|
|
34
|
+
if (isPlainRecord(shape))
|
|
35
|
+
return Object.keys(shape).length === 0;
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
function hasTerminalFinalizer(graph) {
|
|
39
|
+
const nodes = getGraphNodes(graph);
|
|
40
|
+
const finalizers = nodes.filter(isFinalizerNode);
|
|
41
|
+
if (finalizers.length === 0)
|
|
42
|
+
return false;
|
|
43
|
+
const edges = graph.edges ?? [];
|
|
44
|
+
const targeted = new Set(edges.map((e) => e.to));
|
|
45
|
+
return finalizers.some((f) => targeted.has(f.id) || edges.some((e) => e.to === f.id));
|
|
46
|
+
}
|
|
47
|
+
function collectTaskWritePaths(graph) {
|
|
48
|
+
const out = [];
|
|
49
|
+
for (const node of getGraphNodes(graph)) {
|
|
50
|
+
if (!isTaskNode(node))
|
|
51
|
+
continue;
|
|
52
|
+
const em = node.executionMapping;
|
|
53
|
+
if (em?.path && typeof em.path === 'string' && em.path.length > 0) {
|
|
54
|
+
out.push({ nodeId: String(node.id), path: em.path });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
function pathHasWriter(selectorPath, writePaths) {
|
|
60
|
+
return writePaths.some(({ path }) => selectorPath === path || selectorPath.startsWith(`${path}.`));
|
|
61
|
+
}
|
|
62
|
+
function collectSelectors(shape, path, out, legacyKeys) {
|
|
63
|
+
if (isSupportedSelector(shape)) {
|
|
64
|
+
out.push({ selector: shape, path });
|
|
65
|
+
if (shape.type === 'firstPresent' && Array.isArray(shape.sources)) {
|
|
66
|
+
shape.sources.forEach((source, index) => collectSelectors(source, `${path}.sources[${index}]`, out, legacyKeys));
|
|
67
|
+
}
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (Array.isArray(shape)) {
|
|
71
|
+
shape.forEach((item, index) => collectSelectors(item, `${path}[${index}]`, out, legacyKeys));
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (isPlainRecord(shape)) {
|
|
75
|
+
for (const [key, val] of Object.entries(shape)) {
|
|
76
|
+
if (LEGACY_SHAPE_KEYS.has(key)) {
|
|
77
|
+
legacyKeys.push({
|
|
78
|
+
code: RESPONSE_LEGACY_SHAPE_KEY,
|
|
79
|
+
message: `graph.response.shape must not use legacy key "${key}".`,
|
|
80
|
+
path: `${path}.${key}`,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
collectSelectors(val, `${path}.${key}`, out, legacyKeys);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function isValidMapSource(source) {
|
|
88
|
+
if (source.startsWith('"') || source.startsWith('\\"'))
|
|
89
|
+
return true;
|
|
90
|
+
if (KNOWN_MAP_SOURCE_PREFIXES.some((prefix) => source.startsWith(prefix)))
|
|
91
|
+
return true;
|
|
92
|
+
// Shorthand leaf keys resolve against task output at runtime.
|
|
93
|
+
if (!source.includes('.'))
|
|
94
|
+
return true;
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
function validateTaskExecutionMapping(node, errors, warnings) {
|
|
98
|
+
const em = node.executionMapping;
|
|
99
|
+
if (!em?.path)
|
|
100
|
+
return;
|
|
101
|
+
const nodeId = String(node.id);
|
|
102
|
+
if (LEGACY_EXECUTION_PATH_RE.test(em.path)) {
|
|
103
|
+
errors.push({
|
|
104
|
+
code: EXECUTION_MAPPING_LEGACY_PATH,
|
|
105
|
+
message: `Task node "${nodeId}" uses legacy executionMapping.path "${em.path}". Use answers.qN (or another flat namespace) instead of inference.conceptSketch.stepN.`,
|
|
106
|
+
nodeId,
|
|
107
|
+
path: `nodes.${nodeId}.executionMapping.path`,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
const map = em.map;
|
|
111
|
+
if (!isPlainRecord(map))
|
|
112
|
+
return;
|
|
113
|
+
for (const [targetKey, sourcePath] of Object.entries(map)) {
|
|
114
|
+
if (targetKey.includes('.')) {
|
|
115
|
+
errors.push({
|
|
116
|
+
code: TASK_MAP_TARGET_INVALID,
|
|
117
|
+
message: `Task node "${nodeId}" executionMapping.map target "${targetKey}" must be flat — use graph.response.shape for nesting.`,
|
|
118
|
+
nodeId,
|
|
119
|
+
path: `nodes.${nodeId}.executionMapping.map.${targetKey}`,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (typeof sourcePath === 'string' && !isValidMapSource(sourcePath)) {
|
|
123
|
+
errors.push({
|
|
124
|
+
code: TASK_MAP_SOURCE_INVALID,
|
|
125
|
+
message: `Task node "${nodeId}" executionMapping.map source "${sourcePath}" is not under a known task output root (output., parsed., node., variables., jobMemory., or shorthand leaf).`,
|
|
126
|
+
nodeId,
|
|
127
|
+
path: `nodes.${nodeId}.executionMapping.map.${targetKey}`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function validateResponseShape(graph, errors, warnings) {
|
|
133
|
+
const response = graph.response;
|
|
134
|
+
if (!isPlainRecord(response))
|
|
135
|
+
return;
|
|
136
|
+
const shape = response.shape;
|
|
137
|
+
if (isShapeEmpty(shape) && hasTerminalFinalizer(graph)) {
|
|
138
|
+
errors.push({
|
|
139
|
+
code: RESPONSE_EMPTY_SHAPE,
|
|
140
|
+
message: 'graph.response.shape is empty but the graph has a terminal finalizer — declare response selectors or remove the finalizer.',
|
|
141
|
+
path: 'graph.response.shape',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
const writePaths = collectTaskWritePaths(graph);
|
|
145
|
+
const selectors = [];
|
|
146
|
+
const legacyShapeIssues = [];
|
|
147
|
+
collectSelectors(shape, 'graph.response.shape', selectors, legacyShapeIssues);
|
|
148
|
+
errors.push(...legacyShapeIssues);
|
|
149
|
+
for (const { selector, path } of selectors) {
|
|
150
|
+
if (selector.coerce === 'stringArray' && /shortAnswer/i.test(path)) {
|
|
151
|
+
warnings.push({
|
|
152
|
+
code: RESPONSE_COERCE_STRING_ARRAY_ON_SCALAR,
|
|
153
|
+
message: `coerce: "stringArray" on scalar field at ${path} is unusual — shortAnswer is string-typed by contract.`,
|
|
154
|
+
path,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
const memoryPath = selector.type === 'executionMemoryPath' || selector.type === 'executionPath'
|
|
158
|
+
? selector.path
|
|
159
|
+
: undefined;
|
|
160
|
+
if (memoryPath && !pathHasWriter(memoryPath, writePaths)) {
|
|
161
|
+
errors.push({
|
|
162
|
+
code: RESPONSE_PATH_NO_WRITER,
|
|
163
|
+
message: `graph.response selector path "${memoryPath}" has no upstream task executionMapping.path prefix.`,
|
|
164
|
+
path,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function validateMetadataLegacyPreset(graph, errors) {
|
|
170
|
+
const metadata = graph.metadata;
|
|
171
|
+
if (!isPlainRecord(metadata))
|
|
172
|
+
return;
|
|
173
|
+
const preset = isPlainRecord(metadata.responsePreset) ? metadata.responsePreset : undefined;
|
|
174
|
+
if (preset?.id === 'subnetAnalysis') {
|
|
175
|
+
errors.push({
|
|
176
|
+
code: RESPONSE_LEGACY_PRESET_ID,
|
|
177
|
+
message: 'metadata.responsePreset.id "subnetAnalysis" was removed — migrate to graph.response.shape.',
|
|
178
|
+
path: 'metadata.responsePreset.id',
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function validateGraphModel(graph) {
|
|
183
|
+
const errors = [];
|
|
184
|
+
const warnings = [];
|
|
185
|
+
validateMetadataLegacyPreset(graph, errors);
|
|
186
|
+
for (const node of getGraphNodes(graph)) {
|
|
187
|
+
if (isTaskNode(node))
|
|
188
|
+
validateTaskExecutionMapping(node, errors, warnings);
|
|
189
|
+
}
|
|
190
|
+
validateResponseShape(graph, errors, warnings);
|
|
191
|
+
return { ok: errors.length === 0, errors, warnings };
|
|
192
|
+
}
|
|
193
|
+
function graphFromPlan(plan) {
|
|
194
|
+
return embeddedGraphToExellixGraph(plan);
|
|
195
|
+
}
|
|
196
|
+
/** Validate response wiring for an authoring document, executable plan, or materialized graph. */
|
|
197
|
+
export function validateGraphResponseWiring(input) {
|
|
198
|
+
const errors = [];
|
|
199
|
+
const warnings = [];
|
|
200
|
+
if ('formatVersion' in input && 'graph' in input) {
|
|
201
|
+
const doc = input;
|
|
202
|
+
for (const issue of detectAuthoringResponseSourceIssues(doc)) {
|
|
203
|
+
if (issue.code === GRAPH_RESPONSE_LEGACY_SOURCE) {
|
|
204
|
+
errors.push({ code: issue.code, message: issue.message, path: issue.path });
|
|
205
|
+
}
|
|
206
|
+
else if (issue.code === GRAPH_RESPONSE_DUAL_SOURCE) {
|
|
207
|
+
warnings.push({ code: issue.code, message: issue.message, path: issue.path });
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const stubGraph = {
|
|
211
|
+
id: doc.id,
|
|
212
|
+
nodes: [],
|
|
213
|
+
edges: [],
|
|
214
|
+
response: doc.graph.response ?? { shape: {} },
|
|
215
|
+
metadata: doc.graph.metadata,
|
|
216
|
+
};
|
|
217
|
+
validateMetadataLegacyPreset(stubGraph, errors);
|
|
218
|
+
return { ok: errors.length === 0, errors, warnings };
|
|
219
|
+
}
|
|
220
|
+
if ('normalizedGraph' in input && 'source' in input) {
|
|
221
|
+
return validateGraphModel(graphFromPlan(input));
|
|
222
|
+
}
|
|
223
|
+
return validateGraphModel(input);
|
|
224
|
+
}
|
|
225
|
+
export function assertGraphResponseWiringOk(validation, context) {
|
|
226
|
+
if (validation.ok)
|
|
227
|
+
return;
|
|
228
|
+
const summary = validation.errors.map((e) => `${e.code}: ${e.message}`).join('; ');
|
|
229
|
+
const err = new Error(`Graph response wiring validation failed${context?.graphId ? ` for "${context.graphId}"` : ''}: ${summary}`);
|
|
230
|
+
err.code = validation.errors[0]?.code ?? 'GRAPH_RESPONSE_WIRING_INVALID';
|
|
231
|
+
err.details = validation;
|
|
232
|
+
throw err;
|
|
233
|
+
}
|
|
@@ -12,6 +12,7 @@ function authoringShell(graphId, nodes, edges, graphResponseShape, extra) {
|
|
|
12
12
|
graph: {
|
|
13
13
|
nodes,
|
|
14
14
|
edges,
|
|
15
|
+
response: authoringResponseBlock(graphResponseShape),
|
|
15
16
|
inputs: taskNodes.map((node) => ({
|
|
16
17
|
id: `graph-input:${node.id}`,
|
|
17
18
|
name: 'Input Record',
|
|
@@ -31,7 +32,6 @@ function authoringShell(graphId, nodes, edges, graphResponseShape, extra) {
|
|
|
31
32
|
]
|
|
32
33
|
: [],
|
|
33
34
|
metadata: {
|
|
34
|
-
graphResponse: { shape: graphResponseShape },
|
|
35
35
|
modelConfig: defaultExecutableModelConfig(),
|
|
36
36
|
...extra,
|
|
37
37
|
},
|
|
@@ -39,6 +39,9 @@ function authoringShell(graphId, nodes, edges, graphResponseShape, extra) {
|
|
|
39
39
|
types: [],
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
|
+
function authoringResponseBlock(graphResponseShape) {
|
|
43
|
+
return { shape: graphResponseShape };
|
|
44
|
+
}
|
|
42
45
|
/** Single ai-task + select finalizer — mirrors legacy flat `buildAiTaskGraph` tests. */
|
|
43
46
|
export function buildAiTaskAuthoringGraph(graphId) {
|
|
44
47
|
const taskId = 'ask-1';
|
|
@@ -6,7 +6,9 @@ function normalizeAuthoringDocument(input) {
|
|
|
6
6
|
/** Builds `{ plan, runtime }` for tests and hosts with a Graphenix 2.x {@link AuthoringGraphDocument}. */
|
|
7
7
|
export function buildExecuteGraphInput(doc, runtime) {
|
|
8
8
|
return {
|
|
9
|
-
plan: compileExellixExecutablePlan(normalizeAuthoringDocument(doc), runtime
|
|
9
|
+
plan: compileExellixExecutablePlan(normalizeAuthoringDocument(doc), runtime, {
|
|
10
|
+
strictResponseValidation: false,
|
|
11
|
+
}),
|
|
10
12
|
runtime,
|
|
11
13
|
};
|
|
12
14
|
}
|
|
@@ -228,11 +228,6 @@ export function flatTestGraphToAuthoringDocument(flat) {
|
|
|
228
228
|
metadata.jobKnowledge = normalizeKnowledgeRefs(flat.jobKnowledge);
|
|
229
229
|
if (Array.isArray(flat.taskKnowledge))
|
|
230
230
|
metadata.taskKnowledge = normalizeKnowledgeRefs(flat.taskKnowledge);
|
|
231
|
-
metadata.graphResponse = {
|
|
232
|
-
...(flatResponse.missing != null ? { missing: flatResponse.missing } : {}),
|
|
233
|
-
...(flatResponse.version != null ? { version: flatResponse.version } : {}),
|
|
234
|
-
shape: responseShape,
|
|
235
|
-
};
|
|
236
231
|
metadata.modelConfig = flatModelConfigToAuthoring(flat.modelConfig) ?? defaultExecutableModelConfig();
|
|
237
232
|
const taskNodes = nodes.filter((n) => n.kind === TASK_NODE_KIND);
|
|
238
233
|
const finalizer = nodes.find((n) => n.kind === FINALIZER_NODE_KIND);
|
|
@@ -244,6 +239,11 @@ export function flatTestGraphToAuthoringDocument(flat) {
|
|
|
244
239
|
graph: {
|
|
245
240
|
nodes: nodes,
|
|
246
241
|
edges,
|
|
242
|
+
response: {
|
|
243
|
+
...(flatResponse.missing != null ? { missing: flatResponse.missing } : {}),
|
|
244
|
+
...(flatResponse.version != null ? { version: flatResponse.version } : {}),
|
|
245
|
+
shape: responseShape,
|
|
246
|
+
},
|
|
247
247
|
inputs: taskNodes.map((node) => ({
|
|
248
248
|
id: `graph-input:${node.id}`,
|
|
249
249
|
name: 'Input Record',
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# graphs-studio — Graphenix 2.7.3 alignment handoff
|
|
2
|
-
|
|
3
|
-
Shipped with **@exellix/graph-engine@8.6.0** / **@exellix/graph-composer@2.12.0**.
|
|
4
|
-
|
|
5
|
-
Full checklist: see Exellix monorepo `docs/handoff/graphs-studio-graphenix-2.7.3.md` (canonical copy). Summary:
|
|
6
|
-
|
|
7
|
-
1. **Web scope:** `taskConfiguration.aiTaskProfile.webQueryTemplate` — remove `webScoping` and narrix web keys.
|
|
8
|
-
2. **Graph entry:** no `graphEntry.inputs` (CR-006); use `requiredExecutionPaths` + jobs-ui data sources.
|
|
9
|
-
3. **Persistency:** `response.persistency` with `newRecord` + optional `link` (Graphenix 2.7.3).
|
|
10
|
-
4. **Preflight:** show `nodePlan.invokeContract.pipeline`, not root `RunTaskRequest.narrix`.
|
|
11
|
-
5. **CRS-FRS-005:** PRE synthesis export parity still pending in studio (separate track).
|
|
12
|
-
|
|
13
|
-
Pin: `graph-engine ^8.6.0`, `graph-composer ^2.12.0`, `ai-tasks ^10.0.12+`, `graphenix ^2.7.3`.
|
|
1
|
+
# graphs-studio — Graphenix 2.7.3 alignment handoff
|
|
2
|
+
|
|
3
|
+
Shipped with **@exellix/graph-engine@8.6.0** / **@exellix/graph-composer@2.12.0**.
|
|
4
|
+
|
|
5
|
+
Full checklist: see Exellix monorepo `docs/handoff/graphs-studio-graphenix-2.7.3.md` (canonical copy). Summary:
|
|
6
|
+
|
|
7
|
+
1. **Web scope:** `taskConfiguration.aiTaskProfile.webQueryTemplate` — remove `webScoping` and narrix web keys.
|
|
8
|
+
2. **Graph entry:** no `graphEntry.inputs` (CR-006); use `requiredExecutionPaths` + jobs-ui data sources.
|
|
9
|
+
3. **Persistency:** `response.persistency` with `newRecord` + optional `link` (Graphenix 2.7.3).
|
|
10
|
+
4. **Preflight:** show `nodePlan.invokeContract.pipeline`, not root `RunTaskRequest.narrix`.
|
|
11
|
+
5. **CRS-FRS-005:** PRE synthesis export parity still pending in studio (separate track).
|
|
12
|
+
|
|
13
|
+
Pin: `graph-engine ^8.6.0`, `graph-composer ^2.12.0`, `ai-tasks ^10.0.12+`, `graphenix ^2.7.3`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exellix/graph-engine",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Graph executor SDK",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"prebuild": "node scripts/clean-dist.mjs",
|
|
28
28
|
"build": "tsc",
|
|
29
29
|
"test": "npm run build && npm run check:no-legacy && tsx --test --test-force-exit --test-timeout=180000 --test-concurrency=2 tests/model-alias-canonical.test.ts tests/model-alias-execute.test.ts tests/model-alias-strategy.test.ts tests/model-alias-subnets.test.ts tests/ai-tasks-error-propagation.test.ts tests/reports-fixtures-pre-synthesis.test.ts tests/passthrough-parity.test.ts tests/step-retry-llm-call.test.ts tests/run-log-diagnostics.test.ts",
|
|
30
|
-
"test:full": "npm run build && npm run check:no-legacy && tsx --test --test-force-exit --test-timeout=180000 --test-concurrency=2 tests/graph-engine.test.ts tests/passthrough-parity.test.ts tests/task-node-run-task-preflight.test.ts tests/reports-fixtures-pre-synthesis.test.ts tests/model-alias-canonical.test.ts tests/model-alias-execute.test.ts tests/model-alias-strategy.test.ts tests/model-alias-subnets.test.ts tests/compile-host-patches.test.ts tests/reference-fixtures-compile.test.ts tests/step-retry-llm-call.test.ts",
|
|
30
|
+
"test:full": "npm run build && npm run check:no-legacy && tsx --test --test-force-exit --test-timeout=180000 --test-concurrency=2 tests/graph-engine.test.ts tests/graph-run-contract.test.ts tests/graph-response-contract.test.ts tests/passthrough-parity.test.ts tests/task-node-run-task-preflight.test.ts tests/reports-fixtures-pre-synthesis.test.ts tests/model-alias-canonical.test.ts tests/model-alias-execute.test.ts tests/model-alias-strategy.test.ts tests/model-alias-subnets.test.ts tests/compile-host-patches.test.ts tests/reference-fixtures-compile.test.ts tests/step-retry-llm-call.test.ts",
|
|
31
31
|
"test:live": "npm run run:pre-synthesis",
|
|
32
32
|
"test:subnets-graph-fixture": "npm run build && node --test tests/subnets-graph.fixture.test.mjs",
|
|
33
33
|
"test:subnets-graph-live": "npm run build && node --env-file=.env --test tests/subnets-graph.live.test.mjs",
|
|
@@ -46,7 +46,8 @@
|
|
|
46
46
|
"license": "exellix-license",
|
|
47
47
|
"repository": {
|
|
48
48
|
"type": "git",
|
|
49
|
-
"url": "git@github.com
|
|
49
|
+
"url": "git+ssh://git@github.com/exellix/exellix-engine-mono-repo.git",
|
|
50
|
+
"directory": "graph-engine"
|
|
50
51
|
},
|
|
51
52
|
"publishConfig": {
|
|
52
53
|
"registry": "https://registry.npmjs.org/",
|
|
@@ -57,23 +58,23 @@
|
|
|
57
58
|
"@exellix/ai-tasks": "^10.0.13",
|
|
58
59
|
"@x12i/activix": "^8.6.3",
|
|
59
60
|
"@x12i/catalox": "^5.9.8",
|
|
60
|
-
"@x12i/env": "^4.0.
|
|
61
|
+
"@x12i/env": "^4.0.3",
|
|
61
62
|
"@x12i/funcx": "^4.9.13",
|
|
62
63
|
"@x12i/graphenix": "^2.5.0",
|
|
63
|
-
"@x12i/graphenix-authoring-format": "^2.
|
|
64
|
-
"@x12i/graphenix-core": "^2.
|
|
65
|
-
"@x12i/graphenix-executable-contracts": "^2.
|
|
66
|
-
"@x12i/graphenix-executable-format": "^2.
|
|
67
|
-
"@x12i/graphenix-execute-envelope": "^2.
|
|
64
|
+
"@x12i/graphenix-authoring-format": "^2.8.1",
|
|
65
|
+
"@x12i/graphenix-core": "^2.8.1",
|
|
66
|
+
"@x12i/graphenix-executable-contracts": "^2.8.1",
|
|
67
|
+
"@x12i/graphenix-executable-format": "^2.8.1",
|
|
68
|
+
"@x12i/graphenix-execute-envelope": "^2.8.1",
|
|
68
69
|
"@x12i/graphenix-format": "^2.0.0",
|
|
69
|
-
"@x12i/graphenix-plan-compiler": "^2.
|
|
70
|
-
"@x12i/graphenix-plan-format": "^2.
|
|
71
|
-
"@x12i/graphenix-task-node-format": "^2.
|
|
72
|
-
"@x12i/graphenix-trace-format": "^2.
|
|
70
|
+
"@x12i/graphenix-plan-compiler": "^2.8.1",
|
|
71
|
+
"@x12i/graphenix-plan-format": "^2.8.1",
|
|
72
|
+
"@x12i/graphenix-task-node-format": "^2.8.1",
|
|
73
|
+
"@x12i/graphenix-trace-format": "^2.8.1",
|
|
73
74
|
"@x12i/logxer": "^4.6.0",
|
|
74
|
-
"@x12i/memorix-descriptors": "1.10.0",
|
|
75
|
-
"@x12i/memorix-retrieval": "1.
|
|
76
|
-
"@x12i/memorix-writer": "1.3.0",
|
|
75
|
+
"@x12i/memorix-descriptors": "^1.10.0",
|
|
76
|
+
"@x12i/memorix-retrieval": "^1.15.0",
|
|
77
|
+
"@x12i/memorix-writer": "^1.3.0",
|
|
77
78
|
"@x12i/rendrix": "^4.3.0",
|
|
78
79
|
"@x12i/runx": "^1.3.2"
|
|
79
80
|
},
|