@decaf-ts/integrations 0.3.1 → 0.3.3
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/dist/integrations.cjs +1 -1
- package/lib/cjs/graph/constants.cjs +94 -0
- package/lib/cjs/graph/constants.cjs.map +1 -0
- package/lib/cjs/graph/decorators.cjs +4 -0
- package/lib/cjs/graph/decorators.cjs.map +1 -0
- package/lib/cjs/graph/errors/GraphCycleError.cjs +20 -0
- package/lib/cjs/graph/errors/GraphCycleError.cjs.map +1 -0
- package/lib/cjs/graph/errors/GraphExecutionError.cjs +27 -0
- package/lib/cjs/graph/errors/GraphExecutionError.cjs.map +1 -0
- package/lib/cjs/graph/errors/GraphInputError.cjs +20 -0
- package/lib/cjs/graph/errors/GraphInputError.cjs.map +1 -0
- package/lib/cjs/graph/errors/GraphLoopLimitError.cjs +20 -0
- package/lib/cjs/graph/errors/GraphLoopLimitError.cjs.map +1 -0
- package/lib/cjs/graph/errors/GraphPinningError.cjs +20 -0
- package/lib/cjs/graph/errors/GraphPinningError.cjs.map +1 -0
- package/lib/cjs/graph/errors/GraphPortError.cjs +20 -0
- package/lib/cjs/graph/errors/GraphPortError.cjs.map +1 -0
- package/lib/cjs/graph/errors/GraphStoreError.cjs +20 -0
- package/lib/cjs/graph/errors/GraphStoreError.cjs.map +1 -0
- package/lib/cjs/graph/errors/GraphTopologyError.cjs +20 -0
- package/lib/cjs/graph/errors/GraphTopologyError.cjs.map +1 -0
- package/lib/cjs/graph/errors/index.cjs +31 -0
- package/lib/cjs/graph/errors/index.cjs.map +1 -0
- package/lib/cjs/graph/events/GraphExecutionEvent.cjs +4 -0
- package/lib/cjs/graph/events/GraphExecutionEvent.cjs.map +1 -0
- package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs +40 -0
- package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs.map +1 -0
- package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs +37 -0
- package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs.map +1 -0
- package/lib/cjs/graph/events/GraphExecutionObserver.cjs +4 -0
- package/lib/cjs/graph/events/GraphExecutionObserver.cjs.map +1 -0
- package/lib/cjs/graph/events/index.cjs +27 -0
- package/lib/cjs/graph/events/index.cjs.map +1 -0
- package/lib/cjs/graph/execution/GraphExecutionContext.cjs +79 -0
- package/lib/cjs/graph/execution/GraphExecutionContext.cjs.map +1 -0
- package/lib/cjs/graph/execution/GraphExecutionEngine.cjs +405 -0
- package/lib/cjs/graph/execution/GraphExecutionEngine.cjs.map +1 -0
- package/lib/cjs/graph/execution/GraphExecutionFrame.cjs +32 -0
- package/lib/cjs/graph/execution/GraphExecutionFrame.cjs.map +1 -0
- package/lib/cjs/graph/execution/GraphExecutionResult.cjs +30 -0
- package/lib/cjs/graph/execution/GraphExecutionResult.cjs.map +1 -0
- package/lib/cjs/graph/execution/GraphNodeExecutor.cjs +4 -0
- package/lib/cjs/graph/execution/GraphNodeExecutor.cjs.map +1 -0
- package/lib/cjs/graph/execution/index.cjs +28 -0
- package/lib/cjs/graph/execution/index.cjs.map +1 -0
- package/lib/cjs/graph/index.cjs +74 -0
- package/lib/cjs/graph/index.cjs.map +1 -0
- package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs +84 -0
- package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs.map +1 -0
- package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs +63 -0
- package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs.map +1 -0
- package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs +16 -0
- package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs.map +1 -0
- package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs +76 -0
- package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs.map +1 -0
- package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs +77 -0
- package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs.map +1 -0
- package/lib/cjs/graph/loops/index.cjs +28 -0
- package/lib/cjs/graph/loops/index.cjs.map +1 -0
- package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs +28 -0
- package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs.map +1 -0
- package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs +20 -0
- package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs.map +1 -0
- package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs +34 -0
- package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs.map +1 -0
- package/lib/cjs/graph/pinning/GraphPinningService.cjs +191 -0
- package/lib/cjs/graph/pinning/GraphPinningService.cjs.map +1 -0
- package/lib/cjs/graph/pinning/index.cjs +27 -0
- package/lib/cjs/graph/pinning/index.cjs.map +1 -0
- package/lib/cjs/graph/planning/GraphExecutionPlan.cjs +4 -0
- package/lib/cjs/graph/planning/GraphExecutionPlan.cjs.map +1 -0
- package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs +4 -0
- package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs.map +1 -0
- package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs +4 -0
- package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs.map +1 -0
- package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs +4 -0
- package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs.map +1 -0
- package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs +197 -0
- package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs.map +1 -0
- package/lib/cjs/graph/planning/GraphRelationResolver.cjs +172 -0
- package/lib/cjs/graph/planning/GraphRelationResolver.cjs.map +1 -0
- package/lib/cjs/graph/planning/GraphTopology.cjs +57 -0
- package/lib/cjs/graph/planning/GraphTopology.cjs.map +1 -0
- package/lib/cjs/graph/planning/index.cjs +30 -0
- package/lib/cjs/graph/planning/index.cjs.map +1 -0
- package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs +44 -0
- package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs.map +1 -0
- package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs +27 -0
- package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs.map +1 -0
- package/lib/cjs/graph/registry/index.cjs +25 -0
- package/lib/cjs/graph/registry/index.cjs.map +1 -0
- package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs +53 -0
- package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs.map +1 -0
- package/lib/cjs/graph/snapshots/index.cjs +24 -0
- package/lib/cjs/graph/snapshots/index.cjs.map +1 -0
- package/lib/cjs/graph/store/GraphCachedValue.cjs +4 -0
- package/lib/cjs/graph/store/GraphCachedValue.cjs.map +1 -0
- package/lib/cjs/graph/store/GraphValueKey.cjs +4 -0
- package/lib/cjs/graph/store/GraphValueKey.cjs.map +1 -0
- package/lib/cjs/graph/store/GraphValueStore.cjs +76 -0
- package/lib/cjs/graph/store/GraphValueStore.cjs.map +1 -0
- package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs +4 -0
- package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs.map +1 -0
- package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs +69 -0
- package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs.map +1 -0
- package/lib/cjs/graph/store/index.cjs +28 -0
- package/lib/cjs/graph/store/index.cjs.map +1 -0
- package/lib/cjs/graph/types.cjs +4 -0
- package/lib/cjs/graph/types.cjs.map +1 -0
- package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs +33 -0
- package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs.map +1 -0
- package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs +58 -0
- package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs.map +1 -0
- package/lib/cjs/graph/validation/GraphValueValidator.cjs +52 -0
- package/lib/cjs/graph/validation/GraphValueValidator.cjs.map +1 -0
- package/lib/cjs/graph/validation/index.cjs +26 -0
- package/lib/cjs/graph/validation/index.cjs.map +1 -0
- package/lib/cjs/index.cjs +3 -3
- package/lib/cjs/keycloak/services/KeycloakAuthService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakAuthService.cjs.map +1 -1
- package/lib/cjs/keycloak/services/KeycloakClientService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakClientService.cjs.map +1 -1
- package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs.map +1 -1
- package/lib/cjs/keycloak/services/KeycloakRealmService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakRealmService.cjs.map +1 -1
- package/lib/cjs/keycloak/services/KeycloakRoleService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakRoleService.cjs.map +1 -1
- package/lib/cjs/keycloak/services/KeycloakService.cjs +16 -9
- package/lib/cjs/keycloak/services/KeycloakService.cjs.map +1 -1
- package/lib/cjs/keycloak/services/KeycloakUserService.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakUserService.cjs.map +1 -1
- package/lib/cjs/kibana/services/KibanaAuthService.cjs +3 -3
- package/lib/cjs/kibana/services/KibanaAuthService.cjs.map +1 -1
- package/lib/cjs/kibana/services/KibanaDashboardService.cjs +3 -3
- package/lib/cjs/kibana/services/KibanaDashboardService.cjs.map +1 -1
- package/lib/cjs/kibana/services/KibanaDataViewService.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaDataViewService.cjs.map +1 -1
- package/lib/cjs/kibana/services/KibanaRoleService.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaRoleService.cjs.map +1 -1
- package/lib/cjs/kibana/services/KibanaService.cjs +16 -9
- package/lib/cjs/kibana/services/KibanaService.cjs.map +1 -1
- package/lib/cjs/kibana/services/KibanaSpaceService.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaSpaceService.cjs.map +1 -1
- package/lib/cjs/kibana/services/KibanaUserService.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaUserService.cjs.map +1 -1
- package/lib/esm/graph/constants.js +106 -0
- package/lib/esm/graph/constants.js.map +1 -0
- package/lib/esm/graph/decorators.js +2 -0
- package/lib/esm/graph/decorators.js.map +1 -0
- package/lib/esm/graph/errors/GraphCycleError.js +15 -0
- package/lib/esm/graph/errors/GraphCycleError.js.map +1 -0
- package/lib/esm/graph/errors/GraphExecutionError.js +22 -0
- package/lib/esm/graph/errors/GraphExecutionError.js.map +1 -0
- package/lib/esm/graph/errors/GraphInputError.js +15 -0
- package/lib/esm/graph/errors/GraphInputError.js.map +1 -0
- package/lib/esm/graph/errors/GraphLoopLimitError.js +15 -0
- package/lib/esm/graph/errors/GraphLoopLimitError.js.map +1 -0
- package/lib/esm/graph/errors/GraphPinningError.js +15 -0
- package/lib/esm/graph/errors/GraphPinningError.js.map +1 -0
- package/lib/esm/graph/errors/GraphPortError.js +15 -0
- package/lib/esm/graph/errors/GraphPortError.js.map +1 -0
- package/lib/esm/graph/errors/GraphStoreError.js +15 -0
- package/lib/esm/graph/errors/GraphStoreError.js.map +1 -0
- package/lib/esm/graph/errors/GraphTopologyError.js +15 -0
- package/lib/esm/graph/errors/GraphTopologyError.js.map +1 -0
- package/lib/esm/graph/errors/index.js +14 -0
- package/lib/esm/graph/errors/index.js.map +1 -0
- package/lib/esm/graph/events/GraphExecutionEvent.js +2 -0
- package/lib/esm/graph/events/GraphExecutionEvent.js.map +1 -0
- package/lib/esm/graph/events/GraphExecutionEventEmitter.js +35 -0
- package/lib/esm/graph/events/GraphExecutionEventEmitter.js.map +1 -0
- package/lib/esm/graph/events/GraphExecutionEventFactory.js +32 -0
- package/lib/esm/graph/events/GraphExecutionEventFactory.js.map +1 -0
- package/lib/esm/graph/events/GraphExecutionObserver.js +2 -0
- package/lib/esm/graph/events/GraphExecutionObserver.js.map +1 -0
- package/lib/esm/graph/events/index.js +10 -0
- package/lib/esm/graph/events/index.js.map +1 -0
- package/lib/esm/graph/execution/GraphExecutionContext.js +74 -0
- package/lib/esm/graph/execution/GraphExecutionContext.js.map +1 -0
- package/lib/esm/graph/execution/GraphExecutionEngine.js +400 -0
- package/lib/esm/graph/execution/GraphExecutionEngine.js.map +1 -0
- package/lib/esm/graph/execution/GraphExecutionFrame.js +27 -0
- package/lib/esm/graph/execution/GraphExecutionFrame.js.map +1 -0
- package/lib/esm/graph/execution/GraphExecutionResult.js +26 -0
- package/lib/esm/graph/execution/GraphExecutionResult.js.map +1 -0
- package/lib/esm/graph/execution/GraphNodeExecutor.js +2 -0
- package/lib/esm/graph/execution/GraphNodeExecutor.js.map +1 -0
- package/lib/esm/graph/execution/index.js +11 -0
- package/lib/esm/graph/execution/index.js.map +1 -0
- package/lib/esm/graph/index.js +57 -0
- package/lib/esm/graph/index.js.map +1 -0
- package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js +79 -0
- package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js.map +1 -0
- package/lib/esm/graph/loops/GraphConditionEvaluator.js +58 -0
- package/lib/esm/graph/loops/GraphConditionEvaluator.js.map +1 -0
- package/lib/esm/graph/loops/GraphLoopExecutionContext.js +11 -0
- package/lib/esm/graph/loops/GraphLoopExecutionContext.js.map +1 -0
- package/lib/esm/graph/loops/UntilGraphNodeExecutor.js +71 -0
- package/lib/esm/graph/loops/UntilGraphNodeExecutor.js.map +1 -0
- package/lib/esm/graph/loops/WhileGraphNodeExecutor.js +72 -0
- package/lib/esm/graph/loops/WhileGraphNodeExecutor.js.map +1 -0
- package/lib/esm/graph/loops/index.js +11 -0
- package/lib/esm/graph/loops/index.js.map +1 -0
- package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js +23 -0
- package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js.map +1 -0
- package/lib/esm/graph/pinning/GraphPinningMetadata.js +15 -0
- package/lib/esm/graph/pinning/GraphPinningMetadata.js.map +1 -0
- package/lib/esm/graph/pinning/GraphPinningPolicy.js +29 -0
- package/lib/esm/graph/pinning/GraphPinningPolicy.js.map +1 -0
- package/lib/esm/graph/pinning/GraphPinningService.js +186 -0
- package/lib/esm/graph/pinning/GraphPinningService.js.map +1 -0
- package/lib/esm/graph/pinning/index.js +10 -0
- package/lib/esm/graph/pinning/index.js.map +1 -0
- package/lib/esm/graph/planning/GraphExecutionPlan.js +2 -0
- package/lib/esm/graph/planning/GraphExecutionPlan.js.map +1 -0
- package/lib/esm/graph/planning/GraphExecutionPlanEdge.js +7 -0
- package/lib/esm/graph/planning/GraphExecutionPlanEdge.js.map +1 -0
- package/lib/esm/graph/planning/GraphExecutionPlanLayer.js +2 -0
- package/lib/esm/graph/planning/GraphExecutionPlanLayer.js.map +1 -0
- package/lib/esm/graph/planning/GraphExecutionPlanNode.js +2 -0
- package/lib/esm/graph/planning/GraphExecutionPlanNode.js.map +1 -0
- package/lib/esm/graph/planning/GraphExecutionPlanner.js +192 -0
- package/lib/esm/graph/planning/GraphExecutionPlanner.js.map +1 -0
- package/lib/esm/graph/planning/GraphRelationResolver.js +167 -0
- package/lib/esm/graph/planning/GraphRelationResolver.js.map +1 -0
- package/lib/esm/graph/planning/GraphTopology.js +52 -0
- package/lib/esm/graph/planning/GraphTopology.js.map +1 -0
- package/lib/esm/graph/planning/index.js +13 -0
- package/lib/esm/graph/planning/index.js.map +1 -0
- package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js +39 -0
- package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js.map +1 -0
- package/lib/esm/graph/registry/GraphNodeExecutorResolver.js +22 -0
- package/lib/esm/graph/registry/GraphNodeExecutorResolver.js.map +1 -0
- package/lib/esm/graph/registry/index.js +8 -0
- package/lib/esm/graph/registry/index.js.map +1 -0
- package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js +48 -0
- package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js.map +1 -0
- package/lib/esm/graph/snapshots/index.js +7 -0
- package/lib/esm/graph/snapshots/index.js.map +1 -0
- package/lib/esm/graph/store/GraphCachedValue.js +2 -0
- package/lib/esm/graph/store/GraphCachedValue.js.map +1 -0
- package/lib/esm/graph/store/GraphValueKey.js +7 -0
- package/lib/esm/graph/store/GraphValueKey.js.map +1 -0
- package/lib/esm/graph/store/GraphValueStore.js +71 -0
- package/lib/esm/graph/store/GraphValueStore.js.map +1 -0
- package/lib/esm/graph/store/GraphValueStoreAdapter.js +2 -0
- package/lib/esm/graph/store/GraphValueStoreAdapter.js.map +1 -0
- package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js +64 -0
- package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js.map +1 -0
- package/lib/esm/graph/store/index.js +11 -0
- package/lib/esm/graph/store/index.js.map +1 -0
- package/lib/esm/graph/types.js +2 -0
- package/lib/esm/graph/types.js.map +1 -0
- package/lib/esm/graph/validation/GraphDefinitionValidator.js +28 -0
- package/lib/esm/graph/validation/GraphDefinitionValidator.js.map +1 -0
- package/lib/esm/graph/validation/GraphPortSchemaResolver.js +53 -0
- package/lib/esm/graph/validation/GraphPortSchemaResolver.js.map +1 -0
- package/lib/esm/graph/validation/GraphValueValidator.js +47 -0
- package/lib/esm/graph/validation/GraphValueValidator.js.map +1 -0
- package/lib/esm/graph/validation/index.js +9 -0
- package/lib/esm/graph/validation/index.js.map +1 -0
- package/lib/esm/index.js +3 -3
- package/lib/esm/keycloak/services/KeycloakAuthService.js +2 -2
- package/lib/esm/keycloak/services/KeycloakAuthService.js.map +1 -1
- package/lib/esm/keycloak/services/KeycloakClientService.js +2 -2
- package/lib/esm/keycloak/services/KeycloakClientService.js.map +1 -1
- package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js +2 -2
- package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js.map +1 -1
- package/lib/esm/keycloak/services/KeycloakRealmService.js +2 -2
- package/lib/esm/keycloak/services/KeycloakRealmService.js.map +1 -1
- package/lib/esm/keycloak/services/KeycloakRoleService.js +2 -2
- package/lib/esm/keycloak/services/KeycloakRoleService.js.map +1 -1
- package/lib/esm/keycloak/services/KeycloakService.js +16 -9
- package/lib/esm/keycloak/services/KeycloakService.js.map +1 -1
- package/lib/esm/keycloak/services/KeycloakUserService.js +2 -2
- package/lib/esm/keycloak/services/KeycloakUserService.js.map +1 -1
- package/lib/esm/kibana/services/KibanaAuthService.js +3 -3
- package/lib/esm/kibana/services/KibanaAuthService.js.map +1 -1
- package/lib/esm/kibana/services/KibanaDashboardService.js +3 -3
- package/lib/esm/kibana/services/KibanaDashboardService.js.map +1 -1
- package/lib/esm/kibana/services/KibanaDataViewService.js +2 -2
- package/lib/esm/kibana/services/KibanaDataViewService.js.map +1 -1
- package/lib/esm/kibana/services/KibanaRoleService.js +2 -2
- package/lib/esm/kibana/services/KibanaRoleService.js.map +1 -1
- package/lib/esm/kibana/services/KibanaService.js +16 -9
- package/lib/esm/kibana/services/KibanaService.js.map +1 -1
- package/lib/esm/kibana/services/KibanaSpaceService.js +2 -2
- package/lib/esm/kibana/services/KibanaSpaceService.js.map +1 -1
- package/lib/esm/kibana/services/KibanaUserService.js +2 -2
- package/lib/esm/kibana/services/KibanaUserService.js.map +1 -1
- package/lib/types/graph/constants.d.cts +101 -0
- package/lib/types/graph/constants.d.mts +101 -0
- package/lib/types/graph/decorators.d.cts +6 -0
- package/lib/types/graph/decorators.d.mts +6 -0
- package/lib/types/graph/errors/GraphCycleError.d.cts +12 -0
- package/lib/types/graph/errors/GraphCycleError.d.mts +12 -0
- package/lib/types/graph/errors/GraphExecutionError.d.cts +19 -0
- package/lib/types/graph/errors/GraphExecutionError.d.mts +19 -0
- package/lib/types/graph/errors/GraphInputError.d.cts +12 -0
- package/lib/types/graph/errors/GraphInputError.d.mts +12 -0
- package/lib/types/graph/errors/GraphLoopLimitError.d.cts +12 -0
- package/lib/types/graph/errors/GraphLoopLimitError.d.mts +12 -0
- package/lib/types/graph/errors/GraphPinningError.d.cts +12 -0
- package/lib/types/graph/errors/GraphPinningError.d.mts +12 -0
- package/lib/types/graph/errors/GraphPortError.d.cts +12 -0
- package/lib/types/graph/errors/GraphPortError.d.mts +12 -0
- package/lib/types/graph/errors/GraphStoreError.d.cts +12 -0
- package/lib/types/graph/errors/GraphStoreError.d.mts +12 -0
- package/lib/types/graph/errors/GraphTopologyError.d.cts +12 -0
- package/lib/types/graph/errors/GraphTopologyError.d.mts +12 -0
- package/lib/types/graph/errors/index.d.cts +13 -0
- package/lib/types/graph/errors/index.d.mts +13 -0
- package/lib/types/graph/events/GraphExecutionEvent.d.cts +6 -0
- package/lib/types/graph/events/GraphExecutionEvent.d.mts +6 -0
- package/lib/types/graph/events/GraphExecutionEventEmitter.d.cts +26 -0
- package/lib/types/graph/events/GraphExecutionEventEmitter.d.mts +26 -0
- package/lib/types/graph/events/GraphExecutionEventFactory.d.cts +25 -0
- package/lib/types/graph/events/GraphExecutionEventFactory.d.mts +25 -0
- package/lib/types/graph/events/GraphExecutionObserver.d.cts +17 -0
- package/lib/types/graph/events/GraphExecutionObserver.d.mts +17 -0
- package/lib/types/graph/events/index.d.cts +9 -0
- package/lib/types/graph/events/index.d.mts +9 -0
- package/lib/types/graph/execution/GraphExecutionContext.d.cts +50 -0
- package/lib/types/graph/execution/GraphExecutionContext.d.mts +50 -0
- package/lib/types/graph/execution/GraphExecutionEngine.d.cts +112 -0
- package/lib/types/graph/execution/GraphExecutionEngine.d.mts +112 -0
- package/lib/types/graph/execution/GraphExecutionFrame.d.cts +29 -0
- package/lib/types/graph/execution/GraphExecutionFrame.d.mts +29 -0
- package/lib/types/graph/execution/GraphExecutionResult.d.cts +13 -0
- package/lib/types/graph/execution/GraphExecutionResult.d.mts +13 -0
- package/lib/types/graph/execution/GraphNodeExecutor.d.cts +23 -0
- package/lib/types/graph/execution/GraphNodeExecutor.d.mts +23 -0
- package/lib/types/graph/execution/index.d.cts +10 -0
- package/lib/types/graph/execution/index.d.mts +10 -0
- package/lib/types/graph/index.d.cts +52 -0
- package/lib/types/graph/index.d.mts +52 -0
- package/lib/types/graph/loops/ForeachGraphNodeExecutor.d.cts +27 -0
- package/lib/types/graph/loops/ForeachGraphNodeExecutor.d.mts +27 -0
- package/lib/types/graph/loops/GraphConditionEvaluator.d.cts +23 -0
- package/lib/types/graph/loops/GraphConditionEvaluator.d.mts +23 -0
- package/lib/types/graph/loops/GraphLoopExecutionContext.d.cts +15 -0
- package/lib/types/graph/loops/GraphLoopExecutionContext.d.mts +15 -0
- package/lib/types/graph/loops/UntilGraphNodeExecutor.d.cts +22 -0
- package/lib/types/graph/loops/UntilGraphNodeExecutor.d.mts +22 -0
- package/lib/types/graph/loops/WhileGraphNodeExecutor.d.cts +26 -0
- package/lib/types/graph/loops/WhileGraphNodeExecutor.d.mts +26 -0
- package/lib/types/graph/loops/index.d.cts +10 -0
- package/lib/types/graph/loops/index.d.mts +10 -0
- package/lib/types/graph/pinning/GraphPinningDependencyResolver.d.cts +21 -0
- package/lib/types/graph/pinning/GraphPinningDependencyResolver.d.mts +21 -0
- package/lib/types/graph/pinning/GraphPinningMetadata.d.cts +14 -0
- package/lib/types/graph/pinning/GraphPinningMetadata.d.mts +14 -0
- package/lib/types/graph/pinning/GraphPinningPolicy.d.cts +20 -0
- package/lib/types/graph/pinning/GraphPinningPolicy.d.mts +20 -0
- package/lib/types/graph/pinning/GraphPinningService.d.cts +59 -0
- package/lib/types/graph/pinning/GraphPinningService.d.mts +59 -0
- package/lib/types/graph/pinning/index.d.cts +9 -0
- package/lib/types/graph/pinning/index.d.mts +9 -0
- package/lib/types/graph/planning/GraphExecutionPlan.d.cts +21 -0
- package/lib/types/graph/planning/GraphExecutionPlan.d.mts +21 -0
- package/lib/types/graph/planning/GraphExecutionPlanEdge.d.cts +21 -0
- package/lib/types/graph/planning/GraphExecutionPlanEdge.d.mts +21 -0
- package/lib/types/graph/planning/GraphExecutionPlanLayer.d.cts +13 -0
- package/lib/types/graph/planning/GraphExecutionPlanLayer.d.mts +13 -0
- package/lib/types/graph/planning/GraphExecutionPlanNode.d.cts +20 -0
- package/lib/types/graph/planning/GraphExecutionPlanNode.d.mts +20 -0
- package/lib/types/graph/planning/GraphExecutionPlanner.d.cts +60 -0
- package/lib/types/graph/planning/GraphExecutionPlanner.d.mts +60 -0
- package/lib/types/graph/planning/GraphRelationResolver.d.cts +62 -0
- package/lib/types/graph/planning/GraphRelationResolver.d.mts +62 -0
- package/lib/types/graph/planning/GraphTopology.d.cts +23 -0
- package/lib/types/graph/planning/GraphTopology.d.mts +23 -0
- package/lib/types/graph/planning/index.d.cts +12 -0
- package/lib/types/graph/planning/index.d.mts +12 -0
- package/lib/types/graph/registry/GraphNodeExecutorRegistry.d.cts +25 -0
- package/lib/types/graph/registry/GraphNodeExecutorRegistry.d.mts +25 -0
- package/lib/types/graph/registry/GraphNodeExecutorResolver.d.cts +21 -0
- package/lib/types/graph/registry/GraphNodeExecutorResolver.d.mts +21 -0
- package/lib/types/graph/registry/index.d.cts +7 -0
- package/lib/types/graph/registry/index.d.mts +7 -0
- package/lib/types/graph/snapshots/GraphExecutionSnapshotMapper.d.cts +10 -0
- package/lib/types/graph/snapshots/GraphExecutionSnapshotMapper.d.mts +10 -0
- package/lib/types/graph/snapshots/index.d.cts +6 -0
- package/lib/types/graph/snapshots/index.d.mts +6 -0
- package/lib/types/graph/store/GraphCachedValue.d.cts +20 -0
- package/lib/types/graph/store/GraphCachedValue.d.mts +20 -0
- package/lib/types/graph/store/GraphValueKey.d.cts +18 -0
- package/lib/types/graph/store/GraphValueKey.d.mts +18 -0
- package/lib/types/graph/store/GraphValueStore.d.cts +41 -0
- package/lib/types/graph/store/GraphValueStore.d.mts +41 -0
- package/lib/types/graph/store/GraphValueStoreAdapter.d.cts +32 -0
- package/lib/types/graph/store/GraphValueStoreAdapter.d.mts +32 -0
- package/lib/types/graph/store/InMemoryGraphValueStoreAdapter.d.cts +33 -0
- package/lib/types/graph/store/InMemoryGraphValueStoreAdapter.d.mts +33 -0
- package/lib/types/graph/store/index.d.cts +10 -0
- package/lib/types/graph/store/index.d.mts +10 -0
- package/lib/types/graph/types.d.cts +197 -0
- package/lib/types/graph/types.d.mts +197 -0
- package/lib/types/graph/validation/GraphDefinitionValidator.d.cts +21 -0
- package/lib/types/graph/validation/GraphDefinitionValidator.d.mts +21 -0
- package/lib/types/graph/validation/GraphPortSchemaResolver.d.cts +39 -0
- package/lib/types/graph/validation/GraphPortSchemaResolver.d.mts +39 -0
- package/lib/types/graph/validation/GraphValueValidator.d.cts +27 -0
- package/lib/types/graph/validation/GraphValueValidator.d.mts +27 -0
- package/lib/types/graph/validation/index.d.cts +8 -0
- package/lib/types/graph/validation/index.d.mts +8 -0
- package/lib/types/index.d.cts +2 -2
- package/lib/types/index.d.mts +2 -2
- package/lib/types/keycloak/services/KeycloakService.d.cts +1 -0
- package/lib/types/keycloak/services/KeycloakService.d.mts +1 -0
- package/lib/types/keycloak/types.d.cts +1 -4
- package/lib/types/keycloak/types.d.mts +1 -4
- package/lib/types/kibana/services/KibanaService.d.cts +1 -0
- package/lib/types/kibana/services/KibanaService.d.mts +1 -0
- package/lib/types/kibana/types.d.cts +1 -4
- package/lib/types/kibana/types.d.mts +1 -4
- package/package.json +17 -3
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { GraphConditionType } from "./../constants.js";
|
|
2
|
+
import { GraphExecutionError } from "./../errors/GraphExecutionError.js";
|
|
3
|
+
/**
|
|
4
|
+
* Evaluates loop conditions using built-in comparison types.
|
|
5
|
+
*/
|
|
6
|
+
export class GraphConditionEvaluator {
|
|
7
|
+
/**
|
|
8
|
+
* Evaluates a condition against the given state.
|
|
9
|
+
*
|
|
10
|
+
* @param condition - The condition definition.
|
|
11
|
+
* @param state - The current loop state.
|
|
12
|
+
* @returns `true` when the condition passes.
|
|
13
|
+
*/
|
|
14
|
+
evaluate(condition, state) {
|
|
15
|
+
const left = this.resolveValue(condition.left, state);
|
|
16
|
+
const right = condition.right;
|
|
17
|
+
switch (condition.type) {
|
|
18
|
+
case GraphConditionType.TRUTHY:
|
|
19
|
+
return !!left;
|
|
20
|
+
case GraphConditionType.FALSY:
|
|
21
|
+
return !left;
|
|
22
|
+
case GraphConditionType.EQUALS:
|
|
23
|
+
return left === right;
|
|
24
|
+
case GraphConditionType.NOT_EQUALS:
|
|
25
|
+
return left !== right;
|
|
26
|
+
case GraphConditionType.GREATER_THAN:
|
|
27
|
+
return Number(left) > Number(right);
|
|
28
|
+
case GraphConditionType.GREATER_THAN_OR_EQUAL:
|
|
29
|
+
return Number(left) >= Number(right);
|
|
30
|
+
case GraphConditionType.LESS_THAN:
|
|
31
|
+
return Number(left) < Number(right);
|
|
32
|
+
case GraphConditionType.LESS_THAN_OR_EQUAL:
|
|
33
|
+
return Number(left) <= Number(right);
|
|
34
|
+
case GraphConditionType.EXISTS:
|
|
35
|
+
return left !== undefined && left !== null;
|
|
36
|
+
case GraphConditionType.CUSTOM:
|
|
37
|
+
throw new GraphExecutionError("Custom condition evaluators are not supported in v1", "GRAPH_CUSTOM_CONDITION_UNSUPPORTED");
|
|
38
|
+
default:
|
|
39
|
+
throw new GraphExecutionError(`Unknown condition type '${condition.type}'`, "GRAPH_UNKNOWN_CONDITION_TYPE", { condition });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolves a value that may be a dotted path into the state object.
|
|
44
|
+
*/
|
|
45
|
+
resolveValue(path, state) {
|
|
46
|
+
if (!path)
|
|
47
|
+
return state;
|
|
48
|
+
const parts = path.split(".");
|
|
49
|
+
let current = state;
|
|
50
|
+
for (const part of parts) {
|
|
51
|
+
if (current == null)
|
|
52
|
+
return undefined;
|
|
53
|
+
current = current[part];
|
|
54
|
+
}
|
|
55
|
+
return current;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=GraphConditionEvaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphConditionEvaluator.js","sourceRoot":"","sources":["../../../../src/graph/loops/GraphConditionEvaluator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,0BAAqB;AAClD,OAAO,EAAE,mBAAmB,EAAE,2CAAsC;AAEpE;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAmC,EAAE,KAAc;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAE9B,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,kBAAkB,CAAC,MAAM;gBAC5B,OAAO,CAAC,CAAC,IAAI,CAAC;YAChB,KAAK,kBAAkB,CAAC,KAAK;gBAC3B,OAAO,CAAC,IAAI,CAAC;YACf,KAAK,kBAAkB,CAAC,MAAM;gBAC5B,OAAO,IAAI,KAAK,KAAK,CAAC;YACxB,KAAK,kBAAkB,CAAC,UAAU;gBAChC,OAAO,IAAI,KAAK,KAAK,CAAC;YACxB,KAAK,kBAAkB,CAAC,YAAY;gBAClC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACtC,KAAK,kBAAkB,CAAC,qBAAqB;gBAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YACvC,KAAK,kBAAkB,CAAC,SAAS;gBAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACtC,KAAK,kBAAkB,CAAC,kBAAkB;gBACxC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YACvC,KAAK,kBAAkB,CAAC,MAAM;gBAC5B,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC;YAC7C,KAAK,kBAAkB,CAAC,MAAM;gBAC5B,MAAM,IAAI,mBAAmB,CAC3B,qDAAqD,EACrD,oCAAoC,CACrC,CAAC;YACJ;gBACE,MAAM,IAAI,mBAAmB,CAC3B,2BAA2B,SAAS,CAAC,IAAI,GAAG,EAC5C,8BAA8B,EAC9B,EAAE,SAAS,EAAE,CACd,CAAC;QACN,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,IAAwB,EAAE,KAAc;QAC3D,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,OAAO,GAAY,KAAK,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,OAAO,IAAI,IAAI;gBAAE,OAAO,SAAS,CAAC;YACtC,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context for a single loop execution, carrying the loop metadata and
|
|
3
|
+
* current iteration index.
|
|
4
|
+
*/
|
|
5
|
+
export class GraphLoopExecutionContext {
|
|
6
|
+
constructor(iteration, metadata) {
|
|
7
|
+
this.iteration = iteration;
|
|
8
|
+
this.metadata = metadata;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=GraphLoopExecutionContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphLoopExecutionContext.js","sourceRoot":"","sources":["../../../../src/graph/loops/GraphLoopExecutionContext.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAIpC,YAAY,SAAiB,EAAE,QAA2B;QACxD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { GRAPH_DEFAULT_MAX_LOOP_ITERATIONS, GraphExecutionEventType } from "./../constants.js";
|
|
2
|
+
import { GraphInputError } from "./../errors/GraphInputError.js";
|
|
3
|
+
import { GraphLoopLimitError } from "./../errors/GraphLoopLimitError.js";
|
|
4
|
+
import { GraphConditionEvaluator } from "./GraphConditionEvaluator.js";
|
|
5
|
+
/**
|
|
6
|
+
* Executor for `core.loop.until` nodes.
|
|
7
|
+
*
|
|
8
|
+
* Executes the body at least once, then checks the condition. Repeats until
|
|
9
|
+
* the condition evaluates to true.
|
|
10
|
+
*/
|
|
11
|
+
export class UntilGraphNodeExecutor {
|
|
12
|
+
constructor(engine) {
|
|
13
|
+
this.engine = engine;
|
|
14
|
+
this.evaluator = new GraphConditionEvaluator();
|
|
15
|
+
}
|
|
16
|
+
async execute(input, context) {
|
|
17
|
+
const metadata = this.extractMetadata(context);
|
|
18
|
+
const maxIterations = metadata.maxIterations ?? GRAPH_DEFAULT_MAX_LOOP_ITERATIONS;
|
|
19
|
+
const condition = metadata.condition;
|
|
20
|
+
if (!condition) {
|
|
21
|
+
throw new GraphInputError("until node is missing a condition");
|
|
22
|
+
}
|
|
23
|
+
const statePort = metadata.statePort ?? "state";
|
|
24
|
+
const bodyWorkflow = metadata.body;
|
|
25
|
+
let state = input.state;
|
|
26
|
+
let iteration = 0;
|
|
27
|
+
await context.emit({ type: GraphExecutionEventType.LOOP_STARTED });
|
|
28
|
+
let shouldStop = false;
|
|
29
|
+
do {
|
|
30
|
+
if (iteration >= maxIterations) {
|
|
31
|
+
await context.emit({
|
|
32
|
+
type: GraphExecutionEventType.LOOP_LIMIT_REACHED,
|
|
33
|
+
iteration,
|
|
34
|
+
});
|
|
35
|
+
throw new GraphLoopLimitError(`until loop exceeded max iterations (${maxIterations})`);
|
|
36
|
+
}
|
|
37
|
+
await context.emit({
|
|
38
|
+
type: GraphExecutionEventType.LOOP_ITERATION_STARTED,
|
|
39
|
+
iteration,
|
|
40
|
+
});
|
|
41
|
+
const childResult = await this.engine.execute(bodyWorkflow, { [statePort]: state, iteration }, {
|
|
42
|
+
parentRunId: context.runId,
|
|
43
|
+
path: [...context.path, `iteration:${iteration}`],
|
|
44
|
+
});
|
|
45
|
+
state = childResult.outputs[statePort];
|
|
46
|
+
await context.emit({
|
|
47
|
+
type: GraphExecutionEventType.LOOP_ITERATION_COMPLETED,
|
|
48
|
+
iteration,
|
|
49
|
+
});
|
|
50
|
+
const conditionResult = this.evaluator.evaluate(condition, state);
|
|
51
|
+
await context.emit({
|
|
52
|
+
type: GraphExecutionEventType.LOOP_CONDITION_EVALUATED,
|
|
53
|
+
iteration,
|
|
54
|
+
payload: { result: conditionResult },
|
|
55
|
+
});
|
|
56
|
+
iteration++;
|
|
57
|
+
shouldStop = conditionResult;
|
|
58
|
+
} while (!shouldStop);
|
|
59
|
+
await context.emit({ type: GraphExecutionEventType.LOOP_COMPLETED });
|
|
60
|
+
return { [statePort]: state, iterations: iteration };
|
|
61
|
+
}
|
|
62
|
+
extractMetadata(context) {
|
|
63
|
+
const raw = context.node.graph?.metadata?.loop ??
|
|
64
|
+
context.metadata?.loop;
|
|
65
|
+
if (!raw) {
|
|
66
|
+
throw new GraphInputError("until node is missing loop metadata");
|
|
67
|
+
}
|
|
68
|
+
return raw;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=UntilGraphNodeExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UntilGraphNodeExecutor.js","sourceRoot":"","sources":["../../../../src/graph/loops/UntilGraphNodeExecutor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { GRAPH_DEFAULT_MAX_LOOP_ITERATIONS, GraphExecutionEventType } from "./../constants.js";
|
|
2
|
+
import { GraphInputError } from "./../errors/GraphInputError.js";
|
|
3
|
+
import { GraphLoopLimitError } from "./../errors/GraphLoopLimitError.js";
|
|
4
|
+
import { GraphConditionEvaluator } from "./GraphConditionEvaluator.js";
|
|
5
|
+
/**
|
|
6
|
+
* Executor for `core.loop.while` nodes.
|
|
7
|
+
*
|
|
8
|
+
* Expects input:
|
|
9
|
+
* - `state`: initial state
|
|
10
|
+
*
|
|
11
|
+
* Produces output:
|
|
12
|
+
* - `state`: final state
|
|
13
|
+
* - `iterations`: number of iterations executed
|
|
14
|
+
*/
|
|
15
|
+
export class WhileGraphNodeExecutor {
|
|
16
|
+
constructor(engine) {
|
|
17
|
+
this.engine = engine;
|
|
18
|
+
this.evaluator = new GraphConditionEvaluator();
|
|
19
|
+
}
|
|
20
|
+
async execute(input, context) {
|
|
21
|
+
const metadata = this.extractMetadata(context);
|
|
22
|
+
const maxIterations = metadata.maxIterations ?? GRAPH_DEFAULT_MAX_LOOP_ITERATIONS;
|
|
23
|
+
const condition = metadata.condition;
|
|
24
|
+
if (!condition) {
|
|
25
|
+
throw new GraphInputError("while node is missing a condition");
|
|
26
|
+
}
|
|
27
|
+
const statePort = metadata.statePort ?? "state";
|
|
28
|
+
const bodyWorkflow = metadata.body;
|
|
29
|
+
let state = input.state;
|
|
30
|
+
let iteration = 0;
|
|
31
|
+
await context.emit({ type: GraphExecutionEventType.LOOP_STARTED });
|
|
32
|
+
while (this.evaluator.evaluate(condition, state)) {
|
|
33
|
+
if (iteration >= maxIterations) {
|
|
34
|
+
await context.emit({
|
|
35
|
+
type: GraphExecutionEventType.LOOP_LIMIT_REACHED,
|
|
36
|
+
iteration,
|
|
37
|
+
});
|
|
38
|
+
throw new GraphLoopLimitError(`while loop exceeded max iterations (${maxIterations})`);
|
|
39
|
+
}
|
|
40
|
+
await context.emit({
|
|
41
|
+
type: GraphExecutionEventType.LOOP_CONDITION_EVALUATED,
|
|
42
|
+
iteration,
|
|
43
|
+
payload: { result: true },
|
|
44
|
+
});
|
|
45
|
+
await context.emit({
|
|
46
|
+
type: GraphExecutionEventType.LOOP_ITERATION_STARTED,
|
|
47
|
+
iteration,
|
|
48
|
+
});
|
|
49
|
+
const childResult = await this.engine.execute(bodyWorkflow, { [statePort]: state, iteration }, {
|
|
50
|
+
parentRunId: context.runId,
|
|
51
|
+
path: [...context.path, `iteration:${iteration}`],
|
|
52
|
+
});
|
|
53
|
+
state = childResult.outputs[statePort];
|
|
54
|
+
await context.emit({
|
|
55
|
+
type: GraphExecutionEventType.LOOP_ITERATION_COMPLETED,
|
|
56
|
+
iteration,
|
|
57
|
+
});
|
|
58
|
+
iteration++;
|
|
59
|
+
}
|
|
60
|
+
await context.emit({ type: GraphExecutionEventType.LOOP_COMPLETED });
|
|
61
|
+
return { [statePort]: state, iterations: iteration };
|
|
62
|
+
}
|
|
63
|
+
extractMetadata(context) {
|
|
64
|
+
const raw = context.node.graph?.metadata?.loop ??
|
|
65
|
+
context.metadata?.loop;
|
|
66
|
+
if (!raw) {
|
|
67
|
+
throw new GraphInputError("while node is missing loop metadata");
|
|
68
|
+
}
|
|
69
|
+
return raw;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=WhileGraphNodeExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WhileGraphNodeExecutor.js","sourceRoot":"","sources":["../../../../src/graph/loops/WhileGraphNodeExecutor.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,iCAAiC,EAAE,uBAAuB,EAAE,0BAAqB;AAC1F,OAAO,EAAE,eAAe,EAAE,uCAAkC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,2CAAsC;AACpE,OAAO,EAAE,uBAAuB,EAAE,qCAAkC;AAEpE;;;;;;;;;GASG;AACH,MAAM,OAAO,sBAAsB;IAGjC,YAA6B,MAA4B;QAA5B,WAAM,GAAN,MAAM,CAAsB;QAFxC,cAAS,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAEC,CAAC;IAE7D,KAAK,CAAC,OAAO,CACX,KAA2B,EAC3B,OAA8B;QAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,aAAa,GACjB,QAAQ,CAAC,aAAa,IAAI,iCAAiC,CAAC;QAC9D,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,eAAe,CAAC,mCAAmC,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC;QAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAA+B,CAAC;QAE9D,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACxB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,CAAC,YAAY,EAAE,CAAC,CAAC;QAEnE,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;gBAC/B,MAAM,OAAO,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,uBAAuB,CAAC,kBAAkB;oBAChD,SAAS;iBACV,CAAC,CAAC;gBACH,MAAM,IAAI,mBAAmB,CAC3B,uCAAuC,aAAa,GAAG,CACxD,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,uBAAuB,CAAC,wBAAwB;gBACtD,SAAS;gBACT,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;aAC1B,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,uBAAuB,CAAC,sBAAsB;gBACpD,SAAS;aACV,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAC3C,YAAY,EACZ,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EACjC;gBACE,WAAW,EAAE,OAAO,CAAC,KAAK;gBAC1B,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,aAAa,SAAS,EAAE,CAAC;aAClD,CACF,CAAC;YAEF,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAEvC,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,uBAAuB,CAAC,wBAAwB;gBACtD,SAAS;aACV,CAAC,CAAC;YAEH,SAAS,EAAE,CAAC;QACd,CAAC;QAED,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,CAAC,cAAc,EAAE,CAAC,CAAC;QAErE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACvD,CAAC;IAEO,eAAe,CAAC,OAA8B;QACpD,MAAM,GAAG,GAAI,OAAO,CAAC,IAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI;YACpD,OAAO,CAAC,QAAgB,EAAE,IAAI,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,eAAe,CAAC,qCAAqC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,GAAwB,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/graph/loops
|
|
3
|
+
* @summary Structured loop executors.
|
|
4
|
+
* @description Re-exports the condition evaluator, loop execution context, and foreach/while/until executors.
|
|
5
|
+
*/
|
|
6
|
+
export * from "./GraphConditionEvaluator.js";
|
|
7
|
+
export * from "./GraphLoopExecutionContext.js";
|
|
8
|
+
export * from "./ForeachGraphNodeExecutor.js";
|
|
9
|
+
export * from "./WhileGraphNodeExecutor.js";
|
|
10
|
+
export * from "./UntilGraphNodeExecutor.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/graph/loops/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,6CAA0C;AAC1C,+CAA4C;AAC5C,8CAA2C;AAC3C,4CAAyC;AACzC,4CAAyC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { GraphTopology } from "./../planning/GraphTopology.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the upstream dependency subtree of a node for pinning operations.
|
|
4
|
+
*/
|
|
5
|
+
export class GraphPinningDependencyResolver {
|
|
6
|
+
/**
|
|
7
|
+
* Returns the set of upstream node ids that the given node depends on,
|
|
8
|
+
* excluding the workflow boundary.
|
|
9
|
+
*/
|
|
10
|
+
getDependencies(plan, nodeId) {
|
|
11
|
+
return GraphTopology.upstreamNodes(nodeId, plan.incomingByNode, false);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Returns the full set of node ids to pin: the node itself plus all its
|
|
15
|
+
* upstream dependencies.
|
|
16
|
+
*/
|
|
17
|
+
getPinSet(plan, nodeId) {
|
|
18
|
+
const deps = this.getDependencies(plan, nodeId);
|
|
19
|
+
deps.add(nodeId);
|
|
20
|
+
return deps;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=GraphPinningDependencyResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphPinningDependencyResolver.js","sourceRoot":"","sources":["../../../../src/graph/pinning/GraphPinningDependencyResolver.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,uCAAkC;AAE1D;;GAEG;AACH,MAAM,OAAO,8BAA8B;IACzC;;;OAGG;IACH,eAAe,CAAC,IAAwB,EAAE,MAAc;QACtD,OAAO,aAAa,CAAC,aAAa,CAChC,MAAM,EACN,IAAI,CAAC,cAAc,EACnB,KAAK,CACN,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,IAAwB,EAAE,MAAc;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default pinning metadata applied when `@pinnable()` is used without options.
|
|
3
|
+
*/
|
|
4
|
+
export const DEFAULT_PINNING_METADATA = {
|
|
5
|
+
enabled: true,
|
|
6
|
+
strategy: "manual",
|
|
7
|
+
includeDependencies: true,
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Returns `true` when the given metadata allows pinning.
|
|
11
|
+
*/
|
|
12
|
+
export function isPinnable(metadata) {
|
|
13
|
+
return metadata?.enabled === true && metadata.strategy !== "disabled";
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=GraphPinningMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphPinningMetadata.js","sourceRoot":"","sources":["../../../../src/graph/pinning/GraphPinningMetadata.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAyB;IAC5D,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,QAAQ;IAClB,mBAAmB,EAAE,IAAI;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAA0C;IACnE,OAAO,QAAQ,EAAE,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ,KAAK,UAAU,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DEFAULT_PINNING_METADATA, isPinnable } from "./GraphPinningMetadata.js";
|
|
2
|
+
/**
|
|
3
|
+
* Policy that decides pinning behaviour for a plan node.
|
|
4
|
+
*/
|
|
5
|
+
export class GraphPinningPolicy {
|
|
6
|
+
/** Returns whether the node is allowed to be pinned. */
|
|
7
|
+
canPin(node) {
|
|
8
|
+
return isPinnable(this.getPinningMetadata(node));
|
|
9
|
+
}
|
|
10
|
+
/** Returns whether the engine should attempt to use a pinned value for the node. */
|
|
11
|
+
shouldUsePinnedValue(node) {
|
|
12
|
+
const metadata = this.getPinningMetadata(node);
|
|
13
|
+
return metadata.enabled === true && metadata.strategy !== "disabled";
|
|
14
|
+
}
|
|
15
|
+
/** Returns whether automatic pinning should occur after execution. */
|
|
16
|
+
shouldAutoPin(node) {
|
|
17
|
+
const metadata = this.getPinningMetadata(node);
|
|
18
|
+
return metadata.enabled === true && metadata.strategy === "automatic";
|
|
19
|
+
}
|
|
20
|
+
/** Extracts pinning metadata from a plan node. */
|
|
21
|
+
getPinningMetadata(node) {
|
|
22
|
+
const raw = node.definition?.graph?.metadata?.pinnable ??
|
|
23
|
+
node.metadata?.pinnable;
|
|
24
|
+
return raw
|
|
25
|
+
? { ...DEFAULT_PINNING_METADATA, ...raw }
|
|
26
|
+
: { ...DEFAULT_PINNING_METADATA, enabled: false };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=GraphPinningPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphPinningPolicy.js","sourceRoot":"","sources":["../../../../src/graph/pinning/GraphPinningPolicy.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,kCAA+B;AAE9E;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B,wDAAwD;IACxD,MAAM,CAAC,IAA4B;QACjC,OAAO,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,oFAAoF;IACpF,oBAAoB,CAAC,IAA4B;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ,KAAK,UAAU,CAAC;IACvE,CAAC;IAED,sEAAsE;IACtE,aAAa,CAAC,IAA4B;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ,KAAK,WAAW,CAAC;IACxE,CAAC;IAED,kDAAkD;IAClD,kBAAkB,CAAC,IAA4B;QAC7C,MAAM,GAAG,GACN,IAAI,CAAC,UAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ;YAClD,IAAI,CAAC,QAAgB,EAAE,QAAQ,CAAC;QACnC,OAAO,GAAG;YACR,CAAC,CAAC,EAAE,GAAG,wBAAwB,EAAE,GAAG,GAAG,EAAE;YACzC,CAAC,CAAC,EAAE,GAAG,wBAAwB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACtD,CAAC;CACF"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/graph/pinning/GraphPinningService
|
|
3
|
+
* @summary Service for pinning and unpinning graph node values.
|
|
4
|
+
* @description Computes stable fingerprints, pins/unpins nodes and their upstream dependencies, reads pinned values, and emits pinning events. Pinning is all-or-nothing: if any upstream dependency is not pinnable, the operation fails.
|
|
5
|
+
*/
|
|
6
|
+
import { GRAPH_PINNING_METADATA_KEY } from "./../constants.js";
|
|
7
|
+
import { GraphPinningError } from "./../errors/GraphPinningError.js";
|
|
8
|
+
import { GraphTopology } from "./../planning/GraphTopology.js";
|
|
9
|
+
/**
|
|
10
|
+
* Service that manages pinning and unpinning of graph node values.
|
|
11
|
+
*/
|
|
12
|
+
export class GraphPinningService {
|
|
13
|
+
constructor(store, policy, dependencyResolver) {
|
|
14
|
+
this.store = store;
|
|
15
|
+
this.policy = policy;
|
|
16
|
+
this.dependencyResolver = dependencyResolver;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Pins a node and all its upstream dependencies.
|
|
20
|
+
*
|
|
21
|
+
* @throws {GraphPinningError} when the node or any dependency is not pinnable.
|
|
22
|
+
*/
|
|
23
|
+
async pinNode(options) {
|
|
24
|
+
const plan = options.plan;
|
|
25
|
+
const includeDependencies = options.includeDependencies ?? true;
|
|
26
|
+
const pinSet = includeDependencies
|
|
27
|
+
? this.dependencyResolver.getPinSet(plan, options.nodeId)
|
|
28
|
+
: new Set([options.nodeId]);
|
|
29
|
+
// Validate all-or-nothing
|
|
30
|
+
for (const nodeId of pinSet) {
|
|
31
|
+
const node = plan.nodes.find((n) => n.id === nodeId);
|
|
32
|
+
if (!node) {
|
|
33
|
+
throw new GraphPinningError(`Node '${nodeId}' not found in plan`);
|
|
34
|
+
}
|
|
35
|
+
if (!this.policy.canPin(node)) {
|
|
36
|
+
throw new GraphPinningError(`Node '${nodeId}' is not pinnable`, { nodeId });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Pin dependencies first, then the selected node
|
|
40
|
+
const ordered = this.topologicalOrder(plan, pinSet);
|
|
41
|
+
for (const nodeId of ordered) {
|
|
42
|
+
const node = plan.nodes.find((n) => n.id === nodeId);
|
|
43
|
+
const result = options.result.nodeResults[nodeId];
|
|
44
|
+
if (!result || !result.outputs) {
|
|
45
|
+
throw new GraphPinningError(`Node '${nodeId}' has no completed output to pin`);
|
|
46
|
+
}
|
|
47
|
+
const inputs = result.inputs ?? {};
|
|
48
|
+
const depFingerprints = this.dependencyFingerprints(plan, nodeId, options.result);
|
|
49
|
+
const key = this.createValueKey(options.workflow, node, inputs, depFingerprints, options.namespace);
|
|
50
|
+
const now = new Date().toISOString();
|
|
51
|
+
const cached = {
|
|
52
|
+
key,
|
|
53
|
+
outputs: result.outputs,
|
|
54
|
+
pinned: true,
|
|
55
|
+
createdAt: now,
|
|
56
|
+
updatedAt: now,
|
|
57
|
+
metadata: { ...options.result.metadata, nodeId },
|
|
58
|
+
};
|
|
59
|
+
await this.store.writeCached(key, cached);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Unpins a single node (does not unpin dependents in v1).
|
|
64
|
+
*/
|
|
65
|
+
async unpinNode(options) {
|
|
66
|
+
const key = {
|
|
67
|
+
workflowId: options.workflow.name,
|
|
68
|
+
nodeId: options.nodeId,
|
|
69
|
+
fingerprint: options.fingerprint,
|
|
70
|
+
namespace: options.namespace,
|
|
71
|
+
};
|
|
72
|
+
await this.store.deleteCached(key);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Reads a pinned value for a node, returning `undefined` when no valid
|
|
76
|
+
* pinned value exists.
|
|
77
|
+
*/
|
|
78
|
+
async readPinnedValue(workflow, node, inputs, dependencyFingerprints, namespace) {
|
|
79
|
+
const key = this.createValueKey(workflow, node, inputs, dependencyFingerprints, namespace);
|
|
80
|
+
const cached = await this.store.readCached(key);
|
|
81
|
+
if (cached && cached.pinned) {
|
|
82
|
+
if (cached.expiresAt && new Date(cached.expiresAt) < new Date()) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
return cached;
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Creates a stable value key for a node.
|
|
91
|
+
*/
|
|
92
|
+
createValueKey(workflow, node, inputs, dependencyFingerprints, namespace) {
|
|
93
|
+
return {
|
|
94
|
+
workflowId: workflow.name,
|
|
95
|
+
nodeId: node.id,
|
|
96
|
+
fingerprint: this.computeFingerprint(workflow, node, inputs, dependencyFingerprints),
|
|
97
|
+
namespace,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Computes a stable fingerprint for a node's inputs and dependencies.
|
|
102
|
+
*/
|
|
103
|
+
computeFingerprint(workflow, node, inputs, dependencyFingerprints) {
|
|
104
|
+
const data = {
|
|
105
|
+
workflowId: workflow.name,
|
|
106
|
+
nodeId: node.id,
|
|
107
|
+
nodeKind: node.kind,
|
|
108
|
+
nodeDefinitionVersion: node.definition?.graph?.metadata?.version,
|
|
109
|
+
inputs: this.stableSerialize(inputs),
|
|
110
|
+
dependencyFingerprints: this.stableSerialize(dependencyFingerprints),
|
|
111
|
+
};
|
|
112
|
+
const json = this.stableSerialize(data);
|
|
113
|
+
// Use a deterministic non-cryptographic hash that works in both browser
|
|
114
|
+
// and Node environments without requiring `node:crypto`.
|
|
115
|
+
return this.simpleHash(json);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Returns a topological ordering of the given node set.
|
|
119
|
+
*/
|
|
120
|
+
topologicalOrder(plan, nodeSet) {
|
|
121
|
+
const result = [];
|
|
122
|
+
const visited = new Set();
|
|
123
|
+
const visit = (nodeId) => {
|
|
124
|
+
if (visited.has(nodeId))
|
|
125
|
+
return;
|
|
126
|
+
visited.add(nodeId);
|
|
127
|
+
const deps = GraphTopology.upstreamNodes(nodeId, plan.incomingByNode, false);
|
|
128
|
+
for (const dep of deps) {
|
|
129
|
+
if (nodeSet.has(dep))
|
|
130
|
+
visit(dep);
|
|
131
|
+
}
|
|
132
|
+
result.push(nodeId);
|
|
133
|
+
};
|
|
134
|
+
for (const nodeId of nodeSet)
|
|
135
|
+
visit(nodeId);
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Computes fingerprints for all upstream dependencies of a node.
|
|
140
|
+
*/
|
|
141
|
+
dependencyFingerprints(plan, nodeId, result) {
|
|
142
|
+
const deps = this.dependencyResolver.getDependencies(plan, nodeId);
|
|
143
|
+
const fingerprints = {};
|
|
144
|
+
for (const dep of deps) {
|
|
145
|
+
const node = plan.nodes.find((n) => n.id === dep);
|
|
146
|
+
if (node) {
|
|
147
|
+
const depResult = result.nodeResults[dep];
|
|
148
|
+
const inputs = depResult?.inputs ?? {};
|
|
149
|
+
const nestedDeps = this.dependencyFingerprints(plan, dep, result);
|
|
150
|
+
fingerprints[dep] = this.computeFingerprint(plan.workflow, node, inputs, nestedDeps);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return fingerprints;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Serializes a value with recursively sorted keys for stable hashing.
|
|
157
|
+
*/
|
|
158
|
+
stableSerialize(value) {
|
|
159
|
+
if (value === null || typeof value !== "object") {
|
|
160
|
+
return JSON.stringify(value);
|
|
161
|
+
}
|
|
162
|
+
if (Array.isArray(value)) {
|
|
163
|
+
return `[${value.map((v) => this.stableSerialize(v)).join(",")}]`;
|
|
164
|
+
}
|
|
165
|
+
const keys = Object.keys(value).sort();
|
|
166
|
+
const pairs = keys.map((k) => `${JSON.stringify(k)}:${this.stableSerialize(value[k])}`);
|
|
167
|
+
return `{${pairs.join(",")}}`;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Simple non-cryptographic hash for browser environments where
|
|
171
|
+
* `node:crypto` is unavailable. Produces a deterministic hex-like string
|
|
172
|
+
* from the input. This is NOT cryptographically secure but is sufficient
|
|
173
|
+
* for fingerprint-based cache keys.
|
|
174
|
+
*/
|
|
175
|
+
simpleHash(str) {
|
|
176
|
+
let hash = 0;
|
|
177
|
+
for (let i = 0; i < str.length; i++) {
|
|
178
|
+
const char = str.charCodeAt(i);
|
|
179
|
+
hash = (hash << 5) - hash + char;
|
|
180
|
+
hash |= 0;
|
|
181
|
+
}
|
|
182
|
+
return `fp_${Math.abs(hash).toString(16).padStart(8, "0")}_${str.length}`;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
void GRAPH_PINNING_METADATA_KEY;
|
|
186
|
+
//# sourceMappingURL=GraphPinningService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphPinningService.js","sourceRoot":"","sources":["../../../../src/graph/pinning/GraphPinningService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,0BAA0B,EAAE,0BAAqB;AAC1D,OAAO,EAAE,iBAAiB,EAAE,yCAAoC;AAGhE,OAAO,EAAE,aAAa,EAAE,uCAAkC;AAe1D;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC9B,YACmB,KAAsB,EACtB,MAA0B,EAC1B,kBAAkD;QAFlD,UAAK,GAAL,KAAK,CAAiB;QACtB,WAAM,GAAN,MAAM,CAAoB;QAC1B,uBAAkB,GAAlB,kBAAkB,CAAgC;IAClE,CAAC;IAEJ;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,OAA4B;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,IAA0B,CAAC;QAChD,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,IAAI,CAAC;QAEhE,MAAM,MAAM,GAAG,mBAAmB;YAChC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;YACzD,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAE9B,0BAA0B;QAC1B,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,iBAAiB,CAAC,SAAS,MAAM,qBAAqB,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,iBAAiB,CACzB,SAAS,MAAM,mBAAmB,EAClC,EAAE,MAAM,EAAE,CACX,CAAC;YACJ,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAE,CAAC;YACtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM,IAAI,iBAAiB,CACzB,SAAS,MAAM,kCAAkC,CAClD,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YACnC,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAClF,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACpG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,MAAM,GAAqB;gBAC/B,GAAG;gBACH,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,GAAG;gBACd,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE;aACjD,CAAC;YACF,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,OAA8B;QAC5C,MAAM,GAAG,GAAkB;YACzB,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CACnB,QAAiC,EACjC,IAA4B,EAC5B,MAA4B,EAC5B,sBAA8C,EAC9C,SAAkB;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,SAAS,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;gBAChE,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,cAAc,CACZ,QAAiC,EACjC,IAA4B,EAC5B,MAA4B,EAC5B,sBAA8C,EAC9C,SAAkB;QAElB,OAAO;YACL,UAAU,EAAE,QAAQ,CAAC,IAAI;YACzB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,CAAC;YACpF,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,kBAAkB,CAChB,QAAiC,EACjC,IAA4B,EAC5B,MAA4B,EAC5B,sBAA8C;QAE9C,MAAM,IAAI,GAAG;YACX,UAAU,EAAE,QAAQ,CAAC,IAAI;YACzB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,qBAAqB,EAAG,IAAI,CAAC,UAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO;YACzE,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YACpC,sBAAsB,EAAE,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC;SACrE,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACxC,wEAAwE;QACxE,yDAAyD;QACzD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,IAAwB,EACxB,OAAoB;QAEpB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,MAAc,EAAE,EAAE;YAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO;YAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAC7E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,sBAAsB,CAC5B,IAAwB,EACxB,MAAc,EACd,MAA4B;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;YAClD,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBAClE,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,KAAc;QACpC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACpE,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAE,KAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CACzE,CAAC;QACF,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACK,UAAU,CAAC,GAAW;QAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;YACjC,IAAI,IAAI,CAAC,CAAC;QACZ,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;IAC5E,CAAC;CACF;AAED,KAAK,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/graph/pinning
|
|
3
|
+
* @summary Graph pinning subsystem.
|
|
4
|
+
* @description Re-exports the pinning metadata, policy, dependency resolver, and service.
|
|
5
|
+
*/
|
|
6
|
+
export * from "./GraphPinningMetadata.js";
|
|
7
|
+
export * from "./GraphPinningPolicy.js";
|
|
8
|
+
export * from "./GraphPinningDependencyResolver.js";
|
|
9
|
+
export * from "./GraphPinningService.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/graph/pinning/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,0CAAuC;AACvC,wCAAqC;AACrC,oDAAiD;AACjD,yCAAsC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphExecutionPlan.js","sourceRoot":"","sources":["../../../../src/graph/planning/GraphExecutionPlan.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/graph/planning/GraphExecutionPlanEdge
|
|
3
|
+
* @summary Plan edge type for the execution plan.
|
|
4
|
+
* @description Represents a directed value route between two endpoints (node-to-node or node-to-workflow-boundary).
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=GraphExecutionPlanEdge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphExecutionPlanEdge.js","sourceRoot":"","sources":["../../../../src/graph/planning/GraphExecutionPlanEdge.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphExecutionPlanLayer.js","sourceRoot":"","sources":["../../../../src/graph/planning/GraphExecutionPlanLayer.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphExecutionPlanNode.js","sourceRoot":"","sources":["../../../../src/graph/planning/GraphExecutionPlanNode.ts"],"names":[],"mappings":""}
|