@exellix/graph-engine 8.2.0 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.env.example CHANGED
@@ -1,3 +1,16 @@
1
- # ============================================
2
- # nx-mongo Configuration
3
- # ============================================
1
+ # Graph-engine host environment (copy to .env and fill in secrets)
2
+
3
+ # Mongo — job runs (@exellix/exellix-db) and Memorix entity/event stores
4
+ MONGO_URI=mongodb://localhost:27017
5
+
6
+ # Memorix databases (bridged to Xronox via applyMemorixEnvBridgeToProcess)
7
+ MEMORIX_ENTITIES_DB=memorix-entities
8
+ MEMORIX_EVENTS_DB=memorix-events
9
+
10
+ # Catalox — descriptor resolution for Memorix read/write local skills
11
+ CATALOX_APP_ID=your-app-id
12
+ CATALOX_STORE_ID=your-store-id
13
+
14
+ # LLM keys — required when graphs include ai-tasks nodes
15
+ # OPENROUTER_API_KEY=
16
+ # GEMINI_API_KEY=
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## 8.4.0 — Graphenix 2.5.0 coordinated release
4
+
5
+ ### Changed
6
+
7
+ - **`@x12i/graphenix-*` ^2.5.0** — CRS-FRS-003 `jobMemory.context` on graph model; authoring validation + plan-compiler preservation.
8
+ - **`check:no-legacy`** — floors graphenix-core/plan-compiler/plan-format ≥2.5.0.
9
+
10
+ ## 8.3.0 — Graphenix 2.4.0 PRE synthesis input contract alignment
11
+
12
+ ### Changed
13
+
14
+ - **`@x12i/graphenix-*` ^2.4.0** — PRE synthesis reads decoupled from `inputsConfig` / `smartInput`; empty `memoryPaths` / `reads` valid (runtime default trio).
15
+ - **`@exellix/ai-tasks` ^10.0.4**, **`@exellix/ai-skills` ^6.12.0** — PRE path resolver + default `jobVariables`, `taskVariables`, `input` reads.
16
+ - **`check:no-legacy`** — floors ai-tasks ≥10.0.4, ai-skills ≥6.12.0, graphenix-core/plan-compiler/plan-format ≥2.4.0; rejects `executionMemory.input` in fixture `smartInput.paths`.
17
+
18
+ ### Added
19
+
20
+ - **`assertCanonicalTaskNode`** rejects `executionMemory.input` in `smartInput.paths` and `inputSynthesis.sources`.
21
+
22
+ ### Fixed
23
+
24
+ - **`graph-qcrbz6t-pre-synthesis` fixture** — removed legacy `smartInput: executionMemory.input` on synthesis task nodes (matches studio Part 2 target export).
25
+ - **Integration tests** — expect PRE synthesis unit `memoryPaths: []`, `reads: []`; no `smartInput` on wire when absent.
26
+
27
+ ### Downstream
28
+
29
+ - Studio handoff split: `temp/downstream/graphs-studio/CRS-FRS-005-PART-1` (UI housekeeping) and `PART-2` (PRE emission).
30
+
3
31
  ## 8.1.12 — Graphenix 2.1.0 path-only synthesis release
4
32
 
5
33
  ### Changed
@@ -119,4 +119,5 @@ export type { CreatePlaygroundReporterOptions, PlaygroundDebugArtifact, Playgrou
119
119
  export { getNodeScopingQuestion, getNodeMemoryShape, getNodeNarrixDiscovery, fetchNodeScopingData, inspectNode, resolveNodeSkillKey, getGraphNodes, getGraphCatalogs, inspectGraph, collectPredicatePaths, executionMemoryPathTail, executionMemoryTailsMatch, getNodeExecutionMemoryWriteTails, getNodeControlDependencies, getNodeSideEffects, inspectFinalizer, inspectNodeContract, inspectGraphContracts, EXELLIX_VIRTUAL_GRAPH_ENTRY_NODE_ID, EXELLIX_VIRTUAL_GRAPH_RESPONSE_NODE_ID, EXELLIX_VIRTUAL_BOUNDARY_NODE_METADATA_KEY, EXELLIX_VIRTUAL_BOUNDARY_EDGE_FLAG_KEY, getVirtualGraphEntryLayer, getVirtualGraphResponseLayer, materializeVirtualBoundaryDiagram, stripMaterializedVirtualBoundaryDiagram, validateCatalogPlanning, isCatalogBinding, isCatalogRequestEntry, inspectGraphModelSelection, } from './inspection/index.js';
120
120
  export type { GraphModelSelectionInspection, NodeModelSelection, ModelSelectionSource, NodeScopingQuestion, NodeScopeSource, NodeScopeTarget, NodeScopingData, NodeMemoryShape, MemoryPath, NodeNarrixDiscovery, NodeInspection, GraphInspection, NodeIOEdge, GraphCatalogs, CatalogBindingSummary, CatalogPlanningValidationIssue, GraphVirtualIO, GraphVirtualIONode, GraphVirtualIOEdge, GraphVirtualIONodeRole, VirtualGraphEntryLayer, VirtualGraphResponseLayer, MaterializeVirtualBoundaryDiagramOptions, MaterializedVirtualBoundaryDiagram, MaterializedVirtualBoundaryDiagramMeta, InspectNodeContractOptions, LocalSkillKey, NodeExecutionType, FactProvenance, ProvenancedSection, NodeInputBindingEntry, ScopedDataDependency, NodeInputContract, ExecutionMemoryWriteSpec, NodeOutputContract, NodeSideEffects, ControlBranchEntry, NodeControlContract, NodeValidationContract, FinalizerContractInspection, NodeContractInspection, GraphContractsInspection, } from './inspection/index.js';
121
121
  export type { NarrixPreProcessorConfig, WebScopeQuestion, LocalTaskHandler, LocalTaskContext } from './types/narrix.js';
122
+ export { shutdownMemorixRuntime } from './runtime/localSkills/memorixRuntime.js';
122
123
  export type { ScopedDataReaderConfig, ScopedDataReaderOutput, ScopedDataReaderPackOutput, ScopedAnswerAssemblerConfig, ScopedAnswerAssemblerOutput, ScopedAnswerWriterConfig, ScopedAnswerWriterOutput, } from './runtime/localSkills/index.js';
package/dist/src/index.js CHANGED
@@ -87,4 +87,5 @@ export { composeEventEmitters } from './runtime/events.js';
87
87
  export { createPlaygroundReporter } from './playground/index.js';
88
88
  // Graph Inspection API
89
89
  export { getNodeScopingQuestion, getNodeMemoryShape, getNodeNarrixDiscovery, fetchNodeScopingData, inspectNode, resolveNodeSkillKey, getGraphNodes, getGraphCatalogs, inspectGraph, collectPredicatePaths, executionMemoryPathTail, executionMemoryTailsMatch, getNodeExecutionMemoryWriteTails, getNodeControlDependencies, getNodeSideEffects, inspectFinalizer, inspectNodeContract, inspectGraphContracts, EXELLIX_VIRTUAL_GRAPH_ENTRY_NODE_ID, EXELLIX_VIRTUAL_GRAPH_RESPONSE_NODE_ID, EXELLIX_VIRTUAL_BOUNDARY_NODE_METADATA_KEY, EXELLIX_VIRTUAL_BOUNDARY_EDGE_FLAG_KEY, getVirtualGraphEntryLayer, getVirtualGraphResponseLayer, materializeVirtualBoundaryDiagram, stripMaterializedVirtualBoundaryDiagram, validateCatalogPlanning, isCatalogBinding, isCatalogRequestEntry, inspectGraphModelSelection, } from './inspection/index.js';
90
+ export { shutdownMemorixRuntime } from './runtime/localSkills/memorixRuntime.js';
90
91
  // Web context rendering — consume execution.webContext → markdown for prompts (Layer 04)
@@ -6,6 +6,7 @@ import { getStructuredDataFilterPathViolations } from './dataFiltersEvaluation.j
6
6
  import { conditionWhenSignature, countDefaultModelConfigCases, isEmptyConditionWhen, isGraphAiModelConfig, isModelConfigSelection, isPartialGraphAiModelConfig, } from './modelConfigSelection.js';
7
7
  import { assertGraphAiProfileNameString } from './graphAiModelConfig.js';
8
8
  import { assertCanonicalGraphDocumentMetadata } from './graphModelStudioSeparation.js';
9
+ import { collectSmartInputPaths } from './smartInputPaths.js';
9
10
  /** Top-level keys permitted on a canonical exellix-graph executable graph JSON document. */
10
11
  export const CANONICAL_GRAPH_TOP_LEVEL_KEYS = [
11
12
  'id',
@@ -544,7 +545,7 @@ export function assertCanonicalTaskNode(node, context, options) {
544
545
  }
545
546
  }
546
547
  if (legacyPreInputPaths.length > 0) {
547
- throw new ExellixGraphError(ExellixGraphErrorCode.NON_CANONICAL_TASK_NODE, `Task node "${String(node.id)}": ${legacyPreInputPaths.join(', ')} is not allowed — synthesis memory scope is path-driven via inputsConfig and smartInput.paths only; template key is skill-catalog-only.`, { jobId: context?.jobId, graphId: context?.graphId, nodeId: String(node.id) });
548
+ throw new ExellixGraphError(ExellixGraphErrorCode.NON_CANONICAL_TASK_NODE, `Task node "${String(node.id)}": ${legacyPreInputPaths.join(', ')} is not allowed — use optional taskConfiguration.aiTaskProfile.inputSynthesis.sources for explicit PRE read scope; otherwise runtime applies the platform default trio (jobVariables, taskVariables, input). Template key is skill-catalog-only.`, { jobId: context?.jobId, graphId: context?.graphId, nodeId: String(node.id) });
548
549
  }
549
550
  }
550
551
  const narrixTc = tc && isPlainObject(tc.narrix) ? tc.narrix : undefined;
@@ -593,6 +594,24 @@ export function assertCanonicalTaskNode(node, context, options) {
593
594
  }
594
595
  }
595
596
  }
597
+ for (const path of collectSmartInputPaths(taskNode)) {
598
+ if (path === 'executionMemory.input' || path.startsWith('executionMemory.input.')) {
599
+ throw new ExellixGraphError(ExellixGraphErrorCode.NON_CANONICAL_TASK_NODE, `Task node "${String(node.id)}": smartInput.paths must not use executionMemory.input — use path "input" for invoke payload or omit smartInput on synthesis nodes (runtime PRE default reads apply).`, { jobId: context?.jobId, graphId: context?.graphId, nodeId: String(node.id) });
600
+ }
601
+ }
602
+ const synthesisSources = inputSynthesis?.sources;
603
+ if (Array.isArray(synthesisSources)) {
604
+ for (const entry of synthesisSources) {
605
+ const path = typeof entry === 'string'
606
+ ? entry.trim()
607
+ : isPlainObject(entry) && typeof entry.path === 'string'
608
+ ? entry.path.trim()
609
+ : '';
610
+ if (path === 'executionMemory.input' || path.startsWith('executionMemory.input.')) {
611
+ throw new ExellixGraphError(ExellixGraphErrorCode.NON_CANONICAL_TASK_NODE, `Task node "${String(node.id)}": inputSynthesis.sources must not use executionMemory.input — use path "input" for invoke payload.`, { jobId: context?.jobId, graphId: context?.graphId, nodeId: String(node.id) });
612
+ }
613
+ }
614
+ }
596
615
  }
597
616
  /**
598
617
  * Throws {@link ExellixGraphError} when the value is not a canonical graph document
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exellix/graph-engine",
3
- "version": "8.2.0",
3
+ "version": "8.4.0",
4
4
  "type": "module",
5
5
  "description": "Graph executor SDK",
6
6
  "main": "dist/src/index.js",
@@ -52,27 +52,27 @@
52
52
  "access": "public"
53
53
  },
54
54
  "dependencies": {
55
- "@exellix/ai-skills": "^6.11.0",
56
- "@exellix/ai-tasks": "^10.0.3",
55
+ "@exellix/ai-skills": "^6.12.0",
56
+ "@exellix/ai-tasks": "^10.0.4",
57
57
  "@x12i/activix": "^8.6.3",
58
58
  "@x12i/catalox": "^5.9.7",
59
59
  "@x12i/env": "^4.0.1",
60
60
  "@x12i/funcx": "^4.9.13",
61
61
  "@x12i/graphenix": "^2.5.0",
62
- "@x12i/graphenix-authoring-format": "^2.3.0",
63
- "@x12i/graphenix-core": "^2.3.0",
64
- "@x12i/graphenix-executable-contracts": "^2.3.0",
65
- "@x12i/graphenix-executable-format": "^2.3.0",
66
- "@x12i/graphenix-execute-envelope": "^2.3.0",
62
+ "@x12i/graphenix-authoring-format": "^2.5.0",
63
+ "@x12i/graphenix-core": "^2.5.0",
64
+ "@x12i/graphenix-executable-contracts": "^2.5.0",
65
+ "@x12i/graphenix-executable-format": "^2.5.0",
66
+ "@x12i/graphenix-execute-envelope": "^2.5.0",
67
67
  "@x12i/graphenix-format": "^2.0.0",
68
- "@x12i/graphenix-plan-compiler": "^2.3.0",
69
- "@x12i/graphenix-plan-format": "^2.3.0",
70
- "@x12i/graphenix-task-node-format": "^2.3.0",
71
- "@x12i/graphenix-trace-format": "^2.3.0",
68
+ "@x12i/graphenix-plan-compiler": "^2.5.0",
69
+ "@x12i/graphenix-plan-format": "^2.5.0",
70
+ "@x12i/graphenix-task-node-format": "^2.5.0",
71
+ "@x12i/graphenix-trace-format": "^2.5.0",
72
72
  "@x12i/logxer": "^4.6.0",
73
- "@x12i/memorix-descriptors": "^1.6.0",
74
- "@x12i/memorix-retrieval": "^1.11.2",
75
- "@x12i/memorix-writer": "^1.0.0",
73
+ "@x12i/memorix-descriptors": "1.7.0",
74
+ "@x12i/memorix-retrieval": "1.12.0",
75
+ "@x12i/memorix-writer": "1.1.0",
76
76
  "@x12i/rendrix": "^4.3.0",
77
77
  "@x12i/runx": "^1.3.2"
78
78
  },