@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.
Files changed (33) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +3 -21
  3. package/dist/src/index.d.ts +6 -5
  4. package/dist/src/index.js +3 -2
  5. package/dist/src/inspection/contractInspection.js +7 -16
  6. package/dist/src/inspection/controlInspection.js +2 -2
  7. package/dist/src/inspection/nodeInspection.js +9 -10
  8. package/dist/src/inspection/types.d.ts +4 -13
  9. package/dist/src/runtime/ExellixGraphRuntime.js +6 -3
  10. package/dist/src/runtime/buildAiTasksRunTaskRequest.d.ts +3 -8
  11. package/dist/src/runtime/buildAiTasksRunTaskRequest.js +1 -16
  12. package/dist/src/runtime/buildRunTaskTaskConfigurationForward.d.ts +3 -3
  13. package/dist/src/runtime/buildRunTaskTaskConfigurationForward.js +3 -7
  14. package/dist/src/runtime/executionMatrixHost.d.ts +6 -17
  15. package/dist/src/runtime/executionMatrixHost.js +8 -48
  16. package/dist/src/runtime/graphModelStudioSeparation.d.ts +4 -2
  17. package/dist/src/runtime/graphModelStudioSeparation.js +11 -27
  18. package/dist/src/runtime/resolveNarrixForTaskNode.d.ts +3 -7
  19. package/dist/src/runtime/resolveNarrixForTaskNode.js +4 -7
  20. package/dist/src/runtime/runTaskNodePlan.d.ts +10 -0
  21. package/dist/src/runtime/runTaskNodePlan.js +132 -0
  22. package/dist/src/runtime/taskNodeMainReadiness.js +1 -12
  23. package/dist/src/runtime/taskNodeRunTaskPreflight.js +6 -3
  24. package/dist/src/runtime/validateCanonicalGraphDocument.js +6 -7
  25. package/dist/src/types/aiTaskProfile.d.ts +10 -15
  26. package/dist/src/types/aiTaskProfile.js +11 -3
  27. package/dist/src/types/narrix.d.ts +33 -24
  28. package/dist/src/types/refs.d.ts +1 -57
  29. package/dist/src/types/taskNodeConfiguration.d.ts +3 -2
  30. package/docs/handoff/graphs-studio-graphenix-2.7.3.md +13 -0
  31. package/package.json +18 -17
  32. package/dist/src/runtime/applyAiTaskProfileWebScopingToNarrix.d.ts +0 -15
  33. 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 Inputs
557
+ ## Graph Entry
558
558
 
559
- Graph JSON can declare the semantic type of input it is designed to work with under `metadata.graphEntry.inputs`. This is part of the graph object itself and is intended for authors, catalogs, dashboards, and future validators; the runtime does not validate or coerce it today.
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
- Standard `kind` values are `record`, `query`, `user-input`, `content`, `metadata`, and `execution`. Use multiple entries for combinations, for example a graph that needs both a raw record and a user question. Paths are relative to the merged `execution` object, so `input` maps to `GraphRuntimeObject.executionMemory.input` after `runtime.input` is mirrored.
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
 
@@ -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, AiTaskProfileWebScoping, AiTaskProfileInputSynthesis, } from './types/aiTaskProfile.js';
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, GraphEntryExecutionInputSpec, GraphEntryInputKind, GraphEntryInputSpecBase, GraphEntryInputSpec, GraphEntryValueInputKind, GraphEntryValueInputSpec, 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
+ 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, getGraphEntryEmptyInputPathViolations, } from './runtime/graphModelStudioSeparation.js';
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, WebScopeQuestion, LocalTaskHandler, LocalTaskContext } from './types/narrix.js';
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, getGraphEntryEmptyInputPathViolations, } from './runtime/graphModelStudioSeparation.js';
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 { isLocalSkillKey } from '../runtime/localSkills/index.js';
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
- entityIdPath: narrixDisc.webScope.entityIdPath,
221
- entityTypePath: narrixDisc.webScope.entityTypePath,
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 (narrixCfg?.enableWebScope === true) {
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.webScopingexecuteNode (runtime-known)',
299
+ source: 'taskConfiguration.aiTaskProfile.webQueryTemplatePRE 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
- const ws = web?.webScoping;
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
- const ws = profile?.webScoping;
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 { mapAiTaskProfileQuestionsToWebScopeQuestions } from '../runtime/applyAiTaskProfileWebScopingToNarrix.js';
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 web = task.taskConfiguration?.aiTaskProfile?.webScoping;
368
- const enableWebScope = n.enableWebScope === true || web?.enabled === true;
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
- forced: undefined,
378
- questions: Array.isArray(web?.questions) && web.questions.length > 0
379
- ? mapAiTaskProfileQuestionsToWebScopeQuestions(web.questions)
380
- : undefined,
381
- entityIdPath: undefined,
382
- entityTypePath: undefined,
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, WebScopeQuestion, LocalSkillKey };
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 web scoping is enabled. */
100
+ /** Whether a webQueryTemplate (or pack) is authored on aiTaskProfile. */
102
101
  enabled: boolean;
103
- /** When true, skips DB short-circuit and always fetches from web. */
104
- forced?: boolean;
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` keys forwarded to `@exellix/ai-tasks` `RunTaskRequest` (runtime strategy / Narrix wiring). */
18
- export declare function extractRunTaskStrategyOverrides(taskConfiguration: Record<string, unknown> | undefined | null): Partial<Pick<BuildAiTasksRunTaskRequestArgs, 'narrixMode' | 'inputStrategyKey' | 'narrixInput'>>;
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, 'narrixScope' | 'aiScoping' | 'aiScopingOptions' | 'timeoutMs' | 'templateRenderOptions' | 'smartInputRenderOptions' | 'templateTokens' | 'aiEngineId' | 'sessionId' | 'agentType' | 'gatewayDiagnostics' | 'context' | 'knowledge' | 'executionStrategyCatalogItems'>>;
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` keys forwarded to `@exellix/ai-tasks` `RunTaskRequest` (runtime strategy / Narrix wiring). */
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 `@exellix/ai-tasks` ≥ 7.7 compile-at-invoke.
3
- * Root-level fields already lifted by graph-engine are omitted; compile-only authoring (e.g.
4
- * `aiTaskStrategies`, `aiTaskProfile`) remains on the blob.
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 `@exellix/ai-tasks` ≥ 7.7 compile-at-invoke.
3
- * Root-level fields already lifted by graph-engine are omitted; compile-only authoring (e.g.
4
- * `aiTaskStrategies`, `aiTaskProfile`) remains on the blob.
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, GraphEntryExecutionInputSpec, Job } from '../types/refs.js';
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
- * Builds an initial `execution` object from `metadata.graphEntry.inputs` for **value** kinds only.
47
- * `kind: "execution"` entries are skipped (see return value); the host must merge source executions
48
- * using `graphId` / `metadataFilter` before calling `executeGraph`.
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(graphEntry: GraphEntryContract | undefined, sources?: BuildExecutionSeedSources): BuildExecutionSeedResult;
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, writeByPath } from './pathExpr.js';
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
- * Builds an initial `execution` object from `metadata.graphEntry.inputs` for **value** kinds only.
40
- * `kind: "execution"` entries are skipped (see return value); the host must merge source executions
41
- * using `graphId` / `metadataFilter` before calling `executeGraph`.
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(graphEntry, sources = {}) {
44
- const execution = {};
45
- const appliedPaths = [];
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;