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

1USTRUCT(BlueprintType)
2struct FBridgeValidationContext {
3 UPROPERTY(BlueprintReadOnly) FString NpcStateJson;
4 UPROPERTY(BlueprintReadOnly) FString WorldStateJson;
5 UPROPERTY(BlueprintReadOnly) FString ConstraintsJson;
6};
7
8USTRUCT(BlueprintType)
9struct FValidationResult {
10 UPROPERTY(BlueprintReadOnly) bool bValid;
11 UPROPERTY(BlueprintReadOnly) FString Reason;
12 UPROPERTY(BlueprintReadOnly) FAgentAction CorrectedAction;
13};

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

Validate An Action

1#include "RuntimeStore.h"
2#include "RuntimeConfig.h"
3#include "CLI/CliOperations.h"
4
5auto Store = createSDKStore();
6SDKConfig::SetApiConfig(TEXT("https://api.forboc.ai"), ApiKey);
7
8FAgentAction Action = TypeFactory::Action(TEXT("OPEN_GATE"), TEXT("north_gate"));
9Action.PayloadJson = TEXT("{\"gateId\":\"north_gate\"}");
10
11FBridgeValidationContext Context;
12Context.NpcStateJson = TEXT("{\"alertLevel\":0}");
13Context.WorldStateJson = TEXT("{\"curfew\":false}");
14
15FValidationResult Result = SDKOps::ValidateBridge(Store, Action, Context);

Rules And Presets

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

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

To register or delete a ruleset:

1FDirectiveRuleSet Ruleset;
2Ruleset.Id = TEXT("market-curfew");
3Ruleset.RulesetId = TEXT("market-curfew");
4
5SDKOps::RulesRegister(Store, Ruleset);
6SDKOps::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)