package caps import ( "context" abiv1 "git.dev.alexdunmow.com/block/core/abi/v1" "git.dev.alexdunmow.com/block/core/plugin" ) // bridgeStub implements plugin.PluginBridge over bridge.* capability calls. // // The bridge shares in-process Go values today; across sandboxes only the // registration/lookup *surface* serializes — the service value itself cannot // cross. RegisterService therefore forwards only plugin/service names (the // value is dropped), and GetService returns nil (availability is checked but a // typed value cannot be reconstructed guest-side). Typed cross-plugin // invocation is an open ABI item (core/docs/wasm-abi.md). type bridgeStub struct{ base } var _ plugin.PluginBridge = (*bridgeStub)(nil) // RegisterService has no error channel; a transport failure is dropped. func (s *bridgeStub) RegisterService(pluginName, serviceName string, _ any) { req := &abiv1.BridgeRegisterServiceRequest{PluginName: pluginName, ServiceName: serviceName} _ = s.invoke(context.Background(), "register_service", req, &abiv1.BridgeRegisterServiceResponse{}) } // GetService reports availability host-side but cannot return the concrete Go // value across the sandbox boundary, so it always returns nil. Callers using // plugin.GetServiceAs correctly observe (zero, false). func (s *bridgeStub) GetService(pluginName, serviceName string) any { req := &abiv1.BridgeGetServiceRequest{PluginName: pluginName, ServiceName: serviceName} _ = s.invoke(context.Background(), "get_service", req, &abiv1.BridgeGetServiceResponse{}) return nil }