@exellix/graph-engine 8.4.0 → 8.6.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 +40 -0
- package/README.md +3 -21
- package/dist/src/index.d.ts +6 -5
- package/dist/src/index.js +3 -2
- package/dist/src/inspection/contractInspection.js +7 -16
- package/dist/src/inspection/controlInspection.js +2 -2
- package/dist/src/inspection/nodeInspection.js +9 -10
- package/dist/src/inspection/types.d.ts +4 -13
- package/dist/src/runtime/ExellixGraphRuntime.js +6 -3
- package/dist/src/runtime/buildAiTasksRunTaskRequest.d.ts +3 -8
- package/dist/src/runtime/buildAiTasksRunTaskRequest.js +1 -16
- package/dist/src/runtime/buildRunTaskTaskConfigurationForward.d.ts +3 -3
- package/dist/src/runtime/buildRunTaskTaskConfigurationForward.js +3 -7
- 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/resolveNarrixForTaskNode.d.ts +3 -7
- package/dist/src/runtime/resolveNarrixForTaskNode.js +4 -7
- package/dist/src/runtime/runTaskNodePlan.d.ts +10 -0
- package/dist/src/runtime/runTaskNodePlan.js +132 -0
- package/dist/src/runtime/taskNodeMainReadiness.js +1 -12
- package/dist/src/runtime/taskNodeRunTaskPreflight.js +6 -3
- package/dist/src/runtime/validateCanonicalGraphDocument.js +6 -7
- package/dist/src/types/aiTaskProfile.d.ts +10 -15
- package/dist/src/types/aiTaskProfile.js +11 -3
- package/dist/src/types/narrix.d.ts +33 -24
- package/dist/src/types/refs.d.ts +1 -57
- package/dist/src/types/taskNodeConfiguration.d.ts +3 -2
- package/docs/handoff/graphs-studio-graphenix-2.7.3.md +13 -0
- package/package.json +18 -17
- package/dist/src/runtime/applyAiTaskProfileWebScopingToNarrix.d.ts +0 -15
- package/dist/src/runtime/applyAiTaskProfileWebScopingToNarrix.js +0 -43
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 8.6.0 — Graphenix 2.7.3 (no-legacy web + narrix pipeline)
|
|
4
|
+
|
|
5
|
+
### Breaking
|
|
6
|
+
|
|
7
|
+
- **Legacy web scope removed:** Hard-reject `taskConfiguration.aiTaskProfile.webScoping`, `narrix.enableWebScope`, `forceWebScope`, `webScopeQuestions`, and related narrix web keys. Author **`taskConfiguration.aiTaskProfile.webQueryTemplate`** (optional `webQueryTemplates[]`, `webScopeOptions`).
|
|
8
|
+
- **`RunTaskRequest` wire:** Root `narrix` / `narrixMode` / `narrixInput` / `narrixScope` removed (ai-tasks **10.0.12+**). Graph-engine merges graph `variables.narrix` into **`nodePlan.invokeContract.pipeline.narrix`** via `patchNodePlanRuntimePipeline`.
|
|
9
|
+
- **Deleted** `applyAiTaskProfileWebScopingToNarrix` — web scope is plan-compiler PRE `webScope` unit + ai-tasks dispatch, not host-side narrix merge.
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- **`@exellix/ai-tasks` ^10.0.13**, **`@exellix/ai-skills` ^6.12.5**, **`@x12i/catalox` ^5.9.8**.
|
|
14
|
+
- **`@x12i/graphenix-*` ^2.7.3** — includes **`response.persistency`** (`newRecord`, `link.*`) on graph wire (GRX-NOTE-001 / MRX-FRS-002 intent).
|
|
15
|
+
- **`check:no-legacy`** — floors ai-tasks ≥10.0.12, ai-skills ≥6.12.4, graphenix-* ≥2.7.3.
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **`patchNodePlanRuntimePipeline`**, **`resolveRunTaskNodePlan`** — runtime narrix pipeline merge + narrative unit injection on minimal/uncompiled plans.
|
|
20
|
+
- **Exports:** `NarrixModeKey`, `NarrixRunInput`, `NarrixScope` types (local, compatible with plan wire).
|
|
21
|
+
|
|
22
|
+
### Downstream
|
|
23
|
+
|
|
24
|
+
- **graphs-studio:** see [`docs/handoff/graphs-studio-graphenix-2.7.3.md`](docs/handoff/graphs-studio-graphenix-2.7.3.md).
|
|
25
|
+
|
|
26
|
+
## 8.5.0 — Graphenix 2.7.0 + CR-006 (graphEntry.inputs removed)
|
|
27
|
+
|
|
28
|
+
### Breaking
|
|
29
|
+
|
|
30
|
+
- **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.
|
|
31
|
+
- **`buildExecutionSeedFromGraphEntry`** is a no-op stub (removed in next release).
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
|
|
35
|
+
- **`@xellix/ai-tasks` ^10.0.9**, **`@exellix/ai-skills` ^6.12.3**, **`@exellix/xynthesis` ^4.8.4** (transitive via ai-tasks).
|
|
36
|
+
- **`@x12i/graphenix-*` ^2.7.0** — aligned with upstream CR-006 release train; fact-guard compile-time validation available when plans use factGuard units.
|
|
37
|
+
- **`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.
|
|
38
|
+
|
|
39
|
+
### Removed
|
|
40
|
+
|
|
41
|
+
- Graph entry input seeding, readiness paths derived from `graphEntry.inputs`, and fixture `graphEntry.inputs` blocks.
|
|
42
|
+
|
|
3
43
|
## 8.4.0 — Graphenix 2.5.0 coordinated release
|
|
4
44
|
|
|
5
45
|
### 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
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
* {@link compileExellixExecutablePlan} or `@x12i/graphenix-plan-compiler`.
|
|
14
14
|
*/
|
|
15
15
|
export type { HostExecuteGraphRunOptions, MainReadinessPolicy, ExecutionStepOption, StepRetryPolicy, ActivixNodeActivityExellixConfig, SkillKeyResolutionOptions, RunTaskRequest as ExellixGraphRunTaskRequest, RunTaskResponse as ExellixGraphRunTaskResponse, } from './types/options.js';
|
|
16
|
-
export type { AiTaskProfileMetadata,
|
|
16
|
+
export type { AiTaskProfileMetadata, AiTaskProfileInputSynthesis, } from './types/aiTaskProfile.js';
|
|
17
|
+
export { hasWebScopeAuthoring } from './types/aiTaskProfile.js';
|
|
17
18
|
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,
|
|
19
|
+
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
20
|
export { mergeGraphDocumentModel, EXELLIX_GRAPH_MODEL_VARIABLE_KEY, EXELLIX_STRUCTURED_DATA_FILTERS_V1, } from './types/refs.js';
|
|
20
21
|
export type { TaskNodeTaskConfiguration, TaskNodeScopedDataReaderPackSlot, } from './types/taskNodeConfiguration.js';
|
|
21
22
|
export { getTaskConfiguration } from './types/taskNodeConfiguration.js';
|
|
@@ -71,6 +72,7 @@ export { buildAiTasksRunTaskRequest, extractRunTaskMetadataPassthrough, extractR
|
|
|
71
72
|
export type { BuildAiTasksRunTaskRequestArgs, RunTaskMetadataPassthrough, } from './runtime/buildAiTasksRunTaskRequest.js';
|
|
72
73
|
export { buildTaskNodeJobContext } from './runtime/buildTaskNodeJobContext.js';
|
|
73
74
|
export { resolveNarrixForTaskNode } from './runtime/resolveNarrixForTaskNode.js';
|
|
75
|
+
export { patchNodePlanMainModelFromWire, patchNodePlanRuntimePipeline, resolveRunTaskNodePlan, } from './runtime/runTaskNodePlan.js';
|
|
74
76
|
export { runTaskResponseSucceeded } from './runtime/runTaskResponse.js';
|
|
75
77
|
export { buildTaskNodeRunTaskRequest, validateTaskNodeRunTaskConfig, validateTaskNodeRunTaskInvoke, } from './runtime/taskNodeRunTaskPreflight.js';
|
|
76
78
|
export type { BuildTaskNodeRunTaskRequestArgs, BuildTaskNodeRunTaskRequestResult, TaskNodeRunTaskPreflightSkipReason, ValidateTaskNodeRunTaskConfigArgs, ValidateTaskNodeRunTaskConfigResult, ValidateTaskNodeRunTaskInvokeArgs, ValidateTaskNodeRunTaskInvokeResult, } from './runtime/taskNodeRunTaskPreflight.js';
|
|
@@ -83,12 +85,11 @@ export type { GetJobLogsInput, GetJobLogsResult, QueryableLogLine } from '@x12i/
|
|
|
83
85
|
export { assertCanonicalGraphDocument, assertCanonicalTaskNode, getCanonicalGraphDocumentViolations, CANONICAL_GRAPH_TOP_LEVEL_KEYS, } from './runtime/validateCanonicalGraphDocument.js';
|
|
84
86
|
export type { AssertCanonicalGraphDocumentOptions, CanonicalGraphDocumentValidationMode, } from './runtime/validateCanonicalGraphDocument.js';
|
|
85
87
|
export { assertCanonicalGraphRuntimeObject } from './runtime/validateCanonicalGraphRuntime.js';
|
|
86
|
-
export { GRAPH_ENTRY_STUDIO_ONLY_KEYS, GRAPH_METADATA_STUDIO_ONLY_KEYS, stripGraphModelStudioFields, primaryRuntimeInputFromStudioDocument, getGraphEntryStudioOnlyKeyViolations, getGraphMetadataStudioOnlyKeyViolations,
|
|
88
|
+
export { GRAPH_ENTRY_STUDIO_ONLY_KEYS, GRAPH_METADATA_STUDIO_ONLY_KEYS, stripGraphModelStudioFields, primaryRuntimeInputFromStudioDocument, getGraphEntryStudioOnlyKeyViolations, getGraphMetadataStudioOnlyKeyViolations, } from './runtime/graphModelStudioSeparation.js';
|
|
87
89
|
export type { GraphStudioDocument } from './runtime/graphModelStudioSeparation.js';
|
|
88
90
|
export { STUDIO_GRAPH_EXECUTE_REMOVED_KEYS, getStudioGraphExecuteRemovedKeyViolations, assertCanonicalStudioGraphExecuteRequest, buildGraphExecutionRequestFromStudioExecute, } from './runtime/studioGraphExecuteRequest.js';
|
|
89
91
|
export type { StudioGraphExecuteRemovedKey, StudioGraphExecuteRequest, BuildGraphExecutionRequestFromStudioExecuteOptions, } from './runtime/studioGraphExecuteRequest.js';
|
|
90
92
|
export { computeGraphDocumentContentSha256, stableStringifyGraphDocument, } from './runtime/graphDocumentFingerprint.js';
|
|
91
|
-
export { applyAiTaskProfileWebScopingToNarrix, mapAiTaskProfileQuestionsToWebScopeQuestions, } from './runtime/applyAiTaskProfileWebScopingToNarrix.js';
|
|
92
93
|
export { createExellixGraphRuntime } from './runtime/ExellixGraphRuntime.js';
|
|
93
94
|
export type { ExecutableGraphPlanV2, NodeExecutionPlan, ExecutionUnitPlanV2, } from '@x12i/graphenix-executable-contracts';
|
|
94
95
|
export type { AuthoringGraphDocument } from '@x12i/graphenix-executable-contracts';
|
|
@@ -118,6 +119,6 @@ export { createPlaygroundReporter } from './playground/index.js';
|
|
|
118
119
|
export type { CreatePlaygroundReporterOptions, PlaygroundDebugArtifact, PlaygroundDebugArtifactKind, PlaygroundDebugSnapshot, PlaygroundReporter, PlaygroundStep, } from './playground/PlaygroundReporter.js';
|
|
119
120
|
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
121
|
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
|
-
export type { NarrixPreProcessorConfig,
|
|
122
|
+
export type { NarrixPreProcessorConfig, NarrixModeKey, NarrixRunInput, NarrixScope, ResolvedNarrixWirePayload, LocalTaskHandler, LocalTaskContext, } from './types/narrix.js';
|
|
122
123
|
export { shutdownMemorixRuntime } from './runtime/localSkills/memorixRuntime.js';
|
|
123
124
|
export type { ScopedDataReaderConfig, ScopedDataReaderOutput, ScopedDataReaderPackOutput, ScopedAnswerAssemblerConfig, ScopedAnswerAssemblerOutput, ScopedAnswerWriterConfig, ScopedAnswerWriterOutput, } from './runtime/localSkills/index.js';
|
package/dist/src/index.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* `{ executeGraph({ plan, runtime }: GraphExecutionRequest) }`. Hosts compile upstream via
|
|
13
13
|
* {@link compileExellixExecutablePlan} or `@x12i/graphenix-plan-compiler`.
|
|
14
14
|
*/
|
|
15
|
+
export { hasWebScopeAuthoring } from './types/aiTaskProfile.js';
|
|
15
16
|
export { mergeGraphDocumentModel, EXELLIX_GRAPH_MODEL_VARIABLE_KEY, EXELLIX_STRUCTURED_DATA_FILTERS_V1, } from './types/refs.js';
|
|
16
17
|
export { getTaskConfiguration } from './types/taskNodeConfiguration.js';
|
|
17
18
|
export { AI_TASKS_RUN_LOG_METADATA_KEY, AI_TASKS_LOGXER_RUN_ID_METADATA_KEY, DEFAULT_MAX_RUN_LOG_ENTRIES, DEFAULT_MAX_RUN_LOG_DATA_JSON_CHARS, } from './types/runLog.js';
|
|
@@ -54,6 +55,7 @@ export { assertHostJobId, newGraphRunTaskId } from './runtime/graphRunIdentity.j
|
|
|
54
55
|
export { buildAiTasksRunTaskRequest, extractRunTaskMetadataPassthrough, extractRunTaskStrategyOverrides, resolveJobTypeId, resolveTaskTypeId, } from './runtime/buildAiTasksRunTaskRequest.js';
|
|
55
56
|
export { buildTaskNodeJobContext } from './runtime/buildTaskNodeJobContext.js';
|
|
56
57
|
export { resolveNarrixForTaskNode } from './runtime/resolveNarrixForTaskNode.js';
|
|
58
|
+
export { patchNodePlanMainModelFromWire, patchNodePlanRuntimePipeline, resolveRunTaskNodePlan, } from './runtime/runTaskNodePlan.js';
|
|
57
59
|
export { runTaskResponseSucceeded } from './runtime/runTaskResponse.js';
|
|
58
60
|
export { buildTaskNodeRunTaskRequest, validateTaskNodeRunTaskConfig, validateTaskNodeRunTaskInvoke, } from './runtime/taskNodeRunTaskPreflight.js';
|
|
59
61
|
/** Re-exported from `@exellix/ai-tasks` — preflight validation without `runTask`. */
|
|
@@ -61,10 +63,9 @@ export { validateRunTaskConfig, validateRunTaskInvoke, analyzeExpectedRunTaskInp
|
|
|
61
63
|
export { buildExellixGraphRuntimeObjects, setRuntimeObjectsLastJobId, summarizeRuntimeObjectsForPlayground, EXELLIX_GRAPH_RUNTIME_PACKAGE_NAME, EXELLIX_AI_TASKS_PACKAGE_NAME, } from './runtime/runtimeObjects.js';
|
|
62
64
|
export { assertCanonicalGraphDocument, assertCanonicalTaskNode, getCanonicalGraphDocumentViolations, CANONICAL_GRAPH_TOP_LEVEL_KEYS, } from './runtime/validateCanonicalGraphDocument.js';
|
|
63
65
|
export { assertCanonicalGraphRuntimeObject } from './runtime/validateCanonicalGraphRuntime.js';
|
|
64
|
-
export { GRAPH_ENTRY_STUDIO_ONLY_KEYS, GRAPH_METADATA_STUDIO_ONLY_KEYS, stripGraphModelStudioFields, primaryRuntimeInputFromStudioDocument, getGraphEntryStudioOnlyKeyViolations, getGraphMetadataStudioOnlyKeyViolations,
|
|
66
|
+
export { GRAPH_ENTRY_STUDIO_ONLY_KEYS, GRAPH_METADATA_STUDIO_ONLY_KEYS, stripGraphModelStudioFields, primaryRuntimeInputFromStudioDocument, getGraphEntryStudioOnlyKeyViolations, getGraphMetadataStudioOnlyKeyViolations, } from './runtime/graphModelStudioSeparation.js';
|
|
65
67
|
export { STUDIO_GRAPH_EXECUTE_REMOVED_KEYS, getStudioGraphExecuteRemovedKeyViolations, assertCanonicalStudioGraphExecuteRequest, buildGraphExecutionRequestFromStudioExecute, } from './runtime/studioGraphExecuteRequest.js';
|
|
66
68
|
export { computeGraphDocumentContentSha256, stableStringifyGraphDocument, } from './runtime/graphDocumentFingerprint.js';
|
|
67
|
-
export { applyAiTaskProfileWebScopingToNarrix, mapAiTaskProfileQuestionsToWebScopeQuestions, } from './runtime/applyAiTaskProfileWebScopingToNarrix.js';
|
|
68
69
|
// New runtime with injection seam
|
|
69
70
|
export { createExellixGraphRuntime } from './runtime/ExellixGraphRuntime.js';
|
|
70
71
|
export { compileExellixExecutablePlan } from './compile/compileExellixExecutablePlan.js';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { hasWebScopeAuthoring } from '../types/aiTaskProfile.js';
|
|
2
2
|
import { readTaskNodeInputsConfig } from '../runtime/readTaskNodeInputsConfig.js';
|
|
3
|
+
import { isLocalSkillKey } from '../runtime/localSkills/index.js';
|
|
3
4
|
import { getNodeMemoryShape, getNodeNarrixDiscovery, inspectNode, resolveNodeSkillKey, } from './nodeInspection.js';
|
|
4
5
|
import { getGraphNodes } from './graphInspection.js';
|
|
5
6
|
import { getNodeControlDependencies } from './controlInspection.js';
|
|
@@ -217,9 +218,8 @@ function buildInputContract(node, memoryShape) {
|
|
|
217
218
|
? [
|
|
218
219
|
{
|
|
219
220
|
enabled: true,
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
questions: narrixDisc.webScope.questions,
|
|
221
|
+
webQueryTemplate: narrixDisc.webScope.webQueryTemplate,
|
|
222
|
+
webQueryTemplates: narrixDisc.webScope.webQueryTemplates,
|
|
223
223
|
},
|
|
224
224
|
]
|
|
225
225
|
: [];
|
|
@@ -292,19 +292,11 @@ function buildOutputContract(node) {
|
|
|
292
292
|
}
|
|
293
293
|
const tc = task.taskConfiguration;
|
|
294
294
|
const webCfg = tc?.aiTaskProfile;
|
|
295
|
-
const webScoping = webCfg?.webScoping;
|
|
296
|
-
const narrixCfg = tc?.narrix;
|
|
297
295
|
const webWrites = [];
|
|
298
|
-
if (
|
|
299
|
-
webWrites.push({
|
|
300
|
-
path: 'webContext',
|
|
301
|
-
source: 'taskConfiguration.narrix.enableWebScope → @exellix/ai-tasks (runtime-known)',
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
else if (webScoping && webScoping.enabled === true) {
|
|
296
|
+
if (hasWebScopeAuthoring(webCfg)) {
|
|
305
297
|
webWrites.push({
|
|
306
298
|
path: 'webContext',
|
|
307
|
-
source: 'taskConfiguration.aiTaskProfile.
|
|
299
|
+
source: 'taskConfiguration.aiTaskProfile.webQueryTemplate → PRE webScope unit (runtime-known)',
|
|
308
300
|
});
|
|
309
301
|
}
|
|
310
302
|
const synthWrites = [];
|
|
@@ -356,8 +348,7 @@ export function getNodeSideEffects(node) {
|
|
|
356
348
|
const tc = node.taskConfiguration;
|
|
357
349
|
runsNarrix = tc?.narrix != null && typeof tc.narrix === 'object';
|
|
358
350
|
const web = tc?.aiTaskProfile;
|
|
359
|
-
|
|
360
|
-
runsLocalWebScope = ws?.enabled === true;
|
|
351
|
+
runsLocalWebScope = hasWebScopeAuthoring(web);
|
|
361
352
|
const inputSynth = web?.inputSynthesis;
|
|
362
353
|
runsPreSynthesis = inputSynth?.enabled === true;
|
|
363
354
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getGraphNodes } from './graphInspection.js';
|
|
2
2
|
import { getNodeNarrixDiscovery } from './nodeInspection.js';
|
|
3
|
+
import { hasWebScopeAuthoring } from '../types/aiTaskProfile.js';
|
|
3
4
|
/**
|
|
4
5
|
* Recursively collects leaf `path` strings from a graph edge predicate.
|
|
5
6
|
*/
|
|
@@ -64,8 +65,7 @@ export function getNodeExecutionMemoryWriteTails(node) {
|
|
|
64
65
|
}
|
|
65
66
|
const tc = task.taskConfiguration;
|
|
66
67
|
const profile = tc?.aiTaskProfile;
|
|
67
|
-
|
|
68
|
-
if (ws?.enabled === true) {
|
|
68
|
+
if (hasWebScopeAuthoring(profile)) {
|
|
69
69
|
tails.add('webContext');
|
|
70
70
|
}
|
|
71
71
|
const inputSynth = profile?.inputSynthesis;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { hasWebScopeAuthoring } from '../types/aiTaskProfile.js';
|
|
2
2
|
import { readTaskNodeInputsConfig } from '../runtime/readTaskNodeInputsConfig.js';
|
|
3
3
|
import { runScopedDataReader } from '../runtime/localSkills/scopedDataReader.js';
|
|
4
4
|
// ---------------------------------------------------------------------------
|
|
@@ -364,8 +364,8 @@ export function getNodeNarrixDiscovery(node) {
|
|
|
364
364
|
if (!narrix || typeof narrix !== 'object')
|
|
365
365
|
return null;
|
|
366
366
|
const n = narrix;
|
|
367
|
-
const
|
|
368
|
-
const enableWebScope =
|
|
367
|
+
const profile = task.taskConfiguration?.aiTaskProfile;
|
|
368
|
+
const enableWebScope = hasWebScopeAuthoring(profile);
|
|
369
369
|
return {
|
|
370
370
|
nodeId: node.id,
|
|
371
371
|
enabled: true,
|
|
@@ -374,13 +374,12 @@ export function getNodeNarrixDiscovery(node) {
|
|
|
374
374
|
narrativeTypeIds: Array.isArray(n.narrativeTypeIds) ? n.narrativeTypeIds : undefined,
|
|
375
375
|
webScope: {
|
|
376
376
|
enabled: enableWebScope,
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
enrichFromRaw: undefined,
|
|
377
|
+
...(typeof profile?.webQueryTemplate === 'string'
|
|
378
|
+
? { webQueryTemplate: profile.webQueryTemplate }
|
|
379
|
+
: {}),
|
|
380
|
+
...(Array.isArray(profile?.webQueryTemplates) && profile.webQueryTemplates.length > 0
|
|
381
|
+
? { webQueryTemplates: profile.webQueryTemplates }
|
|
382
|
+
: {}),
|
|
384
383
|
},
|
|
385
384
|
outputPaths: {
|
|
386
385
|
signals: 'executionMemory._narrix.scoping.signals',
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { CatalogBinding, CatalogRequestEntry, GraphDocumentMetadata, GraphEdge, GraphNode, GraphPredicate, GraphReadabilityKind } from '../types/refs.js';
|
|
2
|
-
import type { WebScopeQuestion } from '../types/narrix.js';
|
|
3
2
|
import type { ScopedDataReaderOutput, ScopedDataReaderPackOutput } from '../runtime/localSkills/scopedDataReader.js';
|
|
4
3
|
import type { LocalSkillKey } from '../runtime/localSkills/index.js';
|
|
5
|
-
export type { GraphEdge, GraphPredicate, GraphReadabilityKind,
|
|
4
|
+
export type { GraphEdge, GraphPredicate, GraphReadabilityKind, LocalSkillKey };
|
|
6
5
|
export type { ScopedDataReaderOutput, ScopedDataReaderPackOutput };
|
|
7
6
|
/**
|
|
8
7
|
* The scoping question for a single node: what it asks, where it reads its data from,
|
|
@@ -98,18 +97,10 @@ export type NodeNarrixDiscovery = {
|
|
|
98
97
|
/** Narrative type ids the engine focuses discovery on. */
|
|
99
98
|
narrativeTypeIds?: string[];
|
|
100
99
|
webScope: {
|
|
101
|
-
/** Whether
|
|
100
|
+
/** Whether a webQueryTemplate (or pack) is authored on aiTaskProfile. */
|
|
102
101
|
enabled: boolean;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
/** Web scope questions with stable ids and purposes. */
|
|
106
|
-
questions?: WebScopeQuestion[];
|
|
107
|
-
/** Dot-path to entity id in execution memory for web scope. */
|
|
108
|
-
entityIdPath?: string;
|
|
109
|
-
/** Dot-path to entity type in execution memory for web scope. */
|
|
110
|
-
entityTypePath?: string;
|
|
111
|
-
/** Whether CVE/vendor/product tokens are appended to the web-scope question from raw input. */
|
|
112
|
-
enrichFromRaw?: boolean;
|
|
102
|
+
webQueryTemplate?: string;
|
|
103
|
+
webQueryTemplates?: string[];
|
|
113
104
|
};
|
|
114
105
|
/** Fixed execution-memory paths where narrix writes its output. */
|
|
115
106
|
outputPaths: {
|
|
@@ -26,7 +26,7 @@ import { buildRunLog, extractLogxerCorrelationFromMetadata, extractTaskRunLogFro
|
|
|
26
26
|
import { setRuntimeObjectsLastJobId, summarizeRuntimeObjectsForPlayground } from "./runtimeObjects.js";
|
|
27
27
|
import { DebugLogAbstract, bindGraphEngineRunLogxer, clearGraphEngineRunLogxer, createGraphEngineLogxer, ensureGraphEngineLogxerOnRuntimeObjects, logGraphEngineErrorCode, patchGraphNodeLogContext, runGraphWithLogContext, traceExecutionMemory, } from "./graphEngineLogxer.js";
|
|
28
28
|
import { runWithAiTasksStackLogging } from "@exellix/ai-tasks";
|
|
29
|
-
import { nodePlanFromFinalizerPlan, patchNodePlanMainModelFromWire, resolveRunTaskNodePlan, } from "./runTaskNodePlan.js";
|
|
29
|
+
import { nodePlanFromFinalizerPlan, patchNodePlanMainModelFromWire, patchNodePlanRuntimePipeline, resolveRunTaskNodePlan, } from "./runTaskNodePlan.js";
|
|
30
30
|
import { assertHostJobId, newGraphRunTaskId } from "./graphRunIdentity.js";
|
|
31
31
|
import { resolveTaskKey } from "./resolveTaskKey.js";
|
|
32
32
|
import { buildPredicateEvalContextForNode, readExecutionVariableBuckets, seedGraphVariableBucketsFromRuntime, } from "./variables.js";
|
|
@@ -675,7 +675,6 @@ export function createExellixGraphRuntime(opts) {
|
|
|
675
675
|
? { ...input.node.taskConfiguration.narrix }
|
|
676
676
|
: undefined,
|
|
677
677
|
graphVariablesNarrix: jobVariables?.narrix,
|
|
678
|
-
aiTaskProfile: input.node?.taskConfiguration?.aiTaskProfile,
|
|
679
678
|
});
|
|
680
679
|
const metaTk = input.node?.taskConfiguration?.taskKind;
|
|
681
680
|
const taskKindForward = metaTk === "decision" || metaTk === "utility" || metaTk === "content" ? metaTk : undefined;
|
|
@@ -689,6 +688,11 @@ export function createExellixGraphRuntime(opts) {
|
|
|
689
688
|
if (!input.nodePlan && input.requireCompiledNodePlan !== true) {
|
|
690
689
|
runTaskNodePlan = patchNodePlanMainModelFromWire(runTaskNodePlan, wireModelConfig);
|
|
691
690
|
}
|
|
691
|
+
runTaskNodePlan = patchNodePlanRuntimePipeline({
|
|
692
|
+
plan: runTaskNodePlan,
|
|
693
|
+
resolvedNarrix: narrix ?? undefined,
|
|
694
|
+
taskConfiguration: input.node?.taskConfiguration,
|
|
695
|
+
});
|
|
692
696
|
const startedAt = Date.now();
|
|
693
697
|
const hasSynthesizedContextPreStep = runTaskNodePlan.executionUnits.some((u) => u.unitKind === "externalPreUtility" || u.unitKind === "pipelinePhase");
|
|
694
698
|
const hasExistingSynthesizedContext = execution != null &&
|
|
@@ -791,7 +795,6 @@ export function createExellixGraphRuntime(opts) {
|
|
|
791
795
|
executionMemory: executionMemoryForWire,
|
|
792
796
|
jobContext,
|
|
793
797
|
prevNodeId: input.prevNodeId,
|
|
794
|
-
narrix: narrix ?? undefined,
|
|
795
798
|
...extractRunTaskStrategyOverrides(input.node?.taskConfiguration),
|
|
796
799
|
outputValidation: outputValidationFromPlan ??
|
|
797
800
|
(input.node?.taskConfiguration?.aiTasksOutputValidation != null &&
|
|
@@ -11,13 +11,12 @@ import type { RunTaskRequest } from '@exellix/ai-tasks';
|
|
|
11
11
|
import type { GraphExecutionTraceV2, NodeExecutionPlan } from '@x12i/graphenix-executable-contracts';
|
|
12
12
|
import type { SmartInputConfig, XynthesizedMemory } from '../types/aiTasksDerivedTypes.js';
|
|
13
13
|
import type { Job } from '../types/refs.js';
|
|
14
|
-
import type { ResolvedNarrixWirePayload } from '../types/narrix.js';
|
|
15
14
|
/** Request/metadata keys that must never carry provider API secrets (env-only). */
|
|
16
15
|
export declare const FORBIDDEN_RUN_TASK_SECRET_KEYS: readonly ["openrouterApiKey", "OPENROUTER_API_KEY", "OPEN_ROUTER_KEY", "apiKey", "api_key", "openRouterApiKey"];
|
|
17
|
-
/** Reads task-node `taskConfiguration`
|
|
18
|
-
export declare function extractRunTaskStrategyOverrides(taskConfiguration: Record<string, unknown> | undefined | null): Partial<Pick<BuildAiTasksRunTaskRequestArgs, '
|
|
16
|
+
/** Reads task-node `taskConfiguration.inputStrategyKey` for `@exellix/ai-tasks` `RunTaskRequest`. */
|
|
17
|
+
export declare function extractRunTaskStrategyOverrides(taskConfiguration: Record<string, unknown> | undefined | null): Partial<Pick<BuildAiTasksRunTaskRequestArgs, 'inputStrategyKey'>>;
|
|
19
18
|
/** Optional `RunTaskRequest` fields commonly authored on task-node `taskConfiguration` (whitelist — closed merge order). */
|
|
20
|
-
export type RunTaskMetadataPassthrough = Partial<Pick<RunTaskRequest, '
|
|
19
|
+
export type RunTaskMetadataPassthrough = Partial<Pick<RunTaskRequest, 'aiScoping' | 'aiScopingOptions' | 'timeoutMs' | 'templateRenderOptions' | 'smartInputRenderOptions' | 'templateTokens' | 'aiEngineId' | 'sessionId' | 'agentType' | 'gatewayDiagnostics' | 'context' | 'knowledge' | 'executionStrategyCatalogItems'>>;
|
|
21
20
|
/**
|
|
22
21
|
* Whitelisted optional transport fields from task-node `taskConfiguration` for `@exellix/ai-tasks` ≥ 7.2.x
|
|
23
22
|
* (`RunSkillRequest` / `RunTaskRequest` extras not covered by {@link extractRunTaskStrategyOverrides}).
|
|
@@ -42,7 +41,6 @@ export type BuildAiTasksRunTaskRequestArgs = {
|
|
|
42
41
|
executionMemory?: Record<string, unknown>;
|
|
43
42
|
jobContext?: Record<string, unknown>;
|
|
44
43
|
prevNodeId?: string;
|
|
45
|
-
narrix?: ResolvedNarrixWirePayload;
|
|
46
44
|
outputValidation?: RunTaskRequest['outputValidation'];
|
|
47
45
|
diagnostics?: RunTaskRequest['diagnostics'];
|
|
48
46
|
identity?: Record<string, unknown>;
|
|
@@ -51,10 +49,7 @@ export type BuildAiTasksRunTaskRequestArgs = {
|
|
|
51
49
|
autoValidateDecisionOutput?: boolean;
|
|
52
50
|
/** Overrides default `resolveTaskTypeId(skillKey, nodeId, taskConfiguration)` e.g. engine strategy phases. */
|
|
53
51
|
taskTypeIdOverride?: string;
|
|
54
|
-
/** Usually from `taskConfiguration.narrixMode` via {@link extractRunTaskStrategyOverrides}. */
|
|
55
|
-
narrixMode?: RunTaskRequest['narrixMode'];
|
|
56
52
|
inputStrategyKey?: RunTaskRequest['inputStrategyKey'];
|
|
57
|
-
narrixInput?: RunTaskRequest['narrixInput'];
|
|
58
53
|
/** Required on every request for ai-tasks ≥ 7.1.x — use `[]` for plain MAIN. */
|
|
59
54
|
executionStrategies?: RunTaskRequest['executionStrategies'];
|
|
60
55
|
xynthesized?: XynthesizedMemory;
|
|
@@ -18,25 +18,17 @@ function assertNoSecretPassthrough(taskConfiguration, context) {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
/** Reads task-node `taskConfiguration`
|
|
21
|
+
/** Reads task-node `taskConfiguration.inputStrategyKey` for `@exellix/ai-tasks` `RunTaskRequest`. */
|
|
22
22
|
export function extractRunTaskStrategyOverrides(taskConfiguration) {
|
|
23
23
|
assertNoSecretPassthrough(taskConfiguration, 'extractRunTaskStrategyOverrides');
|
|
24
24
|
if (taskConfiguration == null || typeof taskConfiguration !== 'object' || Array.isArray(taskConfiguration))
|
|
25
25
|
return {};
|
|
26
26
|
const m = taskConfiguration;
|
|
27
27
|
const out = {};
|
|
28
|
-
const narrixMode = m.narrixMode;
|
|
29
|
-
if (typeof narrixMode === 'string' && narrixMode.trim() !== '') {
|
|
30
|
-
out.narrixMode = narrixMode.trim();
|
|
31
|
-
}
|
|
32
28
|
const inputStrategyKey = m.inputStrategyKey;
|
|
33
29
|
if (typeof inputStrategyKey === 'string' && inputStrategyKey.trim() !== '') {
|
|
34
30
|
out.inputStrategyKey = inputStrategyKey.trim();
|
|
35
31
|
}
|
|
36
|
-
const narrixInput = m.narrixInput;
|
|
37
|
-
if (narrixInput != null && typeof narrixInput === 'object' && !Array.isArray(narrixInput)) {
|
|
38
|
-
out.narrixInput = narrixInput;
|
|
39
|
-
}
|
|
40
32
|
return out;
|
|
41
33
|
}
|
|
42
34
|
/**
|
|
@@ -49,10 +41,6 @@ export function extractRunTaskMetadataPassthrough(taskConfiguration) {
|
|
|
49
41
|
return {};
|
|
50
42
|
const m = taskConfiguration;
|
|
51
43
|
const out = {};
|
|
52
|
-
const narrixScope = m.narrixScope;
|
|
53
|
-
if (narrixScope != null && typeof narrixScope === 'object' && !Array.isArray(narrixScope)) {
|
|
54
|
-
out.narrixScope = narrixScope;
|
|
55
|
-
}
|
|
56
44
|
const aiScoping = m.aiScoping;
|
|
57
45
|
if (Array.isArray(aiScoping)) {
|
|
58
46
|
out.aiScoping = aiScoping;
|
|
@@ -162,16 +150,13 @@ export function buildAiTasksRunTaskRequest(args) {
|
|
|
162
150
|
...(args.executionMemory != null ? { executionMemory: args.executionMemory } : {}),
|
|
163
151
|
...(args.jobContext != null ? { jobContext: args.jobContext } : {}),
|
|
164
152
|
...(args.prevNodeId != null && args.prevNodeId !== '' ? { prevNodeId: args.prevNodeId } : {}),
|
|
165
|
-
...(args.narrix != null ? { narrix: args.narrix } : {}),
|
|
166
153
|
...(args.outputValidation != null ? { outputValidation: args.outputValidation } : {}),
|
|
167
154
|
...(args.diagnostics != null ? { diagnostics: args.diagnostics } : {}),
|
|
168
155
|
...(args.identity != null ? { identity: args.identity } : {}),
|
|
169
156
|
...(args.executionMode != null ? { executionMode: args.executionMode } : {}),
|
|
170
157
|
...(args.taskKind != null ? { taskKind: args.taskKind } : {}),
|
|
171
158
|
...(args.autoValidateDecisionOutput !== undefined ? { autoValidateDecisionOutput: args.autoValidateDecisionOutput } : {}),
|
|
172
|
-
...(args.narrixMode != null ? { narrixMode: args.narrixMode } : {}),
|
|
173
159
|
...(args.inputStrategyKey != null ? { inputStrategyKey: args.inputStrategyKey } : {}),
|
|
174
|
-
...(args.narrixInput != null ? { narrixInput: args.narrixInput } : {}),
|
|
175
160
|
executionStrategies,
|
|
176
161
|
...(args.xynthesized != null ? { xynthesized: args.xynthesized } : {}),
|
|
177
162
|
...(smartInputForward != null ? { smartInput: smartInputForward } : {}),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Builds the `RunTaskRequest.taskConfiguration` blob for
|
|
3
|
-
*
|
|
4
|
-
* `
|
|
2
|
+
* Builds the `RunTaskRequest.taskConfiguration` blob for legacy compile-at-invoke (no `nodePlan`).
|
|
3
|
+
* With graphenix node plans, narrix / narrixMode / narrixInput / narrixScope live on
|
|
4
|
+
* `nodePlan.invokeContract.pipeline` instead — see {@link patchNodePlanRuntimePipeline}.
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
7
|
* Subset of node `taskConfiguration` forwarded on `RunTaskRequest.taskConfiguration` for ai-tasks compile.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Builds the `RunTaskRequest.taskConfiguration` blob for
|
|
3
|
-
*
|
|
4
|
-
* `
|
|
2
|
+
* Builds the `RunTaskRequest.taskConfiguration` blob for legacy compile-at-invoke (no `nodePlan`).
|
|
3
|
+
* With graphenix node plans, narrix / narrixMode / narrixInput / narrixScope live on
|
|
4
|
+
* `nodePlan.invokeContract.pipeline` instead — see {@link patchNodePlanRuntimePipeline}.
|
|
5
5
|
*/
|
|
6
6
|
const RUN_TASK_LIFTED_TASK_CONFIGURATION_KEYS = new Set([
|
|
7
7
|
'taskTypeId',
|
|
@@ -10,10 +10,6 @@ const RUN_TASK_LIFTED_TASK_CONFIGURATION_KEYS = new Set([
|
|
|
10
10
|
'modelConfig',
|
|
11
11
|
'llmCall',
|
|
12
12
|
'timeoutMs',
|
|
13
|
-
'narrix',
|
|
14
|
-
'narrixMode',
|
|
15
|
-
'narrixInput',
|
|
16
|
-
'narrixScope',
|
|
17
13
|
'inputStrategyKey',
|
|
18
14
|
'aiTasksOutputValidation',
|
|
19
15
|
'taskKind',
|
|
@@ -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;
|