Skip to navigation

Bridge (Validation)

View as Markdown

Bridge behavior in the UE plugin mirrors the core SDK bridge slice: validation requests go to the API, and the plugin caches validation state, active presets, and available rulesets in BridgeSlice.

Core Types

USTRUCT(BlueprintType)
struct FBridgeValidationContext {
UPROPERTY(BlueprintReadOnly) FString NpcStateJson;
UPROPERTY(BlueprintReadOnly) FString WorldStateJson;
UPROPERTY(BlueprintReadOnly) FString ConstraintsJson;
};
USTRUCT(BlueprintType)
struct FValidationResult {
UPROPERTY(BlueprintReadOnly) bool bValid;
UPROPERTY(BlueprintReadOnly) FString Reason;
UPROPERTY(BlueprintReadOnly) FAgentAction CorrectedAction;
};

FBridgeRule and FDirectiveRuleSet mirror the API-facing rule metadata returned by the current backend.

Validate An Action

#include "RuntimeStore.h"
#include "RuntimeConfig.h"
#include "CLI/CliOperations.h"
auto Store = createSDKStore();
SDKConfig::SetApiConfig(TEXT("https://api.forboc.ai"), ApiKey);
FAgentAction Action = TypeFactory::Action(TEXT("OPEN_GATE"), TEXT("north_gate"));
Action.PayloadJson = TEXT("{\"gateId\":\"north_gate\"}");
FBridgeValidationContext Context;
Context.NpcStateJson = TEXT("{\"alertLevel\":0}");
Context.WorldStateJson = TEXT("{\"curfew\":false}");
FValidationResult Result = SDKOps::ValidateBridge(Store, Action, Context);

Rules And Presets

Use the bridge thunks or the synchronous wrappers to inspect server-side rules:

TArray<FBridgeRule> Rules = SDKOps::BridgeRules(Store);
TArray<FDirectiveRuleSet> Rulesets = SDKOps::RulesList(Store);
TArray<FString> PresetIds = SDKOps::RulesPresets(Store);
FDirectiveRuleSet Preset = SDKOps::BridgePreset(Store, TEXT("rpg"));

To register or delete a ruleset:

FDirectiveRuleSet Ruleset;
Ruleset.Id = TEXT("market-curfew");
Ruleset.RulesetId = TEXT("market-curfew");
SDKOps::RulesRegister(Store, Ruleset);
SDKOps::RulesDelete(Store, TEXT("market-curfew"));

Slice Behavior

The current slice tracks:

  • LastValidation
  • Status
  • Error
  • ActivePresets
  • AvailableRulesets
  • AvailablePresetIds

ClearBridgeValidation only clears the last validation/status/error fields. It does not wipe cached presets or rulesets.

Direct Thunks

If you want parity with packages/core, dispatch:

  • rtk::validateBridgeThunk(Action, Context, NpcId)
  • rtk::getBridgeRulesThunk()
  • rtk::loadBridgePresetThunk(PresetName)
  • rtk::listRulesetsThunk()
  • rtk::listRulePresetsThunk()
  • rtk::registerRulesetThunk(Ruleset)
  • rtk::deleteRulesetThunk(RulesetId)