@exellix/graph-engine 8.3.0 → 8.5.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/.env.example +16 -3
- package/CHANGELOG.md +24 -0
- package/README.md +3 -21
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.js +2 -1
- package/dist/src/runtime/executionMatrixHost.d.ts +6 -17
- package/dist/src/runtime/executionMatrixHost.js +8 -48
- package/dist/src/runtime/graphModelStudioSeparation.d.ts +4 -2
- package/dist/src/runtime/graphModelStudioSeparation.js +11 -27
- package/dist/src/runtime/taskNodeMainReadiness.js +1 -12
- package/dist/src/types/refs.d.ts +1 -57
- package/package.json +15 -15
package/.env.example
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
#
|
|
1
|
+
# Graph-engine host environment (copy to .env and fill in secrets)
|
|
2
|
+
|
|
3
|
+
# Mongo — job runs (@exellix/exellix-db) and Memorix entity/event stores
|
|
4
|
+
MONGO_URI=mongodb://localhost:27017
|
|
5
|
+
|
|
6
|
+
# Memorix databases (bridged to Xronox via applyMemorixEnvBridgeToProcess)
|
|
7
|
+
MEMORIX_ENTITIES_DB=memorix-entities
|
|
8
|
+
MEMORIX_EVENTS_DB=memorix-events
|
|
9
|
+
|
|
10
|
+
# Catalox — descriptor resolution for Memorix read/write local skills
|
|
11
|
+
CATALOX_APP_ID=your-app-id
|
|
12
|
+
CATALOX_STORE_ID=your-store-id
|
|
13
|
+
|
|
14
|
+
# LLM keys — required when graphs include ai-tasks nodes
|
|
15
|
+
# OPENROUTER_API_KEY=
|
|
16
|
+
# GEMINI_API_KEY=
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 8.5.0 — Graphenix 2.7.0 + CR-006 (graphEntry.inputs removed)
|
|
4
|
+
|
|
5
|
+
### Breaking
|
|
6
|
+
|
|
7
|
+
- **CR-006:** Removed `metadata.graphEntry.inputs`, `inputTypes`, and all related types/helpers (`GraphEntryInputSpec*`, `getGraphEntryEmptyInputPathViolations`). Data source selection is an operator concern — configure `JobDef.graphs[*].sourcePoll` in jobs-ui instead.
|
|
8
|
+
- **`buildExecutionSeedFromGraphEntry`** is a no-op stub (removed in next release).
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **`@xellix/ai-tasks` ^10.0.9**, **`@exellix/ai-skills` ^6.12.3**, **`@exellix/xynthesis` ^4.8.4** (transitive via ai-tasks).
|
|
13
|
+
- **`@x12i/graphenix-*` ^2.7.0** — aligned with upstream CR-006 release train; fact-guard compile-time validation available when plans use factGuard units.
|
|
14
|
+
- **`check:no-legacy`** — floors ai-tasks ≥10.0.9, ai-skills ≥6.12.3, graphenix-core/plan-compiler/plan-format ≥2.7.0; rejects `"inputTypes"` in graph JSON fixtures.
|
|
15
|
+
|
|
16
|
+
### Removed
|
|
17
|
+
|
|
18
|
+
- Graph entry input seeding, readiness paths derived from `graphEntry.inputs`, and fixture `graphEntry.inputs` blocks.
|
|
19
|
+
|
|
20
|
+
## 8.4.0 — Graphenix 2.5.0 coordinated release
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- **`@x12i/graphenix-*` ^2.5.0** — CRS-FRS-003 `jobMemory.context` on graph model; authoring validation + plan-compiler preservation.
|
|
25
|
+
- **`check:no-legacy`** — floors graphenix-core/plan-compiler/plan-format ≥2.5.0.
|
|
26
|
+
|
|
3
27
|
## 8.3.0 — Graphenix 2.4.0 PRE synthesis input contract alignment
|
|
4
28
|
|
|
5
29
|
### Changed
|
package/README.md
CHANGED
|
@@ -554,9 +554,9 @@ Execute a single node — useful for tests and for stepping through a node in th
|
|
|
554
554
|
|
|
555
555
|
Load a graph through the injected loader and validate against the canonical document schema before returning.
|
|
556
556
|
|
|
557
|
-
## Graph Entry
|
|
557
|
+
## Graph Entry
|
|
558
558
|
|
|
559
|
-
|
|
559
|
+
Graphs declare execution contract under `metadata.graphEntry`. **Data source selection is an operator/work-factory concern** (chosen in jobs-ui at queue time); graphs do not embed input-type or entity-id declarations.
|
|
560
560
|
|
|
561
561
|
```json
|
|
562
562
|
{
|
|
@@ -564,10 +564,6 @@ Graph JSON can declare the semantic type of input it is designed to work with un
|
|
|
564
564
|
"metadata": {
|
|
565
565
|
"graphEntry": {
|
|
566
566
|
"summary": "Triage one vulnerability record with an optional caller query.",
|
|
567
|
-
"inputs": [
|
|
568
|
-
{ "kind": "record", "path": "input", "required": true },
|
|
569
|
-
{ "kind": "query", "path": "input.query", "required": false }
|
|
570
|
-
],
|
|
571
567
|
"requiredExecutionPaths": ["input.subnetId"]
|
|
572
568
|
}
|
|
573
569
|
},
|
|
@@ -575,21 +571,7 @@ Graph JSON can declare the semantic type of input it is designed to work with un
|
|
|
575
571
|
}
|
|
576
572
|
```
|
|
577
573
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
Use `kind: "execution"` when the graph is designed to consume a prior graph execution. The design contract names the source `graphId` and an optional `metadataFilter` for fields such as status values:
|
|
581
|
-
|
|
582
|
-
```json
|
|
583
|
-
{
|
|
584
|
-
"kind": "execution",
|
|
585
|
-
"graphId": "network-vuln-group-triage.v1",
|
|
586
|
-
"metadataFilter": { "status": "completed" },
|
|
587
|
-
"path": "input.upstreamExecution",
|
|
588
|
-
"required": true
|
|
589
|
-
}
|
|
590
|
-
```
|
|
591
|
-
|
|
592
|
-
The runtime does not perform that lookup today; host tooling resolves it and passes the selected execution under the declared path.
|
|
574
|
+
Use `requiredExecutionPaths` to declare dot-paths the first-wave nodes expect under `runtime.input`. Paths are relative to `GraphRuntimeObject.executionMemory` after `runtime.input` is mirrored (`input.*` root).
|
|
593
575
|
|
|
594
576
|
## Node Inputs
|
|
595
577
|
|
package/dist/src/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
export type { HostExecuteGraphRunOptions, MainReadinessPolicy, ExecutionStepOption, StepRetryPolicy, ActivixNodeActivityExellixConfig, SkillKeyResolutionOptions, RunTaskRequest as ExellixGraphRunTaskRequest, RunTaskResponse as ExellixGraphRunTaskResponse, } from './types/options.js';
|
|
16
16
|
export type { AiTaskProfileMetadata, AiTaskProfileWebScoping, AiTaskProfileInputSynthesis, } from './types/aiTaskProfile.js';
|
|
17
17
|
export type { ExecutionStrategyInvocation, ExecutionStrategyPhase, ExecutionStrategyWrapperKey, SmartInputConfig, TaskStrategyItemData, XynthesizedDestinationScope, XynthesizedMemory, XynthesizedOutputConfig, } from './types/aiTasksDerivedTypes.js';
|
|
18
|
-
export type { Graph, GraphModelObject, GraphAiModelConfig, PartialGraphAiModelConfig, GraphModelAliasConfig, GraphRuntimeNodeConfig, TaskNodeRuntimeObject, GraphDocumentMetadata, GraphEntryContract,
|
|
18
|
+
export type { Graph, GraphModelObject, GraphAiModelConfig, PartialGraphAiModelConfig, GraphModelAliasConfig, GraphRuntimeNodeConfig, TaskNodeRuntimeObject, GraphDocumentMetadata, GraphEntryContract, GraphResponseDefinition, GraphResponseMissingBehavior, GraphResponseSelector, GraphResponseShape, GraphResponseContract, GraphResponseMapping, GraphResponseMappingMissingBehavior, GraphResponseMappingSelector, GraphResponseMappingTarget, GraphExecutionDefaults, GraphExecutionMode, GraphOutputMode, GraphFlowOutline, GraphCoreObjective, GraphNodesResponses, GraphNode, TaskNode, TaskNodeConditions, TaskNodeConditionWhen, TaskNodeJsonCondition, TaskNodeJsConditionFunction, TaskNodeAiCondition, TaskNodeConditionParameters, ModelConfigSelection, ModelConfigCase, TaskNodePureMetadata, TaskNodeExecutionPipelineStep, TaskOutputValidation, FinalizerNode, FinalizerInputBinding, OutputSchema, AggregateFinalizerConfig, BundleFinalizerConfig, SelectFinalizerConfig, SynthesizeFinalizerConfig, UtilityExecutionPolicy, Job, CatalogPlanningKind, CatalogRequestStatus, CatalogBinding, ScopedQuestionCatalogRequestEntry, DiscoveryDefinitionCatalogRequestEntry, DiscoveryDefinitionCatalogRequest, DiscoveryDefinitionPlanningFields, CatalogRequestEntry, StructuredDataFiltersV1, ConditionsDataFilters, } from './types/refs.js';
|
|
19
19
|
export { mergeGraphDocumentModel, EXELLIX_GRAPH_MODEL_VARIABLE_KEY, EXELLIX_STRUCTURED_DATA_FILTERS_V1, } from './types/refs.js';
|
|
20
20
|
export type { TaskNodeTaskConfiguration, TaskNodeScopedDataReaderPackSlot, } from './types/taskNodeConfiguration.js';
|
|
21
21
|
export { getTaskConfiguration } from './types/taskNodeConfiguration.js';
|
|
@@ -83,7 +83,7 @@ export type { GetJobLogsInput, GetJobLogsResult, QueryableLogLine } from '@x12i/
|
|
|
83
83
|
export { assertCanonicalGraphDocument, assertCanonicalTaskNode, getCanonicalGraphDocumentViolations, CANONICAL_GRAPH_TOP_LEVEL_KEYS, } from './runtime/validateCanonicalGraphDocument.js';
|
|
84
84
|
export type { AssertCanonicalGraphDocumentOptions, CanonicalGraphDocumentValidationMode, } from './runtime/validateCanonicalGraphDocument.js';
|
|
85
85
|
export { assertCanonicalGraphRuntimeObject } from './runtime/validateCanonicalGraphRuntime.js';
|
|
86
|
-
export { GRAPH_ENTRY_STUDIO_ONLY_KEYS, GRAPH_METADATA_STUDIO_ONLY_KEYS, stripGraphModelStudioFields, primaryRuntimeInputFromStudioDocument, getGraphEntryStudioOnlyKeyViolations, getGraphMetadataStudioOnlyKeyViolations,
|
|
86
|
+
export { GRAPH_ENTRY_STUDIO_ONLY_KEYS, GRAPH_METADATA_STUDIO_ONLY_KEYS, stripGraphModelStudioFields, primaryRuntimeInputFromStudioDocument, getGraphEntryStudioOnlyKeyViolations, getGraphMetadataStudioOnlyKeyViolations, } from './runtime/graphModelStudioSeparation.js';
|
|
87
87
|
export type { GraphStudioDocument } from './runtime/graphModelStudioSeparation.js';
|
|
88
88
|
export { STUDIO_GRAPH_EXECUTE_REMOVED_KEYS, getStudioGraphExecuteRemovedKeyViolations, assertCanonicalStudioGraphExecuteRequest, buildGraphExecutionRequestFromStudioExecute, } from './runtime/studioGraphExecuteRequest.js';
|
|
89
89
|
export type { StudioGraphExecuteRemovedKey, StudioGraphExecuteRequest, BuildGraphExecutionRequestFromStudioExecuteOptions, } from './runtime/studioGraphExecuteRequest.js';
|
|
@@ -119,4 +119,5 @@ export type { CreatePlaygroundReporterOptions, PlaygroundDebugArtifact, Playgrou
|
|
|
119
119
|
export { getNodeScopingQuestion, getNodeMemoryShape, getNodeNarrixDiscovery, fetchNodeScopingData, inspectNode, resolveNodeSkillKey, getGraphNodes, getGraphCatalogs, inspectGraph, collectPredicatePaths, executionMemoryPathTail, executionMemoryTailsMatch, getNodeExecutionMemoryWriteTails, getNodeControlDependencies, getNodeSideEffects, inspectFinalizer, inspectNodeContract, inspectGraphContracts, EXELLIX_VIRTUAL_GRAPH_ENTRY_NODE_ID, EXELLIX_VIRTUAL_GRAPH_RESPONSE_NODE_ID, EXELLIX_VIRTUAL_BOUNDARY_NODE_METADATA_KEY, EXELLIX_VIRTUAL_BOUNDARY_EDGE_FLAG_KEY, getVirtualGraphEntryLayer, getVirtualGraphResponseLayer, materializeVirtualBoundaryDiagram, stripMaterializedVirtualBoundaryDiagram, validateCatalogPlanning, isCatalogBinding, isCatalogRequestEntry, inspectGraphModelSelection, } from './inspection/index.js';
|
|
120
120
|
export type { GraphModelSelectionInspection, NodeModelSelection, ModelSelectionSource, NodeScopingQuestion, NodeScopeSource, NodeScopeTarget, NodeScopingData, NodeMemoryShape, MemoryPath, NodeNarrixDiscovery, NodeInspection, GraphInspection, NodeIOEdge, GraphCatalogs, CatalogBindingSummary, CatalogPlanningValidationIssue, GraphVirtualIO, GraphVirtualIONode, GraphVirtualIOEdge, GraphVirtualIONodeRole, VirtualGraphEntryLayer, VirtualGraphResponseLayer, MaterializeVirtualBoundaryDiagramOptions, MaterializedVirtualBoundaryDiagram, MaterializedVirtualBoundaryDiagramMeta, InspectNodeContractOptions, LocalSkillKey, NodeExecutionType, FactProvenance, ProvenancedSection, NodeInputBindingEntry, ScopedDataDependency, NodeInputContract, ExecutionMemoryWriteSpec, NodeOutputContract, NodeSideEffects, ControlBranchEntry, NodeControlContract, NodeValidationContract, FinalizerContractInspection, NodeContractInspection, GraphContractsInspection, } from './inspection/index.js';
|
|
121
121
|
export type { NarrixPreProcessorConfig, WebScopeQuestion, LocalTaskHandler, LocalTaskContext } from './types/narrix.js';
|
|
122
|
+
export { shutdownMemorixRuntime } from './runtime/localSkills/memorixRuntime.js';
|
|
122
123
|
export type { ScopedDataReaderConfig, ScopedDataReaderOutput, ScopedDataReaderPackOutput, ScopedAnswerAssemblerConfig, ScopedAnswerAssemblerOutput, ScopedAnswerWriterConfig, ScopedAnswerWriterOutput, } from './runtime/localSkills/index.js';
|
package/dist/src/index.js
CHANGED
|
@@ -61,7 +61,7 @@ export { validateRunTaskConfig, validateRunTaskInvoke, analyzeExpectedRunTaskInp
|
|
|
61
61
|
export { buildExellixGraphRuntimeObjects, setRuntimeObjectsLastJobId, summarizeRuntimeObjectsForPlayground, EXELLIX_GRAPH_RUNTIME_PACKAGE_NAME, EXELLIX_AI_TASKS_PACKAGE_NAME, } from './runtime/runtimeObjects.js';
|
|
62
62
|
export { assertCanonicalGraphDocument, assertCanonicalTaskNode, getCanonicalGraphDocumentViolations, CANONICAL_GRAPH_TOP_LEVEL_KEYS, } from './runtime/validateCanonicalGraphDocument.js';
|
|
63
63
|
export { assertCanonicalGraphRuntimeObject } from './runtime/validateCanonicalGraphRuntime.js';
|
|
64
|
-
export { GRAPH_ENTRY_STUDIO_ONLY_KEYS, GRAPH_METADATA_STUDIO_ONLY_KEYS, stripGraphModelStudioFields, primaryRuntimeInputFromStudioDocument, getGraphEntryStudioOnlyKeyViolations, getGraphMetadataStudioOnlyKeyViolations,
|
|
64
|
+
export { GRAPH_ENTRY_STUDIO_ONLY_KEYS, GRAPH_METADATA_STUDIO_ONLY_KEYS, stripGraphModelStudioFields, primaryRuntimeInputFromStudioDocument, getGraphEntryStudioOnlyKeyViolations, getGraphMetadataStudioOnlyKeyViolations, } from './runtime/graphModelStudioSeparation.js';
|
|
65
65
|
export { STUDIO_GRAPH_EXECUTE_REMOVED_KEYS, getStudioGraphExecuteRemovedKeyViolations, assertCanonicalStudioGraphExecuteRequest, buildGraphExecutionRequestFromStudioExecute, } from './runtime/studioGraphExecuteRequest.js';
|
|
66
66
|
export { computeGraphDocumentContentSha256, stableStringifyGraphDocument, } from './runtime/graphDocumentFingerprint.js';
|
|
67
67
|
export { applyAiTaskProfileWebScopingToNarrix, mapAiTaskProfileQuestionsToWebScopeQuestions, } from './runtime/applyAiTaskProfileWebScopingToNarrix.js';
|
|
@@ -87,4 +87,5 @@ export { composeEventEmitters } from './runtime/events.js';
|
|
|
87
87
|
export { createPlaygroundReporter } from './playground/index.js';
|
|
88
88
|
// Graph Inspection API
|
|
89
89
|
export { getNodeScopingQuestion, getNodeMemoryShape, getNodeNarrixDiscovery, fetchNodeScopingData, inspectNode, resolveNodeSkillKey, getGraphNodes, getGraphCatalogs, inspectGraph, collectPredicatePaths, executionMemoryPathTail, executionMemoryTailsMatch, getNodeExecutionMemoryWriteTails, getNodeControlDependencies, getNodeSideEffects, inspectFinalizer, inspectNodeContract, inspectGraphContracts, EXELLIX_VIRTUAL_GRAPH_ENTRY_NODE_ID, EXELLIX_VIRTUAL_GRAPH_RESPONSE_NODE_ID, EXELLIX_VIRTUAL_BOUNDARY_NODE_METADATA_KEY, EXELLIX_VIRTUAL_BOUNDARY_EDGE_FLAG_KEY, getVirtualGraphEntryLayer, getVirtualGraphResponseLayer, materializeVirtualBoundaryDiagram, stripMaterializedVirtualBoundaryDiagram, validateCatalogPlanning, isCatalogBinding, isCatalogRequestEntry, inspectGraphModelSelection, } from './inspection/index.js';
|
|
90
|
+
export { shutdownMemorixRuntime } from './runtime/localSkills/memorixRuntime.js';
|
|
90
91
|
// Web context rendering — consume execution.webContext → markdown for prompts (Layer 04)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* `runtime.executionMemory` objects built here.
|
|
7
7
|
*/
|
|
8
8
|
import type { AuthoringGraphDocument } from '@x12i/graphenix-executable-contracts';
|
|
9
|
-
import type { Graph, GraphEntryContract,
|
|
9
|
+
import type { Graph, GraphEntryContract, Job } from '../types/refs.js';
|
|
10
10
|
import type { ExellixGraphRuntimeOptions, ExecuteGraphInput, ExecuteGraphResult, GraphRuntimeObject } from './ExellixGraphRuntime.js';
|
|
11
11
|
import type { GraphLoader } from './ExellixGraphRuntime.js';
|
|
12
12
|
export { resolveGraphEntryFromAuthoringDocument, authoringDocumentGraphId } from '../compile/authoringDocumentHelpers.js';
|
|
@@ -22,32 +22,21 @@ export declare function resolveGraphEntryFromGraph(graph: Graph): GraphEntryCont
|
|
|
22
22
|
*/
|
|
23
23
|
export declare function createResolveGraphEntryFromLoader(loader: GraphLoader): (graphId: string) => Promise<GraphEntryContract | undefined>;
|
|
24
24
|
export type BuildExecutionSeedSources = {
|
|
25
|
-
/**
|
|
26
|
-
* Highest precedence: explicit dot-path → value (paths match `GraphEntryValueInputSpec.path`).
|
|
27
|
-
*/
|
|
28
25
|
valuesByPath?: Record<string, unknown>;
|
|
29
|
-
/**
|
|
30
|
-
* Lower precedence: plain objects (matrix defaults, row payload, per-graph map).
|
|
31
|
-
* For each spec path, `selectByPath(layer, path)` is evaluated; later layers override earlier ones.
|
|
32
|
-
*/
|
|
33
26
|
layers?: unknown[];
|
|
34
27
|
};
|
|
35
28
|
export type BuildExecutionSeedResult = {
|
|
36
|
-
/** Shallow clone base + writes; safe to pass as `GraphRuntimeObject.executionMemory`. */
|
|
37
29
|
executionMemory: Record<string, unknown>;
|
|
38
|
-
/** Backwards-readable alias for callers still naming the seed object `execution`. */
|
|
39
30
|
execution: Record<string, unknown>;
|
|
40
|
-
/** Paths written for value-kind specs. */
|
|
41
31
|
appliedPaths: string[];
|
|
42
|
-
/** `kind: "execution"` specs are never auto-filled — host must materialize prior runs. */
|
|
43
|
-
skippedExecutionSpecs: GraphEntryExecutionInputSpec[];
|
|
44
32
|
};
|
|
45
33
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
34
|
+
* @deprecated graphEntry.inputs was removed in Graphenix 2.7.0 (CR-006).
|
|
35
|
+
* Runtime input comes from record.input + job memory; this function is a no-op stub
|
|
36
|
+
* kept for a single release to avoid hard compile breaks in external matrix hosts.
|
|
37
|
+
* Remove callers and this stub in the next release.
|
|
49
38
|
*/
|
|
50
|
-
export declare function buildExecutionSeedFromGraphEntry(
|
|
39
|
+
export declare function buildExecutionSeedFromGraphEntry(_graphEntry: GraphEntryContract | undefined, _sources?: BuildExecutionSeedSources): BuildExecutionSeedResult;
|
|
51
40
|
/** Builds the canonical graph-engine execution request for matrix-style hosts. */
|
|
52
41
|
export declare function buildGraphExecutionRequest(input: {
|
|
53
42
|
doc: AuthoringGraphDocument;
|
|
@@ -8,13 +8,7 @@
|
|
|
8
8
|
import { compileExellixExecutablePlan } from '../compile/compileExellixExecutablePlan.js';
|
|
9
9
|
import { mergeGraphDocumentModel } from '../types/refs.js';
|
|
10
10
|
import { createExellixGraphRuntime } from './ExellixGraphRuntime.js';
|
|
11
|
-
import { selectByPath
|
|
12
|
-
function isExecutionInputSpec(spec) {
|
|
13
|
-
return spec.kind === 'execution';
|
|
14
|
-
}
|
|
15
|
-
function isValueInputSpec(spec) {
|
|
16
|
-
return spec.kind !== 'execution' && typeof spec.path === 'string';
|
|
17
|
-
}
|
|
11
|
+
import { selectByPath } from './pathExpr.js';
|
|
18
12
|
export { resolveGraphEntryFromAuthoringDocument, authoringDocumentGraphId } from '../compile/authoringDocumentHelpers.js';
|
|
19
13
|
/**
|
|
20
14
|
* Reads Layer 01 contract from the canonical graph document (`metadata.graphEntry`).
|
|
@@ -36,48 +30,14 @@ export function createResolveGraphEntryFromLoader(loader) {
|
|
|
36
30
|
};
|
|
37
31
|
}
|
|
38
32
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
33
|
+
* @deprecated graphEntry.inputs was removed in Graphenix 2.7.0 (CR-006).
|
|
34
|
+
* Runtime input comes from record.input + job memory; this function is a no-op stub
|
|
35
|
+
* kept for a single release to avoid hard compile breaks in external matrix hosts.
|
|
36
|
+
* Remove callers and this stub in the next release.
|
|
42
37
|
*/
|
|
43
|
-
export function buildExecutionSeedFromGraphEntry(
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
const skippedExecutionSpecs = [];
|
|
47
|
-
const valuesByPath = sources.valuesByPath ?? {};
|
|
48
|
-
const layers = sources.layers ?? [];
|
|
49
|
-
for (const spec of graphEntry?.inputs ?? []) {
|
|
50
|
-
if (isExecutionInputSpec(spec)) {
|
|
51
|
-
skippedExecutionSpecs.push(spec);
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
if (!isValueInputSpec(spec))
|
|
55
|
-
continue;
|
|
56
|
-
const path = spec.path.trim();
|
|
57
|
-
if (!path)
|
|
58
|
-
continue;
|
|
59
|
-
// Invoke payload paths belong on runtime.input (graphenix 2.1) — not executionMemory.
|
|
60
|
-
if (path === 'input' || path.startsWith('input.'))
|
|
61
|
-
continue;
|
|
62
|
-
let value = undefined;
|
|
63
|
-
if (Object.prototype.hasOwnProperty.call(valuesByPath, path)) {
|
|
64
|
-
value = valuesByPath[path];
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
for (const layer of layers) {
|
|
68
|
-
if (layer == null || typeof layer !== 'object' || Array.isArray(layer))
|
|
69
|
-
continue;
|
|
70
|
-
const picked = selectByPath(layer, path);
|
|
71
|
-
if (picked !== undefined)
|
|
72
|
-
value = picked;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
if (value !== undefined) {
|
|
76
|
-
writeByPath(execution, path, value, 'replace');
|
|
77
|
-
appliedPaths.push(path);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return { executionMemory: execution, execution, appliedPaths, skippedExecutionSpecs };
|
|
38
|
+
export function buildExecutionSeedFromGraphEntry(_graphEntry, _sources = {}) {
|
|
39
|
+
const empty = {};
|
|
40
|
+
return { executionMemory: empty, execution: empty, appliedPaths: [] };
|
|
81
41
|
}
|
|
82
42
|
/** Builds the canonical graph-engine execution request for matrix-style hosts. */
|
|
83
43
|
export function buildGraphExecutionRequest(input) {
|
|
@@ -22,13 +22,15 @@ export type GraphStudioDocument = {
|
|
|
22
22
|
};
|
|
23
23
|
export declare function getGraphEntryStudioOnlyKeyViolations(graphEntry: unknown): GraphEntryStudioOnlyKey[];
|
|
24
24
|
export declare function getGraphMetadataStudioOnlyKeyViolations(metadata: unknown): GraphMetadataStudioOnlyKey[];
|
|
25
|
-
/** Returns dot-paths under graphEntry.inputs with empty `path` for value kinds. */
|
|
26
|
-
export declare function getGraphEntryEmptyInputPathViolations(graphEntry: unknown): string[];
|
|
27
25
|
/**
|
|
28
26
|
* Deep-clones a graph model and removes studio-only metadata and graphEntry example fields.
|
|
29
27
|
* Use at publish time when upstream serializers still attach playground artifacts.
|
|
30
28
|
*/
|
|
31
29
|
export declare function stripGraphModelStudioFields(graph: Graph): Graph;
|
|
30
|
+
/** Legacy graph-entry input declaration — removed in Graphenix 2.7.0 (CR-006). */
|
|
31
|
+
export declare const GRAPH_ENTRY_REMOVED_KEYS: readonly ["inputs", "inputTypes"];
|
|
32
|
+
export type GraphEntryRemovedKey = (typeof GRAPH_ENTRY_REMOVED_KEYS)[number];
|
|
33
|
+
export declare function getGraphEntryRemovedKeyViolations(graphEntry: unknown): GraphEntryRemovedKey[];
|
|
32
34
|
export declare function assertCanonicalGraphEntryContract(graphEntry: unknown, context: {
|
|
33
35
|
jobId?: string;
|
|
34
36
|
graphId?: string;
|
|
@@ -15,9 +15,6 @@ export const GRAPH_METADATA_STUDIO_ONLY_KEYS = [
|
|
|
15
15
|
function isPlainObject(v) {
|
|
16
16
|
return v != null && typeof v === 'object' && !Array.isArray(v);
|
|
17
17
|
}
|
|
18
|
-
function isValueInputSpec(spec) {
|
|
19
|
-
return spec.kind !== 'execution';
|
|
20
|
-
}
|
|
21
18
|
export function getGraphEntryStudioOnlyKeyViolations(graphEntry) {
|
|
22
19
|
if (!isPlainObject(graphEntry))
|
|
23
20
|
return [];
|
|
@@ -28,26 +25,6 @@ export function getGraphMetadataStudioOnlyKeyViolations(metadata) {
|
|
|
28
25
|
return [];
|
|
29
26
|
return GRAPH_METADATA_STUDIO_ONLY_KEYS.filter((key) => Object.prototype.hasOwnProperty.call(metadata, key));
|
|
30
27
|
}
|
|
31
|
-
/** Returns dot-paths under graphEntry.inputs with empty `path` for value kinds. */
|
|
32
|
-
export function getGraphEntryEmptyInputPathViolations(graphEntry) {
|
|
33
|
-
if (!isPlainObject(graphEntry))
|
|
34
|
-
return [];
|
|
35
|
-
const inputs = graphEntry.inputs;
|
|
36
|
-
if (!Array.isArray(inputs))
|
|
37
|
-
return [];
|
|
38
|
-
const bad = [];
|
|
39
|
-
for (let i = 0; i < inputs.length; i++) {
|
|
40
|
-
const spec = inputs[i];
|
|
41
|
-
if (!isPlainObject(spec))
|
|
42
|
-
continue;
|
|
43
|
-
if (spec.kind === 'execution')
|
|
44
|
-
continue;
|
|
45
|
-
const path = typeof spec.path === 'string' ? spec.path.trim() : '';
|
|
46
|
-
if (!path)
|
|
47
|
-
bad.push(`metadata.graphEntry.inputs[${i}].path`);
|
|
48
|
-
}
|
|
49
|
-
return bad;
|
|
50
|
-
}
|
|
51
28
|
/**
|
|
52
29
|
* Deep-clones a graph model and removes studio-only metadata and graphEntry example fields.
|
|
53
30
|
* Use at publish time when upstream serializers still attach playground artifacts.
|
|
@@ -70,16 +47,23 @@ export function stripGraphModelStudioFields(graph) {
|
|
|
70
47
|
}
|
|
71
48
|
return clone;
|
|
72
49
|
}
|
|
50
|
+
/** Legacy graph-entry input declaration — removed in Graphenix 2.7.0 (CR-006). */
|
|
51
|
+
export const GRAPH_ENTRY_REMOVED_KEYS = ['inputs', 'inputTypes'];
|
|
52
|
+
export function getGraphEntryRemovedKeyViolations(graphEntry) {
|
|
53
|
+
if (!isPlainObject(graphEntry))
|
|
54
|
+
return [];
|
|
55
|
+
return GRAPH_ENTRY_REMOVED_KEYS.filter((key) => Object.prototype.hasOwnProperty.call(graphEntry, key));
|
|
56
|
+
}
|
|
73
57
|
export function assertCanonicalGraphEntryContract(graphEntry, context) {
|
|
74
58
|
const label = context.graphLabel ?? `Graph "${String(context.graphId ?? '?')}"`;
|
|
59
|
+
const removedKeys = getGraphEntryRemovedKeyViolations(graphEntry);
|
|
60
|
+
if (removedKeys.length > 0) {
|
|
61
|
+
throw new ExellixGraphError(ExellixGraphErrorCode.NON_CANONICAL_GRAPH_DOCUMENT, `${label}: metadata.graphEntry must not include removed field(s): ${removedKeys.join(', ')}. Data source selection is an operator concern (JobDef.graphs[*].sourcePoll); use requiredExecutionPaths only.`, { ...context, graphEntryRemovedKeys: removedKeys });
|
|
62
|
+
}
|
|
75
63
|
const studioKeys = getGraphEntryStudioOnlyKeyViolations(graphEntry);
|
|
76
64
|
if (studioKeys.length > 0) {
|
|
77
65
|
throw new ExellixGraphError(ExellixGraphErrorCode.NON_CANONICAL_GRAPH_DOCUMENT, `${label}: metadata.graphEntry must not include studio-only example field(s): ${studioKeys.join(', ')}. Store example payloads in the graphs-studio database (GraphStudioDocument.exampleInputs), not in the executable graph model.`, { ...context, graphEntryStudioOnlyKeys: studioKeys });
|
|
78
66
|
}
|
|
79
|
-
const emptyPaths = getGraphEntryEmptyInputPathViolations(graphEntry);
|
|
80
|
-
if (emptyPaths.length > 0) {
|
|
81
|
-
throw new ExellixGraphError(ExellixGraphErrorCode.NON_CANONICAL_GRAPH_DOCUMENT, `${label}: metadata.graphEntry.inputs must declare a non-empty dot-path under merged execution (e.g. "input" or "input.subnetId"); empty path at ${emptyPaths.join(', ')}.`, { ...context, graphEntryEmptyInputPaths: emptyPaths });
|
|
82
|
-
}
|
|
83
67
|
}
|
|
84
68
|
export function assertCanonicalGraphDocumentMetadata(metadata, context) {
|
|
85
69
|
const label = context.graphLabel ?? `Graph "${String(context.graphId ?? '?')}"`;
|
|
@@ -32,17 +32,6 @@ function collectGraphEntryInputPaths(graphEntry) {
|
|
|
32
32
|
if (typeof p === 'string' && p.trim() !== '')
|
|
33
33
|
paths.add(p.trim());
|
|
34
34
|
}
|
|
35
|
-
for (const spec of graphEntry?.inputs ?? []) {
|
|
36
|
-
if (spec == null || typeof spec !== 'object')
|
|
37
|
-
continue;
|
|
38
|
-
const rec = spec;
|
|
39
|
-
if (rec.kind === 'execution')
|
|
40
|
-
continue;
|
|
41
|
-
if (rec.required === false)
|
|
42
|
-
continue;
|
|
43
|
-
if (typeof rec.path === 'string' && rec.path.trim() !== '')
|
|
44
|
-
paths.add(rec.path.trim());
|
|
45
|
-
}
|
|
46
35
|
return [...paths];
|
|
47
36
|
}
|
|
48
37
|
function executionInputWatchPaths(args) {
|
|
@@ -76,7 +65,7 @@ function pathRequiresDeclaredEntry(path, graphEntry) {
|
|
|
76
65
|
const declared = collectGraphEntryInputPaths(graphEntry);
|
|
77
66
|
if (declared.length > 0)
|
|
78
67
|
return true;
|
|
79
|
-
return (graphEntry.
|
|
68
|
+
return (graphEntry.requiredExecutionPaths?.length ?? 0) > 0;
|
|
80
69
|
}
|
|
81
70
|
/**
|
|
82
71
|
* Evaluates MAIN-readiness before invoking the skill. Paths resolve via {@link resolveGraphEngineMemoryPathValue}
|
package/dist/src/types/refs.d.ts
CHANGED
|
@@ -528,63 +528,12 @@ export type DiscoveryDefinitionCatalogRequest = DiscoveryDefinitionCatalogReques
|
|
|
528
528
|
* Declares a required catalog item that does not exist yet (gap / feature request).
|
|
529
529
|
*/
|
|
530
530
|
export type CatalogRequestEntry = ScopedQuestionCatalogRequestEntry | DiscoveryDefinitionCatalogRequestEntry;
|
|
531
|
-
/**
|
|
532
|
-
* Semantic class of data a graph expects at Layer 01. Combinations are represented
|
|
533
|
-
* by multiple `GraphEntryInputSpec` entries on `metadata.graphEntry.inputs`.
|
|
534
|
-
*/
|
|
535
|
-
export type GraphEntryInputKind = 'record' | 'query' | 'user-input' | 'content' | 'metadata' | 'execution';
|
|
536
|
-
export type GraphEntryValueInputKind = Exclude<GraphEntryInputKind, 'execution'>;
|
|
537
|
-
/**
|
|
538
|
-
* Design-time declaration shared by graph entry inputs.
|
|
539
|
-
* **Declarative only:** core runtime does not validate or coerce these specs.
|
|
540
|
-
*/
|
|
541
|
-
export type GraphEntryInputSpecBase = {
|
|
542
|
-
/** Semantic input class, e.g. `record`, `query`, `user-input`, `content`, or `execution`. */
|
|
543
|
-
kind: GraphEntryInputKind;
|
|
544
|
-
/** Stable name for tooling/templates when the path is not enough. */
|
|
545
|
-
name?: string;
|
|
546
|
-
/** One-line label for graph authors and UIs. */
|
|
547
|
-
title?: string;
|
|
548
|
-
/** Longer human-readable description for editors, catalogs, and docs. */
|
|
549
|
-
description?: string;
|
|
550
|
-
/** Defaults to true for authoring intent; runtime does not enforce it today. */
|
|
551
|
-
required?: boolean;
|
|
552
|
-
/** Optional JSON Schema for this specific input value. Validators may use it; core runtime does not. */
|
|
553
|
-
schema?: Record<string, unknown>;
|
|
554
|
-
[key: string]: unknown;
|
|
555
|
-
};
|
|
556
|
-
/**
|
|
557
|
-
* Design-time declaration of one caller-supplied value in the graph execution object.
|
|
558
|
-
* Paths are dot-paths under the merged `execution` object, usually `input.*`.
|
|
559
|
-
*/
|
|
560
|
-
export type GraphEntryValueInputSpec = GraphEntryInputSpecBase & {
|
|
561
|
-
kind: GraphEntryValueInputKind;
|
|
562
|
-
/** Dot-path under merged `execution` where this input is expected, e.g. `input.subnetId`. */
|
|
563
|
-
path: string;
|
|
564
|
-
};
|
|
565
|
-
/**
|
|
566
|
-
* Design-time declaration of a prior graph execution used as this graph's input.
|
|
567
|
-
* A host/orchestrator can use `graphId` and `metadataFilter` to find the source execution,
|
|
568
|
-
* then materialize it at `path` before calling `executeGraph`.
|
|
569
|
-
*/
|
|
570
|
-
export type GraphEntryExecutionInputSpec = Omit<GraphEntryInputSpecBase, 'kind'> & {
|
|
571
|
-
kind: 'execution';
|
|
572
|
-
/** Source graph id whose completed execution should be used as input. */
|
|
573
|
-
graphId: string;
|
|
574
|
-
/** Metadata fields used by host tooling to select the matching source execution. */
|
|
575
|
-
metadataFilter?: Record<string, unknown>;
|
|
576
|
-
/** Dot-path under merged `execution` where the selected graph execution is expected. */
|
|
577
|
-
path?: string;
|
|
578
|
-
};
|
|
579
|
-
/**
|
|
580
|
-
* Design-time declaration of one graph entry input.
|
|
581
|
-
*/
|
|
582
|
-
export type GraphEntryInputSpec = GraphEntryValueInputSpec | GraphEntryExecutionInputSpec;
|
|
583
531
|
/**
|
|
584
532
|
* Layer 01 (graph entry): declares what callers should supply in `ExecuteGraphOptions.execution`
|
|
585
533
|
* after merge — the seed for `execution.input.*` and related paths first-wave nodes read.
|
|
586
534
|
* **Declarative only:** `executeGraph` does not validate this object; it is exposed via
|
|
587
535
|
* `variables.__graphModel` for tools, composers, and documentation (see `.docs/graph-io-visibility.md`).
|
|
536
|
+
* Data source selection is an operator/work-factory concern (jobs-ui), not a graph document field.
|
|
588
537
|
*/
|
|
589
538
|
export type GraphEntryContract = {
|
|
590
539
|
/** One-line summary for authors and UIs. */
|
|
@@ -599,11 +548,6 @@ export type GraphEntryContract = {
|
|
|
599
548
|
* `input.entityId`, `input.vulnerabilityId`). Same convention as `metadata.entityIdPath` roots.
|
|
600
549
|
*/
|
|
601
550
|
requiredExecutionPaths?: string[];
|
|
602
|
-
/**
|
|
603
|
-
* Semantic entry inputs this graph is designed to work with. Use multiple entries for combinations
|
|
604
|
-
* (for example, `record` + `query`).
|
|
605
|
-
*/
|
|
606
|
-
inputs?: GraphEntryInputSpec[];
|
|
607
551
|
/**
|
|
608
552
|
* Optional JSON Schema (e.g. draft 2020-12) for the merged `execution` object. Validators may use it; core runtime does not.
|
|
609
553
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exellix/graph-engine",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Graph executor SDK",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -52,27 +52,27 @@
|
|
|
52
52
|
"access": "public"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@exellix/ai-skills": "^6.12.
|
|
56
|
-
"@exellix/ai-tasks": "^10.0.
|
|
55
|
+
"@exellix/ai-skills": "^6.12.3",
|
|
56
|
+
"@exellix/ai-tasks": "^10.0.9",
|
|
57
57
|
"@x12i/activix": "^8.6.3",
|
|
58
58
|
"@x12i/catalox": "^5.9.7",
|
|
59
59
|
"@x12i/env": "^4.0.1",
|
|
60
60
|
"@x12i/funcx": "^4.9.13",
|
|
61
61
|
"@x12i/graphenix": "^2.5.0",
|
|
62
|
-
"@x12i/graphenix-authoring-format": "^2.
|
|
63
|
-
"@x12i/graphenix-core": "^2.
|
|
64
|
-
"@x12i/graphenix-executable-contracts": "^2.
|
|
65
|
-
"@x12i/graphenix-executable-format": "^2.
|
|
66
|
-
"@x12i/graphenix-execute-envelope": "^2.
|
|
62
|
+
"@x12i/graphenix-authoring-format": "^2.7.0",
|
|
63
|
+
"@x12i/graphenix-core": "^2.7.0",
|
|
64
|
+
"@x12i/graphenix-executable-contracts": "^2.7.0",
|
|
65
|
+
"@x12i/graphenix-executable-format": "^2.7.0",
|
|
66
|
+
"@x12i/graphenix-execute-envelope": "^2.7.0",
|
|
67
67
|
"@x12i/graphenix-format": "^2.0.0",
|
|
68
|
-
"@x12i/graphenix-plan-compiler": "^2.
|
|
69
|
-
"@x12i/graphenix-plan-format": "^2.
|
|
70
|
-
"@x12i/graphenix-task-node-format": "^2.
|
|
71
|
-
"@x12i/graphenix-trace-format": "^2.
|
|
68
|
+
"@x12i/graphenix-plan-compiler": "^2.7.0",
|
|
69
|
+
"@x12i/graphenix-plan-format": "^2.7.0",
|
|
70
|
+
"@x12i/graphenix-task-node-format": "^2.7.0",
|
|
71
|
+
"@x12i/graphenix-trace-format": "^2.7.0",
|
|
72
72
|
"@x12i/logxer": "^4.6.0",
|
|
73
|
-
"@x12i/memorix-descriptors": "
|
|
74
|
-
"@x12i/memorix-retrieval": "
|
|
75
|
-
"@x12i/memorix-writer": "
|
|
73
|
+
"@x12i/memorix-descriptors": "1.7.0",
|
|
74
|
+
"@x12i/memorix-retrieval": "1.12.0",
|
|
75
|
+
"@x12i/memorix-writer": "1.1.0",
|
|
76
76
|
"@x12i/rendrix": "^4.3.0",
|
|
77
77
|
"@x12i/runx": "^1.3.2"
|
|
78
78
|
},
|